]> source.dussan.org Git - sonarqube.git/commitdiff
Fix issue on project bulk update key
authorJulien Lancelot <julien.lancelot@sonarsource.com>
Wed, 14 Jan 2015 15:38:05 +0000 (16:38 +0100)
committerJulien Lancelot <julien.lancelot@sonarsource.com>
Wed, 14 Jan 2015 15:38:13 +0000 (16:38 +0100)
server/sonar-server/src/main/java/org/sonar/server/component/ComponentService.java
sonar-core/src/main/java/org/sonar/core/preview/PreviewCache.java
sonar-core/src/main/java/org/sonar/core/resource/ResourceKeyUpdaterDao.java
sonar-core/src/test/java/org/sonar/core/preview/PreviewCacheTest.java

index c274134185259125b744045691f1de319d7bc122..1a16d8204a2a4502121c7c63f84ba907d2e1de48 100644 (file)
@@ -138,15 +138,14 @@ public class ComponentService implements ServerComponent {
   public void bulkUpdateKey(String projectKey, String stringToReplace, String replacementString) {
     UserSession.get().checkProjectPermission(UserRole.ADMIN, projectKey);
 
-    DbSession session = dbClient.openSession(false);
+    // Open a batch session
+    DbSession session = dbClient.openSession(true);
     try {
       ComponentDto project = getByKey(session, projectKey);
-
-      resourceKeyUpdaterDao.bulkUpdateKey(project.getId(), stringToReplace, replacementString);
-      session.commit();
+      resourceKeyUpdaterDao.bulkUpdateKey(session, project.getId(), stringToReplace, replacementString);
 
       ComponentDto newProject = dbClient.componentDao().getById(project.getId(), session);
-      previewCache.reportResourceModification(newProject.key());
+      previewCache.reportResourceModification(session, newProject.key());
 
       session.commit();
     } finally {
index 57c2adeae9dda039048ea793cf787473a6006f9e..9cfeceec6617cd2cb31fd548dca6415e9ebe6008 100644 (file)
@@ -27,6 +27,7 @@ import org.slf4j.LoggerFactory;
 import org.sonar.api.ServerExtension;
 import org.sonar.api.platform.ServerFileSystem;
 import org.sonar.api.utils.SonarException;
+import org.sonar.core.persistence.DbSession;
 import org.sonar.core.persistence.MyBatis;
 import org.sonar.core.persistence.PreviewDatabaseFactory;
 import org.sonar.core.properties.PropertiesDao;
@@ -207,11 +208,21 @@ public class PreviewCache implements ServerExtension {
   }
 
   public void reportResourceModification(String resourceKey) {
-    ResourceDto rootProject = resourceDao.getRootProjectByComponentKey(resourceKey);
+    DbSession session = mybatis.openSession(false);
+    try {
+      reportResourceModification(session, resourceKey);
+      session.commit();
+    } finally {
+      MyBatis.closeQuietly(session);
+    }
+  }
+
+  public void reportResourceModification(DbSession session, String resourceKey) {
+    ResourceDto rootProject = resourceDao.getRootProjectByComponentKey(session, resourceKey);
     if (rootProject == null) {
       throw new SonarException("Unable to find root project for component with [key=" + resourceKey + "]");
     }
     propertiesDao.setProperty(new PropertyDto().setKey(SONAR_PREVIEW_CACHE_LAST_UPDATE_KEY).setResourceId(rootProject.getId())
-      .setValue(String.valueOf(System.currentTimeMillis())));
+      .setValue(String.valueOf(System.currentTimeMillis())), session);
   }
 }
index 06a202424dd4f876c0a03961ef7a0de859d43578..37d41bac024e5a5575b9d8299ab109e33261c19b 100644 (file)
@@ -87,27 +87,30 @@ public class ResourceKeyUpdaterDao {
     return result;
   }
 
-  public void bulkUpdateKey(long projectId, String stringToReplace, String replacementString) {
-    DbSession session = mybatis.openSession(true);
+  public void bulkUpdateKey(DbSession session, long projectId, String stringToReplace, String replacementString) {
     ResourceKeyUpdaterMapper mapper = session.getMapper(ResourceKeyUpdaterMapper.class);
-    try {
-      // must SELECT first everything
-      Set<ResourceDto> modules = collectAllModules(projectId, stringToReplace, mapper);
-      checkNewNameOfAllModules(modules, stringToReplace, replacementString, mapper);
-      Map<ResourceDto, List<ResourceDto>> allResourcesByModuleMap = Maps.newHashMap();
-      for (ResourceDto module : modules) {
-        allResourcesByModuleMap.put(module, mapper.selectProjectResources(module.getId()));
-      }
+    // must SELECT first everything
+    Set<ResourceDto> modules = collectAllModules(projectId, stringToReplace, mapper);
+    checkNewNameOfAllModules(modules, stringToReplace, replacementString, mapper);
+    Map<ResourceDto, List<ResourceDto>> allResourcesByModuleMap = Maps.newHashMap();
+    for (ResourceDto module : modules) {
+      allResourcesByModuleMap.put(module, mapper.selectProjectResources(module.getId()));
+    }
 
-      // and then proceed with the batch UPDATE at once
-      for (ResourceDto module : modules) {
-        String oldModuleKey = module.getKey();
-        String newModuleKey = computeNewKey(module, stringToReplace, replacementString);
-        Collection<ResourceDto> resources = Lists.newArrayList(module);
-        resources.addAll(allResourcesByModuleMap.get(module));
-        runBatchUpdateForAllResources(resources, oldModuleKey, newModuleKey, mapper);
-      }
+    // and then proceed with the batch UPDATE at once
+    for (ResourceDto module : modules) {
+      String oldModuleKey = module.getKey();
+      String newModuleKey = computeNewKey(module, stringToReplace, replacementString);
+      Collection<ResourceDto> resources = Lists.newArrayList(module);
+      resources.addAll(allResourcesByModuleMap.get(module));
+      runBatchUpdateForAllResources(resources, oldModuleKey, newModuleKey, mapper);
+    }
+  }
 
+  public void bulkUpdateKey(long projectId, String stringToReplace, String replacementString) {
+    DbSession session = mybatis.openSession(true);
+    try {
+      bulkUpdateKey(session, projectId, stringToReplace, replacementString);
       session.commit();
     } finally {
       MyBatis.closeQuietly(session);
index c635741e6d428836f34c3b14472e359605040316..6ef5ae0974e812c8af20cc48737cd958c4490da1 100644 (file)
@@ -45,10 +45,7 @@ import static org.mockito.Matchers.anyLong;
 import static org.mockito.Matchers.anyString;
 import static org.mockito.Matchers.eq;
 import static org.mockito.Matchers.isNull;
-import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.times;
-import static org.mockito.Mockito.verify;
-import static org.mockito.Mockito.when;
+import static org.mockito.Mockito.*;
 
 public class PreviewCacheTest {
 
@@ -226,7 +223,7 @@ public class PreviewCacheTest {
 
   @Test
   public void test_report_resource_modification() {
-    when(resourceDao.getRootProjectByComponentKey("foo")).thenReturn(new ResourceDto().setId(456L));
+    when(resourceDao.getRootProjectByComponentKey(session, "foo")).thenReturn(new ResourceDto().setId(456L));
 
     dryRunCache.reportResourceModification("foo");
 
@@ -234,6 +231,6 @@ public class PreviewCacheTest {
       new PropertyDto()
         .setKey(PreviewCache.SONAR_PREVIEW_CACHE_LAST_UPDATE_KEY)
         .setValue(anyString())
-        .setResourceId(456L));
+        .setResourceId(456L), eq(session));
   }
 }