Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
34 changes: 19 additions & 15 deletions tests/unit/test_metadata.py
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,6 @@
import logging
from unittest.mock import Mock
import os
import timeit
import uuid

import cassandra
Expand Down Expand Up @@ -226,12 +225,13 @@ def test_nts_make_token_replica_map(self):

def test_nts_token_performance(self):
"""
Tests to ensure that when rf exceeds the number of nodes available, that we dont'
needlessly iterate trying to construct tokens for nodes that don't exist.
When rf exceeds the number of nodes available, the replica map must
only contain the nodes that exist (one replica set per token), not
iterate to build replicas for nodes that don't exist.

@since 3.7
@jira_ticket PYTHON-379
@expected_result timing with 1500 rf should be same/similar to 3rf if we have 3 nodes
@expected_result 1500 rf with 3 nodes produces the same replica map as 3 rf

@test_category metadata
"""
Expand All @@ -251,17 +251,21 @@ def test_nts_token_performance(self):
ring.append(md5_token)
current_token += 1000

nts = NetworkTopologyStrategy({'dc1': 3})
start_time = timeit.default_timer()
nts.make_token_replica_map(token_to_host_owner, ring)
elapsed_base = timeit.default_timer() - start_time

nts = NetworkTopologyStrategy({'dc1': 1500})
start_time = timeit.default_timer()
nts.make_token_replica_map(token_to_host_owner, ring)
elapsed_bad = timeit.default_timer() - start_time
difference = elapsed_bad - elapsed_base
assert difference < 1 and difference > -1
expected_replicas = set(token_to_host_owner.values())

replica_map_rf3 = NetworkTopologyStrategy({'dc1': 3}).make_token_replica_map(
token_to_host_owner, ring)
replica_map_rf1500 = NetworkTopologyStrategy({'dc1': 1500}).make_token_replica_map(
token_to_host_owner, ring)

for replica_map in (replica_map_rf3, replica_map_rf1500):
assert set(replica_map) == set(ring)
assert all(
len(replicas) == dc1hostnum
and set(replicas) == expected_replicas
for replicas in replica_map.values()
)
assert replica_map_rf1500 == replica_map_rf3

def test_nts_make_token_replica_map_multi_rack(self):
token_to_host_owner = {}
Expand Down
Loading