RegionAttributesType.ExpirationAttributesType entryTimeToLive = regionConfig.getRegionAttributes().getEntryTimeToLive(); assertThat(entryTimeToLive.getTimeout()).isEqualTo("10"); assertThat(entryTimeToLive.getAction()).isEqualTo("destroy"); assertThat(entryTimeToLive.getCustomExpiry().getClassName()).isEqualTo("foo"); RegionAttributesType.ExpirationAttributesType regionTimeToLive = regionConfig.getRegionAttributes().getRegionTimeToLive(); assertThat(regionTimeToLive.getTimeout()).isEqualTo("20"); assertThat(regionTimeToLive.getAction()).isEqualTo("invalidate"); assertThat(regionTimeToLive.getCustomExpiry().getClassName()).isEqualTo("bar");
@Test public void alterWithEntryIdleTimeOutAction() { RegionConfig deltaConfig = getDeltaRegionConfig( "alter region --name=regionA --entry-idle-time-expiration-action=destroy"); RegionAttributesType.ExpirationAttributesType entryIdleTime = deltaConfig.getRegionAttributes().getEntryIdleTime(); assertThat(entryIdleTime).isNotNull(); assertThat(entryIdleTime.getTimeout()).isNull(); assertThat(entryIdleTime.getCustomExpiry()).isNull(); assertThat(entryIdleTime.getAction()).isEqualTo("destroy"); // 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("destroy"); assertThat(combinedExpirationAttributes.getCustomExpiry()).isNull(); }
if (newAttributes.hasTimoutOrAction() && existingAttributes != null) { int existingTimeout = existingAttributes.getTimeout(); ExpirationAction existingAction = existingAttributes.getAction(); if (newAttributes.getTimeout() != null) { existingTimeout = Integer.parseInt(newAttributes.getTimeout()); if (newAttributes.getAction() != null) { existingAction = ExpirationAction.fromXmlString(newAttributes.getAction()); if (newAttributes.hasCustomExpiry()) { DeclarableType newCustomExpiry = newAttributes.getCustomExpiry(); if (newCustomExpiry.equals(DeclarableType.EMPTY)) { mutator2.accept(null);
RegionAttributesType.ExpirationAttributesType eitl = regionAttributes.getEntryIdleTime(); ((RegionFactory<Object, Object>) factory).setEntryIdleTimeout( new ExpirationAttributes(Integer.valueOf(eitl.getTimeout()), ExpirationAction.fromXmlString(eitl.getAction()))); if (eitl.getCustomExpiry() != null) { ((RegionFactory<Object, Object>) factory).setCustomEntryIdleTimeout( DeclarableTypeInstantiator.newInstance(eitl.getCustomExpiry(), cache)); RegionAttributesType.ExpirationAttributesType ettl = regionAttributes.getEntryTimeToLive(); ((RegionFactory<Object, Object>) factory).setEntryTimeToLive( new ExpirationAttributes(Integer.valueOf(ettl.getTimeout()), ExpirationAction.fromXmlString(ettl.getAction()))); if (ettl.getCustomExpiry() != null) { ((RegionFactory<Object, Object>) factory) .setCustomEntryTimeToLive(DeclarableTypeInstantiator.newInstance(ettl.getCustomExpiry(), cache)); RegionAttributesType.ExpirationAttributesType ritl = regionAttributes.getRegionIdleTime(); ((RegionFactory<Object, Object>) factory).setRegionIdleTimeout( new ExpirationAttributes(Integer.valueOf(ritl.getTimeout()), ExpirationAction.fromXmlString(ritl.getAction()))); RegionAttributesType.ExpirationAttributesType rttl = regionAttributes.getRegionTimeToLive(); ((RegionFactory<Object, Object>) factory).setRegionTimeToLive( new ExpirationAttributes(Integer.valueOf(rttl.getTimeout()), ExpirationAction.fromXmlString(rttl.getAction())));
assertThat(regionAttributes.getCacheLoader()).isEqualTo(declarableWithString); assertThat(regionAttributes.getCacheWriter()).isEqualTo(declarableWithString); assertThat(regionAttributes.getRegionTimeToLive().getCustomExpiry()) .isEqualTo(declarableWithString);
@Test public void generatesWithExpirationIdleTimeAttributes() { regionExpirationTTL = 10; regionExpirationTTLAction = ExpirationAction.DESTROY; regionExpirationIdleTime = 3; regionExpirationIdleAction = ExpirationAction.INVALIDATE; entryExpirationTTL = 1; entryExpirationTTLAction = ExpirationAction.LOCAL_DESTROY; entryExpirationIdleTime = 12; entryExpirationIdleAction = ExpirationAction.LOCAL_DESTROY; entryIdleTimeCustomExpiry = new ClassName<>("java.lang.String"); generate(); RegionAttributesType.ExpirationAttributesType regionTimeToLive = config.getRegionAttributes().getRegionTimeToLive(); assertThat(regionTimeToLive.getTimeout()).isEqualTo("10"); RegionAttributesType.ExpirationAttributesType entryTimeToLive = config.getRegionAttributes().getEntryTimeToLive(); assertThat(entryTimeToLive.getAction()) .isEqualTo(ExpirationAction.LOCAL_DESTROY.toXmlString()); RegionAttributesType.ExpirationAttributesType entryIdleTime = config.getRegionAttributes().getEntryIdleTime(); DeclarableType customExpiry = entryIdleTime.getCustomExpiry(); assertThat(customExpiry.getClassName()).isEqualTo("java.lang.String"); assertThat(entryIdleTime.getAction()) .isEqualTo(ExpirationAction.LOCAL_DESTROY.toXmlString()); assertThat(entryIdleTime.getTimeout()) .isEqualTo("12"); }
@Test public void alterWithEntryIdleTimeOut() { // check that the deltaConfig is created as expected RegionConfig deltaConfig = getDeltaRegionConfig("alter region --name=regionA --entry-idle-time-expiration=7"); RegionAttributesType.ExpirationAttributesType entryIdleTime = deltaConfig.getRegionAttributes().getEntryIdleTime(); assertThat(entryIdleTime).isNotNull(); assertThat(entryIdleTime.getTimeout()).isEqualTo("7"); assertThat(entryIdleTime.getCustomExpiry()).isNull(); 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.DESTROY, null, null); existingAttributes.setEntryIdleTime(expirationAttributesType); existingRegionConfig.setRegionAttributes(existingAttributes); command.updateConfigForGroup("cluster", cacheConfig, deltaConfig); RegionAttributesType.ExpirationAttributesType combinedExpirationAttributes = existingRegionConfig.getRegionAttributes().getEntryIdleTime(); assertThat(combinedExpirationAttributes.getTimeout()).isEqualTo("7"); assertThat(combinedExpirationAttributes.getAction()).isEqualTo("destroy"); assertThat(combinedExpirationAttributes.getCustomExpiry()).isNull(); }
@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(); }
@Test public void alterWithEntryIdleTimeOutCustomExpiry() { RegionConfig deltaConfig = getDeltaRegionConfig("alter region --name=regionA --entry-idle-time-custom-expiry=abc"); RegionAttributesType.ExpirationAttributesType entryIdleTime = deltaConfig.getRegionAttributes().getEntryIdleTime(); assertThat(entryIdleTime).isNotNull(); assertThat(entryIdleTime.getTimeout()).isNull(); assertThat(entryIdleTime.getCustomExpiry().getClassName()).isEqualTo("abc"); 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().getClassName()).isEqualTo("abc"); }
@Test public void constructorWithParameter() { expirationAttributes = new RegionAttributesType.ExpirationAttributesType(null, ExpirationAction.DESTROY, null, null); assertThat(expirationAttributes.getAction()).isEqualTo("destroy"); assertThat(expirationAttributes.getTimeout()).isNull(); assertThat(expirationAttributes.getCustomExpiry()).isNull(); assertThat(expirationAttributes.hasTimoutOrAction()).isTrue(); assertThat(expirationAttributes.hasCustomExpiry()).isFalse(); expirationAttributes = new RegionAttributesType.ExpirationAttributesType(10, null, null, null); assertThat(expirationAttributes.getAction()).isNull(); assertThat(expirationAttributes.getTimeout()).isEqualTo("10"); assertThat(expirationAttributes.getCustomExpiry()).isNull(); assertThat(expirationAttributes.hasTimoutOrAction()).isTrue(); assertThat(expirationAttributes.hasCustomExpiry()).isFalse(); expirationAttributes = new RegionAttributesType.ExpirationAttributesType(null, null, "abc", null); assertThat(expirationAttributes.getAction()).isNull(); assertThat(expirationAttributes.getTimeout()).isNull(); assertThat(expirationAttributes.getCustomExpiry()).isNotNull(); assertThat(expirationAttributes.hasTimoutOrAction()).isFalse(); assertThat(expirationAttributes.hasCustomExpiry()).isTrue(); }
ExpirationAttributesType combine(ExpirationAttributesType existing, ExpirationAttributesType delta) { if (delta == null) { return existing; } if (existing == null) { existing = new ExpirationAttributesType(); existing.setAction(ExpirationAction.INVALIDATE.toXmlString()); existing.setTimeout("0"); } if (delta.getTimeout() != null) { existing.setTimeout(delta.getTimeout()); } if (delta.getAction() != null) { existing.setAction(delta.getAction()); } if (delta.getCustomExpiry() != null) { if (delta.getCustomExpiry().equals(DeclarableType.EMPTY)) { existing.setCustomExpiry(null); } else { existing.setCustomExpiry(delta.getCustomExpiry()); } } return existing; }
@Test public void updateWithEntryIdleTime_timeoutAndAction() { RegionAttributesType.ExpirationAttributesType expiration = new RegionAttributesType.ExpirationAttributesType(); regionAttributes.setEntryIdleTime(expiration); expiration.setTimeout("10"); expiration.setAction("invalidate"); ExpirationAttributes existing = new ExpirationAttributes(); when(region.getEntryIdleTimeout()).thenReturn(existing); function.alterRegion(cache, config); ArgumentCaptor<ExpirationAttributes> updatedCaptor = ArgumentCaptor.forClass(ExpirationAttributes.class); verify(mutator).setEntryIdleTimeout(updatedCaptor.capture()); assertThat(updatedCaptor.getValue().getTimeout()).isEqualTo(10); assertThat(updatedCaptor.getValue().getAction()).isEqualTo(ExpirationAction.INVALIDATE); verify(mutator, times(0)).setCustomEntryIdleTimeout(any()); }
public static RegionAttributesType.ExpirationAttributesType getExpirationAttributes( Integer timeout, ExpirationAction action, ClassName<CustomExpiry> expiry) { if (timeout == null && action == null && expiry == null) { return null; } RegionAttributesType.ExpirationAttributesType attributesType = new RegionAttributesType.ExpirationAttributesType(); attributesType.setTimeout(Objects.toString(timeout, "0")); if (action == null) { action = ExpirationAction.INVALIDATE; } attributesType.setAction(action.toXmlString()); if (expiry != null) { attributesType.setCustomExpiry(new DeclarableType(expiry.getClassName())); } return attributesType; }
@Test public void updateWithEntryIdleTime_TimeoutOnly() { RegionAttributesType.ExpirationAttributesType expiration = new RegionAttributesType.ExpirationAttributesType(); regionAttributes.setEntryIdleTime(expiration); expiration.setTimeout("10"); ExpirationAttributes existing = new ExpirationAttributes(20, ExpirationAction.DESTROY); when(region.getEntryIdleTimeout()).thenReturn(existing); function.alterRegion(cache, config); ArgumentCaptor<ExpirationAttributes> updatedCaptor = ArgumentCaptor.forClass(ExpirationAttributes.class); verify(mutator).setEntryIdleTimeout(updatedCaptor.capture()); assertThat(updatedCaptor.getValue().getTimeout()).isEqualTo(10); assertThat(updatedCaptor.getValue().getAction()).isEqualTo(ExpirationAction.DESTROY); verify(mutator, times(0)).setCustomEntryIdleTimeout(any()); }
/** * @return true if custom expiry class is specified */ public boolean hasCustomExpiry() { return getCustomExpiry() != null; }
@Test public void deleteCustomExpiry() { RegionAttributesType.ExpirationAttributesType expiration = new RegionAttributesType.ExpirationAttributesType(); regionAttributes.setEntryIdleTime(expiration); expiration.setCustomExpiry(DeclarableType.EMPTY); function.alterRegion(cache, config); verify(mutator, times(0)).setEntryIdleTimeout(any()); verify(mutator).setCustomEntryIdleTimeout(null); }
ExpirationAttributesType getExpirationAttributes(Integer timeout, ExpirationAction action, ClassName expiry) { if (timeout == null && action == null && expiry == null) { return null; } if (expiry != null) { return new ExpirationAttributesType(timeout, action, expiry.getClassName(), expiry.getInitProperties()); } else { return new ExpirationAttributesType(timeout, action, null, null); } }
/** * @return true if timeout or action is specified */ public boolean hasTimoutOrAction() { return (getTimeout() != null || getAction() != null); }
@Before public void before() throws Exception { regionAttributes = new RegionAttributesType(); expirationAttributes = new RegionAttributesType.ExpirationAttributesType(); }
@Test public void updateWithCustomExpiry() { RegionAttributesType.ExpirationAttributesType expiration = new RegionAttributesType.ExpirationAttributesType(); regionAttributes.setEntryIdleTime(expiration); DeclarableType mockExpiry = mock(DeclarableType.class); when(mockExpiry.getClassName()).thenReturn(MyCustomExpiry.class.getName()); expiration.setCustomExpiry(mockExpiry); function.alterRegion(cache, config); verify(mutator, times(0)).setEntryIdleTimeout(any()); verify(mutator).setCustomEntryIdleTimeout(notNull()); }