InfinispanHotRodC++Client  8.2.0.Alpha1
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros
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 
25 {
26 public:
27  ClusterConfigurationBuilder(std::vector<ServerConfigurationBuilder>& servers, ConfigurationBuilder &parent) : servers(servers), m_parent(parent) {}
28  ClusterConfigurationBuilder& addClusterNode(const std::string host, const int port)
29  {
30  servers.push_back(ServerConfigurationBuilder(m_parent).host(host).port(port));
31  return *this;
32  }
33 private:
34  std::vector<ServerConfigurationBuilder>& servers;
35  ConfigurationBuilder &m_parent;
36 };
37 
42 {
43 public:
45 
46  int getMaxEntries() const {
47  return m_maxEntries;
48  }
49 
51  this->m_maxEntries = maxEntries;
52  return *this;
53  }
54 
56  return m_mode;
57  }
58 
60  this->m_mode = mode;
61  return *this;
62  }
63 
65  {
66  return NearCacheConfiguration(m_mode,m_maxEntries);
67  }
68 
69  private:
70  NearCacheMode m_mode=DISABLED;
71  int m_maxEntries=0;
72 };
73 
79 // Methods on this class cannot be invoked across library boundary, therefore, it can use STL.
81 {
82  public:
84  m_connectionTimeout(60000),
85  m_forceReturnValue(false),
86  m_keySizeEstimate(64),
87  m_protocolVersion(Configuration::PROTOCOL_VERSION_24),
88  m_socketTimeout(60000),
89  m_tcpNoDelay(true),
90  m_valueSizeEstimate(512),
91  m_maxRetries(10),
92  m_balancingStrategyProducer(nullptr),
93  __pragma(warning(suppress:4355)) // passing uninitialized 'this'
94  connectionPoolConfigurationBuilder(*this),
95  __pragma(warning(suppress:4355))
96  securityConfigurationBuilder(*this),
97  nearCacheConfigurationBuilder(*this)
98  {}
99 
100  void validate() {}
101 
102  ClusterConfigurationBuilder addCluster(const std::string& clusterName) {
103  return ClusterConfigurationBuilder(m_serversMap[clusterName],*this);
104  }
105 
113  if (m_serversMap.find(Configuration::DEFAULT_CLUSTER_NAME) == m_serversMap.end())
114  {
116  }
117  auto& servers = m_serversMap[Configuration::DEFAULT_CLUSTER_NAME];
118  servers.push_back(ServerConfigurationBuilder(*this));
119  return servers[servers.size() - 1];
120  }
121 
122 
129  ConfigurationBuilder& addServers(std::string servers) {
130  std::istringstream originalStream(servers);
131  std::string stringHelper;
132  std::string hostHelper;
133  std::string portHelper;
134  int portInt;
135 
136  // TODO: handle IPv6 addresses
137  while(std::getline(originalStream,stringHelper,';')) {
138  std::istringstream singleServerStream(stringHelper);
139  std::getline(singleServerStream,hostHelper,':');
140  std::getline(singleServerStream,portHelper,':');
141  std::istringstream portStream(portHelper);
142  portStream >> portInt;
143  addServer().host(hostHelper).port(portInt);
144  }
145 
146  return *this;
147  }
148 
155  return connectionPoolConfigurationBuilder;
156  }
157 
163  ConfigurationBuilder& connectionTimeout(int connectionTimeout_) {
164  m_connectionTimeout = connectionTimeout_;
165  return *this;
166  }
167 
174  ConfigurationBuilder& forceReturnValues(bool forceReturnValues_) {
175  m_forceReturnValue = forceReturnValues_;
176  return *this;
177  }
178 
184  ConfigurationBuilder& keySizeEstimate(int keySizeEstimate_) {
185  m_keySizeEstimate = keySizeEstimate_;
186  return *this;
187  }
188 
196  ConfigurationBuilder& protocolVersion(const std::string &protocolVersion_) {
197  m_protocolVersion = protocolVersion_;
198  return *this;
199  }
200 
207  ConfigurationBuilder& socketTimeout(int socketTimeout_) {
208  m_socketTimeout = socketTimeout_;
209  return *this;
210  }
211 
218  return securityConfigurationBuilder.getSslConfigurationBuilder();
219  }
220 
227  return nearCacheConfigurationBuilder;
228  }
229 
235  ConfigurationBuilder& tcpNoDelay(bool tcpNoDelay_) {
236  m_tcpNoDelay = tcpNoDelay_;
237  return *this;
238  }
239 
245  ConfigurationBuilder& valueSizeEstimate(int valueSizeEstimate_) {
246  m_valueSizeEstimate = valueSizeEstimate_;
247  return *this;
248  }
249 
256  ConfigurationBuilder& maxRetries(int maxRetries_) {
257  m_maxRetries = maxRetries_;
258  return *this;
259  }
260 
262  m_balancingStrategyProducer = bsp;
263  return *this;
264  }
265 
273  return create();
274  }
275 
283  std::map<std::string,std::vector<ServerConfiguration>> serversMap;
284  for (auto p: m_serversMap)
285  {
286  std::vector<ServerConfiguration> scVec;
287  for (auto e : p.second)
288  {
289  scVec.push_back(e.create());
290  }
291  serversMap.insert(std::make_pair(p.first, scVec));
292  }
293  if (serversMap.size()==0)
294  {
295  std::vector<ServerConfiguration> scVec;
296  scVec.push_back(ServerConfigurationBuilder(*this).create());
297  serversMap.insert(std::make_pair(Configuration::DEFAULT_CLUSTER_NAME, scVec));
298  }
299 
300  return Configuration(m_protocolVersion,
301  connectionPoolConfigurationBuilder.create(),
302  m_connectionTimeout,
303  m_forceReturnValue,
304  m_keySizeEstimate,
305  serversMap,
306  m_socketTimeout,
307  securityConfigurationBuilder.create(),
308  m_tcpNoDelay,
309  m_valueSizeEstimate,
310  m_maxRetries,
311  nearCacheConfigurationBuilder.create(),
312  m_balancingStrategyProducer,
313  m_eventMarshaller);
314 
315  }
316 
324  // FIXME: read pool, ssl and server configs
325  m_protocolVersion = configuration.getProtocolVersionCString();
326  m_connectionTimeout = configuration.getConnectionTimeout();
327  m_forceReturnValue = configuration.isForceReturnValue();
328  m_socketTimeout = configuration.getSocketTimeout();
329  m_tcpNoDelay = configuration.isTcpNoDelay();
330  m_keySizeEstimate = configuration.getKeySizeEstimate();
331  m_valueSizeEstimate = configuration.getValueSizeEstimate();
332  m_maxRetries = configuration.getMaxRetries();
333  m_eventMarshaller = configuration.getEventMarshaller();
334  return *this;
335  }
337  {
338  return securityConfigurationBuilder;
339  }
340  private:
341  int m_connectionTimeout;
342  bool m_forceReturnValue;
343  int m_keySizeEstimate;
344  std::string m_protocolVersion;
345  std::map<std::string,std::vector<ServerConfigurationBuilder> >m_serversMap;
346  int m_socketTimeout;
347  bool m_tcpNoDelay;
348  int m_valueSizeEstimate;
349  int m_maxRetries;
350  FailOverRequestBalancingStrategy::ProducerFn m_balancingStrategyProducer;
351  ConnectionPoolConfigurationBuilder connectionPoolConfigurationBuilder;
352  SecurityConfigurationBuilder securityConfigurationBuilder;
353  JBasicEventMarshaller m_defaultEventMarshaller;
354  NearCacheConfigurationBuilder nearCacheConfigurationBuilder;
355 
356  EventMarshaller &m_eventMarshaller=m_defaultEventMarshaller;
357 };
358 
359 }} // namespace
360 
361 #endif // ISPN_HOTROD_CONFIGURATION_CONFIGURATIONBUILDER_H
ConfigurationBuilder & addServers(std::string servers)
Definition: ConfigurationBuilder.h:129
ConnectionPoolConfigurationBuilder & connectionPool()
Definition: ConfigurationBuilder.h:154
HR_EXTERN const event::EventMarshaller & getEventMarshaller() const
ConfigurationBuilder & keySizeEstimate(int keySizeEstimate_)
Definition: ConfigurationBuilder.h:184
HR_EXTERN const int & getSocketTimeout() const
void validate()
Definition: ConfigurationBuilder.h:100
NearCacheConfiguration create()
Definition: ConfigurationBuilder.h:64
HR_EXTERN const int & getValueSizeEstimate() const
ConfigurationBuilder()
Definition: ConfigurationBuilder.h:83
ConfigurationBuilder & valueSizeEstimate(int valueSizeEstimate_)
Definition: ConfigurationBuilder.h:245
ConfigurationBuilder & maxRetries(int maxRetries_)
Definition: ConfigurationBuilder.h:256
NearCacheConfigurationBuilder(ConfigurationBuilder &_builder)
Definition: ConfigurationBuilder.h:44
Definition: JBasicEventMarshaller.h:19
Definition: NearCacheConfiguration.h:19
ServerConfigurationBuilder & addServer()
Definition: ConfigurationBuilder.h:112
HR_EXTERN const int & getKeySizeEstimate() const
Definition: SecurityConfigurationBuilder.h:16
Definition: ConnectionPoolConfigurationBuilder.h:15
Definition: ConfigurationBuilder.h:41
Definition: NearCacheConfiguration.h:17
ConfigurationBuilder & socketTimeout(int socketTimeout_)
Definition: ConfigurationBuilder.h:207
Definition: SslConfigurationBuilder.h:12
HR_EXTERN const int & getMaxRetries() const
NearCacheMode
Definition: NearCacheConfiguration.h:17
ConfigurationBuilder & balancingStrategyProducer(FailOverRequestBalancingStrategy::ProducerFn bsp)
Definition: ConfigurationBuilder.h:261
Definition: EventMarshaller.h:17
Definition: ServerConfigurationBuilder.h:25
HR_EXTERN const bool & isForceReturnValue() const
Definition: ConfigurationBuilder.h:24
virtual ServerConfiguration create()
Definition: ServerConfigurationBuilder.h:61
ConfigurationBuilder & forceReturnValues(bool forceReturnValues_)
Definition: ConfigurationBuilder.h:174
HR_EXTERN const int & getConnectionTimeout() const
Definition: Configuration.h:27
NearCacheConfigurationBuilder & maxEntries(int maxEntries=0)
Definition: ConfigurationBuilder.h:50
Configuration create()
Definition: ConfigurationBuilder.h:282
HR_EXTERN const char * getProtocolVersionCString() const
FailOverRequestBalancingStrategy *(* ProducerFn)()
Definition: FailOverRequestBalancingStrategy.h:16
#define __pragma(...)
Definition: defs.h:106
int getMaxEntries() const
Definition: ConfigurationBuilder.h:46
NearCacheConfigurationBuilder & mode(NearCacheMode mode=DISABLED)
Definition: ConfigurationBuilder.h:59
NearCacheConfigurationBuilder & nearCache()
Definition: ConfigurationBuilder.h:226
Definition: ConfigurationBuilder.h:80
HR_EXTERN const bool & isTcpNoDelay() const
Definition: ConfigurationChildBuilder.h:18
NearCacheMode getMode() const
Definition: ConfigurationBuilder.h:55
static HR_EXTERN const char * DEFAULT_CLUSTER_NAME
Definition: Configuration.h:39
Configuration build()
Definition: ConfigurationBuilder.h:272
ConfigurationBuilder & protocolVersion(const std::string &protocolVersion_)
Definition: ConfigurationBuilder.h:196
SslConfigurationBuilder & ssl()
Definition: ConfigurationBuilder.h:217
SecurityConfigurationBuilder & security()
Definition: ConfigurationBuilder.h:336
ConfigurationBuilder & read(Configuration &configuration)
Definition: ConfigurationBuilder.h:323
ClusterConfigurationBuilder(std::vector< ServerConfigurationBuilder > &servers, ConfigurationBuilder &parent)
Definition: ConfigurationBuilder.h:27
ConfigurationBuilder & tcpNoDelay(bool tcpNoDelay_)
Definition: ConfigurationBuilder.h:235
ConfigurationBuilder & connectionTimeout(int connectionTimeout_)
Definition: ConfigurationBuilder.h:163
ClusterConfigurationBuilder addCluster(const std::string &clusterName)
Definition: ConfigurationBuilder.h:102
ClusterConfigurationBuilder & addClusterNode(const std::string host, const int port)
Definition: ConfigurationBuilder.h:28