diff --git a/jupyterhub_traefik_proxy/redis.py b/jupyterhub_traefik_proxy/redis.py index 738b2e13..71ea3ca7 100644 --- a/jupyterhub_traefik_proxy/redis.py +++ b/jupyterhub_traefik_proxy/redis.py @@ -1,6 +1,7 @@ """Redis backend""" import asyncio +from functools import partial from urllib.parse import urlparse from traitlets import Any, Dict, Unicode, default @@ -69,7 +70,12 @@ async def _cleanup(self): f = super()._cleanup() if f is not None: await f - await self.redis.close() + if hasattr(self.redis, 'aclose'): + aclose = self.redis.aclose + else: + # redis < 5.0.1 + aclose = self.redis.close + await aclose() def _setup_traefik_static_config(self): self.log.debug("Setting up the redis provider in the traefik static config") @@ -115,7 +121,7 @@ def _register_delete_script(self): """ _delete_lua = """ local all_keys = {}; - local cursor = ""; + local cursor = "0"; repeat local result = redis.call("SCAN", cursor, "match", ARGV[1], "count", ARGV[2]) cursor = result[1]; @@ -144,11 +150,11 @@ async def _kv_atomic_delete(self, *keys): prefix = key + "*" self.log.debug("Deleting redis tree %s", prefix) f = asyncio.ensure_future(self._delete_script(args=[prefix, 100])) - f.add_done_callback( - lambda f: self.log.debug( - "Deleted %i keys in %s", f.result(), prefix - ) - ) + + def _log_delete(_prefix, f): + self.log.debug("Deleted %i keys in %s", f.result(), _prefix) + + f.add_done_callback(partial(_log_delete, prefix)) futures.append(f) else: to_delete.append(key) diff --git a/tests/conftest.py b/tests/conftest.py index 6c59c0d6..14c0fc75 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -418,6 +418,7 @@ async def external_redis_proxy(launch_traefik_redis, proxy_args): ) await proxy._start_future yield proxy + await proxy._cleanup() @pytest.fixture @@ -801,6 +802,7 @@ async def _wait_for_redis(): from redis.asyncio import Redis async def _check_redis(): + r = None try: r = Redis( port=Config.redis_port, @@ -811,6 +813,10 @@ async def _check_redis(): except redis.exceptions.ConnectionError as e: print(e) return False + finally: + if r is not None: + await r.aclose() + return True await exponential_backoff(