GComm  0.2.3
conf.hpp
Go to the documentation of this file.
1 /*
2  * Copyright (C) 2009-2014 Codership Oy <info@codership.com>
3  */
4 
11 #ifndef GCOMM_CONF_HPP
12 #define GCOMM_CONF_HPP
13 
14 #include "gu_config.hpp"
15 #include "gu_uri.hpp"
16 #include "gu_throw.hpp"
17 
18 namespace gcomm
19 {
45  struct Conf
46  {
47  static std::string const ProtonetBackend;
48  static std::string const ProtonetVersion;
49 
56  static std::string const TcpNonBlocking;
57 
64  static std::string const SocketUseSsl;
65 
70  static std::string const SocketSslVerifyFile;
71 
76  static std::string const SocketSslCertificateFile;
77 
85  static std::string const SocketSslPrivateKeyFile;
86 
91  static std::string const SocketSslPasswordFile;
92 
96  static std::string const SocketSslCipherList;
97 
101  static std::string const SocketSslCompression;
102 
109  static std::string const SocketChecksum;
110 
114  static std::string const GMCastScheme;
115 
119  static std::string const GMCastVersion;
120 
127  static std::string const GMCastGroup;
128 
138  static std::string const GMCastListenAddr;
139 
148  static std::string const GMCastMCastAddr;
149 
156  static std::string const GMCastMCastPort;
157 
166  static std::string const GMCastMCastTTL;
167 
168  static std::string const GMCastTimeWait;
169  static std::string const GMCastPeerTimeout;
170 
176  static std::string const GMCastMaxInitialReconnectAttempts;
177 
185  static std::string const GMCastPeerAddr;
186 
196  static std::string const GMCastIsolate;
197 
201  static std::string const GMCastSegment;
202 
203 
207  static std::string const EvsScheme;
208 
212  static std::string const EvsVersion;
213 
223  static std::string const EvsViewForgetTimeout;
224 
236  static std::string const EvsSuspectTimeout;
237 
247  static std::string const EvsInactiveTimeout;
248 
258  static std::string const EvsInactiveCheckPeriod;
259 
260 
261  static std::string const EvsInstallTimeout;
262 
272  static std::string const EvsKeepalivePeriod;
273 
282  static std::string const EvsJoinRetransPeriod;
283 
292  static std::string const EvsStatsReportPeriod;
293 
302  static std::string const EvsDebugLogMask;
303 
310  static std::string const EvsInfoLogMask;
311 
319  static std::string const EvsSendWindow;
320 
327  static std::string const EvsUserSendWindow;
328 
337  static std::string const EvsUseAggregate;
338 
343  static std::string const EvsCausalKeepalivePeriod;
344 
352  static std::string const EvsMaxInstallTimeouts;
353 
357  static std::string const PcScheme;
358 
362  static std::string const PcVersion;
363 
370  static std::string const PcIgnoreSb;
371 
378  static std::string const PcIgnoreQuorum;
379 
386  static std::string const PcChecksum;
387 
391  static std::string const PcAnnounceTimeout;
392 
396  static std::string const PcLinger;
397 
401  static std::string const PcNpvo;
402 
406  static std::string const PcBootstrap;
407 
411  static std::string const PcWaitPrim;
412 
416  static std::string const PcWaitPrimTimeout;
417 
421  static std::string const PcWeight;
422 
423  static void register_params(gu::Config&);
424  };
425 
426 
427  // Helper templates to read configuration parameters.
428 
429  template <typename T> T _conf_param(const gu::URI& uri,
430  const std::string& param,
431  const T* default_value = 0,
432  const T* min_value = 0,
433  const T* max_value = 0)
434  {
435  T ret;
436  try
437  {
438  ret = gu::from_string<T>(uri.get_option(param));
439  }
440  catch (gu::NotFound& e)
441  {
442  // cppcheck-suppress nullPointer
443  if (default_value == 0)
444  {
445  gu_throw_error(EINVAL)
446  << "param " << param << " not found from uri "
447  << uri.to_string();
448  }
449  // cppcheck-suppress nullPointer
450  ret = *default_value;
451  }
452 
453  if (min_value != 0 && *min_value > ret)
454  {
455  gu_throw_error(EINVAL)
456  << "param " << param << " value " << ret << " out of range "
457  << "min allowed " << *min_value;
458  }
459 
460  if (max_value != 0 && *max_value < ret)
461  {
462  gu_throw_error(EINVAL)
463  << "param " << param << " value " << ret << " out of range "
464  << "max allowed " << *max_value;
465  }
466  return ret;
467  }
468 
469  template <typename T> T conf_param(const gu::URI& uri,
470  const std::string& param)
471  {
472  return _conf_param<T>(uri, param, 0, 0, 0);
473  }
474 
475  template <typename T> T conf_param_def(const gu::URI& uri,
476  const std::string& param,
477  const T& default_value)
478  {
479  return _conf_param(uri, param, &default_value);
480  }
481 
482  template <typename T> T conf_param_range(const gu::URI& uri,
483  const std::string& param,
484  const T& min_value,
485  const T& max_value)
486  {
487  return _conf_param(uri, param, 0, &min_value, &max_value);
488  }
489 
490  template <typename T> T conf_param_def_min(const gu::URI& uri,
491  const std::string& param,
492  const T& default_value,
493  const T& min_value)
494 
495  {
496  return _conf_param(uri, param, &default_value, &min_value);
497  }
498 
499  template <typename T> T conf_param_def_max(const gu::URI& uri,
500  const std::string& param,
501  const T& default_value,
502  const T& max_value)
503 
504  {
505  return _conf_param(uri, param, &default_value,
506  reinterpret_cast<const T*>(0), &max_value);
507  }
508 
509  template <typename T> T conf_param_def_range(const gu::URI& uri,
510  const std::string& param,
511  const T& default_value,
512  const T& min_value,
513  const T& max_value)
514  {
515  return _conf_param(uri, param, &default_value, &min_value, &max_value);
516  }
517 
518 
519 
520  template <typename T>
521  T param(gu::Config& conf,
522  const gu::URI& uri,
523  const std::string& key,
524  const std::string& def,
525  std::ios_base& (*f)(std::ios_base&) = std::dec)
526  {
527  std::string ret(def);
528  ret = conf.get(key, ret);
529  return gu::from_string<T>(uri.get_option(key, ret), f);
530  }
531 
532  template <typename T>
533  T check_range(const std::string& key,
534  const T& val,
535  const T& min,
536  const T& max)
537  {
538  if (val < min || val >= max)
539  {
540  gu_throw_error(ERANGE) << "param '" << key << "' value " << val
541  << " out of range [" << min
542  << "," << max << ")";
543  }
544  return val;
545  }
546 
547 } // namespace gcomm
548 
549 #endif // GCOMM_CONF_HPP
static std::string const EvsSuspectTimeout
EVS suspect timeout ("evs.suspect_timeout")
Definition: conf.hpp:236
static std::string const GMCastGroup
GMCast group name ("gmcast.group")
Definition: conf.hpp:127
static std::string const GMCastPeerAddr
Add or remove peer address.
Definition: conf.hpp:185
static std::string const PcWeight
Node weight in prim comp voting.
Definition: conf.hpp:421
static std::string const GMCastMaxInitialReconnectAttempts
Maximum initial reconnect attempts.
Definition: conf.hpp:176
static std::string const PcVersion
PC protocol version.
Definition: conf.hpp:362
static std::string const EvsStatsReportPeriod
EVS statistics reporting period ("evs.stats_report_period")
Definition: conf.hpp:292
static std::string const GMCastSegment
Segment identifier for segmentation.
Definition: conf.hpp:201
static std::string const EvsMaxInstallTimeouts
EVS maximum install timeouts ("evs.max_install_timeouts")
Definition: conf.hpp:352
static std::string const EvsSendWindow
EVS send window ("evs.send_window")
Definition: conf.hpp:319
static std::string const GMCastScheme
GMCast scheme for transport URI ("gmcast")
Definition: conf.hpp:114
static std::string const EvsKeepalivePeriod
EVS keepalive period ("evs.keepalive_period")
Definition: conf.hpp:272
static std::string const SocketSslPrivateKeyFile
File containing private key associated with certificate ("socket.ssl_private_key_file") ...
Definition: conf.hpp:85
static std::string const PcWaitPrim
Wait for prim comp unconditionally if set to true.
Definition: conf.hpp:411
static std::string const PcIgnoreSb
PC split-brain mode.
Definition: conf.hpp:370
static std::string const SocketSslCipherList
Cipher list for SSL connections (socket.ssl_cipher_list)
Definition: conf.hpp:96
static std::string const GMCastMCastPort
GMCast multicast port ("gmcast.mcast_port")
Definition: conf.hpp:156
static std::string const EvsJoinRetransPeriod
EVS join retransmission period ("evs.join_retrans_period")
Definition: conf.hpp:282
Definition: conf.hpp:45
static std::string const SocketSslVerifyFile
File containing CA certificates in PEM format ("socket.ssl_verify_file")
Definition: conf.hpp:70
static std::string const GMCastListenAddr
GMCast listening address ("gmcast.listen_addr")
Definition: conf.hpp:138
static std::string const PcNpvo
PC newer prim view overrides.
Definition: conf.hpp:401
static std::string const GMCastVersion
GMCast protocol version.
Definition: conf.hpp:119
static std::string const GMCastMCastAddr
GMCast multicast address ("gmcast.mcast_addr")
Definition: conf.hpp:148
static std::string const EvsInfoLogMask
EVS info log mask ("evs.info_log_mask")
Definition: conf.hpp:310
static std::string const EvsUserSendWindow
EVS user send window ("evs.user_send_window")
Definition: conf.hpp:327
static std::string const EvsInactiveTimeout
EVS inactive timeout ("evs.inactive_timeout")
Definition: conf.hpp:247
static std::string const PcAnnounceTimeout
PC starup announce timeout.
Definition: conf.hpp:391
static std::string const SocketUseSsl
Use SSL sockets for communication.
Definition: conf.hpp:64
static std::string const PcBootstrap
If set during runtime bootstraps new PC.
Definition: conf.hpp:406
static std::string const EvsInactiveCheckPeriod
EVS inactive check period ("evs.inactive_check_period")
Definition: conf.hpp:258
static std::string const PcIgnoreQuorum
PC quorum mode.
Definition: conf.hpp:378
static std::string const PcChecksum
PC message checksumming.
Definition: conf.hpp:386
static std::string const PcScheme
PC scheme for transport URI ("pc")
Definition: conf.hpp:357
static std::string const PcWaitPrimTimeout
Timeout on waiting for primary component.
Definition: conf.hpp:416
static std::string const SocketChecksum
Algorithm for message checksums: 0 - none (backward compatible) 1 - CRC-32 (backward compatible) 2 - ...
Definition: conf.hpp:109
static std::string const GMCastIsolate
Isolate node from peers.
Definition: conf.hpp:196
static std::string const EvsDebugLogMask
EVS debug log mask ("evs.debug_log_mask")
Definition: conf.hpp:302
static std::string const SocketSslPasswordFile
File containing password used to protect private key file ("socket.ssl_password_file") ...
Definition: conf.hpp:91
static std::string const EvsCausalKeepalivePeriod
Period to generate keepalives for causal messages.
Definition: conf.hpp:343
static std::string const EvsScheme
EVS scheme for transport URI ("evs")
Definition: conf.hpp:207
static std::string const SocketSslCompression
Disable compression boolean (socket.ssl_disable_compression)
Definition: conf.hpp:101
static std::string const GMCastMCastTTL
GMCast multicast TTL ("gmcast.mcast_ttl")
Definition: conf.hpp:166
static std::string const EvsViewForgetTimeout
EVS view forget timeout ("evs.view_forget_timeout")
Definition: conf.hpp:223
static std::string const EvsVersion
EVS protocol version.
Definition: conf.hpp:212
static std::string const PcLinger
PC close linger timeout.
Definition: conf.hpp:396
static std::string const TcpNonBlocking
TCP non-blocking flag ("socket.non_blocking")
Definition: conf.hpp:56
static std::string const EvsUseAggregate
EVS message aggregation mode ("evs.use_aggregate")
Definition: conf.hpp:337
static std::string const SocketSslCertificateFile
File containing certificate to use in PEM format ("socket.ssl_certificate_file")
Definition: conf.hpp:76