You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@karaf.apache.org by jb...@apache.org on 2017/03/27 06:30:51 UTC
karaf git commit: [KARAF-4701] Forcing deterministic heuristic of
capbillities comparison for Subsystem Resolver
Repository: karaf
Updated Branches:
refs/heads/karaf-4.0.x 49442c019 -> 12a18ef3b
[KARAF-4701] Forcing deterministic heuristic of capbillities comparison for Subsystem Resolver
Project: http://git-wip-us.apache.org/repos/asf/karaf/repo
Commit: http://git-wip-us.apache.org/repos/asf/karaf/commit/12a18ef3
Tree: http://git-wip-us.apache.org/repos/asf/karaf/tree/12a18ef3
Diff: http://git-wip-us.apache.org/repos/asf/karaf/diff/12a18ef3
Branch: refs/heads/karaf-4.0.x
Commit: 12a18ef3b3b8f7993859708f5da9906ef99f925b
Parents: 49442c0
Author: Vladimir Konkov <vk...@citc.ru>
Authored: Fri Mar 24 12:50:23 2017 +0300
Committer: Jean-Baptiste Onofr� <jb...@apache.org>
Committed: Mon Mar 27 08:30:44 2017 +0200
----------------------------------------------------------------------
.../internal/region/CandidateComparator.java | 20 ++++++++++++++++++--
1 file changed, 18 insertions(+), 2 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/karaf/blob/12a18ef3/features/core/src/main/java/org/apache/karaf/features/internal/region/CandidateComparator.java
----------------------------------------------------------------------
diff --git a/features/core/src/main/java/org/apache/karaf/features/internal/region/CandidateComparator.java b/features/core/src/main/java/org/apache/karaf/features/internal/region/CandidateComparator.java
index a3f6c51..8f53058 100644
--- a/features/core/src/main/java/org/apache/karaf/features/internal/region/CandidateComparator.java
+++ b/features/core/src/main/java/org/apache/karaf/features/internal/region/CandidateComparator.java
@@ -28,6 +28,7 @@ import org.osgi.framework.namespace.IdentityNamespace;
import org.osgi.framework.namespace.PackageNamespace;
import org.osgi.framework.wiring.BundleCapability;
import org.osgi.resource.Capability;
+import org.osgi.resource.Requirement;
import org.osgi.resource.Resource;
public class CandidateComparator implements Comparator<Capability> {
@@ -79,9 +80,24 @@ public class CandidateComparator implements Comparator<Capability> {
}
if (c == 0) {
// We just want to have a deterministic heuristic
- String n1 = ResolverUtil.getSymbolicName(cap1.getResource());
- String n2 = ResolverUtil.getSymbolicName(cap2.getResource());
+ final Resource resource1 = cap1.getResource();
+ final Resource resource2 = cap2.getResource();
+ String n1 = ResolverUtil.getSymbolicName(resource1);
+ String n2 = ResolverUtil.getSymbolicName(resource2);
c = n1.compareTo(n2);
+ // Resources looks like identical, but it required by different features/subsystems/regions
+ // so use this difference for deterministic heuristic
+ if (c == 0) {
+ final List<Requirement> reqs1 = resource1.getRequirements(IdentityNamespace.IDENTITY_NAMESPACE);
+ final List<Requirement> reqs2 = resource2.getRequirements(IdentityNamespace.IDENTITY_NAMESPACE);
+ if (!reqs1.isEmpty() && !reqs2.isEmpty()) {
+ Requirement identityReq1 = reqs1.get(0);
+ Requirement identityReq2 = reqs2.get(0);
+ Object identity1 = identityReq1.getAttributes().get(IdentityNamespace.IDENTITY_NAMESPACE);
+ Object identity2 = identityReq2.getAttributes().get(IdentityNamespace.IDENTITY_NAMESPACE);
+ c = String.valueOf(identity1).compareTo(String.valueOf(identity2));
+ }
+ }
}
return c;
}