1 // -*- mode:C++; tab-width:8; c-basic-offset:2; indent-tabs-mode:t -*-
2 // vim: ts=8 sw=2 smarttab
4 #ifndef CEPH_CACHE_TYPES_H
5 #define CEPH_CACHE_TYPES_H
7 #include "include/encoding.h"
8 #include "include/Context.h"
9 #include "SocketCommon.h"
12 namespace immutable_obj_cache
{
19 }__attribute__((packed
));
21 inline uint8_t get_header_size() {
22 return sizeof(HeaderHelper
);
25 inline uint32_t get_data_len(char* buf
) {
26 HeaderHelper
* header
= reinterpret_cast<HeaderHelper
*>(buf
);
31 class ObjectCacheRequest
{
38 CacheGenContextURef process_msg
;
41 ObjectCacheRequest(uint16_t type
, uint64_t seq
);
42 virtual ~ObjectCacheRequest();
44 // encode consists of two steps
45 // step 1 : directly encode common bits using encode method of base classs.
46 // step 2 : according to payload_empty, determine whether addtional bits
47 // need to be encoded which be implements by child class.
49 void decode(bufferlist
& bl
);
50 bufferlist
get_payload_bufferlist() { return payload
; }
52 virtual void encode_payload() = 0;
53 virtual void decode_payload(bufferlist::const_iterator bl_it
) = 0;
54 virtual uint16_t get_request_type() = 0;
55 virtual bool payload_empty() = 0;
58 class ObjectCacheRegData
: public ObjectCacheRequest
{
61 ObjectCacheRegData(uint16_t t
, uint64_t s
);
62 ~ObjectCacheRegData() override
;
63 void encode_payload() override
;
64 void decode_payload(bufferlist::const_iterator bl
) override
;
65 uint16_t get_request_type() override
{ return RBDSC_REGISTER
; }
66 bool payload_empty() override
{ return true; }
69 class ObjectCacheRegReplyData
: public ObjectCacheRequest
{
71 ObjectCacheRegReplyData();
72 ObjectCacheRegReplyData(uint16_t t
, uint64_t s
);
73 ~ObjectCacheRegReplyData() override
;
74 void encode_payload() override
;
75 void decode_payload(bufferlist::const_iterator iter
) override
;
76 uint16_t get_request_type() override
{ return RBDSC_REGISTER_REPLY
; }
77 bool payload_empty() override
{ return true; }
80 class ObjectCacheReadData
: public ObjectCacheRequest
{
87 std::string pool_namespace
;
88 ObjectCacheReadData(uint16_t t
, uint64_t s
, uint64_t read_offset
,
89 uint64_t read_len
, uint64_t pool_id
,
90 uint64_t snap_id
, std::string oid
,
91 std::string pool_namespace
);
92 ObjectCacheReadData(uint16_t t
, uint64_t s
);
93 ~ObjectCacheReadData() override
;
94 void encode_payload() override
;
95 void decode_payload(bufferlist::const_iterator bl
) override
;
96 uint16_t get_request_type() override
{ return RBDSC_READ
; }
97 bool payload_empty() override
{ return false; }
100 class ObjectCacheReadReplyData
: public ObjectCacheRequest
{
102 std::string cache_path
;
103 ObjectCacheReadReplyData(uint16_t t
, uint64_t s
, std::string cache_path
);
104 ObjectCacheReadReplyData(uint16_t t
, uint64_t s
);
105 ~ObjectCacheReadReplyData() override
;
106 void encode_payload() override
;
107 void decode_payload(bufferlist::const_iterator bl
) override
;
108 uint16_t get_request_type() override
{ return RBDSC_READ_REPLY
; }
109 bool payload_empty() override
{ return false; }
112 class ObjectCacheReadRadosData
: public ObjectCacheRequest
{
114 ObjectCacheReadRadosData();
115 ObjectCacheReadRadosData(uint16_t t
, uint64_t s
);
116 ~ObjectCacheReadRadosData() override
;
117 void encode_payload() override
;
118 void decode_payload(bufferlist::const_iterator bl
) override
;
119 uint16_t get_request_type() override
{ return RBDSC_READ_RADOS
; }
120 bool payload_empty() override
{ return true; }
123 ObjectCacheRequest
* decode_object_cache_request(bufferlist payload_buffer
);
125 } // namespace immutable_obj_cache
127 #endif // CEPH_CACHE_TYPES_H