o.push_back(new ParentImageSpec{1, "ns", "foo", 3});
}
+std::ostream& operator<<(std::ostream& os, const ParentImageSpec& rhs) {
+ os << "["
+ << "pool_id=" << rhs.pool_id << ", "
+ << "pool_namespace=" << rhs.pool_namespace << ", "
+ << "image_id=" << rhs.image_id << ", "
+ << "snap_id=" << rhs.snap_id
+ << "]";
+ return os;
+}
+
void ChildImageSpec::encode(bufferlist &bl) const {
ENCODE_START(2, 1, bl);
encode(pool_id, bl);
o.push_back(new ChildImageSpec(123, "ns", "abc"));
}
+std::ostream& operator<<(std::ostream& os, const ChildImageSpec& rhs) {
+ os << "["
+ << "pool_id=" << rhs.pool_id << ", "
+ << "pool_namespace=" << rhs.pool_namespace << ", "
+ << "image_id=" << rhs.image_id
+ << "]";
+ return os;
+}
+
void GroupImageSpec::encode(bufferlist &bl) const {
ENCODE_START(1, 1, bl);
encode(image_id, bl);
WRITE_CLASS_ENCODER(ParentImageSpec);
+std::ostream& operator<<(std::ostream& os, const ParentImageSpec& rhs);
+
struct ChildImageSpec {
int64_t pool_id = -1;
std::string pool_namespace;
};
WRITE_CLASS_ENCODER(ChildImageSpec);
+std::ostream& operator<<(std::ostream& os, const ChildImageSpec& rhs);
+
typedef std::set<ChildImageSpec> ChildImageSpecs;
struct GroupImageSpec {
if (snap_info_it != m_src_image_ctx->snap_info.end()) {
auto& snap_info = snap_info_it->second;
size = snap_info.size;
- if (!m_flatten) {
- parent_spec = snap_info.parent.spec;
+ if (!m_flatten && snap_info.parent.spec.pool_id != -1) {
+ parent_spec = m_dst_parent_spec;
parent_overlap = snap_info.parent.overlap;
}
} else {
size = m_src_image_ctx->size;
if (!m_flatten) {
- parent_spec = m_src_image_ctx->parent_md.spec;
+ parent_spec = m_dst_image_ctx->parent_md.spec;
parent_overlap = m_src_image_ctx->parent_md.overlap;
}
}
template <typename I>
void AttachParentRequest<I>::attach_parent() {
auto cct = m_image_ctx.cct;
- ldout(cct, 5) << dendl;
+ ldout(cct, 5) << "parent_image_spec=" << m_parent_image_spec << dendl;
librados::ObjectWriteOperation op;
if (!m_legacy_parent) {