]> source.dussan.org Git - sonarqube.git/commitdiff
SONAR-8743 Handle only leak period when persisting analysis
authorJulien Lancelot <julien.lancelot@sonarsource.com>
Tue, 7 Feb 2017 14:10:32 +0000 (15:10 +0100)
committerJulien Lancelot <julien.lancelot@sonarsource.com>
Thu, 9 Feb 2017 11:15:11 +0000 (12:15 +0100)
server/sonar-server/src/main/java/org/sonar/server/computation/task/projectanalysis/step/PersistAnalysisStep.java
server/sonar-server/src/test/java/org/sonar/server/computation/task/projectanalysis/step/ReportPersistAnalysisStepTest.java
server/sonar-server/src/test/java/org/sonar/server/computation/task/projectanalysis/step/ViewsPersistAnalysisStepTest.java

index 0b1b23cb79c1ddcd217d581347d89eb740320b38..a81649b1c0d19350ab8f64e93f348af1d40cd312 100644 (file)
@@ -19,9 +19,6 @@
  */
 package org.sonar.server.computation.task.projectanalysis.step;
 
-import java.util.List;
-import javax.annotation.CheckForNull;
-import javax.annotation.Nullable;
 import org.sonar.api.utils.System2;
 import org.sonar.db.DbClient;
 import org.sonar.db.DbSession;
@@ -29,9 +26,9 @@ import org.sonar.db.component.SnapshotDto;
 import org.sonar.server.computation.task.projectanalysis.analysis.AnalysisMetadataHolder;
 import org.sonar.server.computation.task.projectanalysis.component.Component;
 import org.sonar.server.computation.task.projectanalysis.component.CrawlerDepthLimit;
-import org.sonar.server.computation.task.projectanalysis.component.PathAwareCrawler;
-import org.sonar.server.computation.task.projectanalysis.component.PathAwareVisitorAdapter;
+import org.sonar.server.computation.task.projectanalysis.component.DepthTraversalTypeAwareCrawler;
 import org.sonar.server.computation.task.projectanalysis.component.TreeRootHolder;
+import org.sonar.server.computation.task.projectanalysis.component.TypeAwareVisitorAdapter;
 import org.sonar.server.computation.task.projectanalysis.period.Period;
 import org.sonar.server.computation.task.projectanalysis.period.PeriodsHolder;
 import org.sonar.server.computation.task.step.ComputationStep;
@@ -60,7 +57,7 @@ public class PersistAnalysisStep implements ComputationStep {
   public void execute() {
     DbSession session = dbClient.openSession(false);
     try {
-      new PathAwareCrawler<>(
+      new DepthTraversalTypeAwareCrawler(
         new PersistSnapshotsPathAwareVisitor(session, analysisMetadataHolder.getAnalysisDate()))
           .visit(treeRootHolder.getRoot());
       session.commit();
@@ -69,37 +66,36 @@ public class PersistAnalysisStep implements ComputationStep {
     }
   }
 
-  private class PersistSnapshotsPathAwareVisitor extends PathAwareVisitorAdapter<SnapshotDtoHolder> {
+  private class PersistSnapshotsPathAwareVisitor extends TypeAwareVisitorAdapter {
 
     private final DbSession dbSession;
     private final long analysisDate;
 
     public PersistSnapshotsPathAwareVisitor(DbSession dbSession, long analysisDate) {
-      super(CrawlerDepthLimit.ROOTS, Order.PRE_ORDER, SnapshotDtoHolderFactory.INSTANCE);
+      super(CrawlerDepthLimit.ROOTS, Order.PRE_ORDER);
       this.dbSession = dbSession;
       this.analysisDate = analysisDate;
     }
 
     @Override
-    public void visitProject(Component project, Path<SnapshotDtoHolder> path) {
+    public void visitProject(Component project) {
       SnapshotDto snapshot = createAnalysis(analysisMetadataHolder.getUuid(), project, true);
       updateSnapshotPeriods(snapshot);
       persist(snapshot, dbSession);
     }
 
     @Override
-    public void visitView(Component view, Path<SnapshotDtoHolder> path) {
+    public void visitView(Component view) {
       SnapshotDto snapshot = createAnalysis(analysisMetadataHolder.getUuid(), view, false);
       updateSnapshotPeriods(snapshot);
       persist(snapshot, dbSession);
     }
 
     private void updateSnapshotPeriods(SnapshotDto snapshotDto) {
-      List<Period> periods = periodsHolder.getPeriods();
-      if (periods.isEmpty()) {
+      if (!periodsHolder.hasPeriod()) {
         return;
       }
-      Period period = periods.get(0);
+      Period period = periodsHolder.getPeriod();
       snapshotDto.setPeriodMode(period.getMode());
       snapshotDto.setPeriodParam(period.getModeParameter());
       snapshotDto.setPeriodDate(period.getSnapshotDate());
@@ -122,45 +118,6 @@ public class PersistAnalysisStep implements ComputationStep {
     }
   }
 
-  private static final class SnapshotDtoHolder {
-    @CheckForNull
-    private SnapshotDto snapshotDto;
-
-    @CheckForNull
-    public SnapshotDto getSnapshotDto() {
-      return snapshotDto;
-    }
-
-    public void setSnapshotDto(@Nullable SnapshotDto snapshotDto) {
-      this.snapshotDto = snapshotDto;
-    }
-  }
-
-  /**
-   * Factory of SnapshotDtoHolder.
-   *
-   * No need to create an instance for components of type FILE and PROJECT_VIEW, since they are the leaves of their
-   * respective trees, no one will consume the value of the holder, so we save on creating useless objects.
-   */
-  private static class SnapshotDtoHolderFactory extends PathAwareVisitorAdapter.SimpleStackElementFactory<SnapshotDtoHolder> {
-    public static final SnapshotDtoHolderFactory INSTANCE = new SnapshotDtoHolderFactory();
-
-    @Override
-    public SnapshotDtoHolder createForAny(Component component) {
-      return new SnapshotDtoHolder();
-    }
-
-    @Override
-    public SnapshotDtoHolder createForFile(Component file) {
-      return null;
-    }
-
-    @Override
-    public SnapshotDtoHolder createForProjectView(Component projectView) {
-      return null;
-    }
-  }
-
   @Override
   public String getDescription() {
     return "Persist analysis";
index 3ed82c6cf503ffdd750d7076819e2a9a95da3f25..81aa76364867854e439f492120013be396875c90 100644 (file)
@@ -48,7 +48,6 @@ import static org.mockito.Mockito.when;
 import static org.sonar.core.config.CorePropertyDefinitions.TIMEMACHINE_MODE_DATE;
 import static org.sonar.core.config.CorePropertyDefinitions.TIMEMACHINE_MODE_PREVIOUS_ANALYSIS;
 
-
 public class ReportPersistAnalysisStepTest extends BaseStepTest {
 
   private static final String PROJECT_KEY = "PROJECT_KEY";
@@ -63,15 +62,15 @@ public class ReportPersistAnalysisStepTest extends BaseStepTest {
   @Rule
   public PeriodsHolderRule periodsHolder = new PeriodsHolderRule();
 
-  System2 system2 = mock(System2.class);
+  private System2 system2 = mock(System2.class);
 
-  DbIdsRepositoryImpl dbIdsRepository;
+  private DbIdsRepositoryImpl dbIdsRepository;
 
-  DbClient dbClient = dbTester.getDbClient();
+  private DbClient dbClient = dbTester.getDbClient();
 
-  long analysisDate;
+  private long analysisDate;
 
-  long now;
+  private long now;
 
   PersistAnalysisStep underTest;
 
@@ -89,7 +88,7 @@ public class ReportPersistAnalysisStepTest extends BaseStepTest {
     underTest = new PersistAnalysisStep(system2, dbClient, treeRootHolder, analysisMetadataHolder, periodsHolder);
 
     // initialize PeriodHolder to empty by default
-    periodsHolder.setPeriods();
+    periodsHolder.setPeriod(null);
   }
 
   @Override
@@ -147,7 +146,7 @@ public class ReportPersistAnalysisStepTest extends BaseStepTest {
     SnapshotDto snapshotDto = SnapshotTesting.newAnalysis(projectDto).setCreatedAt(DateUtils.parseDateQuietly("2015-01-01").getTime());
     dbClient.snapshotDao().insert(dbTester.getSession(), snapshotDto);
     dbTester.getSession().commit();
-    periodsHolder.setPeriods(new Period(1, TIMEMACHINE_MODE_DATE, "2015-01-01", analysisDate, "u1"));
+    periodsHolder.setPeriod(new Period(TIMEMACHINE_MODE_DATE, "2015-01-01", analysisDate, "u1"));
 
     Component project = ReportComponent.builder(Component.Type.PROJECT, 1).setUuid("ABCD").setKey(PROJECT_KEY).build();
     treeRootHolder.setRoot(project);
@@ -163,7 +162,7 @@ public class ReportPersistAnalysisStepTest extends BaseStepTest {
 
   @Test
   public void only_persist_snapshots_with_leak_period_on_project_and_module() {
-    periodsHolder.setPeriods(new Period(1, TIMEMACHINE_MODE_PREVIOUS_ANALYSIS, null, analysisDate, "u1"));
+    periodsHolder.setPeriod(new Period(TIMEMACHINE_MODE_PREVIOUS_ANALYSIS, null, analysisDate, "u1"));
 
     OrganizationDto organizationDto = dbTester.organizations().insert();
     ComponentDto projectDto = ComponentTesting.newProjectDto(organizationDto, "ABCD").setKey(PROJECT_KEY).setName("Project");
index 17344baf7102e40450c2a604df5443b60f6d8908..4706d39faf2ee4d47e5d5643c132be23bce29e9c 100644 (file)
@@ -63,15 +63,15 @@ public class ViewsPersistAnalysisStepTest extends BaseStepTest {
   @Rule
   public PeriodsHolderRule periodsHolder = new PeriodsHolderRule();
 
-  System2 system2 = mock(System2.class);
+  private System2 system2 = mock(System2.class);
 
-  DbClient dbClient = dbTester.getDbClient();
+  private DbClient dbClient = dbTester.getDbClient();
 
-  long analysisDate;
+  private long analysisDate;
 
-  long now;
+  private long now;
 
-  PersistAnalysisStep underTest;
+  private PersistAnalysisStep underTest;
 
   @Before
   public void setup() {
@@ -86,7 +86,7 @@ public class ViewsPersistAnalysisStepTest extends BaseStepTest {
     underTest = new PersistAnalysisStep(system2, dbClient, treeRootHolder, analysisMetadataHolder, periodsHolder);
 
     // initialize PeriodHolder to empty by default
-    periodsHolder.setPeriods();
+    periodsHolder.setPeriod(null);
   }
 
   @Override
@@ -132,7 +132,7 @@ public class ViewsPersistAnalysisStepTest extends BaseStepTest {
     Component view = ViewsComponent.builder(VIEW, "KEY_VIEW").setUuid("UUID_VIEW").addChildren(subView).build();
     treeRootHolder.setRoot(view);
 
-    periodsHolder.setPeriods(new Period(1, TIMEMACHINE_MODE_DATE, "2015-01-01", analysisDate, "u1"));
+    periodsHolder.setPeriod(new Period(TIMEMACHINE_MODE_DATE, "2015-01-01", analysisDate, "u1"));
 
     underTest.execute();