Repository: aurora Updated Branches: refs/heads/master 4e28e73bb -> 3738c3e1a
Add size metric for memory stores, add MemSchedulerStoreTest Currently, we only track the size metrics for: - # of tasks via `task_store_index_(host|job)` - # of crons via `mem_storage_cron_size` I am hoping to add: - # of attributes via `mem_storage_attributes_size` - # of maintenance requests via `mem_storage_maintenance_size` - # of job updates via `mem_storage_update_size` - # of quotas via `mem_storage_quota_size` This will help us track the growth of stores over time. Additionally, I added a `MemSchedulerStoreTest` since one did not exist previously and nothing was extending the abtract version of the test. Reviewed at https://reviews.apache.org/r/68047/ Project: http://git-wip-us.apache.org/repos/asf/aurora/repo Commit: http://git-wip-us.apache.org/repos/asf/aurora/commit/3738c3e1 Tree: http://git-wip-us.apache.org/repos/asf/aurora/tree/3738c3e1 Diff: http://git-wip-us.apache.org/repos/asf/aurora/diff/3738c3e1 Branch: refs/heads/master Commit: 3738c3e1afc4b3835385116745088479a4cfac30 Parents: 4e28e73 Author: Jordan Ly <[email protected]> Authored: Thu Jul 26 16:01:16 2018 -0700 Committer: Jordan Ly <[email protected]> Committed: Thu Jul 26 16:01:16 2018 -0700 ---------------------------------------------------------------------- .../storage/mem/MemAttributeStore.java | 11 ++++++ .../scheduler/storage/mem/MemCronJobStore.java | 4 +- .../storage/mem/MemHostMaintenanceStore.java | 11 ++++++ .../storage/mem/MemJobUpdateStore.java | 10 +++++ .../scheduler/storage/mem/MemQuotaStore.java | 10 +++++ .../storage/AbstractAttributeStoreTest.java | 21 ++++++---- .../storage/AbstractCronJobStoreTest.java | 2 +- .../AbstractHostMaintenanceStoreTest.java | 22 +++++++---- .../storage/AbstractJobUpdateStoreTest.java | 23 ++++++----- .../storage/AbstractQuotaStoreTest.java | 27 +++++++------ .../storage/AbstractSchedulerStoreTest.java | 14 +++++-- .../storage/AbstractTaskStoreTest.java | 2 +- .../storage/mem/MemAttributeStoreTest.java | 37 ++++++++++++++++-- .../storage/mem/MemCronJobStoreTest.java | 10 ++--- .../mem/MemHostMaintenanceStoreTest.java | 39 +++++++++++++++++-- .../storage/mem/MemJobUpdateStoreTest.java | 40 ++++++++++++++++---- .../storage/mem/MemQuotaStoreTest.java | 39 +++++++++++++++++-- .../storage/mem/MemSchedulerStoreTest.java | 40 ++++++++++++++++++++ 18 files changed, 296 insertions(+), 66 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/aurora/blob/3738c3e1/src/main/java/org/apache/aurora/scheduler/storage/mem/MemAttributeStore.java ---------------------------------------------------------------------- diff --git a/src/main/java/org/apache/aurora/scheduler/storage/mem/MemAttributeStore.java b/src/main/java/org/apache/aurora/scheduler/storage/mem/MemAttributeStore.java index 67684cf..2dde04e 100644 --- a/src/main/java/org/apache/aurora/scheduler/storage/mem/MemAttributeStore.java +++ b/src/main/java/org/apache/aurora/scheduler/storage/mem/MemAttributeStore.java @@ -17,11 +17,14 @@ import java.util.Map; import java.util.Optional; import java.util.Set; +import com.google.common.annotations.VisibleForTesting; import com.google.common.base.Preconditions; import com.google.common.collect.FluentIterable; import com.google.common.collect.ImmutableSet; import com.google.common.collect.Maps; +import com.google.inject.Inject; +import org.apache.aurora.common.stats.StatsProvider; import org.apache.aurora.gen.Attribute; import org.apache.aurora.gen.HostAttributes; import org.apache.aurora.gen.MaintenanceMode; @@ -32,8 +35,16 @@ import org.apache.aurora.scheduler.storage.entities.IHostAttributes; * An in-memory attribute store. */ class MemAttributeStore implements AttributeStore.Mutable { + @VisibleForTesting + static final String ATTRIBUTE_STORE_SIZE = "mem_storage_attribute_size"; + private final Map<String, IHostAttributes> hostAttributes = Maps.newConcurrentMap(); + @Inject + MemAttributeStore(StatsProvider statsProvider) { + statsProvider.makeGauge(ATTRIBUTE_STORE_SIZE, hostAttributes::size); + } + @Override public void deleteHostAttributes() { hostAttributes.clear(); http://git-wip-us.apache.org/repos/asf/aurora/blob/3738c3e1/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 a1e1f1e..0062c9d 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 @@ -34,13 +34,13 @@ import org.apache.aurora.scheduler.storage.entities.IJobKey; */ class MemCronJobStore implements CronJobStore.Mutable { @VisibleForTesting - static final String CRON_JOBS_SIZE = "mem_storage_cron_size"; + static final String CRON_STORE_SIZE = "mem_storage_cron_size"; private final Map<IJobKey, IJobConfiguration> jobs = Maps.newConcurrentMap(); @Inject MemCronJobStore(StatsProvider statsProvider) { - statsProvider.makeGauge(CRON_JOBS_SIZE, () -> jobs.size()); + statsProvider.makeGauge(CRON_STORE_SIZE, jobs::size); } @Timed("mem_storage_cron_save_accepted_job") http://git-wip-us.apache.org/repos/asf/aurora/blob/3738c3e1/src/main/java/org/apache/aurora/scheduler/storage/mem/MemHostMaintenanceStore.java ---------------------------------------------------------------------- diff --git a/src/main/java/org/apache/aurora/scheduler/storage/mem/MemHostMaintenanceStore.java b/src/main/java/org/apache/aurora/scheduler/storage/mem/MemHostMaintenanceStore.java index c8d96f2..9afc892 100644 --- a/src/main/java/org/apache/aurora/scheduler/storage/mem/MemHostMaintenanceStore.java +++ b/src/main/java/org/apache/aurora/scheduler/storage/mem/MemHostMaintenanceStore.java @@ -17,17 +17,28 @@ import java.util.Map; import java.util.Optional; import java.util.Set; +import javax.inject.Inject; + +import com.google.common.annotations.VisibleForTesting; import com.google.common.collect.ImmutableSet; import com.google.common.collect.Maps; +import org.apache.aurora.common.stats.StatsProvider; import org.apache.aurora.scheduler.storage.HostMaintenanceStore; import org.apache.aurora.scheduler.storage.entities.IHostMaintenanceRequest; public class MemHostMaintenanceStore implements HostMaintenanceStore.Mutable { + @VisibleForTesting + static final String MAINTENANCE_STORE_SIZE = "mem_storage_maintenance_size"; private final Map<String, IHostMaintenanceRequest> hostMaintenanceRequests = Maps.newConcurrentMap(); + @Inject + MemHostMaintenanceStore(StatsProvider statsProvider) { + statsProvider.makeGauge(MAINTENANCE_STORE_SIZE, hostMaintenanceRequests::size); + } + @Override public Optional<IHostMaintenanceRequest> getHostMaintenanceRequest(String host) { return Optional.ofNullable(hostMaintenanceRequests.get(host)); http://git-wip-us.apache.org/repos/asf/aurora/blob/3738c3e1/src/main/java/org/apache/aurora/scheduler/storage/mem/MemJobUpdateStore.java ---------------------------------------------------------------------- diff --git a/src/main/java/org/apache/aurora/scheduler/storage/mem/MemJobUpdateStore.java b/src/main/java/org/apache/aurora/scheduler/storage/mem/MemJobUpdateStore.java index 9e86b9e..d6b42e8 100644 --- a/src/main/java/org/apache/aurora/scheduler/storage/mem/MemJobUpdateStore.java +++ b/src/main/java/org/apache/aurora/scheduler/storage/mem/MemJobUpdateStore.java @@ -22,15 +22,18 @@ import java.util.function.Predicate; import java.util.stream.Collectors; import java.util.stream.Stream; +import com.google.common.annotations.VisibleForTesting; import com.google.common.base.Preconditions; import com.google.common.collect.ImmutableList; import com.google.common.collect.Iterables; import com.google.common.collect.Maps; import com.google.common.collect.Ordering; import com.google.common.primitives.Longs; +import com.google.inject.Inject; import org.apache.aurora.common.base.MorePreconditions; import org.apache.aurora.common.inject.TimedInterceptor.Timed; +import org.apache.aurora.common.stats.StatsProvider; import org.apache.aurora.gen.JobInstanceUpdateEvent; import org.apache.aurora.gen.JobUpdateDetails; import org.apache.aurora.gen.JobUpdateEvent; @@ -48,6 +51,8 @@ import org.apache.aurora.scheduler.storage.entities.IJobUpdateQuery; import static java.util.Objects.requireNonNull; public class MemJobUpdateStore implements JobUpdateStore.Mutable { + @VisibleForTesting + static final String UPDATE_STORE_SIZE = "mem_storage_update_size"; private static final Ordering<IJobUpdateDetails> REVERSE_LAST_MODIFIED_ORDER = Ordering.natural() .reverse() @@ -55,6 +60,11 @@ public class MemJobUpdateStore implements JobUpdateStore.Mutable { private final Map<IJobUpdateKey, IJobUpdateDetails> updates = Maps.newConcurrentMap(); + @Inject + MemJobUpdateStore(StatsProvider statsProvider) { + statsProvider.makeGauge(UPDATE_STORE_SIZE, updates::size); + } + @Timed("job_update_store_fetch_details_query") @Override public synchronized List<IJobUpdateDetails> fetchJobUpdates(IJobUpdateQuery query) { http://git-wip-us.apache.org/repos/asf/aurora/blob/3738c3e1/src/main/java/org/apache/aurora/scheduler/storage/mem/MemQuotaStore.java ---------------------------------------------------------------------- diff --git a/src/main/java/org/apache/aurora/scheduler/storage/mem/MemQuotaStore.java b/src/main/java/org/apache/aurora/scheduler/storage/mem/MemQuotaStore.java index afb29fc..b8f79e9 100644 --- a/src/main/java/org/apache/aurora/scheduler/storage/mem/MemQuotaStore.java +++ b/src/main/java/org/apache/aurora/scheduler/storage/mem/MemQuotaStore.java @@ -16,9 +16,12 @@ package org.apache.aurora.scheduler.storage.mem; import java.util.Map; import java.util.Optional; +import com.google.common.annotations.VisibleForTesting; import com.google.common.collect.ImmutableMap; import com.google.common.collect.Maps; +import com.google.inject.Inject; +import org.apache.aurora.common.stats.StatsProvider; import org.apache.aurora.scheduler.storage.QuotaStore; import org.apache.aurora.scheduler.storage.entities.IResourceAggregate; @@ -26,9 +29,16 @@ import org.apache.aurora.scheduler.storage.entities.IResourceAggregate; * An in-memory quota store. */ class MemQuotaStore implements QuotaStore.Mutable { + @VisibleForTesting + static final String QUOTA_STORE_SIZE = "mem_storage_quota_size"; private final Map<String, IResourceAggregate> quotas = Maps.newConcurrentMap(); + @Inject + MemQuotaStore(StatsProvider statsProvider) { + statsProvider.makeGauge(QUOTA_STORE_SIZE, quotas::size); + } + @Override public void deleteQuotas() { quotas.clear(); http://git-wip-us.apache.org/repos/asf/aurora/blob/3738c3e1/src/test/java/org/apache/aurora/scheduler/storage/AbstractAttributeStoreTest.java ---------------------------------------------------------------------- diff --git a/src/test/java/org/apache/aurora/scheduler/storage/AbstractAttributeStoreTest.java b/src/test/java/org/apache/aurora/scheduler/storage/AbstractAttributeStoreTest.java index 687fd96..952d58b 100644 --- a/src/test/java/org/apache/aurora/scheduler/storage/AbstractAttributeStoreTest.java +++ b/src/test/java/org/apache/aurora/scheduler/storage/AbstractAttributeStoreTest.java @@ -13,11 +13,13 @@ */ package org.apache.aurora.scheduler.storage; -import java.io.IOException; import java.util.Optional; import java.util.Set; import com.google.common.collect.ImmutableSet; +import com.google.inject.Guice; +import com.google.inject.Injector; +import com.google.inject.Module; import org.apache.aurora.gen.Attribute; import org.apache.aurora.gen.HostAttributes; @@ -45,25 +47,28 @@ public abstract class AbstractAttributeStoreTest { private static final Attribute ATTR1 = new Attribute("attr1", ImmutableSet.of("a", "b", "c")); private static final Attribute ATTR2 = new Attribute("attr2", ImmutableSet.of("d", "e", "f")); private static final Attribute ATTR3 = new Attribute("attr3", ImmutableSet.of("a", "d", "g")); - private static final IHostAttributes HOST_A_ATTRS = + protected static final IHostAttributes HOST_A_ATTRS = IHostAttributes.build(new HostAttributes(HOST_A, ImmutableSet.of(ATTR1, ATTR2)) .setSlaveId(SLAVE_A) .setAttributes(ImmutableSet.of()) .setMode(MaintenanceMode.NONE)); - private static final IHostAttributes HOST_B_ATTRS = + protected static final IHostAttributes HOST_B_ATTRS = IHostAttributes.build(new HostAttributes(HOST_B, ImmutableSet.of(ATTR2, ATTR3)) .setSlaveId(SLAVE_B) .setAttributes(ImmutableSet.of()) .setMode(MaintenanceMode.DRAINING)); + protected Injector injector; private Storage storage; @Before - public void setUp() throws IOException { - storage = createStorage(); + public void setUp() { + injector = Guice.createInjector(getStorageModule()); + storage = injector.getInstance(Storage.class); + storage.prepare(); } - protected abstract Storage createStorage(); + protected abstract Module getStorageModule(); @Test public void testSaveAttributes() { @@ -170,7 +175,7 @@ public abstract class AbstractAttributeStoreTest { assertEquals(Optional.of(hostAUpdated), read(HOST_A)); } - private boolean insert(IHostAttributes attributes) { + protected boolean insert(IHostAttributes attributes) { return storage.write( storeProvider -> storeProvider.getAttributeStore().saveHostAttributes(attributes)); } @@ -183,7 +188,7 @@ public abstract class AbstractAttributeStoreTest { return storage.read(storeProvider -> storeProvider.getAttributeStore().getHostAttributes()); } - private void truncate() { + protected void truncate() { storage.write( (NoResult.Quiet) storeProvider -> storeProvider.getAttributeStore().deleteHostAttributes()); } http://git-wip-us.apache.org/repos/asf/aurora/blob/3738c3e1/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 889cb01..ccfd428 100644 --- a/src/test/java/org/apache/aurora/scheduler/storage/AbstractCronJobStoreTest.java +++ b/src/test/java/org/apache/aurora/scheduler/storage/AbstractCronJobStoreTest.java @@ -53,7 +53,7 @@ public abstract class AbstractCronJobStoreTest { protected abstract Module getStorageModule(); @Before - public void baseSetUp() { + public void setUp() { injector = Guice.createInjector(getStorageModule()); storage = injector.getInstance(Storage.class); storage.prepare(); http://git-wip-us.apache.org/repos/asf/aurora/blob/3738c3e1/src/test/java/org/apache/aurora/scheduler/storage/AbstractHostMaintenanceStoreTest.java ---------------------------------------------------------------------- diff --git a/src/test/java/org/apache/aurora/scheduler/storage/AbstractHostMaintenanceStoreTest.java b/src/test/java/org/apache/aurora/scheduler/storage/AbstractHostMaintenanceStoreTest.java index e95955c..17f4385 100644 --- a/src/test/java/org/apache/aurora/scheduler/storage/AbstractHostMaintenanceStoreTest.java +++ b/src/test/java/org/apache/aurora/scheduler/storage/AbstractHostMaintenanceStoreTest.java @@ -18,6 +18,9 @@ import java.util.Optional; import java.util.Set; import com.google.common.collect.ImmutableSet; +import com.google.inject.Guice; +import com.google.inject.Injector; +import com.google.inject.Module; import org.apache.aurora.gen.CountSlaPolicy; import org.apache.aurora.gen.HostMaintenanceRequest; @@ -31,8 +34,8 @@ import static org.junit.Assert.assertEquals; public abstract class AbstractHostMaintenanceStoreTest { - private static final String HOST_A = "hostA"; - private static final String HOST_B = "hostB"; + protected static final String HOST_A = "hostA"; + protected static final String HOST_B = "hostB"; private static final SlaPolicy PERCENTAGE_SLA_POLICY = SlaPolicy.percentageSlaPolicy( new PercentageSlaPolicy() @@ -46,7 +49,7 @@ public abstract class AbstractHostMaintenanceStoreTest { .setDurationSecs(1800) ); - private static final IHostMaintenanceRequest HOST_A_MAINTENANCE_REQUEST = + protected static final IHostMaintenanceRequest HOST_A_MAINTENANCE_REQUEST = IHostMaintenanceRequest.build(new HostMaintenanceRequest() .setHost(HOST_A) .setDefaultSlaPolicy(PERCENTAGE_SLA_POLICY) @@ -54,7 +57,7 @@ public abstract class AbstractHostMaintenanceStoreTest { .setTimeoutSecs(1800) ); - private static final IHostMaintenanceRequest HOST_B_MAINTENANCE_REQUEST = + protected static final IHostMaintenanceRequest HOST_B_MAINTENANCE_REQUEST = IHostMaintenanceRequest.build(new HostMaintenanceRequest() .setHost(HOST_B) .setDefaultSlaPolicy(COUNT_SLA_POLICY) @@ -62,14 +65,17 @@ public abstract class AbstractHostMaintenanceStoreTest { .setTimeoutSecs(1800) ); + protected Injector injector; private Storage storage; @Before public void setUp() { - storage = createStorage(); + injector = Guice.createInjector(getStorageModule()); + storage = injector.getInstance(Storage.class); + storage.prepare(); } - protected abstract Storage createStorage(); + protected abstract Module getStorageModule(); @Test public void testReadHostMaintenanceRequestNonExistant() { @@ -135,7 +141,7 @@ public abstract class AbstractHostMaintenanceStoreTest { assertEquals(Optional.empty(), read(HOST_A)); } - private void insert(IHostMaintenanceRequest hostMaintenanceRequest) { + protected void insert(IHostMaintenanceRequest hostMaintenanceRequest) { storage.write( store -> { store.getHostMaintenanceStore().saveHostMaintenanceRequest(hostMaintenanceRequest); @@ -151,7 +157,7 @@ public abstract class AbstractHostMaintenanceStoreTest { return storage.read(store -> store.getHostMaintenanceStore().getHostMaintenanceRequests()); } - private void truncate(String host) { + protected void truncate(String host) { storage.write( (Storage.MutateWork.NoResult.Quiet) store -> store .getHostMaintenanceStore() http://git-wip-us.apache.org/repos/asf/aurora/blob/3738c3e1/src/test/java/org/apache/aurora/scheduler/storage/AbstractJobUpdateStoreTest.java ---------------------------------------------------------------------- diff --git a/src/test/java/org/apache/aurora/scheduler/storage/AbstractJobUpdateStoreTest.java b/src/test/java/org/apache/aurora/scheduler/storage/AbstractJobUpdateStoreTest.java index 6af66aa..3a93650 100644 --- a/src/test/java/org/apache/aurora/scheduler/storage/AbstractJobUpdateStoreTest.java +++ b/src/test/java/org/apache/aurora/scheduler/storage/AbstractJobUpdateStoreTest.java @@ -11,7 +11,6 @@ * See the License for the specific language governing permissions and * limitations under the License. */ - package org.apache.aurora.scheduler.storage; import java.util.List; @@ -22,7 +21,9 @@ import java.util.stream.Stream; import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableSet; +import com.google.inject.Guice; import com.google.inject.Injector; +import com.google.inject.Module; import org.apache.aurora.gen.InstanceTaskConfig; import org.apache.aurora.gen.JobInstanceUpdateEvent; @@ -80,16 +81,18 @@ public abstract class AbstractJobUpdateStoreTest { private static final ImmutableSet<Metadata> METADATA = ImmutableSet.of(new Metadata("k1", "v1"), new Metadata("k2", "v2"), new Metadata("k3", "v3")); - private Storage storage; + protected Injector injector; + protected Storage storage; + + protected abstract Module getStorageModule(); @Before - public void setUp() throws Exception { - Injector injector = createStorageInjector(); + public void setUp() { + injector = Guice.createInjector(getStorageModule()); storage = injector.getInstance(Storage.class); + storage.prepare(); } - protected abstract Injector createStorageInjector(); - @After public void tearDown() throws Exception { truncateUpdates(); @@ -486,7 +489,7 @@ public abstract class AbstractJobUpdateStoreTest { return makeKey(JOB, id); } - private static IJobUpdateKey makeKey(IJobKey job, String id) { + protected static IJobUpdateKey makeKey(IJobKey job, String id) { return IJobUpdateKey.build(new JobUpdateKey(job.newBuilder(), id)); } @@ -515,7 +518,7 @@ public abstract class AbstractJobUpdateStoreTest { storeProvider.getJobUpdateStore().fetchJobUpdates(IJobUpdateQuery.build(query))); } - private void saveUpdate(IJobUpdateDetails update) { + protected void saveUpdate(IJobUpdateDetails update) { storage.write((NoResult.Quiet) storeProvider -> { JobUpdateStore.Mutable store = storeProvider.getJobUpdateStore(); store.saveJobUpdate(update.getUpdate()); @@ -539,7 +542,7 @@ public abstract class AbstractJobUpdateStoreTest { storeProvider -> storeProvider.getJobUpdateStore().saveJobInstanceUpdateEvent(key, event)); } - private void truncateUpdates() { + protected void truncateUpdates() { storage.write((NoResult.Quiet) storeProvider -> storeProvider.getJobUpdateStore().deleteAllUpdates()); } @@ -603,7 +606,7 @@ public abstract class AbstractJobUpdateStoreTest { .setMetadata(METADATA)); } - private static IJobUpdateDetails makeJobUpdate(IJobUpdateKey key) { + protected static IJobUpdateDetails makeJobUpdate(IJobUpdateKey key) { return IJobUpdateDetails.build(new JobUpdateDetails() .setUpdateEvents(ImmutableList.of(FIRST_EVENT.newBuilder())) .setUpdate(new JobUpdate() http://git-wip-us.apache.org/repos/asf/aurora/blob/3738c3e1/src/test/java/org/apache/aurora/scheduler/storage/AbstractQuotaStoreTest.java ---------------------------------------------------------------------- diff --git a/src/test/java/org/apache/aurora/scheduler/storage/AbstractQuotaStoreTest.java b/src/test/java/org/apache/aurora/scheduler/storage/AbstractQuotaStoreTest.java index e1d7da5..8328247 100644 --- a/src/test/java/org/apache/aurora/scheduler/storage/AbstractQuotaStoreTest.java +++ b/src/test/java/org/apache/aurora/scheduler/storage/AbstractQuotaStoreTest.java @@ -13,11 +13,13 @@ */ package org.apache.aurora.scheduler.storage; -import java.io.IOException; import java.util.Map; import java.util.Optional; import com.google.common.collect.ImmutableMap; +import com.google.inject.Guice; +import com.google.inject.Injector; +import com.google.inject.Module; import org.apache.aurora.scheduler.resources.ResourceTestUtil; import org.apache.aurora.scheduler.storage.Storage.MutateWork.NoResult; @@ -30,19 +32,22 @@ import static org.junit.Assert.assertEquals; public abstract class AbstractQuotaStoreTest { - private static final String ROLE_A = "roleA"; - private static final String ROLE_B = "roleB"; - private static final IResourceAggregate QUOTA_A = ResourceTestUtil.aggregate(1.0, 2, 3); - private static final IResourceAggregate QUOTA_B = ResourceTestUtil.aggregate(2.0, 4, 6); + protected static final String ROLE_A = "roleA"; + protected static final String ROLE_B = "roleB"; + protected static final IResourceAggregate QUOTA_A = ResourceTestUtil.aggregate(1.0, 2, 3); + protected static final IResourceAggregate QUOTA_B = ResourceTestUtil.aggregate(2.0, 4, 6); + protected Injector injector; private Storage storage; @Before - public void setUp() throws IOException { - storage = createStorage(); + public void setUp() { + injector = Guice.createInjector(getStorageModule()); + storage = injector.getInstance(Storage.class); + storage.prepare(); } - protected abstract Storage createStorage(); + protected abstract Module getStorageModule(); @Test public void testCrud() { @@ -84,7 +89,7 @@ public abstract class AbstractQuotaStoreTest { assertQuotas(ImmutableMap.of(ROLE_A, QUOTA_B)); } - private void save(String role, IResourceAggregate quota) { + protected void save(String role, IResourceAggregate quota) { storage.write( (NoResult.Quiet) storeProvider -> storeProvider.getQuotaStore().saveQuota(role, quota)); } @@ -100,12 +105,12 @@ public abstract class AbstractQuotaStoreTest { ); } - private void delete(String role) { + protected void delete(String role) { storage.write( (NoResult.Quiet) storeProvider -> storeProvider.getQuotaStore().removeQuota(role)); } - private void deleteAll() { + protected void deleteAll() { storage.write((NoResult.Quiet) storeProvider -> storeProvider.getQuotaStore().deleteQuotas()); } } http://git-wip-us.apache.org/repos/asf/aurora/blob/3738c3e1/src/test/java/org/apache/aurora/scheduler/storage/AbstractSchedulerStoreTest.java ---------------------------------------------------------------------- diff --git a/src/test/java/org/apache/aurora/scheduler/storage/AbstractSchedulerStoreTest.java b/src/test/java/org/apache/aurora/scheduler/storage/AbstractSchedulerStoreTest.java index cb80519..74d2448 100644 --- a/src/test/java/org/apache/aurora/scheduler/storage/AbstractSchedulerStoreTest.java +++ b/src/test/java/org/apache/aurora/scheduler/storage/AbstractSchedulerStoreTest.java @@ -13,9 +13,12 @@ */ package org.apache.aurora.scheduler.storage; -import java.io.IOException; import java.util.Optional; +import com.google.inject.Guice; +import com.google.inject.Injector; +import com.google.inject.Module; + import org.apache.aurora.scheduler.storage.Storage.MutateWork.NoResult; import org.junit.Before; import org.junit.Test; @@ -24,14 +27,17 @@ import static org.junit.Assert.assertEquals; public abstract class AbstractSchedulerStoreTest { + protected Injector injector; private Storage storage; @Before - public void setUp() throws IOException { - storage = createStorage(); + public void setUp() { + injector = Guice.createInjector(getStorageModule()); + storage = injector.getInstance(Storage.class); + storage.prepare(); } - protected abstract Storage createStorage(); + protected abstract Module getStorageModule(); @Test public void testSchedulerStore() { http://git-wip-us.apache.org/repos/asf/aurora/blob/3738c3e1/src/test/java/org/apache/aurora/scheduler/storage/AbstractTaskStoreTest.java ---------------------------------------------------------------------- diff --git a/src/test/java/org/apache/aurora/scheduler/storage/AbstractTaskStoreTest.java b/src/test/java/org/apache/aurora/scheduler/storage/AbstractTaskStoreTest.java index c53e584..bb714ee 100644 --- a/src/test/java/org/apache/aurora/scheduler/storage/AbstractTaskStoreTest.java +++ b/src/test/java/org/apache/aurora/scheduler/storage/AbstractTaskStoreTest.java @@ -100,7 +100,7 @@ public abstract class AbstractTaskStoreTest extends TearDownTestCase { protected abstract Module getStorageModule(); @Before - public void baseSetUp() { + public void setUp() { injector = Guice.createInjector(getStorageModule()); storage = injector.getInstance(Storage.class); storage.prepare(); http://git-wip-us.apache.org/repos/asf/aurora/blob/3738c3e1/src/test/java/org/apache/aurora/scheduler/storage/mem/MemAttributeStoreTest.java ---------------------------------------------------------------------- diff --git a/src/test/java/org/apache/aurora/scheduler/storage/mem/MemAttributeStoreTest.java b/src/test/java/org/apache/aurora/scheduler/storage/mem/MemAttributeStoreTest.java index 64b19a9..795950e 100644 --- a/src/test/java/org/apache/aurora/scheduler/storage/mem/MemAttributeStoreTest.java +++ b/src/test/java/org/apache/aurora/scheduler/storage/mem/MemAttributeStoreTest.java @@ -13,12 +13,43 @@ */ package org.apache.aurora.scheduler.storage.mem; +import com.google.inject.AbstractModule; +import com.google.inject.Module; +import com.google.inject.util.Modules; + +import org.apache.aurora.common.stats.StatsProvider; import org.apache.aurora.scheduler.storage.AbstractAttributeStoreTest; -import org.apache.aurora.scheduler.storage.Storage; +import org.apache.aurora.scheduler.testing.FakeStatsProvider; +import org.junit.Test; + +import static org.apache.aurora.scheduler.storage.mem.MemAttributeStore.ATTRIBUTE_STORE_SIZE; +import static org.junit.Assert.assertEquals; public class MemAttributeStoreTest extends AbstractAttributeStoreTest { + + private FakeStatsProvider statsProvider; + @Override - protected Storage createStorage() { - return MemStorageModule.newEmptyStorage(); + protected Module getStorageModule() { + statsProvider = new FakeStatsProvider(); + return Modules.combine( + new MemStorageModule(), + new AbstractModule() { + @Override + protected void configure() { + bind(StatsProvider.class).toInstance(statsProvider); + } + }); + } + + @Test + public void testStoreSize() { + assertEquals(0L, statsProvider.getLongValue(ATTRIBUTE_STORE_SIZE)); + insert(HOST_A_ATTRS); + assertEquals(1L, statsProvider.getLongValue(ATTRIBUTE_STORE_SIZE)); + insert(HOST_B_ATTRS); + assertEquals(2L, statsProvider.getLongValue(ATTRIBUTE_STORE_SIZE)); + truncate(); + assertEquals(0L, statsProvider.getLongValue(ATTRIBUTE_STORE_SIZE)); } } http://git-wip-us.apache.org/repos/asf/aurora/blob/3738c3e1/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 15e0e30..c56c706 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 @@ -22,7 +22,7 @@ import org.apache.aurora.scheduler.storage.AbstractCronJobStoreTest; import org.apache.aurora.scheduler.testing.FakeStatsProvider; import org.junit.Test; -import static org.apache.aurora.scheduler.storage.mem.MemCronJobStore.CRON_JOBS_SIZE; +import static org.apache.aurora.scheduler.storage.mem.MemCronJobStore.CRON_STORE_SIZE; import static org.junit.Assert.assertEquals; public class MemCronJobStoreTest extends AbstractCronJobStoreTest { @@ -44,12 +44,12 @@ public class MemCronJobStoreTest extends AbstractCronJobStoreTest { @Test public void testStoreSize() { - assertEquals(0L, statsProvider.getLongValue(CRON_JOBS_SIZE)); + assertEquals(0L, statsProvider.getLongValue(CRON_STORE_SIZE)); saveAcceptedJob(JOB_A); - assertEquals(1L, statsProvider.getLongValue(CRON_JOBS_SIZE)); + assertEquals(1L, statsProvider.getLongValue(CRON_STORE_SIZE)); saveAcceptedJob(JOB_B); - assertEquals(2L, statsProvider.getLongValue(CRON_JOBS_SIZE)); + assertEquals(2L, statsProvider.getLongValue(CRON_STORE_SIZE)); deleteJobs(); - assertEquals(0L, statsProvider.getLongValue(CRON_JOBS_SIZE)); + assertEquals(0L, statsProvider.getLongValue(CRON_STORE_SIZE)); } } http://git-wip-us.apache.org/repos/asf/aurora/blob/3738c3e1/src/test/java/org/apache/aurora/scheduler/storage/mem/MemHostMaintenanceStoreTest.java ---------------------------------------------------------------------- diff --git a/src/test/java/org/apache/aurora/scheduler/storage/mem/MemHostMaintenanceStoreTest.java b/src/test/java/org/apache/aurora/scheduler/storage/mem/MemHostMaintenanceStoreTest.java index ce1a9d6..f259657 100644 --- a/src/test/java/org/apache/aurora/scheduler/storage/mem/MemHostMaintenanceStoreTest.java +++ b/src/test/java/org/apache/aurora/scheduler/storage/mem/MemHostMaintenanceStoreTest.java @@ -13,13 +13,46 @@ */ package org.apache.aurora.scheduler.storage.mem; +import com.google.inject.AbstractModule; +import com.google.inject.Module; +import com.google.inject.util.Modules; + +import org.apache.aurora.common.stats.StatsProvider; import org.apache.aurora.scheduler.storage.AbstractHostMaintenanceStoreTest; -import org.apache.aurora.scheduler.storage.Storage; +import org.apache.aurora.scheduler.testing.FakeStatsProvider; +import org.junit.Test; + +import static org.apache.aurora.scheduler.storage.mem.MemHostMaintenanceStore.MAINTENANCE_STORE_SIZE; +import static org.junit.Assert.assertEquals; public class MemHostMaintenanceStoreTest extends AbstractHostMaintenanceStoreTest { + + private FakeStatsProvider statsProvider; + @Override - protected Storage createStorage() { - return MemStorageModule.newEmptyStorage(); + protected Module getStorageModule() { + statsProvider = new FakeStatsProvider(); + return Modules.combine( + new MemStorageModule(), + new AbstractModule() { + @Override + protected void configure() { + bind(StatsProvider.class).toInstance(statsProvider); + } + }); + } + + @Test + public void testStoreSize() { + assertEquals(0L, statsProvider.getLongValue(MAINTENANCE_STORE_SIZE)); + insert(HOST_A_MAINTENANCE_REQUEST); + assertEquals(1L, statsProvider.getLongValue(MAINTENANCE_STORE_SIZE)); + insert(HOST_B_MAINTENANCE_REQUEST); + assertEquals(2L, statsProvider.getLongValue(MAINTENANCE_STORE_SIZE)); + truncate(HOST_A); + assertEquals(1L, statsProvider.getLongValue(MAINTENANCE_STORE_SIZE)); + truncate(HOST_B); + assertEquals(0L, statsProvider.getLongValue(MAINTENANCE_STORE_SIZE)); } } http://git-wip-us.apache.org/repos/asf/aurora/blob/3738c3e1/src/test/java/org/apache/aurora/scheduler/storage/mem/MemJobUpdateStoreTest.java ---------------------------------------------------------------------- diff --git a/src/test/java/org/apache/aurora/scheduler/storage/mem/MemJobUpdateStoreTest.java b/src/test/java/org/apache/aurora/scheduler/storage/mem/MemJobUpdateStoreTest.java index cbf1bc4..bddd557 100644 --- a/src/test/java/org/apache/aurora/scheduler/storage/mem/MemJobUpdateStoreTest.java +++ b/src/test/java/org/apache/aurora/scheduler/storage/mem/MemJobUpdateStoreTest.java @@ -14,25 +14,51 @@ package org.apache.aurora.scheduler.storage.mem; import com.google.inject.AbstractModule; -import com.google.inject.Guice; -import com.google.inject.Injector; +import com.google.inject.Module; +import com.google.inject.util.Modules; import org.apache.aurora.common.stats.StatsProvider; +import org.apache.aurora.scheduler.base.JobKeys; import org.apache.aurora.scheduler.storage.AbstractJobUpdateStoreTest; +import org.apache.aurora.scheduler.storage.entities.IJobUpdateDetails; +import org.apache.aurora.scheduler.storage.entities.IJobUpdateKey; import org.apache.aurora.scheduler.testing.FakeStatsProvider; +import org.junit.Test; + +import static org.apache.aurora.scheduler.storage.mem.MemJobUpdateStore.UPDATE_STORE_SIZE; +import static org.junit.Assert.assertEquals; public class MemJobUpdateStoreTest extends AbstractJobUpdateStoreTest { + + private FakeStatsProvider statsProvider; + @Override - protected Injector createStorageInjector() { - return Guice.createInjector( + protected Module getStorageModule() { + statsProvider = new FakeStatsProvider(); + return Modules.combine( new MemStorageModule(), new AbstractModule() { @Override protected void configure() { - FakeStatsProvider stats = new FakeStatsProvider(); - bind(StatsProvider.class).toInstance(stats); - bind(FakeStatsProvider.class).toInstance(stats); + bind(StatsProvider.class).toInstance(statsProvider); } }); } + + @Test + public void testStoreSize() { + IJobUpdateKey updateId1 = makeKey(JobKeys.from("role", "env", "name1"), "u1"); + IJobUpdateKey updateId2 = makeKey(JobKeys.from("role", "env", "name2"), "u2"); + + IJobUpdateDetails update1 = makeJobUpdate(updateId1); + IJobUpdateDetails update2 = makeJobUpdate(updateId2); + + assertEquals(0L, statsProvider.getLongValue(UPDATE_STORE_SIZE)); + saveUpdate(update1); + assertEquals(1L, statsProvider.getLongValue(UPDATE_STORE_SIZE)); + saveUpdate(update2); + assertEquals(2L, statsProvider.getLongValue(UPDATE_STORE_SIZE)); + truncateUpdates(); + assertEquals(0L, statsProvider.getLongValue(UPDATE_STORE_SIZE)); + } } http://git-wip-us.apache.org/repos/asf/aurora/blob/3738c3e1/src/test/java/org/apache/aurora/scheduler/storage/mem/MemQuotaStoreTest.java ---------------------------------------------------------------------- diff --git a/src/test/java/org/apache/aurora/scheduler/storage/mem/MemQuotaStoreTest.java b/src/test/java/org/apache/aurora/scheduler/storage/mem/MemQuotaStoreTest.java index e8324ee..7ff2ceb 100644 --- a/src/test/java/org/apache/aurora/scheduler/storage/mem/MemQuotaStoreTest.java +++ b/src/test/java/org/apache/aurora/scheduler/storage/mem/MemQuotaStoreTest.java @@ -13,12 +13,45 @@ */ package org.apache.aurora.scheduler.storage.mem; +import com.google.inject.AbstractModule; +import com.google.inject.Module; +import com.google.inject.util.Modules; + +import org.apache.aurora.common.stats.StatsProvider; import org.apache.aurora.scheduler.storage.AbstractQuotaStoreTest; -import org.apache.aurora.scheduler.storage.Storage; +import org.apache.aurora.scheduler.testing.FakeStatsProvider; +import org.junit.Test; + +import static org.apache.aurora.scheduler.storage.mem.MemQuotaStore.QUOTA_STORE_SIZE; +import static org.junit.Assert.assertEquals; public class MemQuotaStoreTest extends AbstractQuotaStoreTest { + + private FakeStatsProvider statsProvider; + @Override - protected Storage createStorage() { - return MemStorageModule.newEmptyStorage(); + protected Module getStorageModule() { + statsProvider = new FakeStatsProvider(); + return Modules.combine( + new MemStorageModule(), + new AbstractModule() { + @Override + protected void configure() { + bind(StatsProvider.class).toInstance(statsProvider); + } + }); + } + + @Test + public void testStoreSize() { + assertEquals(0L, statsProvider.getLongValue(QUOTA_STORE_SIZE)); + save(ROLE_A, QUOTA_A); + assertEquals(1L, statsProvider.getLongValue(QUOTA_STORE_SIZE)); + save(ROLE_B, QUOTA_B); + assertEquals(2L, statsProvider.getLongValue(QUOTA_STORE_SIZE)); + delete(ROLE_A); + assertEquals(1L, statsProvider.getLongValue(QUOTA_STORE_SIZE)); + deleteAll(); + assertEquals(0L, statsProvider.getLongValue(QUOTA_STORE_SIZE)); } } http://git-wip-us.apache.org/repos/asf/aurora/blob/3738c3e1/src/test/java/org/apache/aurora/scheduler/storage/mem/MemSchedulerStoreTest.java ---------------------------------------------------------------------- diff --git a/src/test/java/org/apache/aurora/scheduler/storage/mem/MemSchedulerStoreTest.java b/src/test/java/org/apache/aurora/scheduler/storage/mem/MemSchedulerStoreTest.java new file mode 100644 index 0000000..d9a2fdb --- /dev/null +++ b/src/test/java/org/apache/aurora/scheduler/storage/mem/MemSchedulerStoreTest.java @@ -0,0 +1,40 @@ +/** + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.aurora.scheduler.storage.mem; + +import com.google.inject.AbstractModule; +import com.google.inject.Module; +import com.google.inject.util.Modules; + +import org.apache.aurora.common.stats.StatsProvider; +import org.apache.aurora.scheduler.storage.AbstractSchedulerStoreTest; +import org.apache.aurora.scheduler.testing.FakeStatsProvider; + +public class MemSchedulerStoreTest extends AbstractSchedulerStoreTest { + + private FakeStatsProvider statsProvider; + + @Override + protected Module getStorageModule() { + statsProvider = new FakeStatsProvider(); + return Modules.combine( + new MemStorageModule(), + new AbstractModule() { + @Override + protected void configure() { + bind(StatsProvider.class).toInstance(statsProvider); + } + }); + } +}
