Make resource retrieval more efficient when specifing resource type
This resolves ONOS-4666
Change-Id: I9d09b60531ca48b36fc20f43498cda62f1badb8b
diff --git a/core/net/src/main/java/org/onosproject/net/resource/impl/ResourceManager.java b/core/net/src/main/java/org/onosproject/net/resource/impl/ResourceManager.java
index 60a8516..52ea71d 100644
--- a/core/net/src/main/java/org/onosproject/net/resource/impl/ResourceManager.java
+++ b/core/net/src/main/java/org/onosproject/net/resource/impl/ResourceManager.java
@@ -165,9 +165,9 @@
checkNotNull(parent);
checkNotNull(cls);
- // naive implementation
- return getAvailableResources(parent).stream()
- .filter(resource -> resource.isTypeOf(cls))
+ return store.getChildResources(parent, cls).stream()
+ // We access store twice in this method, then the store may be updated by others
+ .filter(store::isAvailable)
.collect(Collectors.toSet());
}
@@ -177,9 +177,11 @@
checkNotNull(parent);
checkNotNull(cls);
- // naive implementation
- return getAvailableResources(parent).stream()
- .flatMap(resource -> Tools.stream(resource.valueAs(cls)))
+ return store.getChildResources(parent, cls).stream()
+ // We access store twice in this method, then the store may be updated by others
+ .filter(store::isAvailable)
+ .map(x -> x.valueAs(cls))
+ .flatMap(Tools::stream)
.collect(Collectors.toSet());
}