Fix some bugs when testing opensds ansible
[stor4nfv.git] / src / ceph / src / librbd / object_map / Request.h
1 // -*- mode:C++; tab-width:8; c-basic-offset:2; indent-tabs-mode:t -*-
2 // vim: ts=8 sw=2 smarttab
3
4 #ifndef CEPH_LIBRBD_OBJECT_MAP_REQUEST_H
5 #define CEPH_LIBRBD_OBJECT_MAP_REQUEST_H
6
7 #include "include/int_types.h"
8 #include "librbd/AsyncRequest.h"
9
10 class Context;
11
12 namespace librbd {
13
14 class ImageCtx;
15
16 namespace object_map {
17
18 class Request : public AsyncRequest<> {
19 public:
20   Request(ImageCtx &image_ctx, uint64_t snap_id, Context *on_finish)
21     : AsyncRequest(image_ctx, on_finish), m_snap_id(snap_id),
22       m_state(STATE_REQUEST)
23   {
24   }
25
26   void send() override = 0;
27
28 protected:
29   const uint64_t m_snap_id;
30
31   bool should_complete(int r) override;
32   int filter_return_code(int r) const override {
33     // never propagate an error back to the caller
34     return 0;
35   }
36   virtual void finish_request() {
37   }
38
39 private:
40   /**
41    * <start> ---> STATE_REQUEST ---> <finish>
42    *                   |                ^
43    *                   v                |
44    *            STATE_INVALIDATE -------/
45    */
46   enum State {
47     STATE_REQUEST,
48     STATE_INVALIDATE
49   };
50
51   State m_state;
52
53   bool invalidate();
54 };
55
56 } // namespace object_map
57 } // namespace librbd
58
59 #endif // CEPH_LIBRBD_OBJECT_MAP_REQUEST_H