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 2017/05/08 23:54:24 UTC
aurora git commit: Adding metrics for removals from BiCache
Repository: aurora
Updated Branches:
refs/heads/master 85fed6ba9 -> b0d24f4d5
Adding metrics for removals from BiCache
Reviewed at https://reviews.apache.org/r/58636/
Project: http://git-wip-us.apache.org/repos/asf/aurora/repo
Commit: http://git-wip-us.apache.org/repos/asf/aurora/commit/b0d24f4d
Tree: http://git-wip-us.apache.org/repos/asf/aurora/tree/b0d24f4d
Diff: http://git-wip-us.apache.org/repos/asf/aurora/diff/b0d24f4d
Branch: refs/heads/master
Commit: b0d24f4d5f5db8fc2fac306215f26b114b12009d
Parents: 85fed6b
Author: Reza Motamedi <re...@gmail.com>
Authored: Mon May 8 16:37:09 2017 -0700
Committer: David McLaughlin <dm...@twitter.com>
Committed: Mon May 8 16:37:09 2017 -0700
----------------------------------------------------------------------
.../aurora/scheduler/preemptor/BiCache.java | 24 +++++++++----
.../scheduler/preemptor/PreemptorModule.java | 2 +-
.../scheduler/scheduling/SchedulingModule.java | 2 +-
.../aurora/scheduler/preemptor/BiCacheTest.java | 36 ++++++++++++++------
.../preemptor/PendingTaskProcessorTest.java | 9 ++---
5 files changed, 51 insertions(+), 22 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/aurora/blob/b0d24f4d/src/main/java/org/apache/aurora/scheduler/preemptor/BiCache.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/aurora/scheduler/preemptor/BiCache.java b/src/main/java/org/apache/aurora/scheduler/preemptor/BiCache.java
index 70390f6..7616012 100644
--- a/src/main/java/org/apache/aurora/scheduler/preemptor/BiCache.java
+++ b/src/main/java/org/apache/aurora/scheduler/preemptor/BiCache.java
@@ -16,6 +16,7 @@ package org.apache.aurora.scheduler.preemptor;
import java.util.Map;
import java.util.Set;
import java.util.concurrent.TimeUnit;
+import java.util.concurrent.atomic.AtomicLong;
import javax.inject.Inject;
@@ -48,16 +49,19 @@ public class BiCache<K, V> {
public static class BiCacheSettings {
private final Amount<Long, Time> expireAfter;
- private final String cacheSizeStatName;
+ private final String cacheName;
- public BiCacheSettings(Amount<Long, Time> expireAfter, String cacheSizeStatName) {
+ public BiCacheSettings(Amount<Long, Time> expireAfter, String cacheName) {
this.expireAfter = requireNonNull(expireAfter);
- this.cacheSizeStatName = requireNonNull(cacheSizeStatName);
+ this.cacheName = requireNonNull(cacheName);
}
}
private final Cache<K, V> cache;
private final Multimap<V, K> inverse = HashMultimap.create();
+ private final AtomicLong removalCounter;
+ private final AtomicLong expirationCounter;
+ private final AtomicLong explictRemovalCounter;
@Inject
public BiCache(
@@ -77,14 +81,21 @@ public class BiCache<K, V> {
.removalListener(new RemovalListener<K, V>() {
@Override
public void onRemoval(RemovalNotification<K, V> notification) {
+ removalCounter.getAndIncrement();
+ if (notification.wasEvicted()) {
+ expirationCounter.incrementAndGet();
+ }
inverse.remove(notification.getValue(), notification.getKey());
}
})
.build();
- statsProvider.makeGauge(
- settings.cacheSizeStatName,
- cache::size);
+ statsProvider.makeGauge(settings.cacheName + "_cache_size", cache::size);
+ removalCounter = statsProvider.makeCounter(settings.cacheName + "_cache_removals");
+ expirationCounter = statsProvider.makeCounter(
+ settings.cacheName + "_cache_expiration_removals");
+ explictRemovalCounter = statsProvider.makeCounter(
+ settings.cacheName + "_cache_explicit_removals");
}
/**
@@ -130,6 +141,7 @@ public class BiCache<K, V> {
* @param value Value to remove.
*/
public synchronized void remove(K key, V value) {
+ explictRemovalCounter.getAndIncrement();
inverse.remove(value, key);
cache.invalidate(key);
}
http://git-wip-us.apache.org/repos/asf/aurora/blob/b0d24f4d/src/main/java/org/apache/aurora/scheduler/preemptor/PreemptorModule.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/aurora/scheduler/preemptor/PreemptorModule.java b/src/main/java/org/apache/aurora/scheduler/preemptor/PreemptorModule.java
index 66d2029..92087eb 100644
--- a/src/main/java/org/apache/aurora/scheduler/preemptor/PreemptorModule.java
+++ b/src/main/java/org/apache/aurora/scheduler/preemptor/PreemptorModule.java
@@ -108,7 +108,7 @@ public class PreemptorModule extends AbstractModule {
.annotatedWith(PendingTaskProcessor.PreemptionDelay.class)
.toInstance(preemptionDelay);
bind(BiCacheSettings.class).toInstance(
- new BiCacheSettings(PREEMPTION_SLOT_HOLD_TIME.get(), "preemption_slot_cache_size"));
+ new BiCacheSettings(PREEMPTION_SLOT_HOLD_TIME.get(), "preemption_slot"));
bind(new TypeLiteral<BiCache<PreemptionProposal, TaskGroupKey>>() { })
.in(Singleton.class);
bind(new TypeLiteral<Integer>() { })
http://git-wip-us.apache.org/repos/asf/aurora/blob/b0d24f4d/src/main/java/org/apache/aurora/scheduler/scheduling/SchedulingModule.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/aurora/scheduler/scheduling/SchedulingModule.java b/src/main/java/org/apache/aurora/scheduler/scheduling/SchedulingModule.java
index 03a0e84..0415016 100644
--- a/src/main/java/org/apache/aurora/scheduler/scheduling/SchedulingModule.java
+++ b/src/main/java/org/apache/aurora/scheduler/scheduling/SchedulingModule.java
@@ -133,7 +133,7 @@ public class SchedulingModule extends AbstractModule {
protected void configure() {
bind(new TypeLiteral<BiCache<String, TaskGroupKey>>() { }).in(Singleton.class);
bind(BiCache.BiCacheSettings.class).toInstance(
- new BiCache.BiCacheSettings(RESERVATION_DURATION.get(), "reservation_cache_size"));
+ new BiCache.BiCacheSettings(RESERVATION_DURATION.get(), "reservation"));
bind(TaskScheduler.class).to(TaskScheduler.TaskSchedulerImpl.class);
bind(TaskScheduler.TaskSchedulerImpl.class).in(Singleton.class);
expose(TaskScheduler.class);
http://git-wip-us.apache.org/repos/asf/aurora/blob/b0d24f4d/src/test/java/org/apache/aurora/scheduler/preemptor/BiCacheTest.java
----------------------------------------------------------------------
diff --git a/src/test/java/org/apache/aurora/scheduler/preemptor/BiCacheTest.java b/src/test/java/org/apache/aurora/scheduler/preemptor/BiCacheTest.java
index bac8f33..4e27fbb 100644
--- a/src/test/java/org/apache/aurora/scheduler/preemptor/BiCacheTest.java
+++ b/src/test/java/org/apache/aurora/scheduler/preemptor/BiCacheTest.java
@@ -31,7 +31,11 @@ import static org.junit.Assert.assertEquals;
public class BiCacheTest {
private static final Amount<Long, Time> HOLD_DURATION = Amount.of(1L, Time.MINUTES);
- private static final String STAT_NAME = "cache_size_stat";
+ private static final String CACHE_NAME = "TEST";
+ private static final String CACHE_SIZE_STAT_NAME = "TEST_cache_size";
+ private static final String CACHE_REMOVAL_STAT_NAME = "TEST_cache_removals";
+ private static final String CACHE_EXPLICIT_REMOVAL_STAT_NAME = "TEST_cache_explicit_removals";
+ private static final String CACHE_EXPIRATION_REMOVAL_STAT_NAME = "TEST_cache_expiration_removals";
private static final String KEY_1 = "Key 1";
private static final String KEY_2 = "Key 2";
private static final Optional<Integer> NO_VALUE = Optional.absent();
@@ -44,31 +48,43 @@ public class BiCacheTest {
public void setUp() {
statsProvider = new FakeStatsProvider();
clock = new FakeClock();
- biCache = new BiCache<>(statsProvider, new BiCacheSettings(HOLD_DURATION, STAT_NAME), clock);
+ biCache = new BiCache<>(statsProvider, new BiCacheSettings(HOLD_DURATION, CACHE_NAME), clock);
}
@Test
public void testExpiration() {
biCache.put(KEY_1, 1);
assertEquals(Optional.of(1), biCache.get(KEY_1));
- assertEquals(1L, statsProvider.getLongValue(STAT_NAME));
+ assertEquals(1L, statsProvider.getLongValue(CACHE_SIZE_STAT_NAME));
+ assertEquals(0L, statsProvider.getLongValue(CACHE_REMOVAL_STAT_NAME));
+ assertEquals(0L, statsProvider.getLongValue(CACHE_EXPIRATION_REMOVAL_STAT_NAME));
+ assertEquals(0L, statsProvider.getLongValue(CACHE_EXPLICIT_REMOVAL_STAT_NAME));
clock.advance(HOLD_DURATION);
assertEquals(NO_VALUE, biCache.get(KEY_1));
assertEquals(ImmutableSet.of(), biCache.getByValue(1));
- assertEquals(0L, statsProvider.getLongValue(STAT_NAME));
+ assertEquals(0L, statsProvider.getLongValue(CACHE_SIZE_STAT_NAME));
+ assertEquals(1L, statsProvider.getLongValue(CACHE_REMOVAL_STAT_NAME));
+ assertEquals(1L, statsProvider.getLongValue(CACHE_EXPIRATION_REMOVAL_STAT_NAME));
+ assertEquals(0L, statsProvider.getLongValue(CACHE_EXPLICIT_REMOVAL_STAT_NAME));
}
@Test
public void testRemoval() {
biCache.put(KEY_1, 1);
- assertEquals(1L, statsProvider.getLongValue(STAT_NAME));
+ assertEquals(1L, statsProvider.getLongValue(CACHE_SIZE_STAT_NAME));
+ assertEquals(0L, statsProvider.getLongValue(CACHE_REMOVAL_STAT_NAME));
+ assertEquals(0L, statsProvider.getLongValue(CACHE_EXPIRATION_REMOVAL_STAT_NAME));
+ assertEquals(0L, statsProvider.getLongValue(CACHE_EXPLICIT_REMOVAL_STAT_NAME));
assertEquals(Optional.of(1), biCache.get(KEY_1));
assertEquals(NO_VALUE, biCache.get(KEY_2));
biCache.remove(KEY_1, 1);
assertEquals(NO_VALUE, biCache.get(KEY_1));
- assertEquals(0L, statsProvider.getLongValue(STAT_NAME));
+ assertEquals(0L, statsProvider.getLongValue(CACHE_SIZE_STAT_NAME));
+ assertEquals(1L, statsProvider.getLongValue(CACHE_REMOVAL_STAT_NAME));
+ assertEquals(0L, statsProvider.getLongValue(CACHE_EXPIRATION_REMOVAL_STAT_NAME));
+ assertEquals(1L, statsProvider.getLongValue(CACHE_EXPLICIT_REMOVAL_STAT_NAME));
}
@Test(expected = NullPointerException.class)
@@ -80,7 +96,7 @@ public class BiCacheTest {
public void testDifferentKeysIdenticalValues() {
biCache.put(KEY_1, 1);
biCache.put(KEY_2, 1);
- assertEquals(2L, statsProvider.getLongValue(STAT_NAME));
+ assertEquals(2L, statsProvider.getLongValue(CACHE_SIZE_STAT_NAME));
assertEquals(Optional.of(1), biCache.get(KEY_1));
assertEquals(Optional.of(1), biCache.get(KEY_2));
@@ -90,13 +106,13 @@ public class BiCacheTest {
assertEquals(NO_VALUE, biCache.get(KEY_1));
assertEquals(Optional.of(1), biCache.get(KEY_2));
assertEquals(ImmutableSet.of(KEY_2), biCache.getByValue(1));
- assertEquals(1L, statsProvider.getLongValue(STAT_NAME));
+ assertEquals(1L, statsProvider.getLongValue(CACHE_SIZE_STAT_NAME));
clock.advance(HOLD_DURATION);
assertEquals(NO_VALUE, biCache.get(KEY_1));
assertEquals(NO_VALUE, biCache.get(KEY_2));
assertEquals(ImmutableSet.of(), biCache.getByValue(1));
- assertEquals(0L, statsProvider.getLongValue(STAT_NAME));
+ assertEquals(0L, statsProvider.getLongValue(CACHE_SIZE_STAT_NAME));
}
@Test
@@ -106,7 +122,7 @@ public class BiCacheTest {
assertEquals(Optional.of(2), biCache.get(KEY_1));
assertEquals(ImmutableSet.of(), biCache.getByValue(1));
assertEquals(ImmutableSet.of(KEY_1), biCache.getByValue(2));
- assertEquals(1L, statsProvider.getLongValue(STAT_NAME));
+ assertEquals(1L, statsProvider.getLongValue(CACHE_SIZE_STAT_NAME));
}
@Test
http://git-wip-us.apache.org/repos/asf/aurora/blob/b0d24f4d/src/test/java/org/apache/aurora/scheduler/preemptor/PendingTaskProcessorTest.java
----------------------------------------------------------------------
diff --git a/src/test/java/org/apache/aurora/scheduler/preemptor/PendingTaskProcessorTest.java b/src/test/java/org/apache/aurora/scheduler/preemptor/PendingTaskProcessorTest.java
index 4da4e9d..c76b3e3 100644
--- a/src/test/java/org/apache/aurora/scheduler/preemptor/PendingTaskProcessorTest.java
+++ b/src/test/java/org/apache/aurora/scheduler/preemptor/PendingTaskProcessorTest.java
@@ -64,7 +64,8 @@ import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
public class PendingTaskProcessorTest extends EasyMockTest {
- private static final String CACHE_STAT = "cache_size";
+ private static final String CACHE_NAME = "TEST";
+ private static final String CACHE_SIZE_STAT_NAME = "TEST_cache_size";
private static final String SLAVE_ID_1 = "slave_id_1";
private static final String SLAVE_ID_2 = "slave_id_2";
private static final IJobKey JOB_A = JobKeys.from("role_a", "env", "job_a");
@@ -98,7 +99,7 @@ public class PendingTaskProcessorTest extends EasyMockTest {
clock = new FakeClock();
slotCache = new BiCache<>(
statsProvider,
- new BiCache.BiCacheSettings(EXPIRATION, CACHE_STAT),
+ new BiCache.BiCacheSettings(EXPIRATION, CACHE_NAME),
clock);
slotFinder = new PendingTaskProcessor(
@@ -133,7 +134,7 @@ public class PendingTaskProcessorTest extends EasyMockTest {
assertEquals(2L, statsProvider.getLongValue(slotSearchStatName(true, true)));
assertEquals(0L, statsProvider.getLongValue(slotSearchStatName(false, true)));
assertEquals(0L, statsProvider.getLongValue(UNMATCHED_TASKS));
- assertEquals(2L, statsProvider.getLongValue(CACHE_STAT));
+ assertEquals(2L, statsProvider.getLongValue(CACHE_SIZE_STAT_NAME));
}
@Test
@@ -212,7 +213,7 @@ public class PendingTaskProcessorTest extends EasyMockTest {
assertTrue(ImmutableSet.of(0L, 2L).contains(
statsProvider.getLongValue(slotSearchStatName(false, true))));
assertEquals(1L, statsProvider.getLongValue(UNMATCHED_TASKS));
- assertEquals(2L, statsProvider.getLongValue(CACHE_STAT));
+ assertEquals(2L, statsProvider.getLongValue(CACHE_SIZE_STAT_NAME));
}
@Test