Skip to content

Google Summer of Code 2023

xiaomin tang edited this page Feb 7, 2023 · 2 revisions

Implement CPU shares control for compute-intensive tasks

  • Mentor name: Ruihang Xia
  • Mentor email: [email protected]
  • Project type: 350 hours project
  • Difficulty: advance
  • Skill needed:
    • Rust
  • Description of project:
    • This project is about providing a task runtime that are able to control CPU shares available to each task based on the upper-level context, like task group or task id. This is a fundamental building block for GreptimeDB to implement multi-tenants resource control mechanism.
  • Steps to evaluate an applicant for the project: TBD
  • What the first 2 weeks of work would look like during the internship:
    • Get familiar with GreptimeDB's query engine and tenant system
    • Understand how a runtime works and begin to think about how it would be implemented.

Make resource management system dynamic configurable

  • Mentor name: Ruihang Xia
  • Mentor email: [email protected]
  • Project type: 350 hours project
  • Difficulty: intermediate
  • Skill needed:
    • Rust
    • Networking
  • Description of project:
    • The goal of this project is to implement a dynamic and convenient configure interface for GreptimeDB's resource management system.
  • Steps to evaluate an applicant for the project: TBD
  • What the first 2 weeks of work would look like during the internship:
    • Get familiar with GreptimeDB's existing configuration framework
    • Get familiar with GreptimeDB's public admin APIs

Support compound dictionary array for query engine

  • Mentor name: Lei Huang
  • Mentor email: [email protected]
  • Project type: 350 hours project
  • Difficulty: intermediate
  • Skill needed:
    • Rust
    • Apache Arrow
  • Description of project:
    • Extend our query engine to be able to process dictionary encoded data format. This is useful for reading and computing columns with a limit value set.
  • Steps to evaluate an applicant for the project: TBD
  • What the first 2 weeks of work would look like during the internship:
    • Get familiar with GreptimeDB's query engine
    • Get familiar with Apache Arrow

Add supports for Duration and Interval data type

  • Mentor name: Lei Huang
  • Mentor email: [email protected]
  • Project type: 350 hours project
  • Difficulty: intermediate
  • Skill needed:
    • Rust
    • SQL
  • Description of project:
    • Duration type measures a range of time in either seconds, milliseconds, micro seconds or nanoseconds. And Interval counts days between two time. They are powerful types to help modeling real-world time series scenarios.
  • What the first 2 weeks of work would look like during the internship:
    • Get familiar with GreptimeDB's query engine
    • Get familiar with GreptimeDB's type system

Truncate Table

  • Mentor name: Yingwen Yang
  • Mentor email: [email protected]
  • Project type: 350 hour project
  • Difficulty: advance
  • Description of project
    • Implement TRUNCATE TABLE for the database. TRUNCATE TABLE removes all rows from a table. It is similar to the DELETE statement with no WHERE clause but is faster than deleting by row.
  • Skills needed
    • Rust
  • Steps to evaluate an applicant for the project
    • Build and run the database in standalone mode
    • Add a new variant (Truncate) to the RegionMetaAction in storage/src/manifest/action.rs
    • Fix all compiler errors
    • Add a new unittest to the tests mod in storage/src/manifest/region.rs that writes the RegionMetaAction::Truncate action to the manifest and loads it from the manifest
    • Open a pull request against greptimedb:develop branch with a branch that you created from your forked repo

Fault Injection Test

  • Mentor name: Yingwen Yang
  • Mentor email: [email protected]
  • Project type: 350 hour project
  • Difficulty: intermediate
  • Skills needed
    • Rust
  • Description of project
    • Test the storage engine with fault injection.
    • Use fail-rs to inject fail points to the storage engine and trigger them in the unit test.
    • Implement a unit test framework to drive the fault injection tests.
    • Add more test cases
  • Steps to evaluate an applicant for the project
    • Build and run the database in standalone mode
    • Use fail-rs to inject a fail point to the storage engine storage/src
Clone this wiki locally