OpenAFS Logo
OpenAFS Workshop

Google Summer of Code Project Ideas

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.

Idea: afsio: Add Mount point and ACL creation support

Project Size: 12 weeks
Skill Level: Intermediate
Languages: C

Description

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.

Skills Required

Idea: netcat for rx

Project Size: 12 weeks
Skill Level: Intermediate
Languages: C

Description

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.

Skills Required

Idea: Rx language bindings

Project Size: 12 weeks
Skill Level: Intermediate
Languages: C

Description

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.

Skills Required

Idea: Develop a GNOME Shell Extension for OpenAFS

Project Size: 12 weeks
Skill Level: Basic
Languages: Javascript

Description

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.

Skills Required

Idea: Implement Fileserver Memory Autotuning

Project Size: 12 weeks
Skill Level: Intermediate
Languages: C

Description

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.

Skills Required

Idea: Develop a Unit Test Automation Framework

Project Size: 12 weeks
Skill Level: Intermediate
Languages: C, Python

Description

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.

Skills Required

Idea: OpenAFS Client/Server Load Testing with K6

Project Size: 12 weeks
Skill Level: Intermediate
Languages: C, javascript

Description

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.

Skills Required

Idea: C language static code analysis

Project Size: 12 weeks
Skill Level: Intermediate
Languages: C, Python

Description

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.

Skills Required

Idea: Enhance OpenAFS Command-Line Tools with JSON Output

Project Size: 12 weeks
Skill Level: Intermediate
Languages: C

Description

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.

Skills Required

Idea: OpenAFS Linux kernel module: Multi-page folio support

Project Size: 12 weeks
Skill Level: Advanced
Languages: C

Description

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:

  1. Identifying Candidate Areas: Analyzing the OpenAFS codebase to pinpoint areas where using multi-page folios would be most beneficial. This includes examining read, write, and metadata operation paths.
  2. Implementing Multi-Page Folio Support: Modifying the code to allocate, manage, and operate on multi-page folios where appropriate. This will involve careful consideration of memory allocation strategies, data transfer mechanisms, and interactions with the page cache.
  3. Handling Compatibility: Ensuring the changes work seamlessly with different kernel versions and configurations, including those with varying levels of folio support
  4. Testing: Thoroughly testing the modified code to ensure correctness and stability.

Skills Required

Idea: Implement Command-line Completion for OpenAFS Commands

Project Size: 12 weeks
Skill Level: Intermediate
Languages: C, Shell

Description

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.

Skills Required