Infinispan HotRod C++ Client 9.2.0.Final
Loading...
Searching...
No Matches
Transactions.h
Go to the documentation of this file.
1/*
2 * Transactions.h
3 *
4 * Created on: Jul 27, 2018
5 * Author: rigazilla
6 */
7
8#ifndef INFINISPAN_HOTROD_CPP_SRC_HOTROD_API_TRANSACTIONS_H_
9#define INFINISPAN_HOTROD_CPP_SRC_HOTROD_API_TRANSACTIONS_H_
10
13#include <map>
14#include <thread>
15#include <vector>
16#include <functional>
17
18namespace infinispan {
19namespace hotrod {
20
21 class XID {
22public:
24 HR_EXTERN bool operator< (const XID& other) const;
25 HR_EXTERN uint32_t getFormatId() const;
26 HR_EXTERN const std::vector<char>& getGlobalTransactionId() const;
27 HR_EXTERN const std::vector<char>& getBranchQualifier() const;
28private:
29 std::vector<char> globalId;
30 std::vector<char> branchId;
31};
38class RemoteCacheBase;
39
40namespace operations {
41class PrepareCommitOperation;
42}
43
44// Replicating the status of a Java transaction
46 ACTIVE = 0,
55 ROLLING_BACK = 9
56};
57// Decoding the remote tx operation return code
58enum class TransactionRemoteStatus : unsigned int {
59 XA_OK = 0x00, // all ok
60 XA_RDONLY = 0x03, // branch is read only but that seems ok
61 XA_HEURCOM = 0x07, // resource committed after heuristic decision
62 XAER_NOTA = 0xFFFFFFFC, // the XID is not valid
63 XA_HEURMIX = 0x05, // resource partially committed and rolledback after heuristic decision
64 XA_HEURHAZ = 0x08, // tx operation on resource completed somehow heuristically
65 XA_HEURRB = 0x06, // resource rolled back after heuristic decision
66 XA_RBROLLBACK = 0x64
67};
68
74public:
75 enum Action { SET, DELETED };
76 enum ControlBit { NONE = 0x00, NOT_READ = 0x01, NON_EXISTING = 0x02, REMOVE_OP = 0x04 };
77 struct ContextEntry {
79 const void* value;
82 bool changed;
83 std::function<void (const void *)> deleter;
84 std::function<void (const void *, std::vector<char>&)> valueMarshaller;
85 unsigned char controlByte = NONE;
86 ContextEntry() : action(SET), value(nullptr), changed(false) {}
87 ContextEntry(Action action, const void* value, std::function<void (const void *)> deleter, std::function<void (const void *, std::vector<char>&)> valueMarshaller) : action(action), value(value), changed(false), deleter(deleter), valueMarshaller(valueMarshaller) {}
88 ContextEntry(Action action, const void* value, MetadataValue& meta, std::function<void (const void *)> deleter, std::function<void (const void *, std::vector<char>&)> valueMarshaller) : action(action), value(value), origMeta(meta), meta(meta), changed(false), deleter(deleter), valueMarshaller(valueMarshaller) {}
90 };
92 {
93 return status;
94 }
96 {
97 this->status = status;
98 }
99 bool hasValue(const std::vector<char>& key);
100 bool isDeleted(const std::vector<char>& key);
101 const void* getValue(const std::vector<char>& key);
102 ContextEntry& getEntry(std::vector<char>& key);
103 void addValue(std::vector<char>& key, const void* value, MetadataValue& meta, std::function<void (const void *)> deleter, std::function<void (const void *, std::vector<char>&)> valueMarshaller, ControlBit cb = NONE);
104 void setValue(std::vector<char>& key, const void* value, MetadataValue& meta, std::function<void (const void *)> deleter, std::function<void (const void *, std::vector<char>&)> valueMarshaller);
105 void setValueAsDeleted(std::vector<char>& key);
106 void removeEntry(const std::vector<char>& key);
107 void clear();
108 void getBulk(int size, std::map<std::vector<char>, const void*> &mbuf);
109 int size();
110private:
111 std::map<const std::vector<char>, ContextEntry> context;
112 friend TransactionManager;
113 friend operations::PrepareCommitOperation;
115};
116
121public:
123 void clear();
124private:
125 std::map<RemoteCacheBase*, TransactionContext> registeredCache;
126 std::map<RemoteCacheBase*, TransactionContext*> preparedCache;
127 friend TransactionManager;
128};
129
131public:
132 // Construct with default status
134 status(NO_TRANSACTION) {
135 }
137 return status;
138 }
139 bool canBegin() const {
140 return status == NO_TRANSACTION || status == COMMITTED;
141 }
142 bool canCommit() const {
143 return status == ACTIVE;
144 }
145 bool canRollback() const {
146 return status == ACTIVE;
147 }
148 bool needsRollback() const {
149 return status == MARKED_ROLLBACK;
150 }
151 bool acceptRW() const {
152 return status == ACTIVE || status == MARKED_ROLLBACK;
153 }
154 bool acceptRead() const {
155 return status != COMMITTED && status != ROLLEDBACK;
156 }
157 bool operator< (const Transaction& other) const { return this->xid < other.xid; }
158 HR_EXTERN const std::string& statusToString();
159private:
160 TransactionStatus status;
161 XID xid;
163 static const std::map<TransactionStatus, std::string> mapStatusString;
164friend TransactionManager;
165friend TransactionTable;
166};
167
169 bool operator()(const std::vector<char>& a, const std::vector<char>& b) const {
170 return a.size() < b.size();
171 }
172};
173
175public:
177};
178
179}}
180
181
182
183
184#endif /* INFINISPAN_HOTROD_CPP_SRC_HOTROD_API_TRANSACTIONS_H_ */
#define HR_EXTERN
Definition: ImportExport.h:35
Definition: MetadataValue.h:10
Definition: Transactions.h:120
TransactionContext & getTransactionContext(RemoteCacheBase *cache)
Definition: Transactions.h:73
ControlBit
Definition: Transactions.h:76
@ NOT_READ
Definition: Transactions.h:76
@ NONE
Definition: Transactions.h:76
@ REMOVE_OP
Definition: Transactions.h:76
@ NON_EXISTING
Definition: Transactions.h:76
ContextEntry & getEntry(std::vector< char > &key)
TransactionRemoteStatus getStatus() const
Definition: Transactions.h:91
Action
Definition: Transactions.h:75
@ SET
Definition: Transactions.h:75
@ DELETED
Definition: Transactions.h:75
void setPrepared(TransactionRemoteStatus status)
Definition: Transactions.h:95
bool hasValue(const std::vector< char > &key)
void getBulk(int size, std::map< std::vector< char >, const void * > &mbuf)
const void * getValue(const std::vector< char > &key)
void removeEntry(const std::vector< char > &key)
void setValue(std::vector< char > &key, const void *value, MetadataValue &meta, std::function< void(const void *)> deleter, std::function< void(const void *, std::vector< char > &)> valueMarshaller)
void addValue(std::vector< char > &key, const void *value, MetadataValue &meta, std::function< void(const void *)> deleter, std::function< void(const void *, std::vector< char > &)> valueMarshaller, ControlBit cb=NONE)
void setValueAsDeleted(std::vector< char > &key)
bool isDeleted(const std::vector< char > &key)
Definition: TransactionManager.h:25
Definition: Transactions.h:174
SynchronizationAdapter & getAdapter(Transaction &tx)
Definition: Transactions.h:130
bool acceptRW() const
Definition: Transactions.h:151
bool canCommit() const
Definition: Transactions.h:142
bool canBegin() const
Definition: Transactions.h:139
HR_EXTERN const std::string & statusToString()
Transaction()
Definition: Transactions.h:133
bool canRollback() const
Definition: Transactions.h:145
bool acceptRead() const
Definition: Transactions.h:154
TransactionStatus getStatus() const
Definition: Transactions.h:136
bool needsRollback() const
Definition: Transactions.h:148
bool operator<(const Transaction &other) const
Definition: Transactions.h:157
Definition: Transactions.h:21
HR_EXTERN const std::vector< char > & getBranchQualifier() const
HR_EXTERN uint32_t getFormatId() const
HR_EXTERN bool operator<(const XID &other) const
HR_EXTERN const std::vector< char > & getGlobalTransactionId() const
TransactionRemoteStatus
Definition: Transactions.h:58
TransactionStatus
Definition: Transactions.h:45
@ ROLLEDBACK
Definition: Transactions.h:50
@ MARKED_ROLLBACK
Definition: Transactions.h:47
@ ROLLING_BACK
Definition: Transactions.h:55
@ UNKNOWN
Definition: Transactions.h:51
@ NO_TRANSACTION
Definition: Transactions.h:52
@ COMMITTED
Definition: Transactions.h:49
@ PREPARED
Definition: Transactions.h:48
@ COMMITTING
Definition: Transactions.h:54
@ ACTIVE
Definition: Transactions.h:46
@ PREPARING
Definition: Transactions.h:53
Definition: AuthenticationConfiguration.h:10
unsigned char controlByte
Definition: Transactions.h:85
std::function< void(const void *)> deleter
Definition: Transactions.h:83
ContextEntry(Action action, const void *value, MetadataValue &meta, std::function< void(const void *)> deleter, std::function< void(const void *, std::vector< char > &)> valueMarshaller)
Definition: Transactions.h:88
MetadataValue meta
Definition: Transactions.h:81
bool changed
Definition: Transactions.h:82
Action action
Definition: Transactions.h:78
MetadataValue origMeta
Definition: Transactions.h:80
ContextEntry(Action action, const void *value, std::function< void(const void *)> deleter, std::function< void(const void *, std::vector< char > &)> valueMarshaller)
Definition: Transactions.h:87
const void * value
Definition: Transactions.h:79
std::function< void(const void *, std::vector< char > &)> valueMarshaller
Definition: Transactions.h:84
Definition: Transactions.h:168
bool operator()(const std::vector< char > &a, const std::vector< char > &b) const
Definition: Transactions.h:169