]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
Use rename operation to make colection_move atomic
authorHaomai Wang <haomaiwang@gmail.com>
Thu, 20 Feb 2014 04:20:21 +0000 (12:20 +0800)
committerHaomai Wang <haomaiwang@gmail.com>
Sat, 22 Feb 2014 13:04:59 +0000 (21:04 +0800)
Signed-off-by: Haomai Wang <haomaiwang@gmail.com>
src/os/GenericObjectMap.cc
src/os/KeyValueStore.cc

index 3be9b769837556299ad594469fe82e05bc701264..94c6b3bb8c0038a7e67b0b4f5d0bb9ad1cb25341 100644 (file)
@@ -1043,6 +1043,7 @@ void GenericObjectMap::set_header(const coll_t &cid, const ghobject_t &oid,
 int GenericObjectMap::list_objects(const coll_t &cid, ghobject_t start, int max,
                                    vector<ghobject_t> *out, ghobject_t *next)
 {
+  // FIXME
   Mutex::Locker l(header_lock);
 
   if (start.is_max())
index a12606c875a2dcbdde7fee50b88ae7d0e603566c..89c8263e999cd08fa73e3838d93e2202d3be8649 100644 (file)
@@ -1383,9 +1383,7 @@ unsigned KeyValueStore::_do_transaction(Transaction& transaction,
         coll_t ocid = i.get_cid();
         coll_t ncid = i.get_cid();
         ghobject_t oid = i.get_oid();
-        r = _collection_add(ocid, ncid, oid, t);
-        if (r == 0)
-          r = _remove(ocid, oid, t);
+        r = _collection_move_rename(ocid, oid, ncid, oid, t);
       }
       break;
 
@@ -2977,10 +2975,9 @@ int KeyValueStore::_split_collection(coll_t cid, uint32_t bits, uint32_t rem,
       for (vector<ghobject_t>::iterator i = objects.begin();
           i != objects.end(); ++i) {
         if (i->match(bits, rem)) {
-          if (_collection_add(dest, cid, *i, t) < 0) {
+          if (_collection_move_rename(cid, *i, dest, *i, t) < 0) {
             return -1;
           }
-          _remove(cid, *i, t);
           move_size++;
         }
       }