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_RENAME_REQUEST_H
5 #define CEPH_LIBRBD_RENAME_REQUEST_H
7 #include "librbd/operation/Request.h"
18 template <typename ImageCtxT
= ImageCtx
>
19 class RenameRequest
: public Request
<ImageCtxT
>
23 * Rename goes through the following state machine:
30 * STATE_READ_DIRECTORY
33 * STATE_READ_SOURCE_HEADER
36 * STATE_WRITE_DEST_HEADER
39 * STATE_UPDATE_DIRECTORY
42 * STATE_REMOVE_SOURCE_HEADER
52 STATE_READ_SOURCE_HEADER
,
53 STATE_WRITE_DEST_HEADER
,
54 STATE_UPDATE_DIRECTORY
,
55 STATE_REMOVE_SOURCE_HEADER
58 RenameRequest(ImageCtxT
&image_ctx
, Context
*on_finish
,
59 const std::string
&dest_name
);
62 void send_op() override
;
63 bool should_complete(int r
) override
;
64 int filter_return_code(int r
) const override
;
66 journal::Event
create_event(uint64_t op_tid
) const override
{
67 return journal::RenameEvent(op_tid
, m_dest_name
);
71 std::string m_dest_name
;
73 std::string m_source_oid
;
74 std::string m_dest_oid
;
76 State m_state
= STATE_READ_DIRECTORY
;
78 bufferlist m_source_name_bl
;
79 bufferlist m_header_bl
;
81 void send_read_directory();
82 void send_read_source_header();
83 void send_write_destination_header();
84 void send_update_directory();
85 void send_remove_source_header();
90 } // namespace operation
93 extern template class librbd::operation::RenameRequest
<librbd::ImageCtx
>;
95 #endif // CEPH_LIBRBD_RENAME_REQUEST_H