diff options
author | Joe Gordon <jogo@users.noreply.github.com> | 2023-01-31 10:20:38 -0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-01-31 10:20:38 -0800 |
commit | c7cbc7a4401b8218a261a89bc2c699e9556f88d6 (patch) | |
tree | f9db8e17a497c74c7780997b19400ebcc32f839f /pymemcache/client/hash.py | |
parent | b5e1ff18d612a8c3fc3943cd084c2837cdf46d92 (diff) | |
parent | 7d871868199133818d821cf17d20fdb5727b6ace (diff) | |
download | pymemcache-c7cbc7a4401b8218a261a89bc2c699e9556f88d6.tar.gz |
Merge pull request #468 from matejsp/master
Support for Gat (Get and Touch), Support passing server key in a tuple
Diffstat (limited to 'pymemcache/client/hash.py')
-rw-r--r-- | pymemcache/client/hash.py | 26 |
1 files changed, 19 insertions, 7 deletions
diff --git a/pymemcache/client/hash.py b/pymemcache/client/hash.py index e56517f..aec4090 100644 --- a/pymemcache/client/hash.py +++ b/pymemcache/client/hash.py @@ -170,18 +170,24 @@ class HashClient: self._last_dead_check_time = current_time def _get_client(self, key): - check_key_helper(key, self.allow_unicode_keys, self.key_prefix) + # If key is tuple use first item as server key + if isinstance(key, tuple) and len(key) == 2: + server_key, key = key + else: + server_key = key + + check_key_helper(server_key, self.allow_unicode_keys, self.key_prefix) if self._dead_clients: self._retry_dead() - server = self.hasher.get_node(key) + server = self.hasher.get_node(server_key) # We've ran out of servers to try if server is None: if self.ignore_exc is True: - return + return None, key raise MemcacheError("All servers seem to be down right now") - return self.clients[server] + return self.clients[server], key def _safely_run_func(self, client, func, default_val, *args, **kwargs): try: @@ -311,7 +317,7 @@ class HashClient: self._failed_clients[server] = failed_metadata def _run_cmd(self, cmd, key, default_val, *args, **kwargs): - client = self._get_client(key) + client, key = self._get_client(key) if client is None: return default_val @@ -346,6 +352,12 @@ class HashClient: def get(self, key, default=None, **kwargs): return self._run_cmd("get", key, default, default=default, **kwargs) + def gat(self, key, default=None, **kwargs): + return self._run_cmd("gat", key, default, default=default, **kwargs) + + def gats(self, key, default=None, **kwargs): + return self._run_cmd("gats", key, default, default=default, **kwargs) + def incr(self, key, *args, **kwargs): return self._run_cmd("incr", key, False, *args, **kwargs) @@ -357,7 +369,7 @@ class HashClient: failed = [] for key, value in values.items(): - client = self._get_client(key) + client, key = self._get_client(key) if client is None: failed.append(key) @@ -378,7 +390,7 @@ class HashClient: end = {} for key in keys: - client = self._get_client(key) + client, key = self._get_client(key) if client is None: continue |