29struct D2ProcessHooks {
30 int hooks_index_d2_srv_configured_;
56 reconf_queue_flag_(false), shutdown_type_(SD_NORMAL) {
88 controller->registerCommands();
112 "Primary IO service stopped unexpectedly");
115 }
catch (
const std::exception& ex) {
117 controller->deregisterCommands();
119 "Process run method failed: " << ex.
what());
126 controller->deregisterCommands();
160 bool all_clear =
false;
164 switch (shutdown_type_) {
170 && (update_mgr_->getTransactionCount() == 0));
178 && (queue_mgr_->getQueueSize() == 0)
179 && (update_mgr_->getTransactionCount() == 0));
207 .arg(args ? args->str() :
"(no arguments)");
215 args->contains(
"type")) {
216 type_str = args->get(
"type")->stringValue();
227 "Invalid Shutdown type: " +
236 "Shutdown initiated, type is: " +
243 .arg(check_only ?
"check" :
"update")
247 answer =
getCfgMgr()->simpleParseConfig(config_set, check_only,
261 reconf_queue_flag_ =
false;
276 reconf_queue_flag_ =
true;
283 std::string error(
"");
287 callout_handle->setArgument(
"io_context",
getIOService());
288 callout_handle->setArgument(
"json_config", config_set);
289 callout_handle->setArgument(
"server_config",
291 callout_handle->setArgument(
"error", error);
298 callout_handle->getArgument(
"error", error);
301 reconf_queue_flag_ =
false;
311 }
catch (
const std::exception& ex) {
312 std::ostringstream err;
313 err <<
"Error initializing hooks: "
326 switch (queue_mgr_->getMgrState()){
336 .arg(reconf_queue_flag_ ?
"reconfiguration" :
"shutdown");
337 queue_mgr_->stopListening();
351 size_t threshold = (((queue_mgr_->getMaxQueueSize()
353 if (queue_mgr_->getQueueSize() <= threshold) {
355 .arg(threshold).arg(queue_mgr_->getMaxQueueSize());
357 queue_mgr_->startListening();
392 if (reconf_queue_flag_) {
412 reconf_queue_flag_ =
false;
415 queue_mgr_->removeListener();
422 std::string ip_address = d2_params->getIpAddress().toText();
423 if (ip_address ==
"0.0.0.0" || ip_address ==
"::") {
425 }
else if (ip_address !=
"127.0.0.1" && ip_address !=
"::1") {
431 queue_mgr_->initUDPListener(d2_params->getIpAddress(),
432 d2_params->getPort(),
433 d2_params->getNcrFormat(),
true);
446 queue_mgr_->startListening();
456 queue_mgr_->stopListening();
458 queue_mgr_->removeListener();
466 return (boost::dynamic_pointer_cast<D2CfgMgr>(
getCfgMgr()));
497 bool sock_changed = (sock_cfg && current_control_socket_ &&
498 !sock_cfg->equals(*current_control_socket_));
505 if (!sock_cfg || !current_control_socket_ || sock_changed) {
507 if (current_control_socket_) {
509 current_control_socket_.reset();
519 current_control_socket_ = sock_cfg;
This is a base class for exceptions thrown from the DNS library module.
virtual const char * what() const
Returns a C-style character string of the cause of the exception.
static IOServiceMgr & instance()
Access the IOServiceMgr singleton instance.
void pollIOServices()
Poll IOService objects.
void closeCommandSocket()
Shuts down any open control sockets.
static CommandMgr & instance()
CommandMgr is a singleton class.
void setIOService(const asiolink::IOServicePtr &io_service)
Sets IO service to be used by the command manager.
void openCommandSocket(const isc::data::ConstElementPtr &socket_info)
Opens control socket with parameters specified in socket_info.
DHCP-DDNS Configuration Manager.
static process::DControllerBasePtr & instance()
Static singleton instance method.
D2Process(const char *name, const asiolink::IOServicePtr &io_service)
Constructor.
static const unsigned int QUEUE_RESTART_PERCENT
Defines the point at which to resume receiving requests.
virtual bool canShutdown() const
Indicates whether or not the process can perform a shutdown.
virtual void checkQueueStatus()
Monitors current queue manager state, takes action accordingly.
virtual ~D2Process()
Destructor.
virtual void run()
Implements the process's event loop.
virtual void init()
Called after instantiation to perform initialization unique to D2.
D2CfgMgrPtr getD2CfgMgr()
Returns a pointer to the configuration manager.
virtual isc::data::ConstElementPtr configure(isc::data::ConstElementPtr config_set, bool check_only=false)
Processes the given configuration.
void reconfigureCommandChannel()
(Re-)Configure the command channel.
virtual void reconfigureQueueMgr()
Initializes then starts the queue manager.
ShutdownType
Defines the shutdown types supported by D2Process.
virtual isc::data::ConstElementPtr shutdown(isc::data::ConstElementPtr args)
Initiates the D2Process shutdown process.
static const char * getShutdownTypeStr(const ShutdownType &type)
Returns a text label for the given shutdown type.
virtual size_t runIO()
Allows IO processing to run until at least callback is invoked.
D2QueueMgr creates and manages a queue of DNS update requests.
static void init()
Initialize D2 statistics.
D2UpdateMgr creates and manages update transactions.
@ NEXT_STEP_DROP
drop the packet
static int registerHook(const std::string &name)
Register Hook.
static bool calloutsPresent(int index)
Are callouts present?
static boost::shared_ptr< CalloutHandle > createCalloutHandle()
Return callout handle.
static void callCallouts(int index, CalloutHandle &handle)
Calls the callouts for a given hook.
Exception thrown if the process encountered an operational error.
Application Process Interface.
void setShutdownFlag(bool value)
Sets the process shut down flag to the given value.
bool shouldShutdown() const
Checks if the process has been instructed to shut down.
asiolink::IOServicePtr & getIOService()
Fetches the controller's IOService.
DCfgMgrBasePtr & getCfgMgr()
Fetches the process's configuration manager.
This file contains several functions and constants that are used for handling commands and responses ...
#define isc_throw(type, stream)
A shortcut macro to insert known values into exception arguments.
#define LOG_ERROR(LOGGER, MESSAGE)
Macro to conveniently test error output and log it.
#define LOG_INFO(LOGGER, MESSAGE)
Macro to conveniently test info output and log it.
#define LOG_WARN(LOGGER, MESSAGE)
Macro to conveniently test warn output and log it.
#define LOG_FATAL(LOGGER, MESSAGE)
Macro to conveniently test fatal output and log it.
#define LOG_DEBUG(LOGGER, LEVEL, MESSAGE)
Macro to conveniently test debug output and log it.
boost::shared_ptr< IOService > IOServicePtr
Defines a smart pointer to an IOService instance.
const int CONTROL_RESULT_ERROR
Status code indicating a general failure.
ConstElementPtr createAnswer()
Creates a standard config/command level success answer message (i.e.
ConstElementPtr parseAnswer(int &rcode, const ConstElementPtr &msg)
const int CONTROL_RESULT_SUCCESS
Status code indicating a successful operation.
boost::shared_ptr< D2CfgMgr > D2CfgMgrPtr
Defines a shared pointer to D2CfgMgr.
const isc::log::MessageID DHCP_DDNS_QUEUE_MGR_RECOVERING
const isc::log::MessageID DHCP_DDNS_QUEUE_MGR_STOP_ERROR
const isc::log::MessageID DHCP_DDNS_FAILED
const isc::log::MessageID DHCP_DDNS_LISTENING_ON_ALL_INTERFACES
const isc::log::MessageID DHCP_DDNS_QUEUE_MGR_START_ERROR
const isc::log::MessageID DHCP_DDNS_SHUTDOWN_COMMAND
const isc::log::MessageID DHCP_DDNS_CONFIGURE
const isc::log::MessageID DHCP_DDNS_CLEARED_FOR_SHUTDOWN
const isc::log::MessageID DHCP_DDNS_QUEUE_MGR_RECONFIGURING
const isc::log::MessageID DHCP_DDNS_RUN_EXIT
const isc::log::MessageID DHCP_DDNS_CONFIGURED_CALLOUT_DROP
const isc::log::MessageID DHCP_DDNS_QUEUE_MGR_RESUME_ERROR
const isc::log::MessageID DHCP_DDNS_STARTED
boost::shared_ptr< D2Controller > D2ControllerPtr
Pointer to a process controller.
isc::log::Logger d2_logger("dhcpddns")
Defines the logger used within D2.
const isc::log::MessageID DHCP_DDNS_QUEUE_MGR_RESUMING
boost::shared_ptr< D2Params > D2ParamsPtr
Defines a pointer for D2Params instances.
const isc::log::MessageID DHCP_DDNS_QUEUE_MGR_STOPPING
const isc::log::MessageID DHCP_DDNS_NOT_ON_LOOPBACK
boost::shared_ptr< const Element > ConstElementPtr
std::string ncrProtocolToString(NameChangeProtocol protocol)
Function which converts NameChangeProtocol enums to text labels.
boost::shared_ptr< CalloutHandle > CalloutHandlePtr
A shared pointer to a CalloutHandle object.
const int DBGLVL_TRACE_BASIC
Trace basic operations.
const int DBGLVL_START_SHUT
This is given a value of 0 as that is the level selected if debugging is enabled without giving a lev...
boost::shared_ptr< DCfgMgrBase > DCfgMgrBasePtr
Defines a shared pointer to DCfgMgrBase.
ConstElementPtr redactConfig(ConstElementPtr const &element, list< string > const &json_path)
Redact a configuration.
Defines the logger used by the top-level component of kea-lfc.