Do not remove expired revocation events on "get"
Revocation event pruning should only occur on new revocations. This will limit the volume of churn to the DB/KVS store for revocation events (and impact to performance). Change-Id: I1ad7491c54023915c74610287a5095589f12d5c1 Closes-Bug: #1287757
This commit is contained in:
parent
da44307e30
commit
d7e529911c
|
@ -45,29 +45,30 @@ class Revoke(revoke.Driver):
|
|||
except exception.NotFound:
|
||||
return []
|
||||
|
||||
def _prune_expired_events_and_get(self, last_fetch=None, new_event=None):
|
||||
pruned = []
|
||||
def list_events(self, last_fetch=None):
|
||||
results = []
|
||||
|
||||
with self._store.get_lock(_EVENT_KEY):
|
||||
events = self._list_events()
|
||||
|
||||
for event in events:
|
||||
revoked_at = event.revoked_at
|
||||
if last_fetch is None or revoked_at > last_fetch:
|
||||
results.append(event)
|
||||
return results
|
||||
|
||||
def revoke(self, event):
|
||||
pruned = []
|
||||
expire_delta = datetime.timedelta(seconds=CONF.token.expiration)
|
||||
oldest = timeutils.utcnow() - expire_delta
|
||||
# TODO(ayoung): Store the time of the oldest event so that the
|
||||
# prune process can be skipped if none of the events have timed out.
|
||||
|
||||
with self._store.get_lock(_EVENT_KEY) as lock:
|
||||
events = self._list_events()
|
||||
if new_event is not None:
|
||||
events.append(new_event)
|
||||
if event:
|
||||
events.append(event)
|
||||
|
||||
for event in events:
|
||||
revoked_at = event.revoked_at
|
||||
if revoked_at > oldest:
|
||||
pruned.append(event)
|
||||
if last_fetch is None or revoked_at > last_fetch:
|
||||
results.append(event)
|
||||
self._store.set(_EVENT_KEY, pruned, lock)
|
||||
return results
|
||||
|
||||
def list_events(self, last_fetch=None):
|
||||
return self._prune_expired_events_and_get(last_fetch=last_fetch)
|
||||
|
||||
def revoke(self, event):
|
||||
self._prune_expired_events_and_get(new_event=event)
|
||||
|
|
|
@ -81,7 +81,6 @@ class Revoke(revoke.Driver):
|
|||
session.flush()
|
||||
|
||||
def list_events(self, last_fetch=None):
|
||||
self._prune_expired_events()
|
||||
session = sql.get_session()
|
||||
query = session.query(RevocationEvent).order_by(
|
||||
RevocationEvent.revoked_at)
|
||||
|
@ -102,3 +101,4 @@ class Revoke(revoke.Driver):
|
|||
session = sql.get_session()
|
||||
with session.begin():
|
||||
session.add(record)
|
||||
self._prune_expired_events()
|
||||
|
|
Loading…
Reference in New Issue