Repository: ambari Updated Branches: refs/heads/branch-2.1 b5796290b -> cd20150a3
Metrics Cache test failing on trunk. (Aravindan Vijayan via swagle) Project: http://git-wip-us.apache.org/repos/asf/ambari/repo Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/cd20150a Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/cd20150a Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/cd20150a Branch: refs/heads/branch-2.1 Commit: cd20150a301c477696ec7c19fd9e04fb4660f2b0 Parents: b579629 Author: Siddharth Wagle <swa...@hortonworks.com> Authored: Tue Nov 10 17:29:24 2015 -0800 Committer: Siddharth Wagle <swa...@hortonworks.com> Committed: Tue Nov 10 17:29:24 2015 -0800 ---------------------------------------------------------------------- .../cache/TimelineMetricCacheProvider.java | 29 +++++---- .../timeline/cache/TimelineMetricCacheTest.java | 63 +++++++++++++------- 2 files changed, 60 insertions(+), 32 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/ambari/blob/cd20150a/ambari-server/src/main/java/org/apache/ambari/server/controller/metrics/timeline/cache/TimelineMetricCacheProvider.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/metrics/timeline/cache/TimelineMetricCacheProvider.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/metrics/timeline/cache/TimelineMetricCacheProvider.java index 9f268b2..f447fc9 100644 --- a/ambari-server/src/main/java/org/apache/ambari/server/controller/metrics/timeline/cache/TimelineMetricCacheProvider.java +++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/metrics/timeline/cache/TimelineMetricCacheProvider.java @@ -83,6 +83,23 @@ public class TimelineMetricCacheProvider { configuration.getMetricCacheIdleSeconds()); // Create a Cache specifying its configuration. + CacheConfiguration cacheConfiguration = createCacheConfiguration(); + Cache cache = new Cache(cacheConfiguration); + + // Decorate with UpdatingSelfPopulatingCache + timelineMetricsCache = new TimelineMetricCache(cache, cacheEntryFactory); + + LOG.info("Registering metrics cache with provider: name = " + + cache.getName() + ", guid: " + cache.getGuid()); + + manager.addCache(timelineMetricsCache); + + isCacheInitialized = true; + } + + // Having this as a separate public method for testing/mocking purposes + public CacheConfiguration createCacheConfiguration() { + CacheConfiguration cacheConfiguration = new CacheConfiguration() .name(TIMELINE_METRIC_CACHE_INSTANCE_NAME) .timeToLiveSeconds(configuration.getMetricCacheTTLSeconds()) // 1 hour @@ -95,17 +112,7 @@ public class TimelineMetricCacheProvider { .persistence(new PersistenceConfiguration() .strategy(Strategy.NONE.name())); - Cache cache = new Cache(cacheConfiguration); - - // Decorate with UpdatingSelfPopulatingCache - timelineMetricsCache = new TimelineMetricCache(cache, cacheEntryFactory); - - LOG.info("Registering metrics cache with provider: name = " + - cache.getName() + ", guid: " + cache.getGuid()); - - manager.addCache(timelineMetricsCache); - - isCacheInitialized = true; + return cacheConfiguration; } /** http://git-wip-us.apache.org/repos/asf/ambari/blob/cd20150a/ambari-server/src/test/java/org/apache/ambari/server/controller/metrics/timeline/cache/TimelineMetricCacheTest.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/test/java/org/apache/ambari/server/controller/metrics/timeline/cache/TimelineMetricCacheTest.java b/ambari-server/src/test/java/org/apache/ambari/server/controller/metrics/timeline/cache/TimelineMetricCacheTest.java index 0f727dd..53661fa 100644 --- a/ambari-server/src/test/java/org/apache/ambari/server/controller/metrics/timeline/cache/TimelineMetricCacheTest.java +++ b/ambari-server/src/test/java/org/apache/ambari/server/controller/metrics/timeline/cache/TimelineMetricCacheTest.java @@ -24,8 +24,12 @@ import com.google.inject.Module; import junit.framework.Assert; import net.sf.ehcache.Cache; import net.sf.ehcache.CacheManager; +import net.sf.ehcache.config.CacheConfiguration; +import net.sf.ehcache.config.PersistenceConfiguration; +import net.sf.ehcache.config.SizeOfPolicyConfiguration; import net.sf.ehcache.constructs.blocking.UpdatingCacheEntryFactory; import net.sf.ehcache.constructs.blocking.UpdatingSelfPopulatingCache; +import net.sf.ehcache.store.MemoryStoreEvictionPolicy; import org.apache.ambari.server.configuration.Configuration; import org.apache.ambari.server.controller.internal.TemporalInfoImpl; import org.apache.ambari.server.controller.metrics.timeline.MetricsRequestHelper; @@ -52,6 +56,7 @@ import java.util.TreeMap; import static org.apache.ambari.server.controller.metrics.timeline.cache.TimelineMetricCacheProvider.TIMELINE_METRIC_CACHE_INSTANCE_NAME; import static org.easymock.EasyMock.anyObject; +import static org.easymock.EasyMock.capture; import static org.easymock.EasyMock.createMock; import static org.easymock.EasyMock.createMockBuilder; import static org.easymock.EasyMock.createNiceMock; @@ -63,21 +68,6 @@ import static org.easymock.EasyMock.verify; public class TimelineMetricCacheTest { - private TimelineMetricCacheProvider getMetricCacheProvider( - final Configuration configuration, - final TimelineMetricCacheEntryFactory cacheEntryFactory) { - - Injector injector = Guice.createInjector(new Module() { - @Override - public void configure(Binder binder) { - binder.bind(OsFamily.class).toInstance(createNiceMock(OsFamily.class)); - binder.bind(Configuration.class).toInstance(configuration); - binder.bind(TimelineMetricCacheEntryFactory.class).toInstance(cacheEntryFactory); - } - }); - return injector.getInstance(TimelineMetricCacheProvider.class); - } - @After public void removeCacheInstance() { // Avoids Object Exists Exception on unit tests by adding a new cache for @@ -124,12 +114,29 @@ public class TimelineMetricCacheTest { verify(cacheEntryFactory); } + private CacheConfiguration createTestCacheConfiguration(Configuration configuration) { + + CacheConfiguration cacheConfiguration = new CacheConfiguration() + .name(TIMELINE_METRIC_CACHE_INSTANCE_NAME) + .timeToLiveSeconds(configuration.getMetricCacheTTLSeconds()) // 1 hour + .timeToIdleSeconds(configuration.getMetricCacheIdleSeconds()) // 5 minutes + .memoryStoreEvictionPolicy(MemoryStoreEvictionPolicy.LRU) + .sizeOfPolicy(new SizeOfPolicyConfiguration() // Set sizeOf policy to continue on max depth reached - avoid OOM + .maxDepth(10000) + .maxDepthExceededBehavior(SizeOfPolicyConfiguration.MaxDepthExceededBehavior.CONTINUE)) + .eternal(false) + .persistence(new PersistenceConfiguration() + .strategy(PersistenceConfiguration.Strategy.NONE.name())); + + cacheConfiguration.setMaxBytesLocalHeap(20*1024*1024l); + return cacheConfiguration; + } @Test - public void testTimlineMetricCacheProviderGets() throws Exception { + public void testTimelineMetricCacheProviderGets() throws Exception { Configuration configuration = createNiceMock(Configuration.class); expect(configuration.getMetricCacheTTLSeconds()).andReturn(3600); expect(configuration.getMetricCacheIdleSeconds()).andReturn(100); - expect(configuration.getMetricsCacheManagerHeapPercent()).andReturn("10%"); + expect(configuration.getMetricsCacheManagerHeapPercent()).andReturn("10%").anyTimes(); replay(configuration); @@ -168,7 +175,14 @@ public class TimelineMetricCacheTest { replay(cacheEntryFactory); - TimelineMetricCacheProvider cacheProvider = getMetricCacheProvider(configuration, cacheEntryFactory); + TimelineMetricCacheProvider cacheProvider = createMockBuilder(TimelineMetricCacheProvider.class) + .addMockedMethod("createCacheConfiguration") + .withConstructor(configuration, cacheEntryFactory) + .createNiceMock(); + + expect(cacheProvider.createCacheConfiguration()).andReturn(createTestCacheConfiguration(configuration)).anyTimes(); + replay(cacheProvider); + TimelineMetricCache cache = cacheProvider.getTimelineMetricsCache(); // call to get @@ -400,7 +414,7 @@ public class TimelineMetricCacheTest { Configuration configuration = createNiceMock(Configuration.class); expect(configuration.getMetricCacheTTLSeconds()).andReturn(3600); expect(configuration.getMetricCacheIdleSeconds()).andReturn(100); - expect(configuration.getMetricsCacheManagerHeapPercent()).andReturn("10%"); + expect(configuration.getMetricsCacheManagerHeapPercent()).andReturn("10%").anyTimes(); expect(configuration.getMetricRequestBufferTimeCatchupInterval()).andReturn(1000l).anyTimes(); replay(configuration); @@ -481,7 +495,14 @@ public class TimelineMetricCacheTest { replay(cacheEntryFactory); - TimelineMetricCacheProvider cacheProvider = getMetricCacheProvider(configuration, cacheEntryFactory); + TimelineMetricCacheProvider cacheProvider = createMockBuilder(TimelineMetricCacheProvider.class) + .addMockedMethod("createCacheConfiguration") + .withConstructor(configuration, cacheEntryFactory) + .createNiceMock(); + + expect(cacheProvider.createCacheConfiguration()).andReturn(createTestCacheConfiguration(configuration)).anyTimes(); + replay(cacheProvider); + TimelineMetricCache cache = cacheProvider.getTimelineMetricsCache(); // call to get @@ -499,7 +520,7 @@ public class TimelineMetricCacheTest { Assert.assertEquals(1, metricsList.size()); Assert.assertEquals("cpu_user", metric.getMetricName()); Assert.assertEquals("app1", metric.getAppId()); - Assert.assertEquals(newMetricValues,metric.getMetricValues()); + Assert.assertEquals(newMetricValues, metric.getMetricValues()); } }