aboutsummaryrefslogtreecommitdiffstats
path: root/sonar-batch
diff options
context:
space:
mode:
authorTeryk Bellahsene <teryk.bellahsene@sonarsource.com>2014-10-17 18:01:28 +0200
committerTeryk Bellahsene <teryk.bellahsene@sonarsource.com>2014-10-21 15:26:22 +0200
commit07e7caec293ab173dd7659289b60fee216eae941 (patch)
tree13a3372151815c8b9c4699405d0b8423e77a0498 /sonar-batch
parent3e0fcb4f76bc349293a8c6128dd1b2b77bfc1beb (diff)
downloadsonarqube-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.java63
-rw-r--r--sonar-batch/src/test/java/org/sonar/batch/phases/UpdateStatusJobTest.java29
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());