res_sorcery_memory_cache: Add support for refreshing stale objects.
authorMark Michelson <mmichelson@digium.com>
Tue, 26 May 2015 18:01:24 +0000 (13:01 -0500)
committerJoshua Colp <jcolp@digium.com>
Wed, 27 May 2015 20:22:35 +0000 (15:22 -0500)
commit2e54e7227c8e440b8a0135000b1eff06e655cb95
tree21984d530cdc0a4f35b2fe81a0588987b4c1078f
parent3a8eb3c476a0968b82bf9fb5e2e924567661e35f
res_sorcery_memory_cache: Add support for refreshing stale objects.

This change introduces a check of object_lifetime_stale when retrieving
cached objects. If the amount of time the object has been in the cache
exceeds the lifetime, then a task is scheduled to update the cached
object based on an object retrieved from other sorcery wizards instead.

To prevent the cached object from being retrieved during a refresh,
thread-local storage is used to mark the thread as being a stale object
update. This results in the cache returning no object, leading to
sorcery querying other wizards for the object instead.

A test has been added for stale objects as well. This test ensures that
stale objects are retrieved the same as freshly-cached objects. The test
also ensures that after an object is stale, changes in the backend are
reflected in the cache, to include if the object has been deleted from
the backend.

ASTERISK-25067
Reported by Matt Jordan

Change-Id: I9bd7c049adf6939bfe2899f393c2bfbbf412d217
res/res_sorcery_memory_cache.c