quickwit-oss / quickwit-oss/quickwit

Distributed Storage.

Open
#1,150 7 comments 3 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

enhancement
Dominant language
Rust
Stars
11.7k
Forks
597
Avg merge
2d 22h
Merged PRs (30d)
37

Description

Quickwit uses a Storage abstraction to store its data.
While the entire system has been designed to work with an object storage,
there are some benefit to offer a local filesystem storage:
a lower latency, and it is always nice to have that kind of batteries included.

Currently Quickwit offers such a file storage implementation, but this implementation does not work in a distributed environment.
We would like a simple replicated file storage.

Details

Any node should be able to access a file that is on one of the other
node of the cluster through gRPC.

Leaf nodes will host this data.
When distributed a search request amongst the available leaf nodes,
we currently use rendez-vous hashing to define some affinity between
a split and a node.

We want the file placement logic to also pick the 2 replica with the highest affinity. (Let's start with a hardcoded number of replicas)

The metastore API can be extended to deal with the new metadata.

Pitfalls

Raft etc. is not required here. We assume the consistency is dealt with in the metastore API.

The solution needs however to ensure that if a put operation is not entirely successful (e.g. files could not be pushed to two replicas), we never end up with "dangling files" that never get deleted.

Out of scope

  • This is not an object storage we are building. We do NOT want striping, or erasure coding.
  • We do NOT want to let user modifying files. A put request over an existing file can return an error. The storage trait should give a good idea of how restricted the API is.
  • In this ticket, you may discuss how the loss of replica should be handled, but do not implement this.

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Read the existing Storage abstraction and metastore API first, then trace how leaf nodes handle files and how rendez-vous hashing assigns splits. Define the replicated placement and failure-cleanup behavior, including gRPC access between nodes; done means successful puts expose both replicas without leaving dangling files after partial failure.

Written by the indexing model from the issue text.

Assessment

Tech stack
grpc, rust
Domain
distributed-systems
Issue type
Feature
Difficulty
5/5
Estimated time
Over a week
Activity status
Stale
Clarity
Mostly clear
Newbie friendliness
35/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.