Skip to content

Client config reporting (3.x) — stage 1 (groundwork): SESSION_ID + DRIVER_CONFIG plumbing - #973

Merged
dkropachev merged 1 commit into
scylladb:scylla-3.xfrom
nikagra:feature/driver-config-reporting-3x
Aug 3, 2026
Merged

Client config reporting (3.x) — stage 1 (groundwork): SESSION_ID + DRIVER_CONFIG plumbing#973
dkropachev merged 1 commit into
scylladb:scylla-3.xfrom
nikagra:feature/driver-config-reporting-3x

Conversation

@nikagra

@nikagra nikagra commented Jul 27, 2026

Copy link
Copy Markdown

What ☑️

Stage 1 (groundwork) of client configuration reporting for the 3.x driver — the 3.x counterpart of the 4.x feature. It lets the driver report its effective client configuration to ScyllaDB at connection time, so operators can inspect driver settings (via system.clients.client_options) while investigating incidents. Follows the cross-driver JSON schema design.

This is phase 1 of 2 — it lands the plumbing; the full configuration report (all groups) comes in phase 2 (#974).

Behavior 👶

Two STARTUP options are added:

  • SESSION_ID — a dedicated, driver-generated UUID, sent on every connection (control and pool), unconditionally — like the DRIVER_NAME / DRIVER_VERSION options the driver already always sends. One id per Cluster, shared by every connection opened from it — including across multiple Sessions obtained from the same Cluster — so the server can group them. It's Cluster-scoped rather than Session-scoped because the control connection isn't tied to any particular Session (see discussion in review). Independent of the user-settable CLIENT_ID.
  • DRIVER_CONFIG — a compact JSON blob, sent only on the control connection. Enabled by default; opt out with Cluster.builder().withDriverConfigReporting(false). Stage 1 emits only {"version":1}; the full report follows in phase 2. system.clients.client_options is per node, so only the node holding the control connection stores this — consumers must query and aggregate across all nodes to see the full picture.

The report is built once, while the Cluster initializes, and the resulting string is reused for every control connection that Cluster opens — it is never rebuilt while the session is in flight, so a control-connection reconnect costs nothing and always reports the same configuration. Building it is fail-safe: any failure is swallowed and simply leaves DRIVER_CONFIG unset rather than breaking cluster initialization.

Changes ✍️

  • New DriverConfigReporter / DefaultDriverConfigReporter (package com.datastax.driver.core) build the DRIVER_CONFIG payload — a single buildReport() call that returns the JSON, or null if it couldn't be built.
  • Connection.Factory (one per Cluster) holds that cluster's SESSION_ID and, when reporting is enabled, the report built at initialization time. It hands the report to the control connection as a constructor argumentnull everywhere else, and null is exactly what suppresses DRIVER_CONFIG. No reporter instance is retained, and none is constructed at all when reporting is off.
  • Both options are written in Connection.onOptionsReady(), right after the existing applicationInfo startup-option hook.
  • The control connection is identified by threading a reportConfig flag from ControlConnection.tryConnect through a new Connection.Factory.open(host, reportConfig) overload — 3.x has no pre-existing signal that identifies the control connection at STARTUP time.
  • New config flag threaded through Cluster.BuilderConfiguration.BuilderConfiguration (default true).
  • jackson-core/jackson-databind are enforced as plain required dependencies (as they already were in released 3.11.5.17), used by DefaultDriverConfigReporter to build the JSON blob; the orphaned jackson-dataformat-yaml dependency (dead since the Scylla Cloud config code was removed) is dropped, so consumers no longer inherit SnakeYAML. OSGi manifests carry mandatory com.fasterxml.jackson.*;version="[2.18,3)" imports accordingly.

Testing 🔨

Unit tests

  • DefaultDriverConfigReporterTest: reporting is enabled by default (both Configuration.builder() and Cluster.builder()), the stage-1 report is {"version":1}, and report building is fail-safe (a throwing build yields null instead of propagating).
  • driver-core compiles and unit tests are green.

Integration tests

DriverConfigReportingCcmTest (live ScyllaDB, @ScyllaVersion ≥ 2026.1; named *Test rather than *IT so Surefire's default discovery actually picks it up — see review discussion) asserts what the server stores in system.clients:

  • SESSION_ID is stored for every connection of the cluster, and DRIVER_CONFIG for exactly one (the control connection);
  • two Sessions opened from the same Cluster share one SESSION_ID;
  • with reporting disabled, SESSION_ID is still stored but DRIVER_CONFIG is not.

The cluster under test uses the default configuration (no withDriverConfigReporting call), so these also cover default-on end-to-end. Each cluster's connections are identified by the SESSION_ID the driver generated for it, so the assertions can't be confused by another cluster's rows. The end-to-end verification of the full report lands with phase 2.

Verified live against ScyllaDB 2026.1 — all 3 methods pass.

Manual tests 🖐

Captured the actual STARTUP frames on the wire with tshark, against a live single-node ScyllaDB 2026.1.0 (CCM), to directly confirm the plumbing — same method as #967's stage-1 verification for the 4.x driver.

Environment: single node ScyllaDB 2026.1.0 on CCM, contact point 127.0.0.1:9042, minimal Cluster.builder().addContactPoint("127.0.0.1").withPort(9042) — samples 1 and 2 with no withDriverConfigReporting call at all (i.e. the default), sample 3 with withDriverConfigReporting(false).

Sample 1: Control connection STARTUP frame (default configuration)

Note

Note both DRIVER_CONFIG and SESSION_ID are present, with no configuration needed to enable them

Cassandra CQL Protocol
    Version: 0x04
        .... 0100 = Protocol version: 4
        0000 .... = Direction: Request (0x0)
    Stream Identifier: 64
    .000 0001 = Opcode: STARTUP (1)
    Message Length: 264
    Message STARTUP
        String Map Size: 8
        String Length: 13
        String: DRIVER_CONFIG
        String Length: 13
        String: {"version":1}
        String Length: 28
        String: SCYLLA_LWT_ADD_METADATA_MARK
        String Length: 11
        String: -2147483648
        String Length: 22
        String: SCYLLA_USE_METADATA_ID
        String Length: 0
        String: 
        String Length: 18
        String: TABLETS_ROUTING_V1
        String Length: 0
        String: 
        String Length: 10
        String: SESSION_ID
        String Length: 36
        String: d5c0ea79-22bb-4e60-bc49-cf078e1599d7
        String Length: 11
        String: CQL_VERSION
        String Length: 5
        String: 3.0.0
        String Length: 14
        String: DRIVER_VERSION
        String Length: 18
        String: 3.11.5.18-SNAPSHOT
        String Length: 11
        String: DRIVER_NAME
        String Length: 20
        String: ScyllaDB Java Driver

Sample 2: Pool connection STARTUP frame (default configuration)

Note

Note only SESSION_ID is present — same value as Sample 1, since it's the same cluster

Cassandra CQL Protocol
    Version: 0x04
        .... 0100 = Protocol version: 4
        0000 .... = Direction: Request (0x0)
    Stream Identifier: 64
    .000 0001 = Opcode: STARTUP (1)
    Message Length: 234
    Message STARTUP
        String Map Size: 7
        String Length: 28
        String: SCYLLA_LWT_ADD_METADATA_MARK
        String Length: 11
        String: -2147483648
        String Length: 22
        String: SCYLLA_USE_METADATA_ID
        String Length: 0
        String: 
        String Length: 18
        String: TABLETS_ROUTING_V1
        String Length: 0
        String: 
        String Length: 10
        String: SESSION_ID
        String Length: 36
        String: d5c0ea79-22bb-4e60-bc49-cf078e1599d7
        String Length: 11
        String: CQL_VERSION
        String Length: 5
        String: 3.0.0
        String Length: 14
        String: DRIVER_VERSION
        String Length: 18
        String: 3.11.5.18-SNAPSHOT
        String Length: 11
        String: DRIVER_NAME
        String Length: 20
        String: ScyllaDB Java Driver

Sample 3: Control connection STARTUP frame (withDriverConfigReporting(false))

Note

Note DRIVER_CONFIG is gone, while SESSION_ID is still sent — it is not governed by the flag

Cassandra CQL Protocol
    Version: 0x04
        .... 0100 = Protocol version: 4
        0000 .... = Direction: Request (0x0)
    Stream Identifier: 64
    .000 0001 = Opcode: STARTUP (1)
    Message Length: 234
    Message STARTUP
        String Map Size: 7
        String Length: 28
        String: SCYLLA_LWT_ADD_METADATA_MARK
        String Length: 11
        String: -2147483648
        String Length: 22
        String: SCYLLA_USE_METADATA_ID
        String Length: 0
        String: 
        String Length: 18
        String: TABLETS_ROUTING_V1
        String Length: 0
        String: 
        String Length: 10
        String: SESSION_ID
        String Length: 36
        String: c9906f24-99df-4874-aeee-a87a00068d41
        String Length: 11
        String: CQL_VERSION
        String Length: 5
        String: 3.0.0
        String Length: 14
        String: DRIVER_VERSION
        String Length: 18
        String: 3.11.5.18-SNAPSHOT
        String Length: 11
        String: DRIVER_NAME
        String Length: 20
        String: ScyllaDB Java Driver

Note on cross-driver consistency ⚠️

The merged 4.x stage 1 (#967) currently differs from what this PR now does, on three points requested in review here: it ships disabled by default (advanced.driver-config-reporting.enabled = false), it gates SESSION_ID behind that same flag, and it rebuilds the blob on every control-connection init. Happy to align 4.x in a follow-up if we want the two drivers to behave identically — just say the word and I'll open it.

Follow-up (phase 2)

  • Populate the full configuration report (connection / socket / policies / connection pool / query defaults / tls) per the approved v2 schema.

Fixes DRIVER-382

🤖 Generated with Claude Code

@coderabbitai

coderabbitai Bot commented Jul 27, 2026

Copy link
Copy Markdown

Review Change Stack

Note

Reviews paused

It looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the reviews.auto_review.auto_pause_after_reviewed_commits setting.

Use the following commands to manage reviews:

  • @coderabbitai resume to resume automatic reviews.
  • @coderabbitai review to trigger a single review.

Use the checkboxes below for quick actions:

  • ▶️ Resume reviews
  • 🔍 Trigger review
📝 Walkthrough

Walkthrough

Adds configurable driver configuration reporting to Configuration and Cluster.Builder. Enabled connections emit a cluster-scoped SESSION_ID; control connections additionally emit versioned DRIVER_CONFIG JSON. Connection factories select default or no-op reporters, while reporting failures do not interrupt connection setup. Unit and CCM tests cover enabled, disabled, shared-session, and failure behavior.

Sequence Diagram(s)

sequenceDiagram
  participant ClusterBuilder
  participant Configuration
  participant ConnectionFactory
  participant ControlConnection
  participant DefaultDriverConfigReporter
  ClusterBuilder->>Configuration: enable reporting
  ConnectionFactory->>DefaultDriverConfigReporter: create reporter
  ControlConnection->>ConnectionFactory: open(host, true)
  ConnectionFactory->>DefaultDriverConfigReporter: addOption(options, true)
  DefaultDriverConfigReporter-->>ConnectionFactory: SESSION_ID and DRIVER_CONFIG
Loading

Possibly related PRs

  • scylladb/java-driver#967: Implements related SESSION_ID/DRIVER_CONFIG reporting plumbing and control-connection startup behavior.
  • scylladb/java-driver#968: Extends the related reporter, startup plumbing, and tests for the full DRIVER_CONFIG payload.

Suggested labels: P1

Suggested reviewers: sylwiaszunejko, dkropachev

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 39.66% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
Title check ✅ Passed The title clearly summarizes the stage 1 client configuration reporting groundwork and identifies the main SESSION_ID and DRIVER_CONFIG changes.
Description check ✅ Passed The description accurately explains the reporting behavior, implementation changes, testing, and planned phase 2 work.

Comment @coderabbitai help to get the list of available commands.

@nikagra
nikagra force-pushed the feature/driver-config-reporting-3x branch from 9366dd6 to 1ec3ff3 Compare July 30, 2026 11:48
@nikagra
nikagra marked this pull request as ready for review July 30, 2026 11:51

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Actionable comments posted: 1

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@driver-core/src/main/java/com/datastax/driver/core/Connection.java`:
- Around line 1301-1310: The DriverConfigReporter currently lives on the
cluster-wide Connection.Factory, causing multiple Session instances to share one
SESSION_ID. Move reporter creation and ownership from Factory to the actual
Session layer, and ensure each session’s connections reuse that session-scoped
reporter; update affected wiring and tests to preserve per-session grouping.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro Plus

Run ID: a97e0b8c-9fad-48bf-9c86-bd7c8c548623

📥 Commits

Reviewing files that changed from the base of the PR and between 74e30fa and 1ec3ff3.

📒 Files selected for processing (8)
  • driver-core/src/main/java/com/datastax/driver/core/Cluster.java
  • driver-core/src/main/java/com/datastax/driver/core/Configuration.java
  • driver-core/src/main/java/com/datastax/driver/core/Connection.java
  • driver-core/src/main/java/com/datastax/driver/core/ControlConnection.java
  • driver-core/src/main/java/com/datastax/driver/core/DefaultDriverConfigReporter.java
  • driver-core/src/main/java/com/datastax/driver/core/DriverConfigReporter.java
  • driver-core/src/test/java/com/datastax/driver/core/DefaultDriverConfigReporterTest.java
  • driver-core/src/test/java/com/datastax/driver/core/DriverConfigReportingCcmIT.java

Comment thread driver-core/src/main/java/com/datastax/driver/core/Connection.java Outdated
Comment thread driver-core/src/main/java/com/datastax/driver/core/Connection.java Outdated

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
driver-core/src/test/java/com/datastax/driver/core/DriverConfigReportingCcmTest.java (1)

195-205: 🗄️ Data Integrity & Integration | 🟠 Major | 🏗️ Heavy lift

Aggregate system.clients across all nodes.

client_options is node-local, but allDriverRows() queries only the node selected by session(). On a multi-node cluster this can omit the control row or pooled rows, making the “exactly one DRIVER_CONFIG” and disabled-reporting assertions incomplete or flaky. Query every node, or explicitly pin and aggregate the control-connection node; include node identity in connection keys if aggregating.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In
`@driver-core/src/test/java/com/datastax/driver/core/DriverConfigReportingCcmTest.java`
around lines 195 - 205, Update allDriverRows() to query and aggregate
system.clients from every cluster node instead of only the session-selected
node, preserving the DRIVER_NAME filter and including node identity in any
connection keys used by the assertions. Ensure the resulting rows cover control
and pooled connections so the existing count and disabled-reporting checks
remain complete.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Outside diff comments:
In
`@driver-core/src/test/java/com/datastax/driver/core/DriverConfigReportingCcmTest.java`:
- Around line 195-205: Update allDriverRows() to query and aggregate
system.clients from every cluster node instead of only the session-selected
node, preserving the DRIVER_NAME filter and including node identity in any
connection keys used by the assertions. Ensure the resulting rows cover control
and pooled connections so the existing count and disabled-reporting checks
remain complete.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro Plus

Run ID: 3cd52ce3-2107-4f14-989d-e96c708f2887

📥 Commits

Reviewing files that changed from the base of the PR and between 1ec3ff3 and 6cfd5f3.

📒 Files selected for processing (8)
  • driver-core/pom.xml
  • driver-core/src/main/java/com/datastax/driver/core/Cluster.java
  • driver-core/src/main/java/com/datastax/driver/core/Connection.java
  • driver-core/src/main/java/com/datastax/driver/core/DefaultDriverConfigReporter.java
  • driver-core/src/main/java/com/datastax/driver/core/DriverConfigReporter.java
  • driver-core/src/main/java/com/datastax/driver/core/NoopDriverConfigReporter.java
  • driver-core/src/test/java/com/datastax/driver/core/DriverConfigReportingCcmTest.java
  • driver-core/src/test/java/com/datastax/driver/core/NoopDriverConfigReporterTest.java
🚧 Files skipped from review as they are similar to previous changes (1)
  • driver-core/src/main/java/com/datastax/driver/core/Cluster.java

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Actionable comments posted: 1

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@driver-core/pom.xml`:
- Around line 171-179: Prevent Connection.Factory from triggering a Jackson
NoClassDefFoundError during connection setup when reporting dependencies are
absent. Update DefaultDriverConfigReporter and the reporting initialization
around Connection.Factory so Jackson-dependent classes are loaded only after
availability is verified, or make jackson-core and jackson-databind required
instead of optional; preserve addOption()’s handling for unavailable reporting.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro Plus

Run ID: 7ebf3485-784f-4f81-9a28-103e79c40ea1

📥 Commits

Reviewing files that changed from the base of the PR and between 6cfd5f3 and 0073d32.

📒 Files selected for processing (11)
  • driver-core/pom.xml
  • driver-core/src/main/java/com/datastax/driver/core/Cluster.java
  • driver-core/src/main/java/com/datastax/driver/core/Configuration.java
  • driver-core/src/main/java/com/datastax/driver/core/Connection.java
  • driver-core/src/main/java/com/datastax/driver/core/ControlConnection.java
  • driver-core/src/main/java/com/datastax/driver/core/DefaultDriverConfigReporter.java
  • driver-core/src/main/java/com/datastax/driver/core/DriverConfigReporter.java
  • driver-core/src/main/java/com/datastax/driver/core/NoopDriverConfigReporter.java
  • driver-core/src/test/java/com/datastax/driver/core/DefaultDriverConfigReporterTest.java
  • driver-core/src/test/java/com/datastax/driver/core/DriverConfigReportingCcmTest.java
  • driver-core/src/test/java/com/datastax/driver/core/NoopDriverConfigReporterTest.java

Comment thread driver-core/pom.xml Outdated
Comment thread driver-core/pom.xml Outdated
Comment thread driver-core/src/main/java/com/datastax/driver/core/Connection.java Outdated
@nikagra
nikagra force-pushed the feature/driver-config-reporting-3x branch from 9d61c1b to a48ac94 Compare July 30, 2026 23:52
@coderabbitai
coderabbitai Bot requested a review from dkropachev July 30, 2026 23:53
@coderabbitai coderabbitai Bot added P1 and removed P3 labels Jul 30, 2026
@github-actions github-actions Bot added P3 P1 and removed P1 P3 labels Jul 30, 2026

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Actionable comments posted: 1

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@driver-core/pom.xml`:
- Line 167: Add <optional>true</optional> to the jackson-core and
jackson-databind dependency declarations in driver-core/pom.xml, leaving their
existing versions and configuration unchanged.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro Plus

Run ID: 8cbf6aa0-0778-4ac5-8373-9d8624f5a532

📥 Commits

Reviewing files that changed from the base of the PR and between 9d61c1b and a48ac94.

📒 Files selected for processing (12)
  • driver-core/pom.xml
  • driver-core/src/main/java/com/datastax/driver/core/Cluster.java
  • driver-core/src/main/java/com/datastax/driver/core/Configuration.java
  • driver-core/src/main/java/com/datastax/driver/core/Connection.java
  • driver-core/src/main/java/com/datastax/driver/core/ControlConnection.java
  • driver-core/src/main/java/com/datastax/driver/core/DefaultDriverConfigReporter.java
  • driver-core/src/main/java/com/datastax/driver/core/DriverConfigReporter.java
  • driver-core/src/main/java/com/datastax/driver/core/NoopDriverConfigReporter.java
  • driver-core/src/test/java/com/datastax/driver/core/DefaultDriverConfigReporterTest.java
  • driver-core/src/test/java/com/datastax/driver/core/DriverConfigReportingCcmTest.java
  • driver-core/src/test/java/com/datastax/driver/core/NoopDriverConfigReporterTest.java
  • pom.xml
💤 Files with no reviewable changes (1)
  • pom.xml

Comment thread driver-core/pom.xml
Comment thread driver-core/src/main/java/com/datastax/driver/core/Cluster.java
Comment thread driver-core/src/main/java/com/datastax/driver/core/Connection.java Outdated
Comment thread driver-core/src/main/java/com/datastax/driver/core/Connection.java Outdated
…stage 1)

Stage 1 (groundwork) of driver configuration reporting for the 3.x
driver -- the 3.x counterpart of the 4.x feature (DRIVER-381/scylladb#967).
Lets the driver report its effective configuration to ScyllaDB at
connection time via new STARTUP options, so operators can inspect
driver settings (system.clients.client_options) while investigating
incidents.

Two STARTUP options are added:

- SESSION_ID: a dedicated, driver-generated UUID sent on every
  connection (control and pool) unconditionally, like DRIVER_NAME and
  DRIVER_VERSION, so the server can group all of a Cluster's
  connections -- including across multiple Sessions obtained from the
  same Cluster, since the control connection has no affiliation with
  any single Session. Independent of the user-settable CLIENT_ID.
- DRIVER_CONFIG: a compact JSON blob describing the effective
  configuration, sent only on the control connection. Stage 1 emits
  only {"version":1}; the full report follows in stage 2 (scylladb#974).
  Enabled by default; opt out with
  Cluster.builder().withDriverConfigReporting(false).

The report is built once, while the Cluster initializes, and the
resulting string is reused for every control connection that Cluster
opens -- it is never rebuilt while the session is in flight. Building
it is fail-safe: any failure is swallowed and simply leaves
DRIVER_CONFIG unset instead of breaking cluster initialization.

New DriverConfigReporter / DefaultDriverConfigReporter (package
com.datastax.driver.core) build the blob. Connection.Factory, of which
there is one per Cluster, holds that Cluster's session id and the built
report, and hands the report to the control connection as a constructor
argument -- null everywhere else, which is what suppresses reporting.
The control connection is identified by threading a reportConfig flag
from ControlConnection.tryConnect through a new
Connection.Factory.open(host, reportConfig) overload, since 3.x has no
pre-existing signal identifying the control connection at STARTUP time.

jackson-core/jackson-databind are enforced as plain required
dependencies (as they already were in released 3.11.5.17), used to
build the JSON blob; the orphaned jackson-dataformat-yaml dependency
(dead since the Scylla Cloud config code was removed) is dropped, so
consumers no longer inherit SnakeYAML.

system.clients.client_options is per node, so DRIVER_CONFIG only
appears on the node holding the control connection.

Fixes DRIVER-382

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@nikagra
nikagra force-pushed the feature/driver-config-reporting-3x branch from a48ac94 to 40b507f Compare July 31, 2026 16:57
dkropachev pushed a commit that referenced this pull request Aug 3, 2026
…rs them

driver-core has no Failsafe plugin binding (only bound in driver-tests/osgi/*),
and Surefire's default includes never match *IT.java, so these CCM integration
tests were silently never executed by `mvn verify -Pshort`/`-Plong`. Renaming to
*Test.java matches Surefire's default discovery pattern, mirroring the fix
already applied to DriverConfigReportingCcmIT in #973.

Renamed: TabletsIT, ZeroTokenNodesIT, LWTLoadBalancingIT, SchemaBuilderIT.

Now that LWTLoadBalancingTest actually runs, it surfaced a real (previously
undetected) bug: both test methods constructed a SimpleStatement with bound
values and then passed it to session.prepare(), which rejects statements
carrying values. Fixed by preparing the value-free statement and binding
values only on the resulting PreparedStatement, as the tests already intended.

All classes verified live against ScyllaDB 2026.1.0: Tablets (3), ZeroTokenNodes
(7), and LWTLoadBalancing (2) tests pass. SchemaBuilderTest's 6 methods remain
pre-existing enabled=false, unrelated to this fix.

Fixes #981.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
@dkropachev
dkropachev merged commit 8ee8349 into scylladb:scylla-3.x Aug 3, 2026
13 checks passed
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.

2 participants