From 6074166b29a0546c92e3a1c152370d5b39c1dafe Mon Sep 17 00:00:00 2001 From: Peter Sabaini Date: Thu, 6 Apr 2017 23:06:29 +0200 Subject: [PATCH] Make flushing tokens more robust Commit token flushes between batches in order to lower resource consumption and make flushing more robust for replication Change-Id: I9be37e420353a336a8acd820eadd47d4bcf7324f Closes-Bug: #1649616 (cherry picked from commit dc7f81083180eeb5233f7007e3d2514cc0d7c6d3) --- keystone/token/persistence/backends/sql.py | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/keystone/token/persistence/backends/sql.py b/keystone/token/persistence/backends/sql.py index ca890093b9..982ca31246 100644 --- a/keystone/token/persistence/backends/sql.py +++ b/keystone/token/persistence/backends/sql.py @@ -277,6 +277,8 @@ class Token(token.persistence.TokenDriverBase): def flush_expired_tokens(self): with sql.session_for_write() as session: + # Turn off autocommit, as it doesn't work well with batch delete + session.autocommit = False dialect = session.bind.dialect.name expiry_range_func = self._expiry_range_strategy(dialect) query = session.query(TokenModel.expires) @@ -286,6 +288,10 @@ class Token(token.persistence.TokenDriverBase): delete_query = query.filter(TokenModel.expires <= expiry_time) row_count = delete_query.delete(synchronize_session=False) + # Explicitly commit each batch so as to free up + # resources early. We do not actually need + # transactional semantics here. + session.commit() total_removed += row_count LOG.debug('Removed %d total expired tokens', total_removed)