std::shared_lock image_locker{m_image_ctx->image_lock};
m_image_state.name = m_image_ctx->name;
- m_image_state.features = m_image_ctx->features;
+ m_image_state.features =
+ m_image_ctx->features & ~RBD_FEATURES_IMPLICIT_ENABLE;
for (auto &[snap_id, snap_info] : m_image_ctx->snap_info) {
auto type = cls::rbd::get_snap_namespace_type(snap_info.snap_namespace);
- if (type == cls::rbd::SNAPSHOT_NAMESPACE_TYPE_MIRROR) {
+ if (type != cls::rbd::SNAPSHOT_NAMESPACE_TYPE_USER) {
+ // only replicate user snapshots -- trash snapshots will be
+ // replicated by an implicit delete if required
continue;
}
m_image_state.snapshots[snap_id] = {snap_info.snap_namespace,
ASSERT_EQ(image_name, image_state.name);
ASSERT_EQ(0, image.features(&features));
- ASSERT_EQ(features, image_state.features);
+ ASSERT_EQ(features & ~RBD_FEATURES_IMPLICIT_ENABLE, image_state.features);
ASSERT_EQ(1U, image_state.snapshots.size());
ASSERT_EQ("snap", image_state.snapshots.begin()->second.name);
ASSERT_TRUE(image_state.metadata.empty());
}
ASSERT_EQ(image_name, image_state.name);
- ASSERT_EQ(features, image_state.features);
+ ASSERT_EQ(features & ~RBD_FEATURES_IMPLICIT_ENABLE, image_state.features);
ASSERT_EQ(10U, image_state.metadata.size());
for (int i = 0; i < 10; i++) {
auto &bl = image_state.metadata[stringify(i)];