Skip to content

Commit 1c0f22f

Browse files
authored
chore(pytest): add check for rss grow in replicaiton big values (#4406)
Signed-off-by: adi_holden <adi@dragonflydb.io>
1 parent 7860a16 commit 1c0f22f

File tree

2 files changed

+28
-6
lines changed

2 files changed

+28
-6
lines changed

tests/dragonfly/replication_test.py

Lines changed: 27 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2662,31 +2662,52 @@ async def test_replication_timeout_on_full_sync_heartbeat_expiry(
26622662

26632663
@pytest.mark.parametrize(
26642664
"element_size, elements_number",
2665-
[(16, 20000), (20000, 16)],
2665+
[(16, 30000), (30000, 16)],
26662666
)
2667+
@dfly_args({"proactor_threads": 1})
26672668
async def test_big_containers(df_factory, element_size, elements_number):
2668-
master = df_factory.create(proactor_threads=4)
2669-
replica = df_factory.create(proactor_threads=4)
2669+
master = df_factory.create()
2670+
replica = df_factory.create()
26702671

26712672
df_factory.start_all([master, replica])
26722673
c_master = master.client()
26732674
c_replica = replica.client()
26742675

26752676
logging.debug("Fill master with test data")
26762677
seeder = StaticSeeder(
2677-
key_target=10,
2678+
key_target=50,
26782679
data_size=element_size * elements_number,
26792680
collection_size=elements_number,
26802681
variance=1,
2681-
samples=5,
2682-
types=["LIST", "SET", "ZSET", "HASH"],
2682+
samples=1,
2683+
types=["LIST", "SET", "ZSET", "HASH", "STREAM"],
26832684
)
26842685
await seeder.run(c_master)
26852686

2687+
async def get_memory(client, field):
2688+
info = await client.info("memory")
2689+
return info[field]
2690+
2691+
await asyncio.sleep(1) # wait for heartbeat to update rss memory
2692+
used_memory = await get_memory(c_master, "used_memory_rss")
2693+
26862694
logging.debug("Start replication and wait for full sync")
26872695
await c_replica.execute_command(f"REPLICAOF localhost {master.port}")
26882696
await wait_for_replicas_state(c_replica)
26892697

2698+
peak_memory = await get_memory(c_master, "used_memory_peak_rss")
2699+
2700+
logging.info(f"Used memory {used_memory}, peak memory {peak_memory}")
2701+
assert peak_memory < 1.1 * used_memory
2702+
2703+
await c_replica.execute_command("memory decommit")
2704+
await asyncio.sleep(1)
2705+
replica_peak_memory = await get_memory(c_replica, "used_memory_peak_rss")
2706+
replica_used_memory = await get_memory(c_replica, "used_memory_rss")
2707+
2708+
logging.info(f"Replica Used memory {replica_used_memory}, peak memory {replica_peak_memory}")
2709+
assert replica_peak_memory < 1.1 * replica_used_memory
2710+
26902711
# Check replica data consisten
26912712
replica_data = await StaticSeeder.capture(c_replica)
26922713
master_data = await StaticSeeder.capture(c_master)

tests/dragonfly/seeder/__init__.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -118,6 +118,7 @@ async def _run_unit(self, client: aioredis.Redis, dtype: str, prefix: str):
118118

119119
args = ["DEBUG", "POPULATE", key_target, prefix, math.ceil(dsize)]
120120
args += ["RAND", "TYPE", dtype, "ELEMENTS", csize]
121+
logging.debug(args)
121122
return await client.execute_command(*args)
122123

123124

0 commit comments

Comments
 (0)