1 // -*- mode:C++; tab-width:8; c-basic-offset:2; indent-tabs-mode:t -*-
2 // vim: ts=8 sw=2 smarttab
4 #ifndef CEPH_LIBRBD_OPERATION_SNAPSHOT_REMOVE_REQUEST_H
5 #define CEPH_LIBRBD_OPERATION_SNAPSHOT_REMOVE_REQUEST_H
7 #include "librbd/operation/Request.h"
8 #include "include/buffer.h"
9 #include "librbd/Types.h"
20 template <typename ImageCtxT
= ImageCtx
>
21 class SnapshotRemoveRequest
: public Request
<ImageCtxT
> {
31 * v (skip if unsupported)
34 * v (skip if unnecessary)
35 * LIST_CHILDREN <-------------\
37 * v (skip if unnecessary) | (repeat as needed)
38 * DETACH_STALE_CHILD ---------/
40 * v (skip if unnecessary)
43 * v (skip if disabled/in-use)
58 static SnapshotRemoveRequest
*create(
59 ImageCtxT
&image_ctx
, const cls::rbd::SnapshotNamespace
&snap_namespace
,
60 const std::string
&snap_name
, uint64_t snap_id
, Context
*on_finish
) {
61 return new SnapshotRemoveRequest(image_ctx
, on_finish
, snap_namespace
,
65 SnapshotRemoveRequest(ImageCtxT
&image_ctx
, Context
*on_finish
,
66 const cls::rbd::SnapshotNamespace
&snap_namespace
,
67 const std::string
&snap_name
,
71 void send_op() override
;
72 bool should_complete(int r
) override
;
74 journal::Event
create_event(uint64_t op_tid
) const override
{
75 return journal::SnapRemoveEvent(op_tid
, m_snap_namespace
, m_snap_name
);
79 cls::rbd::SnapshotNamespace m_snap_namespace
;
80 cls::rbd::ChildImageSpecs m_child_images
;
81 std::string m_snap_name
;
83 bool m_trashed_snapshot
= false;
84 bool m_child_attached
= false;
86 ceph::bufferlist m_out_bl
;
89 void handle_trash_snap(int r
);
92 void handle_get_snap(int r
);
95 void handle_list_children(int r
);
97 void detach_stale_child();
98 void handle_detach_stale_child(int r
);
101 void handle_detach_child(int r
);
103 void remove_object_map();
104 void handle_remove_object_map(int r
);
106 void release_snap_id();
107 void handle_release_snap_id(int r
);
110 void handle_remove_snap(int r
);
112 void remove_snap_context();
113 int scan_for_parents(cls::rbd::ParentImageSpec
&pspec
);
117 } // namespace operation
118 } // namespace librbd
120 extern template class librbd::operation::SnapshotRemoveRequest
<librbd::ImageCtx
>;
122 #endif // CEPH_LIBRBD_OPERATION_SNAPSHOT_REMOVE_REQUEST_H