RSSCacheNoThread

Cache

This module provides a generic Cache extended to be used on RSS, RSSCache. This cache features a lazy update method. It will only be updated if it is empty and there is a new query. If not, it will remain in its previous state. However, Cache class internal cache: DictCache sets a validity to its entries. After that, the cache is empty.

class DIRAC.ResourceStatusSystem.Utilities.RSSCacheNoThread.Cache(lifeTime, updateFunc)

Bases: object

Cache basic class.

WARNING: None of its methods is thread safe. Acquire / Release lock when using them !

__init__(lifeTime, updateFunc)

Constructor

Parameters
lifeTime - int

Lifetime of the elements in the cache ( seconds ! )

updateFunc - function

This function MUST return a S_OK | S_ERROR object. In the case of the first, its value must be a dictionary.

acquireLock()

Acquires Cache lock

cacheKeys()

Cache keys getter

Returns

list with keys in the cache valid for at least twice the validity period of the element

get(cacheKeys)

Gets values for cacheKeys given, if all are found ( present on the cache and valid ), returns S_OK with the results. If any is not neither present not valid, returns S_ERROR.

Parameters
cacheKeys - list

list of keys to be extracted from the cache

Returns

S_OK | S_ERROR

refreshCache()

Purges the cache and gets fresh data from the update function.

Returns

S_OK | S_ERROR. If the first, its content is the new cache.

releaseLock()

Releases Cache lock

class DIRAC.ResourceStatusSystem.Utilities.RSSCacheNoThread.RSSCache(lifeTime, updateFunc)

Bases: DIRAC.ResourceStatusSystem.Utilities.RSSCacheNoThread.Cache

The RSSCache is an extension of Cache in which the cache keys are pairs of the form: ( elementName, statusType ).

When instantiating one object of RSSCache, we need to specify the RSS elementType it applies, e.g. : StorageElement, CE, Queue, …

It provides a unique public method match which is thread safe. All other methods are not !!

__init__(lifeTime, updateFunc)

Constructor

Parameters
elementType - string

RSS elementType, e.g.: StorageElement, CE, Queue… note that one RSSCache can only hold elements of a single elementType to avoid issues while doing the Cartesian product.

lifeTime - int

Lifetime of the elements in the cache ( seconds ! )

updateFunc - function

This function MUST return a S_OK | S_ERROR object. In the case of the first, its value must follow the dict format: ( key, value ) being key ( elementName, statusType ) and value status.

acquireLock()

Acquires Cache lock

cacheKeys()

Cache keys getter

Returns

list with keys in the cache valid for at least twice the validity period of the element

get(cacheKeys)

Gets values for cacheKeys given, if all are found ( present on the cache and valid ), returns S_OK with the results. If any is not neither present not valid, returns S_ERROR.

Parameters
cacheKeys - list

list of keys to be extracted from the cache

Returns

S_OK | S_ERROR

match(elementNames, elementType, statusTypes)

In first instance, if the cache is invalid, it will request a new one from the server. It make the Cartesian product of elementNames x statusTypes to generate a key set that will be compared against the cache set. If the first is included in the second, we have a positive match and a dictionary will be returned. Otherwise, we have a cache miss.

However, arguments ( elementNames or statusTypes ) can have a None value. If that is the case, they are considered wildcards.

Parameters
elementNames - [ None, string, list ]

name(s) of the elements to be matched

elementType - [ string ]

type of the elements to be matched

statusTypes - [ None, string, list ]

name(s) of the statusTypes to be matched

Returns

S_OK() || S_ERROR()

refreshCache()

Purges the cache and gets fresh data from the update function.

Returns

S_OK | S_ERROR. If the first, its content is the new cache.

releaseLock()

Releases Cache lock