/** * Returns whether this action is distributed. * * @return true if this is INVALIDATE or DESTROY */ public boolean isDistributed() { return !isLocal(); }
private Object readResolve() throws ObjectStreamException { return fromOrdinal(ordinal); // Canonicalize }
public static void validatePRRegionExpirationAttributes(ExpirationAttributes expAtts) { if (expAtts.getTimeout() > 0) { ExpirationAction expAction = expAtts.getAction(); if (expAction.isInvalidate() || expAction.isLocalInvalidate()) { throw new IllegalStateException( "ExpirationAction INVALIDATE or LOCAL_INVALIDATE for region is not supported for Partitioned Region."); } else if (expAction.isDestroy() || expAction.isLocalDestroy()) { throw new IllegalStateException( "ExpirationAction DESTROY or LOCAL_DESTROY for region is not supported for Partitioned Region."); } } }
/** Returns true if the ExpirationAction is a distributed action. */ protected boolean isDistributedAction() { ExpirationAction action = getAction(); return action != null && (action.isInvalidate() || action.isDestroy()); }
@Override public boolean isPending() { RegionEntry re = this.re; if (re == null) { return false; } if (re.isDestroyedOrRemoved()) { return false; } ExpirationAction action = getAction(); if (action == null) { return false; } if ((action.isInvalidate() || action.isLocalInvalidate()) && re.isInvalid()) { return false; } return true; }
public ExpirationAttributesType(Integer timeout, ExpirationAction action, String expiry, Properties iniProps) { expirationAttributes.setTimeout(Objects.toString(timeout, null)); if (action != null) { expirationAttributes.setAction(action.toXmlString()); } if (expiry != null) { expirationAttributes.setCustomExpiry(new DeclarableType(expiry, iniProps)); } }
&& getScope().isDistributed()) { if (getEvictionAttributes().getAction().isLocalDestroy() || getEntryIdleTimeout().getAction().isLocal() || getEntryTimeToLive().getAction().isLocal() || getRegionIdleTimeout().getAction().isLocalInvalidate() || getRegionTimeToLive().getAction().isLocalInvalidate()) {
if ((entryIdleTimeout.getAction().isLocalDestroy() && entryIdleTimeout.getTimeout() > 0) || (entryTimeToLive.getAction().isLocalDestroy() && entryTimeToLive.getTimeout() > 0)) { throw new IllegalStateException( "ExpirationAction LOCAL_DESTROY is not supported for Partitioned Region."); if ((entryIdleTimeout.getAction().isLocalInvalidate() && entryIdleTimeout.getTimeout() > 0) || (entryTimeToLive.getAction().isLocalInvalidate() && entryTimeToLive.getTimeout() > 0)) { throw new IllegalStateException(
existingAction = ExpirationAction.fromXmlString(newAttributes.getAction());
/** Reschedules expiry tasks when reliability is resumed. */ private void resumeExpiration() { boolean isNoAccess = getMembershipAttributes().getLossAction().isNoAccess(); boolean isLimitedAccess = getMembershipAttributes().getLossAction().isLimitedAccess(); if (!(isNoAccess || isLimitedAccess)) { return; // early out: expiration was never affected by reliability } if (getEntryTimeToLive().getTimeout() > 0 && (isNoAccess || (isLimitedAccess && getEntryTimeToLive().getAction().isDistributed()))) { rescheduleEntryExpiryTasks(); } else if (getEntryIdleTimeout().getTimeout() > 0 && (isNoAccess || (isLimitedAccess && getEntryIdleTimeout().getAction().isDistributed()))) { rescheduleEntryExpiryTasks(); } else if (getCustomEntryTimeToLive() != null || getCustomEntryIdleTimeout() != null) { // Force all entries to be rescheduled rescheduleEntryExpiryTasks(); } if (getRegionTimeToLive().getTimeout() > 0 && (isNoAccess || (isLimitedAccess && getRegionTimeToLive().getAction().isDistributed()))) { addTTLExpiryTask(); } if (getRegionIdleTimeout().getTimeout() > 0 && (isNoAccess || (isLimitedAccess && getRegionIdleTimeout().getAction().isDistributed()))) { addIdleExpiryTask(); } }
ExpirationAction expirationAction = getEntryExpirationAction(); if (done && !getBucketAdvisor().isPrimary() && expirationAction != null && expirationAction.isInvalidate()) { synchronized (pendingSecondaryExpires) { pendingSecondaryExpires.remove(event.getKey());
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; }
if (!attrs.isForBucketRegion()) { if (attrs.getEvictionAttributes().getAction().isLocalDestroy() || attrs.getEntryIdleTimeout().getAction().isLocal() || attrs.getEntryTimeToLive().getAction().isLocal() || attrs.getRegionIdleTimeout().getAction().isLocalInvalidate() || attrs.getRegionTimeToLive().getAction().isLocalInvalidate()) {
if (getLocalRegion().getScope().isGlobal() && (action.isDestroy() || action.isInvalidate())) { Lock lock = getLocalRegion().getDistributedLock(getCheckedRegionEntry().getKey()); lock.lock();
((RegionFactory<Object, Object>) factory).setEntryIdleTimeout( new ExpirationAttributes(Integer.valueOf(eitl.getTimeout()), ExpirationAction.fromXmlString(eitl.getAction()))); ((RegionFactory<Object, Object>) factory).setEntryTimeToLive( new ExpirationAttributes(Integer.valueOf(ettl.getTimeout()), ExpirationAction.fromXmlString(ettl.getAction()))); ((RegionFactory<Object, Object>) factory).setRegionIdleTimeout( new ExpirationAttributes(Integer.valueOf(ritl.getTimeout()), ExpirationAction.fromXmlString(ritl.getAction()))); ((RegionFactory<Object, Object>) factory).setRegionTimeToLive( new ExpirationAttributes(Integer.valueOf(rttl.getTimeout()), ExpirationAction.fromXmlString(rttl.getAction())));
@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"); }
protected boolean expire(ExpirationAction action, boolean isPending) throws CacheException { if (action.isInvalidate()) return invalidate(); if (action.isDestroy()) return destroy(isPending); if (action.isLocalInvalidate()) return localInvalidate(); if (action.isLocalDestroy()) return localDestroy(); throw new InternalGemFireError( String.format("unrecognized expiration action: %s", action)); }
@Override protected boolean isIdleExpiredOnOthers() throws EntryNotFoundException { if (getIdleAttributes().getTimeout() <= 0L) { // idle expiration is not being used return true; } if (getIdleAttributes().getAction().isLocal()) { // no need to consult with others if using a local action return true; } if (SystemPropertyHelper.restoreIdleExpirationBehavior()) { return true; } long latestLastAccessTime = getLatestLastAccessTimeOnOtherMembers(); if (latestLastAccessTime > getLastAccessedTime()) { setLastAccessedTime(latestLastAccessTime); return false; } return true; }
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; }