]>
Commit | Line | Data |
---|---|---|
cd748f27 | 1 | #ifndef __COSS_H__ |
2 | #define __COSS_H__ | |
3 | ||
d3b3ab85 | 4 | #include "SwapDir.h" |
5 | ||
cd748f27 | 6 | #ifndef COSS_MEMBUF_SZ |
7 | #define COSS_MEMBUF_SZ 1048576 | |
8 | #endif | |
9 | ||
c94af0b9 | 10 | /* Note that swap_filen in sio/e are actually disk offsets too! */ |
11 | ||
12 | /* What we're doing in storeCossAllocate() */ | |
cd748f27 | 13 | #define COSS_ALLOC_NOTIFY 0 |
14 | #define COSS_ALLOC_ALLOCATE 1 | |
15 | #define COSS_ALLOC_REALLOC 2 | |
62e76326 | 16 | |
d3b3ab85 | 17 | class CossSwapDir; |
62e76326 | 18 | |
b9ae18aa | 19 | class CossMemBuf |
1a224843 | 20 | { |
1a224843 | 21 | |
b9ae18aa | 22 | public: |
23 | void describe(int level, int line); | |
24 | void maybeWrite(CossSwapDir * SD); | |
25 | void write(CossSwapDir * SD); | |
c94af0b9 | 26 | dlink_node node; |
27 | size_t diskstart; /* in blocks */ | |
28 | size_t diskend; /* in blocks */ | |
d3b3ab85 | 29 | CossSwapDir *SD; |
cd748f27 | 30 | int lockcount; |
31 | char buffer[COSS_MEMBUF_SZ]; | |
62e76326 | 32 | |
33 | struct _cossmembuf_flags | |
34 | { | |
35 | ||
36 | unsigned int full: | |
37 | 1; | |
38 | ||
39 | unsigned int writing: | |
40 | 1; | |
41 | } | |
42 | ||
43 | flags; | |
cd748f27 | 44 | }; |
45 | ||
62e76326 | 46 | struct _cossindex |
47 | { | |
6a566b9c | 48 | /* Note: the dlink_node MUST be the first member of the structure. |
49 | * This member is later pointer typecasted to coss_index_node *. | |
50 | */ | |
51 | dlink_node node; | |
cd748f27 | 52 | }; |
53 | ||
54 | ||
d3b3ab85 | 55 | |
cd748f27 | 56 | /* Per-storeiostate info */ |
62e76326 | 57 | |
e877aaac | 58 | class CossState : public StoreIOState |
62e76326 | 59 | { |
60 | ||
d3b3ab85 | 61 | public: |
b001e822 | 62 | MEMPROXY_CLASS(CossState); |
d3b3ab85 | 63 | CossState(CossSwapDir *); |
64 | ~CossState(); | |
65 | ||
cd748f27 | 66 | char *readbuffer; |
67 | char *requestbuf; | |
68 | size_t requestlen; | |
c94af0b9 | 69 | size_t requestoffset; /* in blocks */ |
70 | sfileno reqdiskoffset; /* in blocks */ | |
62e76326 | 71 | |
72 | struct | |
73 | { | |
74 | ||
75 | unsigned int reading: | |
76 | 1; | |
77 | ||
78 | unsigned int writing: | |
79 | 1; | |
80 | } | |
81 | ||
82 | flags; | |
1a224843 | 83 | |
b9ae18aa | 84 | CossMemBuf *locked_membuf; |
d3b3ab85 | 85 | size_t st_size; |
86 | void read_(char *buf, size_t size, off_t offset, STRCB * callback, void *callback_data); | |
528b2c61 | 87 | void write(char const *buf, size_t size, off_t offset, FREE * free_func); |
d3b3ab85 | 88 | void close(); |
b9ae18aa | 89 | void doCallback(int errflag); |
90 | void lockMemBuf(); | |
d3b3ab85 | 91 | |
92 | CossSwapDir *SD; | |
cd748f27 | 93 | }; |
94 | ||
b001e822 | 95 | MEMPROXY_CLASS_INLINE(CossState) |
96 | ||
6a566b9c | 97 | typedef struct _cossindex CossIndexNode; |
cd748f27 | 98 | |
99 | /* Whether the coss system has been setup or not */ | |
100 | extern int coss_initialised; | |
a3efa961 | 101 | extern MemAllocator *coss_membuf_pool; |
102 | extern MemAllocator *coss_index_pool; | |
cd748f27 | 103 | |
b9ae18aa | 104 | #include "DiskIO/ReadRequest.h" |
105 | ||
106 | class CossRead : public ReadRequest | |
d3b3ab85 | 107 | { |
62e76326 | 108 | |
d3b3ab85 | 109 | public: |
b9ae18aa | 110 | void * operator new (size_t); |
111 | void operator delete (void *); | |
112 | CossRead(ReadRequest const &base, StoreIOState::Pointer anSio) : ReadRequest(base) , sio(anSio) {} | |
113 | ||
114 | StoreIOState::Pointer sio; | |
115 | ||
116 | private: | |
117 | CBDATA_CLASS(CossRead); | |
d3b3ab85 | 118 | }; |
cd748f27 | 119 | |
b9ae18aa | 120 | #include "DiskIO/WriteRequest.h" |
121 | ||
122 | class CossWrite : public WriteRequest | |
123 | { | |
124 | ||
125 | public: | |
126 | void * operator new (size_t); | |
127 | void operator delete (void *); | |
128 | CossWrite(WriteRequest const &base, CossMemBuf *aBuf) : WriteRequest(base) , membuf(aBuf) {} | |
129 | ||
130 | CossMemBuf *membuf; | |
131 | ||
132 | private: | |
133 | CBDATA_CLASS(CossWrite); | |
134 | }; | |
1a224843 | 135 | |
cd748f27 | 136 | #endif |