Remove NextId from internal stores when the NextObj fails

Change-Id: I105d32ea3a2278254edd8746d41552c2c4a699fa
diff --git a/apps/segmentrouting/app/src/main/java/org/onosproject/segmentrouting/xconnect/impl/XconnectManager.java b/apps/segmentrouting/app/src/main/java/org/onosproject/segmentrouting/xconnect/impl/XconnectManager.java
index ab4ec53..e571811 100644
--- a/apps/segmentrouting/app/src/main/java/org/onosproject/segmentrouting/xconnect/impl/XconnectManager.java
+++ b/apps/segmentrouting/app/src/main/java/org/onosproject/segmentrouting/xconnect/impl/XconnectManager.java
@@ -327,9 +327,10 @@
                     // To serialize this with kryo
                     (Serializable & Consumer<Objective>) (objective) ->
                             log.debug("XConnect NextObj for {} added", key),
-                    (Serializable & BiConsumer<Objective, ObjectiveError>) (objective, error) ->
-                            log.warn("Failed to add XConnect NextObj for {}: {}", key, error)
-            );
+                    (Serializable & BiConsumer<Objective, ObjectiveError>) (objective, error) -> {
+                        log.warn("Failed to add XConnect NextObj for {}: {}", key, error);
+                        srService.invalidateNextObj(objective.id());
+                    });
             nextObj = nextObjBuilder.add(nextContext);
             flowObjectiveService.next(key.deviceId(), nextObj);
             xconnectNextObjStore.put(key, nextObj);
@@ -434,10 +435,10 @@
                 if (nextFuture != null) {
                     nextFuture.complete(error);
                 }
+                srService.invalidateNextObj(objective.id());
             }
         };
-        flowObjectiveService.next(key.deviceId(),
-                (NextObjective) nextObj.copy().remove(context));
+        flowObjectiveService.next(key.deviceId(), nextObj.copy().remove(context));
         xconnectNextObjStore.remove(key);
     }