Class AbstractDynamicMetadataResolver
- java.lang.Object
-
- net.shibboleth.utilities.java.support.component.AbstractInitializableComponent
-
- net.shibboleth.utilities.java.support.component.AbstractIdentifiedInitializableComponent
-
- net.shibboleth.utilities.java.support.component.AbstractIdentifiableInitializableComponent
-
- org.opensaml.saml.metadata.resolver.impl.AbstractMetadataResolver
-
- org.opensaml.saml.metadata.resolver.impl.AbstractDynamicMetadataResolver
-
- All Implemented Interfaces:
Component,DestructableComponent,IdentifiableComponent,IdentifiedComponent,InitializableComponent,Resolver<EntityDescriptor,CriteriaSet>,ClearableMetadataResolver,DynamicMetadataResolver,MetadataResolver
- Direct Known Subclasses:
AbstractDynamicHTTPMetadataResolver,LocalDynamicMetadataResolver
public abstract class AbstractDynamicMetadataResolver extends AbstractMetadataResolver implements DynamicMetadataResolver, ClearableMetadataResolver
Abstract subclass for metadata resolvers that resolve metadata dynamically, as needed and on demand.
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description protected classAbstractDynamicMetadataResolver.BackingStoreCleanupSweeperBackground maintenance task which cleans expired and idle metadata from the backing store, and removes orphaned entity management data.static classAbstractDynamicMetadataResolver.DefaultCacheKeyGeneratorDefault function for generating a cache key for loading and saving anEntityDescriptorusing aXMLObjectLoadSaveManager.protected classAbstractDynamicMetadataResolver.DynamicEntityBackingStoreSpecialized entity backing store implementation for dynamic metadata resolvers.protected classAbstractDynamicMetadataResolver.EntityManagementDataClass holding per-entity management data.static classAbstractDynamicMetadataResolver.PersistentCacheInitializationMetricsClass used to track metrics related to the initialization from the persistent cache.-
Nested classes/interfaces inherited from class org.opensaml.saml.metadata.resolver.impl.AbstractMetadataResolver
AbstractMetadataResolver.EntityBackingStore
-
-
Field Summary
Fields Modifier and Type Field Description private DurationbackgroundInitializationFromCacheDelayThe delay after which to schedule the background initialization from the persistent cache.private AbstractDynamicMetadataResolver.BackingStoreCleanupSweepercleanupTaskThe backing store cleanup sweeper background task.private DurationcleanupTaskIntervalThe interval at which the cleanup task should run.private booleancreatedOwnTaskTimerWhether we created our own task timer during object construction.private DurationexpirationWarningThresholdImpending expiration warning threshold for metadata refresh.private com.codahale.metrics.Gauge<Integer>gaugeNumLiveEntityIDsMetrics Gauge for the number of live entityIDs.private com.codahale.metrics.Gauge<AbstractDynamicMetadataResolver.PersistentCacheInitializationMetrics>gaugePersistentCacheInitMetrics Gauge for the persistent cache initialization.private Set<MetadataIndex>indexesThe set of indexes configured.private Predicate<EntityDescriptor>initializationFromCachePredicatePredicate which determines whether a given entity should be loaded from the persistent cache at resolver initialization time.private booleaninitializeFromPersistentCacheInBackgroundFlag indicating whether should initialize from the persistent cache in the background.private booleaninitializingFlag used to track state of whether currently initializing or not.private org.slf4j.LoggerlogClass logger.private DurationmaxCacheDurationMaximum cache duration.private DurationmaxIdleEntityDataThe maximum idle time for which the resolver will keep data for a given entityID, before it is removed.static StringMETRIC_GAUGE_NUM_LIVE_ENTITYIDSMetric name for the gauge of the number of live entityIDs.static StringMETRIC_GAUGE_PERSISTENT_CACHE_INITMetric name for the gauge of the persistent cache initialization metrics.static StringMETRIC_RATIOGAUGE_FETCH_TO_RESOLVEMetric name for the ratio gauge of fetches to resolve requests.static StringMETRIC_TIMER_FETCH_FROM_ORIGIN_SOURCEMetric name for the timer forfetchFromOriginSource(CriteriaSet).static StringMETRIC_TIMER_RESOLVEMetric name for the timer forresolve(CriteriaSet).private StringmetricsBaseNameBase name for Metrics instrumentation names.private DurationminCacheDurationMinimum cache duration.private DurationnegativeLookupCacheDurationNegative lookup cache duration.private AbstractDynamicMetadataResolver.PersistentCacheInitializationMetricspersistentCacheInitMetricsObject tracking metrics related to the persistent cache initialization.private Function<EntityDescriptor,String>persistentCacheKeyGeneratorFunction for generating the String key used with the cache manager.private XMLObjectLoadSaveManager<EntityDescriptor>persistentCacheManagerThe manager for the persistent cache store for resolved metadata.private com.codahale.metrics.RatioGaugeratioGaugeFetchToResolveMetrics RatioGauge for count of origin fetches to resolves.private FloatrefreshDelayFactorFactor used to compute when the next refresh interval will occur.private booleanremoveIdleEntityDataFlag indicating whether idle entity data should be removed.private TimertaskTimerTimer used to schedule background metadata update tasks.private com.codahale.metrics.TimertimerFetchFromOriginSourceMetrics Timer forfetchFromOriginSource(CriteriaSet).private com.codahale.metrics.TimertimerResolveMetrics Timer forresolve(CriteriaSet).
-
Constructor Summary
Constructors Constructor Description AbstractDynamicMetadataResolver(Timer backgroundTaskTimer)Constructor.
-
Method Summary
All Methods Instance Methods Abstract Methods Concrete Methods Modifier and Type Method Description voidclear()voidclear(String entityID)protected InstantcomputeExpirationTime(EntityDescriptor entityDescriptor, Instant now)Compute the effective expiration time for the specified metadata.protected InstantcomputeRefreshTriggerTime(Instant expirationTime, Instant nowDateTime)Compute the refresh trigger time.protected AbstractDynamicMetadataResolver.DynamicEntityBackingStorecreateNewBackingStore()Create a new backing store instance for EntityDescriptor data.protected voiddoDestroy()protected abstract XMLObjectfetchFromOriginSource(CriteriaSet criteria)Fetch the metadata from the origin source.DurationgetBackgroundInitializationFromCacheDelay()Get the delay after which to schedule the background initialization from the persistent cache.protected AbstractDynamicMetadataResolver.DynamicEntityBackingStoregetBackingStore()Get the EntityDescriptor backing store currently in use by the metadata resolver.DurationgetCleanupTaskInterval()Get the interval at which the cleanup task should run.DurationgetExpirationWarningThreshold()Gets the impending expiration warning threshold used at refresh time.Set<MetadataIndex>getIndexes()Get the configured indexes.Predicate<EntityDescriptor>getInitializationFromCachePredicate()Get the predicate which determines whether a given entity should be loaded from the persistent cache at resolver initialization time.DurationgetMaxCacheDuration()Get the maximum cache duration for metadata.DurationgetMaxIdleEntityData()Get the maximum idle time for which the resolver will keep data for a given entityID, before it is removed.StringgetMetricsBaseName()Get the base name for Metrics instrumentation.DurationgetMinCacheDuration()Get the minimum cache duration for metadata.DurationgetNegativeLookupCacheDuration()Get the negative lookup cache duration for metadata.Function<EntityDescriptor,String>getPersistentCacheKeyGenerator()Get the function for generating the String key used with the persistent cache manager.XMLObjectLoadSaveManager<EntityDescriptor>getPersistentCacheManager()Get the manager for the persistent cache store for resolved metadata.FloatgetRefreshDelayFactor()Gets the delay factor used to compute the next refresh time.protected voidindexEntityDescriptor(EntityDescriptor entityDescriptor, AbstractMetadataResolver.EntityBackingStore backingStore)Index the specified entity descriptor, updating the specified entity backing store instance as necessary.protected booleanindexesEnabled()Return whether secondary indexing is effectively active.protected voidinitializeFromPersistentCache()Initialize the resolver with data from the persistent cache manager, if enabled.private voidinitializeMetricsInstrumentation()Initialize the Metrics-based instrumentation.protected voidinitMetadataResolver()Subclasses should override this method to perform any initialization logic necessary.booleanisInitializeFromPersistentCacheInBackground()Get the flag indicating whether should initialize from the persistent cache in the background.booleanisPersistentCachingEnabled()Get the flag indicating whether persistent caching of the resolved metadata is enabled.booleanisRemoveIdleEntityData()Get the flag indicating whether idle entity data should be removed.private voidlogMetadataExpiration(EntityDescriptor descriptor, Instant now, Instant nextRefresh)Check metadata for expiration or pending expiration and log appropriately.protected Iterable<EntityDescriptor>lookupCriteria(CriteriaSet criteria)Lookup and return all EntityDescriptors currently available in the resolver cache which match either entityID or secondary-indexed criteria.protected List<EntityDescriptor>lookupEntityID(String entityID)Get list of descriptors matching an entityID.protected XMLObjectprepareForFiltering(XMLObject input)Prepare the object for filtering: If persistent caching is enabled, return a clone of the object in case the configured filter mutates the object.protected voidpreProcessEntityDescriptor(EntityDescriptor entityDescriptor, AbstractMetadataResolver.EntityBackingStore backingStore)Pre-process the specified entity descriptor, updating the specified entity backing store instance as necessary.protected voidprocessNewMetadata(XMLObject root, String expectedEntityID)Process the specified new metadata document, including metadata filtering, and store the processed metadata in the backing store.protected voidprocessNewMetadata(XMLObject root, String expectedEntityID, boolean fromPersistentCache)Process the specified new metadata document, including metadata filtering, and store the processed metadata in the backing store.protected List<EntityDescriptor>processNonEntityIDFetchedEntittiesDescriptor(EntitiesDescriptor entities)Process an EntitiesDescriptor received from a non-entityID-based fetch.protected List<EntityDescriptor>processNonEntityIDFetchedEntityDescriptor(EntityDescriptor entity)Process an EntityDescriptor received from a non-entityID-based fetch.protected voidprocessPersistentCacheEntry(String currentKey, EntityDescriptor descriptor)Process an entry loaded from the persistent cache.protected voidremoveByEntityID(String entityID, AbstractMetadataResolver.EntityBackingStore backingStore)Remove from the backing store all metadata for the entity with the given entity ID.Iterable<EntityDescriptor>resolve(CriteriaSet criteria)protected StringresolveEntityID(CriteriaSet criteria)Attempt to resolve the single entityID for the operation from the criteria set.protected Set<String>resolveEntityIDs(CriteriaSet criteria)Attempt to resolve all the entityIDs represented by the criteria set.protected Iterable<EntityDescriptor>resolveFromOriginSource(CriteriaSet criteria, String entityID)Fetch metadata from an origin source based on the input criteria, store it in the backing store and then return it.protected Iterable<EntityDescriptor>resolveFromOriginSourceWithEntityID(CriteriaSet criteria, String entityID)Fetch metadata from an origin source based on the input criteria when the entityID is known, store it in the backing store and then return it.protected Iterable<EntityDescriptor>resolveFromOriginSourceWithoutEntityID(CriteriaSet criteria)Fetch metadata from an origin source based on the input criteria when the entityID is not known, store it in the backing store and then return it.voidsetBackgroundInitializationFromCacheDelay(Duration delay)Set the delay after which to schedule the background initialization from the persistent cache.voidsetCleanupTaskInterval(Duration interval)Set the interval at which the cleanup task should run.voidsetExpirationWarningThreshold(Duration threshold)Sets the impending expiration warning threshold used at refresh time.voidsetIndexes(Set<MetadataIndex> newIndexes)Set the configured indexes.voidsetInitializationFromCachePredicate(Predicate<EntityDescriptor> predicate)Set the predicate which determines whether a given entity should be loaded from the persistent cache at resolver initialization time.voidsetInitializeFromPersistentCacheInBackground(boolean flag)Set the flag indicating whether should initialize from the persistent cache in the background.voidsetMaxCacheDuration(Duration duration)Set the maximum cache duration for metadata.voidsetMaxIdleEntityData(Duration max)Set the maximum idle time for which the resolver will keep data for a given entityID, before it is removed.voidsetMetricsBaseName(String baseName)Set the base name for Metrics instrumentation.voidsetMinCacheDuration(Duration duration)Set the minimum cache duration for metadata.voidsetNegativeLookupCacheDuration(Duration duration)Set the negative lookup cache duration for metadata.voidsetPersistentCacheKeyGenerator(Function<EntityDescriptor,String> generator)Set the function for generating the String key used with the persistent cache manager.voidsetPersistentCacheManager(XMLObjectLoadSaveManager<EntityDescriptor> manager)Set the manager for the persistent cache store for resolved metadata.voidsetRefreshDelayFactor(Float factor)Sets the delay factor used to compute the next refresh time.voidsetRemoveIdleEntityData(boolean flag)Set the flag indicating whether idle entity data should be removed.protected booleanshouldAttemptRefresh(AbstractDynamicMetadataResolver.EntityManagementData mgmtData)Determine whether should attempt to refresh the metadata, based on stored refresh trigger time.-
Methods inherited from class org.opensaml.saml.metadata.resolver.impl.AbstractMetadataResolver
doInitialize, filterMetadata, getCriterionPredicateRegistry, getLogPrefix, getMetadataFilter, getParserPool, getUnmarshallerFactory, isFailFastInitialization, isRequireValidMetadata, isSatisfyAnyPredicates, isUseDefaultPredicateRegistry, isValid, lookupIndexedEntityID, newFilterContext, predicateFilterCandidates, preProcessEntitiesDescriptor, releaseMetadataDOM, resolveSingle, setBackingStore, setCriterionPredicateRegistry, setFailFastInitialization, setMetadataFilter, setParserPool, setRequireValidMetadata, setSatisfyAnyPredicates, setUseDefaultPredicateRegistry, unmarshallMetadata
-
Methods inherited from class net.shibboleth.utilities.java.support.component.AbstractIdentifiableInitializableComponent
setId
-
Methods inherited from class net.shibboleth.utilities.java.support.component.AbstractIdentifiedInitializableComponent
getId
-
Methods inherited from class net.shibboleth.utilities.java.support.component.AbstractInitializableComponent
destroy, initialize, isDestroyed, isInitialized
-
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-
Methods inherited from interface net.shibboleth.utilities.java.support.component.IdentifiedComponent
getId
-
Methods inherited from interface org.opensaml.saml.metadata.resolver.MetadataResolver
getMetadataFilter, isRequireValidMetadata, setMetadataFilter, setRequireValidMetadata
-
Methods inherited from interface net.shibboleth.utilities.java.support.resolver.Resolver
resolveSingle
-
-
-
-
Field Detail
-
METRIC_TIMER_FETCH_FROM_ORIGIN_SOURCE
public static final String METRIC_TIMER_FETCH_FROM_ORIGIN_SOURCE
Metric name for the timer forfetchFromOriginSource(CriteriaSet).- See Also:
- Constant Field Values
-
METRIC_TIMER_RESOLVE
public static final String METRIC_TIMER_RESOLVE
Metric name for the timer forresolve(CriteriaSet).- See Also:
- Constant Field Values
-
METRIC_RATIOGAUGE_FETCH_TO_RESOLVE
public static final String METRIC_RATIOGAUGE_FETCH_TO_RESOLVE
Metric name for the ratio gauge of fetches to resolve requests.- See Also:
- Constant Field Values
-
METRIC_GAUGE_NUM_LIVE_ENTITYIDS
public static final String METRIC_GAUGE_NUM_LIVE_ENTITYIDS
Metric name for the gauge of the number of live entityIDs.- See Also:
- Constant Field Values
-
METRIC_GAUGE_PERSISTENT_CACHE_INIT
public static final String METRIC_GAUGE_PERSISTENT_CACHE_INIT
Metric name for the gauge of the persistent cache initialization metrics.- See Also:
- Constant Field Values
-
log
private final org.slf4j.Logger log
Class logger.
-
metricsBaseName
@NonnullAfterInit private String metricsBaseName
Base name for Metrics instrumentation names.
-
timerResolve
@Nullable private com.codahale.metrics.Timer timerResolve
Metrics Timer forresolve(CriteriaSet).
-
timerFetchFromOriginSource
@Nullable private com.codahale.metrics.Timer timerFetchFromOriginSource
Metrics Timer forfetchFromOriginSource(CriteriaSet).
-
ratioGaugeFetchToResolve
@Nullable private com.codahale.metrics.RatioGauge ratioGaugeFetchToResolve
Metrics RatioGauge for count of origin fetches to resolves.
-
gaugeNumLiveEntityIDs
@Nullable private com.codahale.metrics.Gauge<Integer> gaugeNumLiveEntityIDs
Metrics Gauge for the number of live entityIDs.
-
gaugePersistentCacheInit
@Nullable private com.codahale.metrics.Gauge<AbstractDynamicMetadataResolver.PersistentCacheInitializationMetrics> gaugePersistentCacheInit
Metrics Gauge for the persistent cache initialization.
-
taskTimer
@Nullable private Timer taskTimer
Timer used to schedule background metadata update tasks.
-
createdOwnTaskTimer
private boolean createdOwnTaskTimer
Whether we created our own task timer during object construction.
-
minCacheDuration
@Nonnull private Duration minCacheDuration
Minimum cache duration.
-
maxCacheDuration
@Nonnull private Duration maxCacheDuration
Maximum cache duration.
-
negativeLookupCacheDuration
@Nonnull private Duration negativeLookupCacheDuration
Negative lookup cache duration.
-
refreshDelayFactor
@Positive private Float refreshDelayFactor
Factor used to compute when the next refresh interval will occur. Default value: 0.75
-
maxIdleEntityData
@Nonnull private Duration maxIdleEntityData
The maximum idle time for which the resolver will keep data for a given entityID, before it is removed.
-
removeIdleEntityData
private boolean removeIdleEntityData
Flag indicating whether idle entity data should be removed.
-
expirationWarningThreshold
@Nonnull private Duration expirationWarningThreshold
Impending expiration warning threshold for metadata refresh. Default value: 0 (disabled).
-
cleanupTaskInterval
@Nonnull private Duration cleanupTaskInterval
The interval at which the cleanup task should run.
-
cleanupTask
private AbstractDynamicMetadataResolver.BackingStoreCleanupSweeper cleanupTask
The backing store cleanup sweeper background task.
-
persistentCacheManager
private XMLObjectLoadSaveManager<EntityDescriptor> persistentCacheManager
The manager for the persistent cache store for resolved metadata.
-
persistentCacheKeyGenerator
private Function<EntityDescriptor,String> persistentCacheKeyGenerator
Function for generating the String key used with the cache manager.
-
initializeFromPersistentCacheInBackground
private boolean initializeFromPersistentCacheInBackground
Flag indicating whether should initialize from the persistent cache in the background.
-
backgroundInitializationFromCacheDelay
@Nonnull private Duration backgroundInitializationFromCacheDelay
The delay after which to schedule the background initialization from the persistent cache.
-
initializationFromCachePredicate
private Predicate<EntityDescriptor> initializationFromCachePredicate
Predicate which determines whether a given entity should be loaded from the persistent cache at resolver initialization time.
-
persistentCacheInitMetrics
@NonnullAfterInit private AbstractDynamicMetadataResolver.PersistentCacheInitializationMetrics persistentCacheInitMetrics
Object tracking metrics related to the persistent cache initialization.
-
indexes
private Set<MetadataIndex> indexes
The set of indexes configured.
-
initializing
private boolean initializing
Flag used to track state of whether currently initializing or not.
-
-
Method Detail
-
isInitializeFromPersistentCacheInBackground
public boolean isInitializeFromPersistentCacheInBackground()
Get the flag indicating whether should initialize from the persistent cache in the background.Defaults to: true.
- Returns:
- true if should init from the cache in background, false otherwise
-
setInitializeFromPersistentCacheInBackground
public void setInitializeFromPersistentCacheInBackground(boolean flag)
Set the flag indicating whether should initialize from the persistent cache in the background.Defaults to: true.
- Parameters:
flag- true if should init from the cache in the background, false otherwise
-
getBackgroundInitializationFromCacheDelay
@Nonnull public Duration getBackgroundInitializationFromCacheDelay()
Get the delay after which to schedule the background initialization from the persistent cache.Defaults to: 2 seconds.
- Returns:
- the delay
- Since:
- 3.3.0
-
setBackgroundInitializationFromCacheDelay
public void setBackgroundInitializationFromCacheDelay(@Nonnull Duration delay)Set the delay after which to schedule the background initialization from the persistent cache.Defaults to: 2 seconds.
- Parameters:
delay- the delay- Since:
- 3.3.0
-
getPersistentCacheManager
@Nullable public XMLObjectLoadSaveManager<EntityDescriptor> getPersistentCacheManager()
Get the manager for the persistent cache store for resolved metadata.- Returns:
- the cache manager if configured, or null
-
setPersistentCacheManager
public void setPersistentCacheManager(@Nullable XMLObjectLoadSaveManager<EntityDescriptor> manager)Set the manager for the persistent cache store for resolved metadata.- Parameters:
manager- the cache manager, may be null
-
isPersistentCachingEnabled
public boolean isPersistentCachingEnabled()
Get the flag indicating whether persistent caching of the resolved metadata is enabled.- Returns:
- true if enabled, false otherwise
-
getPersistentCacheKeyGenerator
@NonnullAfterInit public Function<EntityDescriptor,String> getPersistentCacheKeyGenerator()
Get the function for generating the String key used with the persistent cache manager.- Returns:
- the key generator or null
-
setPersistentCacheKeyGenerator
public void setPersistentCacheKeyGenerator(@Nullable Function<EntityDescriptor,String> generator)Set the function for generating the String key used with the persistent cache manager.- Parameters:
generator- the new generator to set, may be null
-
getInitializationFromCachePredicate
@NonnullAfterInit public Predicate<EntityDescriptor> getInitializationFromCachePredicate()
Get the predicate which determines whether a given entity should be loaded from the persistent cache at resolver initialization time.- Returns:
- the cache initialization predicate
-
setInitializationFromCachePredicate
public void setInitializationFromCachePredicate(@Nullable Predicate<EntityDescriptor> predicate)Set the predicate which determines whether a given entity should be loaded from the persistent cache at resolver initialization time.- Parameters:
predicate- the cache initialization predicate
-
getMinCacheDuration
@Nonnull public Duration getMinCacheDuration()
Get the minimum cache duration for metadata.Defaults to: 10 minutes.
- Returns:
- the minimum cache duration
-
setMinCacheDuration
public void setMinCacheDuration(@Nonnull Duration duration)Set the minimum cache duration for metadata.Defaults to: 10 minutes.
- Parameters:
duration- the minimum cache duration
-
getMaxCacheDuration
@Nonnull public Duration getMaxCacheDuration()
Get the maximum cache duration for metadata.Defaults to: 8 hours.
- Returns:
- the maximum cache duration
-
setMaxCacheDuration
public void setMaxCacheDuration(@Nonnull Duration duration)Set the maximum cache duration for metadata.Defaults to: 8 hours.
- Parameters:
duration- the maximum cache duration
-
getNegativeLookupCacheDuration
@Nonnull public Duration getNegativeLookupCacheDuration()
Get the negative lookup cache duration for metadata.Defaults to: 10 minutes.
- Returns:
- the negative lookup cache duration
-
setNegativeLookupCacheDuration
public void setNegativeLookupCacheDuration(@Nonnull Duration duration)Set the negative lookup cache duration for metadata.Defaults to: 10 minutes.
- Parameters:
duration- the negative lookup cache duration
-
getRefreshDelayFactor
@Nonnull public Float getRefreshDelayFactor()
Gets the delay factor used to compute the next refresh time.Defaults to: 0.75.
- Returns:
- delay factor used to compute the next refresh time
-
setRefreshDelayFactor
public void setRefreshDelayFactor(@Nonnull Float factor)Sets the delay factor used to compute the next refresh time. The delay must be between 0.0 and 1.0, exclusive.Defaults to: 0.75.
- Parameters:
factor- delay factor used to compute the next refresh time
-
isRemoveIdleEntityData
public boolean isRemoveIdleEntityData()
Get the flag indicating whether idle entity data should be removed.- Returns:
- true if idle entity data should be removed, false otherwise
-
setRemoveIdleEntityData
public void setRemoveIdleEntityData(boolean flag)
Set the flag indicating whether idle entity data should be removed.- Parameters:
flag- true if idle entity data should be removed, false otherwise
-
getMaxIdleEntityData
@Nonnull public Duration getMaxIdleEntityData()
Get the maximum idle time for which the resolver will keep data for a given entityID, before it is removed.Defaults to: 8 hours.
- Returns:
- return the maximum idle time
-
setMaxIdleEntityData
public void setMaxIdleEntityData(@Nonnull Duration max)Set the maximum idle time for which the resolver will keep data for a given entityID, before it is removed.Defaults to: 8 hours.
- Parameters:
max- the maximum entity data idle time
-
getExpirationWarningThreshold
@Nonnull public Duration getExpirationWarningThreshold()
Gets the impending expiration warning threshold used at refresh time.- Returns:
- threshold for logging a warning if live metadata will soon expire
-
setExpirationWarningThreshold
public void setExpirationWarningThreshold(@Nullable Duration threshold)Sets the impending expiration warning threshold used at refresh time.- Parameters:
threshold- the threshold for logging a warning if live metadata will soon expire
-
getCleanupTaskInterval
@Nonnull public Duration getCleanupTaskInterval()
Get the interval at which the cleanup task should run.Defaults to: 30 minutes.
- Returns:
- return the interval
-
setCleanupTaskInterval
public void setCleanupTaskInterval(@Nonnull Duration interval)Set the interval at which the cleanup task should run.Defaults to: 30 minutes.
- Parameters:
interval- the interval to set
-
getMetricsBaseName
@NonnullAfterInit public String getMetricsBaseName()
Get the base name for Metrics instrumentation.- Returns:
- the Metrics base name
-
setMetricsBaseName
public void setMetricsBaseName(@Nullable String baseName)Set the base name for Metrics instrumentation.- Parameters:
baseName- the Metrics base name
-
getIndexes
@Nonnull @NonnullElements @Unmodifiable @NotLive public Set<MetadataIndex> getIndexes()
Get the configured indexes.- Returns:
- the set of configured indexes
-
setIndexes
public void setIndexes(@Nullable Set<MetadataIndex> newIndexes)Set the configured indexes.- Parameters:
newIndexes- the new indexes to set
-
indexesEnabled
protected boolean indexesEnabled()
Return whether secondary indexing is effectively active.- Returns:
- true if active, false if not.
-
clear
public void clear() throws ResolverException- Specified by:
clearin interfaceClearableMetadataResolver- Throws:
ResolverException
-
clear
public void clear(@Nonnull String entityID) throws ResolverException- Specified by:
clearin interfaceClearableMetadataResolver- Throws:
ResolverException
-
resolve
@Nonnull public Iterable<EntityDescriptor> resolve(@Nonnull CriteriaSet criteria) throws ResolverException
- Specified by:
resolvein interfaceResolver<EntityDescriptor,CriteriaSet>- Throws:
ResolverException
-
resolveEntityID
@Nullable protected String resolveEntityID(@Nonnull CriteriaSet criteria)
Attempt to resolve the single entityID for the operation from the criteria set.If an
EntityIdCriterionis present, that will be used. If not present, then a single entityID will be resolved via the secondary index manager of the backing store.- Parameters:
criteria- the criteria set on which to operate- Returns:
- the resolve entityID, or null if a single entityID could not be resolved
-
resolveEntityIDs
@Nonnull protected Set<String> resolveEntityIDs(@Nonnull CriteriaSet criteria)
Attempt to resolve all the entityIDs represented by the criteria set.If an
EntityIdCriterionis present, that will be used. If not present, then entityIDs will be resolved via the secondary index manager of the backing store.- Parameters:
criteria- the criteria set on which to operate- Returns:
- the resolved entityIDs, may be empty
-
resolveFromOriginSource
@Nonnull @NonnullElements protected Iterable<EntityDescriptor> resolveFromOriginSource(@Nonnull CriteriaSet criteria, @Nullable String entityID) throws ResolverException
Fetch metadata from an origin source based on the input criteria, store it in the backing store and then return it.- Parameters:
criteria- the input criteria setentityID- the previously resolved single entityID- Returns:
- the resolved metadata
- Throws:
ResolverException- if there is a fatal error attempting to resolve the metadata
-
resolveFromOriginSourceWithEntityID
@Nonnull @NonnullElements protected Iterable<EntityDescriptor> resolveFromOriginSourceWithEntityID(@Nonnull CriteriaSet criteria, @Nonnull String entityID) throws ResolverException
Fetch metadata from an origin source based on the input criteria when the entityID is known, store it in the backing store and then return it.- Parameters:
criteria- the input criteria setentityID- the entityID known to be represented by the criteria set- Returns:
- the resolved metadata
- Throws:
ResolverException- if there is a fatal error attempting to resolve the metadata
-
resolveFromOriginSourceWithoutEntityID
@Nonnull @NonnullElements protected Iterable<EntityDescriptor> resolveFromOriginSourceWithoutEntityID(@Nonnull CriteriaSet criteria) throws ResolverException
Fetch metadata from an origin source based on the input criteria when the entityID is not known, store it in the backing store and then return it.- Parameters:
criteria- the input criteria set- Returns:
- the resolved metadata
- Throws:
ResolverException- if there is a fatal error attempting to resolve the metadata
-
lookupCriteria
@Nonnull @NonnullElements protected Iterable<EntityDescriptor> lookupCriteria(@Nonnull CriteriaSet criteria) throws ResolverException
Lookup and return all EntityDescriptors currently available in the resolver cache which match either entityID or secondary-indexed criteria.- Parameters:
criteria- the input criteria set- Returns:
- the resolved metadata
- Throws:
ResolverException- if there is a fatal error attempting to resolve the metadata
-
processNonEntityIDFetchedEntittiesDescriptor
@Nullable protected List<EntityDescriptor> processNonEntityIDFetchedEntittiesDescriptor(@Nonnull EntitiesDescriptor entities) throws ResolverException
Process an EntitiesDescriptor received from a non-entityID-based fetch.- Parameters:
entities- the metadata to process- Returns:
- the resolved descriptor(s)
- Throws:
ResolverException- if there is a fatal error attempting to resolve the metadata
-
processNonEntityIDFetchedEntityDescriptor
@Nullable protected List<EntityDescriptor> processNonEntityIDFetchedEntityDescriptor(@Nonnull EntityDescriptor entity) throws ResolverException
Process an EntityDescriptor received from a non-entityID-based fetch.- Parameters:
entity- the metadata to process- Returns:
- the resolved descriptor(s)
- Throws:
ResolverException- if there is a fatal error attempting to resolve the metadata
-
fetchFromOriginSource
@Nullable protected abstract XMLObject fetchFromOriginSource(@Nonnull CriteriaSet criteria) throws IOException
Fetch the metadata from the origin source.- Parameters:
criteria- the input criteria set- Returns:
- the resolved metadata root XMLObject, or null if metadata could not be fetched
- Throws:
IOException- if there is a fatal error fetching metadata from the origin source
-
lookupEntityID
@Nonnull @NonnullElements protected List<EntityDescriptor> lookupEntityID(@Nonnull String entityID) throws ResolverException
Get list of descriptors matching an entityID.- Overrides:
lookupEntityIDin classAbstractMetadataResolver- Parameters:
entityID- entityID to lookup- Returns:
- a list of descriptors
- Throws:
ResolverException- if an error occurs
-
processNewMetadata
@Nonnull protected void processNewMetadata(@Nonnull XMLObject root, @Nonnull String expectedEntityID) throws FilterExceptionProcess the specified new metadata document, including metadata filtering, and store the processed metadata in the backing store.Equivalent to
processNewMetadata(XMLObject, String, boolean)called with false.- Parameters:
root- the root of the new metadata document being processedexpectedEntityID- the expected entityID of the resolved metadata- Throws:
FilterException- if there is a problem filtering the metadata
-
processNewMetadata
@Nonnull protected void processNewMetadata(@Nonnull XMLObject root, @Nonnull String expectedEntityID, boolean fromPersistentCache) throws FilterException, ResolverExceptionProcess the specified new metadata document, including metadata filtering, and store the processed metadata in the backing store.In order to be processed successfully, the metadata (after filtering) must be an instance of
EntityDescriptorand itsentityIDvalue must match the value supplied as the requiredexpectedEntityIDargument.- Parameters:
root- the root of the new metadata document being processedexpectedEntityID- the expected entityID of the resolved metadatafromPersistentCache- whether the entity data was loaded from the persistent cache- Throws:
FilterException- if there is a problem filtering the metadataResolverException- if there is a problem processing the metadata
-
prepareForFiltering
@Nonnull protected XMLObject prepareForFiltering(@Nonnull XMLObject input)
Prepare the object for filtering: If persistent caching is enabled, return a clone of the object in case the configured filter mutates the object.- Parameters:
input- the XMLObject on which to operate- Returns:
- the XMLObject instance to be filtered
-
preProcessEntityDescriptor
protected void preProcessEntityDescriptor(@Nonnull EntityDescriptor entityDescriptor, @Nonnull AbstractMetadataResolver.EntityBackingStore backingStore)Pre-process the specified entity descriptor, updating the specified entity backing store instance as necessary.- Overrides:
preProcessEntityDescriptorin classAbstractMetadataResolver- Parameters:
entityDescriptor- the target entity descriptor to processbackingStore- the backing store instance to update
-
logMetadataExpiration
private void logMetadataExpiration(@Nonnull EntityDescriptor descriptor, @Nonnull Instant now, @Nonnull Instant nextRefresh)Check metadata for expiration or pending expiration and log appropriately.- Parameters:
descriptor- the entity descriptor being processesnow- the current date/timenextRefresh- the next refresh trigger time for the entity descriptor
-
computeExpirationTime
@Nonnull protected Instant computeExpirationTime(@Nonnull EntityDescriptor entityDescriptor, @Nonnull Instant now)
Compute the effective expiration time for the specified metadata.- Parameters:
entityDescriptor- the EntityDescriptor instance to evaluatenow- the current date time instant- Returns:
- the effective expiration time for the metadata
-
computeRefreshTriggerTime
@Nonnull protected Instant computeRefreshTriggerTime(@Nullable Instant expirationTime, @Nonnull Instant nowDateTime)
Compute the refresh trigger time.- Parameters:
expirationTime- the time at which the metadata effectively expiresnowDateTime- the current date time instant- Returns:
- the time after which refresh attempt(s) should be made
-
shouldAttemptRefresh
protected boolean shouldAttemptRefresh(@Nonnull AbstractDynamicMetadataResolver.EntityManagementData mgmtData)Determine whether should attempt to refresh the metadata, based on stored refresh trigger time.- Parameters:
mgmtData- the entity'd management data- Returns:
- true if should attempt refresh, false otherwise
-
createNewBackingStore
@Nonnull protected AbstractDynamicMetadataResolver.DynamicEntityBackingStore createNewBackingStore()
Create a new backing store instance for EntityDescriptor data. Subclasses may override to return a more specialized subclass type. Note this method does not make the returned backing store the effective one in use. The caller is responsible for callingAbstractMetadataResolver.setBackingStore(EntityBackingStore)to make it the effective instance in use.- Overrides:
createNewBackingStorein classAbstractMetadataResolver- Returns:
- the new backing store instance
-
getBackingStore
@NonnullAfterInit protected AbstractDynamicMetadataResolver.DynamicEntityBackingStore getBackingStore()
Get the EntityDescriptor backing store currently in use by the metadata resolver.- Overrides:
getBackingStorein classAbstractMetadataResolver- Returns:
- the current effective entity backing store
-
initMetadataResolver
protected void initMetadataResolver() throws ComponentInitializationExceptionSubclasses should override this method to perform any initialization logic necessary. Default implementation is a no-op.- Overrides:
initMetadataResolverin classAbstractMetadataResolver- Throws:
ComponentInitializationException- thrown if there is a problem initializing the provider
-
initializeMetricsInstrumentation
private void initializeMetricsInstrumentation()
Initialize the Metrics-based instrumentation.
-
initializeFromPersistentCache
protected void initializeFromPersistentCache()
Initialize the resolver with data from the persistent cache manager, if enabled.
-
processPersistentCacheEntry
protected void processPersistentCacheEntry(@Nonnull String currentKey, @Nonnull EntityDescriptor descriptor)Process an entry loaded from the persistent cache.- Parameters:
currentKey- the current persistent cache keydescriptor- the entity descriptor to process
-
removeByEntityID
protected void removeByEntityID(String entityID, AbstractMetadataResolver.EntityBackingStore backingStore)
Remove from the backing store all metadata for the entity with the given entity ID.- Overrides:
removeByEntityIDin classAbstractMetadataResolver- Parameters:
entityID- the entity ID of the metadata to removebackingStore- the backing store instance to update
-
doDestroy
protected void doDestroy()
- Overrides:
doDestroyin classAbstractMetadataResolver
-
indexEntityDescriptor
protected void indexEntityDescriptor(@Nonnull EntityDescriptor entityDescriptor, @Nonnull AbstractMetadataResolver.EntityBackingStore backingStore)Index the specified entity descriptor, updating the specified entity backing store instance as necessary.- Overrides:
indexEntityDescriptorin classAbstractMetadataResolver- Parameters:
entityDescriptor- the target entity descriptor to processbackingStore- the backing store instance to update
-
-