brooklyn-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From aledsage <...@git.apache.org>
Subject [GitHub] brooklyn-server pull request #868: allow types from different bundles if equ...
Date Thu, 26 Oct 2017 10:18:35 GMT
Github user aledsage commented on a diff in the pull request:

    https://github.com/apache/brooklyn-server/pull/868#discussion_r147092903
  
    --- Diff: core/src/main/java/org/apache/brooklyn/core/typereg/BasicBrooklynTypeRegistry.java
---
    @@ -74,28 +92,40 @@ public BasicBrooklynTypeRegistry(ManagementContext mgmt) {
         }
         
         private Iterable<RegisteredType> getAllWithoutCatalog(Predicate<? super
RegisteredType> filter) {
    -        // TODO thread safety
             // TODO optimisation? make indexes and look up?
    -        return Iterables.filter(localRegisteredTypes.values(), filter);
    +        return Locks.withLock(localRegistryLock.readLock(), 
    +            () -> localRegisteredTypesAndContainingBundles.values().stream().
    +                flatMap(m -> m.values().stream()).filter(filter::apply).collect(Collectors.toList())
);
         }
     
         private Maybe<RegisteredType> getExactWithoutLegacyCatalog(String symbolicName,
String version, RegisteredTypeLoadingContext constraint) {
    -        // TODO look in any nested/private registries
    -        RegisteredType item = localRegisteredTypes.get(symbolicName+":"+version);
    +        RegisteredType item = Locks.withLock(localRegistryLock.readLock(), 
    +            ()-> getBestValue(localRegisteredTypesAndContainingBundles.get(symbolicName+":"+version))
);
             return RegisteredTypes.tryValidate(item, constraint);
         }
     
    +    private RegisteredType getBestValue(Map<String, RegisteredType> m) {
    +        if (m==null) return null;
    +        if (m.isEmpty()) return null;
    +        if (m.size()==1) return m.values().iterator().next();
    +        // get the highest version of first alphabetical - to have a canonical order
    +        return m.get( Ordering.from(VersionedNameStringComparator.INSTANCE).max(m.keySet())
);
    +    }
    +
         @SuppressWarnings("deprecation")
         @Override
         public Iterable<RegisteredType> getMatching(Predicate<? super RegisteredType>
filter) {
    --- End diff --
    
    Worth noting that the semantics of this method have changed, and same for `getAll`: you
might now get multiple `RegisteredType`s with the same name:version. Normally those will be
identical (just coming from different bundles), but it may not be guaranteed that they are
identical!


---

Mime
View raw message