X-Git-Url: https://gerrit.opnfv.org/gerrit/gitweb?a=blobdiff_plain;f=src%2Fceph%2Fsrc%2Flibrbd%2Foperation%2FTrimRequest.h;fp=src%2Fceph%2Fsrc%2Flibrbd%2Foperation%2FTrimRequest.h;h=0000000000000000000000000000000000000000;hb=7da45d65be36d36b880cc55c5036e96c24b53f00;hp=8526046c94b3e4d4a1ec431a384b2f825800aace;hpb=691462d09d0987b47e112d6ee8740375df3c51b2;p=stor4nfv.git diff --git a/src/ceph/src/librbd/operation/TrimRequest.h b/src/ceph/src/librbd/operation/TrimRequest.h deleted file mode 100644 index 8526046..0000000 --- a/src/ceph/src/librbd/operation/TrimRequest.h +++ /dev/null @@ -1,107 +0,0 @@ -// -*- mode:C++; tab-width:8; c-basic-offset:2; indent-tabs-mode:t -*- -// vim: ts=8 sw=2 smarttab -#ifndef CEPH_LIBRBD_OPERATION_TRIM_REQUEST_H -#define CEPH_LIBRBD_OPERATION_TRIM_REQUEST_H - -#include "librbd/AsyncRequest.h" - -namespace librbd -{ - -class ImageCtx; -class ProgressContext; - -namespace operation { - -template -class TrimRequest : public AsyncRequest -{ -public: - static TrimRequest *create(ImageCtxT &image_ctx, Context *on_finish, - uint64_t original_size, uint64_t new_size, - ProgressContext &prog_ctx) { - return new TrimRequest(image_ctx, on_finish, original_size, new_size, - prog_ctx); - } - - TrimRequest(ImageCtxT &image_ctx, Context *on_finish, - uint64_t original_size, uint64_t new_size, - ProgressContext &prog_ctx); - - void send() override; - -protected: - /** - * Trim goes through the following state machine to remove whole objects, - * clean partially trimmed objects, and update the object map: - * - * @verbatim - * - * . . . . . . . . . . . . . . . . . - * | . - * v (skip if not needed) . - * STATE_PRE_TRIM . - * | . - * v (skip if not needed) . - * STATE_COPYUP_OBJECTS . - * | . - * v (skip if not needed) . - * STATE_REMOVE_OBJECTS . - * | . - * v (skip if not needed) . - * STATE_POST_TRIM . - * | . - * v (skip if not needed) . - * STATE_CLEAN_BOUNDARY . - * | . - * v . - * STATE_FINISHED < . . . . . . . . . . . . . . . - * | - * v - * - * - * The _COPYUP_OBJECTS state is skipped if there is no parent overlap - * within the new image size and the image does not have any snapshots. - * The _PRE_TRIM/_POST_TRIM states are skipped if the object map - * isn't enabled. The _REMOVE_OBJECTS state is skipped if no whole objects - * are removed. The _CLEAN_BOUNDARY state is skipped if no boundary - * objects are cleaned. The state machine will immediately transition - * to _FINISHED state if there are no bytes to trim. - */ - - enum State { - STATE_PRE_TRIM, - STATE_COPYUP_OBJECTS, - STATE_REMOVE_OBJECTS, - STATE_POST_TRIM, - STATE_CLEAN_BOUNDARY, - STATE_FINISHED - }; - - bool should_complete(int r) override; - - State m_state = STATE_PRE_TRIM; - -private: - uint64_t m_delete_start; - uint64_t m_delete_start_min = 0; - uint64_t m_num_objects; - uint64_t m_delete_off; - uint64_t m_new_size; - ProgressContext &m_prog_ctx; - - void send_pre_trim(); - void send_copyup_objects(); - void send_remove_objects(); - void send_post_trim(); - - void send_clean_boundary(); - void send_finish(int r); -}; - -} // namespace operation -} // namespace librbd - -extern template class librbd::operation::TrimRequest; - -#endif // CEPH_LIBRBD_OPERATION_TRIM_REQUEST_H