Skip to content

Commit bba7d04

Browse files
authored
Set performance bounds for CI and local (#2091)
* Set performance bounds * Enable error logs * Fail test when bounds are in valid * Fix lint * Update consume metrics * Update consume metrics
1 parent 0b33ab3 commit bba7d04

File tree

5 files changed

+34
-15
lines changed

5 files changed

+34
-15
lines changed

tests/ducktape/consumer_benchmark_metrics.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -228,10 +228,10 @@ def __init__(self,
228228
min_consumption_rate: float = 1.0,
229229
max_avg_latency_ms: float = 5000.0,
230230
max_p95_latency_ms: float = 10000.0,
231-
min_success_rate: float = 0.95,
231+
min_success_rate: float = 0.90,
232232
max_error_rate: float = 0.05,
233233
max_memory_growth_mb: float = 600.0,
234-
min_messages_per_consume: float = 1.0,
234+
min_messages_per_consume: float = 0.5,
235235
max_empty_consume_rate: float = 0.5):
236236
self.min_consumption_rate = min_consumption_rate
237237
self.max_avg_latency_ms = max_avg_latency_ms

tests/ducktape/producer_benchmark_bounds.json

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -3,24 +3,24 @@
33
"local": {
44
"_comment": "Default bounds for local development - more relaxed thresholds",
55
"min_throughput_msg_per_sec": 1000.0,
6-
"max_p95_latency_ms": 2000.0,
6+
"max_p95_latency_ms": 6000.0,
77
"max_error_rate": 0.02,
88
"min_success_rate": 0.98,
9-
"max_p99_latency_ms": 3000.0,
9+
"max_p99_latency_ms": 7000.0,
1010
"max_memory_growth_mb": 800.0,
1111
"max_buffer_full_rate": 0.05,
12-
"min_messages_per_poll": 10.0
12+
"min_messages_per_poll": 5.0
1313
},
1414
"ci": {
1515
"_comment": "Stricter bounds for CI environment - production-like requirements",
1616
"min_throughput_msg_per_sec": 1500.0,
17-
"max_p95_latency_ms": 1500.0,
17+
"max_p95_latency_ms": 11000.0,
1818
"max_error_rate": 0.01,
1919
"min_success_rate": 0.99,
20-
"max_p99_latency_ms": 2500.0,
21-
"max_memory_growth_mb": 600.0,
20+
"max_p99_latency_ms": 12000.0,
21+
"max_memory_growth_mb": 800.0,
2222
"max_buffer_full_rate": 0.03,
23-
"min_messages_per_poll": 10.0
23+
"min_messages_per_poll": 5.0
2424
},
2525
"_default_environment": "local"
2626
}

tests/ducktape/producer_strategy.py

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -509,6 +509,16 @@ def shared_metrics_callback(err, msg):
509509
pending_futures.append((delivery_future, message_key)) # Store delivery future
510510
messages_sent += 1
511511

512+
# Use configured polling interval (default to 50 if not set)
513+
poll_interval = getattr(self, 'poll_interval', 50)
514+
515+
if messages_sent % poll_interval == 0:
516+
poll_start = time.time()
517+
await producer.poll(0)
518+
poll_times.append(time.time() - poll_start)
519+
if self.metrics:
520+
self.metrics.record_poll()
521+
512522
except Exception as e:
513523
if failed_container is not None:
514524
failed_container.append(e)

tests/ducktape/test_consumer.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -570,9 +570,10 @@ def _run_consumer_performance_benchmark(
570570

571571
# Validate against performance bounds
572572
if not is_valid:
573-
self.logger.warning(
573+
self.logger.error(
574574
"Performance bounds validation failed: %s", "; ".join(violations)
575575
)
576+
assert False, f"Performance bounds validation failed: {'; '.join(violations)}"
576577

577578
self.logger.info(
578579
f"Successfully completed basic {operation_type} test with comprehensive metrics"

tests/ducktape/test_producer.py

Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -127,9 +127,10 @@ def message_formatter(msg_num):
127127

128128
# Validate against performance bounds
129129
if not is_valid:
130-
self.logger.warning(
130+
self.logger.error(
131131
"Performance bounds validation failed: %s", "; ".join(violations)
132132
)
133+
assert False, f"Performance bounds validation failed: {'; '.join(violations)}"
133134

134135
self.logger.info(
135136
"Successfully completed basic production test with comprehensive metrics"
@@ -219,9 +220,10 @@ def message_formatter(msg_num):
219220

220221
# Validate against performance bounds
221222
if not is_valid:
222-
self.logger.warning(
223+
self.logger.error(
223224
"Performance bounds validation failed: %s", "; ".join(violations)
224225
)
226+
assert False, f"Performance bounds validation failed: {'; '.join(violations)}"
225227

226228
self.logger.info(
227229
"Successfully completed basic production test with comprehensive metrics with transaction"
@@ -325,11 +327,12 @@ def message_formatter(msg_num):
325327

326328
# Validate against performance bounds
327329
if not is_valid:
328-
self.logger.warning(
330+
self.logger.error(
329331
"Performance bounds validation failed for %ds test: %s",
330332
test_duration,
331333
"; ".join(violations),
332334
)
335+
assert False, f"Performance bounds validation failed for {test_duration}s test: {'; '.join(violations)}"
333336

334337
self.logger.info(
335338
"Successfully completed %ds batch production test with comprehensive metrics",
@@ -466,11 +469,15 @@ def message_formatter(msg_num):
466469

467470
# Validate against performance bounds
468471
if not is_valid:
469-
self.logger.warning(
472+
self.logger.error(
470473
"Performance bounds validation failed for %s compression: %s",
471474
compression_type,
472475
"; ".join(violations),
473476
)
477+
assert False, (
478+
f"Performance bounds validation failed for {compression_type} compression: "
479+
f"{'; '.join(violations)}"
480+
)
474481

475482
self.logger.info(
476483
"Successfully completed %s compression test with comprehensive metrics",
@@ -607,9 +614,10 @@ def message_formatter(i):
607614
), f"Send throughput too low: {metrics_summary['send_throughput_msg_per_sec']:.2f} msg/s"
608615

609616
if not is_valid:
610-
self.logger.warning(
617+
self.logger.error(
611618
"Performance bounds validation failed: %s", "; ".join(violations)
612619
)
620+
assert False, f"Performance bounds validation failed: {'; '.join(violations)}"
613621

614622
self.logger.info(
615623
"Successfully completed SR production test with comprehensive metrics"

0 commit comments

Comments
 (0)