Skip to content

AxonOps — AI-Native Control Plane for Open Source Data Platforms

nodetool disableoldprotocolversions

Disables support for older CQL native protocol versions, requiring clients to use modern protocol versions.


Terminal window
nodetool [connection_options] disableoldprotocolversions

See connection options for connection options.

nodetool disableoldprotocolversions disables support for older CQL native protocol versions on the node. When executed, clients using protocol versions older than the current default will be rejected, requiring them to upgrade to a supported version.

The CQL native protocol has evolved through several versions, each adding features and improvements:

Protocol VersionCassandra VersionKey Features
V32.1+User-defined types, tuples, pagination
V42.2+Custom payloads, warnings, timestamps
V54.0+Improved metadata, duration type, per-query keyspace
V65.0+Tablets, vector type support

When old protocol versions are disabled, typically V3 and V4 are blocked, requiring clients to use V5 or later.

Non-Persistent Setting

This setting is applied at runtime only and does not persist across node restarts. After a restart, support for older protocol versions is re-enabled by default.

To permanently disable old protocol versions, configure the native_transport_allow_older_protocols setting in cassandra.yaml:

native_transport_allow_older_protocols: false

When old protocol versions are disabled:

  1. New client connections using old protocol versions are rejected
  2. Existing connections using old protocols may continue until disconnected
  3. Clients receive a protocol error indicating the version is not supported
  4. Clients configured with protocol negotiation will attempt to use a newer version
Client ActionResult
New connection with V3Rejected
New connection with V4Rejected (typically)
New connection with V5+Accepted
Existing V3/V4 connectionMay continue until disconnect

Clients attempting to connect with old protocol versions will see errors similar to:

Protocol version V3 is not supported by this server

Or driver-specific errors like:

com.datastax.driver.core.exceptions.UnsupportedProtocolVersionException:
Host /192.168.1.100:9042 does not support protocol version V3

This command takes no arguments.


Terminal window
nodetool disableoldprotocolversions
Terminal window
# Check which clients are connected with which protocol versions
nodetool clientstats
Terminal window
# 1. Check current client protocol versions
nodetool clientstats | grep -i protocol
# 2. If all clients support V5+, disable old versions
nodetool disableoldprotocolversions
# 3. Monitor for connection errors
tail -f /var/log/cassandra/system.log | grep -i protocol

Older protocol versions may have security limitations. Disabling them enforces use of protocols with better security features:

Terminal window
# Part of security hardening procedure
nodetool disableoldprotocolversions

Once all application clients have been upgraded to use modern drivers:

Terminal window
# Verify all clients use V5+
nodetool clientstats
# Disable old versions
nodetool disableoldprotocolversions

Some security standards require disabling legacy protocols:

Terminal window
# For PCI-DSS, SOC2, or internal security policies
nodetool disableoldprotocolversions

To ensure clients use features only available in newer protocols:

Terminal window
# Require V5+ for duration type support, per-query keyspace, etc.
nodetool disableoldprotocolversions

Client Compatibility

Do not disable old protocol versions if any clients require them:

  • Legacy application drivers that cannot be upgraded
  • Third-party tools using older protocol versions
  • ETL processes with outdated Cassandra drivers

Disabling will cause these clients to fail immediately.

Avoid changing protocol settings during cluster or client upgrades:

Terminal window
# Wait until all clients are confirmed upgraded
# Then disable old versions

Always test in non-production first to identify affected clients.


Before disabling, audit all connected clients:

Terminal window
# List all client connections and their protocol versions
nodetool clientstats

Example output:

Address SSL Protocol User Keyspace Requests
192.168.1.50 true V5 app_user my_ks 15234
192.168.1.51 true V5 app_user my_ks 12456
192.168.1.52 false V4 etl_user analytics 3421 # <-- Old version!
Terminal window
# Find clients using old protocols
nodetool clientstats | grep -E "V3|V4"

Common drivers and their protocol support:

DriverMinimum Version for V5
DataStax Java Driver4.0+
DataStax Python Driver3.25+
GoCQL1.0+
DataStax C++ Driver2.15+
DataStax Node.js Driver4.0+

AspectImpact
New V3/V4 connectionsRejected
Existing V3/V4 connectionsMay continue temporarily
V5+ connectionsUnaffected
Client errorsImmediate for blocked versions
ScenarioResult
Modern driver (V5+)No impact
Legacy driver (V3/V4)Connection failures
Driver with negotiationFalls back to newer version if supported
Mixed client environmentSome clients fail

For complete enforcement, disable on all nodes:

disable_old_protocols_cluster.sh
#!/bin/bash
echo "Disabling old protocol versions cluster-wide..."# Get list of node IPs from local nodetool status
nodes=$(nodetool status | grep "^UN" | awk '{print $2}')
for node in $nodes; do
echo -n "$node: "
ssh "$node" "nodetool disableoldprotocolversions 2>/dev/null && echo "disabled" || echo "FAILED""
done
echo ""
echo "Old protocol versions disabled on all nodes."
echo "Remember: This setting does not persist across restarts."
echo "Update cassandra.yaml to make permanent."
check_protocol_status.sh
#!/bin/bash
echo "Checking protocol version status across cluster..."# Get list of node IPs from local nodetool status
nodes=$(nodetool status | grep "^UN" | awk '{print $2}')
for node in $nodes; do
echo "=== $node ==="
ssh "$node" "nodetool clientstats 2>/dev/null | head -10"
echo ""
done

If clients experience issues after disabling:

Terminal window
# Re-enable old protocol versions
nodetool enableoldprotocolversions
# Verify clients can connect
nodetool clientstats

Terminal window
# Monitor logs for protocol errors
tail -f /var/log/cassandra/system.log | grep -i "protocol version"
Terminal window
# Continuous monitoring of client protocols
watch -n 30 'nodetool clientstats | grep -E "Protocol|V[0-9]"'
alert_old_protocols.sh
#!/bin/bash
old_clients=$(nodetool clientstats 2>/dev/null | grep -cE "V3|V4")
if [ "$old_clients" -gt 0 ]; then
echo "WARNING: $old_clients clients using old protocol versions"
nodetool clientstats | grep -E "V3|V4"
fi

Terminal window
# 1. Check if old protocols are the issue
nodetool enableoldprotocolversions
# 2. Verify client can connect
nodetool clientstats | grep <client_ip>
# 3. Identify protocol version
nodetool clientstats | grep <client_ip> | awk '{print $3}'
# 4. Upgrade client driver if using old protocol

Cannot Identify Which Clients Use Old Protocols

Section titled “Cannot Identify Which Clients Use Old Protocols”
Terminal window
# Get detailed client information
nodetool clientstats
# Cross-reference with application deployment records
# Check load balancer logs for source IPs
Terminal window
# Verify command executed
nodetool clientstats
# Check if already disabled
# Try on specific node
ssh <node_ip> "nodetool disableoldprotocolversions"
# Check JMX connectivity
nodetool info

  1. Audit Phase

    Terminal window
    # Document all clients and their protocol versions
    nodetool clientstats > client_audit_$(date +%Y%m%d).txt
  2. Notification Phase

    • Identify owners of legacy clients
    • Set upgrade deadline
    • Provide driver upgrade guidance
  3. Testing Phase

    Terminal window
    # Test in non-production
    nodetool disableoldprotocolversions
    # Run integration tests
  4. Production Phase

    Terminal window
    # Disable during maintenance window
    nodetool disableoldprotocolversions
    # Monitor for issues
  5. Persistence Phase

    # Update cassandra.yaml
    native_transport_allow_older_protocols: false

Guidelines

  1. Audit first - Identify all clients before disabling
  2. Communicate - Notify application teams of the change
  3. Test thoroughly - Validate in non-production environments
  4. Phase the rollout - Consider node-by-node or DC-by-DC
  5. Monitor actively - Watch for connection failures
  6. Have rollback ready - Know how to re-enable quickly
  7. Make persistent - Update cassandra.yaml after validation
  8. Document - Record which clients were upgraded and when

Avoid

  • Disabling without client audit
  • Disabling during peak traffic
  • Forgetting to make the change persistent
  • Ignoring client upgrade requirements

CommandRelationship
enableoldprotocolversionsRe-enable old protocol versions
clientstatsView client connections and protocol versions
statusCheck cluster health