aboutsummaryrefslogtreecommitdiffstats
path: root/sonar-batch/src
diff options
context:
space:
mode:
authorsimonbrandhof <simon.brandhof@gmail.com>2011-12-20 21:32:31 +0100
committersimonbrandhof <simon.brandhof@gmail.com>2011-12-20 21:32:31 +0100
commiteae7223b4cdfbce089c4f30a31692ae8130df600 (patch)
tree936eb6cf351052b30e3bc735a4ea834fa38d712c /sonar-batch/src
parent3abd667d979c3899a4f529a6e0dbf0e0dddb8245 (diff)
downloadsonarqube-eae7223b4cdfbce089c4f30a31692ae8130df600.tar.gz
sonarqube-eae7223b4cdfbce089c4f30a31692ae8130df600.zip
SONAR-983 resources are indexed during analysis
* Rename the column RESOURCE_INDEX.PROJECT_ID to ROOT_PROJECT_ID * Increase the size of RESOURCE_INDEX.PROJECT_ID * Clean resource index from dbcleaner plugin * Experimental: indexes all the existing resources during upgrade from sonar < 2.13
Diffstat (limited to 'sonar-batch/src')
-rw-r--r--sonar-batch/src/main/java/org/sonar/batch/index/DefaultResourcePersister.java20
-rw-r--r--sonar-batch/src/test/java/org/sonar/batch/index/DefaultResourcePersisterTest.java14
-rw-r--r--sonar-batch/src/test/java/org/sonar/batch/phases/UpdateStatusJobTest.java3
3 files changed, 20 insertions, 17 deletions
diff --git a/sonar-batch/src/main/java/org/sonar/batch/index/DefaultResourcePersister.java b/sonar-batch/src/main/java/org/sonar/batch/index/DefaultResourcePersister.java
index dd8bf85d196..127d3415208 100644
--- a/sonar-batch/src/main/java/org/sonar/batch/index/DefaultResourcePersister.java
+++ b/sonar-batch/src/main/java/org/sonar/batch/index/DefaultResourcePersister.java
@@ -27,14 +27,10 @@ import org.sonar.api.database.model.ResourceModel;
import org.sonar.api.database.model.Snapshot;
import org.sonar.api.resources.*;
import org.sonar.api.utils.SonarException;
+import org.sonar.persistence.resource.ResourceIndexerDao;
import javax.persistence.NonUniqueResultException;
import javax.persistence.Query;
-
-import org.sonar.api.resources.Qualifiers;
-
-import org.sonar.api.resources.Scopes;
-
import java.util.Iterator;
import java.util.List;
import java.util.Map;
@@ -44,9 +40,11 @@ public final class DefaultResourcePersister implements ResourcePersister {
private DatabaseSession session;
private Map<Resource, Snapshot> snapshotsByResource = Maps.newHashMap();
+ private ResourceIndexerDao indexer;
- public DefaultResourcePersister(DatabaseSession session) {
+ public DefaultResourcePersister(DatabaseSession session, ResourceIndexerDao indexer) {
this.session = session;
+ this.indexer = indexer;
}
public Snapshot saveProject(Project project, Project parent) {
@@ -78,13 +76,14 @@ public final class DefaultResourcePersister implements ResourcePersister {
model.setRootId((Integer) ObjectUtils.defaultIfNull(parentSnapshot.getRootProjectId(), parentSnapshot.getResourceId()));
}
model = session.save(model);
- project.setId(model.getId()); // TODO to be removed
+ project.setId(model.getId());
Snapshot snapshot = new Snapshot(model, parentSnapshot);
snapshot.setVersion(project.getAnalysisVersion());
snapshot.setCreatedAt(project.getAnalysisDate());
snapshot = session.save(snapshot);
session.commit();
+ indexer.index(project.getName(), snapshot.getResourceId(), snapshot.getRootProjectId());
return snapshot;
}
@@ -134,6 +133,7 @@ public final class DefaultResourcePersister implements ResourcePersister {
} else {
snapshot = persistFileOrDirectory(project, resource, parent);
}
+ indexer.index(resource.getName(), snapshot.getResourceId(), snapshot.getRootProjectId());
return snapshot;
}
@@ -162,7 +162,7 @@ public final class DefaultResourcePersister implements ResourcePersister {
private Snapshot findLibrarySnapshot(Integer resourceId, String version) {
Query query = session.createQuery("from " + Snapshot.class.getSimpleName() +
- " s WHERE s.resourceId=:resourceId AND s.version=:version AND s.scope=:scope AND s.qualifier<>:qualifier AND s.last=:last");
+ " s WHERE s.resourceId=:resourceId AND s.version=:version AND s.scope=:scope AND s.qualifier<>:qualifier AND s.last=:last");
query.setParameter("resourceId", resourceId);
query.setParameter("version", version);
query.setParameter("scope", Scopes.PROJECT);
@@ -183,7 +183,7 @@ public final class DefaultResourcePersister implements ResourcePersister {
Snapshot projectSnapshot = snapshotsByResource.get(project);
model.setRootId(projectSnapshot.getResourceId());
model = session.save(model);
- resource.setId(model.getId()); // TODO to be removed
+ resource.setId(model.getId());
Snapshot parentSnapshot = (Snapshot) ObjectUtils.defaultIfNull(getSnapshot(parentReference), projectSnapshot);
Snapshot snapshot = new Snapshot(model, parentSnapshot);
@@ -208,7 +208,7 @@ public final class DefaultResourcePersister implements ResourcePersister {
public void clear() {
// we keep cache of projects
- for (Iterator<Map.Entry<Resource, Snapshot>> it = snapshotsByResource.entrySet().iterator(); it.hasNext();) {
+ for (Iterator<Map.Entry<Resource, Snapshot>> it = snapshotsByResource.entrySet().iterator(); it.hasNext(); ) {
Map.Entry<Resource, Snapshot> entry = it.next();
if (!ResourceUtils.isSet(entry.getKey())) {
it.remove();
diff --git a/sonar-batch/src/test/java/org/sonar/batch/index/DefaultResourcePersisterTest.java b/sonar-batch/src/test/java/org/sonar/batch/index/DefaultResourcePersisterTest.java
index 3491738c922..8f5c8a14e5c 100644
--- a/sonar-batch/src/test/java/org/sonar/batch/index/DefaultResourcePersisterTest.java
+++ b/sonar-batch/src/test/java/org/sonar/batch/index/DefaultResourcePersisterTest.java
@@ -26,6 +26,7 @@ import org.sonar.api.resources.JavaPackage;
import org.sonar.api.resources.Library;
import org.sonar.api.resources.Project;
import org.sonar.jpa.test.AbstractDbUnitTestCase;
+import org.sonar.persistence.resource.ResourceIndexerDao;
import java.text.ParseException;
import java.text.SimpleDateFormat;
@@ -33,6 +34,7 @@ import java.text.SimpleDateFormat;
import static org.hamcrest.CoreMatchers.is;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.Matchers.notNullValue;
+import static org.mockito.Mockito.mock;
public class DefaultResourcePersisterTest extends AbstractDbUnitTestCase {
@@ -65,7 +67,7 @@ public class DefaultResourcePersisterTest extends AbstractDbUnitTestCase {
public void shouldSaveNewProject() {
setupData("shared");
- ResourcePersister persister = new DefaultResourcePersister(getSession());
+ ResourcePersister persister = new DefaultResourcePersister(getSession(), mock(ResourceIndexerDao.class));
persister.saveProject(singleProject, null);
checkTables("shouldSaveNewProject", "projects", "snapshots");
@@ -75,7 +77,7 @@ public class DefaultResourcePersisterTest extends AbstractDbUnitTestCase {
public void shouldSaveNewMultiModulesProject() throws ParseException {
setupData("shared");
- ResourcePersister persister = new DefaultResourcePersister(getSession());
+ ResourcePersister persister = new DefaultResourcePersister(getSession(), mock(ResourceIndexerDao.class));
persister.saveProject(multiModuleProject, null);
persister.saveProject(moduleA, multiModuleProject);
persister.saveProject(moduleB, multiModuleProject);
@@ -88,7 +90,7 @@ public class DefaultResourcePersisterTest extends AbstractDbUnitTestCase {
public void shouldSaveNewDirectory() {
setupData("shared");
- ResourcePersister persister = new DefaultResourcePersister(getSession());
+ ResourcePersister persister = new DefaultResourcePersister(getSession(), mock(ResourceIndexerDao.class));
persister.saveProject(singleProject, null);
persister.saveResource(singleProject, new JavaPackage("org.foo").setEffectiveKey("foo:org.foo"));
@@ -100,7 +102,7 @@ public class DefaultResourcePersisterTest extends AbstractDbUnitTestCase {
public void shouldSaveNewLibrary() {
setupData("shared");
- ResourcePersister persister = new DefaultResourcePersister(getSession());
+ ResourcePersister persister = new DefaultResourcePersister(getSession(), mock(ResourceIndexerDao.class));
persister.saveProject(singleProject, null);
persister.saveResource(singleProject, new Library("junit:junit", "4.8.2").setEffectiveKey("junit:junit"));
persister.saveResource(singleProject, new Library("junit:junit", "4.8.2").setEffectiveKey("junit:junit"));// do nothing, already saved
@@ -113,7 +115,7 @@ public class DefaultResourcePersisterTest extends AbstractDbUnitTestCase {
public void shouldClearResourcesExceptProjects() {
setupData("shared");
- DefaultResourcePersister persister = new DefaultResourcePersister(getSession());
+ DefaultResourcePersister persister = new DefaultResourcePersister(getSession(), mock(ResourceIndexerDao.class));
persister.saveProject(multiModuleProject, null);
persister.saveProject(moduleA, multiModuleProject);
persister.saveResource(moduleA, new JavaPackage("org.foo").setEffectiveKey("a:org.foo"));
@@ -129,7 +131,7 @@ public class DefaultResourcePersisterTest extends AbstractDbUnitTestCase {
public void shouldUpdateExistingResource() {
setupData("shouldUpdateExistingResource");
- ResourcePersister persister = new DefaultResourcePersister(getSession());
+ ResourcePersister persister = new DefaultResourcePersister(getSession(), mock(ResourceIndexerDao.class));
singleProject.setName("new name");
singleProject.setDescription("new description");
persister.saveProject(singleProject, null);
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 320db8e9608..dcedc0b8c75 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
@@ -25,6 +25,7 @@ import org.sonar.api.database.model.Snapshot;
import org.sonar.batch.ServerMetadata;
import org.sonar.batch.index.DefaultResourcePersister;
import org.sonar.jpa.test.AbstractDbUnitTestCase;
+import org.sonar.persistence.resource.ResourceIndexerDao;
import javax.persistence.Query;
@@ -50,7 +51,7 @@ public class UpdateStatusJobTest extends AbstractDbUnitTestCase {
private void assertAnalysis(int snapshotId, String fixture) {
setupData("sharedFixture", fixture);
DatabaseSession session = getSession();
- UpdateStatusJob sensor = new UpdateStatusJob(mock(ServerMetadata.class), session, new DefaultResourcePersister(session), loadSnapshot(snapshotId));
+ UpdateStatusJob sensor = new UpdateStatusJob(mock(ServerMetadata.class), session, new DefaultResourcePersister(session, mock(ResourceIndexerDao.class)), loadSnapshot(snapshotId));
sensor.execute();
getSession().stop();