Repository: ant-ivy Updated Branches: refs/heads/master 30696f6e1 -> 62724c69e
FIX: Removed fetchedSet field from ResolveEngine because this was causing issues when the same ResolveEngine instance was used by multiple threads. The fetchedSet is now passed around as parameter between the 'fetch' methods of this class. Project: http://git-wip-us.apache.org/repos/asf/ant-ivy/repo Commit: http://git-wip-us.apache.org/repos/asf/ant-ivy/commit/62724c69 Tree: http://git-wip-us.apache.org/repos/asf/ant-ivy/tree/62724c69 Diff: http://git-wip-us.apache.org/repos/asf/ant-ivy/diff/62724c69 Branch: refs/heads/master Commit: 62724c69eac26284c41fe4b9338b0a6b61259f94 Parents: 30696f6 Author: Maarten Coene <maart...@apache.org> Authored: Thu Jun 7 15:14:32 2018 +0200 Committer: Maarten Coene <maart...@apache.org> Committed: Thu Jun 7 15:14:32 2018 +0200 ---------------------------------------------------------------------- .../apache/ivy/core/resolve/ResolveEngine.java | 31 ++++++++------------ 1 file changed, 13 insertions(+), 18 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/ant-ivy/blob/62724c69/src/java/org/apache/ivy/core/resolve/ResolveEngine.java ---------------------------------------------------------------------- diff --git a/src/java/org/apache/ivy/core/resolve/ResolveEngine.java b/src/java/org/apache/ivy/core/resolve/ResolveEngine.java index 3d538ae..dd255a1 100644 --- a/src/java/org/apache/ivy/core/resolve/ResolveEngine.java +++ b/src/java/org/apache/ivy/core/resolve/ResolveEngine.java @@ -86,8 +86,6 @@ public class ResolveEngine { private SortEngine sortEngine; - private Set<String> fetchedSet = new HashSet<>(); - private DependencyResolver dictatorResolver; /** @@ -581,8 +579,6 @@ public class ResolveEngine { for (String conf : confs) { Message.verbose("resolving dependencies for configuration '" + conf + "'"); - // for each configuration we clear the cache of what's been fetched - fetchedSet.clear(); ConfigurationResolveReport confReport = null; if (report != null) { @@ -605,14 +601,13 @@ public class ResolveEngine { boolean fetched = false; while (!fetched) { try { - fetchDependencies(root, conf, false); + fetchDependencies(root, conf, new HashSet<String>(), false); fetched = true; } catch (RestartResolveProcess restart) { Message.verbose("===================================================="); Message.verbose("= RESTARTING RESOLVE PROCESS"); Message.verbose("= " + restart.getMessage()); Message.verbose("===================================================="); - fetchedSet.clear(); } } @@ -696,7 +691,7 @@ public class ResolveEngine { } } - private void fetchDependencies(VisitNode node, String conf, boolean shouldBePublic) { + private void fetchDependencies(VisitNode node, String conf, Set<String> fetchedSet, boolean shouldBePublic) { checkInterrupted(); long start = System.currentTimeMillis(); if (node.getParent() != null) { @@ -728,7 +723,7 @@ public class ResolveEngine { resolveConflict(node, conf); if (!node.isEvicted() && !node.isCircular()) { for (String rconf : node.getRealConfs(conf)) { - doFetchDependencies(node, rconf); + doFetchDependencies(node, rconf, fetchedSet); } } } else if (!node.hasProblem()) { @@ -736,7 +731,7 @@ public class ResolveEngine { // => we just have to update its dependencies data if (!node.isEvicted() && !node.isCircular()) { for (String rconf : node.getRealConfs(conf)) { - doFetchDependencies(node, rconf); + doFetchDependencies(node, rconf, fetchedSet); } } } @@ -752,7 +747,7 @@ public class ResolveEngine { } else { // the node has already been loaded, we must fetch its dependencies in the // required conf - fetchDependencies(node.gotoNode(selected), conf, true); + fetchDependencies(node.gotoNode(selected), conf, fetchedSet, true); } } } @@ -764,7 +759,7 @@ public class ResolveEngine { data.setCurrentVisitNode(parentVisitNode); } - private void doFetchDependencies(VisitNode node, String conf) { + private void doFetchDependencies(VisitNode node, String conf, Set<String> fetchedSet) { Configuration c = node.getConfiguration(conf); if (c == null) { if (!node.isConfRequiredByMergedUsageOnly(conf)) { @@ -791,16 +786,16 @@ public class ResolveEngine { node.updateConfsToFetch(Arrays.asList(extendedConfs)); } for (String extendedConf : extendedConfs) { - fetchDependencies(node, extendedConf, false); + fetchDependencies(node, extendedConf, fetchedSet, false); } // now we can actually resolve this configuration dependencies - if (!isDependenciesFetched(node.getNode(), conf) && node.isTransitive()) { + if (!isDependenciesFetched(node.getNode(), conf, fetchedSet) && node.isTransitive()) { for (VisitNode dep : node.getDependencies(conf)) { dep.useRealNode(); // the node may have been resolved to another real one while // resolving other deps for (String rconf : dep.getRequiredConfigurations(node, conf)) { - fetchDependencies(dep, rconf, true); + fetchDependencies(dep, rconf, fetchedSet, true); } if (!dep.isEvicted() && !dep.hasProblem()) { // if there are still confs to fetch (usually because they have @@ -811,11 +806,11 @@ public class ResolveEngine { // Should we keep two list of confs to fetch (private&public)? // I don't think, visibility is already checked, and a change in the // configuration between version might anyway have worse problems. - fetchDependencies(dep, fconf, false); + fetchDependencies(dep, fconf, fetchedSet, false); } } } - markDependenciesFetched(node.getNode(), conf); + markDependenciesFetched(node.getNode(), conf, fetchedSet); } // we have finished with this configuration, if it was the original requested conf // we can clean it now @@ -834,12 +829,12 @@ public class ResolveEngine { * configuration to check * @return true if we've already fetched this dependency */ - private boolean isDependenciesFetched(IvyNode node, String conf) { + private boolean isDependenciesFetched(IvyNode node, String conf, Set<String> fetchedSet) { String key = getDependenciesFetchedKey(node, conf); return fetchedSet.contains(key); } - private void markDependenciesFetched(IvyNode node, String conf) { + private void markDependenciesFetched(IvyNode node, String conf, Set<String> fetchedSet) { String key = getDependenciesFetchedKey(node, conf); fetchedSet.add(key); }