@@ -105,6 +105,33 @@ struct omap_manager_test_t :
105105 return key;
106106 }
107107
108+ std::vector<std::string> set_random_keys (
109+ omap_root_t &omap_root,
110+ Transaction &t,
111+ size_t count) {
112+ std::map<std::string, ceph::bufferlist> kvs;
113+ std::vector<std::string> keys;
114+ keys.reserve (count);
115+
116+ while (kvs.size () < count) {
117+ auto k = rand_name (STR_LEN);
118+ auto v = rand_buffer (STR_LEN);
119+ // 'inserted' will be true only if the key did not already exist.
120+ if (auto [_, inserted] = kvs.emplace (k, v); inserted) {
121+ test_omap_mappings[k] = v;
122+ keys.push_back (k);
123+ }
124+ }
125+
126+ with_trans_intr (
127+ t,
128+ [&, this ](auto &t) {
129+ return omap_manager->omap_set_keys (omap_root, t, std::move (kvs));
130+ }).unsafe_get ();
131+
132+ return keys;
133+ }
134+
108135 void get_value (
109136 omap_root_t &omap_root,
110137 Transaction &t,
@@ -340,34 +367,96 @@ struct omap_manager_test_t :
340367 }
341368};
342369
343- TEST_P (omap_manager_test_t , basic )
370+ TEST_P (omap_manager_test_t , set_key )
344371{
345372 run_async ([this ] {
346373 omap_root_t omap_root = initialize ();
347374
348- string key = " owner" ;
349- string val = " test" ;
375+ for (int i = 0 ; i < 8 ; ++i) {
376+ auto t = create_mutate_transaction ();
377+ set_random_key (omap_root, *t);
378+ check_mappings (omap_root, *t);
379+ submit_transaction (std::move (t));
380+ check_mappings (omap_root);
381+ }
382+ });
383+ }
350384
385+ TEST_P (omap_manager_test_t , set_keys)
386+ {
387+ run_async ([this ] {
388+ omap_root_t omap_root = initialize ();
389+
390+ for (int i = 0 ; i < 8 ; ++i) {
391+ auto t = create_mutate_transaction ();
392+ set_random_keys (omap_root, *t, std::pow (2 , i));
393+ check_mappings (omap_root, *t);
394+ submit_transaction (std::move (t));
395+ check_mappings (omap_root);
396+ }
397+ });
398+ }
399+
400+ TEST_P (omap_manager_test_t , rm_key)
401+ {
402+ run_async ([this ] {
403+ omap_root_t omap_root = initialize ();
404+
405+ auto t = create_mutate_transaction ();
406+ set_random_keys (omap_root, *t, 8 );
407+ submit_transaction (std::move (t));
408+ check_mappings (omap_root);
409+
410+ while (test_omap_mappings.size () > 0 ) {
411+ auto t = create_mutate_transaction ();
412+ rm_key (omap_root, *t, test_omap_mappings.begin ()->first );
413+ check_mappings (omap_root, *t);
414+ submit_transaction (std::move (t));
415+ check_mappings (omap_root);
416+ }
417+ });
418+ }
419+
420+ TEST_P (omap_manager_test_t , rm_key_range)
421+ {
422+ run_async ([this ] {
423+ omap_root_t omap_root = initialize ();
424+
425+ auto t = create_mutate_transaction ();
426+ set_random_keys (omap_root, *t, 1200 );
427+ submit_transaction (std::move (t));
428+ check_mappings (omap_root);
429+
430+ std::vector<std::string> keys;
431+ for (const auto & [k, _] : test_omap_mappings) {
432+ keys.push_back (k);
433+ }
434+
435+ logger ().debug (" == delete the middle 400 keys" );
351436 {
352437 auto t = create_mutate_transaction ();
353- logger ().debug (" first transaction" );
354- set_key (omap_root, *t, key, val);
355- get_value (omap_root, *t, key);
438+ rm_key_range (omap_root, *t, keys[400 ], keys[799 ]);
439+ check_mappings (omap_root, *t);
356440 submit_transaction (std::move (t));
441+ check_mappings (omap_root);
357442 }
443+
444+ logger ().debug (" == delete the first 400 keys" );
358445 {
359446 auto t = create_mutate_transaction ();
360- logger ().debug (" second transaction" );
361- get_value (omap_root, *t, key);
362- rm_key (omap_root, *t, key);
363- get_value (omap_root, *t, key);
447+ rm_key_range (omap_root, *t, keys[0 ], keys[399 ]);
448+ check_mappings (omap_root, *t);
364449 submit_transaction (std::move (t));
450+ check_mappings (omap_root);
365451 }
452+
453+ logger ().debug (" == delete the last 400 keys" );
366454 {
367455 auto t = create_mutate_transaction ();
368- logger (). debug ( " third transaction " );
369- get_value (omap_root, *t, key );
456+ rm_key_range (omap_root, *t, keys[ 800 ], keys[ 1199 ] );
457+ check_mappings (omap_root, *t);
370458 submit_transaction (std::move (t));
459+ check_mappings (omap_root);
371460 }
372461 });
373462}
0 commit comments