diff options
author | Alex Auvolat <alex@adnab.me> | 2021-03-10 16:21:56 +0100 |
---|---|---|
committer | Alex Auvolat <alex@adnab.me> | 2021-03-10 16:21:56 +0100 |
commit | f319a7d3740ba8b83c9c0eae27edfda1c1d14c03 (patch) | |
tree | efde4606ad33dcf5ad357f82553ad3b07d4a9858 /src/api/s3_copy.rs | |
parent | 6a3dcf39740cda27e61b93582b6fea66991ec4f2 (diff) | |
download | garage-f319a7d3740ba8b83c9c0eae27edfda1c1d14c03.tar.gz garage-f319a7d3740ba8b83c9c0eae27edfda1c1d14c03.zip |
Refactor model stuff, including cleaner CRDTs
Diffstat (limited to 'src/api/s3_copy.rs')
-rw-r--r-- | src/api/s3_copy.rs | 13 |
1 files changed, 8 insertions, 5 deletions
diff --git a/src/api/s3_copy.rs b/src/api/s3_copy.rs index b6ec48b0..c6c30095 100644 --- a/src/api/s3_copy.rs +++ b/src/api/s3_copy.rs @@ -66,25 +66,28 @@ pub async fn handle_copy( .await?; let source_version = source_version.ok_or(Error::NotFound)?; - let dest_version = Version::new( + let mut dest_version = Version::new( new_uuid, dest_bucket.to_string(), dest_key.to_string(), false, - source_version.blocks().to_vec(), ); + for (bk, bv) in source_version.blocks.items().iter() { + dest_version.blocks.put(*bk, *bv); + } let dest_object = Object::new( dest_bucket.to_string(), dest_key.to_string(), vec![dest_object_version], ); let dest_block_refs = dest_version - .blocks() + .blocks + .items() .iter() .map(|b| BlockRef { - block: b.hash, + block: b.1.hash, version: new_uuid, - deleted: false, + deleted: false.into(), }) .collect::<Vec<_>>(); futures::try_join!( |