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));
+  }
 }

Reply via email to