You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@aurora.apache.org by dm...@apache.org on 2016/12/23 10:07:27 UTC

aurora git commit: Expose stats on deleted tasks in TaskHistoryPruner

Repository: aurora
Updated Branches:
  refs/heads/master 61e6bc6c4 -> 436a2adb8


Expose stats on deleted tasks in TaskHistoryPruner

Bugs closed: AURORA-1855

Reviewed at https://reviews.apache.org/r/54990/


Project: http://git-wip-us.apache.org/repos/asf/aurora/repo
Commit: http://git-wip-us.apache.org/repos/asf/aurora/commit/436a2adb
Tree: http://git-wip-us.apache.org/repos/asf/aurora/tree/436a2adb
Diff: http://git-wip-us.apache.org/repos/asf/aurora/diff/436a2adb

Branch: refs/heads/master
Commit: 436a2adb8ea16df6aecc02f6556d73a77679adfb
Parents: 61e6bc6
Author: Mehrdad Nurolahzade <me...@nurolahzade.com>
Authored: Fri Dec 23 02:07:08 2016 -0800
Committer: David McLaughlin <dm...@twitter.com>
Committed: Fri Dec 23 02:07:08 2016 -0800

----------------------------------------------------------------------
 .../aurora/scheduler/pruning/TaskHistoryPruner.java | 10 +++++++++-
 .../scheduler/pruning/TaskHistoryPrunerTest.java    | 16 +++++++++++++++-
 2 files changed, 24 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/aurora/blob/436a2adb/src/main/java/org/apache/aurora/scheduler/pruning/TaskHistoryPruner.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/aurora/scheduler/pruning/TaskHistoryPruner.java b/src/main/java/org/apache/aurora/scheduler/pruning/TaskHistoryPruner.java
index bb973ca..f778494 100644
--- a/src/main/java/org/apache/aurora/scheduler/pruning/TaskHistoryPruner.java
+++ b/src/main/java/org/apache/aurora/scheduler/pruning/TaskHistoryPruner.java
@@ -14,6 +14,7 @@
 package org.apache.aurora.scheduler.pruning;
 
 import java.util.Set;
+import java.util.concurrent.atomic.AtomicLong;
 
 import javax.inject.Inject;
 
@@ -27,6 +28,7 @@ import com.google.common.eventbus.Subscribe;
 import org.apache.aurora.common.application.Lifecycle;
 import org.apache.aurora.common.quantity.Amount;
 import org.apache.aurora.common.quantity.Time;
+import org.apache.aurora.common.stats.StatsProvider;
 import org.apache.aurora.common.util.Clock;
 import org.apache.aurora.gen.apiConstants;
 import org.apache.aurora.scheduler.BatchWorker;
@@ -56,6 +58,8 @@ public class TaskHistoryPruner implements EventSubscriber {
   private static final Logger LOG = LoggerFactory.getLogger(TaskHistoryPruner.class);
   private static final String FATAL_ERROR_FORMAT =
       "Unexpected problem pruning task history for %s. Triggering shutdown";
+  @VisibleForTesting
+  static final String TASKS_PRUNED = "tasks_pruned";
 
   private final DelayExecutor executor;
   private final StateManager stateManager;
@@ -64,6 +68,7 @@ public class TaskHistoryPruner implements EventSubscriber {
   private final Storage storage;
   private final Lifecycle lifecycle;
   private final TaskEventBatchWorker batchWorker;
+  private final AtomicLong prunedTasksCount;
 
   private final Predicate<IScheduledTask> safeToDelete = new Predicate<IScheduledTask>() {
     @Override
@@ -97,7 +102,8 @@ public class TaskHistoryPruner implements EventSubscriber {
       HistoryPrunnerSettings settings,
       Storage storage,
       Lifecycle lifecycle,
-      TaskEventBatchWorker batchWorker) {
+      TaskEventBatchWorker batchWorker,
+      StatsProvider statsProvider) {
 
     this.executor = requireNonNull(executor);
     this.stateManager = requireNonNull(stateManager);
@@ -106,6 +112,7 @@ public class TaskHistoryPruner implements EventSubscriber {
     this.storage = requireNonNull(storage);
     this.lifecycle = requireNonNull(lifecycle);
     this.batchWorker = requireNonNull(batchWorker);
+    this.prunedTasksCount = statsProvider.makeCounter(TASKS_PRUNED);
   }
 
   @VisibleForTesting
@@ -139,6 +146,7 @@ public class TaskHistoryPruner implements EventSubscriber {
       stateManager.deleteTasks(storeProvider, taskIds);
       return BatchWorker.NO_RESULT;
     });
+    prunedTasksCount.addAndGet(taskIds.size());
   }
 
   @VisibleForTesting

http://git-wip-us.apache.org/repos/asf/aurora/blob/436a2adb/src/test/java/org/apache/aurora/scheduler/pruning/TaskHistoryPrunerTest.java
----------------------------------------------------------------------
diff --git a/src/test/java/org/apache/aurora/scheduler/pruning/TaskHistoryPrunerTest.java b/src/test/java/org/apache/aurora/scheduler/pruning/TaskHistoryPrunerTest.java
index 8469596..14e4040 100644
--- a/src/test/java/org/apache/aurora/scheduler/pruning/TaskHistoryPrunerTest.java
+++ b/src/test/java/org/apache/aurora/scheduler/pruning/TaskHistoryPrunerTest.java
@@ -38,6 +38,7 @@ import org.apache.aurora.scheduler.state.StateManager;
 import org.apache.aurora.scheduler.storage.entities.IJobKey;
 import org.apache.aurora.scheduler.storage.entities.IScheduledTask;
 import org.apache.aurora.scheduler.storage.testing.StorageTestUtil;
+import org.apache.aurora.scheduler.testing.FakeStatsProvider;
 import org.easymock.Capture;
 import org.easymock.EasyMock;
 import org.junit.After;
@@ -49,9 +50,11 @@ import static org.apache.aurora.gen.ScheduleStatus.KILLED;
 import static org.apache.aurora.gen.ScheduleStatus.LOST;
 import static org.apache.aurora.gen.ScheduleStatus.RUNNING;
 import static org.apache.aurora.gen.ScheduleStatus.STARTING;
+import static org.apache.aurora.scheduler.pruning.TaskHistoryPruner.TASKS_PRUNED;
 import static org.apache.aurora.scheduler.testing.BatchWorkerUtil.expectBatchExecute;
 import static org.easymock.EasyMock.eq;
 import static org.easymock.EasyMock.expectLastCall;
+import static org.junit.Assert.assertEquals;
 
 public class TaskHistoryPrunerTest extends EasyMockTest {
   private static final String SLAVE_HOST = "HOST_A";
@@ -68,6 +71,7 @@ public class TaskHistoryPrunerTest extends EasyMockTest {
   private TaskHistoryPruner pruner;
   private Closer closer;
   private Command shutdownCommand;
+  private FakeStatsProvider statsProvider;
 
   @Before
   public void setUp() throws Exception {
@@ -78,6 +82,7 @@ public class TaskHistoryPrunerTest extends EasyMockTest {
     storageUtil.expectOperations();
     shutdownCommand = createMock(Command.class);
     TaskEventBatchWorker batchWorker = createMock(TaskEventBatchWorker.class);
+    statsProvider = new FakeStatsProvider();
     expectBatchExecute(batchWorker, storageUtil.storage, control).anyTimes();
 
     pruner = new TaskHistoryPruner(
@@ -87,7 +92,8 @@ public class TaskHistoryPrunerTest extends EasyMockTest {
         new HistoryPrunnerSettings(ONE_DAY, ONE_MINUTE, PER_JOB_HISTORY),
         storageUtil.storage,
         new Lifecycle(shutdownCommand),
-        batchWorker);
+        batchWorker,
+        statsProvider);
     closer = Closer.create();
   }
 
@@ -146,9 +152,11 @@ public class TaskHistoryPrunerTest extends EasyMockTest {
 
     control.replay();
 
+    assertEquals(0L, statsProvider.getValue(TASKS_PRUNED));
     for (IScheduledTask task : ImmutableList.of(a, b, c, d, e)) {
       pruner.recordStateChange(TaskStateChange.initialized(task));
     }
+    assertEquals(2L, statsProvider.getValue(TASKS_PRUNED));
   }
 
   @Test
@@ -184,8 +192,10 @@ public class TaskHistoryPrunerTest extends EasyMockTest {
     // Capture future for inactive task "a"
     changeState(running, killed);
     clock.advance(ONE_HOUR);
+    assertEquals(0L, statsProvider.getValue(TASKS_PRUNED));
     // Execute future to prune task "a" from the system.
     delayedDelete.getValue().run();
+    assertEquals(1L, statsProvider.getValue(TASKS_PRUNED));
   }
 
   @Test
@@ -234,7 +244,9 @@ public class TaskHistoryPrunerTest extends EasyMockTest {
     changeState(a, aKilled);
     changeState(b, bKilled);
     changeState(c, cLost);
+    assertEquals(0L, statsProvider.getValue(TASKS_PRUNED));
     changeState(d, dLost);
+    assertEquals(2L, statsProvider.getValue(TASKS_PRUNED));
   }
 
   @Test
@@ -253,7 +265,9 @@ public class TaskHistoryPrunerTest extends EasyMockTest {
 
     changeState(running, killed);
     clock.advance(ONE_HOUR);
+    assertEquals(0L, statsProvider.getValue(TASKS_PRUNED));
     delayedDelete.getValue().run();
+    assertEquals(0L, statsProvider.getValue(TASKS_PRUNED));
   }
 
   private void expectDeleteTasks(String... tasks) {