Skip to content

Commit

Permalink
mon: OSDMonitor: return earlier on no-ops over currently committed state
Browse files Browse the repository at this point in the history
Signed-off-by: Joao Eduardo Luis <[email protected]>
  • Loading branch information
jecluis committed Aug 28, 2013
1 parent 274b4b9 commit 0e85074
Showing 1 changed file with 34 additions and 2 deletions.
36 changes: 34 additions & 2 deletions src/mon/OSDMonitor.cc
Original file line number Diff line number Diff line change
Expand Up @@ -3702,7 +3702,7 @@ bool OSDMonitor::preprocess_pool_op(MPoolOp *m)
_pool_op_reply(m, 0, osdmap.get_epoch());
return true;
}

// check if the snap and snapname exists
bool snap_exists = false;
const pg_pool_t *p = osdmap.get_pg_pool(m->pool);
Expand Down Expand Up @@ -3798,6 +3798,38 @@ bool OSDMonitor::prepare_pool_op(MPoolOp *m)
int ret = 0;
bool changed = false;

if (!osdmap.have_pg_pool(m->pool)) {
_pool_op_reply(m, -ENOENT, osdmap.get_epoch());
return false;
}

const pg_pool_t *pool = osdmap.get_pg_pool(m->pool);

switch (m->op) {
case POOL_OP_CREATE_SNAP:
case POOL_OP_DELETE_SNAP:
if (!pool->is_unmanaged_snaps_mode()) {
bool snap_exists = pool->snap_exists(m->name.c_str());
if ((m->op == POOL_OP_CREATE_SNAP && snap_exists)
|| (m->op == POOL_OP_CREATE_SNAP && !snap_exists)) {
ret = 0;
} else {
break;
}
} else {
ret = -EINVAL;
}
_pool_op_reply(m, ret, osdmap.get_epoch());
return false;

case POOL_OP_CREATE_UNMANAGED_SNAP:
case POOL_OP_DELETE_UNMANAGED_SNAP:
if (pool->is_pool_snaps_mode()) {
_pool_op_reply(m, -EINVAL, osdmap.get_epoch());
return false;
}
}

// projected pool info
pg_pool_t pp;
if (pending_inc.new_pools.count(m->pool))
Expand All @@ -3824,7 +3856,7 @@ bool OSDMonitor::prepare_pool_op(MPoolOp *m)
goto out;
}
}

switch (m->op) {
case POOL_OP_CREATE_SNAP:
if (!pp.snap_exists(m->name.c_str())) {
Expand Down

0 comments on commit 0e85074

Please sign in to comment.