diff options
author | Sage Weil <sage.weil@dreamhost.com> | 2012-02-05 21:51:33 -0800 |
---|---|---|
committer | Sage Weil <sage@newdream.net> | 2012-02-06 13:34:24 -0800 |
commit | fe39d58d30adf26ac9c6cf18c9b5dd5764a7a562 (patch) | |
tree | f3344b94c97a543b55859e3a400707f5fd9689ad /src | |
parent | f07d2835d1ed3b239caa3a2118fc99a2ef087c32 (diff) | |
download | ceph-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.am | 2 | ||||
-rw-r--r-- | src/common/snap_types.cc | 82 | ||||
-rw-r--r-- | src/common/snap_types.h | 74 | ||||
-rw-r--r-- | src/include/types.h | 85 | ||||
-rw-r--r-- | src/librbd.cc | 1 | ||||
-rw-r--r-- | src/mds/snap.h | 1 | ||||
-rw-r--r-- | src/osd/osd_types.h | 1 |
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" |