apache/cassandra · warning
Connection with unset driver id was detected.
Error message
Connection with unset driver id was detected.
What it means
ClientDriverVersionGuardrail.guard emits this warning when a client connects without setting a driver id (driverName/driverVersion unset) and a guardrail warning configuration covers the 'unset' case. Cassandra tracks driver metadata from the connection's OPTIONS; without it the server cannot evaluate driver version policies for that client.
Solutions
- Upgrade or configure the client driver to send its identity (most DataStax/java drivers do by default); ensure driver name and version are populated in connection options.
- If the client intentionally reports nothing, either upgrade it or acknowledge the warning as expected.
- Adjust the guardrail config (cassandra.yaml / ALTER GUARDRAILS) if warning on unset ids is too noisy for your environment.
- Identify the offending client via ClientState / nodetool clientlist and map it to its connection source.
Defensive patterns
Strategy: validation
Validate before calling
// client-side: ensure driver identity is sent
// java driver: identity is automatic; for raw clients ensure OPTIONS includes DRIVER_NAME/DRIVER_VERSION
if (driverName == null || driverVersion == null) {
configureDriverIdentity("my-app-driver", "1.2.3");
} Prevention
- Use mainstream drivers that report name/version by default.
- Set explicit driver name/version in custom clients' connection options.
- Inventory cluster clients via nodetool clientlist to find un-identified connections.
- Tune the client_driver_version guardrail if unset-id warnings are expected noise.
When it happens
Trigger: A CQL client library (or an old/uncommon driver) does not send the driver name/version in connection options; custom or hand-rolled clients connecting via native protocol; the guardrail client_driver_version has warn thresholds including 'unset' and warned.containsKey("unset") is true.
Common situations: Homegrown clients, old driver versions that don't report identity, monitoring/proxy tools connecting raw CQL, scripts using minimal CQL implementations against a cluster with the driver-version guardrail enabled.
Understand the failure class
Background: "missing required argument" and "the following required arguments were not provided": what required-argument errors mean and how to fix them — this error's family across 20 libraries.
Related errors
- Detected unknown driver id
- Client driver , version is below recommended minimum version
- Cannot alter gc_grace_seconds of a materialized view to 0…
- <dynamic warning, no literal in source: built by…
- Forbidden default_time_to_live detected for a materialized…
AI-assisted analysis of apache/cassandra@88fd0f6a0e (2026-09-10).
Data as JSON: /api/errors/976ba00a01d14f63.
Report an issue: GitHub.
Appendix: source
Thrown at src/java/org/apache/cassandra/db/guardrails/ClientDriverVersionGuardrail.java:80
if (!enabled(state))
return;
Map<String, String> disallowed = disallowVersions.apply(state);
Map<String, String> warned = warnVersions.apply(state);
String sanitizedDriverId = driverName == null ? null : driverName.trim();
if (sanitizedDriverId == null || sanitizedDriverId.isBlank())
{
logger.debug("minimum_client_driver_versions guardrail identified empty driver id to check the minimum version of");
if (disallowed != null && disallowed.containsKey("unset"))
{
fail("Connections with unset driver id's are forbidden.", state);
return;
}
if (warned != null && warned.containsKey("unset"))
{
warn("Connection with unset driver id was detected.");
}
return;
}
String sanitizedDriverVersion = GuardrailsOptions.sanitizeVersion(driverVersion);
if (sanitizedDriverVersion == null)
{
sanitizedDriverVersion = "unset";
logger.debug("minimum_client_driver_versions guardrail identified empty driver version to check the minimum version of");
}
else if (!GuardrailsOptions.isValidVersion(sanitizedDriverVersion))
{
logger.debug("minimum_client_driver_versions guardrail identified driver version which is not compliant semver version");
return;
}
if (disallowed != null && !disallowed.isEmpty())
{View on GitHub (pinned to 88fd0f6a0e)