From 29ef18998dde0782c29ed71a808537c4962957ff Mon Sep 17 00:00:00 2001 From: Stephane Gamard Date: Wed, 18 Jun 2014 14:25:27 +0200 Subject: [PATCH] SONAR-5007 - Using date instead of timestamp to synchronize indexes --- .../sonar/server/activity/db/ActivityDao.java | 3 ++- .../src/main/java/org/sonar/server/db/Dao.java | 3 ++- .../server/measure/persistence/MeasureDao.java | 5 +++-- .../server/qualityprofile/db/ActiveRuleDao.java | 13 +++++++++---- .../java/org/sonar/server/rule/db/RuleDao.java | 6 +++--- .../sonar/server/search/IndexSynchronizer.java | 17 ++++++++++++++--- .../ActiveRuleBackendMediumTest.java | 3 ++- 7 files changed, 35 insertions(+), 15 deletions(-) diff --git a/sonar-server/src/main/java/org/sonar/server/activity/db/ActivityDao.java b/sonar-server/src/main/java/org/sonar/server/activity/db/ActivityDao.java index 4c723ae668a..14be50ca3b7 100644 --- a/sonar-server/src/main/java/org/sonar/server/activity/db/ActivityDao.java +++ b/sonar-server/src/main/java/org/sonar/server/activity/db/ActivityDao.java @@ -28,6 +28,7 @@ import org.sonar.core.persistence.DbSession; import org.sonar.server.db.BaseDao; import org.sonar.server.search.IndexDefinition; +import java.util.Date; import java.util.List; /** @@ -70,7 +71,7 @@ public class ActivityDao extends BaseDao, K extends Serializable> extends ServerComponent { @@ -77,6 +78,6 @@ public interface Dao, K extends Serializable> extends ServerCom void deleteByKey(DbSession session, K key); - void synchronizeAfter(DbSession session, long timestamp); + void synchronizeAfter(DbSession session, Date date); } diff --git a/sonar-server/src/main/java/org/sonar/server/measure/persistence/MeasureDao.java b/sonar-server/src/main/java/org/sonar/server/measure/persistence/MeasureDao.java index d41f09d85ed..2f30fe0fbba 100644 --- a/sonar-server/src/main/java/org/sonar/server/measure/persistence/MeasureDao.java +++ b/sonar-server/src/main/java/org/sonar/server/measure/persistence/MeasureDao.java @@ -22,16 +22,17 @@ package org.sonar.server.measure.persistence; import com.google.common.annotations.VisibleForTesting; import com.google.common.collect.Lists; -import org.sonar.core.persistence.DaoComponent; import org.sonar.api.ServerComponent; import org.sonar.api.utils.System2; import org.sonar.core.measure.db.MeasureDto; import org.sonar.core.measure.db.MeasureKey; import org.sonar.core.measure.db.MeasureMapper; +import org.sonar.core.persistence.DaoComponent; import org.sonar.core.persistence.DbSession; import org.sonar.server.db.BaseDao; import java.util.Collections; +import java.util.Date; import java.util.List; import static com.google.common.collect.Lists.newArrayList; @@ -84,7 +85,7 @@ public class MeasureDao extends BaseDao i } @Override - public void synchronizeAfter(DbSession session, long timestamp) { + public void synchronizeAfter(DbSession session, Date date) { throw new IllegalStateException("Not implemented yet"); } } diff --git a/sonar-server/src/main/java/org/sonar/server/qualityprofile/db/ActiveRuleDao.java b/sonar-server/src/main/java/org/sonar/server/qualityprofile/db/ActiveRuleDao.java index 66b999fcf57..a98a01234a1 100644 --- a/sonar-server/src/main/java/org/sonar/server/qualityprofile/db/ActiveRuleDao.java +++ b/sonar-server/src/main/java/org/sonar/server/qualityprofile/db/ActiveRuleDao.java @@ -27,7 +27,12 @@ import org.apache.ibatis.session.ResultHandler; import org.sonar.api.rule.RuleKey; import org.sonar.api.utils.System2; import org.sonar.core.persistence.DbSession; -import org.sonar.core.qualityprofile.db.*; +import org.sonar.core.qualityprofile.db.ActiveRuleDto; +import org.sonar.core.qualityprofile.db.ActiveRuleKey; +import org.sonar.core.qualityprofile.db.ActiveRuleMapper; +import org.sonar.core.qualityprofile.db.ActiveRuleParamDto; +import org.sonar.core.qualityprofile.db.QualityProfileDao; +import org.sonar.core.qualityprofile.db.QualityProfileKey; import org.sonar.core.rule.RuleDto; import org.sonar.server.db.BaseDao; import org.sonar.server.rule.db.RuleDao; @@ -36,8 +41,8 @@ import org.sonar.server.search.action.IndexAction; import org.sonar.server.search.action.KeyIndexAction; import javax.annotation.CheckForNull; - import java.sql.Timestamp; +import java.util.Date; import java.util.List; import java.util.Map; @@ -59,8 +64,8 @@ public class ActiveRuleDao extends BaseDao fields = (Map) context.getResultObject(); diff --git a/sonar-server/src/main/java/org/sonar/server/rule/db/RuleDao.java b/sonar-server/src/main/java/org/sonar/server/rule/db/RuleDao.java index 6bf900ac9d8..edc294c2e6f 100644 --- a/sonar-server/src/main/java/org/sonar/server/rule/db/RuleDao.java +++ b/sonar-server/src/main/java/org/sonar/server/rule/db/RuleDao.java @@ -35,8 +35,8 @@ import org.sonar.server.search.action.IndexAction; import org.sonar.server.search.action.KeyIndexAction; import javax.annotation.CheckForNull; - import java.sql.Timestamp; +import java.util.Date; import java.util.List; import java.util.Map; @@ -94,8 +94,8 @@ public class RuleDao extends BaseDao { @Override - public void synchronizeAfter(final DbSession session, long timestamp) { - session.select("selectKeysOfRulesUpdatedSince", new Timestamp(timestamp), new ResultHandler() { + public void synchronizeAfter(final DbSession session, Date date) { + session.select("selectKeysOfRulesUpdatedSince", new Timestamp(date.getTime()), new ResultHandler() { @Override public void handleResult(ResultContext context) { Map map = (Map) context.getResultObject(); diff --git a/sonar-server/src/main/java/org/sonar/server/search/IndexSynchronizer.java b/sonar-server/src/main/java/org/sonar/server/search/IndexSynchronizer.java index 62c06b37bd0..887b92abba3 100644 --- a/sonar-server/src/main/java/org/sonar/server/search/IndexSynchronizer.java +++ b/sonar-server/src/main/java/org/sonar/server/search/IndexSynchronizer.java @@ -22,7 +22,11 @@ package org.sonar.server.search; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.sonar.core.persistence.DbSession; +import org.sonar.server.activity.index.ActivityIndex; +import org.sonar.server.db.Dao; import org.sonar.server.db.DbClient; +import org.sonar.server.qualityprofile.index.ActiveRuleIndex; +import org.sonar.server.rule.index.RuleIndex; /** * @since 4.4 @@ -44,11 +48,18 @@ public class IndexSynchronizer { DbSession session = db.openSession(true); LOG.info("Starting DB to Index synchronization"); long start = System.currentTimeMillis(); - db.ruleDao().synchronizeAfter(session, 0); - db.activeRuleDao().synchronizeAfter(session, 0); - db.activityDao().synchronizeAfter(session, 0); + synchronize(session, db.ruleDao(), index.get(RuleIndex.class)); + synchronize(session, db.activeRuleDao(), index.get(ActiveRuleIndex.class)); + synchronize(session, db.activityDao(), index.get(ActivityIndex.class)); session.commit(); LOG.info("Synchronization done in {}ms...", System.currentTimeMillis()-start); session.close(); } + + private void synchronize(DbSession session, Dao dao, Index index) { + long start = System.currentTimeMillis(); + dao.synchronizeAfter(session, + index.getLastSynchronization()); + LOG.info("-- Synchronized {} in {}ms", index.getIndexType(), (System.currentTimeMillis() - start)); + } } diff --git a/sonar-server/src/test/java/org/sonar/server/qualityprofile/ActiveRuleBackendMediumTest.java b/sonar-server/src/test/java/org/sonar/server/qualityprofile/ActiveRuleBackendMediumTest.java index be951683713..81048e08009 100644 --- a/sonar-server/src/test/java/org/sonar/server/qualityprofile/ActiveRuleBackendMediumTest.java +++ b/sonar-server/src/test/java/org/sonar/server/qualityprofile/ActiveRuleBackendMediumTest.java @@ -44,6 +44,7 @@ import org.sonar.server.search.FacetValue; import org.sonar.server.tester.ServerTester; import java.util.Collection; +import java.util.Date; import java.util.List; import java.util.Map; @@ -84,7 +85,7 @@ public class ActiveRuleBackendMediumTest { assertThat(index.getByKey(activeRule.getKey())).isNull(); // 1. Synchronize since 0 - db.activeRuleDao().synchronizeAfter(dbSession, 0); + db.activeRuleDao().synchronizeAfter(dbSession, new Date()); // 2. Assert that we have the rule in Index assertThat(index.getByKey(activeRule.getKey())).isNotNull(); -- 2.39.5