Fixing IntentPushTestCommand
Change-Id: Ia6cc2f4be2e8087a903e660067626c5225f20216
Showing
1 changed file
with
35 additions
and
70 deletions
| ... | @@ -15,14 +15,13 @@ | ... | @@ -15,14 +15,13 @@ |
| 15 | */ | 15 | */ |
| 16 | package org.onosproject.cli.net; | 16 | package org.onosproject.cli.net; |
| 17 | 17 | ||
| 18 | -import com.google.common.collect.ArrayListMultimap; | 18 | +import com.google.common.collect.Lists; |
| 19 | - | ||
| 20 | import org.apache.karaf.shell.commands.Argument; | 19 | import org.apache.karaf.shell.commands.Argument; |
| 21 | import org.apache.karaf.shell.commands.Command; | 20 | import org.apache.karaf.shell.commands.Command; |
| 22 | import org.apache.karaf.shell.commands.Option; | 21 | import org.apache.karaf.shell.commands.Option; |
| 22 | +import org.onlab.packet.Ethernet; | ||
| 23 | +import org.onlab.packet.MacAddress; | ||
| 23 | import org.onosproject.cli.AbstractShellCommand; | 24 | import org.onosproject.cli.AbstractShellCommand; |
| 24 | -import org.onosproject.core.ApplicationId; | ||
| 25 | -import org.onosproject.core.CoreService; | ||
| 26 | import org.onosproject.net.ConnectPoint; | 25 | import org.onosproject.net.ConnectPoint; |
| 27 | import org.onosproject.net.DeviceId; | 26 | import org.onosproject.net.DeviceId; |
| 28 | import org.onosproject.net.PortNumber; | 27 | import org.onosproject.net.PortNumber; |
| ... | @@ -35,13 +34,12 @@ import org.onosproject.net.intent.IntentEvent; | ... | @@ -35,13 +34,12 @@ import org.onosproject.net.intent.IntentEvent; |
| 35 | import org.onosproject.net.intent.IntentEvent.Type; | 34 | import org.onosproject.net.intent.IntentEvent.Type; |
| 36 | import org.onosproject.net.intent.IntentListener; | 35 | import org.onosproject.net.intent.IntentListener; |
| 37 | import org.onosproject.net.intent.IntentService; | 36 | import org.onosproject.net.intent.IntentService; |
| 37 | +import org.onosproject.net.intent.Key; | ||
| 38 | import org.onosproject.net.intent.PointToPointIntent; | 38 | import org.onosproject.net.intent.PointToPointIntent; |
| 39 | -import org.onlab.packet.Ethernet; | ||
| 40 | -import org.onlab.packet.MacAddress; | ||
| 41 | 39 | ||
| 40 | +import java.util.Collections; | ||
| 42 | import java.util.EnumSet; | 41 | import java.util.EnumSet; |
| 43 | -import java.util.HashSet; | 42 | +import java.util.List; |
| 44 | -import java.util.Set; | ||
| 45 | import java.util.concurrent.CountDownLatch; | 43 | import java.util.concurrent.CountDownLatch; |
| 46 | import java.util.concurrent.TimeUnit; | 44 | import java.util.concurrent.TimeUnit; |
| 47 | 45 | ||
| ... | @@ -66,21 +64,15 @@ public class IntentPushTestCommand extends AbstractShellCommand | ... | @@ -66,21 +64,15 @@ public class IntentPushTestCommand extends AbstractShellCommand |
| 66 | required = true, multiValued = false) | 64 | required = true, multiValued = false) |
| 67 | String egressDeviceString = null; | 65 | String egressDeviceString = null; |
| 68 | 66 | ||
| 69 | - | 67 | + @Argument(index = 2, name = "numberOfIntents", |
| 70 | - @Argument(index = 2, name = "IntentsPerAppId", | 68 | + description = "Number of intents to install/withdraw", |
| 71 | - description = "Number of intents per appId", | ||
| 72 | required = true, multiValued = false) | 69 | required = true, multiValued = false) |
| 73 | - String intentsPerAppId = null; | 70 | + String numberOfIntents = null; |
| 74 | - | ||
| 75 | - @Argument(index = 3, name = "apps", | ||
| 76 | - description = "Number of appIds", | ||
| 77 | - required = false, multiValued = false) | ||
| 78 | - String appIds = null; | ||
| 79 | 71 | ||
| 80 | - @Argument(index = 4, name = "appIdBase", | 72 | + @Argument(index = 3, name = "keyOffset", |
| 81 | - description = "Base Value for Application IDs", | 73 | + description = "Starting point for first key (default: 1)", |
| 82 | required = false, multiValued = false) | 74 | required = false, multiValued = false) |
| 83 | - String appIdBaseStr = null; | 75 | + String keyOffsetStr = null; |
| 84 | 76 | ||
| 85 | @Option(name = "-i", aliases = "--install", | 77 | @Option(name = "-i", aliases = "--install", |
| 86 | description = "Install intents", | 78 | description = "Install intents", |
| ... | @@ -95,12 +87,9 @@ public class IntentPushTestCommand extends AbstractShellCommand | ... | @@ -95,12 +87,9 @@ public class IntentPushTestCommand extends AbstractShellCommand |
| 95 | private IntentService service; | 87 | private IntentService service; |
| 96 | private CountDownLatch latch; | 88 | private CountDownLatch latch; |
| 97 | private volatile long start, end; | 89 | private volatile long start, end; |
| 98 | - private int apps; | ||
| 99 | - private int intentsPerApp; | ||
| 100 | - private int appIdBase; | ||
| 101 | private int count; | 90 | private int count; |
| 91 | + private int keyOffset; | ||
| 102 | private boolean add; | 92 | private boolean add; |
| 103 | - private final Set<ApplicationId> myAppIds = new HashSet<>(); | ||
| 104 | 93 | ||
| 105 | @Override | 94 | @Override |
| 106 | protected void execute() { | 95 | protected void execute() { |
| ... | @@ -115,64 +104,55 @@ public class IntentPushTestCommand extends AbstractShellCommand | ... | @@ -115,64 +104,55 @@ public class IntentPushTestCommand extends AbstractShellCommand |
| 115 | PortNumber egressPortNumber = portNumber(getPortNumber(egressDeviceString)); | 104 | PortNumber egressPortNumber = portNumber(getPortNumber(egressDeviceString)); |
| 116 | ConnectPoint egress = new ConnectPoint(egressDeviceId, egressPortNumber); | 105 | ConnectPoint egress = new ConnectPoint(egressDeviceId, egressPortNumber); |
| 117 | 106 | ||
| 118 | - apps = appIds != null ? Integer.parseInt(appIds) : 1; | 107 | + count = Integer.parseInt(numberOfIntents); |
| 119 | - intentsPerApp = Integer.parseInt(intentsPerAppId); | 108 | + keyOffset = (keyOffsetStr != null) ? Integer.parseInt(keyOffsetStr) : 1; |
| 120 | - appIdBase = appIdBaseStr != null ? Integer.parseInt(appIdBaseStr) : 1; | ||
| 121 | - | ||
| 122 | - count = intentsPerApp * apps; | ||
| 123 | 109 | ||
| 124 | service.addListener(this); | 110 | service.addListener(this); |
| 125 | 111 | ||
| 126 | - ArrayListMultimap<Integer, Intent> operations = generateIntents(ingress, egress); | 112 | + List<Intent> operations = generateIntents(ingress, egress); |
| 127 | 113 | ||
| 128 | boolean both = !(installOnly ^ withdrawOnly); | 114 | boolean both = !(installOnly ^ withdrawOnly); |
| 129 | 115 | ||
| 130 | if (installOnly || both) { | 116 | if (installOnly || both) { |
| 131 | add = true; | 117 | add = true; |
| 132 | - latch = new CountDownLatch(count); | ||
| 133 | submitIntents(operations); | 118 | submitIntents(operations); |
| 134 | } | 119 | } |
| 135 | 120 | ||
| 136 | if (withdrawOnly || both) { | 121 | if (withdrawOnly || both) { |
| 137 | - if (withdrawOnly && !both) { | ||
| 138 | - print("This should fail for now..."); | ||
| 139 | - } | ||
| 140 | add = false; | 122 | add = false; |
| 141 | - latch = new CountDownLatch(count); | ||
| 142 | submitIntents(operations); | 123 | submitIntents(operations); |
| 143 | } | 124 | } |
| 144 | 125 | ||
| 145 | service.removeListener(this); | 126 | service.removeListener(this); |
| 146 | } | 127 | } |
| 147 | 128 | ||
| 148 | - private ArrayListMultimap<Integer, Intent> generateIntents(ConnectPoint ingress, ConnectPoint egress) { | 129 | + private List<Intent> generateIntents(ConnectPoint ingress, ConnectPoint egress) { |
| 149 | - TrafficSelector.Builder selector = DefaultTrafficSelector.builder() | 130 | + TrafficSelector.Builder selectorBldr = DefaultTrafficSelector.builder() |
| 150 | .matchEthType(Ethernet.TYPE_IPV4); | 131 | .matchEthType(Ethernet.TYPE_IPV4); |
| 151 | TrafficTreatment treatment = DefaultTrafficTreatment.builder().build(); | 132 | TrafficTreatment treatment = DefaultTrafficTreatment.builder().build(); |
| 152 | 133 | ||
| 153 | - ArrayListMultimap<Integer, Intent> intents = ArrayListMultimap.create(); | 134 | + List<Intent> intents = Lists.newArrayList(); |
| 154 | - for (int app = 0; app < apps; app++) { | 135 | + for (int i = 0; i < count; i++) { |
| 155 | - for (int i = 1; i <= intentsPerApp; i++) { | 136 | + TrafficSelector selector = selectorBldr |
| 156 | - TrafficSelector s = selector | 137 | + .matchEthSrc(MacAddress.valueOf(i + keyOffset)) |
| 157 | - .matchEthSrc(MacAddress.valueOf(i + (app + appIdBase) * intentsPerApp)) | 138 | + .build(); |
| 158 | - .build(); | 139 | + intents.add(new PointToPointIntent(appId(), Key.of(i + keyOffset, appId()), |
| 159 | - intents.put(app, new PointToPointIntent(appId(app), s, treatment, | 140 | + selector, treatment, |
| 160 | - ingress, egress)); | 141 | + ingress, egress, |
| 142 | + Collections.emptyList())); | ||
| 161 | 143 | ||
| 162 | - } | ||
| 163 | } | 144 | } |
| 164 | return intents; | 145 | return intents; |
| 165 | } | 146 | } |
| 166 | 147 | ||
| 167 | - private void submitIntents(ArrayListMultimap<Integer, Intent> intents) { | 148 | + private void submitIntents(List<Intent> intents) { |
| 149 | + latch = new CountDownLatch(count); | ||
| 168 | start = System.currentTimeMillis(); | 150 | start = System.currentTimeMillis(); |
| 169 | - for (Integer app : intents.keySet()) { | 151 | + for (Intent intent : intents) { |
| 170 | - for (Intent intent : intents.get(app)) { | 152 | + if (add) { |
| 171 | - if (add) { | 153 | + service.submit(intent); |
| 172 | - service.submit(intent); | 154 | + } else { |
| 173 | - } else { | 155 | + service.withdraw(intent); |
| 174 | - service.withdraw(intent); | ||
| 175 | - } | ||
| 176 | } | 156 | } |
| 177 | } | 157 | } |
| 178 | 158 | ||
| ... | @@ -193,21 +173,6 @@ public class IntentPushTestCommand extends AbstractShellCommand | ... | @@ -193,21 +173,6 @@ public class IntentPushTestCommand extends AbstractShellCommand |
| 193 | print("Time to %s %d intents: %d ms", text, count, delta); | 173 | print("Time to %s %d intents: %d ms", text, count, delta); |
| 194 | } | 174 | } |
| 195 | 175 | ||
| 196 | - | ||
| 197 | - /** | ||
| 198 | - * Returns application ID for the CLI. | ||
| 199 | - * | ||
| 200 | - * @param id application id | ||
| 201 | - * @return command-line application identifier | ||
| 202 | - */ | ||
| 203 | - protected ApplicationId appId(Integer id) { | ||
| 204 | - ApplicationId appId = get(CoreService.class) | ||
| 205 | - .registerApplication("org.onosproject.cli-" | ||
| 206 | - + (id + appIdBase)); | ||
| 207 | - myAppIds.add(appId); | ||
| 208 | - return appId; | ||
| 209 | - } | ||
| 210 | - | ||
| 211 | /** | 176 | /** |
| 212 | * Extracts the port number portion of the ConnectPoint. | 177 | * Extracts the port number portion of the ConnectPoint. |
| 213 | * | 178 | * |
| ... | @@ -240,7 +205,7 @@ public class IntentPushTestCommand extends AbstractShellCommand | ... | @@ -240,7 +205,7 @@ public class IntentPushTestCommand extends AbstractShellCommand |
| 240 | = EnumSet.of(Type.INSTALL_REQ, Type.WITHDRAW_REQ); | 205 | = EnumSet.of(Type.INSTALL_REQ, Type.WITHDRAW_REQ); |
| 241 | @Override | 206 | @Override |
| 242 | public synchronized void event(IntentEvent event) { | 207 | public synchronized void event(IntentEvent event) { |
| 243 | - if (!myAppIds.contains(event.subject().appId())) { | 208 | + if (!appId().equals(event.subject().appId())) { |
| 244 | // not my event, ignore | 209 | // not my event, ignore |
| 245 | return; | 210 | return; |
| 246 | } | 211 | } | ... | ... |
-
Please register or login to post a comment