]> source.dussan.org Git - sonarqube.git/commitdiff
SONAR-5007 - Using date instead of timestamp to synchronize indexes
authorStephane Gamard <stephane.gamard@searchbox.com>
Wed, 18 Jun 2014 12:25:27 +0000 (14:25 +0200)
committerStephane Gamard <stephane.gamard@searchbox.com>
Wed, 18 Jun 2014 13:25:39 +0000 (15:25 +0200)
sonar-server/src/main/java/org/sonar/server/activity/db/ActivityDao.java
sonar-server/src/main/java/org/sonar/server/db/Dao.java
sonar-server/src/main/java/org/sonar/server/measure/persistence/MeasureDao.java
sonar-server/src/main/java/org/sonar/server/qualityprofile/db/ActiveRuleDao.java
sonar-server/src/main/java/org/sonar/server/rule/db/RuleDao.java
sonar-server/src/main/java/org/sonar/server/search/IndexSynchronizer.java
sonar-server/src/test/java/org/sonar/server/qualityprofile/ActiveRuleBackendMediumTest.java

index 4c723ae668ad5c12224c92217024f3c7f73ec408..14be50ca3b71573c5c560f80489eaf0c55bb4a20 100644 (file)
@@ -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<ActivityMapper, ActivityDto, ActivityKe
   }
 
   @Override
-  public void synchronizeAfter(DbSession session, long timestamp) {
+  public void synchronizeAfter(DbSession session, Date time) {
 
   }
 }
index edf06bf13d0f51f030eb0e434c8430c071f0f730..aa32ced7111d7f4f2e874c5bef025c59a6cf4729 100644 (file)
@@ -26,6 +26,7 @@ import org.sonar.core.persistence.Dto;
 import javax.annotation.CheckForNull;
 import java.io.Serializable;
 import java.util.Collection;
+import java.util.Date;
 
 public interface Dao<E extends Dto<K>, K extends Serializable> extends ServerComponent {
 
@@ -77,6 +78,6 @@ public interface Dao<E extends Dto<K>, K extends Serializable> extends ServerCom
 
   void deleteByKey(DbSession session, K key);
 
-  void synchronizeAfter(DbSession session, long timestamp);
+  void synchronizeAfter(DbSession session, Date date);
 
 }
index d41f09d85ed224404a34bac5ae72de81ca1eaa28..2f30fe0fbba2fd6d4d00b1e45bfa6f13e0b67c20 100644 (file)
@@ -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<MeasureMapper, MeasureDto, MeasureKey> i
   }
 
   @Override
-  public void synchronizeAfter(DbSession session, long timestamp) {
+  public void synchronizeAfter(DbSession session, Date date) {
     throw new IllegalStateException("Not implemented yet");
   }
 }
index 66b999fcf57f4cd38d814f7fab9576c2ef77a3c2..a98a01234a14e42fe571a8e852242b64035fb24d 100644 (file)
@@ -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<ActiveRuleMapper, ActiveRuleDto, Acti
   }
 
   @Override
-  public void synchronizeAfter(final DbSession session, long timestamp) {
-    session.select("selectAllKeysAfterTimestamp", new Timestamp(timestamp), new ResultHandler() {
+  public void synchronizeAfter(final DbSession session, Date date) {
+    session.select("selectAllKeysAfterTimestamp", new Timestamp(date.getTime()), new ResultHandler() {
       @Override
       public void handleResult(ResultContext context) {
         Map<String, Object> fields = (Map<String, Object>) context.getResultObject();
index 6bf900ac9d8dce633f61d4ad55c49720b852c52d..edc294c2e6f8ba58e70d05d978573a0e1a8ac346 100644 (file)
@@ -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<RuleMapper, RuleDto, RuleKey> {
 
 
   @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<String, String> map = (Map) context.getResultObject();
index 62c06b37bd02ea8c1c38bc25a1734d51e089fef6..887b92abba345235b3bbd57e7d1ea04b7d7b8287 100644 (file)
@@ -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));
+  }
 }
index be951683713b37f37bb3c7f03eca60a8f3c40fbe..81048e08009a62fc345053597e38abdadb431b08 100644 (file)
@@ -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();