package org.sonar.server.computation;
+import org.sonar.core.component.ComponentDto;
import org.sonar.core.persistence.DbSession;
import org.sonar.server.db.DbClient;
-import java.io.File;
-
public class AnalysisReportService {
private final DbClient dbClient;
this.dbClient = dbClient;
}
- public File decompress(DbSession session, long id) {
- return dbClient.analysisReportDao().getDecompressedReport(session, id);
+ public void decompress(DbSession session, ComputeEngineContext context) {
+ ComponentDto project = context.getProject();
+
+ context.setReportDirectory(dbClient.analysisReportDao().getDecompressedReport(session, project.getId()));
}
}
DbSession session = dbClient.openSession(true);
ComponentDto project = findProject(report, session);
+ ComputeEngineContext context = new ComputeEngineContext(report, project);
try {
report.succeed();
for (ComputationStep step : stepRegistry.steps()) {
TimeProfiler stepProfiler = new TimeProfiler(LOG).start(step.getDescription());
- step.execute(session, report, project);
+ step.execute(session, context);
session.commit();
stepProfiler.stop();
}
--- /dev/null
+/*
+ * SonarQube, open source software quality management tool.
+ * Copyright (C) 2008-2014 SonarSource
+ * mailto:contact AT sonarsource DOT com
+ *
+ * SonarQube is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or (at your option) any later version.
+ *
+ * SonarQube is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+package org.sonar.server.computation;
+
+import org.sonar.core.component.ComponentDto;
+import org.sonar.core.computation.db.AnalysisReportDto;
+
+import java.io.File;
+
+public class ComputeEngineContext {
+
+ private final AnalysisReportDto reportDto;
+ private final ComponentDto project;
+ private File reportDirectory;
+
+ public ComputeEngineContext(AnalysisReportDto reportDto, ComponentDto project) {
+ this.reportDto = reportDto;
+ this.project = project;
+ }
+
+ public AnalysisReportDto getReportDto() {
+ return reportDto;
+ }
+
+ public ComponentDto getProject() {
+ return project;
+ }
+
+ public File getReportDirectory() {
+ return reportDirectory;
+ }
+
+ public void setReportDirectory(File reportDirectory) {
+ this.reportDirectory = reportDirectory;
+ }
+}
package org.sonar.server.computation.step;
-import org.sonar.core.component.ComponentDto;
-import org.sonar.core.computation.db.AnalysisReportDto;
import org.sonar.core.persistence.DbSession;
import org.sonar.core.resource.ResourceIndexerDao;
+import org.sonar.server.computation.ComputeEngineContext;
public class ComponentIndexationInDatabaseStep implements ComputationStep {
private final ResourceIndexerDao resourceIndexerDao;
}
@Override
- public void execute(DbSession session, AnalysisReportDto report, ComponentDto project) {
- resourceIndexerDao.indexProject(project.getId().intValue(), session);
+ public void execute(DbSession session, ComputeEngineContext context) {
+ resourceIndexerDao.indexProject(context.getProject().getId().intValue(), session);
}
@Override
package org.sonar.server.computation.step;
import org.sonar.api.ServerComponent;
-import org.sonar.core.component.ComponentDto;
-import org.sonar.core.computation.db.AnalysisReportDto;
import org.sonar.core.persistence.DbSession;
+import org.sonar.server.computation.ComputeEngineContext;
public interface ComputationStep extends ServerComponent {
- void execute(DbSession session, AnalysisReportDto report, ComponentDto project);
+ void execute(DbSession session, ComputeEngineContext context);
String getDescription();
}
package org.sonar.server.computation.step;
-import org.sonar.core.component.ComponentDto;
-import org.sonar.core.computation.db.AnalysisReportDto;
import org.sonar.core.persistence.DbSession;
import org.sonar.core.purge.IdUuidPair;
import org.sonar.core.computation.dbcleaner.ProjectCleaner;
+import org.sonar.server.computation.ComputeEngineContext;
public class DataCleanerStep implements ComputationStep {
private final ProjectCleaner projectCleaner;
}
@Override
- public void execute(DbSession session, AnalysisReportDto report, ComponentDto project) {
- projectCleaner.purge(session, new IdUuidPair(project.getId(), project.uuid()));
+ public void execute(DbSession session, ComputeEngineContext context) {
+ projectCleaner.purge(session, new IdUuidPair(context.getProject().getId(), context.getProject().uuid()));
}
@Override
package org.sonar.server.computation.step;
-import org.sonar.core.component.ComponentDto;
-import org.sonar.core.computation.db.AnalysisReportDto;
import org.sonar.core.persistence.DbSession;
import org.sonar.server.computation.AnalysisReportService;
+import org.sonar.server.computation.ComputeEngineContext;
public class DigestReportStep implements ComputationStep {
private final AnalysisReportService reportService;
}
@Override
- public void execute(DbSession session, AnalysisReportDto report, ComponentDto project) {
- reportService.decompress(session, report.getId());
+ public void execute(DbSession session, ComputeEngineContext context) {
+ reportService.decompress(session, context);
}
@Override
package org.sonar.server.computation.step;
-import org.sonar.core.component.ComponentDto;
-import org.sonar.core.computation.db.AnalysisReportDto;
import org.sonar.core.persistence.DbSession;
+import org.sonar.server.computation.ComputeEngineContext;
import org.sonar.server.issue.index.IssueAuthorizationIndexer;
import org.sonar.server.issue.index.IssueIndexer;
}
@Override
- public void execute(DbSession session, AnalysisReportDto report, ComponentDto project) {
+ public void execute(DbSession session, ComputeEngineContext context) {
authorizationIndexer.index();
indexer.index();
}
package org.sonar.server.computation.step;
import org.sonar.core.component.ComponentDto;
-import org.sonar.core.computation.db.AnalysisReportDto;
import org.sonar.core.persistence.DbSession;
import org.sonar.core.preview.PreviewCache;
import org.sonar.core.properties.PropertiesDao;
import org.sonar.core.properties.PropertyDto;
+import org.sonar.server.computation.ComputeEngineContext;
public class InvalidatePreviewCacheStep implements ComputationStep {
private final PropertiesDao propertiesDao;
}
@Override
- public void execute(DbSession session, AnalysisReportDto report, ComponentDto project) {
- propertiesDao.setProperty(newProjectPreviewCacheProperty(project), session);
+ public void execute(DbSession session, ComputeEngineContext context) {
+ propertiesDao.setProperty(newProjectPreviewCacheProperty(context.getProject()), session);
}
private PropertyDto newProjectPreviewCacheProperty(ComponentDto project) {
package org.sonar.server.computation.step;
-import org.sonar.core.component.ComponentDto;
import org.sonar.core.component.SnapshotDto;
import org.sonar.core.computation.db.AnalysisReportDto;
import org.sonar.core.persistence.DbSession;
import org.sonar.server.component.db.SnapshotDao;
+import org.sonar.server.computation.ComputeEngineContext;
import java.util.List;
}
@Override
- public void execute(DbSession session, AnalysisReportDto report, ComponentDto project) {
- disablePreviousSnapshot(session, report);
- enableCurrentSnapshot(session, report);
+ public void execute(DbSession session, ComputeEngineContext context) {
+ disablePreviousSnapshot(session, context.getReportDto());
+ enableCurrentSnapshot(session, context.getReportDto());
}
@Override
package org.sonar.server.computation.step;
-import org.sonar.core.component.ComponentDto;
-import org.sonar.core.computation.db.AnalysisReportDto;
import org.sonar.core.persistence.DbSession;
+import org.sonar.server.computation.ComputeEngineContext;
import org.sonar.server.issue.index.IssueAuthorizationIndexer;
public class SynchronizeProjectPermissionsStep implements ComputationStep {
}
@Override
- public void execute(DbSession session, AnalysisReportDto report, ComponentDto project) {
+ public void execute(DbSession session, ComputeEngineContext context) {
indexer.index();
}
*/
package org.sonar.server.source;
-import org.sonar.core.component.ComponentDto;
-import org.sonar.core.computation.db.AnalysisReportDto;
import org.sonar.core.persistence.DbSession;
+import org.sonar.server.computation.ComputeEngineContext;
import org.sonar.server.computation.step.ComputationStep;
import org.sonar.server.source.index.SourceLineIndexer;
}
@Override
- public void execute(DbSession session, AnalysisReportDto report, ComponentDto project) {
+ public void execute(DbSession session, ComputeEngineContext context) {
indexer.index();
}
when(dbClient.analysisReportDao()).thenReturn(dao);
sut = new AnalysisReportService(dbClient);
- sut.decompress(mock(DbSession.class), 123L);
+ sut.decompress(mock(DbSession.class), , 123L);
verify(dao).getDecompressedReport(any(DbSession.class), eq(123L));
}
import org.junit.Before;
import org.junit.Test;
import org.mockito.InOrder;
-import org.sonar.core.component.ComponentDto;
import org.sonar.core.computation.db.AnalysisReportDto;
import org.sonar.core.persistence.DbSession;
import org.sonar.server.activity.ActivityService;
InOrder order = inOrder(firstStep, secondStep, thirdStep);
- order.verify(firstStep).execute(any(DbSession.class), any(AnalysisReportDto.class), any(ComponentDto.class));
- order.verify(secondStep).execute(any(DbSession.class), any(AnalysisReportDto.class), any(ComponentDto.class));
- order.verify(thirdStep).execute(any(DbSession.class), any(AnalysisReportDto.class), any(ComponentDto.class));
+ order.verify(firstStep).execute(any(DbSession.class), any(ComputeEngineContext.class));
+ order.verify(secondStep).execute(any(DbSession.class), any(ComputeEngineContext.class));
+ order.verify(thirdStep).execute(any(DbSession.class), any(ComputeEngineContext.class));
}
}
import org.sonar.core.computation.db.AnalysisReportDto;
import org.sonar.core.persistence.DbSession;
import org.sonar.core.resource.ResourceIndexerDao;
+import org.sonar.server.computation.ComputeEngineContext;
import static org.mockito.Mockito.*;
public void call_indexProject_of_dao() {
ComponentDto project = mock(ComponentDto.class);
when(project.getId()).thenReturn(123L);
-
DbSession session = mock(DbSession.class);
- sut.execute(session, mock(AnalysisReportDto.class), project);
+ ComputeEngineContext context = new ComputeEngineContext(mock(AnalysisReportDto.class), project);
+
+ sut.execute(session, context);
verify(resourceIndexerDao).indexProject(123, session);
}
import org.sonar.core.properties.PropertyDto;
import org.sonar.server.component.ComponentTesting;
import org.sonar.server.component.SnapshotTesting;
+import org.sonar.server.computation.ComputeEngineContext;
import org.sonar.server.db.DbClient;
import org.sonar.server.properties.ProjectSettingsFactory;
import org.sonar.server.search.IndexClient;
dbClient.propertiesDao().setProperty(new PropertyDto().setKey(DbCleanerConstants.WEEKS_BEFORE_DELETING_ALL_SNAPSHOTS).setValue("52"));
dbSession.commit();
+ ComputeEngineContext context = new ComputeEngineContext(report, project);
// ACT
- sut.execute(dbSession, report, project);
+ sut.execute(dbSession, context);
dbSession.commit();
// ASSERT
dbClient.propertiesDao().setProperty(new PropertyDto().setKey(DbCleanerConstants.WEEKS_BEFORE_DELETING_ALL_SNAPSHOTS).setValue("4"));
dbClient.propertiesDao().setProperty(new PropertyDto().setKey(DbCleanerConstants.WEEKS_BEFORE_DELETING_ALL_SNAPSHOTS).setValue("1").setResourceId(project.getId()));
dbSession.commit();
+ ComputeEngineContext context = new ComputeEngineContext(report, project);
// ACT
- sut.execute(dbSession, report, project);
+ sut.execute(dbSession, context);
dbSession.commit();
// ASSERT
import org.junit.Test;
import org.sonar.core.component.ComponentDto;
import org.sonar.core.computation.db.AnalysisReportDto;
+import org.sonar.core.computation.dbcleaner.ProjectCleaner;
import org.sonar.core.persistence.DbSession;
import org.sonar.core.purge.IdUuidPair;
-import org.sonar.core.computation.dbcleaner.ProjectCleaner;
+import org.sonar.server.computation.ComputeEngineContext;
import static org.mockito.Matchers.any;
-import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.verify;
-import static org.mockito.Mockito.when;
+import static org.mockito.Mockito.*;
public class DataCleanerStepTest {
ComponentDto project = mock(ComponentDto.class);
when(project.getId()).thenReturn(123L);
when(project.uuid()).thenReturn("UUID-1234");
+ ComputeEngineContext context = new ComputeEngineContext(mock(AnalysisReportDto.class), project);
- sut.execute(mock(DbSession.class), mock(AnalysisReportDto.class), project);
+ sut.execute(mock(DbSession.class), context);
verify(projectCleaner).purge(any(DbSession.class), any(IdUuidPair.class));
}
import org.sonar.core.computation.db.AnalysisReportDto;
import org.sonar.core.persistence.DbSession;
import org.sonar.server.computation.AnalysisReportService;
+import org.sonar.server.computation.ComputeEngineContext;
import static org.mockito.Matchers.any;
import static org.mockito.Matchers.eq;
AnalysisReportService service = mock(AnalysisReportService.class);
AnalysisReportDto report = AnalysisReportDto.newForTests(123L);
sut = new DigestReportStep(service);
+ ComputeEngineContext context = new ComputeEngineContext(report, mock(ComponentDto.class));
- sut.execute(mock(DbSession.class), report, mock(ComponentDto.class));
+ sut.execute(mock(DbSession.class), context);
- verify(service).decompress(any(DbSession.class), eq(123L));
+ verify(service).decompress(any(DbSession.class), , eq(123L));
}
}
import org.sonar.core.persistence.DbSession;
import org.sonar.core.properties.PropertiesDao;
import org.sonar.core.properties.PropertyDto;
-import org.sonar.server.computation.step.InvalidatePreviewCacheStep;
+import org.sonar.server.computation.ComputeEngineContext;
import static org.mockito.Matchers.any;
import static org.mockito.Matchers.eq;
@Test
public void update_property_calling_propertiesDao() {
DbSession session = mock(DbSession.class);
- sut.execute(session, mock(AnalysisReportDto.class), mock(ComponentDto.class));
+ ComputeEngineContext context = new ComputeEngineContext(mock(AnalysisReportDto.class), mock(ComponentDto.class));
+
+ sut.execute(session, context);
verify(propertiesDao).setProperty(any(PropertyDto.class), eq(session));
}
import org.sonar.api.utils.System2;
import org.sonar.core.computation.db.AnalysisReportDto;
import org.sonar.core.persistence.DbSession;
-import org.sonar.core.persistence.MyBatis;
import org.sonar.core.persistence.DbTester;
+import org.sonar.core.persistence.MyBatis;
import org.sonar.server.component.ComponentTesting;
import org.sonar.server.component.db.SnapshotDao;
-import org.sonar.server.computation.step.SwitchSnapshotStep;
+import org.sonar.server.computation.ComputeEngineContext;
import org.sonar.test.DbTests;
import static org.mockito.Mockito.mock;
@Test
public void one_switch_with_a_snapshot_and_his_children() {
db.prepareDbUnit(getClass(), "snapshots.xml");
+ ComputeEngineContext context = new ComputeEngineContext(AnalysisReportDto.newForTests(1L).setSnapshotId(1L), ComponentTesting.newProjectDto());
- sut.execute(session, AnalysisReportDto.newForTests(1L).setSnapshotId(1L), ComponentTesting.newProjectDto());
+ sut.execute(session, context);
session.commit();
db.assertDbUnit(getClass(), "snapshots-result.xml", "snapshots");
@Test(expected = IllegalStateException.class)
public void throw_IllegalStateException_when_not_finding_snapshot() {
db.prepareDbUnit(getClass(), "empty.xml");
+ ComputeEngineContext context = new ComputeEngineContext(AnalysisReportDto.newForTests(1L).setSnapshotId(1L), ComponentTesting.newProjectDto());
- sut.execute(session, AnalysisReportDto.newForTests(1L).setSnapshotId(1L), ComponentTesting.newProjectDto());
+ sut.execute(session, context);
}
}
package org.sonar.server.computation.step;
import org.junit.Test;
-import org.sonar.server.computation.step.SynchronizeProjectPermissionsStep;
import org.sonar.server.issue.index.IssueAuthorizationIndexer;
import static org.mockito.Mockito.mock;
@Test
public void index_issue_permissions() throws Exception {
IssueAuthorizationIndexer indexer = mock(IssueAuthorizationIndexer.class);
- new SynchronizeProjectPermissionsStep(indexer).execute(null, null, null);
+ new SynchronizeProjectPermissionsStep(indexer).execute(null, null);
verify(indexer).index();
}
}