]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
librbd: Make image metadata copied during image copy
authorHaomai Wang <haomaiwang@gmail.com>
Tue, 10 Mar 2015 09:44:09 +0000 (17:44 +0800)
committerHaomai Wang <haomaiwang@gmail.com>
Fri, 13 Mar 2015 14:52:43 +0000 (22:52 +0800)
Signed-off-by: Haomai Wang <haomaiwang@gmail.com>
src/librbd/internal.cc

index 36699b27bd2dc5a4238958d1b5c6013a2e8258a9..b29ede86a38a2c19c9d34a245ae9d8630f81be56 100644 (file)
@@ -2277,6 +2277,21 @@ reprotect_and_return_err:
       return -EINVAL;
     }
     int r;
+    map<string, string> pairs;
+
+    r = cls_client::metadata_list(&src->md_ctx, src->header_oid, &pairs);
+    if (r < 0) {
+      lderr(cct) << "couldn't list metadata: " << r << dendl;
+      return r;
+    }
+    for (map<string, string>::iterator it = pairs.begin(); it != pairs.end(); it++) {
+      r = cls_client::metadata_set(&dest->md_ctx, dest->header_oid, it->first, it->second);
+      if (r < 0) {
+        lderr(cct) << "couldn't set metadata: " << r << dendl;
+        return r;
+      }
+    }
+
     SimpleThrottle throttle(cct->_conf->rbd_concurrent_management_ops, false);
     uint64_t period = src->get_stripe_period();
     for (uint64_t offset = 0; offset < src_size; offset += period) {