For information about OpenAFS's participation in the Google Summer of Code project, please see this page.
The following list represents some of our ideas and wishes for the project. However, suggesting your own idea is always encouraged. Please review the OpenAFS Gerrit and OpenAFS Contrib for projects already in progress.
The OpenAFS afsio utility is a command-line client for interacting with the AFS filesystem without requiring a kernel module. Currently, afsio is limited to anonymous read and write operations. This project aims to expand afsio's capabilities, enabling authenticated access, mount point creation within AFS volumes, and manipulation of Access Control Lists (ACLs).
This enhancement would allow site administrators and developers to manage and configure OpenAFS cells using only userspace tools, simplifying deployment and administration.
netcat (nc) is a versatile utility for reading and writing data over TCP/UDP connections. This project aims to create a similar tool specifically for Rx, the network protocol used by OpenAFS. This new tool will provide a simple and powerful way to interact with Rx-based services, enabling automated testing, debugging, and scripting, much like netcat does for TCP/UDP. Prior knowledge of OpenAFS or Rx is not required, making this a great project for learning about network protocols.
This project focuses on creating low-level language bindings for Rx, the network protocol used by OpenAFS. These bindings will enable developers to interact with Rx services directly from languages like Python, facilitating the development of testing tools, higher-level utilities, and integrations with other systems.
This project aims to create a GNOME Shell extension that provides a graphical interface for managing the OpenAFS client on Linux desktops. The extension will allow users to easily start and stop the OpenAFS client, acquire tokens, and potentially perform other useful user actions or configuration changes, all from within the GNOME Shell environment.
Currently, OpenAFS fileserver installations require manual configuration of command-line options to specify the amount of memory used by the fileserver process. These options need to be carefully tuned to the host system, and existing presets are often inadequate for modern environments. This project aims to replace the manual configuration with an autotuning mode, allowing the fileserver to automatically adjust its memory footprint based on the available system resources. A starting point for this implementation is already available in the OpenAFS Gerrit code review system.
The OpenAFS codebase has existing unit tests, implemented with a mix of Perl and C, and rely on the C-TAP test harness. This project aims to design and develop a more extensible and consistent framework for writing, running, and maintaining unit tests for the various components of OpenAFS. This will improve test coverage, make it easier for developers to write new tests, and ensure consistency across the codebase.
k6 is a modern, open-source load testing tool. The xk6 project allows for building custom k6 binaries with support for new protocols. This project investigates using k6 to perform load testing of OpenAFS clients, fileservers, and database servers by developing extensions for OpenAFSâs Rx RPCs.
Various C language static analyzers are used periodically to check the OpenAFS codebase. However, a challenge is managing false positives and creating a system for ongoing, automated analysis and reporting. This project aims to develop a system to periodically run static analyzers on the OpenAFS codebase using the OpenAFS Buildbot, generate useful reports, and prevent new issues from being introduced. The focus will be on minimizing false positives and providing actionable information to developers.
OpenAFS provides a suite of command-line tools for managing and interacting with the distributed file system. Currently, these tools primarily output human-readable text, which can be difficult to parse and use in automated scripts and workflows. Modern systems and automation tools often rely on structured data formats like JSON for interoperability and ease of processing.
This 12-week project aims to enhance selected OpenAFS command-line tools by adding support for JSON-formatted output. This will make it easier to integrate OpenAFS management tasks into automated scripts, monitoring systems, and other tools that consume structured data.
OpenAFS is a distributed file system that relies on the Linux kernel's memory management for efficient data handling. The kernel's folio API allows for managing groups of contiguous pages as a single unit. While OpenAFS currently uses folios, it does so only in a limited way, treating each folio as equivalent to a single page. This project focuses on extending OpenAFS's folio usage to leverage multi-page folios â contiguous blocks of memory larger than a single page â to potentially improve efficiency.
The Linux kernel's move towards folios, and particularly multi-page folios, offers several potential advantages:
This 12-week project will investigate and implement the use of multi-page folios within the OpenAFS Linux kernel module. This will involve:
OpenAFS provides a suite of command-line tools for managing and interacting with the distributed file system. Currently, these tools lack bash and zsh command-line completion, making them less user-friendly and efficient to use, especially for complex commands or unfamiliar users. This project aims to implement comprehensive Bash completion for the most commonly used OpenAFS commands, significantly improving the command-line experience. The preferred solution would automatically add new command line completions as new options and subcommands are added to the code base.