Enhancing GroupChecker for faster processing of group updates
Change-Id: I9344ccf0ffbc9cff206318a627f5d97df1091677
diff --git a/drivers/default/src/main/java/org/onosproject/driver/pipeline/ofdpa/OfdpaGroupHandlerUtility.java b/drivers/default/src/main/java/org/onosproject/driver/pipeline/ofdpa/OfdpaGroupHandlerUtility.java
index 229655d..016299c 100644
--- a/drivers/default/src/main/java/org/onosproject/driver/pipeline/ofdpa/OfdpaGroupHandlerUtility.java
+++ b/drivers/default/src/main/java/org/onosproject/driver/pipeline/ofdpa/OfdpaGroupHandlerUtility.java
@@ -263,7 +263,6 @@
return indices;
}
-
/**
* Get indices to remove comparing next group with next objective.
*
@@ -635,22 +634,53 @@
// GroupChecker execution needs to be protected
// from unhandled exceptions
try {
- if (groupHandler.pendingGroups().size() != 0) {
- log.debug("pending groups being checked: {}", groupHandler.pendingGroups().asMap().keySet());
+ if (groupHandler.pendingGroups.size() != 0) {
+ log.debug("pending groups being checked: {}",
+ groupHandler.pendingGroups.asMap().keySet());
}
- if (groupHandler.pendingAddNextObjectives().size() != 0) {
+ if (groupHandler.pendingAddNextObjectives.size() != 0) {
log.debug("pending add-next-obj being checked: {}",
- groupHandler.pendingAddNextObjectives().asMap().keySet());
+ groupHandler.pendingAddNextObjectives.asMap().keySet());
}
- Set<GroupKey> keys = groupHandler.pendingGroups().asMap().keySet().stream()
- .filter(key -> groupHandler.groupService.getGroup(groupHandler.deviceId, key) != null)
+ if (groupHandler.pendingRemoveNextObjectives.size() != 0) {
+ log.debug("pending remove-next-obj being checked: {}",
+ groupHandler.pendingRemoveNextObjectives.asMap().values());
+ }
+ if (groupHandler.pendingUpdateNextObjectives.size() != 0) {
+ log.debug("pending update-next-obj being checked: {}",
+ groupHandler.pendingUpdateNextObjectives.keySet());
+ }
+
+ Set<GroupKey> keys = groupHandler.pendingGroups.asMap().keySet()
+ .stream()
+ .filter(key -> groupHandler.groupService
+ .getGroup(groupHandler.deviceId, key) != null)
.collect(Collectors.toSet());
- Set<GroupKey> otherkeys = groupHandler.pendingAddNextObjectives().asMap().keySet().stream()
- .filter(otherkey -> groupHandler.groupService.getGroup(groupHandler.deviceId, otherkey) != null)
+ Set<GroupKey> otherkeys = groupHandler.pendingAddNextObjectives
+ .asMap().keySet().stream()
+ .filter(otherkey -> groupHandler.groupService
+ .getGroup(groupHandler.deviceId, otherkey) != null)
.collect(Collectors.toSet());
keys.addAll(otherkeys);
-
keys.forEach(key -> groupHandler.processPendingAddGroupsOrNextObjs(key, false));
+
+ keys = groupHandler.pendingUpdateNextObjectives.keySet()
+ .stream()
+ .filter(key -> groupHandler.groupService
+ .getGroup(groupHandler.deviceId, key) != null)
+ .collect(Collectors.toSet());
+ keys.forEach(key -> groupHandler.processPendingUpdateNextObjs(key));
+
+ Set<GroupKey> k = Sets.newHashSet();
+ groupHandler.pendingRemoveNextObjectives
+ .asMap().values().stream().forEach(keylist -> {
+ k.addAll(keylist.stream()
+ .filter(key -> groupHandler.groupService
+ .getGroup(groupHandler.deviceId, key) == null)
+ .collect(Collectors.toSet()));
+ });
+ k.forEach(key -> groupHandler.processPendingRemoveNextObjs(key));
+
} catch (Exception exception) {
// Just log. It is safe for now.
log.warn("Uncaught exception is detected: {}", exception.getMessage());