diff --git a/src/main/java/net/floodlightcontroller/core/internal/Controller.java b/src/main/java/net/floodlightcontroller/core/internal/Controller.java index 5abc1df629bb5e3d39f1517c219a166d3dafb7ea..e95cc5e169305d6bbbe737694a2a665da3ce6de3 100644 --- a/src/main/java/net/floodlightcontroller/core/internal/Controller.java +++ b/src/main/java/net/floodlightcontroller/core/internal/Controller.java @@ -827,7 +827,9 @@ public class Controller implements IFloodlightProviderService, // flow-table. The end result would be that the flow // table for a newly connected switch is never // flushed. Not sure how to handle that case though... - sw.clearAllFlowMods(); + if (!isActive){ + sw.clearAllFlowMods(); + } log.debug("First role reply from master switch {}, " + "clear FlowTable to active switch list", HexString.toHexString(sw.getId())); @@ -848,7 +850,7 @@ public class Controller implements IFloodlightProviderService, HexString.toHexString(sw.getId())); } - else if (isActive && !sw.isActive()) { + else if (isActive) { // Transition from MASTER to SLAVE: remove switch // from active switch list. log.debug("Removed slave switch {} from active switch" + diff --git a/src/test/java/net/floodlightcontroller/core/internal/ControllerTest.java b/src/test/java/net/floodlightcontroller/core/internal/ControllerTest.java index fb063df4c96c2cbdf23ea9fa92268978f31efffe..8d4bcbea445c27f725d2b59495fc63f0821530b2 100644 --- a/src/test/java/net/floodlightcontroller/core/internal/ControllerTest.java +++ b/src/test/java/net/floodlightcontroller/core/internal/ControllerTest.java @@ -1163,7 +1163,7 @@ public class ControllerTest extends FloodlightTestCase { expect(chdlr.sw.getStringId()).andReturn("00:00:00:00:00:00:00:01") .anyTimes(); controller.activeSwitches.put(1L, chdlr.sw); - expect(chdlr.sw.isActive()).andReturn(false); + expect(chdlr.sw.isActive()).andReturn(false).anyTimes(); expect(chdlr.sw.isConnected()).andReturn(true); chdlr.sw.cancelAllStatisticsReplies(); chdlr.state.firstRoleReplyReceived = false;