Skip to content

Conversation

@prestonvasquez
Copy link
Member

GODRIVER-3659

Summary

This PR implements event filtering for awaitMinPoolSizeMS in the unified test runner, as specified in the unified test format specification.

A naive implementation would clear specific event arrays after initialization:

client.pooled = nil
client.serverDescriptionChanged = nil
client.serverHeartbeatStartedEvent = nil
// ... clear each SDAM event type

However, if we add a new CMAP or SDAM event type in the future, we must remember to update this clearing block. Forgetting to do so means initialization events leak into test assertions, causing false failures.

The eventSequencer assigns a monotonically increasing sequence number to each CMAP and SDAM event as it's recorded. After pool initialization completes, we capture the current sequence as a cutoff. When verifying test expectations, we filter out any events with sequence numbers at or below the cutoff. This approach is future-proof because new event types automatically participate in filtering as long as they call the appropriate recording method in their event processor.

Background & Motivation

PR #2196 added support for awaitMinPoolSizeMS to the unified test runner, but was merged before the specification PR mongodb/specifications#1834 was finalized. As a result, the initial implementation used a simplified approach that doesn't match the final specification requirements.

Per the spec, when awaitMinPoolSizeMS is specified:

Any CMAP and SDAM event/log listeners configured on the client should ignore any events that occur before the pool is being populated.

Copilot AI review requested due to automatic review settings November 8, 2025 00:08
@prestonvasquez prestonvasquez requested a review from a team as a code owner November 8, 2025 00:08
Copy link
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull Request Overview

This PR implements event filtering for awaitMinPoolSizeMS in the unified test runner to comply with the specification requirement that CMAP and SDAM events occurring during connection pool initialization should be ignored. The implementation uses a sequence-based filtering approach where events are assigned monotonically increasing sequence numbers, and a cutoff is set after pool initialization completes.

Key Changes:

  • Replaced boolean awaitMinPoolSize field with awaitMinPoolSizeMS integer field to specify timeout duration
  • Introduced eventSequencer to track event ordering via sequence numbers and filter events below a cutoff threshold
  • Modified event processing functions to record sequence numbers for all CMAP and SDAM events

Reviewed Changes

Copilot reviewed 4 out of 4 changed files in this pull request and generated 2 comments.

File Description
internal/integration/unified/entity.go Updated entityOptions to use awaitMinPoolSizeMS with timeout duration instead of boolean flag
internal/integration/unified/client_entity.go Added eventSequencer type and filtering logic; updated awaitMinimumPoolSize to accept timeout parameter and set cutoff after pool initialization
internal/integration/unified/event_verification.go Modified event verification functions to use filterEventsBySeq for filtering CMAP and SDAM events
internal/integration/unified/client_entity_test.go Added comprehensive unit tests for eventSequencer functionality

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

@mongodb-drivers-pr-bot
Copy link
Contributor

mongodb-drivers-pr-bot bot commented Nov 8, 2025

🧪 Performance Results

Commit SHA: 57c3818

The following benchmark tests for version 69127df7bedfbd0007c55290 had statistically significant changes (i.e., |z-score| > 1.96):

Benchmark Measurement % Change Patch Value Stable Region H-Score Z-Score
BenchmarkBSONDeepDocumentEncoding ops_per_second_min -32.2247 2278.0029 Avg: 3361.1109
Med: 3401.2631
Stdev: 510.6022
0.7568 -2.1212
BenchmarkBSONDeepDocumentDecoding ops_per_second_min 18.7094 2375.5565 Avg: 2001.1528
Med: 2006.4528
Stdev: 169.0134
0.7768 2.2152
BenchmarkMultiInsertLargeDocument total_mem_allocs 11.9970 1988.0000 Avg: 1775.0476
Med: 1800.0000
Stdev: 106.3117
0.7279 2.0031
BenchmarkMultiFindMany total_mem_allocs 10.7965 518495.0000 Avg: 467970.6111
Med: 469972.5000
Stdev: 22195.9290
0.7594 2.2763
BenchmarkMultiFindMany total_bytes_allocated 10.5783 840501240.0000 Avg: 760096146.2222
Med: 763743356.0000
Stdev: 36028084.7754
0.7558 2.2317
BenchmarkMultiInsertLargeDocument allocated_bytes_per_op -6.9672 26026403.0000 Avg: 27975509.9429
Med: 27920426.0000
Stdev: 645517.9504
0.8187 -3.0194
BenchmarkMultiInsertSmallDocument ns_per_op -5.2620 6244.0000 Avg: 6590.8111
Med: 6581.5000
Stdev: 171.3524
0.7360 -2.0240
BenchmarkSmallDocInsertOne allocated_bytes_per_op -0.2812 5673.0000 Avg: 5689.0000
Med: 5689.0000
Stdev: 4.1633
0.8750 -3.8431

For a comprehensive view of all microbenchmark results for this PR's commit, please check out the Evergreen perf task for this patch.

@mongodb-drivers-pr-bot
Copy link
Contributor

API Change Report

No changes found!

@prestonvasquez prestonvasquez force-pushed the ci/godriver-3659-await-min-pool-size-in-ust-new branch from acbd1d0 to 4110738 Compare November 10, 2025 23:49
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant