]> source.dussan.org Git - sonarqube.git/commitdiff
SONAR-10592 rename concept of WorkersPauseStatus
authorSimon Brandhof <simon.brandhof@sonarsource.com>
Thu, 19 Apr 2018 09:46:40 +0000 (11:46 +0200)
committerSonarTech <sonartech@sonarsource.com>
Thu, 10 May 2018 18:20:53 +0000 (20:20 +0200)
server/sonar-ce/src/main/java/org/sonar/ce/queue/InternalCeQueue.java
server/sonar-ce/src/main/java/org/sonar/ce/queue/InternalCeQueueImpl.java
server/sonar-server/src/main/java/org/sonar/ce/queue/CeQueue.java
server/sonar-server/src/main/java/org/sonar/ce/queue/CeQueueImpl.java
server/sonar-server/src/main/java/org/sonar/server/ce/ws/InfoAction.java
server/sonar-server/src/main/resources/org/sonar/server/ce/ws/info-example.json
server/sonar-server/src/test/java/org/sonar/ce/queue/CeQueueImplTest.java
server/sonar-server/src/test/java/org/sonar/server/ce/ws/InfoActionTest.java
sonar-ws/src/main/protobuf/ws-ce.proto
tests/src/test/java/org/sonarqube/tests/ce/CeWorkersPauseTest.java

index 26a1a558713a1c55c9325ab1bacdb562190cb024..7a2d87f8ab7724325f1f6990e52c7bf8833dcd55 100644 (file)
@@ -36,7 +36,7 @@ public interface InternalCeQueue extends CeQueue {
   /**
    * Peek the oldest task in status {@link org.sonar.db.ce.CeQueueDto.Status#PENDING}.
    * The task status is changed to {@link org.sonar.db.ce.CeQueueDto.Status#IN_PROGRESS}.
-   * Does not return anything if workers are paused or being paused (see {@link #getWorkersPause()}.
+   * Does not return anything if workers are paused or being paused (see {@link #getWorkersPauseStatus()}.
    *
    * <p>Only a single task can be peeked by project.</p>
    *
index 907a2d477af355c48aca9be695581b2cb29c0daf..99d5cefb3d4991dd98b437bff46d7a283c4c40cf 100644 (file)
@@ -72,7 +72,7 @@ public class InternalCeQueueImpl extends CeQueueImpl implements InternalCeQueue
   public Optional<CeTask> peek(String workerUuid) {
     requireNonNull(workerUuid, "workerUuid can't be null");
 
-    if (computeEngineStatus.getStatus() != ComputeEngineStatus.Status.STARTED || getWorkersPause().isPresent()) {
+    if (computeEngineStatus.getStatus() != ComputeEngineStatus.Status.STARTED || getWorkersPauseStatus() != WorkersPauseStatus.RESUMED) {
       return Optional.empty();
     }
     try (DbSession dbSession = dbClient.openSession(false)) {
index 97e25b90db61696534b9c6196547b2bf95fc3cf5..b4982b9e41deee6cfc1a65afbdf8383fd1a0d039 100644 (file)
@@ -99,13 +99,13 @@ public interface CeQueue {
    */
   void resumeWorkers();
 
-  Optional<WorkersPause> getWorkersPause();
+  WorkersPauseStatus getWorkersPauseStatus();
 
   enum SubmitOption {
     UNIQUE_QUEUE_PER_COMPONENT
   }
 
-  enum WorkersPause {
+  enum WorkersPauseStatus {
     /**
      * Pause triggered but at least one task is still in-progress
      */
@@ -114,7 +114,12 @@ public interface CeQueue {
     /**
      * Paused, no tasks are in-progress. Tasks are pending.
      */
-    PAUSED
+    PAUSED,
+
+    /**
+     * Not paused nor pausing
+     */
+    RESUMED
   }
 
 }
index 5e131bbcd7b866556c5af01a5ace0f2e27e9a7f1..6f1762cf99454b0c7db6e2369a46d16c855342f0 100644 (file)
@@ -231,17 +231,17 @@ public class CeQueueImpl implements CeQueue {
   }
 
   @Override
-  public java.util.Optional<WorkersPause> getWorkersPause() {
+  public WorkersPauseStatus getWorkersPauseStatus() {
     try (DbSession dbSession = dbClient.openSession(false)) {
       java.util.Optional<String> propValue = dbClient.internalPropertiesDao().selectByKey(dbSession, InternalProperties.COMPUTE_ENGINE_PAUSE);
       if (!propValue.isPresent() || !propValue.get().equals("true")) {
-        return java.util.Optional.empty();
+        return WorkersPauseStatus.RESUMED;
       }
       int countInProgress = dbClient.ceQueueDao().countByStatus(dbSession, CeQueueDto.Status.IN_PROGRESS);
       if (countInProgress > 0) {
-        return java.util.Optional.of(WorkersPause.PAUSING);
+        return WorkersPauseStatus.PAUSING;
       }
-      return java.util.Optional.of(WorkersPause.PAUSED);
+      return WorkersPauseStatus.PAUSED;
     }
   }
 
index fc30d4d05eea5281d73a3ee413d3772b01e4b5a0..1a8a9a4c46f213d55d89389ce3e6575de3982eb6 100644 (file)
@@ -19,7 +19,6 @@
  */
 package org.sonar.server.ce.ws;
 
-import java.util.Optional;
 import org.sonar.api.server.ws.Request;
 import org.sonar.api.server.ws.Response;
 import org.sonar.api.server.ws.WebService;
@@ -60,17 +59,21 @@ public class InfoAction implements CeWsAction {
     }
 
     Ce.InfoWsResponse.Builder builder = Ce.InfoWsResponse.newBuilder();
-    Optional<CeQueue.WorkersPause> pause = ceQueue.getWorkersPause();
-    builder.setWorkersPaused(isPaused(pause));
-    builder.setWorkersPauseRequested(isPauseRequested(pause));
+    CeQueue.WorkersPauseStatus status = ceQueue.getWorkersPauseStatus();
+    builder.setWorkersPauseStatus(convert(status));
     WsUtils.writeProtobuf(builder.build(), request, response);
   }
 
-  private static boolean isPaused(Optional<CeQueue.WorkersPause> pause) {
-    return pause.isPresent() && pause.get() == CeQueue.WorkersPause.PAUSED;
-  }
-
-  private static boolean isPauseRequested(Optional<CeQueue.WorkersPause> pause) {
-    return pause.isPresent() && pause.get() == CeQueue.WorkersPause.PAUSING;
+  private Ce.WorkersPauseStatus convert(CeQueue.WorkersPauseStatus status) {
+    switch (status) {
+      case PAUSING:
+        return Ce.WorkersPauseStatus.PAUSING;
+      case PAUSED:
+        return Ce.WorkersPauseStatus.PAUSED;
+      case RESUMED:
+        return Ce.WorkersPauseStatus.RESUMED;
+      default:
+        throw new IllegalStateException("Unsupported WorkersPauseStatus: " + status);
+    }
   }
 }
index f1c8aec60cba7a997ceb4efc0bd5928870943f25..840ce8325fe44f30b048e3a3f9e7ff62837605ad 100644 (file)
@@ -1,4 +1,3 @@
 {
-  "workersPaused": false,
-  "workersPauseRequested": true
+  "workersPauseStatus": "PAUSING"
 }
index 830d8c55255d22a85b01a6635a8d8fde30773a6c..739fae9c9f7bfaf88843949ed7a751f080eb109b 100644 (file)
@@ -388,10 +388,10 @@ public class CeQueueImplTest {
     submit(CeTaskTypes.REPORT, "PROJECT_1");
     // task is pending
 
-    assertThat(underTest.getWorkersPause()).isEmpty();
+    assertThat(underTest.getWorkersPauseStatus()).isEqualTo(CeQueue.WorkersPauseStatus.RESUMED);
 
     underTest.pauseWorkers();
-    assertThat(underTest.getWorkersPause()).hasValue(CeQueue.WorkersPause.PAUSED);
+    assertThat(underTest.getWorkersPauseStatus()).isEqualTo(CeQueue.WorkersPauseStatus.PAUSED);
   }
 
   @Test
@@ -400,19 +400,19 @@ public class CeQueueImplTest {
     db.getDbClient().ceQueueDao().peek(session, WORKER_UUID, MAX_EXECUTION_COUNT);
     // task is in-progress
 
-    assertThat(underTest.getWorkersPause()).isEmpty();
+    assertThat(underTest.getWorkersPauseStatus()).isEqualTo(CeQueue.WorkersPauseStatus.RESUMED);
 
     underTest.pauseWorkers();
-    assertThat(underTest.getWorkersPause()).hasValue(CeQueue.WorkersPause.PAUSING);
+    assertThat(underTest.getWorkersPauseStatus()).isEqualTo(CeQueue.WorkersPauseStatus.PAUSING);
   }
 
   @Test
   public void resumeWorkers_does_nothing_if_not_paused() {
-    assertThat(underTest.getWorkersPause()).isEmpty();
+    assertThat(underTest.getWorkersPauseStatus()).isEqualTo(CeQueue.WorkersPauseStatus.RESUMED);
 
     underTest.resumeWorkers();
 
-    assertThat(underTest.getWorkersPause()).isEmpty();
+    assertThat(underTest.getWorkersPauseStatus()).isEqualTo(CeQueue.WorkersPauseStatus.RESUMED);
   }
 
   @Test
@@ -422,19 +422,19 @@ public class CeQueueImplTest {
     // task is in-progress
 
     underTest.pauseWorkers();
-    assertThat(underTest.getWorkersPause()).hasValue(CeQueue.WorkersPause.PAUSING);
+    assertThat(underTest.getWorkersPauseStatus()).isEqualTo(CeQueue.WorkersPauseStatus.PAUSING);
 
     underTest.resumeWorkers();
-    assertThat(underTest.getWorkersPause()).isEmpty();
+    assertThat(underTest.getWorkersPauseStatus()).isEqualTo(CeQueue.WorkersPauseStatus.RESUMED);
   }
 
   @Test
   public void resumeWorkers_resumes_paused_workers() {
     underTest.pauseWorkers();
-    assertThat(underTest.getWorkersPause()).hasValue(CeQueue.WorkersPause.PAUSED);
+    assertThat(underTest.getWorkersPauseStatus()).isEqualTo(CeQueue.WorkersPauseStatus.PAUSED);
 
     underTest.resumeWorkers();
-    assertThat(underTest.getWorkersPause()).isEmpty();
+    assertThat(underTest.getWorkersPauseStatus()).isEqualTo(CeQueue.WorkersPauseStatus.RESUMED);
   }
 
   private void verifyCeTask(CeTaskSubmit taskSubmit, CeTask task, @Nullable ComponentDto componentDto) {
index 1e2a4bae142513b8ca95ecc1ff15b8ec676941c5..ab3122e44c383b69e85b8d6f696f8a81bc12c572 100644 (file)
@@ -19,7 +19,6 @@
  */
 package org.sonar.server.ce.ws;
 
-import java.util.Optional;
 import org.junit.Rule;
 import org.junit.Test;
 import org.junit.rules.ExpectedException;
@@ -60,7 +59,7 @@ public class InfoActionTest {
   @Test
   public void test_example_of_response() {
     userSession.logIn().setSystemAdministrator();
-    when(ceQueue.getWorkersPause()).thenReturn(Optional.of(CeQueue.WorkersPause.PAUSING));
+    when(ceQueue.getWorkersPauseStatus()).thenReturn(CeQueue.WorkersPauseStatus.PAUSING);
 
     ws.newRequest().execute().assertJson(ws.getDef().responseExampleAsString());
   }
@@ -68,31 +67,28 @@ public class InfoActionTest {
   @Test
   public void test_workers_in_pausing_state() {
     userSession.logIn().setSystemAdministrator();
-    when(ceQueue.getWorkersPause()).thenReturn(Optional.of(CeQueue.WorkersPause.PAUSING));
+    when(ceQueue.getWorkersPauseStatus()).thenReturn(CeQueue.WorkersPauseStatus.PAUSING);
 
     Ce.InfoWsResponse response = ws.newRequest().executeProtobuf(Ce.InfoWsResponse.class);
-    assertThat(response.getWorkersPaused()).isFalse();
-    assertThat(response.getWorkersPauseRequested()).isTrue();
+    assertThat(response.getWorkersPauseStatus()).isEqualTo(Ce.WorkersPauseStatus.PAUSING);
   }
 
   @Test
   public void test_workers_in_paused_state() {
     userSession.logIn().setSystemAdministrator();
-    when(ceQueue.getWorkersPause()).thenReturn(Optional.of(CeQueue.WorkersPause.PAUSED));
+    when(ceQueue.getWorkersPauseStatus()).thenReturn(CeQueue.WorkersPauseStatus.PAUSED);
 
     Ce.InfoWsResponse response = ws.newRequest().executeProtobuf(Ce.InfoWsResponse.class);
-    assertThat(response.getWorkersPaused()).isTrue();
-    assertThat(response.getWorkersPauseRequested()).isFalse();
+    assertThat(response.getWorkersPauseStatus()).isEqualTo(Ce.WorkersPauseStatus.PAUSED);
   }
 
   @Test
   public void test_workers_in_resumed_state() {
     userSession.logIn().setSystemAdministrator();
-    when(ceQueue.getWorkersPause()).thenReturn(Optional.empty());
+    when(ceQueue.getWorkersPauseStatus()).thenReturn(CeQueue.WorkersPauseStatus.RESUMED);
 
     Ce.InfoWsResponse response = ws.newRequest().executeProtobuf(Ce.InfoWsResponse.class);
-    assertThat(response.getWorkersPaused()).isFalse();
-    assertThat(response.getWorkersPauseRequested()).isFalse();
+    assertThat(response.getWorkersPauseStatus()).isEqualTo(Ce.WorkersPauseStatus.RESUMED);
   }
 
   @Test
@@ -120,10 +116,9 @@ public class InfoActionTest {
   public void authenticate_with_passcode() {
     userSession.anonymous();
     when(passcode.isValid(any())).thenReturn(true);
-    when(ceQueue.getWorkersPause()).thenReturn(Optional.empty());
+    when(ceQueue.getWorkersPauseStatus()).thenReturn(CeQueue.WorkersPauseStatus.RESUMED);
 
     Ce.InfoWsResponse response = ws.newRequest().executeProtobuf(Ce.InfoWsResponse.class);
-    assertThat(response.getWorkersPaused()).isFalse();
-    assertThat(response.getWorkersPauseRequested()).isFalse();
+    assertThat(response.getWorkersPauseStatus()).isEqualTo(Ce.WorkersPauseStatus.RESUMED);
   }
 }
index b52038250c0546c2fa8dc157ce964a891e89dd10..76d8446fcbfbf1494974dd45810cbba3abfde961 100644 (file)
@@ -59,8 +59,13 @@ message ComponentResponse {
 
 // GET api/ce/info
 message InfoWsResponse {
-  optional bool workersPaused = 1;
-  optional bool workersPauseRequested = 2;
+  optional WorkersPauseStatus workersPauseStatus = 1;
+}
+
+enum WorkersPauseStatus {
+  RESUMED = 0;
+  PAUSING = 1;
+  PAUSED = 2;
 }
 
 // GET api/ce/task_types
index d87e83331b364040ad24de0afe67402d970ec9ad..fc4f73387d4274b2f30f65e01418cfdee3369714 100644 (file)
@@ -63,8 +63,7 @@ public class CeWorkersPauseTest {
   public void pause_and_resume_workers() throws IOException {
     tester.wsClient().ce().pause();
     // no in-progress tasks --> already paused
-    assertThat(tester.wsClient().ce().info().getWorkersPaused()).isTrue();
-    assertThat(tester.wsClient().ce().info().getWorkersPauseRequested()).isFalse();
+    assertThat(tester.wsClient().ce().info().getWorkersPauseStatus()).isEqualTo(Ce.WorkersPauseStatus.PAUSED);
 
     // run analysis
     File projectDir = temp.newFolder();
@@ -79,8 +78,7 @@ public class CeWorkersPauseTest {
 
     // workers are resumed
     tester.wsClient().ce().resume();
-    assertThat(tester.wsClient().ce().info().getWorkersPaused()).isFalse();
-    assertThat(tester.wsClient().ce().info().getWorkersPauseRequested()).isFalse();
+    assertThat(tester.wsClient().ce().info().getWorkersPauseStatus()).isEqualTo(Ce.WorkersPauseStatus.RESUMED);
 
     while (!isQueueEmpty()) {
       Uninterruptibles.sleepUninterruptibly(100, TimeUnit.MILLISECONDS);