Don't hold lock when incrementing load balancer position
This commit is contained in:
@@ -1,6 +1,5 @@
|
|||||||
from itertools import islice, cycle, groupby, repeat
|
from itertools import islice, cycle, groupby, repeat
|
||||||
from random import randint
|
from random import randint
|
||||||
from threading import RLock
|
|
||||||
|
|
||||||
from cassandra import ConsistencyLevel
|
from cassandra import ConsistencyLevel
|
||||||
|
|
||||||
@@ -22,9 +21,6 @@ class LoadBalancingPolicy(object):
|
|||||||
|
|
||||||
class RoundRobinPolicy(LoadBalancingPolicy):
|
class RoundRobinPolicy(LoadBalancingPolicy):
|
||||||
|
|
||||||
def __init__(self):
|
|
||||||
self._lock = RLock()
|
|
||||||
|
|
||||||
def populate(self, cluster, hosts):
|
def populate(self, cluster, hosts):
|
||||||
self._live_hosts = set(hosts)
|
self._live_hosts = set(hosts)
|
||||||
if len(hosts) <= 1:
|
if len(hosts) <= 1:
|
||||||
@@ -36,7 +32,8 @@ class RoundRobinPolicy(LoadBalancingPolicy):
|
|||||||
return HostDistance.LOCAL
|
return HostDistance.LOCAL
|
||||||
|
|
||||||
def make_query_plan(self, query=None):
|
def make_query_plan(self, query=None):
|
||||||
with self._lock:
|
# not thread-safe, but we don't care much about lost increments
|
||||||
|
# for the purposes of load balancing
|
||||||
pos = self._position
|
pos = self._position
|
||||||
self._position += 1
|
self._position += 1
|
||||||
|
|
||||||
@@ -66,7 +63,6 @@ class DCAwareRoundRobinPolicy(LoadBalancingPolicy):
|
|||||||
self.local_dc = local_dc
|
self.local_dc = local_dc
|
||||||
self.used_hosts_per_remote_dc = used_hosts_per_remote_dc
|
self.used_hosts_per_remote_dc = used_hosts_per_remote_dc
|
||||||
self._dc_live_hosts = {}
|
self._dc_live_hosts = {}
|
||||||
self._lock = RLock()
|
|
||||||
|
|
||||||
def populate(self, cluster, hosts):
|
def populate(self, cluster, hosts):
|
||||||
for dc, dc_hosts in groupby(hosts, lambda h: h.datacenter):
|
for dc, dc_hosts in groupby(hosts, lambda h: h.datacenter):
|
||||||
@@ -96,7 +92,8 @@ class DCAwareRoundRobinPolicy(LoadBalancingPolicy):
|
|||||||
return HostDistance.IGNORED
|
return HostDistance.IGNORED
|
||||||
|
|
||||||
def make_query_plan(self, query=None):
|
def make_query_plan(self, query=None):
|
||||||
with self._lock:
|
# not thread-safe, but we don't care much about lost increments
|
||||||
|
# for the purposes of load balancing
|
||||||
pos = self._position
|
pos = self._position
|
||||||
self._position += 1
|
self._position += 1
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user