NPE protection for purge requests (ONOS-1463)
Change-Id: I02732ed83aaaf5c760fdb96899696177415ebd23
diff --git a/core/net/src/main/java/org/onosproject/net/intent/impl/phase/IntentProcessPhase.java b/core/net/src/main/java/org/onosproject/net/intent/impl/phase/IntentProcessPhase.java
index 1ed42fd..399a307 100644
--- a/core/net/src/main/java/org/onosproject/net/intent/impl/phase/IntentProcessPhase.java
+++ b/core/net/src/main/java/org/onosproject/net/intent/impl/phase/IntentProcessPhase.java
@@ -50,7 +50,7 @@
case WITHDRAW_REQ:
return new WithdrawRequest(processor, data, Optional.ofNullable(current));
case PURGE_REQ:
- return new PurgeRequest(data, current);
+ return new PurgeRequest(data, Optional.ofNullable(current));
default:
// illegal state
return new Failed(data);
diff --git a/core/net/src/main/java/org/onosproject/net/intent/impl/phase/PurgeRequest.java b/core/net/src/main/java/org/onosproject/net/intent/impl/phase/PurgeRequest.java
index b04e05e..69126df 100644
--- a/core/net/src/main/java/org/onosproject/net/intent/impl/phase/PurgeRequest.java
+++ b/core/net/src/main/java/org/onosproject/net/intent/impl/phase/PurgeRequest.java
@@ -19,6 +19,8 @@
import org.onosproject.net.intent.IntentState;
import org.slf4j.Logger;
+import java.util.Optional;
+
import static com.google.common.base.Preconditions.checkNotNull;
import static org.slf4j.LoggerFactory.getLogger;
@@ -32,29 +34,37 @@
private static final Logger log = getLogger(PurgeRequest.class);
- private final IntentData pending;
- private final IntentData current;
+ private final IntentData data;
+ private final Optional<IntentData> stored;
- PurgeRequest(IntentData intentData, IntentData current) {
- this.pending = checkNotNull(intentData);
- this.current = checkNotNull(current);
+ PurgeRequest(IntentData intentData, Optional<IntentData> stored) {
+ this.data = checkNotNull(intentData);
+ this.stored = checkNotNull(stored);
}
private boolean shouldAcceptPurge() {
- if (current.state() == IntentState.WITHDRAWN
- || current.state() == IntentState.FAILED) {
+ if (!stored.isPresent()) {
+ log.info("Purge for intent {}, but intent is not present",
+ data.key());
return true;
}
- log.info("Purge for intent {} is rejected", pending.key());
+
+ IntentData storedData = stored.get();
+ if (storedData.state() == IntentState.WITHDRAWN
+ || storedData.state() == IntentState.FAILED) {
+ return true;
+ }
+ log.info("Purge for intent {} is rejected because intent state is {}",
+ data.key(), storedData.state());
return false;
}
@Override
public IntentData data() {
if (shouldAcceptPurge()) {
- return pending;
+ return data;
} else {
- return current;
+ return stored.get();
}
}
}