]> source.dussan.org Git - sonarqube.git/commitdiff
SONAR-8501 fix threadlocal leak if task finalization fails 1637/head
authorSébastien Lesaint <sebastien.lesaint@sonarsource.com>
Tue, 7 Feb 2017 15:47:18 +0000 (16:47 +0100)
committerSébastien Lesaint <sebastien.lesaint@sonarsource.com>
Wed, 8 Feb 2017 07:47:30 +0000 (08:47 +0100)
server/sonar-server/src/main/java/org/sonar/server/computation/taskprocessor/CeWorkerCallableImpl.java

index 2c749a6edbedbe8042c48647a524516d4e7279fa..4b5779a13ccd929be515c003a808b2cb44a54626 100644 (file)
@@ -20,6 +20,7 @@
 package org.sonar.server.computation.taskprocessor;
 
 import com.google.common.base.Optional;
+import javax.annotation.Nullable;
 import org.sonar.api.utils.log.Logger;
 import org.sonar.api.utils.log.Loggers;
 import org.sonar.ce.log.CeLogging;
@@ -56,7 +57,7 @@ public class CeWorkerCallableImpl implements CeWorkerCallable {
     try {
       executeTask(ceTask.get());
     } catch (Exception e) {
-      LOG.error("An error occurred while managing task " + ceTask.get().getUuid(), e);
+      LOG.error(format("An error occurred while executing task with uuid '%s'", ceTask.get().getUuid()), e);
     }
     return true;
   }
@@ -91,7 +92,17 @@ public class CeWorkerCallableImpl implements CeWorkerCallable {
       LOG.error(format("Failed to execute task %s", task.getUuid()), e);
       error = e;
     } finally {
+      finalizeTask(task, ceProfiler, status, taskResult, error);
+    }
+  }
+
+  private void finalizeTask(CeTask task, Profiler ceProfiler, CeActivityDto.Status status,
+    @Nullable CeTaskResult taskResult, @Nullable Throwable error) {
+    try {
       queue.remove(task, status, taskResult, error);
+    } catch (Exception e) {
+      LOG.error(format("Failed to finalize task with uuid '%s' and persist its state to db", task.getUuid()), e);
+    } finally {
       stopActivityProfiler(ceProfiler, task, status);
       ceLogging.clearForTask();
     }