Skip to content

Commit

Permalink
rbd-mirror: propagate deletions even if image replayer is stopped
Browse files Browse the repository at this point in the history
If an image deletion which causes the replayer to stop (due to an error)
before the deletion is detected, the deletion should still occur.

Signed-off-by: Jason Dillaman <dillaman@redhat.com>
  • Loading branch information
Jason Dillaman committed Jun 10, 2016
1 parent de15b19 commit a0c526a
Showing 1 changed file with 17 additions and 0 deletions.
17 changes: 17 additions & 0 deletions src/tools/rbd_mirror/Replayer.cc
Expand Up @@ -668,6 +668,9 @@ void Replayer::mirror_image_status_shut_down() {
void Replayer::start_image_replayer(unique_ptr<ImageReplayer<> > &image_replayer,
const boost::optional<std::string>& image_name)
{
dout(20) << "global_image_id=" << image_replayer->get_global_image_id()
<< dendl;

if (!image_replayer->is_stopped()) {
return;
}
Expand All @@ -688,11 +691,25 @@ void Replayer::start_image_replayer(unique_ptr<ImageReplayer<> > &image_replayer

bool Replayer::stop_image_replayer(unique_ptr<ImageReplayer<> > &image_replayer)
{
dout(20) << "global_image_id=" << image_replayer->get_global_image_id()
<< dendl;

if (image_replayer->is_stopped()) {
if (m_image_deleter) {
dout(20) << "scheduling delete" << dendl;
m_image_deleter->schedule_image_delete(
image_replayer->get_local_pool_id(),
image_replayer->get_local_image_id(),
image_replayer->get_local_image_name(),
image_replayer->get_global_image_id());
}
return true;
}

if (image_replayer->is_running()) {
if (m_image_deleter) {
dout(20) << "scheduling delete after image replayer stopped" << dendl;
}
FunctionContext *ctx = new FunctionContext(
[&image_replayer, this] (int r) {
if (m_image_deleter) {
Expand Down

0 comments on commit a0c526a

Please sign in to comment.