The consolidation of primary and non-primary mirror snapshot namespaces
resulted in the creation of image state records for non-primary snapshots.
This was resulting in non-primary snapshots being prematurely marked as
complete.
Signed-off-by: Jason Dillaman <dillaman@redhat.com>
template <typename I>
Context *SnapshotCreateRequest<I>::send_create_image_state() {
I &image_ctx = this->m_image_ctx;
- auto type = cls::rbd::get_snap_namespace_type(m_snap_namespace);
-
- if (type != cls::rbd::SNAPSHOT_NAMESPACE_TYPE_MIRROR) {
+ auto mirror_ns = boost::get<cls::rbd::MirrorSnapshotNamespace>(
+ &m_snap_namespace);
+ if (mirror_ns == nullptr || !mirror_ns->is_primary()) {
update_snap_context();
image_ctx.io_work_queue->unblock_writes();
return this->create_context_finisher(0);
C_SaferCond cond_ctx;
MockSnapshotCreateRequest *req = new MockSnapshotCreateRequest(
- mock_image_ctx, &cond_ctx, cls::rbd::MirrorSnapshotNamespace(),
- "snap1", 0, false);
+ mock_image_ctx, &cond_ctx,
+ cls::rbd::MirrorSnapshotNamespace{
+ cls::rbd::MIRROR_SNAPSHOT_STATE_PRIMARY, {}, "", CEPH_NOSNAP},
+ "snap1", 0, false);
{
std::shared_lock owner_locker{mock_image_ctx.owner_lock};
req->send();