aboutsummaryrefslogtreecommitdiffstats
path: root/sonar-home
diff options
context:
space:
mode:
Diffstat (limited to 'sonar-home')
-rw-r--r--sonar-home/src/main/java/org/sonar/home/cache/PersistentCache.java13
-rw-r--r--sonar-home/src/main/java/org/sonar/home/cache/PersistentCacheBuilder.java8
-rw-r--r--sonar-home/src/test/java/org/sonar/home/cache/PersistentCacheTest.java23
3 files changed, 36 insertions, 8 deletions
diff --git a/sonar-home/src/main/java/org/sonar/home/cache/PersistentCache.java b/sonar-home/src/main/java/org/sonar/home/cache/PersistentCache.java
index 058075f83ed..640d5c29401 100644
--- a/sonar-home/src/main/java/org/sonar/home/cache/PersistentCache.java
+++ b/sonar-home/src/main/java/org/sonar/home/cache/PersistentCache.java
@@ -31,6 +31,7 @@ import java.nio.file.Path;
import java.nio.file.attribute.BasicFileAttributes;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
+
import javax.annotation.CheckForNull;
import javax.annotation.Nonnull;
import javax.annotation.Nullable;
@@ -50,11 +51,13 @@ public class PersistentCache {
// eviction strategy is to expire entries after modification once a time duration has elapsed
private final long defaultDurationToExpireMs;
private final Logger logger;
+ private final String version;
- public PersistentCache(Path baseDir, long defaultDurationToExpireMs, Logger logger) {
+ public PersistentCache(Path baseDir, long defaultDurationToExpireMs, Logger logger, String version) {
this.baseDir = baseDir;
this.defaultDurationToExpireMs = defaultDurationToExpireMs;
this.logger = logger;
+ this.version = version;
reconfigure();
logger.debug("cache: " + baseDir + ", default expiration time (ms): " + defaultDurationToExpireMs);
@@ -200,10 +203,14 @@ public class PersistentCache {
lockChannel = null;
}
- private static String getKey(String uri) {
+ private String getKey(String uri) {
try {
+ String key = uri;
+ if (version != null) {
+ key += version;
+ }
MessageDigest digest = MessageDigest.getInstance(DIGEST_ALGO);
- digest.update(uri.getBytes(StandardCharsets.UTF_8));
+ digest.update(key.getBytes(StandardCharsets.UTF_8));
return byteArrayToHex(digest.digest());
} catch (NoSuchAlgorithmException e) {
throw new IllegalStateException("Couldn't create hash", e);
diff --git a/sonar-home/src/main/java/org/sonar/home/cache/PersistentCacheBuilder.java b/sonar-home/src/main/java/org/sonar/home/cache/PersistentCacheBuilder.java
index f0fa1596917..055d2615ed6 100644
--- a/sonar-home/src/main/java/org/sonar/home/cache/PersistentCacheBuilder.java
+++ b/sonar-home/src/main/java/org/sonar/home/cache/PersistentCacheBuilder.java
@@ -30,6 +30,7 @@ public class PersistentCacheBuilder {
private Path cachePath;
private final Logger logger;
+ private String version;
public PersistentCacheBuilder(Logger logger) {
this.logger = logger;
@@ -40,7 +41,12 @@ public class PersistentCacheBuilder {
setSonarHome(findHome());
}
- return new PersistentCache(cachePath, DEFAULT_EXPIRE_DURATION, logger);
+ return new PersistentCache(cachePath, DEFAULT_EXPIRE_DURATION, logger, version);
+ }
+
+ public PersistentCacheBuilder setVersion(String version) {
+ this.version = version;
+ return this;
}
public PersistentCacheBuilder setSonarHome(@Nullable Path p) {
diff --git a/sonar-home/src/test/java/org/sonar/home/cache/PersistentCacheTest.java b/sonar-home/src/test/java/org/sonar/home/cache/PersistentCacheTest.java
index 62e105bf861..c327ff7c5eb 100644
--- a/sonar-home/src/test/java/org/sonar/home/cache/PersistentCacheTest.java
+++ b/sonar-home/src/test/java/org/sonar/home/cache/PersistentCacheTest.java
@@ -41,7 +41,7 @@ public class PersistentCacheTest {
@Before
public void setUp() {
- cache = new PersistentCache(tmp.getRoot().toPath(), Long.MAX_VALUE, mock(Logger.class));
+ cache = new PersistentCache(tmp.getRoot().toPath(), Long.MAX_VALUE, mock(Logger.class), null);
}
@Test
@@ -79,7 +79,7 @@ public class PersistentCacheTest {
@Test
public void testReconfigure() throws Exception {
- cache = new PersistentCache(tmp.getRoot().toPath(), Long.MAX_VALUE, mock(Logger.class));
+ cache = new PersistentCache(tmp.getRoot().toPath(), Long.MAX_VALUE, mock(Logger.class), null);
assertCacheHit(false);
assertCacheHit(true);
@@ -97,14 +97,29 @@ public class PersistentCacheTest {
@Test
public void testExpiration() throws Exception {
// negative time to make sure it is expired on the second call
- cache = new PersistentCache(tmp.getRoot().toPath(), -100, mock(Logger.class));
+ cache = new PersistentCache(tmp.getRoot().toPath(), -100, mock(Logger.class), null);
assertCacheHit(false);
assertCacheHit(false);
}
+
+ @Test
+ public void testDifferentServerVersions() throws Exception {
+ assertCacheHit(false);
+ assertCacheHit(true);
+
+ PersistentCache cache2 = new PersistentCache(tmp.getRoot().toPath(), Long.MAX_VALUE, mock(Logger.class), "5.2");
+ assertCacheHit(cache2, false);
+ assertCacheHit(cache2, true);
+
+ }
private void assertCacheHit(boolean hit) throws Exception {
+ assertCacheHit(cache, hit);
+ }
+
+ private void assertCacheHit(PersistentCache pCache, boolean hit) throws Exception {
CacheFillerString c = new CacheFillerString();
- assertThat(cache.getString(URI, c)).isEqualTo(VALUE);
+ assertThat(pCache.getString(URI, c)).isEqualTo(VALUE);
assertThat(c.wasCalled).isEqualTo(!hit);
}