Infinispan HotRod C++ Client  9.1.0.Final
ConfigurationBuilder.h
Go to the documentation of this file.
1 #ifndef ISPN_HOTROD_CONFIGURATION_CONFIGURATIONBUILDER_H
2 #define ISPN_HOTROD_CONFIGURATION_CONFIGURATIONBUILDER_H
3 
4 #include <string>
5 #include <vector>
6 #include <sstream>
7 #include <fstream>
8 #include <iostream>
9 
10 #include "infinispan/hotrod/defs.h"
13 #include "Configuration.h"
17 #include "NearCacheConfiguration.h"
18 
19 using namespace infinispan::hotrod::event;
20 
21 namespace infinispan {
22 namespace hotrod {
23 
29 {
30 public:
31  ClusterConfigurationBuilder(std::vector<ServerConfigurationBuilder>& servers, ConfigurationBuilder &parent) : servers(servers), m_parent(parent) {}
40  ClusterConfigurationBuilder& addClusterNode(const std::string host, const int port)
41  {
42  servers.push_back(ServerConfigurationBuilder(m_parent).host(host).port(port));
43  return *this;
44  }
45 private:
46  std::vector<ServerConfigurationBuilder>& servers;
47  ConfigurationBuilder &m_parent;
48 };
49 
54 {
55 public:
57 
61  int getMaxEntries() const {
62  return m_maxEntries;
63  }
64 
72  NearCacheConfigurationBuilder& maxEntries(unsigned int maxEntries = 0) {
73  this->m_maxEntries = maxEntries;
74  return *this;
75  }
76 
81  return m_mode;
82  }
83 
92  this->m_mode = mode;
93  return *this;
94  }
95 
97  {
98  return NearCacheConfiguration(m_mode,m_maxEntries);
99  }
100 
101  private:
102  NearCacheMode m_mode=DISABLED;
103  unsigned int m_maxEntries=0;
104 };
105 
112 {
113  public:
115  m_connectionTimeout(60000),
116  m_forceReturnValue(false),
117  m_keySizeEstimate(64),
118  m_protocolVersion(Configuration::PROTOCOL_VERSION_24),
119  m_socketTimeout(60000),
120  m_tcpNoDelay(true),
121  m_valueSizeEstimate(512),
122  m_maxRetries(10),
123  m_balancingStrategyProducer(nullptr),
124  __pragma(warning(suppress:4355)) // passing uninitialized 'this'
125  connectionPoolConfigurationBuilder(*this),
126  __pragma(warning(suppress:4355))
127  securityConfigurationBuilder(*this),
128  nearCacheConfigurationBuilder(*this),
129  m_transactional(false)
130  {}
131 
132  void validate() {}
133 
141  ClusterConfigurationBuilder addCluster(const std::string& clusterName) {
142  return ClusterConfigurationBuilder(m_serversMap[clusterName],*this);
143  }
144 
152  if (m_serversMap.find(Configuration::DEFAULT_CLUSTER_NAME) == m_serversMap.end())
153  {
155  }
156  auto& servers = m_serversMap[Configuration::DEFAULT_CLUSTER_NAME];
157  servers.push_back(ServerConfigurationBuilder(*this));
158  return servers[servers.size() - 1];
159  }
160 
161 
168  ConfigurationBuilder& addServers(std::string servers) {
169  std::istringstream originalStream(servers);
170  std::string stringHelper;
171  std::string hostHelper;
172  std::string portHelper;
173  int portInt;
174 
175  // TODO: handle IPv6 addresses
176  while(std::getline(originalStream,stringHelper,';')) {
177  std::istringstream singleServerStream(stringHelper);
178  std::getline(singleServerStream,hostHelper,':');
179  std::getline(singleServerStream,portHelper,':');
180  std::istringstream portStream(portHelper);
181  portStream >> portInt;
182  addServer().host(hostHelper).port(portInt);
183  }
184 
185  return *this;
186  }
187 
194  return connectionPoolConfigurationBuilder;
195  }
196 
202  ConfigurationBuilder& connectionTimeout(int connectionTimeout_) {
203  m_connectionTimeout = connectionTimeout_;
204  return *this;
205  }
206 
213  ConfigurationBuilder& forceReturnValues(bool forceReturnValues_) {
214  m_forceReturnValue = forceReturnValues_;
215  return *this;
216  }
217 
223  ConfigurationBuilder& keySizeEstimate(int keySizeEstimate_) {
224  m_keySizeEstimate = keySizeEstimate_;
225  return *this;
226  }
227 
233  ConfigurationBuilder& protocolVersion(const std::string &protocolVersion_) {
234  m_protocolVersion = protocolVersion_;
235  return *this;
236  }
237 
244  ConfigurationBuilder& socketTimeout(int socketTimeout_) {
245  m_socketTimeout = socketTimeout_;
246  return *this;
247  }
248 
255  return securityConfigurationBuilder.getSslConfigurationBuilder();
256  }
257 
264  return nearCacheConfigurationBuilder;
265  }
266 
272  ConfigurationBuilder& tcpNoDelay(bool tcpNoDelay_) {
273  m_tcpNoDelay = tcpNoDelay_;
274  return *this;
275  }
276 
282  ConfigurationBuilder& valueSizeEstimate(int valueSizeEstimate_) {
283  m_valueSizeEstimate = valueSizeEstimate_;
284  return *this;
285  }
286 
293  ConfigurationBuilder& maxRetries(int maxRetries_) {
294  m_maxRetries = maxRetries_;
295  return *this;
296  }
297 
299  m_balancingStrategyProducer = bsp;
300  return *this;
301  }
302 
310  return create();
311  }
312 
320  std::map<std::string,std::vector<ServerConfiguration>> serversMap;
321  for (auto p: m_serversMap)
322  {
323  std::vector<ServerConfiguration> scVec;
324  for (auto e : p.second)
325  {
326  scVec.push_back(e.create());
327  }
328  serversMap.insert(std::make_pair(p.first, scVec));
329  }
330  if (serversMap.size()==0)
331  {
332  std::vector<ServerConfiguration> scVec;
333  scVec.push_back(ServerConfigurationBuilder(*this).create());
334  serversMap.insert(std::make_pair(Configuration::DEFAULT_CLUSTER_NAME, scVec));
335  }
336 
337  return Configuration(m_protocolVersion,
338  connectionPoolConfigurationBuilder.create(),
339  m_connectionTimeout,
340  m_forceReturnValue,
341  m_keySizeEstimate,
342  serversMap,
343  m_socketTimeout,
344  securityConfigurationBuilder.create(),
345  m_tcpNoDelay,
346  m_valueSizeEstimate,
347  m_maxRetries,
348  nearCacheConfigurationBuilder.create(),
349  m_balancingStrategyProducer,
350  m_eventMarshaller, m_transactional);
351 
352  }
353 
361  // FIXME: read pool, ssl and server configs
362  m_protocolVersion = configuration.getProtocolVersionCString();
363  m_connectionTimeout = configuration.getConnectionTimeout();
364  m_forceReturnValue = configuration.isForceReturnValue();
365  m_socketTimeout = configuration.getSocketTimeout();
366  m_tcpNoDelay = configuration.isTcpNoDelay();
367  m_keySizeEstimate = configuration.getKeySizeEstimate();
368  m_valueSizeEstimate = configuration.getValueSizeEstimate();
369  m_maxRetries = configuration.getMaxRetries();
370  m_eventMarshaller = configuration.getEventMarshaller();
371  m_transactional = configuration.isTransactional();
372  return *this;
373  }
380  {
381  return securityConfigurationBuilder;
382  }
383 
384  bool isTransactional() const
385  {
386  return m_transactional;
387  }
388 
390  {
391  m_transactional = transactional;
392  return *this;
393  }
394 
395  private:
396  int m_connectionTimeout;
397  bool m_forceReturnValue;
398  int m_keySizeEstimate;
399  std::string m_protocolVersion;
400  std::map<std::string,std::vector<ServerConfigurationBuilder> >m_serversMap;
401  int m_socketTimeout;
402  bool m_tcpNoDelay;
403  int m_valueSizeEstimate;
404  unsigned int m_maxRetries;
405  FailOverRequestBalancingStrategy::ProducerFn m_balancingStrategyProducer;
406  ConnectionPoolConfigurationBuilder connectionPoolConfigurationBuilder;
407  SecurityConfigurationBuilder securityConfigurationBuilder;
408  JBasicEventMarshaller m_defaultEventMarshaller;
409  NearCacheConfigurationBuilder nearCacheConfigurationBuilder;
410  bool m_transactional;
411 
412  EventMarshaller &m_eventMarshaller=m_defaultEventMarshaller;
413 };
414 
415 }} // namespace
416 
417 #endif // ISPN_HOTROD_CONFIGURATION_CONFIGURATIONBUILDER_H
ConfigurationBuilder & addServers(std::string servers)
Definition: ConfigurationBuilder.h:168
ConnectionPoolConfigurationBuilder & connectionPool()
Definition: ConfigurationBuilder.h:193
ConfigurationBuilder & keySizeEstimate(int keySizeEstimate_)
Definition: ConfigurationBuilder.h:223
void validate()
Definition: ConfigurationBuilder.h:132
NearCacheConfiguration create()
Definition: ConfigurationBuilder.h:96
bool isTransactional() const
Definition: Configuration.h:197
bool isTransactional() const
Definition: ConfigurationBuilder.h:384
NearCacheMode getMode() const
Definition: ConfigurationBuilder.h:80
HR_EXTERN const int & getKeySizeEstimate() const
NearCacheConfigurationBuilder & maxEntries(unsigned int maxEntries=0)
Definition: ConfigurationBuilder.h:72
ConfigurationBuilder()
Definition: ConfigurationBuilder.h:114
ConfigurationBuilder & valueSizeEstimate(int valueSizeEstimate_)
Definition: ConfigurationBuilder.h:282
ConfigurationBuilder & maxRetries(int maxRetries_)
Definition: ConfigurationBuilder.h:293
HR_EXTERN const int & getSocketTimeout() const
NearCacheConfigurationBuilder(ConfigurationBuilder &_builder)
Definition: ConfigurationBuilder.h:56
Definition: NearCacheConfiguration.h:32
HR_EXTERN const int & getValueSizeEstimate() const
ServerConfigurationBuilder & addServer()
Definition: ConfigurationBuilder.h:151
Definition: CacheClientListener.h:30
HR_EXTERN const char * getProtocolVersionCString() const
Definition: SecurityConfigurationBuilder.h:19
Definition: ConnectionPoolConfigurationBuilder.h:15
Definition: ConfigurationBuilder.h:53
Definition: NearCacheConfiguration.h:21
ConfigurationBuilder & socketTimeout(int socketTimeout_)
Definition: ConfigurationBuilder.h:244
Definition: SslConfigurationBuilder.h:12
Definition: AuthenticationConfiguration.h:10
HR_EXTERN const event::EventMarshaller & getEventMarshaller() const
int getMaxEntries() const
Definition: ConfigurationBuilder.h:61
NearCacheMode
Definition: NearCacheConfiguration.h:20
ConfigurationBuilder & balancingStrategyProducer(FailOverRequestBalancingStrategy::ProducerFn bsp)
Definition: ConfigurationBuilder.h:298
Definition: ServerConfigurationBuilder.h:25
Definition: ConfigurationBuilder.h:28
virtual ServerConfiguration create()
Definition: ServerConfigurationBuilder.h:62
ConfigurationBuilder & forceReturnValues(bool forceReturnValues_)
Definition: ConfigurationBuilder.h:213
Definition: Configuration.h:28
HR_EXTERN const int & getConnectionTimeout() const
FailOverRequestBalancingStrategy *(* ProducerFn)()
Definition: FailOverRequestBalancingStrategy.h:19
HR_EXTERN const int & getMaxRetries() const
Configuration create()
Definition: ConfigurationBuilder.h:319
#define __pragma(...)
Definition: defs.h:106
NearCacheConfigurationBuilder & mode(NearCacheMode mode=DISABLED)
Definition: ConfigurationBuilder.h:91
NearCacheConfigurationBuilder & nearCache()
Definition: ConfigurationBuilder.h:263
Definition: ConfigurationBuilder.h:111
Definition: ConfigurationChildBuilder.h:18
static HR_EXTERN const char * DEFAULT_CLUSTER_NAME
Definition: Configuration.h:40
Configuration build()
Definition: ConfigurationBuilder.h:309
ConfigurationBuilder & protocolVersion(const std::string &protocolVersion_)
Definition: ConfigurationBuilder.h:233
SslConfigurationBuilder & ssl()
Definition: ConfigurationBuilder.h:254
SecurityConfigurationBuilder & security()
Definition: ConfigurationBuilder.h:379
ConfigurationBuilder & read(Configuration &configuration)
Definition: ConfigurationBuilder.h:360
ClusterConfigurationBuilder(std::vector< ServerConfigurationBuilder > &servers, ConfigurationBuilder &parent)
Definition: ConfigurationBuilder.h:31
HR_EXTERN const bool & isForceReturnValue() const
ConfigurationBuilder & tcpNoDelay(bool tcpNoDelay_)
Definition: ConfigurationBuilder.h:272
ConfigurationBuilder & setTransactional(bool transactional)
Definition: ConfigurationBuilder.h:389
HR_EXTERN const bool & isTcpNoDelay() const
ConfigurationBuilder & connectionTimeout(int connectionTimeout_)
Definition: ConfigurationBuilder.h:202
ClusterConfigurationBuilder addCluster(const std::string &clusterName)
Definition: ConfigurationBuilder.h:141
ClusterConfigurationBuilder & addClusterNode(const std::string host, const int port)
Definition: ConfigurationBuilder.h:40