Infinispan HotRod C++ Client  8.3.1.Final
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros
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 
18 namespace infinispan {
19 namespace hotrod {
20 
21  class XID {
22 public:
23  HR_EXTERN XID();
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;
28 private:
29  std::vector<char> globalId;
30  std::vector<char> branchId;
31 };
35 class TransactionManager;
37 class TransactionTable;
38 class RemoteCacheBase;
39 
40 namespace operations {
41 class PrepareCommitOperation;
42 }
43 
44 // Replicating the status of a Java transaction
46  ACTIVE = 0,
48  PREPARED = 2,
49  COMMITTED = 3,
51  UNKNOWN = 5,
53  PREPARING = 7,
56 };
57 // Decoding the remote tx operation return code
58 enum 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 
74 public:
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();
110 private:
111  std::map<const std::vector<char>, ContextEntry> context;
112  friend TransactionManager;
113  friend operations::PrepareCommitOperation;
115 };
116 
121 public:
122  TransactionContext& getTransactionContext(RemoteCacheBase* cache);
123  void clear();
124 private:
125  std::map<RemoteCacheBase*, TransactionContext> registeredCache;
126  std::map<RemoteCacheBase*, TransactionContext*> preparedCache;
127  friend TransactionManager;
128 };
129 
130 class Transaction {
131 public:
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();
159 private:
160  TransactionStatus status;
161  XID xid;
163  static const std::map<TransactionStatus, std::string> mapStatusString;
164 friend TransactionManager;
165 friend 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 
175 public:
177 };
178 
179 }}
180 
181 
182 
183 
184 #endif /* INFINISPAN_HOTROD_CPP_SRC_HOTROD_API_TRANSACTIONS_H_ */
Definition: Transactions.h:168
Definition: Transactions.h:47
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)
TransactionContext & getTransactionContext(RemoteCacheBase *cache)
Definition: Transactions.h:21
Definition: Transactions.h:174
bool canRollback() const
Definition: Transactions.h:145
HR_EXTERN uint32_t getFormatId() const
std::function< void(const void *, std::vector< char > &)> valueMarshaller
Definition: Transactions.h:84
Definition: Transactions.h:73
void setValueAsDeleted(std::vector< char > &key)
#define HR_EXTERN
Definition: ImportExport.h:35
HR_EXTERN const std::vector< char > & getBranchQualifier() const
Transaction()
Definition: Transactions.h:133
HR_EXTERN const std::vector< char > & getGlobalTransactionId() const
Definition: Transactions.h:75
Definition: Transactions.h:52
bool acceptRW() const
Definition: Transactions.h:151
TransactionRemoteStatus getStatus() const
Definition: Transactions.h:91
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)
HR_EXTERN const std::string & statusToString()
Definition: TransactionManager.h:24
bool hasValue(const std::vector< char > &key)
HR_EXTERN bool operator<(const XID &other) const
Action action
Definition: Transactions.h:78
const void * value
Definition: Transactions.h:79
Definition: Transactions.h:46
void getBulk(int size, std::map< std::vector< char >, const void * > &mbuf)
Definition: Transactions.h:50
SynchronizationAdapter & getAdapter(Transaction &tx)
bool operator()(const std::vector< char > &a, const std::vector< char > &b) const
Definition: Transactions.h:169
Definition: Transactions.h:49
unsigned char controlByte
Definition: Transactions.h:85
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
Action
Definition: Transactions.h:75
Definition: Transactions.h:51
bool needsRollback() const
Definition: Transactions.h:148
bool canBegin() const
Definition: Transactions.h:139
bool acceptRead() const
Definition: Transactions.h:154
TransactionRemoteStatus
Definition: Transactions.h:58
std::function< void(const void *)> deleter
Definition: Transactions.h:83
bool changed
Definition: Transactions.h:82
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
ContextEntry & getEntry(std::vector< char > &key)
Definition: Transactions.h:54
void setPrepared(TransactionRemoteStatus status)
Definition: Transactions.h:95
void removeEntry(const std::vector< char > &key)
ControlBit
Definition: Transactions.h:76
Definition: Transactions.h:55
MetadataValue origMeta
Definition: Transactions.h:80
bool canCommit() const
Definition: Transactions.h:142
Definition: Transactions.h:53
TransactionStatus getStatus() const
Definition: Transactions.h:136
MetadataValue meta
Definition: Transactions.h:81
Definition: MetadataValue.h:9
bool isDeleted(const std::vector< char > &key)
TransactionStatus
Definition: Transactions.h:45
Definition: Transactions.h:130
const void * getValue(const std::vector< char > &key)
Definition: Transactions.h:48
bool operator<(const Transaction &other) const
Definition: Transactions.h:157
Definition: Transactions.h:120