@@ -135,10 +135,10 @@ impl CasFS {
135
135
bucket_name : & str ,
136
136
key : & str ,
137
137
size : u64 ,
138
- e_tag : BlockID ,
138
+ hash : BlockID ,
139
139
object_data : ObjectData ,
140
140
) -> Result < Object , MetaError > {
141
- let obj_meta = Object :: new ( size, e_tag , object_data) ;
141
+ let obj_meta = Object :: new ( size, hash , object_data) ;
142
142
let bucket = self . meta_store . get_bucket_tree ( bucket_name) ?;
143
143
bucket. insert_meta ( key, obj_meta. to_vec ( ) ) ?;
144
144
Ok ( obj_meta)
@@ -242,24 +242,6 @@ impl CasFS {
242
242
self . meta_store . list_buckets ( )
243
243
}
244
244
245
- pub fn store_inlined_object (
246
- & self ,
247
- bucket_name : & str ,
248
- key : & str ,
249
- data : Vec < u8 > ,
250
- ) -> Result < Object , MetaError > {
251
- let content_hash = Md5 :: digest ( & data) . into ( ) ;
252
- let size = data. len ( ) as u64 ;
253
- let obj = self . create_object_meta (
254
- bucket_name,
255
- key,
256
- size,
257
- content_hash,
258
- ObjectData :: Inline { data } ,
259
- ) ?;
260
- Ok ( obj)
261
- }
262
-
263
245
/// Delete an object from a bucket.
264
246
pub async fn delete_object ( & self , bucket : & str , key : & str ) -> Result < ( ) , MetaError > {
265
247
let path_map = self . path_tree ( ) ?;
@@ -290,25 +272,23 @@ impl CasFS {
290
272
}
291
273
292
274
// convenient function to store an object to disk and then store it's metada
293
- pub async fn store_object_and_meta (
275
+ pub async fn store_single_object_and_meta (
294
276
& self ,
295
277
bucket_name : & str ,
296
278
key : & str ,
297
279
data : ByteStream ,
298
- ) -> io:: Result < ( Object , Vec < BlockID > , BlockID , u64 ) > {
280
+ ) -> io:: Result < Object > {
299
281
let ( blocks, content_hash, size) = self . store_object ( bucket_name, key, data) . await ?;
300
282
let obj = self
301
283
. create_object_meta (
302
284
bucket_name,
303
285
key,
304
286
size,
305
287
content_hash,
306
- ObjectData :: SinglePart {
307
- blocks : blocks. clone ( ) ,
308
- } ,
288
+ ObjectData :: SinglePart { blocks } ,
309
289
)
310
290
. unwrap ( ) ;
311
- Ok ( ( obj, blocks , content_hash , size ) )
291
+ Ok ( obj)
312
292
}
313
293
314
294
/// Save the stream of bytes to disk.
@@ -439,6 +419,25 @@ impl CasFS {
439
419
size,
440
420
) )
441
421
}
422
+
423
+ // Store an object inlined in the metadata.
424
+ pub fn store_inlined_object (
425
+ & self ,
426
+ bucket_name : & str ,
427
+ key : & str ,
428
+ data : Vec < u8 > ,
429
+ ) -> Result < Object , MetaError > {
430
+ let content_hash = Md5 :: digest ( & data) . into ( ) ;
431
+ let size = data. len ( ) as u64 ;
432
+ let obj = self . create_object_meta (
433
+ bucket_name,
434
+ key,
435
+ size,
436
+ content_hash,
437
+ ObjectData :: Inline { data } ,
438
+ ) ?;
439
+ Ok ( obj)
440
+ }
442
441
}
443
442
444
443
#[ cfg( test) ]
@@ -485,18 +484,18 @@ mod tests {
485
484
) ) ;
486
485
487
486
// Store object
488
- let ( _ , block_ids , _ , size ) = fs
489
- . store_object_and_meta ( bucket_name, key1, stream)
487
+ let obj = fs
488
+ . store_single_object_and_meta ( bucket_name, key1, stream)
490
489
. await
491
490
. unwrap ( ) ;
492
491
493
492
// Verify results
494
- assert_eq ! ( size, test_data_len as u64 ) ;
495
- assert_eq ! ( block_ids . len( ) , 1 ) ;
493
+ assert_eq ! ( obj . size( ) , test_data_len as u64 ) ;
494
+ assert_eq ! ( obj . blocks ( ) . len( ) , 1 ) ;
496
495
497
496
// Verify block & path was stored
498
497
let block_tree = fs. meta_store . get_block_tree ( ) . unwrap ( ) ;
499
- let stored_block = block_tree. get_block ( & block_ids [ 0 ] ) . unwrap ( ) . unwrap ( ) ;
498
+ let stored_block = block_tree. get_block ( & obj . blocks ( ) [ 0 ] ) . unwrap ( ) . unwrap ( ) ;
500
499
assert_eq ! ( stored_block. size( ) , test_data_len) ;
501
500
assert_eq ! ( stored_block. rc( ) , 1 ) ;
502
501
assert_eq ! (
@@ -515,14 +514,14 @@ mod tests {
515
514
async move { Ok ( Bytes :: from ( test_data_2. clone ( ) ) ) } ,
516
515
) ) ;
517
516
518
- let ( _ , new_blocks , _ , _ ) = fs
519
- . store_object_and_meta ( bucket_name, key2, stream)
517
+ let new_obj = fs
518
+ . store_single_object_and_meta ( bucket_name, key2, stream)
520
519
. await
521
520
. unwrap ( ) ;
522
521
523
- assert_eq ! ( new_blocks , block_ids ) ;
522
+ assert_eq ! ( new_obj . blocks ( ) , obj . blocks ( ) ) ;
524
523
525
- let stored_block = block_tree. get_block ( & new_blocks [ 0 ] ) . unwrap ( ) . unwrap ( ) ;
524
+ let stored_block = block_tree. get_block ( & new_obj . blocks ( ) [ 0 ] ) . unwrap ( ) . unwrap ( ) ;
526
525
assert_eq ! ( stored_block. rc( ) , 2 ) ;
527
526
}
528
527
@@ -545,14 +544,14 @@ mod tests {
545
544
) ) ;
546
545
547
546
// Store object
548
- let ( _ , block_ids , _ , _ ) = fs
549
- . store_object_and_meta ( bucket_name, key1, stream)
547
+ let obj = fs
548
+ . store_single_object_and_meta ( bucket_name, key1, stream)
550
549
. await
551
550
. unwrap ( ) ;
552
551
553
552
// Initial refcount must be 1
554
553
let block_tree = fs. meta_store . get_block_tree ( ) . unwrap ( ) ;
555
- let stored_block = block_tree. get_block ( & block_ids [ 0 ] ) . unwrap ( ) . unwrap ( ) ;
554
+ let stored_block = block_tree. get_block ( & obj . blocks ( ) [ 0 ] ) . unwrap ( ) . unwrap ( ) ;
556
555
assert_eq ! ( stored_block. rc( ) , 1 ) ;
557
556
558
557
{
@@ -564,14 +563,14 @@ mod tests {
564
563
async move { Ok ( Bytes :: from ( test_data_2. clone ( ) ) ) } ,
565
564
) ) ;
566
565
567
- let ( _ , new_blocks , _ , _ ) = fs
568
- . store_object_and_meta ( bucket_name, key1, stream)
566
+ let new_obj = fs
567
+ . store_single_object_and_meta ( bucket_name, key1, stream)
569
568
. await
570
569
. unwrap ( ) ;
571
570
572
- assert_eq ! ( new_blocks , block_ids ) ;
571
+ assert_eq ! ( new_obj . blocks ( ) , obj . blocks ( ) ) ;
573
572
574
- let stored_block = block_tree. get_block ( & new_blocks [ 0 ] ) . unwrap ( ) . unwrap ( ) ;
573
+ let stored_block = block_tree. get_block ( & new_obj . blocks ( ) [ 0 ] ) . unwrap ( ) . unwrap ( ) ;
575
574
assert_eq ! ( stored_block. rc( ) , 1 ) ;
576
575
}
577
576
{
@@ -582,14 +581,14 @@ mod tests {
582
581
async move { Ok ( Bytes :: from ( test_data_3. clone ( ) ) ) } ,
583
582
) ) ;
584
583
585
- let ( _ , new_blocks , _ , _ ) = fs
586
- . store_object_and_meta ( bucket_name, key2, stream)
584
+ let new_obj = fs
585
+ . store_single_object_and_meta ( bucket_name, key2, stream)
587
586
. await
588
587
. unwrap ( ) ;
589
588
590
- assert_eq ! ( new_blocks , block_ids ) ;
589
+ assert_eq ! ( new_obj . blocks ( ) , obj . blocks ( ) ) ;
591
590
592
- let stored_block = block_tree. get_block ( & new_blocks [ 0 ] ) . unwrap ( ) . unwrap ( ) ;
591
+ let stored_block = block_tree. get_block ( & new_obj . blocks ( ) [ 0 ] ) . unwrap ( ) . unwrap ( ) ;
593
592
assert_eq ! ( stored_block. rc( ) , 2 ) ;
594
593
}
595
594
}
@@ -613,8 +612,8 @@ mod tests {
613
612
) ) ;
614
613
615
614
// Store object
616
- let ( _ , block_ids , _ , _ ) = fs
617
- . store_object_and_meta ( bucket_name, key, stream)
615
+ let obj = fs
616
+ . store_single_object_and_meta ( bucket_name, key, stream)
618
617
. await
619
618
. unwrap ( ) ;
620
619
@@ -625,8 +624,8 @@ mod tests {
625
624
// verify blocks and path exist
626
625
let block_tree = fs. meta_store . get_block_tree ( ) . unwrap ( ) ;
627
626
let mut stored_paths = Vec :: new ( ) ;
628
- for id in block_ids . clone ( ) {
629
- let block = block_tree. get_block ( & id) . unwrap ( ) . unwrap ( ) ;
627
+ for id in obj . blocks ( ) {
628
+ let block = block_tree. get_block ( id) . unwrap ( ) . unwrap ( ) ;
630
629
assert_eq ! (
631
630
fs. path_tree( ) . unwrap( ) . contains_key( block. path( ) ) . unwrap( ) ,
632
631
true
@@ -643,8 +642,8 @@ mod tests {
643
642
644
643
// Verify blocks were cleaned up
645
644
let block_tree = fs. meta_store . get_block_tree ( ) . unwrap ( ) ;
646
- for id in block_ids {
647
- assert ! ( block_tree. get_block( & id) . unwrap( ) . is_none( ) ) ;
645
+ for id in obj . blocks ( ) {
646
+ assert ! ( block_tree. get_block( id) . unwrap( ) . is_none( ) ) ;
648
647
}
649
648
// Verify paths were cleaned up
650
649
for path in stored_paths {
@@ -679,13 +678,13 @@ mod tests {
679
678
) ) ;
680
679
681
680
// Store first object
682
- let ( _ , block_ids1 , content_hash1 , _ ) = fs
683
- . store_object_and_meta ( bucket, key1, stream1)
681
+ let obj1 = fs
682
+ . store_single_object_and_meta ( bucket, key1, stream1)
684
683
. await
685
684
. unwrap ( ) ;
686
685
// Verify blocks exist with rc=1
687
686
let block_tree = fs. meta_store . get_block_tree ( ) . unwrap ( ) ;
688
- for id in & block_ids1 {
687
+ for id in obj1 . blocks ( ) {
689
688
let block = block_tree. get_block ( id) . unwrap ( ) . unwrap ( ) ;
690
689
assert_eq ! ( block. rc( ) , 1 ) ;
691
690
}
@@ -696,17 +695,17 @@ mod tests {
696
695
async move { Ok ( Bytes :: from ( test_data2. clone ( ) ) ) } ,
697
696
) ) ;
698
697
699
- let ( _ , block_ids2 , content_hash2 , _ ) = fs
700
- . store_object_and_meta ( bucket, key2, stream2)
698
+ let obj2 = fs
699
+ . store_single_object_and_meta ( bucket, key2, stream2)
701
700
. await
702
701
. unwrap ( ) ;
703
702
704
703
// Verify both objects share same blocks
705
- assert_eq ! ( block_ids1 , block_ids2 ) ;
706
- assert_eq ! ( content_hash1 , content_hash2 ) ;
704
+ assert_eq ! ( obj1 . blocks ( ) , obj2 . blocks ( ) ) ;
705
+ assert_eq ! ( obj1 . hash ( ) , obj2 . hash ( ) ) ;
707
706
// Verify blocks exist with rc=2
708
707
let block_tree = fs. meta_store . get_block_tree ( ) . unwrap ( ) ;
709
- for id in & block_ids2 {
708
+ for id in obj2 . blocks ( ) {
710
709
let block = block_tree. get_block ( id) . unwrap ( ) . unwrap ( ) ;
711
710
assert_eq ! ( block. rc( ) , 2 ) ;
712
711
}
@@ -716,7 +715,7 @@ mod tests {
716
715
717
716
// Verify blocks still exist
718
717
let block_tree = fs. meta_store . get_block_tree ( ) . unwrap ( ) ;
719
- for id in & block_ids1 {
718
+ for id in obj1 . blocks ( ) {
720
719
let block = block_tree. get_block ( id) . unwrap ( ) . unwrap ( ) ;
721
720
assert_eq ! ( block. rc( ) , 1 ) ;
722
721
}
@@ -725,8 +724,8 @@ mod tests {
725
724
fs. delete_object ( bucket, key2) . await . unwrap ( ) ;
726
725
727
726
// Verify blocks are gone
728
- for id in block_ids1 {
729
- assert ! ( block_tree. get_block( & id) . unwrap( ) . is_none( ) ) ;
727
+ for id in obj1 . blocks ( ) {
728
+ assert ! ( block_tree. get_block( id) . unwrap( ) . is_none( ) ) ;
730
729
}
731
730
}
732
731
@@ -754,13 +753,13 @@ mod tests {
754
753
) ) ;
755
754
756
755
// Store first object
757
- let ( _ , block_ids1 , content_hash1 , _ ) = fs
758
- . store_object_and_meta ( bucket, key1, stream1)
756
+ let obj1 = fs
757
+ . store_single_object_and_meta ( bucket, key1, stream1)
759
758
. await
760
759
. unwrap ( ) ;
761
760
// Verify blocks exist with rc=1
762
761
let block_tree = fs. meta_store . get_block_tree ( ) . unwrap ( ) ;
763
- for id in & block_ids1 {
762
+ for id in obj1 . blocks ( ) {
764
763
let block = block_tree. get_block ( id) . unwrap ( ) . unwrap ( ) ;
765
764
assert_eq ! ( block. rc( ) , 1 ) ;
766
765
}
@@ -771,17 +770,17 @@ mod tests {
771
770
async move { Ok ( Bytes :: from ( test_data2. clone ( ) ) ) } ,
772
771
) ) ;
773
772
774
- let ( _ , block_ids2 , content_hash2 , _ ) = fs
775
- . store_object_and_meta ( bucket, key1, stream2)
773
+ let obj2 = fs
774
+ . store_single_object_and_meta ( bucket, key1, stream2)
776
775
. await
777
776
. unwrap ( ) ;
778
777
779
778
// Verify both objects share same blocks
780
- assert_eq ! ( block_ids1 , block_ids2 ) ;
781
- assert_eq ! ( content_hash1 , content_hash2 ) ;
779
+ assert_eq ! ( obj1 . blocks ( ) , obj2 . blocks ( ) ) ;
780
+ assert_eq ! ( obj1 . hash ( ) , obj2 . hash ( ) ) ;
782
781
// Verify blocks exist with rc=2
783
782
let block_tree = fs. meta_store . get_block_tree ( ) . unwrap ( ) ;
784
- for id in & block_ids2 {
783
+ for id in obj2 . blocks ( ) {
785
784
let block = block_tree. get_block ( id) . unwrap ( ) . unwrap ( ) ;
786
785
assert_eq ! ( block. rc( ) , 1 ) ;
787
786
}
@@ -790,8 +789,8 @@ mod tests {
790
789
fs. delete_object ( bucket, key1) . await . unwrap ( ) ;
791
790
792
791
// Verify blocks are gone
793
- for id in block_ids1 {
794
- assert ! ( block_tree. get_block( & id) . unwrap( ) . is_none( ) ) ;
792
+ for id in obj1 . blocks ( ) {
793
+ assert ! ( block_tree. get_block( id) . unwrap( ) . is_none( ) ) ;
795
794
}
796
795
}
797
796
}
0 commit comments