Skip to content

Commit

Permalink
move sharding code into its own function for simplication
Browse files Browse the repository at this point in the history
  • Loading branch information
salimane committed Sep 27, 2012
1 parent 6c62199 commit 21e80fc
Showing 1 changed file with 10 additions and 8 deletions.
18 changes: 10 additions & 8 deletions rediscluster/cluster_client.py
Expand Up @@ -143,14 +143,13 @@ def function(*args, **kwargs):
args = tuple(L) args = tuple(L)


#get the node number #get the node number
node = str((abs(binascii.crc32( node = self._getnodenamefor(hkey)
b(hkey)) & 0xffffffff) % self.no_servers) + 1)
redisent = self.redises[self.cluster['default_node']] redisent = self.redises[self.cluster['default_node']]
if name in StrictRedisCluster._write_keys: if name in StrictRedisCluster._write_keys:
redisent = self.redises['node_' + node] redisent = self.redises[node]
elif name in StrictRedisCluster._read_keys: elif name in StrictRedisCluster._read_keys:
redisent = self.redises[ redisent = self.redises[
self.cluster['master_of']['node_' + node]] self.cluster['master_of'][node]]


#Execute the command on the server #Execute the command on the server
return getattr(redisent, name)(*args, **kwargs) return getattr(redisent, name)(*args, **kwargs)
Expand All @@ -171,11 +170,15 @@ def function(*args, **kwargs):
return result return result


return function return function

def _getnodenamefor(self, name):
"Return the node name where the ``name`` would land to"
return 'node_' + str(
(abs(binascii.crc32(b(name)) & 0xffffffff) % self.no_servers) + 1)


def getnodefor(self, name): def getnodefor(self, name):
"Return the node where the ``name`` would land to" "Return the node where the ``name`` would land to"
node = 'node_' + str( node = self._getnodenamefor(name)
(abs(binascii.crc32(b(name)) & 0xffffffff) % self.no_servers) + 1)
return {node: self.cluster['nodes'][node]} return {node: self.cluster['nodes'][node]}


def __setitem__(self, name, value): def __setitem__(self, name, value):
Expand All @@ -198,8 +201,7 @@ def __delitem__(self, *names):


def object(self, infotype, key): def object(self, infotype, key):
"Return the encoding, idletime, or refcount about the key" "Return the encoding, idletime, or refcount about the key"
redisent = self.redises[self.cluster['master_of']['node_' + str(( redisent = self.redises[self.cluster['master_of'][self._getnodenamefor(key)]]
abs(binascii.crc32(b(key)) & 0xffffffff) % self.no_servers) + 1)]]
return getattr(redisent, 'object')(infotype, key) return getattr(redisent, 'object')(infotype, key)


def _rc_brpoplpush(self, src, dst, timeout=0): def _rc_brpoplpush(self, src, dst, timeout=0):
Expand Down

0 comments on commit 21e80fc

Please sign in to comment.