X-Git-Url: https://git.proxmox.com/?a=blobdiff_plain;f=ceph%2Fsrc%2Ftools%2Frbd_mirror%2FImageDeleter.h;h=d3df9ed6330481d8899a77aaf68be9f0247579ed;hb=c07f9fc5a4f48397831383549fb0482b93480643;hp=c91f2fbc6ff138a3680f2f8bdbf67442c4da5d35;hpb=9439ae556f035e65c9c107ae13ddd09457dbbecd;p=ceph.git diff --git a/ceph/src/tools/rbd_mirror/ImageDeleter.h b/ceph/src/tools/rbd_mirror/ImageDeleter.h index c91f2fbc6..d3df9ed63 100644 --- a/ceph/src/tools/rbd_mirror/ImageDeleter.h +++ b/ceph/src/tools/rbd_mirror/ImageDeleter.h @@ -25,28 +25,33 @@ #include #include +class AdminSocketHook; class ContextWQ; +namespace librbd { struct ImageCtx; } namespace rbd { namespace mirror { -class ImageDeleterAdminSocketHook; +template class ServiceDaemon; /** * Manage deletion of non-primary images. */ +template class ImageDeleter { public: static const int EISPRM = 1000; - ImageDeleter(ContextWQ *work_queue, SafeTimer *timer, Mutex *timer_lock); + ImageDeleter(ContextWQ *work_queue, SafeTimer *timer, Mutex *timer_lock, + ServiceDaemon* service_daemon); ~ImageDeleter(); ImageDeleter(const ImageDeleter&) = delete; ImageDeleter& operator=(const ImageDeleter&) = delete; void schedule_image_delete(RadosRef local_rados, int64_t local_pool_id, - const std::string& global_image_id); + const std::string& global_image_id, + bool ignore_orphaned); void wait_for_scheduled_deletion(int64_t local_pool_id, const std::string &global_image_id, Context *ctx, @@ -78,15 +83,17 @@ private: RadosRef local_rados; int64_t local_pool_id; std::string global_image_id; + bool ignore_orphaned; int error_code = 0; int retries = 0; bool notify_on_failed_retry = true; Context *on_delete = nullptr; DeleteInfo(RadosRef local_rados, int64_t local_pool_id, - const std::string& global_image_id) : - local_rados(local_rados), local_pool_id(local_pool_id), - global_image_id(global_image_id) { + const std::string& global_image_id, + bool ignore_orphaned) + : local_rados(local_rados), local_pool_id(local_pool_id), + global_image_id(global_image_id), ignore_orphaned(ignore_orphaned) { } bool match(int64_t local_pool_id, const std::string &global_image_id) { @@ -99,9 +106,10 @@ private: bool print_failure_info=false); }; - std::atomic m_running { 0 }; + std::atomic m_running { 1 }; ContextWQ *m_work_queue; + ServiceDaemon* m_service_daemon; std::deque > m_delete_queue; Mutex m_delete_lock; @@ -116,7 +124,7 @@ private: SafeTimer *m_failed_timer; Mutex *m_failed_timer_lock; - ImageDeleterAdminSocketHook *m_asok_hook; + AdminSocketHook *m_asok_hook; void run(); bool process_image_delete(); @@ -136,4 +144,6 @@ private: } // namespace mirror } // namespace rbd +extern template class rbd::mirror::ImageDeleter; + #endif // CEPH_RBD_MIRROR_IMAGEDELETER_H