Repository: aurora Updated Branches: refs/heads/master d46d1df96 -> 6f9383c30
AURORA-1922 Expose stats on the number of jobs stored in MemCronJobStore This patch exposes stats on the size of `jobs` map in `MemCronJobStore`. Reviewed at https://reviews.apache.org/r/58863/ Project: http://git-wip-us.apache.org/repos/asf/aurora/repo Commit: http://git-wip-us.apache.org/repos/asf/aurora/commit/6f9383c3 Tree: http://git-wip-us.apache.org/repos/asf/aurora/tree/6f9383c3 Diff: http://git-wip-us.apache.org/repos/asf/aurora/diff/6f9383c3 Branch: refs/heads/master Commit: 6f9383c30bdf90853522173a95869defc04cf0f3 Parents: d46d1df Author: Mehrdad Nurolahzade <[email protected]> Authored: Tue May 2 21:25:03 2017 -0700 Committer: Mehrdad Nurolahzade <[email protected]> Committed: Tue May 2 21:25:03 2017 -0700 ---------------------------------------------------------------------- .../scheduler/storage/mem/MemCronJobStore.java | 12 ++++++++++++ .../storage/AbstractCronJobStoreTest.java | 8 ++++---- .../storage/mem/MemCronJobStoreTest.java | 20 +++++++++++++++++++- 3 files changed, 35 insertions(+), 5 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/aurora/blob/6f9383c3/src/main/java/org/apache/aurora/scheduler/storage/mem/MemCronJobStore.java ---------------------------------------------------------------------- diff --git a/src/main/java/org/apache/aurora/scheduler/storage/mem/MemCronJobStore.java b/src/main/java/org/apache/aurora/scheduler/storage/mem/MemCronJobStore.java index 50cfb35..3fd7d30 100644 --- a/src/main/java/org/apache/aurora/scheduler/storage/mem/MemCronJobStore.java +++ b/src/main/java/org/apache/aurora/scheduler/storage/mem/MemCronJobStore.java @@ -15,11 +15,15 @@ package org.apache.aurora.scheduler.storage.mem; import java.util.Map; +import javax.inject.Inject; + +import com.google.common.annotations.VisibleForTesting; import com.google.common.base.Optional; import com.google.common.collect.ImmutableSet; import com.google.common.collect.Maps; import org.apache.aurora.common.inject.TimedInterceptor.Timed; +import org.apache.aurora.common.stats.StatsProvider; import org.apache.aurora.scheduler.base.JobKeys; import org.apache.aurora.scheduler.storage.CronJobStore; import org.apache.aurora.scheduler.storage.entities.IJobConfiguration; @@ -29,8 +33,16 @@ import org.apache.aurora.scheduler.storage.entities.IJobKey; * An in-memory cron job store. */ class MemCronJobStore implements CronJobStore.Mutable { + @VisibleForTesting + static final String CRON_JOBS_SIZE = "mem_storage_cron_size"; + private final Map<IJobKey, IJobConfiguration> jobs = Maps.newConcurrentMap(); + @Inject + MemCronJobStore(StatsProvider statsProvider) { + statsProvider.makeGauge(CRON_JOBS_SIZE, () -> jobs.size()); + } + @Timed("mem_storage_cron_save_accepted_job") @Override public void saveAcceptedJob(IJobConfiguration jobConfig) { http://git-wip-us.apache.org/repos/asf/aurora/blob/6f9383c3/src/test/java/org/apache/aurora/scheduler/storage/AbstractCronJobStoreTest.java ---------------------------------------------------------------------- diff --git a/src/test/java/org/apache/aurora/scheduler/storage/AbstractCronJobStoreTest.java b/src/test/java/org/apache/aurora/scheduler/storage/AbstractCronJobStoreTest.java index c316e49..3ec6e2b 100644 --- a/src/test/java/org/apache/aurora/scheduler/storage/AbstractCronJobStoreTest.java +++ b/src/test/java/org/apache/aurora/scheduler/storage/AbstractCronJobStoreTest.java @@ -41,8 +41,8 @@ import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNull; public abstract class AbstractCronJobStoreTest { - private static final IJobConfiguration JOB_A = makeJob("a"); - private static final IJobConfiguration JOB_B = makeJob("b"); + protected static final IJobConfiguration JOB_A = makeJob("a"); + protected static final IJobConfiguration JOB_B = makeJob("b"); private static final IJobKey KEY_A = JOB_A.getKey(); private static final IJobKey KEY_B = JOB_B.getKey(); @@ -154,7 +154,7 @@ public abstract class AbstractCronJobStoreTest { return storage.read(storeProvider -> storeProvider.getCronJobStore().fetchJob(jobKey)); } - private void saveAcceptedJob(IJobConfiguration jobConfig) { + protected void saveAcceptedJob(IJobConfiguration jobConfig) { storage.write((NoResult.Quiet) storeProvider -> storeProvider.getCronJobStore().saveAcceptedJob(jobConfig)); } @@ -164,7 +164,7 @@ public abstract class AbstractCronJobStoreTest { (NoResult.Quiet) storeProvider -> storeProvider.getCronJobStore().removeJob(jobKey)); } - private void deleteJobs() { + protected void deleteJobs() { storage.write((NoResult.Quiet) storeProvider -> storeProvider.getCronJobStore().deleteJobs()); } } http://git-wip-us.apache.org/repos/asf/aurora/blob/6f9383c3/src/test/java/org/apache/aurora/scheduler/storage/mem/MemCronJobStoreTest.java ---------------------------------------------------------------------- diff --git a/src/test/java/org/apache/aurora/scheduler/storage/mem/MemCronJobStoreTest.java b/src/test/java/org/apache/aurora/scheduler/storage/mem/MemCronJobStoreTest.java index 82e0329..26fe429 100644 --- a/src/test/java/org/apache/aurora/scheduler/storage/mem/MemCronJobStoreTest.java +++ b/src/test/java/org/apache/aurora/scheduler/storage/mem/MemCronJobStoreTest.java @@ -25,19 +25,26 @@ import org.apache.aurora.scheduler.storage.AbstractCronJobStoreTest; import org.apache.aurora.scheduler.storage.db.DbModule; import org.apache.aurora.scheduler.storage.db.InstrumentingInterceptor; import org.apache.aurora.scheduler.testing.FakeStatsProvider; +import org.junit.Test; import static org.apache.aurora.common.inject.Bindings.KeyFactory.PLAIN; +import static org.apache.aurora.scheduler.storage.mem.MemCronJobStore.CRON_JOBS_SIZE; import static org.easymock.EasyMock.createMock; +import static org.junit.Assert.assertEquals; public class MemCronJobStoreTest extends AbstractCronJobStoreTest { + + private FakeStatsProvider statsProvider; + @Override protected Module getStorageModule() { + statsProvider = new FakeStatsProvider(); return Modules.combine( DbModule.testModuleWithWorkQueue(PLAIN, Optional.of(new InMemStoresModule(PLAIN))), new AbstractModule() { @Override protected void configure() { - bind(StatsProvider.class).toInstance(new FakeStatsProvider()); + bind(StatsProvider.class).toInstance(statsProvider); // bindings for mybatis interceptor SlidingStats slidingStats = createMock(SlidingStats.class); @@ -47,4 +54,15 @@ public class MemCronJobStoreTest extends AbstractCronJobStoreTest { } }); } + + @Test + public void testStoreSize() { + assertEquals(0L, statsProvider.getLongValue(CRON_JOBS_SIZE)); + saveAcceptedJob(JOB_A); + assertEquals(1L, statsProvider.getLongValue(CRON_JOBS_SIZE)); + saveAcceptedJob(JOB_B); + assertEquals(2L, statsProvider.getLongValue(CRON_JOBS_SIZE)); + deleteJobs(); + assertEquals(0L, statsProvider.getLongValue(CRON_JOBS_SIZE)); + } }
