summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorSage Weil <sage.weil@dreamhost.com>2012-02-05 21:51:33 -0800
committerSage Weil <sage@newdream.net>2012-02-06 13:34:24 -0800
commitfe39d58d30adf26ac9c6cf18c9b5dd5764a7a562 (patch)
treef3344b94c97a543b55859e3a400707f5fd9689ad /src
parentf07d2835d1ed3b239caa3a2118fc99a2ef087c32 (diff)
downloadceph-fe39d58d30adf26ac9c6cf18c9b5dd5764a7a562.tar.gz
move SnapContext, SnapRealmInfo to common/snap_types.{h,cc}
Signed-off-by: Sage Weil <sage.weil@dreamhost.com>
Diffstat (limited to 'src')
-rw-r--r--src/Makefile.am2
-rw-r--r--src/common/snap_types.cc82
-rw-r--r--src/common/snap_types.h74
-rw-r--r--src/include/types.h85
-rw-r--r--src/librbd.cc1
-rw-r--r--src/mds/snap.h1
-rw-r--r--src/osd/osd_types.h1
7 files changed, 161 insertions, 85 deletions
diff --git a/src/Makefile.am b/src/Makefile.am
index a8cdaadfedd..7e6c2efa749 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -899,6 +899,7 @@ libcommon_files = \
common/armor.c \
common/xattr.c \
common/safe_io.c \
+ common/snap_types.cc \
common/str_list.cc \
common/errno.cc \
msg/SimpleMessenger.cc \
@@ -1103,6 +1104,7 @@ noinst_HEADERS = \
common/environment.h\
common/likely.h\
common/lockdep.h\
+ common/snap_types.h\
common/Clock.h\
common/Cond.h\
common/ConfUtils.h\
diff --git a/src/common/snap_types.cc b/src/common/snap_types.cc
new file mode 100644
index 00000000000..1500cac8696
--- /dev/null
+++ b/src/common/snap_types.cc
@@ -0,0 +1,82 @@
+
+#include "snap_types.h"
+#include "common/Formatter.h"
+
+void SnapRealmInfo::encode(bufferlist& bl) const
+{
+ h.num_snaps = my_snaps.size();
+ h.num_prior_parent_snaps = prior_parent_snaps.size();
+ ::encode(h, bl);
+ ::encode_nohead(my_snaps, bl);
+ ::encode_nohead(prior_parent_snaps, bl);
+}
+
+void SnapRealmInfo::decode(bufferlist::iterator& bl)
+{
+ ::decode(h, bl);
+ ::decode_nohead(h.num_snaps, my_snaps, bl);
+ ::decode_nohead(h.num_prior_parent_snaps, prior_parent_snaps, bl);
+}
+
+void SnapRealmInfo::dump(Formatter *f) const
+{
+ f->dump_unsigned("ino", ino());
+ f->dump_unsigned("parent", parent());
+ f->dump_unsigned("seq", seq());
+ f->dump_unsigned("parent_since", parent_since());
+ f->dump_unsigned("created", created());
+
+ f->open_array_section("snaps");
+ for (vector<snapid_t>::const_iterator p = my_snaps.begin(); p != my_snaps.end(); ++p)
+ f->dump_unsigned("snap", *p);
+ f->close_section();
+
+ f->open_array_section("prior_parent_snaps");
+ for (vector<snapid_t>::const_iterator p = prior_parent_snaps.begin(); p != prior_parent_snaps.end(); ++p)
+ f->dump_unsigned("snap", *p);
+ f->close_section();
+}
+
+void SnapRealmInfo::generate_test_instances(list<SnapRealmInfo*>& o)
+{
+ o.push_back(new SnapRealmInfo);
+ o.push_back(new SnapRealmInfo(1, 10, 10, 0));
+ o.push_back(new SnapRealmInfo(1, 10, 10, 0));
+ o.back()->my_snaps.push_back(10);
+ o.push_back(new SnapRealmInfo(1, 10, 10, 5));
+ o.back()->my_snaps.push_back(10);
+ o.back()->prior_parent_snaps.push_back(3);
+ o.back()->prior_parent_snaps.push_back(5);
+}
+
+
+// -----
+
+bool SnapContext::is_valid() const
+{
+ // seq is a valid snapid
+ if (seq > CEPH_MAXSNAP)
+ return false;
+ if (!snaps.empty()) {
+ // seq >= snaps[0]
+ if (snaps[0] > seq)
+ return false;
+ // snaps[] is descending
+ snapid_t t = snaps[0];
+ for (unsigned i=1; i<snaps.size(); i++) {
+ if (snaps[i] >= t || t == 0)
+ return false;
+ t = snaps[i];
+ }
+ }
+ return true;
+}
+
+void SnapContext::dump(Formatter *f) const
+{
+ f->dump_unsigned("seq", seq);
+ f->open_array_section("snaps");
+ for (vector<snapid_t>::const_iterator p = snaps.begin(); p != snaps.end(); ++p)
+ f->dump_unsigned("snap", *p);
+ f->close_section();
+}
diff --git a/src/common/snap_types.h b/src/common/snap_types.h
new file mode 100644
index 00000000000..e8e5281e484
--- /dev/null
+++ b/src/common/snap_types.h
@@ -0,0 +1,74 @@
+#ifndef __CEPH_SNAP_TYPES_H
+#define __CEPH_SNAP_TYPES_H
+
+#include "include/types.h"
+
+namespace ceph {
+
+class Formatter;
+}
+struct SnapRealmInfo {
+ mutable ceph_mds_snap_realm h;
+ vector<snapid_t> my_snaps;
+ vector<snapid_t> prior_parent_snaps; // before parent_since
+
+ SnapRealmInfo() {
+ memset(&h, 0, sizeof(h));
+ }
+ SnapRealmInfo(inodeno_t ino_, snapid_t created_, snapid_t seq_, snapid_t current_parent_since_) {
+ memset(&h, 0, sizeof(h));
+ h.ino = ino_;
+ h.created = created_;
+ h.seq = seq_;
+ h.parent_since = current_parent_since_;
+ }
+
+ inodeno_t ino() const { return inodeno_t(h.ino); }
+ inodeno_t parent() const { return inodeno_t(h.parent); }
+ snapid_t seq() const { return snapid_t(h.seq); }
+ snapid_t parent_since() const { return snapid_t(h.parent_since); }
+ snapid_t created() const { return snapid_t(h.created); }
+
+ void encode(bufferlist& bl) const;
+ void decode(bufferlist::iterator& bl);
+ void dump(Formatter *f) const;
+ static void generate_test_instances(list<SnapRealmInfo*>& o);
+};
+WRITE_CLASS_ENCODER(SnapRealmInfo)
+
+
+struct SnapContext {
+ snapid_t seq; // 'time' stamp
+ vector<snapid_t> snaps; // existent snaps, in descending order
+
+ SnapContext() {}
+ SnapContext(snapid_t s, vector<snapid_t>& v) : seq(s), snaps(v) {}
+
+ bool is_valid() const;
+
+ void clear() {
+ seq = 0;
+ snaps.clear();
+ }
+ bool empty() { return seq == 0; }
+
+ void encode(bufferlist& bl) const {
+ ::encode(seq, bl);
+ ::encode(snaps, bl);
+ }
+ void decode(bufferlist::iterator& bl) {
+ ::decode(seq, bl);
+ ::decode(snaps, bl);
+ }
+ void dump(Formatter *f) const;
+ static void generate_test_instances(list<SnapContext*>& o);
+};
+WRITE_CLASS_ENCODER(SnapContext)
+
+inline ostream& operator<<(ostream& out, const SnapContext& snapc) {
+ return out << snapc.seq << "=" << snapc.snaps;
+}
+
+//}
+
+#endif
diff --git a/src/include/types.h b/src/include/types.h
index c6d30d1f616..bb753163ddf 100644
--- a/src/include/types.h
+++ b/src/include/types.h
@@ -348,91 +348,6 @@ static inline bool file_mode_is_readonly(int mode) {
}
-struct SnapRealmInfo {
- mutable ceph_mds_snap_realm h;
- vector<snapid_t> my_snaps;
- vector<snapid_t> prior_parent_snaps; // before parent_since
-
- SnapRealmInfo() {
- memset(&h, 0, sizeof(h));
- }
- SnapRealmInfo(inodeno_t ino_, snapid_t created_, snapid_t seq_, snapid_t current_parent_since_) {
- memset(&h, 0, sizeof(h));
- h.ino = ino_;
- h.created = created_;
- h.seq = seq_;
- h.parent_since = current_parent_since_;
- }
-
- inodeno_t ino() { return inodeno_t(h.ino); }
- inodeno_t parent() { return inodeno_t(h.parent); }
- snapid_t seq() { return snapid_t(h.seq); }
- snapid_t parent_since() { return snapid_t(h.parent_since); }
- snapid_t created() { return snapid_t(h.created); }
-
- void encode(bufferlist& bl) const {
- h.num_snaps = my_snaps.size();
- h.num_prior_parent_snaps = prior_parent_snaps.size();
- ::encode(h, bl);
- ::encode_nohead(my_snaps, bl);
- ::encode_nohead(prior_parent_snaps, bl);
- }
- void decode(bufferlist::iterator& bl) {
- ::decode(h, bl);
- ::decode_nohead(h.num_snaps, my_snaps, bl);
- ::decode_nohead(h.num_prior_parent_snaps, prior_parent_snaps, bl);
- }
-};
-WRITE_CLASS_ENCODER(SnapRealmInfo)
-
-
-struct SnapContext {
- snapid_t seq; // 'time' stamp
- vector<snapid_t> snaps; // existent snaps, in descending order
-
- SnapContext() {}
- SnapContext(snapid_t s, vector<snapid_t>& v) : seq(s), snaps(v) {}
-
- bool is_valid() const {
- // seq is a valid snapid
- if (seq > CEPH_MAXSNAP)
- return false;
- if (!snaps.empty()) {
- // seq >= snaps[0]
- if (snaps[0] > seq)
- return false;
- // snaps[] is descending
- snapid_t t = snaps[0];
- for (unsigned i=1; i<snaps.size(); i++) {
- if (snaps[i] >= t || t == 0)
- return false;
- t = snaps[i];
- }
- }
- return true;
- }
-
- void clear() {
- seq = 0;
- snaps.clear();
- }
- bool empty() { return seq == 0; }
-
- void encode(bufferlist& bl) const {
- ::encode(seq, bl);
- ::encode(snaps, bl);
- }
- void decode(bufferlist::iterator& bl) {
- ::decode(seq, bl);
- ::decode(snaps, bl);
- }
-};
-WRITE_CLASS_ENCODER(SnapContext)
-
-inline ostream& operator<<(ostream& out, const SnapContext& snapc) {
- return out << snapc.seq << "=" << snapc.snaps;
-}
-
typedef hobject_t collection_list_handle_t;
// dentries
diff --git a/src/librbd.cc b/src/librbd.cc
index fb368d893f6..1587b010df3 100644
--- a/src/librbd.cc
+++ b/src/librbd.cc
@@ -15,6 +15,7 @@
#include "common/Cond.h"
#include "common/dout.h"
#include "common/errno.h"
+#include "common/snap_types.h"
#include "include/rbd/librbd.hpp"
#include <errno.h>
diff --git a/src/mds/snap.h b/src/mds/snap.h
index 11d3364dfe4..e583820dce9 100644
--- a/src/mds/snap.h
+++ b/src/mds/snap.h
@@ -18,6 +18,7 @@
#include "mdstypes.h"
#include "include/xlist.h"
#include "include/elist.h"
+#include "common/snap_types.h"
/*
* generic snap descriptor.
diff --git a/src/osd/osd_types.h b/src/osd/osd_types.h
index 03d52519275..46ff1d0a55d 100644
--- a/src/osd/osd_types.h
+++ b/src/osd/osd_types.h
@@ -24,6 +24,7 @@
#include "include/utime.h"
#include "include/CompatSet.h"
#include "include/interval_set.h"
+#include "common/snap_types.h"
#include "common/Formatter.h"