Skip to content

Commit

Permalink
Merge "Handle record delete in XMPP notification."
Browse files Browse the repository at this point in the history
  • Loading branch information
Zuul authored and opencontrail-ci-admin committed Mar 28, 2016
2 parents 21ee50f + 7035525 commit 379c0bf
Show file tree
Hide file tree
Showing 3 changed files with 4 additions and 44 deletions.
29 changes: 4 additions & 25 deletions src/dns/agent/agent_xmpp_channel.cc
Original file line number Diff line number Diff line change
Expand Up @@ -30,13 +30,13 @@ DnsAgentXmppChannel:: DnsAgentXmppChannel(XmppChannel *channel,
}

DnsAgentXmppChannel::~DnsAgentXmppChannel() {
channel_->UnRegisterReceive(xmps::DNS);
}

void DnsAgentXmppChannel::Close() {
UpdateDnsRecords(BindUtil::DELETE_UPDATE);
if (mgr_)
mgr_->RemoveChannel(channel_);
channel_->UnRegisterReceive(xmps::DNS);
}

void DnsAgentXmppChannel::ReceiveReq(const XmppStanza::XmppMessage *msg) {
Expand Down Expand Up @@ -155,9 +155,7 @@ void DnsAgentXmppChannel::GetAgentDnsData(AgentDnsData &data) {
}

DnsAgentXmppChannelManager::DnsAgentXmppChannelManager(
XmppServer *server) : server_(server),
trigger_(boost::bind(&DnsAgentXmppChannelManager::ChannelCleaner, this),
TaskScheduler::GetInstance()->GetTaskId("dns::GarbageCleaner"), 0) {
XmppServer *server) : server_(server) {
if (server_) {
server_->RegisterConnectionEvent(xmps::DNS,
boost::bind(&DnsAgentXmppChannelManager::HandleXmppChannelEvent,
Expand All @@ -184,14 +182,6 @@ DnsAgentXmppChannelManager::DnsAgentXmppChannelManager::FindChannel(
return it->second;
}

void DnsAgentXmppChannelManager::UpdateAll() {
for (ChannelMap::iterator iter = channel_map_.begin();
iter != channel_map_.end(); ++iter) {
DnsAgentXmppChannel *ch = iter->second;
ch->UpdateDnsRecords(BindUtil::ADD_UPDATE);
}
}

void
DnsAgentXmppChannelManager::HandleXmppChannelEvent(XmppChannel *channel,
xmps::PeerState state) {
Expand All @@ -206,26 +196,15 @@ DnsAgentXmppChannelManager::HandleXmppChannelEvent(XmppChannel *channel,
} else if (state == xmps::NOT_READY) {
if (it != channel_map_.end()) {
DnsAgentXmppChannel *agent_xmpp_channel = (*it).second;
delete_list_.push_back(agent_xmpp_channel);
trigger_.Set();
agent_xmpp_channel->Close();
delete agent_xmpp_channel;
} else {
DNS_XMPP_TRACE(DnsXmppTrace,
"Peer not found on channel not ready event");
}
}
}

bool DnsAgentXmppChannelManager::ChannelCleaner() {
// This is executed in the GarbageCleaner task context, which is
// excluded from xmpp task
for (unsigned int i = 0; i < delete_list_.size(); ++i) {
delete_list_[i]->Close();
delete delete_list_[i];
}
delete_list_.clear();
return true;
}

void DnsAgentXmppChannelManager::GetAgentData(std::vector<AgentData> &list) {
for (ChannelMap::iterator iter = channel_map_.begin();
iter != channel_map_.end(); ++iter) {
Expand Down
4 changes: 0 additions & 4 deletions src/dns/agent/agent_xmpp_channel.h
Original file line number Diff line number Diff line change
Expand Up @@ -49,18 +49,14 @@ class DnsAgentXmppChannelManager {
virtual ~DnsAgentXmppChannelManager();
void RemoveChannel(XmppChannel *ch);
DnsAgentXmppChannel *FindChannel(const XmppChannel *ch);
void UpdateAll();
void HandleXmppChannelEvent(XmppChannel *channel, xmps::PeerState state);
bool ChannelCleaner();

void GetAgentData(std::vector<AgentData> &list);
void GetAgentDnsData(std::vector<AgentDnsData> &dt);

private:
XmppServer *server_;
TaskTrigger trigger_;
ChannelMap channel_map_;
std::vector<DnsAgentXmppChannel *> delete_list_;
};

#endif // _dns_agent_xmpp_channel_h_
15 changes: 0 additions & 15 deletions src/dns/cmn/dns.cc
Original file line number Diff line number Diff line change
Expand Up @@ -79,21 +79,6 @@ void Dns::SetTaskSchedulingPolicy() {
(TaskExclusion(scheduler->GetTaskId("http::RequestHandlerTask")));
scheduler->SetPolicy(scheduler->GetTaskId("xmpp::StateMachine"),
exclude_io);

const char *garbage_exclude_list[] = {
"dns::Config",
"dns::BindStatus",
"db::DBTable",
"bgp::Config",
"xmpp::StateMachine",
};
arraysize = sizeof(garbage_exclude_list) / sizeof(char *);
TaskPolicy garbage_exclude;
for (int i = 0; i < arraysize; ++i) {
int task_id = scheduler->GetTaskId(garbage_exclude_list[i]);
garbage_exclude.push_back(TaskExclusion(task_id));
}
scheduler->SetPolicy(scheduler->GetTaskId("dns::GarbageCleaner"), garbage_exclude);
}

void DiscoveryClientSubscriberStatsReq::HandleRequest() const {
Expand Down

0 comments on commit 379c0bf

Please sign in to comment.