Skip to content

Commit 85bdbe2

Browse files
committed
[#28,!20] Addressed straight forward review comments.
- Better description of BaseConfigBackend - Rename selector to backend_selector - Fix commentary in selectBackends function.
1 parent b102945 commit 85bdbe2

File tree

3 files changed

+82
-65
lines changed

3 files changed

+82
-65
lines changed

src/lib/config_backend/base_config_backend.h

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,14 +15,30 @@
1515
namespace isc {
1616
namespace cb {
1717

18-
/// @brief Base class for server specific configuration backends.
18+
/// @brief Interface for Kea server specific configuration backend
19+
/// implementations.
20+
///
21+
/// Each Kea server (e.g. DHCPv4 server) needs to implement its own
22+
/// interface to store and fetch its configuration from the databases.
23+
/// This is because each Kea server uses a different set of
24+
/// configuration information. This is a base interface which should
25+
/// be implemented (and extended) by respective Kea servers to provide
26+
/// API to store and fetch configuration information from a database.
27+
/// Such implementation is called configuration backend. Each
28+
/// configuration backend faciliates a single database type, e.g. MySQL
29+
/// database. In order to support multiple database types, i.e. MySQL,
30+
/// Posrgres, Cassandra, each Kea server will have to implement
31+
/// 3 separate configuration backends, one for each database type.
1932
class BaseConfigBackend {
2033
public:
2134

2235
/// @brief Virtual destructor.
2336
virtual ~BaseConfigBackend() { }
2437

2538
/// @brief Returns backend type in the textual format.
39+
///
40+
/// @return Name of the storage for configurations, e.g. "mysql",
41+
/// "pgsql" and so forth.
2642
virtual std::string getType() const = 0;
2743

2844
/// @brief Returns backend host.

src/lib/config_backend/base_config_backend_pool.h

Lines changed: 48 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -73,11 +73,12 @@ class BaseConfigBackendPool {
7373
///
7474
/// @code
7575
/// Subnet4Ptr getSubnet4(const SubnetID& subnet_id,
76-
/// const BackendSelector& selector,
76+
/// const BackendSelector& backend_selector,
7777
/// const ServerSelector& server_selector) const {
7878
/// Subnet4Ptr subnet;
7979
/// getPropertyPtrConst<Subnet4Ptr, const SubnetID&>
80-
/// (&ConfigBackendDHCPv4::getSubnet4, selector, subnet, subnet_id);
80+
/// (&ConfigBackendDHCPv4::getSubnet4, backend_selector,
81+
/// server_selector, subnet, subnet_id);
8182
/// return (subnet);
8283
/// }
8384
/// @endcode
@@ -99,7 +100,7 @@ class BaseConfigBackendPool {
99100
/// @tparam InputType Type of the objects used as input to the backend call.
100101
///
101102
/// @param MethodPointer Pointer to the backend method to be called.
102-
/// @param selector Backend selector.
103+
/// @param backend_selector Backend selector.
103104
/// @param server_selector Server selector.
104105
/// @param [out] property Reference to the shared pointer where retrieved
105106
/// property should be assigned.
@@ -110,14 +111,14 @@ class BaseConfigBackendPool {
110111
template<typename PropertyType, typename... InputType>
111112
void getPropertyPtrConst(PropertyType (ConfigBackendType::*MethodPointer)
112113
(const db::ServerSelector&, InputType...) const,
113-
const db::BackendSelector& selector,
114+
const db::BackendSelector& backend_selector,
114115
const db::ServerSelector& server_selector,
115116
PropertyType& property,
116117
InputType... input) const {
117118

118119
// If no particular backend is selected, call each backend and return
119120
// the first non-null (non zero) value.
120-
if (selector.amUnspecified()) {
121+
if (backend_selector.amUnspecified()) {
121122
for (auto backend : backends_) {
122123
property = ((*backend).*MethodPointer)(server_selector, input...);
123124
if (property) {
@@ -127,7 +128,7 @@ class BaseConfigBackendPool {
127128

128129
} else {
129130
// Backend selected, find the one that matches selection.
130-
auto backends = selectBackends(selector);
131+
auto backends = selectBackends(backend_selector);
131132
if (!backends.empty()) {
132133
for (auto backend : backends) {
133134
property = ((*backend).*MethodPointer)(server_selector, input...);
@@ -138,7 +139,7 @@ class BaseConfigBackendPool {
138139

139140
} else {
140141
isc_throw(db::NoSuchDatabase, "no such database found for selector: "
141-
<< selector.toText());
142+
<< backend_selector.toText());
142143
}
143144
}
144145
}
@@ -155,12 +156,12 @@ class BaseConfigBackendPool {
155156
/// @code
156157
/// OptionalValue<std::string>
157158
/// getGlobalParameter4(const std::string& parameter_name,
158-
/// const BackendSelector& selector,
159+
/// const BackendSelector& backend_selector,
159160
/// const ServerSelector& server_selector) const {
160161
/// std::string parameter;
161162
/// getOptionalPropertyConst<std::string, const std::string&>
162-
/// (&ConfigBackendDHCPv4::getGlobalParameter4, selector, server_selector,
163-
/// parameter, parameter_name);
163+
/// (&ConfigBackendDHCPv4::getGlobalParameter4, backend_selector,
164+
/// server_selector, parameter, parameter_name);
164165
/// return (parameter);
165166
/// }
166167
/// @endcode
@@ -176,7 +177,7 @@ class BaseConfigBackendPool {
176177
/// @tparam InputType Type of the objects used as input to the backend call.
177178
///
178179
/// @param MethodPointer Pointer to the backend method to be called.
179-
/// @param selector Backend selector.
180+
/// @param backend_selector Backend selector.
180181
/// @param server_selector Server selector.
181182
/// @param [out] property Reference to the shared pointer where retrieved
182183
/// property should be assigned.
@@ -188,14 +189,14 @@ class BaseConfigBackendPool {
188189
void getOptionalPropertyConst(util::OptionalValue<PropertyType>
189190
(ConfigBackendType::*MethodPointer)
190191
(const db::ServerSelector&, InputType...) const,
191-
const db::BackendSelector& selector,
192+
const db::BackendSelector& backend_selector,
192193
const db::ServerSelector& server_selector,
193194
util::OptionalValue<PropertyType>& property,
194195
InputType... input) const {
195196

196197
// If no particular backend is selected, call each backend and return
197198
// the first non-null (non zero) value.
198-
if (selector.amUnspecified()) {
199+
if (backend_selector.amUnspecified()) {
199200
for (auto backend : backends_) {
200201
property = ((*backend).*MethodPointer)(server_selector, input...);
201202
if (property.isSpecified()) {
@@ -205,7 +206,7 @@ class BaseConfigBackendPool {
205206

206207
} else {
207208
// Backend selected, find the one that matches selection.
208-
auto backends = selectBackends(selector);
209+
auto backends = selectBackends(backend_selector);
209210
if (!backends.empty()) {
210211
for (auto backend : backends) {
211212
property = ((*backend).*MethodPointer)(server_selector, input...);
@@ -216,7 +217,7 @@ class BaseConfigBackendPool {
216217

217218
} else {
218219
isc_throw(db::NoSuchDatabase, "no such database found for selector: "
219-
<< selector.toText());
220+
<< backend_selector.toText());
220221
}
221222
}
222223
}
@@ -230,13 +231,13 @@ class BaseConfigBackendPool {
230231
/// @c getSubnets6 method:
231232
///
232233
/// @code
233-
/// Subnet6Collection getModifiedSubnets6(const BackendSelector& selector,
234+
/// Subnet6Collection getModifiedSubnets6(const BackendSelector& backend_selector,
234235
/// const ServerSelector& server_selector,
235236
/// const ptime& modification_time) const {
236237
/// Subnet6Collection subnets;
237238
/// getMultiplePropertiesConst<Subnet6Collection, const ptime&>
238-
/// (&ConfigBackendDHCPv6::getSubnets6, selector, subnets,
239-
/// modification_time);
239+
/// (&ConfigBackendDHCPv6::getSubnets6, backend_selector, server_selector,
240+
/// subnets, modification_time);
240241
/// return (subnets);
241242
/// }
242243
/// @endcode
@@ -257,7 +258,7 @@ class BaseConfigBackendPool {
257258
/// @tparam InputType Type of the objects used as input to the backend call.
258259
///
259260
/// @param MethodPointer Pointer to the backend method to be called.
260-
/// @param selector Backend selector.
261+
/// @param backend_selector Backend selector.
261262
/// @param server_selector Server selector.
262263
/// @param [out] properties Reference to the collection of retrieved properties.
263264
/// @param input Values to be used as input to the backend call.
@@ -267,11 +268,11 @@ class BaseConfigBackendPool {
267268
template<typename PropertyCollectionType, typename... InputType>
268269
void getMultiplePropertiesConst(PropertyCollectionType (ConfigBackendType::*MethodPointer)
269270
(const db::ServerSelector&, InputType...) const,
270-
const db::BackendSelector& selector,
271+
const db::BackendSelector& backend_selector,
271272
const db::ServerSelector& server_selector,
272273
PropertyCollectionType& properties,
273274
InputType... input) const {
274-
if (selector.amUnspecified()) {
275+
if (backend_selector.amUnspecified()) {
275276
for (auto backend : backends_) {
276277
properties = ((*backend).*MethodPointer)(server_selector, input...);
277278
if (!properties.empty()) {
@@ -280,7 +281,7 @@ class BaseConfigBackendPool {
280281
}
281282

282283
} else {
283-
auto backends = selectBackends(selector);
284+
auto backends = selectBackends(backend_selector);
284285
if (!backends.empty()) {
285286
for (auto backend : backends) {
286287
properties = ((*backend).*MethodPointer)(server_selector, input...);
@@ -291,7 +292,7 @@ class BaseConfigBackendPool {
291292

292293
} else {
293294
isc_throw(db::NoSuchDatabase, "no database found for selector: "
294-
<< selector.toText());
295+
<< backend_selector.toText());
295296
}
296297
}
297298
}
@@ -308,7 +309,7 @@ class BaseConfigBackendPool {
308309
/// Subnet4Collection getAllSubnets4(const BackendSelector&, const ServerSelector&) const {
309310
/// Subnet4Collection subnets;
310311
/// getAllPropertiesConst<Subnet6Collection>
311-
/// (&ConfigBackendDHCPv4::getAllSubnets4, subnets, selector,
312+
/// (&ConfigBackendDHCPv4::getAllSubnets4, subnets, backend_selector,
312313
/// server_selector);
313314
/// return (subnets);
314315
/// }
@@ -329,7 +330,7 @@ class BaseConfigBackendPool {
329330
/// properties are stored.
330331
///
331332
/// @param MethodPointer Pointer to the backend method to be called.
332-
/// @param selector Backend selector.
333+
/// @param backend_selector Backend selector.
333334
/// @param server_selector Server selector.
334335
/// @param [out] properties Reference to the collection of retrieved properties.
335336
///
@@ -338,10 +339,10 @@ class BaseConfigBackendPool {
338339
template<typename PropertyCollectionType>
339340
void getAllPropertiesConst(PropertyCollectionType (ConfigBackendType::*MethodPointer)
340341
(const db::ServerSelector&) const,
341-
const db::BackendSelector& selector,
342+
const db::BackendSelector& backend_selector,
342343
const db::ServerSelector& server_selector,
343344
PropertyCollectionType& properties) const {
344-
if (selector.amUnspecified()) {
345+
if (backend_selector.amUnspecified()) {
345346
for (auto backend : backends_) {
346347
properties = ((*backend).*MethodPointer)(server_selector);
347348
if (!properties.empty()) {
@@ -350,7 +351,7 @@ class BaseConfigBackendPool {
350351
}
351352

352353
} else {
353-
auto backends = selectBackends(selector);
354+
auto backends = selectBackends(backend_selector);
354355
if (!backends.empty()) {
355356
for (auto backend : backends) {
356357
properties = ((*backend).*MethodPointer)(server_selector);
@@ -361,7 +362,7 @@ class BaseConfigBackendPool {
361362

362363
} else {
363364
isc_throw(db::NoSuchDatabase, "no database found for selector: "
364-
<< selector.toText());
365+
<< backend_selector.toText());
365366
}
366367
}
367368
}
@@ -377,10 +378,10 @@ class BaseConfigBackendPool {
377378
///
378379
/// @code
379380
/// void createUpdateSubnet6(const Subnet6Ptr& subnet,
380-
/// const BackendSelector& selector,
381+
/// const BackendSelector& backend_selector,
381382
/// const ServerSelector& server_selector) {
382383
/// createUpdateDeleteProperty<const Subnet6Ptr&>
383-
/// (&ConfigBackendDHCPv6::createUpdateSubnet6, selector,
384+
/// (&ConfigBackendDHCPv6::createUpdateSubnet6, backend_selector,
384385
/// server_selector, subnet, selector);
385386
/// }
386387
/// @endcode
@@ -400,7 +401,7 @@ class BaseConfigBackendPool {
400401
/// backend method, e.g. new property to be added, updated or deleted.
401402
///
402403
/// @param MethodPointer Pointer to the backend method to be called.
403-
/// @param selector Backend selector.
404+
/// @param backend_selector Backend selector.
404405
/// @param server_selector Server selector.
405406
/// @param input Objects used as arguments to the backend method to be
406407
/// called.
@@ -412,17 +413,17 @@ class BaseConfigBackendPool {
412413
template<typename... InputType>
413414
void createUpdateDeleteProperty(void (ConfigBackendType::*MethodPointer)
414415
(const db::ServerSelector&, InputType...),
415-
const db::BackendSelector& selector,
416+
const db::BackendSelector& backend_selector,
416417
const db::ServerSelector& server_selector,
417418
InputType... input) {
418-
auto backends = selectBackends(selector);
419+
auto backends = selectBackends(backend_selector);
419420
if (backends.empty()) {
420421
isc_throw(db::NoSuchDatabase, "no database found for selector: "
421-
<< selector.toText());
422+
<< backend_selector.toText());
422423

423424
} else if (backends.size() > 1) {
424425
isc_throw(db::AmbiguousDatabase, "more than 1 database found for "
425-
"selector: " << selector.toText());
426+
"selector: " << backend_selector.toText());
426427
}
427428

428429
(*(*(backends.begin())).*MethodPointer)(server_selector, input...);
@@ -435,43 +436,43 @@ class BaseConfigBackendPool {
435436
///
436437
/// @param selector Selector for which matching backends should be selected.
437438
std::list<ConfigBackendTypePtr>
438-
selectBackends(const db::BackendSelector& selector) const {
439+
selectBackends(const db::BackendSelector& backend_selector) const {
439440

440441
std::list<ConfigBackendTypePtr> selected;
441442

442-
// In case there is only one backend, it is allowed to not select the
443-
// database backend.
444-
if ((backends_.size() == 1) && selector.amUnspecified()) {
443+
// In case there is only one backend and the caller hasn't specified
444+
// any particular backend, simply return it.
445+
if ((backends_.size() == 1) && backend_selector.amUnspecified()) {
445446
selected.push_back(*backends_.begin());
446447
return (selected);
447448
}
448449

449450
// For other cases we return empty list.
450-
if (backends_.empty() || selector.amUnspecified()) {
451+
if (backends_.empty() || backend_selector.amUnspecified()) {
451452
return (selected);
452453
}
453454

454455
// Go over all backends.
455456
for (auto backend : backends_) {
456457
// If backend type is specified and it is not matching,
457458
// do not select this backend.
458-
if ((selector.getBackendType() != db::BackendSelector::Type::UNSPEC) &&
459-
(selector.getBackendType() !=
459+
if ((backend_selector.getBackendType() != db::BackendSelector::Type::UNSPEC) &&
460+
(backend_selector.getBackendType() !=
460461
db::BackendSelector::stringToBackendType(backend->getType()))) {
461462
continue;
462463
}
463464

464465
// If the host has been specified by the backend's host is not
465466
// matching, do not select this backend.
466-
if ((!selector.getBackendHost().empty()) &&
467-
(selector.getBackendHost() != backend->getHost())) {
467+
if ((!backend_selector.getBackendHost().empty()) &&
468+
(backend_selector.getBackendHost() != backend->getHost())) {
468469
continue;
469470
}
470471

471472
// If the port has been specified by the backend's port is not
472473
// matching, do not select this backend.
473-
if ((selector.getBackendPort() != 0) &&
474-
(selector.getBackendPort() != backend->getPort())) {
474+
if ((backend_selector.getBackendPort() != 0) &&
475+
(backend_selector.getBackendPort() != backend->getPort())) {
475476
continue;
476477
}
477478

0 commit comments

Comments
 (0)