]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
os/bluestore: implement copy ctor and assignment for bluestore_blob_use_tracker_t
authorKefu Chai <kchai@redhat.com>
Sun, 25 Aug 2019 03:48:42 +0000 (11:48 +0800)
committerKefu Chai <kchai@redhat.com>
Tue, 27 Aug 2019 04:41:57 +0000 (12:41 +0800)
to address the `check-generated.sh` test failure.

Signed-off-by: Kefu Chai <kchai@redhat.com>
src/os/bluestore/bluestore_types.cc
src/os/bluestore/bluestore_types.h

index a2b421596dedaa7edaf645e019db055de1177fe4..f7ff63e936dc14a920e202c646af556fac58b86e 100644 (file)
@@ -353,6 +353,37 @@ ostream& operator<<(ostream& out, const bluestore_extent_ref_map_t& m)
 }
 
 // bluestore_blob_use_tracker_t
+bluestore_blob_use_tracker_t::bluestore_blob_use_tracker_t(
+  const bluestore_blob_use_tracker_t& tracker)
+ : au_size{tracker.au_size},
+   num_au{tracker.num_au},
+   bytes_per_au{nullptr}
+{
+  if (num_au > 0) {
+    allocate();
+    std::copy(tracker.bytes_per_au, tracker.bytes_per_au + num_au, bytes_per_au);
+  } else {
+    total_bytes = tracker.total_bytes;
+  }
+}
+
+bluestore_blob_use_tracker_t&
+bluestore_blob_use_tracker_t::operator=(const bluestore_blob_use_tracker_t& rhs)
+{
+  if (this == &rhs) {
+    return *this;
+  }
+  clear();
+  au_size = rhs.au_size;
+  num_au = rhs.num_au;
+  if (rhs.num_au > 0) {
+    allocate();
+    std::copy(rhs.bytes_per_au, rhs.bytes_per_au + num_au, bytes_per_au);
+  } else {
+    total_bytes = rhs.total_bytes;
+  }
+  return *this;
+}
 
 void bluestore_blob_use_tracker_t::allocate()
 {
index aff9e07df202464b40b1ede05c695675e0286e56..867531c4e4f374a3b2f50f69c69efd967b387999 100644 (file)
@@ -257,6 +257,8 @@ struct bluestore_blob_use_tracker_t {
   bluestore_blob_use_tracker_t()
     : au_size(0), num_au(0), bytes_per_au(nullptr) {
   }
+  bluestore_blob_use_tracker_t(const bluestore_blob_use_tracker_t& tracker);
+  bluestore_blob_use_tracker_t& operator=(const bluestore_blob_use_tracker_t& rhs);
   ~bluestore_blob_use_tracker_t() {
     clear();
   }