Skip to content

Commit

Permalink
Merge "Use correct API to clear a BgpPeer"
Browse files Browse the repository at this point in the history
  • Loading branch information
Zuul authored and opencontrail-ci-admin committed Jun 26, 2015
2 parents 2fe2ba1 + 9fdbb23 commit efaa9e3
Show file tree
Hide file tree
Showing 4 changed files with 34 additions and 24 deletions.
1 change: 1 addition & 0 deletions src/bgp/bgp_peer.cc
Expand Up @@ -710,6 +710,7 @@ const IPeerDebugStats *BgpPeer::peer_stats() const {
}

void BgpPeer::Clear(int subcode) {
CHECK_CONCURRENCY("bgp::Config");
state_machine_->Shutdown(subcode);
}

Expand Down
4 changes: 2 additions & 2 deletions src/bgp/test/bgp_peer_close_test.cc
Expand Up @@ -926,7 +926,7 @@ TEST_P(BgpPeerCloseTest, ClosePeers) {

// Trigger ribin deletes
BOOST_FOREACH(BgpNullPeer *npeer, peers_) {
npeer->peer()->Clear(BgpProto::Notification::AdminReset);
npeer->peer()->SetAdminState(true);
}

XmppPeerClose();
Expand Down Expand Up @@ -1027,7 +1027,7 @@ TEST_P(BgpPeerCloseTest, DISABLED_ClosePeersWithRouteStalingAndDelete) {

// Trigger ribin deletes
BOOST_FOREACH(BgpNullPeer *npeer, peers_) {
npeer->peer()->Clear(BgpProto::Notification::AdminReset);
npeer->peer()->SetAdminState(true);
}

XmppPeerClose();
Expand Down
27 changes: 14 additions & 13 deletions src/bgp/test/bgp_server_test.cc
Expand Up @@ -1921,18 +1921,14 @@ TEST_F(BgpServerUnitTest, HoldTimeChange) {
TASK_UTIL_EXPECT_EQ(10 * (idx - 1), sm_b->hold_time());
}

// Clear all the sessions.
// Clear all the sessions by setting peers to admin down on A.
for (int j = 0; j < peer_count; j++) {
string uuid = BgpConfigParser::session_uuid("A", "B", j + 1);
BgpPeer *peer_a =
a_->FindPeerByUuid(BgpConfigManager::kMasterInstance, uuid);
peer_a->Clear(BgpProto::Notification::AdminReset);
task_util::WaitForIdle();

BgpPeer *peer_b =
b_->FindPeerByUuid(BgpConfigManager::kMasterInstance, uuid);
peer_b->Clear(BgpProto::Notification::AdminReset);
peer_a->SetAdminState(true);
task_util::WaitForIdle();
peer_a->SetAdminState(false);
}

VerifyPeers(peer_count);
Expand Down Expand Up @@ -2236,15 +2232,15 @@ TEST_F(BgpServerUnitTest, CloseInProgress) {
PausePeerRibMembershipManager(a_.get());

//
// Trigger close of peers on A
// Trigger close of peers on A by making B send notifications
// Peer close will be started but not completed since peer membership
// manager has been paused
//
for (int j = 0; j < peer_count; j++) {
string uuid = BgpConfigParser::session_uuid("A", "B", j + 1);
BgpPeer *peer_a = a_->FindPeerByUuid(BgpConfigManager::kMasterInstance,
BgpPeer *peer_b = b_->FindPeerByUuid(BgpConfigManager::kMasterInstance,
uuid);
peer_a->Clear(BgpProto::Notification::AdminReset);
peer_b->SetAdminState(true);
}

//
Expand All @@ -2254,6 +2250,7 @@ TEST_F(BgpServerUnitTest, CloseInProgress) {
string uuid = BgpConfigParser::session_uuid("A", "B", j + 1);
BgpPeer *peer_b = b_->FindPeerByUuid(BgpConfigManager::kMasterInstance,
uuid);
peer_b->SetAdminState(false);
TASK_UTIL_EXPECT_TRUE(peer_b->get_rx_notification() >= 3);
}

Expand Down Expand Up @@ -2333,23 +2330,27 @@ TEST_F(BgpServerUnitTest, CloseDeferred) {
}

//
// Trigger close of peers on A
// Trigger close of peers on A by making B send notifications
// Peer close will be deferred since peer membership manager was paused
// before the peers got established
//
for (int j = 0; j < peer_count; j++) {
string uuid = BgpConfigParser::session_uuid("A", "B", j + 1);
BgpPeer *peer_a = a_->FindPeerByUuid(BgpConfigManager::kMasterInstance,
BgpPeer *peer_b = b_->FindPeerByUuid(BgpConfigManager::kMasterInstance,
uuid);
peer_a->Clear(BgpProto::Notification::AdminReset);
peer_b->SetAdminState(true);
}

//
// Note down notification counts and bring up peers on B
//
vector<size_t> b_rx_notification(peer_count);
for (int j = 0; j < peer_count; j++) {
string uuid = BgpConfigParser::session_uuid("A", "B", j + 1);
BgpPeer *peer_b = b_->FindPeerByUuid(BgpConfigManager::kMasterInstance,
uuid);
b_rx_notification[j] = peer_b->get_rx_notification();
peer_b->SetAdminState(false);
}

//
Expand Down
26 changes: 17 additions & 9 deletions src/bgp/test/bgp_stress_test.cc
Expand Up @@ -2119,30 +2119,38 @@ void BgpStressTest::ClearBgpPeer(vector<int> peer_ids) {
map<int, bool> established;
map<int, uint32_t> flap_count;

// Remember flap counts and bring down peers.
BOOST_FOREACH(int peer_id, peer_ids) {
if (peer_id >= (int) peers_.size() || !peers_[peer_id]) continue;

flap_count.insert(make_pair(peer_id,
peers_[peer_id]->peer()->flap_count()));
established.insert(make_pair(peer_id,
peers_[peer_id]->peer()->GetState() == StateMachine::ESTABLISHED));
peers_[peer_id]->peer()->Clear(BgpProto::Notification::AdminReset);
peers_[peer_id]->peer()->SetAdminState(true);
}

// Verify that established peers did flap.
BOOST_FOREACH(int peer_id, peer_ids) {
if (peer_id >= (int) peers_.size() || !peers_[peer_id]) continue;

//
// If the peer was established, first make sure that it did flap
//
if (peer_id >= (int) peers_.size() || !peers_[peer_id])
continue;
if (established[peer_id]) {
TASK_UTIL_EXPECT_TRUE(peers_[peer_id]->peer()->flap_count() >
flap_count[peer_id]);
}
}

//
// Wait for the peer to come back up
//
// Bring up peers.
BOOST_FOREACH(int peer_id, peer_ids) {
if (peer_id >= (int) peers_.size() || !peers_[peer_id])
continue;
peers_[peer_id]->peer()->SetAdminState(false);
}

// Wait for peers to come back up.
BOOST_FOREACH(int peer_id, peer_ids) {
if (peer_id >= (int) peers_.size() || !peers_[peer_id])
continue;
BGP_WAIT_FOR_PEER_STATE(peers_[peer_id]->peer(),
StateMachine::ESTABLISHED);
}
Expand Down

0 comments on commit efaa9e3

Please sign in to comment.