1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48
|
from unittest import TestCase
from cassandra.policies import HostStateListener
from tests.integration import get_node, use_cluster, local, TestCluster
from tests.integration.long.utils import decommission
from tests.util import wait_until
class StateListener(HostStateListener):
def __init__(self):
self.downed_host = None
self.removed_host = None
def on_remove(self, host):
self.removed_host = host
def on_up(self, host):
pass
def on_down(self, host):
self.downed_host = host
def on_add(self, host):
pass
class TopologyChangeTests(TestCase):
@local
def test_removed_node_stops_reconnecting(self):
""" Ensure we stop reconnecting after a node is removed. PYTHON-1181 """
use_cluster("test_down_then_removed", [3], start=True)
state_listener = StateListener()
cluster = TestCluster()
self.addCleanup(cluster.shutdown)
cluster.register_listener(state_listener)
session = cluster.connect(wait_for_all_pools=True)
get_node(3).nodetool("disablebinary")
wait_until(condition=lambda: state_listener.downed_host is not None, delay=2, max_attempts=50)
self.assertTrue(state_listener.downed_host.is_currently_reconnecting())
decommission(3)
wait_until(condition=lambda: state_listener.removed_host is not None, delay=2, max_attempts=50)
self.assertIs(state_listener.downed_host, state_listener.removed_host) # Just a sanity check
self.assertFalse(state_listener.removed_host.is_currently_reconnecting())
|