diff options
author | Teryk Bellahsene <teryk.bellahsene@sonarsource.com> | 2014-10-17 18:01:28 +0200 |
---|---|---|
committer | Teryk Bellahsene <teryk.bellahsene@sonarsource.com> | 2014-10-21 15:26:22 +0200 |
commit | 07e7caec293ab173dd7659289b60fee216eae941 (patch) | |
tree | 13a3372151815c8b9c4699405d0b8423e77a0498 /sonar-batch | |
parent | 3e0fcb4f76bc349293a8c6128dd1b2b77bfc1beb (diff) | |
download | sonarqube-07e7caec293ab173dd7659289b60fee216eae941.tar.gz sonarqube-07e7caec293ab173dd7659289b60fee216eae941.zip |
SONAR-5696: Snapshot switch moved from batch to server side
Diffstat (limited to 'sonar-batch')
-rw-r--r-- | sonar-batch/src/main/java/org/sonar/batch/phases/UpdateStatusJob.java | 63 | ||||
-rw-r--r-- | sonar-batch/src/test/java/org/sonar/batch/phases/UpdateStatusJobTest.java | 29 |
2 files changed, 14 insertions, 78 deletions
diff --git a/sonar-batch/src/main/java/org/sonar/batch/phases/UpdateStatusJob.java b/sonar-batch/src/main/java/org/sonar/batch/phases/UpdateStatusJob.java index fabac1e31d0..20fd4eb00e3 100644 --- a/sonar-batch/src/main/java/org/sonar/batch/phases/UpdateStatusJob.java +++ b/sonar-batch/src/main/java/org/sonar/batch/phases/UpdateStatusJob.java @@ -25,36 +25,25 @@ import org.slf4j.LoggerFactory; import org.sonar.api.BatchComponent; import org.sonar.api.CoreProperties; import org.sonar.api.config.Settings; -import org.sonar.api.database.DatabaseSession; import org.sonar.api.database.model.Snapshot; import org.sonar.api.resources.Project; -import org.sonar.api.resources.Scopes; import org.sonar.batch.bootstrap.AnalysisMode; import org.sonar.batch.bootstrap.ServerClient; -import org.sonar.batch.index.ResourcePersister; - -import javax.persistence.Query; - -import java.util.List; public class UpdateStatusJob implements BatchComponent { private static final Logger LOG = LoggerFactory.getLogger(UpdateStatusJob.class); - private DatabaseSession session; private ServerClient server; // TODO remove this component private Snapshot snapshot; - private ResourcePersister resourcePersister; private Settings settings; private Project project; private AnalysisMode analysisMode; - public UpdateStatusJob(Settings settings, ServerClient server, DatabaseSession session, - ResourcePersister resourcePersister, Project project, Snapshot snapshot, AnalysisMode analysisMode) { - this.session = session; + public UpdateStatusJob(Settings settings, ServerClient server, + Project project, Snapshot snapshot, AnalysisMode analysisMode) { this.server = server; - this.resourcePersister = resourcePersister; this.project = project; this.snapshot = snapshot; this.settings = settings; @@ -62,9 +51,8 @@ public class UpdateStatusJob implements BatchComponent { } public void execute() { - disablePreviousSnapshot(); - enableCurrentSnapshot(); uploadReport(); + logSuccess(LoggerFactory.getLogger(getClass())); } @VisibleForTesting @@ -80,7 +68,7 @@ public class UpdateStatusJob implements BatchComponent { } catch (Exception e) { throw new IllegalStateException("Unable to evict preview database: " + url, e); } - url = "/batch/upload_report?project=" + project.getEffectiveKey(); + url = "/batch/upload_report?project=" + project.getEffectiveKey() + "&snapshot=" + snapshot.getId(); try { LOG.debug("Publish results"); server.request(url, "POST"); @@ -89,27 +77,6 @@ public class UpdateStatusJob implements BatchComponent { } } - private void disablePreviousSnapshot() { - // disable on all modules - Query query = session.createQuery("FROM " + Snapshot.class.getSimpleName() + " WHERE (root_snapshot_id=:rootId OR id=:rootId) AND scope=:scope"); - query.setParameter("rootId", snapshot.getId()); - query.setParameter("scope", Scopes.PROJECT); - List<Snapshot> moduleSnapshots = query.getResultList(); - for (Snapshot moduleSnapshot : moduleSnapshots) { - Snapshot previousLastSnapshot = resourcePersister.getLastSnapshot(moduleSnapshot, true); - if (previousLastSnapshot != null) { - setFlags(previousLastSnapshot, false, null); - } - } - } - - private void enableCurrentSnapshot() { - Snapshot previousLastSnapshot = resourcePersister.getLastSnapshot(snapshot, false); - boolean isLast = previousLastSnapshot == null || previousLastSnapshot.getCreatedAt().before(snapshot.getCreatedAt()); - setFlags(snapshot, isLast, Snapshot.STATUS_PROCESSED); - logSuccess(LoggerFactory.getLogger(getClass())); - } - @VisibleForTesting void logSuccess(Logger logger) { if (analysisMode.isPreview()) { @@ -128,26 +95,4 @@ public class UpdateStatusJob implements BatchComponent { logger.info("ANALYSIS SUCCESSFUL, you can browse {}", url); } } - - private void setFlags(Snapshot snapshot, boolean last, String status) { - String hql = "UPDATE " + Snapshot.class.getSimpleName() + " SET last=:last"; - if (status != null) { - hql += ", status=:status "; - } - hql += " WHERE root_snapshot_id=:rootId OR id=:rootId OR (path LIKE :path AND root_snapshot_id=:pathRootId)"; - - Query query = session.createQuery(hql); - if (status != null) { - query.setParameter("status", status); - snapshot.setStatus(status); - } - query.setParameter("last", last); - query.setParameter("rootId", snapshot.getId()); - query.setParameter("path", snapshot.getPath() + snapshot.getId() + ".%"); - query.setParameter("pathRootId", snapshot.getRootId() == null ? snapshot.getId() : snapshot.getRootId()); - query.executeUpdate(); - session.commit(); - - snapshot.setLast(last); - } } diff --git a/sonar-batch/src/test/java/org/sonar/batch/phases/UpdateStatusJobTest.java b/sonar-batch/src/test/java/org/sonar/batch/phases/UpdateStatusJobTest.java index b39d4c91832..294e16a1b32 100644 --- a/sonar-batch/src/test/java/org/sonar/batch/phases/UpdateStatusJobTest.java +++ b/sonar-batch/src/test/java/org/sonar/batch/phases/UpdateStatusJobTest.java @@ -20,6 +20,7 @@ package org.sonar.batch.phases; import org.junit.Before; +import org.junit.Ignore; import org.junit.Test; import org.slf4j.Logger; import org.sonar.api.CoreProperties; @@ -27,13 +28,8 @@ import org.sonar.api.config.Settings; import org.sonar.api.database.DatabaseSession; import org.sonar.api.database.model.Snapshot; import org.sonar.api.resources.Project; -import org.sonar.api.security.ResourcePermissions; import org.sonar.batch.bootstrap.AnalysisMode; import org.sonar.batch.bootstrap.ServerClient; -import org.sonar.batch.index.DefaultResourcePersister; -import org.sonar.batch.index.ResourceCache; -import org.sonar.batch.index.ResourcePersister; -import org.sonar.batch.index.SnapshotCache; import org.sonar.jpa.test.AbstractDbUnitTestCase; import javax.persistence.Query; @@ -41,10 +37,7 @@ import javax.persistence.Query; import static org.mockito.Matchers.anyString; import static org.mockito.Matchers.contains; import static org.mockito.Matchers.eq; -import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.never; -import static org.mockito.Mockito.verify; -import static org.mockito.Mockito.when; +import static org.mockito.Mockito.*; public class UpdateStatusJobTest extends AbstractDbUnitTestCase { @@ -56,16 +49,19 @@ public class UpdateStatusJobTest extends AbstractDbUnitTestCase { } @Test + @Ignore("logic moved on server side - need to check this specific test is covered") public void shouldUnflagPenultimateLastSnapshot() { assertAnalysis(11, "shouldUnflagPenultimateLastSnapshot"); } @Test + @Ignore("logic moved on server side - need to check this specific test is covered") public void doNotFailIfNoPenultimateLast() { assertAnalysis(5, "doNotFailIfNoPenultimateLast"); } @Test + @Ignore("logic moved on server side - need to check this specific test is covered") public void shouldNotEnableSnapshotWhenNotLatest() { assertAnalysis(6, "shouldNotEnableSnapshotWhenNotLatest"); } @@ -76,8 +72,7 @@ public class UpdateStatusJobTest extends AbstractDbUnitTestCase { DatabaseSession session = getSession(); Project project = new Project("foo"); project.setId(1); - UpdateStatusJob job = new UpdateStatusJob(new Settings().appendProperty(CoreProperties.SERVER_BASE_URL, "http://myserver/"), mock(ServerClient.class), session, - new DefaultResourcePersister(session, mock(ResourcePermissions.class), mock(SnapshotCache.class), mock(ResourceCache.class)), + UpdateStatusJob job = new UpdateStatusJob(new Settings().appendProperty(CoreProperties.SERVER_BASE_URL, "http://myserver/"), mock(ServerClient.class), project, loadSnapshot(snapshotId), mode); job.execute(); @@ -95,8 +90,7 @@ public class UpdateStatusJobTest extends AbstractDbUnitTestCase { Settings settings = new Settings(); settings.setProperty(CoreProperties.SERVER_BASE_URL, "http://myserver/"); Project project = new Project("struts"); - UpdateStatusJob job = new UpdateStatusJob(settings, mock(ServerClient.class), mock(DatabaseSession.class), - mock(ResourcePersister.class), project, mock(Snapshot.class), mode); + UpdateStatusJob job = new UpdateStatusJob(settings, mock(ServerClient.class), project, mock(Snapshot.class), mode); Logger logger = mock(Logger.class); job.logSuccess(logger); @@ -109,8 +103,7 @@ public class UpdateStatusJobTest extends AbstractDbUnitTestCase { Settings settings = new Settings(); when(mode.isPreview()).thenReturn(true); Project project = new Project("struts"); - UpdateStatusJob job = new UpdateStatusJob(settings, mock(ServerClient.class), mock(DatabaseSession.class), - mock(ResourcePersister.class), project, mock(Snapshot.class), mode); + UpdateStatusJob job = new UpdateStatusJob(settings, mock(ServerClient.class), project, mock(Snapshot.class), mode); Logger logger = mock(Logger.class); job.logSuccess(logger); @@ -123,8 +116,7 @@ public class UpdateStatusJobTest extends AbstractDbUnitTestCase { Settings settings = new Settings(); Project project = new Project("struts"); ServerClient serverClient = mock(ServerClient.class); - UpdateStatusJob job = new UpdateStatusJob(settings, serverClient, mock(DatabaseSession.class), - mock(ResourcePersister.class), project, mock(Snapshot.class), mode); + UpdateStatusJob job = new UpdateStatusJob(settings, serverClient, project, mock(Snapshot.class), mode); job.uploadReport(); verify(serverClient).request(contains("/batch_bootstrap/evict"), eq("POST")); @@ -137,8 +129,7 @@ public class UpdateStatusJobTest extends AbstractDbUnitTestCase { when(mode.isPreview()).thenReturn(true); Project project = new Project("struts"); ServerClient serverClient = mock(ServerClient.class); - UpdateStatusJob job = new UpdateStatusJob(settings, serverClient, mock(DatabaseSession.class), - mock(ResourcePersister.class), project, mock(Snapshot.class), mode); + UpdateStatusJob job = new UpdateStatusJob(settings, serverClient, project, mock(Snapshot.class), mode); job.uploadReport(); verify(serverClient, never()).request(anyString()); |