Initial implementation of CORRUPT state (ONOS-1060)
- Added CORRUPT state to state machine and event type
- Simplified phases using new request field
- Improved null-safety by using Optionals
Change-Id: I1d576b719765b5664aef73477ee04593e8acc4fd
diff --git a/core/net/src/main/java/org/onosproject/net/intent/impl/phase/WithdrawRequest.java b/core/net/src/main/java/org/onosproject/net/intent/impl/phase/WithdrawRequest.java
index 004bb33..73a6510 100644
--- a/core/net/src/main/java/org/onosproject/net/intent/impl/phase/WithdrawRequest.java
+++ b/core/net/src/main/java/org/onosproject/net/intent/impl/phase/WithdrawRequest.java
@@ -29,7 +29,7 @@
private final IntentProcessor processor;
private final IntentData data;
- private final IntentData stored;
+ private final Optional<IntentData> stored;
/**
* Creates a withdraw request phase.
@@ -39,7 +39,7 @@
* @param intentData intent data to be processed
* @param stored intent data stored in the store
*/
- WithdrawRequest(IntentProcessor processor, IntentData intentData, IntentData stored) {
+ WithdrawRequest(IntentProcessor processor, IntentData intentData, Optional<IntentData> stored) {
this.processor = checkNotNull(processor);
this.data = checkNotNull(intentData);
this.stored = checkNotNull(stored);
@@ -50,7 +50,18 @@
//TODO perhaps we want to validate that the pending and current are the
// same version i.e. they are the same
// Note: this call is not just the symmetric version of submit
- data.setInstallables(stored.installables());
+
+ if (!stored.isPresent() || stored.get().installables().isEmpty()) {
+ switch (data.request()) {
+ case INSTALL_REQ:
+ return Optional.of(new Failed(data));
+ case WITHDRAW_REQ:
+ default: //TODO "default" case should not happen
+ return Optional.of(new Withdrawn(data));
+ }
+ }
+
+ data.setInstallables(stored.get().installables());
return Optional.of(new Withdrawing(processor, data));
}
}