FIX: ModuleDescriptorMemoryCache didn't detect outdated entries when Ivy file was...
authorMaarten Coene <maartenc@apache.org>
Fri, 24 Aug 2018 06:38:31 +0000 (08:38 +0200)
committerMaarten Coene <maartenc@apache.org>
Fri, 24 Aug 2018 06:38:31 +0000 (08:38 +0200)
asciidoc/release-notes.adoc
src/java/org/apache/ivy/core/cache/ModuleDescriptorMemoryCache.java

index ecfc530..cc53bb3 100644 (file)
@@ -84,6 +84,7 @@ For details about the following changes, check our JIRA install at link:https://
 - FIX: Implement dependency configuration negation (jira:IVY-982[] jira:IVY-1547[]) (Thanks to Arseny Aprelev)
 - FIX: Don't throw a CircularDependencyException when parsing an import scoped dependency in dependencyManagement section of a pom (jira:IVY-1588[])
 - FIX: Respect exclude regardless of resolution order (jira:IVY-1486[]) (thanks to David Turner)
+- FIX: ModuleDescriptorMemoryCache didn't detect outdated entries when Ivy file was updated in the cache by another process
 
 - IMPROVEMENT: Throw an IllegalStateException when retrieving the resolutionCacheRoot on the DefaultResolutionCacheManager if the basedir (or IvySettings) is not set (jira:IVY-1482[])
 - IMPROVEMENT: Optimization: limit the revision numbers scanned if revision prefix is specified (Thanks to Ernestas Vaiciukevi&ccaron;ius)
index fb4338c..c349f2a 100644 (file)
@@ -79,7 +79,7 @@ class ModuleDescriptorMemoryCache {
         synchronized (valueMap) {
             CacheEntry entry = valueMap.get(ivyFile);
             if (entry != null) {
-                if (entry.isStale(validated, ivySettings)) {
+                if (entry.isStale(ivyFile, validated, ivySettings)) {
                     Message.debug("Entry is found in the ModuleDescriptorCache but entry should be "
                             + "reevaluated : " + ivyFile);
                     valueMap.remove(ivyFile);
@@ -129,8 +129,9 @@ class ModuleDescriptorMemoryCache {
             this.parserSettingsMonitor = parserSettingsMonitor;
         }
 
-        boolean isStale(boolean validated, ParserSettings newParserSettings) {
+        boolean isStale(File ivyFile, boolean validated, ParserSettings newParserSettings) {
             return (validated && !this.validated)
+                    || md.getLastModified() != ivyFile.lastModified()
                     || parserSettingsMonitor.hasChanged(newParserSettings);
         }
     }