Jian Li
Committed by Gerrit Code Review

[ONOS-4385] Handle flow removed message type in all cases

- Do not handle packet in messages inside ControllerImpl class

Change-Id: Idcb26b277b790125bd6b3ba8f10bb4c60e2a3c58
...@@ -48,8 +48,6 @@ import org.projectfloodlight.openflow.protocol.OFExperimenter; ...@@ -48,8 +48,6 @@ import org.projectfloodlight.openflow.protocol.OFExperimenter;
48 import org.projectfloodlight.openflow.protocol.OFFactories; 48 import org.projectfloodlight.openflow.protocol.OFFactories;
49 import org.projectfloodlight.openflow.protocol.OFFlowStatsEntry; 49 import org.projectfloodlight.openflow.protocol.OFFlowStatsEntry;
50 import org.projectfloodlight.openflow.protocol.OFFlowStatsReply; 50 import org.projectfloodlight.openflow.protocol.OFFlowStatsReply;
51 -import org.projectfloodlight.openflow.protocol.OFTableStatsEntry;
52 -import org.projectfloodlight.openflow.protocol.OFTableStatsReply;
53 import org.projectfloodlight.openflow.protocol.OFGroupDescStatsEntry; 51 import org.projectfloodlight.openflow.protocol.OFGroupDescStatsEntry;
54 import org.projectfloodlight.openflow.protocol.OFGroupDescStatsReply; 52 import org.projectfloodlight.openflow.protocol.OFGroupDescStatsReply;
55 import org.projectfloodlight.openflow.protocol.OFGroupStatsEntry; 53 import org.projectfloodlight.openflow.protocol.OFGroupStatsEntry;
...@@ -62,6 +60,8 @@ import org.projectfloodlight.openflow.protocol.OFPortStatsReply; ...@@ -62,6 +60,8 @@ import org.projectfloodlight.openflow.protocol.OFPortStatsReply;
62 import org.projectfloodlight.openflow.protocol.OFPortStatus; 60 import org.projectfloodlight.openflow.protocol.OFPortStatus;
63 import org.projectfloodlight.openflow.protocol.OFStatsReply; 61 import org.projectfloodlight.openflow.protocol.OFStatsReply;
64 import org.projectfloodlight.openflow.protocol.OFStatsReplyFlags; 62 import org.projectfloodlight.openflow.protocol.OFStatsReplyFlags;
63 +import org.projectfloodlight.openflow.protocol.OFTableStatsEntry;
64 +import org.projectfloodlight.openflow.protocol.OFTableStatsReply;
65 import org.projectfloodlight.openflow.protocol.action.OFActionOutput; 65 import org.projectfloodlight.openflow.protocol.action.OFActionOutput;
66 import org.projectfloodlight.openflow.protocol.instruction.OFInstruction; 66 import org.projectfloodlight.openflow.protocol.instruction.OFInstruction;
67 import org.slf4j.Logger; 67 import org.slf4j.Logger;
...@@ -79,6 +79,7 @@ import java.util.concurrent.ExecutorService; ...@@ -79,6 +79,7 @@ import java.util.concurrent.ExecutorService;
79 import java.util.concurrent.Executors; 79 import java.util.concurrent.Executors;
80 import java.util.concurrent.locks.Lock; 80 import java.util.concurrent.locks.Lock;
81 import java.util.concurrent.locks.ReentrantLock; 81 import java.util.concurrent.locks.ReentrantLock;
82 +
82 import static org.onlab.util.Tools.groupedThreads; 83 import static org.onlab.util.Tools.groupedThreads;
83 84
84 @Component(immediate = true) 85 @Component(immediate = true)
...@@ -115,12 +116,6 @@ public class OpenFlowControllerImpl implements OpenFlowController { ...@@ -115,12 +116,6 @@ public class OpenFlowControllerImpl implements OpenFlowController {
115 protected ExecutorService executorMsgs = 116 protected ExecutorService executorMsgs =
116 Executors.newFixedThreadPool(32, groupedThreads("onos/of", "event-stats-%d", log)); 117 Executors.newFixedThreadPool(32, groupedThreads("onos/of", "event-stats-%d", log));
117 118
118 - protected ExecutorService executorPacketIn =
119 - Executors.newCachedThreadPool(groupedThreads("onos/of", "event-pkt-in-stats-%d", log));
120 -
121 - protected ExecutorService executorFlowRemoved =
122 - Executors.newCachedThreadPool(groupedThreads("onos/of", "event-flow-removed-stats-%d", log));
123 -
124 private final ExecutorService executorBarrier = 119 private final ExecutorService executorBarrier =
125 Executors.newFixedThreadPool(4, groupedThreads("onos/of", "event-barrier-%d", log)); 120 Executors.newFixedThreadPool(4, groupedThreads("onos/of", "event-barrier-%d", log));
126 121
...@@ -286,19 +281,11 @@ public class OpenFlowControllerImpl implements OpenFlowController { ...@@ -286,19 +281,11 @@ public class OpenFlowControllerImpl implements OpenFlowController {
286 for (PacketListener p : ofPacketListener.values()) { 281 for (PacketListener p : ofPacketListener.values()) {
287 p.handlePacket(pktCtx); 282 p.handlePacket(pktCtx);
288 } 283 }
289 - if (monitorAllEvents) {
290 - executorPacketIn.execute(new OFMessageHandler(dpid, msg));
291 - }
292 break; 284 break;
293 // TODO: Consider using separate threadpool for sensitive messages. 285 // TODO: Consider using separate threadpool for sensitive messages.
294 // ie. Back to back error could cause us to starve. 286 // ie. Back to back error could cause us to starve.
295 case FLOW_REMOVED: 287 case FLOW_REMOVED:
296 - if (monitorAllEvents) {
297 - executorFlowRemoved.execute(new OFMessageHandler(dpid, msg));
298 - }
299 - break;
300 case ERROR: 288 case ERROR:
301 - log.debug("Received error message from {}: {}", dpid, msg);
302 executorMsgs.execute(new OFMessageHandler(dpid, msg)); 289 executorMsgs.execute(new OFMessageHandler(dpid, msg));
303 break; 290 break;
304 case STATS_REPLY: 291 case STATS_REPLY:
...@@ -648,7 +635,7 @@ public class OpenFlowControllerImpl implements OpenFlowController { ...@@ -648,7 +635,7 @@ public class OpenFlowControllerImpl implements OpenFlowController {
648 } 635 }
649 636
650 /** 637 /**
651 - * OpenFlow message handler for incoming control messages. 638 + * OpenFlow message handler.
652 */ 639 */
653 protected final class OFMessageHandler implements Runnable { 640 protected final class OFMessageHandler implements Runnable {
654 641
......
...@@ -19,7 +19,6 @@ import org.junit.Before; ...@@ -19,7 +19,6 @@ import org.junit.Before;
19 import org.junit.Test; 19 import org.junit.Test;
20 import org.onosproject.openflow.ExecutorServiceAdapter; 20 import org.onosproject.openflow.ExecutorServiceAdapter;
21 import org.onosproject.openflow.MockOfFeaturesReply; 21 import org.onosproject.openflow.MockOfFeaturesReply;
22 -import org.onosproject.openflow.MockOfPacketIn;
23 import org.onosproject.openflow.MockOfPortStatus; 22 import org.onosproject.openflow.MockOfPortStatus;
24 import org.onosproject.openflow.OfMessageAdapter; 23 import org.onosproject.openflow.OfMessageAdapter;
25 import org.onosproject.openflow.OpenFlowSwitchListenerAdapter; 24 import org.onosproject.openflow.OpenFlowSwitchListenerAdapter;
...@@ -38,7 +37,9 @@ import java.util.List; ...@@ -38,7 +37,9 @@ import java.util.List;
38 37
39 import static junit.framework.TestCase.fail; 38 import static junit.framework.TestCase.fail;
40 import static org.hamcrest.MatcherAssert.assertThat; 39 import static org.hamcrest.MatcherAssert.assertThat;
41 -import static org.hamcrest.Matchers.*; 40 +import static org.hamcrest.Matchers.equalTo;
41 +import static org.hamcrest.Matchers.hasSize;
42 +import static org.hamcrest.Matchers.is;
42 43
43 /** 44 /**
44 * Tests for packet processing in the open flow controller impl class. 45 * Tests for packet processing in the open flow controller impl class.
...@@ -51,8 +52,6 @@ public class OpenFlowControllerImplPacketsTest { ...@@ -51,8 +52,6 @@ public class OpenFlowControllerImplPacketsTest {
51 OpenFlowSwitchListenerAdapter switchListener; 52 OpenFlowSwitchListenerAdapter switchListener;
52 TestPacketListener packetListener; 53 TestPacketListener packetListener;
53 TestExecutorService statsExecutorService; 54 TestExecutorService statsExecutorService;
54 - TestExecutorService pktInExecutorService;
55 - TestExecutorService flowRmvExecutorService;
56 55
57 /** 56 /**
58 * Mock packet listener that accumulates packets. 57 * Mock packet listener that accumulates packets.
...@@ -70,7 +69,6 @@ public class OpenFlowControllerImplPacketsTest { ...@@ -70,7 +69,6 @@ public class OpenFlowControllerImplPacketsTest {
70 } 69 }
71 } 70 }
72 71
73 -
74 /** 72 /**
75 * Mock executor service that tracks submits. 73 * Mock executor service that tracks submits.
76 */ 74 */
...@@ -112,13 +110,8 @@ public class OpenFlowControllerImplPacketsTest { ...@@ -112,13 +110,8 @@ public class OpenFlowControllerImplPacketsTest {
112 controller.addPacketListener(100, packetListener); 110 controller.addPacketListener(100, packetListener);
113 111
114 statsExecutorService = new TestExecutorService(); 112 statsExecutorService = new TestExecutorService();
115 - pktInExecutorService = new TestExecutorService();
116 - flowRmvExecutorService = new TestExecutorService();
117 113
118 controller.executorMsgs = statsExecutorService; 114 controller.executorMsgs = statsExecutorService;
119 - controller.executorPacketIn = pktInExecutorService;
120 - controller.executorFlowRemoved = flowRmvExecutorService;
121 -
122 } 115 }
123 116
124 /** 117 /**
...@@ -148,19 +141,6 @@ public class OpenFlowControllerImplPacketsTest { ...@@ -148,19 +141,6 @@ public class OpenFlowControllerImplPacketsTest {
148 } 141 }
149 142
150 /** 143 /**
151 - * Tests a packet in listen operation.
152 - */
153 - @Test
154 - public void testPacketInListen() {
155 - agent.addConnectedSwitch(dpid1, switch1);
156 - OFMessage packetInPacket = new MockOfPacketIn();
157 - controller.processPacket(dpid1, packetInPacket);
158 - assertThat(packetListener.contexts(), hasSize(1));
159 - assertThat(pktInExecutorService.submittedMessages(), hasSize(1));
160 - assertThat(pktInExecutorService.submittedMessages().get(0), is(packetInPacket));
161 - }
162 -
163 - /**
164 * Tests an error operation. 144 * Tests an error operation.
165 */ 145 */
166 @Test 146 @Test
...@@ -171,16 +151,4 @@ public class OpenFlowControllerImplPacketsTest { ...@@ -171,16 +151,4 @@ public class OpenFlowControllerImplPacketsTest {
171 assertThat(statsExecutorService.submittedMessages(), hasSize(1)); 151 assertThat(statsExecutorService.submittedMessages(), hasSize(1));
172 assertThat(statsExecutorService.submittedMessages().get(0), is(errorPacket)); 152 assertThat(statsExecutorService.submittedMessages().get(0), is(errorPacket));
173 } 153 }
174 -
175 - /**
176 - * Tests a packet in operation.
177 - */
178 - @Test
179 - public void testFlowRemoved() {
180 - agent.addConnectedSwitch(dpid1, switch1);
181 - OFMessage flowRemovedPacket = new MockOfFlowRemoved();
182 - controller.processPacket(dpid1, flowRemovedPacket);
183 - assertThat(flowRmvExecutorService.submittedMessages(), hasSize(1));
184 - assertThat(flowRmvExecutorService.submittedMessages().get(0), is(flowRemovedPacket));
185 - }
186 } 154 }
......