You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@aurora.apache.org by ma...@apache.org on 2015/05/20 19:51:29 UTC
aurora git commit: Exposing task reconciliation stats.
Repository: aurora
Updated Branches:
refs/heads/master 920263b0e -> 7fd920e0a
Exposing task reconciliation stats.
Bugs closed: AURORA-1047
Reviewed at https://reviews.apache.org/r/34373/
Project: http://git-wip-us.apache.org/repos/asf/aurora/repo
Commit: http://git-wip-us.apache.org/repos/asf/aurora/commit/7fd920e0
Tree: http://git-wip-us.apache.org/repos/asf/aurora/tree/7fd920e0
Diff: http://git-wip-us.apache.org/repos/asf/aurora/diff/7fd920e0
Branch: refs/heads/master
Commit: 7fd920e0a5eed738e9ea019a18290c58b6051e59
Parents: 920263b
Author: Maxim Khutornenko <ma...@apache.org>
Authored: Wed May 20 10:48:35 2015 -0700
Committer: Maxim Khutornenko <ma...@apache.org>
Committed: Wed May 20 10:48:35 2015 -0700
----------------------------------------------------------------------
.../aurora/scheduler/UserTaskLauncher.java | 20 ++++++++++++++++++--
.../aurora/scheduler/UserTaskLauncherTest.java | 15 ++++++++++++---
2 files changed, 30 insertions(+), 5 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/aurora/blob/7fd920e0/src/main/java/org/apache/aurora/scheduler/UserTaskLauncher.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/aurora/scheduler/UserTaskLauncher.java b/src/main/java/org/apache/aurora/scheduler/UserTaskLauncher.java
index f1e5dd2..5af691d 100644
--- a/src/main/java/org/apache/aurora/scheduler/UserTaskLauncher.java
+++ b/src/main/java/org/apache/aurora/scheduler/UserTaskLauncher.java
@@ -36,7 +36,9 @@ import org.apache.aurora.gen.ScheduleStatus;
import org.apache.aurora.scheduler.async.OfferManager;
import org.apache.aurora.scheduler.base.Conversions;
import org.apache.aurora.scheduler.mesos.Driver;
+import org.apache.aurora.scheduler.state.StateChangeResult;
import org.apache.aurora.scheduler.state.StateManager;
+import org.apache.aurora.scheduler.stats.CachedCounters;
import org.apache.aurora.scheduler.storage.Storage;
import org.apache.mesos.Protos.OfferID;
import org.apache.mesos.Protos.TaskStatus;
@@ -61,12 +63,15 @@ public class UserTaskLauncher extends AbstractExecutionThreadService implements
@VisibleForTesting
static final String MEMORY_LIMIT_DISPLAY = "Task used more memory than requested.";
+ private static final String STATUS_STAT_FORMAT = "status_update_%s_%s";
+
private final Storage storage;
private final OfferManager offerManager;
private final StateManager stateManager;
private final Driver driver;
private final BlockingQueue<TaskStatus> pendingUpdates;
private final int maxBatchSize;
+ private final CachedCounters counters;
private final AtomicReference<Thread> threadReference = new AtomicReference<>();
@@ -93,7 +98,8 @@ public class UserTaskLauncher extends AbstractExecutionThreadService implements
StateManager stateManager,
final Driver driver,
@StatusUpdateQueue BlockingQueue<TaskStatus> pendingUpdates,
- @MaxBatchSize Integer maxBatchSize) {
+ @MaxBatchSize Integer maxBatchSize,
+ CachedCounters counters) {
this.storage = requireNonNull(storage);
this.offerManager = requireNonNull(offerManager);
@@ -101,6 +107,7 @@ public class UserTaskLauncher extends AbstractExecutionThreadService implements
this.driver = requireNonNull(driver);
this.pendingUpdates = requireNonNull(pendingUpdates);
this.maxBatchSize = requireNonNull(maxBatchSize);
+ this.counters = requireNonNull(counters);
Stats.exportSize("status_updates_queue_size", this.pendingUpdates);
@@ -181,12 +188,16 @@ public class UserTaskLauncher extends AbstractExecutionThreadService implements
message = Optional.of(MEMORY_LIMIT_DISPLAY);
}
- stateManager.changeState(
+ StateChangeResult result = stateManager.changeState(
storeProvider,
status.getTaskId().getValue(),
Optional.<ScheduleStatus>absent(),
translatedState,
message);
+
+ if (status.hasReason()) {
+ counters.get(statName(status, result)).incrementAndGet();
+ }
}
}
});
@@ -199,4 +210,9 @@ public class UserTaskLauncher extends AbstractExecutionThreadService implements
}
}
}
+
+ @VisibleForTesting
+ static String statName(TaskStatus status, StateChangeResult result) {
+ return String.format(STATUS_STAT_FORMAT, status.getReason(), result);
+ }
}
http://git-wip-us.apache.org/repos/asf/aurora/blob/7fd920e0/src/test/java/org/apache/aurora/scheduler/UserTaskLauncherTest.java
----------------------------------------------------------------------
diff --git a/src/test/java/org/apache/aurora/scheduler/UserTaskLauncherTest.java b/src/test/java/org/apache/aurora/scheduler/UserTaskLauncherTest.java
index f4631c1..fe2fc95 100644
--- a/src/test/java/org/apache/aurora/scheduler/UserTaskLauncherTest.java
+++ b/src/test/java/org/apache/aurora/scheduler/UserTaskLauncherTest.java
@@ -29,9 +29,11 @@ import org.apache.aurora.scheduler.mesos.Driver;
import org.apache.aurora.scheduler.mesos.Offers;
import org.apache.aurora.scheduler.state.StateChangeResult;
import org.apache.aurora.scheduler.state.StateManager;
+import org.apache.aurora.scheduler.stats.CachedCounters;
import org.apache.aurora.scheduler.storage.Storage.StorageException;
import org.apache.aurora.scheduler.storage.entities.IHostAttributes;
import org.apache.aurora.scheduler.storage.testing.StorageTestUtil;
+import org.apache.aurora.scheduler.testing.FakeStatsProvider;
import org.apache.mesos.Protos.OfferID;
import org.apache.mesos.Protos.TaskID;
import org.apache.mesos.Protos.TaskState;
@@ -43,8 +45,10 @@ import org.junit.Test;
import static org.apache.aurora.gen.ScheduleStatus.FAILED;
import static org.apache.aurora.gen.ScheduleStatus.RUNNING;
+import static org.apache.aurora.scheduler.UserTaskLauncher.statName;
import static org.easymock.EasyMock.expect;
import static org.easymock.EasyMock.expectLastCall;
+import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
public class UserTaskLauncherTest extends EasyMockTest {
@@ -61,6 +65,7 @@ public class UserTaskLauncherTest extends EasyMockTest {
private StorageTestUtil storageUtil;
private Driver driver;
private BlockingQueue<TaskStatus> queue;
+ private FakeStatsProvider stats;
private UserTaskLauncher launcher;
@@ -71,6 +76,7 @@ public class UserTaskLauncherTest extends EasyMockTest {
storageUtil = new StorageTestUtil(this);
driver = createMock(Driver.class);
queue = new LinkedBlockingQueue<>();
+ stats = new FakeStatsProvider();
launcher = new UserTaskLauncher(
storageUtil.storage,
@@ -78,7 +84,8 @@ public class UserTaskLauncherTest extends EasyMockTest {
stateManager,
driver,
queue,
- 1000);
+ 1000,
+ new CachedCounters(stats));
launcher.startAsync();
}
@@ -101,6 +108,7 @@ public class UserTaskLauncherTest extends EasyMockTest {
public void testForwardsStatusUpdates() throws Exception {
TaskStatus status = TaskStatus.newBuilder()
.setState(TaskState.TASK_RUNNING)
+ .setReason(TaskStatus.Reason.REASON_RECONCILIATION)
.setTaskId(TaskID.newBuilder().setValue(TASK_ID_A))
.setMessage("fake message")
.build();
@@ -126,8 +134,8 @@ public class UserTaskLauncherTest extends EasyMockTest {
control.replay();
assertTrue(launcher.statusUpdate(status));
-
assertTrue(latch.await(5L, TimeUnit.SECONDS));
+ assertEquals(1L, stats.getValue(statName(status, StateChangeResult.SUCCESS)));
}
@Test
@@ -242,7 +250,8 @@ public class UserTaskLauncherTest extends EasyMockTest {
stateManager,
driver,
queue,
- 1000);
+ 1000,
+ new CachedCounters(stats));
expect(queue.add(EasyMock.<TaskStatus>anyObject()))
.andReturn(true);