]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
librados: move snap_set_diff to librados/
authorSage Weil <sage@inktank.com>
Thu, 28 Mar 2013 23:44:23 +0000 (16:44 -0700)
committerJosh Durgin <josh.durgin@inktank.com>
Mon, 1 Apr 2013 06:32:41 +0000 (23:32 -0700)
This is most closely related to the librados list_snaps API; move it there.

Signed-off-by: Sage Weil <sage@inktank.com>
src/Makefile.am
src/librados/snap_set_diff.cc [new file with mode: 0644]
src/librados/snap_set_diff.h [new file with mode: 0644]
src/librbd/internal.cc
src/osdc/snap_set_diff.cc [deleted file]
src/osdc/snap_set_diff.h [deleted file]

index c858f2a496ec6017ab91c91d99d6a52955d9bd09..b1bfea78a92b8ee25ddf7cc8f7b72a8ca40a2151 100644 (file)
@@ -423,7 +423,7 @@ librbd_la_SOURCES = \
        librbd/WatchCtx.cc \
        osdc/ObjectCacher.cc \
        osdc/Striper.cc \
-       osdc/snap_set_diff.cc \
+       librados/snap_set_diff.cc \
        cls/lock/cls_lock_client.cc \
        cls/lock/cls_lock_types.cc \
        cls/lock/cls_lock_ops.cc \
@@ -1694,6 +1694,7 @@ noinst_HEADERS = \
        include/rbd/librbd.h\
        include/rbd/librbd.hpp\
         include/util.h\
+       librados/snap_set_diff.h\
        librados/AioCompletionImpl.h\
        librados/IoCtxImpl.h\
        librados/PoolAsyncCompletionImpl.h\
@@ -1941,7 +1942,6 @@ noinst_HEADERS = \
         osd/ReplicatedPG.h\
         osd/Watch.h\
         osd/osd_types.h\
-       osdc/snap_set_diff.h\
         osdc/Blinker.h\
         osdc/Filer.h\
         osdc/Journaler.h\
diff --git a/src/librados/snap_set_diff.cc b/src/librados/snap_set_diff.cc
new file mode 100644 (file)
index 0000000..08a45e1
--- /dev/null
@@ -0,0 +1,102 @@
+// -*- mode:C++; tab-width:8; c-basic-offset:2; indent-tabs-mode:t -*-
+// vim: ts=8 sw=2 smarttab
+
+#include <vector>
+
+#include "snap_set_diff.h"
+#include "common/ceph_context.h"
+#include "include/rados/librados.hpp"
+#include "include/interval_set.h"
+#include "common/debug.h"
+
+#define dout_subsys ceph_subsys_rados
+
+/**
+ * calculate intervals/extents that vary between two snapshots
+ */
+void calc_snap_set_diff(CephContext *cct, const librados::snap_set_t& snap_set,
+                       librados::snap_t start,
+                       librados::snap_t end,
+                       interval_set<uint64_t> *diff, bool *end_exists)
+{
+  ldout(cct, 10) << "calc_snap_set_diff start " << start << " end " << end
+                << ", snap_set seq " << snap_set.seq << dendl;
+  bool saw_start = false;
+  uint64_t start_size = 0;
+  diff->clear();
+  *end_exists = false;
+
+  for (vector<librados::clone_info_t>::const_iterator r = snap_set.clones.begin();
+       r != snap_set.clones.end();
+       ) {
+    // make an interval, and hide the fact that the HEAD doesn't
+    // include itself in the snaps list
+    librados::snap_t a, b;
+    b = r->cloneid;
+    if (b == librados::SNAP_HEAD) {
+      // head is valid starting from right after the last seen seq
+      a = snap_set.seq + 1;
+    } else {
+      assert(b == r->snaps[r->snaps.size()-1]);
+      a = r->snaps[0];
+    }
+    ldout(cct, 20) << " clone " << r->cloneid << " snaps " << r->snaps
+                  << " -> [" << a << "," << b << "]"
+                  << " size " << r->size << " overlap to next " << r->overlap << dendl;
+    
+    if (b < start) {
+      // this is before start
+      ++r;
+      continue;
+    }
+
+    if (!saw_start) {
+      if (start < a) {
+       ldout(cct, 20) << "  start, after " << start << dendl;
+       // this means the object didn't exist at start
+       diff->insert(0, r->size);
+       start_size = 0;
+      } else {
+       ldout(cct, 20) << "  start" << dendl;
+       start_size = r->size;
+      }
+      saw_start = true;
+    }
+
+    if (end < a) {
+      ldout(cct, 20) << " past end " << end << ", end object does not exist" << dendl;
+      *end_exists = false;
+      if (start_size) {
+       diff->clear();
+       diff->insert(0, start_size);
+      }
+      break;
+    }
+    if (end <= b) {
+      ldout(cct, 20) << " end" << dendl;
+      *end_exists = true;
+      break;
+    }
+
+    // start with the max(this size, next size), and subtract off any
+    // overlap
+    const vector<pair<uint64_t, uint64_t> > *overlap = &r->overlap;
+    interval_set<uint64_t> diff_to_next;
+    uint64_t max_size = r->size;
+    ++r;
+    if (r != snap_set.clones.end()) {
+      if (r->size > max_size)
+       max_size = r->size;
+    }
+    if (max_size)
+      diff_to_next.insert(0, max_size);
+    for (vector<pair<uint64_t, uint64_t> >::const_iterator p = overlap->begin();
+        p != overlap->end();
+        ++p) {
+      diff_to_next.erase(p->first, p->second);
+    }
+    ldout(cct, 20) << "  diff_to_next " << diff_to_next << dendl;
+    diff->union_of(diff_to_next);
+    ldout(cct, 20) << "  diff now " << *diff << dendl;
+  }
+}
diff --git a/src/librados/snap_set_diff.h b/src/librados/snap_set_diff.h
new file mode 100644 (file)
index 0000000..7bc75cd
--- /dev/null
@@ -0,0 +1,17 @@
+// -*- mode:C++; tab-width:8; c-basic-offset:2; indent-tabs-mode:t -*-
+// vim: ts=8 sw=2 smarttab
+
+#ifndef __CEPH_OSDC_SNAP_SET_DIFF_H
+#define __CEPH_OSDC_SNAP_SET_DIFF_H
+
+class CephContext;
+#include "include/rados/rados_types.hpp"
+#include "include/interval_set.h"
+
+void calc_snap_set_diff(CephContext *cct,
+                       const librados::snap_set_t& snap_set,
+                       librados::snap_t start, librados::snap_t end,
+                       interval_set<uint64_t> *diff,
+                       bool *end_exists);
+
+#endif
index cb806e9082ae2558b5cb4c74b12b80d882e2438a..a7812e6c611ff7379ca3a45688a183af4e00cc5a 100644 (file)
@@ -20,7 +20,7 @@
 #include "librbd/parent_types.h"
 #include "include/util.h"
 
-#include "osdc/snap_set_diff.h"
+#include "librados/snap_set_diff.h"
 
 #define dout_subsys ceph_subsys_rbd
 #undef dout_prefix
diff --git a/src/osdc/snap_set_diff.cc b/src/osdc/snap_set_diff.cc
deleted file mode 100644 (file)
index 2fb2dd9..0000000
+++ /dev/null
@@ -1,100 +0,0 @@
-
-#include <vector>
-
-#include "snap_set_diff.h"
-#include "common/ceph_context.h"
-#include "include/rados/librados.hpp"
-#include "include/interval_set.h"
-#include "common/debug.h"
-
-#define dout_subsys ceph_subsys_rbd
-
-/**
- * calculate intervals/extents that vary between two snapshots
- */
-void calc_snap_set_diff(CephContext *cct, const librados::snap_set_t& snap_set,
-                       librados::snap_t start,
-                       librados::snap_t end,
-                       interval_set<uint64_t> *diff, bool *end_exists)
-{
-  ldout(cct, 10) << "calc_snap_set_diff start " << start << " end " << end
-                << ", snap_set seq " << snap_set.seq << dendl;
-  bool saw_start = false;
-  uint64_t start_size = 0;
-  diff->clear();
-  *end_exists = false;
-
-  for (vector<librados::clone_info_t>::const_iterator r = snap_set.clones.begin();
-       r != snap_set.clones.end();
-       ) {
-    // make an interval, and hide the fact that the HEAD doesn't
-    // include itself in the snaps list
-    librados::snap_t a, b;
-    b = r->cloneid;
-    if (b == librados::SNAP_HEAD) {
-      // head is valid starting from right after the last seen seq
-      a = snap_set.seq + 1;
-    } else {
-      assert(b == r->snaps[r->snaps.size()-1]);
-      a = r->snaps[0];
-    }
-    ldout(cct, 20) << " clone " << r->cloneid << " snaps " << r->snaps
-                  << " -> [" << a << "," << b << "]"
-                  << " size " << r->size << " overlap to next " << r->overlap << dendl;
-    
-    if (b < start) {
-      // this is before start
-      ++r;
-      continue;
-    }
-
-    if (!saw_start) {
-      if (start < a) {
-       ldout(cct, 20) << "  start, after " << start << dendl;
-       // this means the object didn't exist at start
-       diff->insert(0, r->size);
-       start_size = 0;
-      } else {
-       ldout(cct, 20) << "  start" << dendl;
-       start_size = r->size;
-      }
-      saw_start = true;
-    }
-
-    if (end < a) {
-      ldout(cct, 20) << " past end " << end << ", end object does not exist" << dendl;
-      *end_exists = false;
-      if (start_size) {
-       diff->clear();
-       diff->insert(0, start_size);
-      }
-      break;
-    }
-    if (end <= b) {
-      ldout(cct, 20) << " end" << dendl;
-      *end_exists = true;
-      break;
-    }
-
-    // start with the max(this size, next size), and subtract off any
-    // overlap
-    const vector<pair<uint64_t, uint64_t> > *overlap = &r->overlap;
-    interval_set<uint64_t> diff_to_next;
-    uint64_t max_size = r->size;
-    ++r;
-    if (r != snap_set.clones.end()) {
-      if (r->size > max_size)
-       max_size = r->size;
-    }
-    if (max_size)
-      diff_to_next.insert(0, max_size);
-    for (vector<pair<uint64_t, uint64_t> >::const_iterator p = overlap->begin();
-        p != overlap->end();
-        ++p) {
-      diff_to_next.erase(p->first, p->second);
-    }
-    ldout(cct, 20) << "  diff_to_next " << diff_to_next << dendl;
-    diff->union_of(diff_to_next);
-    ldout(cct, 20) << "  diff now " << *diff << dendl;
-  }
-}
diff --git a/src/osdc/snap_set_diff.h b/src/osdc/snap_set_diff.h
deleted file mode 100644 (file)
index 714dd13..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
-#ifndef __CEPH_OSDC_SNAP_SET_DIFF_H
-#define __CEPH_OSDC_SNAP_SET_DIFF_H
-
-class CephContext;
-#include "include/rados/rados_types.hpp"
-#include "include/interval_set.h"
-
-void calc_snap_set_diff(CephContext *cct,
-                       const librados::snap_set_t& snap_set,
-                       librados::snap_t start, librados::snap_t end,
-                       interval_set<uint64_t> *diff,
-                       bool *end_exists);
-
-#endif