summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorHervé Beraud <herveberaud.pro@gmail.com>2021-07-15 14:42:22 +0200
committerMike Bayer <mike_mp@zzzcomputing.com>2021-08-30 11:47:03 -0400
commit36390997c6350a606c7cabe4ea85dd05f4bddd52 (patch)
treeeb31206cde488355b0fd29565dc208c5930d776c /tests
parent46d8bf158be59fa5bb8cfe26ef145117e15816bc (diff)
downloaddogpile-cache-36390997c6350a606c7cabe4ea85dd05f4bddd52.tar.gz
Allow using pymemcache's socket keepalive and retry mechanisms
Socket keepalive capabilities have been introduced [1][2][3] with pymemcache 3.5.0 [4][5]. These changes allow to pass keepalive configuration to the pymemcache client. Retry mechanisms have been implemented [6][7] with pymemcache 3.5.0 [5][8]. These changes allow to instantiate a ``RetryingClient`` by using dogpile.cache. [1] https://github.com/pinterest/pymemcache/commit/b289c87bb89b3ab477bd5d92c8951ab42c923923 [2] https://github.com/pinterest/pymemcache/commit/c782de1cac7cfaf4f6868d17682197022dad2d6b [3] https://github.com/pinterest/pymemcache/commit/4d46f5ad8ddbd860e5219965df0714bdc15062f6 [4] https://github.com/pinterest/pymemcache/commit/07b5ecc21ce5d388d4312c943d79f813311e349f [5] https://pypi.org/project/pymemcache/3.5.0/ [6] https://github.com/pinterest/pymemcache/commit/75fe5c81c35d2bcfc8e6a697aef948efbfebe8ba [7] https://pymemcache.readthedocs.io/en/latest/getting_started.html#using-the-built-in-retrying-mechanism [8] https://github.com/pinterest/pymemcache/commit/07b5ecc21ce5d388d4312c943d79f813311e349f Closes: #205 Pull-request: https://github.com/sqlalchemy/dogpile.cache/pull/205 Pull-request-sha: 8a7ea5dfb0653b675f2ce9eb4873d8bf08841028 Change-Id: Ia2e76475943bc8ec86b5974217d1c92110be5b43
Diffstat (limited to 'tests')
-rw-r--r--tests/cache/test_memcached_backend.py27
1 files changed, 27 insertions, 0 deletions
diff --git a/tests/cache/test_memcached_backend.py b/tests/cache/test_memcached_backend.py
index bac7445..407502a 100644
--- a/tests/cache/test_memcached_backend.py
+++ b/tests/cache/test_memcached_backend.py
@@ -2,11 +2,13 @@ import os
import ssl
from threading import Thread
import time
+from unittest import mock
from unittest import TestCase
import weakref
import pytest
+from dogpile.cache import make_region
from dogpile.cache.backends.memcached import GenericMemcachedBackend
from dogpile.cache.backends.memcached import MemcachedBackend
from dogpile.cache.backends.memcached import PylibmcBackend
@@ -200,6 +202,17 @@ class PyMemcacheSerializerTest(
backend = "dogpile.cache.pymemcache"
+class PyMemcacheRetryTest(_NonDistributedMemcachedTest):
+ backend = "dogpile.cache.pymemcache"
+ config_args = {
+ "arguments": {
+ "url": MEMCACHED_URL,
+ "enable_retry_client": True,
+ "retry_attempts": 3,
+ }
+ }
+
+
class MemcachedTest(_NonDistributedMemcachedTest):
backend = "dogpile.cache.memcached"
@@ -327,6 +340,20 @@ class MemcachedArgstest(TestCase):
backend.set("foo", "bar")
eq_(backend._clients.memcached.canary, [{"min_compress_len": 20}])
+ def test_pymemcache_enable_retry_client_not_set(self):
+ with mock.patch("warnings.warn") as warn_mock:
+ _ = make_region().configure(
+ "dogpile.cache.pymemcache",
+ arguments={"url": "foo", "retry_attempts": 2},
+ )
+ eq_(
+ warn_mock.mock_calls[0],
+ mock.call(
+ "enable_retry_client is not set; retry options "
+ "will be ignored"
+ ),
+ )
+
class LocalThreadTest(TestCase):
def setUp(self):