Kea  1.9.9-git
cfg_expiration.h
Go to the documentation of this file.
1 // Copyright (C) 2015-2020 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 CFG_EXPIRATION_H
8 #define CFG_EXPIRATION_H
9 
11 #include <cc/cfg_to_element.h>
12 #include <dhcpsrv/timer_mgr.h>
13 #include <boost/shared_ptr.hpp>
14 #include <functional>
15 #include <stdint.h>
16 #include <string>
17 
18 namespace isc {
19 namespace dhcp {
20 
62 public:
63 
65 
66  static const uint16_t DEFAULT_RECLAIM_TIMER_WAIT_TIME;
69 
72 
74  static const uint32_t DEFAULT_HOLD_RECLAIMED_TIME;
75 
77  static const uint32_t DEFAULT_MAX_RECLAIM_LEASES;
78 
80  static const uint16_t DEFAULT_MAX_RECLAIM_TIME;
81 
83  static const uint16_t DEFAULT_UNWARNED_RECLAIM_CYCLES;
84 
86 
88 
89  static const uint16_t LIMIT_RECLAIM_TIMER_WAIT_TIME;
92 
95 
97  static const uint32_t LIMIT_HOLD_RECLAIMED_TIME;
98 
100  static const uint32_t LIMIT_MAX_RECLAIM_LEASES;
101 
103  static const uint16_t LIMIT_MAX_RECLAIM_TIME;
104 
106  static const uint16_t LIMIT_UNWARNED_RECLAIM_CYCLES;
107 
109 
111 
112 
114  static const std::string RECLAIM_EXPIRED_TIMER_NAME;
115 
117  static const std::string FLUSH_RECLAIMED_TIMER_NAME;
118 
120 
129  CfgExpiration(const bool test_mode = false);
130 
132  uint16_t getReclaimTimerWaitTime() const {
133  return (reclaim_timer_wait_time_);
134  }
135 
139  void setReclaimTimerWaitTime(const int64_t reclaim_timer_wait_time);
140 
143  return (flush_reclaimed_timer_wait_time_);
144  }
145 
149  void setFlushReclaimedTimerWaitTime(const int64_t flush_reclaimed_wait_time);
150 
152  uint32_t getHoldReclaimedTime() const {
153  return (hold_reclaimed_time_);
154  }
155 
159  void setHoldReclaimedTime(const int64_t hold_reclaimed_time);
160 
162  uint32_t getMaxReclaimLeases() const {
163  return (max_reclaim_leases_);
164  }
165 
169  void setMaxReclaimLeases(const int64_t max_reclaim_leases);
170 
172  uint16_t getMaxReclaimTime() const {
173  return (max_reclaim_time_);
174  }
175 
179  void setMaxReclaimTime(const int64_t max_reclaim_time);
180 
182  uint16_t getUnwarnedReclaimCycles() const {
183  return (unwarned_reclaim_cycles_);
184  }
185 
189  void setUnwarnedReclaimCycles(const int64_t unwarned_reclaim_cycles);
190 
221  template<typename Instance>
222  void setupTimers(void (Instance::*reclaim_fun)(const size_t, const uint16_t,
223  const bool, const uint16_t),
224  void (Instance::*delete_fun)(const uint32_t),
225  Instance* instance_ptr) const;
226 
230  virtual isc::data::ElementPtr toElement() const;
231 
232 private:
233 
244  void rangeCheck(const int64_t value, const uint64_t max_value,
245  const std::string& config_parameter_name) const;
246 
248  uint16_t reclaim_timer_wait_time_;
249 
251  uint16_t flush_reclaimed_timer_wait_time_;
252 
254  uint32_t hold_reclaimed_time_;
255 
257  uint32_t max_reclaim_leases_;
258 
260  uint16_t max_reclaim_time_;
261 
263  uint16_t unwarned_reclaim_cycles_;
264 
266  TimerMgrPtr timer_mgr_;
267 
269  bool test_mode_;
270 };
271 
273 
274 typedef boost::shared_ptr<CfgExpiration> CfgExpirationPtr;
276 
278 typedef boost::shared_ptr<const CfgExpiration> ConstCfgExpirationPtr;
279 
281 
282 template<typename Instance>
283 void
284 CfgExpiration::setupTimers(void (Instance::*reclaim_fun)(const size_t,
285  const uint16_t,
286  const bool,
287  const uint16_t),
288  void (Instance::*delete_fun)(const uint32_t),
289  Instance* instance_ptr) const {
290  // One of the parameters passed to the leases' reclamation routine
291  // is a boolean value which indicates if reclaimed leases should
292  // be removed by the leases' reclamation routine. This is the case
293  // when the timer for flushing reclaimed leases is set to 0
294  // (disabled).
295  const bool flush_timer_disabled = (getFlushReclaimedTimerWaitTime() == 0);
296 
297  // If the timer interval for the leases reclamation is non-zero
298  // the timer will be scheduled.
299  if (getReclaimTimerWaitTime() > 0) {
300  // In the test mode the interval is expressed in milliseconds.
301  // If this is not the test mode, the interval is in seconds.
302  const long reclaim_interval = test_mode_ ? getReclaimTimerWaitTime() :
303  1000 * getReclaimTimerWaitTime();
304  // Register timer for leases' reclamation routine.
305  timer_mgr_->registerTimer(RECLAIM_EXPIRED_TIMER_NAME,
306  std::bind(reclaim_fun, instance_ptr,
309  flush_timer_disabled,
311  reclaim_interval,
313  timer_mgr_->setup(RECLAIM_EXPIRED_TIMER_NAME);
314  }
315 
316  // If the interval for the timer flushing expired-reclaimed leases
317  // is set we will schedule the timer.
318  if (!flush_timer_disabled) {
319  // The interval is specified in milliseconds if we're in the test mode.
320  // It is specified in seconds otherwise.
321  const long flush_interval = test_mode_ ?
324  // Register and setup the timer.
325  timer_mgr_->registerTimer(FLUSH_RECLAIMED_TIMER_NAME,
326  std::bind(delete_fun, instance_ptr,
328  flush_interval,
330  timer_mgr_->setup(FLUSH_RECLAIMED_TIMER_NAME);
331  }
332 }
333 
334 
335 } // end of isc::dhcp namespace
336 } // end of isc namespace
337 
338 #endif // CFG_EXPIRATION_H
void setMaxReclaimLeases(const int64_t max_reclaim_leases)
Sets max-reclaim-leases.
uint16_t getReclaimTimerWaitTime() const
Returns reclaim-timer-wait-time.
boost::shared_ptr< TimerMgr > TimerMgrPtr
Type definition of the shared pointer to TimerMgr.
Definition: timer_mgr.h:24
uint16_t getUnwarnedReclaimCycles() const
Returns unwarned-reclaim-cycles.
static const uint32_t DEFAULT_HOLD_RECLAIMED_TIME
Default value for hold-reclaimed-time.
uint16_t getFlushReclaimedTimerWaitTime() const
Returns flush-reclaimed-timer-wait-time.
static const uint16_t LIMIT_FLUSH_RECLAIMED_TIMER_WAIT_TIME
Maximum value for flush-reclaimed-timer-wait-time.
uint16_t getMaxReclaimTime() const
Returns max-reclaim-time.
CfgExpiration(const bool test_mode=false)
Constructor.
boost::shared_ptr< Element > ElementPtr
Definition: data.h:20
static const uint32_t LIMIT_HOLD_RECLAIMED_TIME
Maximum value for hold-reclaimed-time.
static const uint16_t LIMIT_MAX_RECLAIM_TIME
Default value for max-reclaim-time.
Holds configuration parameters pertaining to lease expiration and lease affinity. ...
void setUnwarnedReclaimCycles(const int64_t unwarned_reclaim_cycles)
Sets unwarned-reclaim-cycles.
uint32_t getHoldReclaimedTime() const
Returns hold-reclaimed-time.
boost::shared_ptr< CfgExpiration > CfgExpirationPtr
Pointer to the Non-const object.
static const uint16_t DEFAULT_RECLAIM_TIMER_WAIT_TIME
Default value for reclaim-timer-wait-time.
static const std::string FLUSH_RECLAIMED_TIMER_NAME
Name of the timer for flushing reclaimed leases.
Abstract class for configuration Cfg_* classes.
boost::shared_ptr< const CfgExpiration > ConstCfgExpirationPtr
Pointer to the const object.
static const uint16_t DEFAULT_FLUSH_RECLAIMED_TIMER_WAIT_TIME
Default value for flush-reclaimed-timer-wait-time.
static const uint32_t DEFAULT_MAX_RECLAIM_LEASES
Default value for max-reclaim-leases.
static const uint32_t LIMIT_MAX_RECLAIM_LEASES
Maximum value for max-reclaim-leases.
void setHoldReclaimedTime(const int64_t hold_reclaimed_time)
Sets hold-reclaimed-time.
Defines the logger used by the top-level component of kea-dhcp-ddns.
static const uint16_t LIMIT_UNWARNED_RECLAIM_CYCLES
Maximum value for unwarned-reclaim-cycles.
static const std::string RECLAIM_EXPIRED_TIMER_NAME
Name of the timer for reclaiming expired leases.
void setFlushReclaimedTimerWaitTime(const int64_t flush_reclaimed_wait_time)
Sets flush-reclaimed-timer-wait-time.
void setReclaimTimerWaitTime(const int64_t reclaim_timer_wait_time)
Sets reclaim-timer-wait-time.
static const uint16_t LIMIT_RECLAIM_TIMER_WAIT_TIME
Maximum value for reclaim-timer-wait-time.
static const uint16_t DEFAULT_MAX_RECLAIM_TIME
Default value for max-reclaim-time.
void setMaxReclaimTime(const int64_t max_reclaim_time)
Sets max-reclaim-time.
static const uint16_t DEFAULT_UNWARNED_RECLAIM_CYCLES
Default value for unwarned-reclaim-cycles.
uint32_t getMaxReclaimLeases() const
Returns max-reclaim-leases.
void setupTimers(void(Instance::*reclaim_fun)(const size_t, const uint16_t, const bool, const uint16_t), void(Instance::*delete_fun)(const uint32_t), Instance *instance_ptr) const
Setup timers for the reclamation of expired leases according to the configuration parameters...
virtual isc::data::ElementPtr toElement() const
Unparse a configuration object.