qdrant/qdrant

Implement S3 snapshot manager

Opened this issue ยท 11 comments

Is your feature request related to a problem? Please describe.

Continuation of the issue #3324

In previous iterations we decomposed Snapshot manager into multiple implementations, depending of the storage backend.

impl SnapshotStorageS3 {

But SnapshotStorageS3 is currently not implemented and not used.

Describe the solution you'd like

  • Implement missing functions in SnapshotStorageS3
  • Alter the settings, to allow explicitly select between local FS and S3
    Example:
storage:

  # Where to store snapshots
  snapshots_path: ./snapshots
  
  s3_config: 
    bucket: "s3://hello-world"
  
  snapshots_storage: "s3" | "local" # "local" - default

Describe alternatives you've considered

Additional context

There are some notable previous attempts which might be helpful - #3430

/bounty $200

## ๐Ÿ’Ž $200 bounty โ€ข Qdrant

### Steps to solve:
1. Start working: Comment /attempt #4109 with your implementation plan
2. Submit work: Create a pull request including /claim #4109 in the PR body to claim the bounty
3. Receive payment: 100% of the bounty is received 2-5 days post-reward. Make sure you are eligible for payouts

### Additional opportunities:
- ๐Ÿ”ด Livestream on Algora TV while solving this bounty & earn $200 upon merge! Comment /livestream once live

Thank you for contributing to qdrant/qdrant!

Add a bounty โ€ข Share on socials

Attempt Started (GMT+0) Solution
๐Ÿ”ด @varshith257 Apr 25, 2024, 8:18:54 PM WIP
๐ŸŸข @kemkemG0 Apr 29, 2024, 10:07:24 PM #4150
๐Ÿ”ด @kid-116 Apr 30, 2024, 7:26:40 PM WIP
๐ŸŸข @abhishek818 May 1, 2024, 4:01:36 AM WIP

@generall I would like to solve this issue with your guidance though I am new to this repo :)
/attempt #4109

What are the expected functions to fully implement SnapshotStorageS3?

impl SnapshotStorageS3 {
    async fn delete_snapshot(&self, _snapshot_path: &Path) -> CollectionResult<bool> {
        unimplemented!()
    }

    async fn list_snapshots(
        &self,
        _directory: &Path,
    ) -> CollectionResult<Vec<SnapshotDescription>> {
        unimplemented!()
    }

    async fn store_file(
        &self,
        _source_path: &Path,
        _target_path: &Path,
    ) -> CollectionResult<SnapshotDescription> {
        unimplemented!()
    }

    async fn get_stored_file(
        &self,
        _storage_path: &Path,
        _local_path: &Path,
    ) -> CollectionResult<()> {
        unimplemented!()
    }
}

Let me give it a shot as well : )

/attempt #4109

@kemkemG0 I am almost done with it. Can you please look at another issue rather waste of efforts? :)

/attempt #4109

/attempt #4109

Algora profile Completed bounties Tech Active attempts Options
@abhishek818    1 Qdrant bounty
+ 2 bounties from 2 projects
JavaScript, TypeScript
Cancel attempt

๐Ÿ’ก @kemkemG0 submitted a pull request that claims the bounty. You can visit your bounty board to reward.

๐ŸŽ‰๐ŸŽˆ @kemkemG0 has been awarded $200! ๐ŸŽˆ๐ŸŽŠ