Line data Source code
1 : /* 2 : * Copyright (c) 2016 Juniper Networks, Inc. All rights reserved. 3 : */ 4 : 5 : #include <cfg/cfg_init.h> 6 : #include <cfg/cfg_types.h> 7 : #include <port_ipc/port_ipc_types.h> 8 : #include "config_stale_cleaner.h" 9 : #include "port_ipc_handler.h" 10 : #include "port_subscribe_table.h" 11 : 12 3 : ConfigStaleCleaner::ConfigStaleCleaner(Agent *agent, TimerCallback callback) : 13 3 : agent_(agent), 14 3 : timeout_(kConfigStaleTimeout), audit_callback_(callback) { 15 3 : } 16 : 17 3 : ConfigStaleCleaner::~ConfigStaleCleaner() { 18 : // clean up the running timers 19 3 : for (std::set<Timer *>::iterator it = running_timer_list_.begin(); 20 3 : it != running_timer_list_.end(); ++it) { 21 0 : TimerManager::DeleteTimer(*it); 22 : } 23 3 : } 24 : 25 0 : void ConfigStaleCleaner::StartStaleCleanTimer(int32_t version) { 26 : // create timer, to be deleted on completion 27 : Timer *timer = 28 0 : TimerManager::CreateTimer( 29 0 : *(agent_->event_manager())->io_service(), "Stale cleanup timer", 30 0 : TaskScheduler::GetInstance()->GetTaskId("db::DBTable"), 0, true); 31 0 : running_timer_list_.insert(timer); 32 0 : timer->Start(timeout_, 33 : boost::bind(&ConfigStaleCleaner::StaleEntryTimeout, this, 34 : version, timer)); 35 0 : } 36 : 37 0 : bool ConfigStaleCleaner::StaleEntryTimeout(int32_t version, Timer *timer) { 38 0 : if (!audit_callback_.empty()) { 39 0 : audit_callback_(version); 40 : } 41 0 : running_timer_list_.erase(timer); 42 0 : return false; 43 : } 44 : 45 : //////////////////////////////////////////////////////////////////////////////// 46 : 47 3 : InterfaceConfigStaleCleaner::InterfaceConfigStaleCleaner(Agent *agent) : 48 3 : ConfigStaleCleaner(agent, NULL) { 49 3 : } 50 : 51 6 : InterfaceConfigStaleCleaner::~InterfaceConfigStaleCleaner() { 52 6 : } 53 : 54 : bool 55 0 : InterfaceConfigStaleCleaner::OnInterfaceConfigStaleTimeout(int32_t version) { 56 : PortSubscribeTable *table = 57 0 : agent_->port_ipc_handler()->port_subscribe_table(); 58 0 : if (!table) { 59 0 : return false; 60 : } 61 : 62 0 : CONFIG_TRACE(PortInfo, "InterfaceConfigStaleCleaner Walk invoked."); 63 0 : table->StaleWalk(version); 64 0 : return false; 65 : }