diff options
author | simonbrandhof <simon.brandhof@gmail.com> | 2011-12-20 21:32:31 +0100 |
---|---|---|
committer | simonbrandhof <simon.brandhof@gmail.com> | 2011-12-20 21:32:31 +0100 |
commit | eae7223b4cdfbce089c4f30a31692ae8130df600 (patch) | |
tree | 936eb6cf351052b30e3bc735a4ea834fa38d712c /sonar-batch/src | |
parent | 3abd667d979c3899a4f529a6e0dbf0e0dddb8245 (diff) | |
download | sonarqube-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')
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(); |