Kea  1.5.0
database_connection.h
Go to the documentation of this file.
1 // Copyright (C) 2015-2018 Internet Systems Consortium, Inc. ("ISC")
2 //
3 // This Source Code Form is subject to the terms of the Mozilla Public
4 // License, v. 2.0. If a copy of the MPL was not distributed with this
5 // file, You can obtain one at http://mozilla.org/MPL/2.0/.
6 
7 #ifndef DATABASE_CONNECTION_H
8 #define DATABASE_CONNECTION_H
9 
10 #include <cc/data.h>
11 #include <boost/noncopyable.hpp>
12 #include <boost/function.hpp>
13 #include <boost/shared_ptr.hpp>
14 #include <exceptions/exceptions.h>
15 #include <map>
16 #include <string>
17 
18 namespace isc {
19 namespace db {
20 
22 class NoDatabaseName : public Exception {
23 public:
24  NoDatabaseName(const char* file, size_t line, const char* what) :
25  isc::Exception(file, line, what) {}
26 };
27 
29 class DbOpenError : public Exception {
30 public:
31  DbOpenError(const char* file, size_t line, const char* what) :
32  isc::Exception(file, line, what) {}
33 };
34 
36 class DbOperationError : public Exception {
37 public:
38  DbOperationError(const char* file, size_t line, const char* what) :
39  isc::Exception(file, line, what) {}
40 };
41 
45 class InvalidType : public Exception {
46 public:
47  InvalidType(const char* file, size_t line, const char* what) :
48  isc::Exception(file, line, what) {}
49 };
50 
54 class DbInvalidTimeout : public Exception {
55 public:
56  DbInvalidTimeout(const char* file, size_t line, const char* what) :
57  isc::Exception(file, line, what) {}
58 };
59 
63 class DbInvalidReadOnly : public Exception {
64 public:
65  DbInvalidReadOnly(const char* file, size_t line, const char* what) :
66  isc::Exception(file, line, what) {}
67 };
68 
76 class ReconnectCtl {
77 public:
82  ReconnectCtl(const std::string& backend_type, unsigned int max_retries,
83  unsigned int retry_interval)
84  : backend_type_(backend_type), max_retries_(max_retries),
85  retries_left_(max_retries), retry_interval_(retry_interval) {}
86 
88  std::string backendType() const {
89  return (backend_type_);
90  }
91 
96  bool checkRetries() {
97  return (retries_left_ ? --retries_left_ : false);
98  }
99 
101  unsigned int maxRetries() {
102  return (max_retries_);
103  }
104 
106  unsigned int retriesLeft() {
107  return (retries_left_);
108  }
109 
111  unsigned int retryInterval() {
112  return (retry_interval_);
113  }
114 
115 private:
117  const std::string backend_type_;
118 
120  unsigned int max_retries_;
121 
123  unsigned int retries_left_;
124 
126  unsigned int retry_interval_;
127 };
128 
130 typedef boost::shared_ptr<ReconnectCtl> ReconnectCtlPtr;
131 
140 class DatabaseConnection : public boost::noncopyable {
141 public:
142 
149  static const time_t MAX_DB_TIME;
150 
152  typedef std::map<std::string, std::string> ParameterMap;
153 
158  DatabaseConnection(const ParameterMap& parameters)
159  :parameters_(parameters) {
160  }
161 
163  virtual ~DatabaseConnection(){};
164 
168  virtual ReconnectCtlPtr makeReconnectCtl() const;
169 
175  std::string getParameter(const std::string& name) const;
176 
185  static ParameterMap parse(const std::string& dbaccess);
186 
195  static std::string redactedAccessString(const ParameterMap& parameters);
196 
203  bool configuredReadOnly() const;
204 
206  typedef boost::function<bool (ReconnectCtlPtr db_retry)> DbLostCallback;
207 
217  bool invokeDbLostCallback() const;
218 
223  static isc::data::ElementPtr toElement(const ParameterMap& params);
224 
229  static isc::data::ElementPtr toElementDbAccessString(const std::string& dbaccess);
230 
234 
235 private:
236 
242  ParameterMap parameters_;
243 
244 };
245 
246 }; // end of isc::db namespace
247 }; // end of isc namespace
248 
249 #endif // DATABASE_CONNECTION_H
isc::db::DatabaseConnection::toElementDbAccessString
static isc::data::ElementPtr toElementDbAccessString(const std::string &dbaccess)
Unparse an access string.
Definition: database_connection.cc:211
isc::db::InvalidType
Invalid type exception.
Definition: database_connection.h:45
isc::db::ReconnectCtl::retryInterval
unsigned int retryInterval()
Returns the amount of time to wait between reconnect attempts.
Definition: database_connection.h:111
isc::db::DatabaseConnection::DatabaseConnection
DatabaseConnection(const ParameterMap &parameters)
Constructor.
Definition: database_connection.h:158
isc::db::DbOperationError::DbOperationError
DbOperationError(const char *file, size_t line, const char *what)
Definition: database_connection.h:38
isc::db::DatabaseConnection::redactedAccessString
static std::string redactedAccessString(const ParameterMap &parameters)
Redact database access string.
Definition: database_connection.cc:66
isc::db::NoDatabaseName
Exception thrown if name of database is not specified.
Definition: database_connection.h:22
isc::db::DatabaseConnection::configuredReadOnly
bool configuredReadOnly() const
Convenience method checking if database should be opened with read only access.
Definition: database_connection.cc:95
isc::db::ReconnectCtl::checkRetries
bool checkRetries()
Decrements the number of retries remaining.
Definition: database_connection.h:96
isc::db::ReconnectCtl::retriesLeft
unsigned int retriesLeft()
Returns the number for retries remaining.
Definition: database_connection.h:106
isc::db::DbInvalidReadOnly::DbInvalidReadOnly
DbInvalidReadOnly(const char *file, size_t line, const char *what)
Definition: database_connection.h:65
isc::Exception
This is a base class for exceptions thrown from the DNS library module.
Definition: exceptions/exceptions.h:23
isc
Defines the logger used by the top-level component of kea-dhcp-ddns.
Definition: agent_parser.cc:144
isc::db::DatabaseConnection::getParameter
std::string getParameter(const std::string &name) const
Returns value of a connection parameter.
Definition: database_connection.cc:28
isc::Exception::what
virtual const char * what() const
Returns a C-style character string of the cause of the exception.
Definition: exceptions/exceptions.cc:32
isc::db::ReconnectCtl::backendType
std::string backendType() const
Returns the type of the caller backend.
Definition: database_connection.h:88
isc::db::DbOperationError
Exception thrown on failure to execute a database function.
Definition: database_connection.h:36
isc::db::InvalidType::InvalidType
InvalidType(const char *file, size_t line, const char *what)
Definition: database_connection.h:47
isc::db::DbInvalidTimeout
Invalid Timeout.
Definition: database_connection.h:54
isc::db::ReconnectCtl::maxRetries
unsigned int maxRetries()
Returns the maximum number for retries allowed.
Definition: database_connection.h:101
isc::db::DbInvalidReadOnly
Invalid 'readonly' value specification.
Definition: database_connection.h:63
isc::db::ReconnectCtl
Warehouses DB reconnect control values.
Definition: database_connection.h:76
isc::db::DbInvalidTimeout::DbInvalidTimeout
DbInvalidTimeout(const char *file, size_t line, const char *what)
Definition: database_connection.h:56
isc::db::DatabaseConnection::parse
static ParameterMap parse(const std::string &dbaccess)
Parse database access string.
Definition: database_connection.cc:37
isc::db::NoDatabaseName::NoDatabaseName
NoDatabaseName(const char *file, size_t line, const char *what)
Definition: database_connection.h:24
isc::db::DatabaseConnection::makeReconnectCtl
virtual ReconnectCtlPtr makeReconnectCtl() const
Instantiates a ReconnectCtl based on the connection's reconnect parameters.
Definition: database_connection.cc:114
isc::db::DatabaseConnection::db_lost_callback
static DbLostCallback db_lost_callback
Optional call back function to invoke if a successfully open connection subsequently fails.
Definition: database_connection.h:233
isc::db::DatabaseConnection::invokeDbLostCallback
bool invokeDbLostCallback() const
Invokes the connection's lost connectivity callback.
Definition: database_connection.cc:147
data.h
exceptions.h
isc::db::DatabaseConnection
Common database connection class.
Definition: database_connection.h:140
isc::db::DatabaseConnection::DbLostCallback
boost::function< bool(ReconnectCtlPtr db_retry)> DbLostCallback
Defines a callback prototype for propogating events upward.
Definition: database_connection.h:206
isc::db::ReconnectCtl::ReconnectCtl
ReconnectCtl(const std::string &backend_type, unsigned int max_retries, unsigned int retry_interval)
Constructor.
Definition: database_connection.h:82
isc::data::ElementPtr
boost::shared_ptr< Element > ElementPtr
Definition: data.h:20
isc::db::DatabaseConnection::MAX_DB_TIME
static const time_t MAX_DB_TIME
Defines maximum value for time that can be reliably stored.
Definition: database_connection.h:149
isc::db::ReconnectCtlPtr
boost::shared_ptr< ReconnectCtl > ReconnectCtlPtr
Pointer to an instance of ReconnectCtl.
Definition: database_connection.h:130
isc::db::DbOpenError
Exception thrown on failure to open database.
Definition: database_connection.h:29
isc::db::DatabaseConnection::ParameterMap
std::map< std::string, std::string > ParameterMap
Database configuration parameter map.
Definition: database_connection.h:152
isc::db::DatabaseConnection::~DatabaseConnection
virtual ~DatabaseConnection()
Destructor.
Definition: database_connection.h:163
isc::db::DbOpenError::DbOpenError
DbOpenError(const char *file, size_t line, const char *what)
Definition: database_connection.h:31
isc::db::DatabaseConnection::toElement
static isc::data::ElementPtr toElement(const ParameterMap &params)
Unparse a parameter map.
Definition: database_connection.cc:157