Updating IntentCleanup to check for stalled *_REQ and *ING intents.
Change-Id: Ibe06ee99463bb8230acf9751da4fb1012859b0ea
diff --git a/core/store/dist/src/main/java/org/onosproject/store/impl/WallClockTimestamp.java b/core/store/dist/src/main/java/org/onosproject/store/impl/WallClockTimestamp.java
index a158928..e7efb29 100644
--- a/core/store/dist/src/main/java/org/onosproject/store/impl/WallClockTimestamp.java
+++ b/core/store/dist/src/main/java/org/onosproject/store/impl/WallClockTimestamp.java
@@ -36,6 +36,10 @@
unixTimestamp = System.currentTimeMillis();
}
+ public WallClockTimestamp(long timestamp) {
+ unixTimestamp = timestamp;
+ }
+
@Override
public int compareTo(Timestamp o) {
checkArgument(o instanceof WallClockTimestamp,
diff --git a/core/store/dist/src/main/java/org/onosproject/store/intent/impl/GossipIntentStore.java b/core/store/dist/src/main/java/org/onosproject/store/intent/impl/GossipIntentStore.java
index 4f0ad66..7de2d17 100644
--- a/core/store/dist/src/main/java/org/onosproject/store/intent/impl/GossipIntentStore.java
+++ b/core/store/dist/src/main/java/org/onosproject/store/intent/impl/GossipIntentStore.java
@@ -132,10 +132,13 @@
}
@Override
- public Iterable<IntentData> getIntentData(boolean localOnly) {
- if (localOnly) {
+ public Iterable<IntentData> getIntentData(boolean localOnly, long olderThan) {
+ if (localOnly || olderThan > 0) {
+ long now = System.currentTimeMillis();
+ final WallClockTimestamp time = new WallClockTimestamp(now - olderThan);
return currentMap.values().stream()
- .filter(data -> isMaster(data.key()))
+ .filter(data -> data.version().isOlderThan(time) &&
+ (!localOnly || isMaster(data.key())))
.collect(Collectors.toList());
}
return currentMap.values();
@@ -261,6 +264,21 @@
.collect(Collectors.toList());
}
+ @Override
+ public Iterable<IntentData> getPendingData() {
+ return pendingMap.values();
+ }
+
+ @Override
+ public Iterable<IntentData> getPendingData(boolean localOnly, long olderThan) {
+ long now = System.currentTimeMillis();
+ final WallClockTimestamp time = new WallClockTimestamp(now - olderThan);
+ return pendingMap.values().stream()
+ .filter(data -> data.version().isOlderThan(time) &&
+ (!localOnly || isMaster(data.key())))
+ .collect(Collectors.toList());
+ }
+
private void notifyDelegateIfNotNull(IntentEvent event) {
if (event != null) {
notifyDelegate(event);
diff --git a/core/store/trivial/src/main/java/org/onosproject/store/trivial/impl/SimpleIntentStore.java b/core/store/trivial/src/main/java/org/onosproject/store/trivial/impl/SimpleIntentStore.java
index 186fdd9..72a5dce 100644
--- a/core/store/trivial/src/main/java/org/onosproject/store/trivial/impl/SimpleIntentStore.java
+++ b/core/store/trivial/src/main/java/org/onosproject/store/trivial/impl/SimpleIntentStore.java
@@ -36,7 +36,7 @@
import java.util.stream.Collectors;
import static com.google.common.base.Preconditions.checkNotNull;
-import static org.onosproject.net.intent.IntentState.*;
+import static org.onosproject.net.intent.IntentState.PURGE_REQ;
import static org.slf4j.LoggerFactory.getLogger;
/**
@@ -76,11 +76,15 @@
}
@Override
- public Iterable<IntentData> getIntentData(boolean localOnly) {
- if (localOnly) {
- return current.values().stream()
- .filter(data -> isMaster(data.key()))
+ public Iterable<IntentData> getIntentData(boolean localOnly, long olderThan) {
+ if (localOnly || olderThan > 0) {
+ long older = System.nanoTime() - olderThan * 1_000_000; //convert ms to ns
+ final SystemClockTimestamp time = new SystemClockTimestamp(older);
+ return pending.values().stream()
+ .filter(data -> data.version().isOlderThan(time) &&
+ (!localOnly || isMaster(data.key())))
.collect(Collectors.toList());
+
}
return Lists.newArrayList(current.values());
}
@@ -191,4 +195,19 @@
.map(IntentData::intent)
.collect(Collectors.toList());
}
+
+ @Override
+ public Iterable<IntentData> getPendingData() {
+ return Lists.newArrayList(pending.values());
+ }
+
+ @Override
+ public Iterable<IntentData> getPendingData(boolean localOnly, long olderThan) {
+ long older = System.nanoTime() - olderThan * 1_000_000; //convert ms to ns
+ final SystemClockTimestamp time = new SystemClockTimestamp(older);
+ return pending.values().stream()
+ .filter(data -> data.version().isOlderThan(time) &&
+ (!localOnly || isMaster(data.key())))
+ .collect(Collectors.toList());
+ }
}
diff --git a/core/store/trivial/src/main/java/org/onosproject/store/trivial/impl/SystemClockTimestamp.java b/core/store/trivial/src/main/java/org/onosproject/store/trivial/impl/SystemClockTimestamp.java
index d79797e..1e98a7a 100644
--- a/core/store/trivial/src/main/java/org/onosproject/store/trivial/impl/SystemClockTimestamp.java
+++ b/core/store/trivial/src/main/java/org/onosproject/store/trivial/impl/SystemClockTimestamp.java
@@ -29,10 +29,14 @@
*/
public class SystemClockTimestamp implements Timestamp {
- private final long unixTimestamp;
+ private final long nanoTimestamp;
public SystemClockTimestamp() {
- unixTimestamp = System.nanoTime();
+ nanoTimestamp = System.nanoTime();
+ }
+
+ public SystemClockTimestamp(long timestamp) {
+ nanoTimestamp = timestamp;
}
@Override
@@ -42,12 +46,12 @@
SystemClockTimestamp that = (SystemClockTimestamp) o;
return ComparisonChain.start()
- .compare(this.unixTimestamp, that.unixTimestamp)
+ .compare(this.nanoTimestamp, that.nanoTimestamp)
.result();
}
@Override
public int hashCode() {
- return Objects.hash(unixTimestamp);
+ return Objects.hash(nanoTimestamp);
}
@Override
@@ -59,17 +63,21 @@
return false;
}
SystemClockTimestamp that = (SystemClockTimestamp) obj;
- return Objects.equals(this.unixTimestamp, that.unixTimestamp);
+ return Objects.equals(this.nanoTimestamp, that.nanoTimestamp);
}
@Override
public String toString() {
return MoreObjects.toStringHelper(getClass())
- .add("unixTimestamp", unixTimestamp)
+ .add("nanoTimestamp", nanoTimestamp)
.toString();
}
+ public long nanoTimestamp() {
+ return nanoTimestamp;
+ }
+
public long systemTimestamp() {
- return unixTimestamp;
+ return nanoTimestamp / 1_000_000; // convert ns to ms
}
}