m_image_name, GLOBAL_IMAGE_ID);
C_SaferCond ctx;
- m_deleter->wait_for_scheduled_deletion(m_image_name, &ctx);
+ m_deleter->wait_for_scheduled_deletion(m_local_pool_id, GLOBAL_IMAGE_ID,
+ &ctx);
EXPECT_EQ(0, ctx.wait());
ASSERT_EQ(0u, m_deleter->get_delete_queue_items().size());
m_image_name, GLOBAL_IMAGE_ID);
C_SaferCond ctx;
- m_deleter->wait_for_scheduled_deletion(m_image_name, &ctx);
+ m_deleter->wait_for_scheduled_deletion(m_local_pool_id, GLOBAL_IMAGE_ID,
+ &ctx);
EXPECT_EQ(-rbd::mirror::ImageDeleter::EISPRM, ctx.wait());
ASSERT_EQ(0u, m_deleter->get_delete_queue_items().size());
m_image_name, "diff global id");
C_SaferCond ctx;
- m_deleter->wait_for_scheduled_deletion(m_image_name, &ctx);
+ m_deleter->wait_for_scheduled_deletion(m_local_pool_id, "diff global id",
+ &ctx);
EXPECT_EQ(-EINVAL, ctx.wait());
ASSERT_EQ(0u, m_deleter->get_delete_queue_items().size());
m_image_name, GLOBAL_IMAGE_ID);
C_SaferCond ctx;
- m_deleter->wait_for_scheduled_deletion(m_image_name, &ctx);
+ m_deleter->wait_for_scheduled_deletion(m_local_pool_id, GLOBAL_IMAGE_ID,
+ &ctx);
EXPECT_EQ(0, ctx.wait());
ASSERT_EQ(0u, m_deleter->get_delete_queue_items().size());
m_image_name, GLOBAL_IMAGE_ID);
C_SaferCond ctx;
- m_deleter->wait_for_scheduled_deletion(m_image_name, &ctx);
+ m_deleter->wait_for_scheduled_deletion(m_local_pool_id, GLOBAL_IMAGE_ID,
+ &ctx);
EXPECT_EQ(0, ctx.wait());
ASSERT_EQ(0u, m_deleter->get_delete_queue_items().size());
m_image_name, GLOBAL_IMAGE_ID);
C_SaferCond ctx;
- m_deleter->wait_for_scheduled_deletion(m_image_name, &ctx);
+ m_deleter->wait_for_scheduled_deletion(m_local_pool_id, GLOBAL_IMAGE_ID,
+ &ctx);
EXPECT_EQ(0, ctx.wait());
ASSERT_EQ(0u, m_deleter->get_delete_queue_items().size());
m_image_name, GLOBAL_IMAGE_ID);
C_SaferCond ctx;
- m_deleter->wait_for_scheduled_deletion(m_image_name, &ctx);
+ m_deleter->wait_for_scheduled_deletion(m_local_pool_id, GLOBAL_IMAGE_ID,
+ &ctx);
EXPECT_EQ(0, ctx.wait());
ASSERT_EQ(0u, m_deleter->get_delete_queue_items().size());
m_image_name, GLOBAL_IMAGE_ID);
C_SaferCond ctx;
- m_deleter->wait_for_scheduled_deletion(m_image_name, &ctx);
+ m_deleter->wait_for_scheduled_deletion(m_local_pool_id, GLOBAL_IMAGE_ID,
+ &ctx);
EXPECT_EQ(-EBUSY, ctx.wait());
ASSERT_EQ(1u, m_deleter->get_delete_queue_items().size());
"clone1", GLOBAL_CLONE_IMAGE_ID);
C_SaferCond ctx2;
- m_deleter->wait_for_scheduled_deletion("clone1", &ctx2);
+ m_deleter->wait_for_scheduled_deletion(m_local_pool_id, GLOBAL_CLONE_IMAGE_ID,
+ &ctx2);
EXPECT_EQ(0, ctx2.wait());
C_SaferCond ctx3;
- m_deleter->wait_for_scheduled_deletion(m_image_name, &ctx3);
+ m_deleter->wait_for_scheduled_deletion(m_local_pool_id, GLOBAL_IMAGE_ID,
+ &ctx3);
EXPECT_EQ(0, ctx3.wait());
ASSERT_EQ(0u, m_deleter->get_delete_queue_items().size());
m_image_name, GLOBAL_IMAGE_ID);
C_SaferCond ctx;
- m_deleter->wait_for_scheduled_deletion(m_image_name, &ctx);
+ m_deleter->wait_for_scheduled_deletion(m_local_pool_id, GLOBAL_IMAGE_ID,
+ &ctx);
EXPECT_EQ(0, ctx.wait());
ASSERT_EQ(0u, m_deleter->get_delete_queue_items().size());
m_image_name, GLOBAL_IMAGE_ID);
C_SaferCond ctx;
- m_deleter->wait_for_scheduled_deletion(m_image_name, &ctx);
+ m_deleter->wait_for_scheduled_deletion(m_local_pool_id, GLOBAL_IMAGE_ID,
+ &ctx);
EXPECT_EQ(0, ctx.wait());
ASSERT_EQ(0u, m_deleter->get_delete_queue_items().size());
m_image_name, GLOBAL_IMAGE_ID);
C_SaferCond ctx;
- m_deleter->wait_for_scheduled_deletion(m_image_name, &ctx);
+ m_deleter->wait_for_scheduled_deletion(m_local_pool_id, GLOBAL_IMAGE_ID,
+ &ctx);
EXPECT_EQ(-ENOENT, ctx.wait());
ASSERT_EQ(0u, m_deleter->get_delete_queue_items().size());
m_image_name, GLOBAL_IMAGE_ID);
C_SaferCond ctx;
- m_deleter->wait_for_scheduled_deletion(m_image_name, &ctx);
+ m_deleter->wait_for_scheduled_deletion(m_local_pool_id, GLOBAL_IMAGE_ID,
+ &ctx);
EXPECT_EQ(-EBUSY, ctx.wait());
ASSERT_EQ(0u, m_deleter->get_delete_queue_items().size());
m_image_name, GLOBAL_IMAGE_ID);
C_SaferCond ctx;
- m_deleter->wait_for_scheduled_deletion(m_image_name, &ctx);
+ m_deleter->wait_for_scheduled_deletion(m_local_pool_id, GLOBAL_IMAGE_ID,
+ &ctx);
EXPECT_EQ(-EBUSY, ctx.wait());
EXPECT_EQ(0, ictx->state->close());
C_SaferCond ctx2;
- m_deleter->wait_for_scheduled_deletion(m_image_name, &ctx2);
+ m_deleter->wait_for_scheduled_deletion(m_local_pool_id, GLOBAL_IMAGE_ID,
+ &ctx2);
EXPECT_EQ(0, ctx2.wait());
ASSERT_EQ(0u, m_deleter->get_delete_queue_items().size());
m_image_name, GLOBAL_IMAGE_ID);
C_SaferCond ctx;
- m_deleter->wait_for_scheduled_deletion(m_image_name, &ctx);
+ m_deleter->wait_for_scheduled_deletion(m_local_pool_id, GLOBAL_IMAGE_ID,
+ &ctx);
EXPECT_EQ(-EBUSY, ctx.wait());
ASSERT_EQ(0u, m_deleter->get_delete_queue_items().size());
}
void ImageDeleter::schedule_image_delete(RadosRef local_rados,
- uint64_t local_pool_id,
+ int64_t local_pool_id,
const std::string& local_image_id,
const std::string& local_image_name,
const std::string& global_image_id) {
dout(20) << "enter" << dendl;
- Mutex::Locker l(m_delete_lock);
+ Mutex::Locker locker(m_delete_lock);
- auto del_info = find_delete_info(local_image_name);
+ auto del_info = find_delete_info(local_pool_id, global_image_id);
if (del_info != nullptr) {
- dout(20) << "image " << local_image_name << " was already scheduled for "
- << "deletion" << dendl;
+ dout(20) << "image " << local_image_name << " (" << global_image_id << ") "
+ << "was already scheduled for deletion" << dendl;
return;
}
m_delete_queue_cond.Signal();
}
-void ImageDeleter::wait_for_scheduled_deletion(const std::string& image_name,
+void ImageDeleter::wait_for_scheduled_deletion(int64_t local_pool_id,
+ const std::string &global_image_id,
Context *ctx,
bool notify_on_failed_retry) {
m_work_queue->queue(ctx, r);
});
- Mutex::Locker l(m_delete_lock);
- auto del_info = find_delete_info(image_name);
+ Mutex::Locker locker(m_delete_lock);
+ auto del_info = find_delete_info(local_pool_id, global_image_id);
if (!del_info) {
// image not scheduled for deletion
ctx->complete(0);
(*del_info)->notify_on_failed_retry = notify_on_failed_retry;
}
-void ImageDeleter::cancel_waiter(const std::string& image_name) {
+void ImageDeleter::cancel_waiter(int64_t local_pool_id,
+ const std::string &global_image_id) {
Mutex::Locker locker(m_delete_lock);
- auto del_info = find_delete_info(image_name);
+ auto del_info = find_delete_info(local_pool_id, global_image_id);
if (!del_info) {
return;
}
}
unique_ptr<ImageDeleter::DeleteInfo> const* ImageDeleter::find_delete_info(
- const std::string& image_name) {
+ int64_t local_pool_id, const std::string &global_image_id) {
assert(m_delete_lock.is_locked());
- if (m_active_delete && m_active_delete->match(image_name)) {
+ if (m_active_delete && m_active_delete->match(local_pool_id,
+ global_image_id)) {
return &m_active_delete;
}
for (const auto& del_info : m_delete_queue) {
- if (del_info->match(image_name)) {
+ if (del_info->match(local_pool_id, global_image_id)) {
return &del_info;
}
}
for (const auto& del_info : m_failed_queue) {
- if (del_info->match(image_name)) {
+ if (del_info->match(local_pool_id, global_image_id)) {
return &del_info;
}
}
ImageDeleter& operator=(const ImageDeleter&) = delete;
void schedule_image_delete(RadosRef local_rados,
- uint64_t local_pool_id,
+ int64_t local_pool_id,
const std::string& local_image_id,
const std::string& local_image_name,
const std::string& global_image_id);
- void wait_for_scheduled_deletion(const std::string& image_name,
+ void wait_for_scheduled_deletion(int64_t local_pool_id,
+ const std::string &global_image_id,
Context *ctx,
bool notify_on_failed_retry=true);
- void cancel_waiter(const std::string& image_name);
+ void cancel_waiter(int64_t local_pool_id,
+ const std::string &global_image_id);
void print_status(Formatter *f, std::stringstream *ss);
struct DeleteInfo {
RadosRef local_rados;
- uint64_t local_pool_id;
+ int64_t local_pool_id;
std::string local_image_id;
std::string local_image_name;
std::string global_image_id;
bool notify_on_failed_retry;
Context *on_delete;
- DeleteInfo(RadosRef local_rados, uint64_t local_pool_id,
+ DeleteInfo(RadosRef local_rados, int64_t local_pool_id,
const std::string& local_image_id,
const std::string& local_image_name,
const std::string& global_image_id) :
notify_on_failed_retry(true), on_delete(nullptr) {
}
- bool match(const std::string& image_name) {
- return local_image_name == image_name;
+ bool match(int64_t local_pool_id, const std::string &global_image_id) {
+ return (this->local_pool_id == local_pool_id &&
+ this->global_image_id == global_image_id);
}
void notify(int r);
void to_string(std::stringstream& ss);
void enqueue_failed_delete(int error_code);
void retry_failed_deletions();
- unique_ptr<DeleteInfo> const* find_delete_info(const std::string& image_name);
+ unique_ptr<DeleteInfo> const*
+ find_delete_info(int64_t local_pool_id, const std::string &global_image_id);
+
};
} // namespace mirror