}
void GroupSpec::dump(Formatter *f) const {
- f->dump_string("group_id", group_id);
f->dump_int("pool_id", pool_id);
+ f->dump_string("group_id", group_id);
}
bool GroupSpec::is_valid() const {
encode(group_snapshot_id, bl);
}
-void GroupImageSnapshotNamespace::decode(bufferlist::const_iterator& it) {
+void GroupImageSnapshotNamespace::decode(uint8_t version,
+ bufferlist::const_iterator& it) {
using ceph::decode;
decode(group_pool, it);
decode(group_id, it);
encode(static_cast<uint32_t>(original_snapshot_namespace_type), bl);
}
-void TrashSnapshotNamespace::decode(bufferlist::const_iterator& it) {
+void TrashSnapshotNamespace::decode(uint8_t version,
+ bufferlist::const_iterator& it) {
using ceph::decode;
decode(original_name, it);
uint32_t snap_type;
encode(primary_snap_id, bl);
encode(last_copied_object_number, bl);
encode(snap_seqs, bl);
+ encode(group_spec, bl);
+ encode(group_snap_id, bl);
}
-void MirrorSnapshotNamespace::decode(bufferlist::const_iterator& it) {
+void MirrorSnapshotNamespace::decode(uint8_t version,
+ bufferlist::const_iterator& it) {
using ceph::decode;
decode(state, it);
decode(complete, it);
decode(primary_snap_id, it);
decode(last_copied_object_number, it);
decode(snap_seqs, it);
+ if (version >= 2) {
+ decode(group_spec, it);
+ decode(group_snap_id, it);
+ }
}
void MirrorSnapshotNamespace::dump(Formatter *f) const {
f->dump_unsigned("last_copied_object_number", last_copied_object_number);
f->dump_stream("snap_seqs") << snap_seqs;
}
+ if (group_spec.is_valid()) {
+ f->open_object_section("group_spec");
+ group_spec.dump(f);
+ f->close_section();
+ f->dump_string("group_snap_id", group_snap_id);
+ }
}
class EncodeSnapshotNamespaceVisitor {
class DecodeSnapshotNamespaceVisitor {
public:
- DecodeSnapshotNamespaceVisitor(bufferlist::const_iterator &iter)
- : m_iter(iter) {
+ DecodeSnapshotNamespaceVisitor(uint8_t version,
+ bufferlist::const_iterator &iter)
+ : m_version(version), m_iter(iter) {
}
template <typename T>
inline void operator()(T& t) const {
- t.decode(m_iter);
+ t.decode(m_version, m_iter);
}
private:
+ uint8_t m_version;
bufferlist::const_iterator &m_iter;
};
}
void SnapshotNamespace::encode(bufferlist& bl) const {
- ENCODE_START(1, 1, bl);
+ ENCODE_START(2, 1, bl);
visit(EncodeSnapshotNamespaceVisitor(bl));
ENCODE_FINISH(bl);
}
void SnapshotNamespace::decode(bufferlist::const_iterator &p)
{
- DECODE_START(1, p);
+ DECODE_START(2, p);
uint32_t snap_type;
decode(snap_type, p);
switch (snap_type) {
*this = UnknownSnapshotNamespace();
break;
}
- visit(DecodeSnapshotNamespaceVisitor(p));
+ visit(DecodeSnapshotNamespaceVisitor(struct_v, p));
DECODE_FINISH(p);
}
<< "last_copied_object_number=" << ns.last_copied_object_number << ", "
<< "snap_seqs=" << ns.snap_seqs;
}
+ if (ns.group_spec.is_valid()) {
+ os << ", "
+ << "group_spec=" << ns.group_spec << ", "
+ << "group_snap_id=" << ns.group_snap_id;
+ }
os << "]";
return os;
}
bool is_valid() const;
static void generate_test_instances(std::list<GroupSpec *> &o);
+
+ inline bool operator==(const GroupSpec& rhs) const {
+ return pool_id == rhs.pool_id && group_id == rhs.group_id;
+ }
+
+ inline bool operator!=(const GroupSpec& rhs) const {
+ return !(*this == rhs);
+ }
+
+ inline bool operator<(const GroupSpec& rhs) const {
+ if (pool_id != rhs.pool_id) {
+ return pool_id < rhs.pool_id;
+ }
+ return group_id < rhs.group_id;
+ }
};
WRITE_CLASS_ENCODER(GroupSpec);
+std::ostream& operator<<(std::ostream& os, const GroupSpec& group_spec);
+
enum SnapshotNamespaceType {
SNAPSHOT_NAMESPACE_TYPE_USER = 0,
SNAPSHOT_NAMESPACE_TYPE_GROUP = 1,
UserSnapshotNamespace() {}
void encode(ceph::buffer::list& bl) const {}
- void decode(ceph::buffer::list::const_iterator& it) {}
+ void decode(uint8_t version, ceph::buffer::list::const_iterator& it) {}
void dump(ceph::Formatter *f) const {}
std::string group_snapshot_id;
void encode(ceph::buffer::list& bl) const;
- void decode(ceph::buffer::list::const_iterator& it);
+ void decode(uint8_t version, ceph::buffer::list::const_iterator& it);
void dump(ceph::Formatter *f) const;
original_snapshot_namespace_type(original_snapshot_namespace_type) {}
void encode(ceph::buffer::list& bl) const;
- void decode(ceph::buffer::list::const_iterator& it);
+ void decode(uint8_t version, ceph::buffer::list::const_iterator& it);
void dump(ceph::Formatter *f) const;
inline bool operator==(const TrashSnapshotNamespace& usn) const {
snapid_t primary_snap_id = CEPH_NOSNAP;
snapid_t clean_since_snap_id;
};
+ GroupSpec group_spec;
+ std::string group_snap_id;
uint64_t last_copied_object_number = 0;
SnapSeqs snap_seqs;
}
void encode(ceph::buffer::list& bl) const;
- void decode(ceph::buffer::list::const_iterator& it);
+ void decode(uint8_t version, ceph::buffer::list::const_iterator& it);
void dump(ceph::Formatter *f) const;
mirror_peer_uuids == rhs.mirror_peer_uuids &&
primary_mirror_uuid == rhs.primary_mirror_uuid &&
primary_snap_id == rhs.primary_snap_id &&
+ group_spec == rhs.group_spec &&
+ group_snap_id == rhs.group_snap_id &&
last_copied_object_number == rhs.last_copied_object_number &&
snap_seqs == rhs.snap_seqs;
}
return primary_mirror_uuid < rhs.primary_mirror_uuid;
} else if (primary_snap_id != rhs.primary_snap_id) {
return primary_snap_id < rhs.primary_snap_id;
+ } else if (group_spec != rhs.group_spec) {
+ return group_spec < rhs.group_spec;
+ } else if (group_snap_id != rhs.group_snap_id) {
+ return group_snap_id < rhs.group_snap_id;
} else if (last_copied_object_number != rhs.last_copied_object_number) {
return last_copied_object_number < rhs.last_copied_object_number;
} else {
UnknownSnapshotNamespace() {}
void encode(ceph::buffer::list& bl) const {}
- void decode(ceph::buffer::list::const_iterator& it) {}
+ void decode(uint8_t version, ceph::buffer::list::const_iterator& it) {}
void dump(ceph::Formatter *f) const {}
inline bool operator==(const UnknownSnapshotNamespace& gsn) const {