@Test(expected = ConfigurationException.class) public void testConfigNull() throws Exception { new ClusterTierManagerPassiveEntity(null, null, null); }
@Override public void invokePassive(InvokeContext context, EhcacheEntityMessage message) { if (message instanceof EhcacheOperationMessage) { EhcacheOperationMessage operationMessage = (EhcacheOperationMessage) message; EhcacheMessageType messageType = operationMessage.getMessageType(); if (isLifecycleMessage(messageType)) { invokeLifeCycleOperation((LifecycleMessage) message); } else { throw new AssertionError("Unsupported EhcacheOperationMessage: " + operationMessage.getMessageType()); } } else { throw new AssertionError("Unsupported EhcacheEntityMessage: " + message.getClass()); } }
@Test public void testInvalidMessageThrowsError() throws Exception { OffHeapIdentifierRegistry registry = new OffHeapIdentifierRegistry(4, MemoryUnit.MEGABYTES); registry.addResource("serverResource", 4, MemoryUnit.MEGABYTES); ClusterTierManagerConfiguration configuration = new ClusterTierManagerConfiguration("identifier", new ServerSideConfigBuilder() .build()); EhcacheStateService ehcacheStateService = registry.getService(new EhcacheStateServiceConfig(configuration, registry, DEFAULT_MAPPER)); Management management = new Management(registry, ehcacheStateService, false, configuration.getIdentifier()); final ClusterTierManagerPassiveEntity passiveEntity = new ClusterTierManagerPassiveEntity(configuration, ehcacheStateService, management); try { passiveEntity.invokePassive(null, new InvalidMessage()); fail("Invalid message should result in AssertionError"); } catch (AssertionError e) { assertThat(e.getMessage(), containsString("Unsupported EhcacheEntityMessage")); } }
@Test public void testDestroyWithStores() throws Exception { OffHeapIdentifierRegistry registry = new OffHeapIdentifierRegistry(32, MemoryUnit.MEGABYTES); registry.addResource("serverResource1", 32, MemoryUnit.MEGABYTES); registry.addResource("serverResource2", 32, MemoryUnit.MEGABYTES); ServerSideConfiguration serverSideConfiguration = new ServerSideConfigBuilder() .sharedPool("primary", "serverResource1", 4, MemoryUnit.MEGABYTES) .sharedPool("secondary", "serverResource2", 8, MemoryUnit.MEGABYTES) .build(); ClusterTierManagerConfiguration configuration = new ClusterTierManagerConfiguration("identifier", serverSideConfiguration); EhcacheStateService ehcacheStateService = registry.getService(new EhcacheStateServiceConfig(configuration, registry, DEFAULT_MAPPER)); Management management = new Management(registry, ehcacheStateService, false, configuration.getIdentifier()); final ClusterTierManagerPassiveEntity passiveEntity = new ClusterTierManagerPassiveEntity(configuration, ehcacheStateService, management); assertThat(registry.getResource("serverResource1").getUsed(), is(MemoryUnit.MEGABYTES.toBytes(4L))); assertThat(registry.getResource("serverResource2").getUsed(), is(MemoryUnit.MEGABYTES.toBytes(8L))); assertThat(registry.getStoreManagerService().getSharedResourcePoolIds(), containsInAnyOrder("primary", "secondary")); passiveEntity.destroy(); assertThat(registry.getStoreManagerService().getSharedResourcePoolIds(), is(Matchers.<String>empty())); assertThat(registry.getResource("serverResource1").getUsed(), is(MemoryUnit.MEGABYTES.toBytes(0L))); assertThat(registry.getResource("serverResource2").getUsed(), is(MemoryUnit.MEGABYTES.toBytes(0L))); }
@Test public void testPrepareForDestroy() throws Exception { OffHeapIdentifierRegistry registry = new OffHeapIdentifierRegistry(4, MemoryUnit.MEGABYTES); registry.addResource("serverResource", 4, MemoryUnit.MEGABYTES); ClusterTierManagerConfiguration configuration = new ClusterTierManagerConfiguration("identifier", new ServerSideConfigBuilder() .build()); EhcacheStateService ehcacheStateService = registry.getService(new EhcacheStateServiceConfig(configuration, registry, DEFAULT_MAPPER)); Management management = new Management(registry, ehcacheStateService, false, configuration.getIdentifier()); final ClusterTierManagerPassiveEntity passiveEntity = new ClusterTierManagerPassiveEntity(configuration, ehcacheStateService, management); passiveEntity.invokePassive(null, new LifecycleMessage.PrepareForDestroy()); try { ehcacheStateService.validate(null); } catch (DestroyInProgressException e) { assertThat(e.getMessage(), containsString("in progress for destroy")); } }
@Override public ClusterTierManagerPassiveEntity createPassiveEntity(ServiceRegistry registry, byte[] configuration) throws ConfigurationException { ClusterTierManagerConfiguration clusterTierManagerConfiguration = configCodec.decodeClusterTierManagerConfiguration(configuration); EhcacheStateService ehcacheStateService; try { ehcacheStateService = registry.getService(new EhcacheStateServiceConfig(clusterTierManagerConfiguration, registry, DEFAULT_MAPPER)); } catch (ServiceException e) { throw new ConfigurationException("Unable to retrieve EhcacheStateService: " + e.getMessage()); } Management management = new Management(registry, ehcacheStateService, false, clusterTierManagerConfiguration.getIdentifier()); return new ClusterTierManagerPassiveEntity(clusterTierManagerConfiguration, ehcacheStateService, management); }
/** * Ensure configuration fails when specifying non-existent resource. */ @Test public void testConfigureMissingPoolResource() throws Exception { final OffHeapIdentifierRegistry registry = new OffHeapIdentifierRegistry(); registry.addResource("serverResource1", 32, MemoryUnit.MEGABYTES); registry.addResource("defaultServerResource", 64, MemoryUnit.MEGABYTES); ServerSideConfiguration serverSideConfiguration = new ServerSideConfigBuilder() .defaultResource("defaultServerResource") .sharedPool("primary", "serverResource1", 4, MemoryUnit.MEGABYTES) .sharedPool("secondary", "serverResource2", 8, MemoryUnit.MEGABYTES) // missing on 'server' .build(); ClusterTierManagerConfiguration configuration = new ClusterTierManagerConfiguration("identifier", serverSideConfiguration); EhcacheStateService ehcacheStateService = registry.getService(new EhcacheStateServiceConfig(configuration, registry, DEFAULT_MAPPER)); Management management = new Management(registry, ehcacheStateService, false, configuration.getIdentifier()); try { new ClusterTierManagerPassiveEntity(configuration, ehcacheStateService, management); fail("Entity creation should have failed"); } catch (ConfigurationException e) { assertThat(e.getMessage(), containsString("server side resource")); } assertThat(registry.getStoreManagerService().getSharedResourcePoolIds(), is(Matchers.<String>empty())); assertThat(registry.getResource("serverResource1").getUsed(), is(0L)); assertThat(registry.getResource("serverResource2"), is(nullValue())); assertThat(registry.getResource("defaultServerResource").getUsed(), is(0L)); assertThat(registry.getStoreManagerService().getStores(), is(Matchers.<String>empty())); }
/** * Ensure configuration fails when specifying non-existent default resource. */ @Test public void testConfigureMissingDefaultResource() throws Exception { final OffHeapIdentifierRegistry registry = new OffHeapIdentifierRegistry(); registry.addResource("serverResource1", 32, MemoryUnit.MEGABYTES); registry.addResource("serverResource2", 32, MemoryUnit.MEGABYTES); ServerSideConfiguration serverSideConfiguration = new ServerSideConfigBuilder() .defaultResource("defaultServerResource") .sharedPool("primary", "serverResource1", 4, MemoryUnit.MEGABYTES) .sharedPool("secondary", "serverResource2", 8, MemoryUnit.MEGABYTES) .build(); ClusterTierManagerConfiguration configuration = new ClusterTierManagerConfiguration("identifier", serverSideConfiguration); EhcacheStateService ehcacheStateService = registry.getService(new EhcacheStateServiceConfig(configuration, registry, DEFAULT_MAPPER)); Management management = new Management(registry, ehcacheStateService, false, configuration.getIdentifier()); try { new ClusterTierManagerPassiveEntity(configuration, ehcacheStateService, management); fail("Entity creation should have failed"); } catch (ConfigurationException e) { assertThat(e.getMessage(), containsString("not defined")); } assertThat(registry.getStoreManagerService().getSharedResourcePoolIds(), is(Matchers.<String>empty())); assertThat(registry.getResource("serverResource1").getUsed(), is(0L)); assertThat(registry.getResource("serverResource2").getUsed(), is(0L)); assertThat(registry.getResource("defaultServerResource"), is(nullValue())); assertThat(registry.getStoreManagerService().getStores(), is(Matchers.<String>empty())); }
@Test public void testConfigureLargeSharedPool() throws Exception { final OffHeapIdentifierRegistry registry = new OffHeapIdentifierRegistry(); registry.addResource("defaultServerResource", 64, MemoryUnit.MEGABYTES); registry.addResource("serverResource1", 8, MemoryUnit.MEGABYTES); registry.addResource("serverResource2", 8, MemoryUnit.MEGABYTES); ServerSideConfiguration serverSideConfiguration = new ServerSideConfigBuilder() .defaultResource("defaultServerResource") .sharedPool("primary", "serverResource1", 4, MemoryUnit.MEGABYTES) .sharedPool("secondary", "serverResource2", 4, MemoryUnit.MEGABYTES) .sharedPool("tooBig", "serverResource2", 16, MemoryUnit.MEGABYTES) .build(); ClusterTierManagerConfiguration configuration = new ClusterTierManagerConfiguration("identifier", serverSideConfiguration); EhcacheStateService ehcacheStateService = registry.getService(new EhcacheStateServiceConfig(configuration, registry, DEFAULT_MAPPER)); Management management = new Management(registry, ehcacheStateService, false, configuration.getIdentifier()); try { new ClusterTierManagerPassiveEntity(configuration, ehcacheStateService, management); fail("Entity creation should have failed"); } catch (ConfigurationException e) { assertThat(e.getMessage(), containsString("resources to allocate")); } final Set<String> poolIds = registry.getStoreManagerService().getSharedResourcePoolIds(); assertThat(poolIds, is(Matchers.<String>empty())); assertThat(registry.getResource("serverResource1").getUsed(), is(0L)); assertThat(registry.getResource("serverResource2").getUsed(), is(0L)); assertThat(registry.getResource("defaultServerResource").getUsed(), is(0L)); assertThat(registry.getStoreManagerService().getStores(), is(Matchers.<String>empty())); }
/** * Ensures basic shared resource pool configuration. */ @Test public void testConfigure() throws Exception { OffHeapIdentifierRegistry registry = new OffHeapIdentifierRegistry(32, MemoryUnit.MEGABYTES); registry.addResource("defaultServerResource", 8, MemoryUnit.MEGABYTES); registry.addResource("serverResource1", 8, MemoryUnit.MEGABYTES); registry.addResource("serverResource2", 8, MemoryUnit.MEGABYTES); ServerSideConfiguration serverSideConfiguration = new ServerSideConfigBuilder() .defaultResource("defaultServerResource") .sharedPool("primary", "serverResource1", 4, MemoryUnit.MEGABYTES) .sharedPool("secondary", "serverResource2", 8, MemoryUnit.MEGABYTES) .build(); ClusterTierManagerConfiguration configuration = new ClusterTierManagerConfiguration("identifier", serverSideConfiguration); EhcacheStateService ehcacheStateService = registry.getService(new EhcacheStateServiceConfig(configuration, registry, DEFAULT_MAPPER)); Management management = new Management(registry, ehcacheStateService, false, configuration.getIdentifier()); final ClusterTierManagerPassiveEntity passiveEntity = new ClusterTierManagerPassiveEntity(configuration, ehcacheStateService, management); assertThat(registry.getStoreManagerService() .getSharedResourcePoolIds(), containsInAnyOrder("primary", "secondary")); assertThat(registry.getResource("serverResource1").getUsed(), is(MemoryUnit.MEGABYTES.toBytes(4L))); assertThat(registry.getResource("serverResource2").getUsed(), is(MemoryUnit.MEGABYTES.toBytes(8L))); assertThat(registry.getResource("defaultServerResource").getUsed(), is(0L)); assertThat(registry.getStoreManagerService().getStores(), is(Matchers.<String>empty())); }