Bianca Stanciu created CASSSIDECAR-475:
------------------------------------------
Summary: Restore job fails with "Keyspace does not exist" for
keyspaces created with quoted mixed-case names
Key: CASSSIDECAR-475
URL: https://issues.apache.org/jira/browse/CASSSIDECAR-475
Project: Sidecar for Apache Cassandra
Issue Type: Bug
Components: Client
Reporter: Bianca Stanciu
{{== Background ==}}
{{}}
Cassandra CQL allows keyspace names to be defined as quoted identifiers, which
preserves their exact casing (e.g. CREATE KEYSPACE “MyKeyspace”).
The DataStax Java Driver ({*}com.datastax.driver.core.Metadata{*}) stores such
keyspaces with their case-preserved name internally. When querying the Driver’s
Metadata API, the argument must also be quoted for the Driver to perform a
case-sensitive lookup. Without quoting, the Driver treats the argument as a
case-insensitive identifier, normalizes it to
lowercase, and fails to find the keyspace.
== Problem ==
A restore job targeting a keyspace created with a quoted mixed-case name (e.g.
“MyKeyspace”) fails with “Keyspace does not exist” during SSTable range
validation,
even though the keyspace is present in the cluster.
== Root Cause ==
The keyspace name flows through the restore pipeline as a raw unquoted string:
{code:java}
RestoreJob.java:94 → .keyspace(row.getString(“keyspace_name”))
RestoreSlice.java:219 → builder.keyspace(restoreJob.keyspaceName)
RestoreRangeTask.java:484 →
localTokenRangesProvider.localTokenRanges(range.keyspace())
CachedLocalTokenRanges.java:107 → metadata.getKeyspace(keyspace) // no
quoting{code}
The Driver normalizes the raw string to lowercase, finds no match, returns null.
{code:java}
Caused by: java.util.NoSuchElementException: Keyspace does not exist. keyspace:
MyKeyspace
at CachedLocalTokenRanges.localTokenRanges(CachedLocalTokenRanges.java:109)
at LocalTokenRangesProvider.localTokenRanges(LocalTokenRangesProvider.java:39)
at RestoreRangeTask.removeOutOfRangeSSTables(RestoreRangeTask.java:484)
at RestoreRangeTask.validateFilesAction(RestoreRangeTask.java:450)
...{code}
{{== Steps to Reproduce ==}}
1. Create a Cassandra keyspace using a quoted mixed-case identifier:
CREATE KEYSPACE “MyKeyspace” WITH replication = \{...};
CREATE TABLE “MyKeyspace”.“MyTable” (....);
2. Submit a Sidecar restore job targeting keyspace “MyKeyspace”.
3. Observe the restore range task failing during SSTable validation with:
“Keyspace does not exist. keyspace: MyKeyspace”
A patch is ready and a PR can be submitted for review upon ticket approval.
--
This message was sent by Atlassian Jira
(v8.20.10#820010)
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]