Add intents -p commmand to have some visibility into the pending map
Change-Id: Ic29460d8bf78f185bbfa426bc0aeef309b22cf7f
Showing
6 changed files
with
60 additions
and
3 deletions
| ... | @@ -56,6 +56,11 @@ public class IntentsListCommand extends AbstractShellCommand { | ... | @@ -56,6 +56,11 @@ public class IntentsListCommand extends AbstractShellCommand { |
| 56 | required = false, multiValued = false) | 56 | required = false, multiValued = false) |
| 57 | private boolean intentsSummary = false; | 57 | private boolean intentsSummary = false; |
| 58 | 58 | ||
| 59 | + @Option(name = "-p", aliases = "--pending", | ||
| 60 | + description = "Show inforamtion about pending intents", | ||
| 61 | + required = false, multiValued = false) | ||
| 62 | + private boolean pending = false; | ||
| 63 | + | ||
| 59 | @Override | 64 | @Override |
| 60 | protected void execute() { | 65 | protected void execute() { |
| 61 | IntentService service = get(IntentService.class); | 66 | IntentService service = get(IntentService.class); |
| ... | @@ -70,6 +75,14 @@ public class IntentsListCommand extends AbstractShellCommand { | ... | @@ -70,6 +75,14 @@ public class IntentsListCommand extends AbstractShellCommand { |
| 70 | intentSummaries.printSummary(); | 75 | intentSummaries.printSummary(); |
| 71 | } | 76 | } |
| 72 | return; | 77 | return; |
| 78 | + } else if (pending) { | ||
| 79 | + service.getPending().forEach(intent -> | ||
| 80 | + print("id=%s, key=%s, type=%s, appId=%s", | ||
| 81 | + intent.id(), intent.key(), | ||
| 82 | + intent.getClass().getSimpleName(), | ||
| 83 | + intent.appId().name()) | ||
| 84 | + ); | ||
| 85 | + return; | ||
| 73 | } | 86 | } |
| 74 | 87 | ||
| 75 | if (outputJson()) { | 88 | if (outputJson()) { | ... | ... |
| ... | @@ -16,6 +16,7 @@ | ... | @@ -16,6 +16,7 @@ |
| 16 | package org.onosproject.net.intent; | 16 | package org.onosproject.net.intent; |
| 17 | 17 | ||
| 18 | 18 | ||
| 19 | +import java.util.Collections; | ||
| 19 | import java.util.List; | 20 | import java.util.List; |
| 20 | 21 | ||
| 21 | /** | 22 | /** |
| ... | @@ -82,11 +83,21 @@ public interface IntentService { | ... | @@ -82,11 +83,21 @@ public interface IntentService { |
| 82 | */ | 83 | */ |
| 83 | List<Intent> getInstallableIntents(Key intentKey); | 84 | List<Intent> getInstallableIntents(Key intentKey); |
| 84 | 85 | ||
| 86 | + // TODO remove defaults | ||
| 85 | default boolean isLocal(Key intentKey) { | 87 | default boolean isLocal(Key intentKey) { |
| 86 | return true; | 88 | return true; |
| 87 | } | 89 | } |
| 88 | 90 | ||
| 89 | /** | 91 | /** |
| 92 | + * Returns the list of intent requests pending processing. | ||
| 93 | + * | ||
| 94 | + * @return intents pending processing | ||
| 95 | + */ | ||
| 96 | + default Iterable<Intent> getPending() { | ||
| 97 | + return Collections.emptyList(); | ||
| 98 | + } | ||
| 99 | + | ||
| 100 | + /** | ||
| 90 | * Adds the specified listener for intent events. | 101 | * Adds the specified listener for intent events. |
| 91 | * | 102 | * |
| 92 | * @param listener listener to be added | 103 | * @param listener listener to be added | ... | ... |
| ... | @@ -17,6 +17,7 @@ package org.onosproject.net.intent; | ... | @@ -17,6 +17,7 @@ package org.onosproject.net.intent; |
| 17 | 17 | ||
| 18 | import org.onosproject.store.Store; | 18 | import org.onosproject.store.Store; |
| 19 | 19 | ||
| 20 | +import java.util.Collections; | ||
| 20 | import java.util.List; | 21 | import java.util.List; |
| 21 | 22 | ||
| 22 | /** | 23 | /** |
| ... | @@ -113,4 +114,14 @@ public interface IntentStore extends Store<IntentEvent, IntentStoreDelegate> { | ... | @@ -113,4 +114,14 @@ public interface IntentStore extends Store<IntentEvent, IntentStoreDelegate> { |
| 113 | default boolean isMaster(Key intentKey) { //FIXME remove default when impl. | 114 | default boolean isMaster(Key intentKey) { //FIXME remove default when impl. |
| 114 | return true; | 115 | return true; |
| 115 | } | 116 | } |
| 117 | + | ||
| 118 | + /** | ||
| 119 | + * Returns the intent requests pending processing. | ||
| 120 | + * | ||
| 121 | + * @return pending intents | ||
| 122 | + */ | ||
| 123 | + // FIXME remove default | ||
| 124 | + default Iterable<Intent> getPending() { | ||
| 125 | + return Collections.emptyList(); | ||
| 126 | + } | ||
| 116 | } | 127 | } | ... | ... |
| ... | @@ -222,6 +222,11 @@ public class IntentManager | ... | @@ -222,6 +222,11 @@ public class IntentManager |
| 222 | return installerRegistry.getInstallers(); | 222 | return installerRegistry.getInstallers(); |
| 223 | } | 223 | } |
| 224 | 224 | ||
| 225 | + @Override | ||
| 226 | + public Iterable<Intent> getPending() { | ||
| 227 | + return store.getPending(); | ||
| 228 | + } | ||
| 229 | + | ||
| 225 | // Store delegate to re-post events emitted from the store. | 230 | // Store delegate to re-post events emitted from the store. |
| 226 | private class InternalStoreDelegate implements IntentStoreDelegate { | 231 | private class InternalStoreDelegate implements IntentStoreDelegate { |
| 227 | @Override | 232 | @Override | ... | ... |
| ... | @@ -15,6 +15,7 @@ | ... | @@ -15,6 +15,7 @@ |
| 15 | */ | 15 | */ |
| 16 | package org.onosproject.store.ecmap; | 16 | package org.onosproject.store.ecmap; |
| 17 | 17 | ||
| 18 | +import com.google.common.base.MoreObjects; | ||
| 18 | import org.onosproject.cluster.NodeId; | 19 | import org.onosproject.cluster.NodeId; |
| 19 | import org.onosproject.store.Timestamp; | 20 | import org.onosproject.store.Timestamp; |
| 20 | 21 | ||
| ... | @@ -80,4 +81,12 @@ public class AntiEntropyAdvertisement<K> { | ... | @@ -80,4 +81,12 @@ public class AntiEntropyAdvertisement<K> { |
| 80 | this.timestamps = null; | 81 | this.timestamps = null; |
| 81 | this.tombstones = null; | 82 | this.tombstones = null; |
| 82 | } | 83 | } |
| 84 | + | ||
| 85 | + @Override | ||
| 86 | + public String toString() { | ||
| 87 | + return MoreObjects.toStringHelper(getClass()) | ||
| 88 | + .add("timestampsSize", timestamps.size()) | ||
| 89 | + .add("tombstonesSize", tombstones.size()) | ||
| 90 | + .toString(); | ||
| 91 | + } | ||
| 83 | } | 92 | } | ... | ... |
| ... | @@ -32,12 +32,12 @@ import org.onosproject.net.intent.IntentStoreDelegate; | ... | @@ -32,12 +32,12 @@ import org.onosproject.net.intent.IntentStoreDelegate; |
| 32 | import org.onosproject.net.intent.Key; | 32 | import org.onosproject.net.intent.Key; |
| 33 | import org.onosproject.store.AbstractStore; | 33 | import org.onosproject.store.AbstractStore; |
| 34 | import org.onosproject.store.cluster.messaging.ClusterCommunicationService; | 34 | import org.onosproject.store.cluster.messaging.ClusterCommunicationService; |
| 35 | -import org.onosproject.store.impl.MultiValuedTimestamp; | ||
| 36 | -import org.onosproject.store.impl.SystemClockTimestamp; | ||
| 37 | import org.onosproject.store.ecmap.EventuallyConsistentMap; | 35 | import org.onosproject.store.ecmap.EventuallyConsistentMap; |
| 38 | import org.onosproject.store.ecmap.EventuallyConsistentMapEvent; | 36 | import org.onosproject.store.ecmap.EventuallyConsistentMapEvent; |
| 39 | import org.onosproject.store.ecmap.EventuallyConsistentMapImpl; | 37 | import org.onosproject.store.ecmap.EventuallyConsistentMapImpl; |
| 40 | import org.onosproject.store.ecmap.EventuallyConsistentMapListener; | 38 | import org.onosproject.store.ecmap.EventuallyConsistentMapListener; |
| 39 | +import org.onosproject.store.impl.MultiValuedTimestamp; | ||
| 40 | +import org.onosproject.store.impl.SystemClockTimestamp; | ||
| 41 | import org.onosproject.store.serializers.KryoNamespaces; | 41 | import org.onosproject.store.serializers.KryoNamespaces; |
| 42 | import org.slf4j.Logger; | 42 | import org.slf4j.Logger; |
| 43 | 43 | ||
| ... | @@ -237,7 +237,7 @@ public class GossipIntentStore | ... | @@ -237,7 +237,7 @@ public class GossipIntentStore |
| 237 | // if current.put succeeded | 237 | // if current.put succeeded |
| 238 | pending.remove(newData.key(), newData); | 238 | pending.remove(newData.key(), newData); |
| 239 | } else { | 239 | } else { |
| 240 | - log.debug("not writing update: {}", newData); | 240 | + log.debug("not writing update: current {}, new {}", currentData, newData); |
| 241 | } | 241 | } |
| 242 | /*try { | 242 | /*try { |
| 243 | notifyDelegate(IntentEvent.getEvent(newData)); | 243 | notifyDelegate(IntentEvent.getEvent(newData)); |
| ... | @@ -280,6 +280,13 @@ public class GossipIntentStore | ... | @@ -280,6 +280,13 @@ public class GossipIntentStore |
| 280 | return partitionService.isMine(intentKey); | 280 | return partitionService.isMine(intentKey); |
| 281 | } | 281 | } |
| 282 | 282 | ||
| 283 | + @Override | ||
| 284 | + public Iterable<Intent> getPending() { | ||
| 285 | + return pending.values().stream() | ||
| 286 | + .map(IntentData::intent) | ||
| 287 | + .collect(Collectors.toList()); | ||
| 288 | + } | ||
| 289 | + | ||
| 283 | private void notifyDelegateIfNotNull(IntentEvent event) { | 290 | private void notifyDelegateIfNotNull(IntentEvent event) { |
| 284 | if (event != null) { | 291 | if (event != null) { |
| 285 | notifyDelegate(event); | 292 | notifyDelegate(event); |
| ... | @@ -310,6 +317,7 @@ public class GossipIntentStore | ... | @@ -310,6 +317,7 @@ public class GossipIntentStore |
| 310 | // some work. | 317 | // some work. |
| 311 | if (isMaster(event.value().intent().key())) { | 318 | if (isMaster(event.value().intent().key())) { |
| 312 | if (delegate != null) { | 319 | if (delegate != null) { |
| 320 | + log.debug("processing {}", event.key()); | ||
| 313 | delegate.process(copyData(event.value())); | 321 | delegate.process(copyData(event.value())); |
| 314 | } | 322 | } |
| 315 | } | 323 | } | ... | ... |
-
Please register or login to post a comment