diff --git a/mtce-common/src/common/logMacros.h b/mtce-common/src/common/logMacros.h index 41de0aa7..a3227b5b 100644 --- a/mtce-common/src/common/logMacros.h +++ b/mtce-common/src/common/logMacros.h @@ -120,6 +120,7 @@ typedef struct int api_retries ; /**< api retries before failure */ int bmc_reset_delay ; /**< secs delay before bmc reset */ int http_retry_wait ; /**< secs to wait between http reg retries */ + int host_add_delay ; /**< secs to wait before adding hosts */ int hostwd_failure_threshold ; /**< allowed # of missed pmon/hostwd messages */ bool hostwd_reboot_on_err ; /**< should hostwd reboot on fault detected */ bool hostwd_kdump_on_stall ; /**< sysrq crash dump on quorum msg'ing stall */ diff --git a/mtce/src/common/nodeClass.cpp b/mtce/src/common/nodeClass.cpp index b46bfafe..3b983f10 100755 --- a/mtce/src/common/nodeClass.cpp +++ b/mtce/src/common/nodeClass.cpp @@ -639,7 +639,7 @@ nodeLinkClass::node* nodeLinkClass::addNode( string hostname ) ptr->swactStage = MTC_SWACT__START ; ptr->offlineStage = MTC_OFFLINE__IDLE ; ptr->onlineStage = MTC_ONLINE__START ; - ptr->addStage = MTC_ADD__START ; + ptr->addStage = MTC_ADD__START_DELAY; ptr->delStage = MTC_DEL__START ; ptr->recoveryStage = MTC_RECOVERY__START ; ptr->insvTestStage = MTC_INSV_TEST__RUN ; /* Start wo initial delay */ @@ -3137,7 +3137,17 @@ int nodeLinkClass::add_host ( node_inv_type & inv ) if (( rc == PASS ) && ( node_ptr )) { - node_ptr->addStage = MTC_ADD__START ; + int delay = daemon_get_cfg_ptr()->host_add_delay ; + if ( delay > 0 ) + { + mtcTimer_start ( node_ptr->mtcTimer, mtcTimer_handler, delay ); + node_ptr->addStage = MTC_ADD__START_DELAY ; + } + else + { + node_ptr->addStage = MTC_ADD__START ; + } + ilog ("Host add delay is %d seconds", delay ); adminActionChange ( node_ptr , MTC_ADMIN_ACTION__ADD ); } return (rc); diff --git a/mtce/src/maintenance/mtcNodeCtrl.cpp b/mtce/src/maintenance/mtcNodeCtrl.cpp index ba5dd369..900805d0 100644 --- a/mtce/src/maintenance/mtcNodeCtrl.cpp +++ b/mtce/src/maintenance/mtcNodeCtrl.cpp @@ -463,6 +463,11 @@ static int mtc_config_handler ( void * user, config_ptr->http_retry_wait = atoi(value); mtcInv.http_retry_wait = config_ptr->http_retry_wait ; } + else if (MATCH("agent", "host_add_delay")) + { + config_ptr->host_add_delay = atoi(value); + ilog ("Start Delay : %d secs", config_ptr->host_add_delay ); + } else if (MATCH("timeouts", "failsafe_shutdown_delay")) { config_ptr->failsafe_shutdown_delay = atoi(value); diff --git a/mtce/src/maintenance/mtcNodeHdlrs.cpp b/mtce/src/maintenance/mtcNodeHdlrs.cpp index 7084dbab..a00152d1 100755 --- a/mtce/src/maintenance/mtcNodeHdlrs.cpp +++ b/mtce/src/maintenance/mtcNodeHdlrs.cpp @@ -6215,8 +6215,13 @@ int nodeLinkClass::add_handler ( struct nodeLinkClass::node * node_ptr ) switch ( node_ptr->addStage ) { - case MTC_ADD__START: case MTC_ADD__START_DELAY: + { + if ( mtcTimer_expired (node_ptr->mtcTimer) ) + node_ptr->addStage = MTC_ADD__START ; + break ; + } + case MTC_ADD__START: { bool timer_set = false ; plog ("%s Host Add\n", node_ptr->hostname.c_str()); diff --git a/mtce/src/scripts/mtc.conf b/mtce/src/scripts/mtc.conf index 3bc57cba..84d6b3f6 100644 --- a/mtce/src/scripts/mtc.conf +++ b/mtce/src/scripts/mtc.conf @@ -80,6 +80,8 @@ bmc_reset_delay = 300 ; seconds to wait before issuing a bmc http_retry_wait = 10 ; secs to wait between http request retries +host_add_delay = 20 ; seconds to wait before adding hosts + [client] ; Client Configuration scheduling_priority = 45 ; realtime scheduling; range of 1 .. 99