@Test public void alterWithAsyncEventQueueIds() { RegionConfig deltaConfig = getDeltaRegionConfig("alter region --name=regionA --async-event-queue-id=abc,def"); assertThat(deltaConfig.getRegionAttributes().getAsyncEventQueueIds()).isEqualTo("abc,def"); assertThat(deltaConfig.getRegionAttributes().getGatewaySenderIds()).isNull(); RegionAttributesType existingAttributes = new RegionAttributesType(); existingRegionConfig.setRegionAttributes(existingAttributes); existingAttributes.setAsyncEventQueueIds("xyz"); existingAttributes.setGatewaySenderIds("xyz"); command.updateConfigForGroup("cluster", cacheConfig, deltaConfig); assertThat(existingAttributes.getGatewaySenderIds()).isEqualTo("xyz"); assertThat(existingAttributes.getAsyncEventQueueIds()).isEqualTo("abc,def"); }
factory.setDataPolicy(DataPolicy.fromString(regionAttributes.getDataPolicy().name())); if (regionAttributes.getScope() != null) { factory.setScope(Scope.fromString(regionAttributes.getScope().name())); if (regionAttributes.getCacheLoader() != null) { ((RegionFactory<Object, Object>) factory) .setCacheLoader(DeclarableTypeInstantiator.newInstance(regionAttributes.getCacheLoader(), cache)); if (regionAttributes.getCacheWriter() != null) { ((RegionFactory<Object, Object>) factory) .setCacheWriter(DeclarableTypeInstantiator.newInstance(regionAttributes.getCacheWriter(), cache)); if (regionAttributes.getCacheListeners() != null) { List<DeclarableType> configListeners = regionAttributes.getCacheListeners(); CacheListener[] listeners = new CacheListener[configListeners.size()]; for (int i = 0; i < configListeners.size(); i++) { final String keyConstraint = regionAttributes.getKeyConstraint(); final String valueConstraint = regionAttributes.getValueConstraint(); if (keyConstraint != null && !keyConstraint.isEmpty()) { Class<Object> keyConstraintClass = if (regionAttributes.getCompressor() != null) { ((RegionFactory<Object, Object>) factory) .setCompressor(DeclarableTypeInstantiator.newInstance(regionAttributes.getCompressor()));
existingAttributes.setEntryIdleTime( combine(existingAttributes.getEntryIdleTime(), deltaAttributes.getEntryIdleTime())); existingAttributes.setEntryTimeToLive( combine(existingAttributes.getEntryTimeToLive(), deltaAttributes.getEntryTimeToLive())); existingAttributes.setRegionIdleTime( combine(existingAttributes.getRegionIdleTime(), deltaAttributes.getRegionIdleTime())); existingAttributes.setRegionTimeToLive( combine(existingAttributes.getRegionTimeToLive(), deltaAttributes.getRegionTimeToLive())); if (deltaAttributes.getCacheLoader() != null) { if (deltaAttributes.getCacheLoader().equals(DeclarableType.EMPTY)) { existingAttributes.setCacheLoader(null); } else { existingAttributes.setCacheLoader(deltaAttributes.getCacheLoader()); if (deltaAttributes.getCacheWriter() != null) { if (deltaAttributes.getCacheWriter().equals(DeclarableType.EMPTY)) { existingAttributes.setCacheWriter(null); } else { existingAttributes.setCacheWriter(deltaAttributes.getCacheWriter()); if (!deltaAttributes.getCacheListeners().isEmpty()) { existingAttributes.getCacheListeners().clear(); if (!deltaAttributes.getCacheListeners().get(0).equals(DeclarableType.EMPTY)) { existingAttributes.getCacheListeners().addAll(deltaAttributes.getCacheListeners()); if (deltaAttributes.getGatewaySenderIds() != null) { existingAttributes.setGatewaySenderIds(deltaAttributes.getGatewaySenderIds());
private void addAsyncEventQueueId(String queueName, RegionAttributesType attributes) { String asyncEventQueueList = attributes.getAsyncEventQueueIds(); if (asyncEventQueueList == null) { asyncEventQueueList = ""; } if (!asyncEventQueueList.contains(queueName)) { if (asyncEventQueueList.length() > 0) { asyncEventQueueList += ','; } asyncEventQueueList += queueName; attributes.setAsyncEventQueueIds(asyncEventQueueList); } }
private boolean removeJdbcLoader(RegionAttributesType attributes) { DeclarableType cacheLoader = attributes.getCacheLoader(); if (cacheLoader != null) { if (JdbcLoader.class.getName().equals(cacheLoader.getClassName())) { attributes.setCacheLoader(null); return true; } } return false; }
private boolean removeJdbcWriter(RegionAttributesType attributes) { DeclarableType cacheWriter = attributes.getCacheWriter(); if (cacheWriter != null) { if (JdbcWriter.class.getName().equals(cacheWriter.getClassName())) { attributes.setCacheWriter(null); return true; } } return false; }
@Test public void alterWithCloningEnabled() { RegionAttributesType regionAttributes = getDeltaRegionConfig("alter region --name=regionA --enable-cloning=false") .getRegionAttributes(); assertThat(regionAttributes.isCloningEnabled()).isFalse(); assertThat(regionAttributes.getAsyncEventQueueIds()).isNull(); assertThat(regionAttributes.getDataPolicy()).isNull(); assertThat(regionAttributes.getGatewaySenderIds()).isNull(); assertThat(regionAttributes.getCacheLoader()).isNull(); assertThat(regionAttributes.getCacheWriter()).isNull(); assertThat(regionAttributes.getCacheListeners()).isNotNull().isEmpty(); assertThat(regionAttributes.getEvictionAttributes()).isNull(); assertThat(regionAttributes.getEntryIdleTime()).isNull(); assertThat(regionAttributes.getEntryTimeToLive()).isNull(); assertThat(regionAttributes.getRegionIdleTime()).isNull(); assertThat(regionAttributes.getRegionTimeToLive()).isNull(); }
RegionAttributesType regionAttributesType = new RegionAttributesType(); deltaConfig.setRegionAttributes(regionAttributesType); regionAttributesType.setEntryIdleTime(getExpirationAttributes(entryExpirationIdleTime, entryExpirationIdleTimeAction, entryIdleTimeCustomExpiry)); regionAttributesType.setEntryTimeToLive(getExpirationAttributes(entryExpirationTTL, entryExpirationTTLAction, entryTTLCustomExpiry)); regionAttributesType.setRegionIdleTime( getExpirationAttributes(regionExpirationIdleTime, regionExpirationIdleTimeAction, null)); regionAttributesType.setRegionTimeToLive( getExpirationAttributes(regionExpirationTTL, regionExpirationTTLAction, null)); if (cacheLoader != null) { regionAttributesType.setCacheLoader( new DeclarableType(cacheLoader.getClassName(), cacheLoader.getInitProperties())); regionAttributesType.setCacheWriter( new DeclarableType(cacheLoader.getClassName(), cacheLoader.getInitProperties())); regionAttributesType.getCacheListeners().addAll( Arrays.stream(cacheListeners) .map(l -> new DeclarableType(l.getClassName(), l.getInitProperties())) regionAttributesType.setGatewaySenderIds(StringUtils.join(gatewaySenderIds, ",")); regionAttributesType.setAsyncEventQueueIds(StringUtils.join(asyncEventQueueIds, ",")); regionAttributesType.setCloningEnabled(cloningEnabled); lruEntryCount.setMaximum(evictionMax.toString()); evictionAttributes.setLruEntryCount(lruEntryCount);
if (regionAttributes.isCloningEnabled() != null) { mutator.setCloningEnabled(regionAttributes.isCloningEnabled()); if (logger.isDebugEnabled()) { logger.debug("Region successfully altered - cloning"); if (regionAttributes.getEvictionAttributes() != null) { mutator.getEvictionAttributesMutator().setMaximum(Integer .parseInt(regionAttributes.getEvictionAttributes().getLruEntryCount().getMaximum())); if (logger.isDebugEnabled()) { logger.debug("Region successfully altered - eviction attributes max"); updateExpirationAttributes(cache, regionAttributes.getEntryIdleTime(), region.getEntryIdleTimeout(), p -> mutator.setEntryIdleTimeout(p), p -> mutator.setCustomEntryIdleTimeout(p)); updateExpirationAttributes(cache, regionAttributes.getEntryTimeToLive(), region.getEntryTimeToLive(), p -> mutator.setEntryTimeToLive(p), p -> mutator.setCustomEntryTimeToLive(p)); updateExpirationAttributes(cache, regionAttributes.getRegionIdleTime(), region.getRegionIdleTimeout(), p -> mutator.setRegionIdleTimeout(p), null); updateExpirationAttributes(cache, regionAttributes.getRegionTimeToLive(), region.getRegionTimeToLive(), p -> mutator.setRegionTimeToLive(p), null); final Set<String> newGatewaySenderIds = regionAttributes.getGatewaySenderIdsAsSet(); final Set<String> newAsyncEventQueueIds = regionAttributes.getAsyncEventQueueIdsAsSet(); final List<DeclarableType> newCacheListeners = regionAttributes.getCacheListeners(); final DeclarableType cacheLoader = regionAttributes.getCacheLoader(); if (cacheLoader != null) {
@Test public void alterWithCacheLoader() { RegionConfig deltaConfig = getDeltaRegionConfig("alter region --name=regionA --cache-loader=abc"); RegionAttributesType deltaAttributes = deltaConfig.getRegionAttributes(); assertThat(deltaAttributes.getCacheWriter()).isNull(); assertThat(deltaAttributes.getCacheLoader().getClassName()).isEqualTo("abc"); assertThat(deltaAttributes.getCacheListeners()).isNotNull().isEmpty(); RegionAttributesType existingAttributes = new RegionAttributesType(); existingAttributes.getCacheListeners().add(new DeclarableType("def")); existingAttributes.setCacheLoader(new DeclarableType("def")); existingAttributes.setCacheWriter(new DeclarableType("def")); existingRegionConfig.setRegionAttributes(existingAttributes); command.updateConfigForGroup("cluster", cacheConfig, deltaConfig); // after update, the cache listeners remains the same assertThat(existingAttributes.getCacheListeners()).hasSize(1); assertThat(existingAttributes.getCacheListeners().get(0).getClassName()).isEqualTo("def"); // after update the cache writer remains the same assertThat(existingAttributes.getCacheWriter().getClassName()).isEqualTo("def"); // after update the cache loader is changed assertThat(existingAttributes.getCacheLoader().getClassName()).isEqualTo("abc"); }
@Test public void alterWithEmptyEntryIdleTimeOutCustomExpiry() { RegionConfig deltaConfig = getDeltaRegionConfig("alter region --name=regionA --entry-idle-time-custom-expiry=''"); RegionAttributesType.ExpirationAttributesType entryIdleTime = deltaConfig.getRegionAttributes().getEntryIdleTime(); assertThat(entryIdleTime).isNotNull(); assertThat(entryIdleTime.getTimeout()).isNull(); assertThat(entryIdleTime.getCustomExpiry()).isEqualTo(DeclarableType.EMPTY); assertThat(entryIdleTime.getAction()).isNull(); // check that the combined the configuration is created as expected RegionAttributesType existingAttributes = new RegionAttributesType(); RegionAttributesType.ExpirationAttributesType expirationAttributesType = new RegionAttributesType.ExpirationAttributesType(10, ExpirationAction.INVALIDATE, null, null); existingAttributes.setEntryIdleTime(expirationAttributesType); existingRegionConfig.setRegionAttributes(existingAttributes); command.updateConfigForGroup("cluster", cacheConfig, deltaConfig); RegionAttributesType.ExpirationAttributesType combinedExpirationAttributes = existingRegionConfig.getRegionAttributes().getEntryIdleTime(); assertThat(combinedExpirationAttributes.getTimeout()).isEqualTo("10"); assertThat(combinedExpirationAttributes.getAction()).isEqualTo("invalidate"); assertThat(combinedExpirationAttributes.getCustomExpiry()).isNull(); }
private void setShortcutAttributes() { if (regionAttributes == null) { regionAttributes = new RegionAttributesType(); regionAttributes.setDataPolicy(RegionAttributesDataPolicy.PARTITION); break; regionAttributes.setDataPolicy(RegionAttributesDataPolicy.PARTITION); regionAttributes.setRedundantCopy("1"); break; regionAttributes.setDataPolicy(RegionAttributesDataPolicy.PERSISTENT_PARTITION); break; regionAttributes.setDataPolicy(RegionAttributesDataPolicy.PERSISTENT_PARTITION); regionAttributes.setRedundantCopy("1"); break; regionAttributes.setDataPolicy(RegionAttributesDataPolicy.PARTITION); regionAttributes.setLruHeapPercentage(EnumActionDestroyOverflow.OVERFLOW_TO_DISK); break; regionAttributes.setDataPolicy(RegionAttributesDataPolicy.PARTITION); regionAttributes.setRedundantCopy("1"); regionAttributes.setLruHeapPercentage(EnumActionDestroyOverflow.OVERFLOW_TO_DISK); break; regionAttributes.setDataPolicy(RegionAttributesDataPolicy.PERSISTENT_PARTITION); regionAttributes.setLruHeapPercentage(EnumActionDestroyOverflow.OVERFLOW_TO_DISK); break;
assertThat(regionAttributes.getCacheListeners().get(0)).isEqualTo(declarableWithString); assertThat(regionAttributes.getCompressor().toString()).isEqualTo("my.className"); assertThat(regionAttributes.getCacheLoader()).isEqualTo(declarableWithString); assertThat(regionAttributes.getCacheWriter()).isEqualTo(declarableWithString); assertThat(regionAttributes.getRegionTimeToLive().getCustomExpiry()) .isEqualTo(declarableWithString);
@Test public void alterWithNoCacheLoader() { RegionConfig deltaConfig = getDeltaRegionConfig("alter region --name=regionA --cache-loader=''"); RegionAttributesType deltaAttributes = deltaConfig.getRegionAttributes(); assertThat(deltaAttributes.getCacheLoader()).isEqualTo(DeclarableType.EMPTY); RegionAttributesType existingAttributes = new RegionAttributesType(); existingAttributes.setCacheLoader(new DeclarableType("def")); existingRegionConfig.setRegionAttributes(existingAttributes); command.updateConfigForGroup("cluster", cacheConfig, deltaConfig); // after the update the cache loader is null assertThat(existingAttributes.getCacheLoader()).isNull(); }
@Test public void alterWithEvictionMaxWithExistingLruEntryCount() { RegionConfig deltaConfig = getDeltaRegionConfig("alter region --name=regionA --eviction-max=20"); // we are saving the eviction-max as a lruEntryCount's maximum value RegionAttributesType.EvictionAttributes.LruEntryCount lruEntryCount = deltaConfig.getRegionAttributes().getEvictionAttributes().getLruEntryCount(); assertThat(lruEntryCount.getMaximum()).isEqualTo("20"); // when there is no eviction attributes at all RegionAttributesType existingAttributes = new RegionAttributesType(); existingRegionConfig.setRegionAttributes(existingAttributes); command.updateConfigForGroup("cluster", cacheConfig, deltaConfig); assertThat(existingAttributes.getEvictionAttributes()).isNull(); // when there is lruHeapPercentage eviction RegionAttributesType.EvictionAttributes evictionAttributes = new RegionAttributesType.EvictionAttributes(); existingAttributes.setEvictionAttributes(evictionAttributes); RegionAttributesType.EvictionAttributes.LruEntryCount existingEntryCount = new RegionAttributesType.EvictionAttributes.LruEntryCount(); existingEntryCount.setMaximum("100"); existingEntryCount.setAction(EnumActionDestroyOverflow.LOCAL_DESTROY); evictionAttributes.setLruEntryCount(existingEntryCount); command.updateConfigForGroup("cluster", cacheConfig, deltaConfig); assertThat(evictionAttributes.getLruEntryCount().getMaximum()).isEqualTo("20"); assertThat(evictionAttributes.getLruEntryCount().getAction()) .isEqualTo(EnumActionDestroyOverflow.LOCAL_DESTROY); }
@Test public void generatesWithCacheClasses() { cacheListeners = new HashSet<>(); cacheListeners.add(new ClassName<>("java.lang.String")); cacheLoader = new ClassName("java.lang.String"); cacheWriter = new ClassName("java.lang.String"); generate(); List<DeclarableType> cacheListeners = config.getRegionAttributes().getCacheListeners(); assertThat(cacheListeners).isNotNull(); assertThat(cacheListeners.get(0).getClassName()).isEqualTo("java.lang.String"); assertThat( config.getRegionAttributes().getCacheLoader().getClassName()) .isEqualTo("java.lang.String"); assertThat( config.getRegionAttributes().getCacheWriter().getClassName()) .isEqualTo("java.lang.String"); }
private void checkForCacheLoader(String regionName, RegionConfig regionConfig) throws PreconditionException { RegionAttributesType regionAttributes = regionConfig.getRegionAttributes(); if (regionAttributes != null) { DeclarableType loaderDeclarable = regionAttributes.getCacheLoader(); if (loaderDeclarable != null) { throw new PreconditionException("The existing region " + regionName + " must not already have a cache-loader, but it has " + loaderDeclarable.getClassName()); } } }
@Test public void alterWithCacheListener() { RegionConfig deltaConfig = getDeltaRegionConfig("alter region --name=regionA --cache-listener=abc,def"); List<DeclarableType> cacheListeners = deltaConfig.getRegionAttributes().getCacheListeners(); assertThat(cacheListeners).hasSize(2); assertThat(cacheListeners.get(0).getClassName()).isEqualTo("abc"); assertThat(cacheListeners.get(1).getClassName()).isEqualTo("def"); // check that the combined the configuration is created as expected RegionAttributesType existingAttributes = new RegionAttributesType(); existingAttributes.getCacheListeners().add(new DeclarableType("ghi")); existingRegionConfig.setRegionAttributes(existingAttributes); command.updateConfigForGroup("cluster", cacheConfig, deltaConfig); List<DeclarableType> updatedCacheListeners = existingRegionConfig.getRegionAttributes().getCacheListeners(); assertThat(updatedCacheListeners).hasSize(2); assertThat(updatedCacheListeners.get(0).getClassName()).isEqualTo("abc"); assertThat(updatedCacheListeners.get(1).getClassName()).isEqualTo("def"); assertThat(existingRegionConfig.getRegionAttributes().getEntryIdleTime()).isNull(); }
@Test public void regionConfig() { cacheConfig = new CacheConfig("1.0"); RegionConfig regionConfig = new RegionConfig(); regionConfig.setName("test"); regionConfig.setType("REPLICATE"); RegionAttributesType attributes = new RegionAttributesType(); attributes.setCacheLoader(new DeclarableType("abc.Foo")); regionConfig.setRegionAttributes(attributes); cacheConfig.getRegions().add(regionConfig); // make sure the xml marshed by this config can be validated with xsd String xml = service.marshall(cacheConfig); CacheConfig newCache = service.unMarshall(xml); assertThat(cacheConfig).isEqualToComparingFieldByFieldRecursively(newCache); }
private void setCacheWriter(RegionAttributesType attributes) { DeclarableType writer = new DeclarableType(); writer.setClassName(JdbcWriter.class.getName()); attributes.setCacheWriter(writer); } }