summaryrefslogtreecommitdiffstats
path: root/sonar-batch/src/main
diff options
context:
space:
mode:
authorDuarte Meneses <duarte.meneses@sonarsource.com>2015-09-30 15:34:39 +0200
committerDuarte Meneses <duarte.meneses@sonarsource.com>2015-10-01 14:34:34 +0200
commit40b5a0937811d860b97bbc57284a050c4b259b81 (patch)
tree02dcc17d13384c6f9ea95e48a46c57278f067ce8 /sonar-batch/src/main
parent943e74fd412f701247e1bea5aa3760418a10ec0d (diff)
downloadsonarqube-40b5a0937811d860b97bbc57284a050c4b259b81.tar.gz
sonarqube-40b5a0937811d860b97bbc57284a050c4b259b81.zip
SONAR-6879 Don't delete cache if update fails and change strategy
Diffstat (limited to 'sonar-batch/src/main')
-rw-r--r--sonar-batch/src/main/java/org/sonar/batch/cache/NonAssociatedCacheSynchronizer.java2
-rw-r--r--sonar-batch/src/main/java/org/sonar/batch/cache/ProjectCacheSynchronizer.java40
2 files changed, 33 insertions, 9 deletions
diff --git a/sonar-batch/src/main/java/org/sonar/batch/cache/NonAssociatedCacheSynchronizer.java b/sonar-batch/src/main/java/org/sonar/batch/cache/NonAssociatedCacheSynchronizer.java
index 2df946dc0ae..592ad0ed305 100644
--- a/sonar-batch/src/main/java/org/sonar/batch/cache/NonAssociatedCacheSynchronizer.java
+++ b/sonar-batch/src/main/java/org/sonar/batch/cache/NonAssociatedCacheSynchronizer.java
@@ -55,13 +55,11 @@ public class NonAssociatedCacheSynchronizer {
} else {
LOG.info("-- Found cache [{}], synchronizing data..", lastSync);
}
- cacheStatus.delete();
} else {
LOG.info("-- Cache not found, synchronizing data..");
}
loadData();
-
cacheStatus.save();
LOG.info("-- Succesfully synchronized cache");
}
diff --git a/sonar-batch/src/main/java/org/sonar/batch/cache/ProjectCacheSynchronizer.java b/sonar-batch/src/main/java/org/sonar/batch/cache/ProjectCacheSynchronizer.java
index fbba13fbbc8..c6366cfce6d 100644
--- a/sonar-batch/src/main/java/org/sonar/batch/cache/ProjectCacheSynchronizer.java
+++ b/sonar-batch/src/main/java/org/sonar/batch/cache/ProjectCacheSynchronizer.java
@@ -20,7 +20,6 @@
package org.sonar.batch.cache;
import org.sonar.batch.repository.ProjectRepositoriesLoader;
-
import org.sonarqube.ws.QualityProfiles.WsSearchResponse.QualityProfile;
import com.google.common.base.Function;
import org.apache.commons.lang.StringUtils;
@@ -36,6 +35,7 @@ import org.sonar.batch.repository.user.UserRepositoryLoader;
import org.sonar.batch.rule.ActiveRulesLoader;
import java.util.ArrayList;
+import java.util.Calendar;
import java.util.Collection;
import java.util.Date;
import java.util.HashSet;
@@ -63,22 +63,48 @@ public class ProjectCacheSynchronizer {
this.cacheStatus = cacheStatus;
}
+ private static boolean isToday(Date d) {
+ Calendar c1 = Calendar.getInstance();
+ Calendar c2 = Calendar.getInstance();
+ c2.setTime(d);
+
+ return c1.get(Calendar.DAY_OF_YEAR) == c2.get(Calendar.DAY_OF_YEAR) &&
+ c1.get(Calendar.YEAR) == c2.get(Calendar.YEAR);
+ }
+
+ private static boolean shouldUpdate(Date lastUpdate) {
+ return !isToday(lastUpdate);
+ }
+
public void load(String projectKey, boolean force) {
Date lastSync = cacheStatus.getSyncStatus();
+ boolean failOnError = true;
if (lastSync != null) {
- if (!force) {
+ if (force) {
+ LOG.info("-- Found project [{}] cache [{}], synchronizing data (forced)..", projectKey, lastSync);
+ } else if (shouldUpdate(lastSync)) {
+ LOG.info("-- Found project [{}] cache [{}], synchronizing data..", projectKey, lastSync);
+ failOnError = false;
+ } else {
LOG.info("Found project [{}] cache [{}]", projectKey, lastSync);
return;
- } else {
- LOG.info("-- Found project [{}] cache [{}], synchronizing data..", projectKey, lastSync);
}
- cacheStatus.delete();
} else {
LOG.info("-- Cache for project [{}] not found, synchronizing data..", projectKey);
}
- loadData(projectKey);
+ try {
+ loadData(projectKey);
+ } catch (Exception e) {
+ if (failOnError) {
+ throw e;
+ }
+
+ LOG.warn("-- Cache update for project [{}] failed, continuing from cache..", projectKey, e);
+ return;
+ }
+
saveStatus();
}
@@ -121,7 +147,7 @@ public class ProjectCacheSynchronizer {
issuesLoader.load(projectKey, consumer);
profiler.stopInfo();
- profiler.startInfo("Load user information (" + consumer.loginSet.size() + " users)");
+ profiler.startInfo("Load user information");
for (String login : consumer.loginSet) {
userRepository.load(login, null);
}