[
https://issues.apache.org/jira/browse/CASSANALYTICS-183?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Bianca Stanciu updated CASSANALYTICS-183:
-----------------------------------------
Status: Awaiting Feedback (was: Triage Needed)
Waiting for review on [https://github.com/apache/cassandra-analytics/pull/226]
> Mixed-case keyspace restore fails with "Keyspace does not exist" when
> quoteIdentifiers is set
> ---------------------------------------------------------------------------------------------
>
> Key: CASSANALYTICS-183
> URL: https://issues.apache.org/jira/browse/CASSANALYTICS-183
> Project: Apache Cassandra Analytics
> Issue Type: Improvement
> Components: Writer
> Reporter: Bianca Stanciu
> Assignee: Bianca Stanciu
> Priority: Normal
> Time Spent: 10m
> Remaining Estimate: 0h
>
> +_*Problem*_+
> When a Cassandra keyspace or table is created with CQL double-quotes
> {*}(e.g. CREATE KEYSPACE "MyKeyspace"){*}, the name is case-sensitive and
> stored as-is internally. The QualifiedTableName class holds the raw name
> without quote context. All Sidecar REST API calls in
> *CloudStorageDataTransferApiImpl* and
> *CoordinatedCloudStorageDataTransferApi* were passing the unquoted name
> (MyKeyspace) in the HTTP request payload.
> On the Sidecar side, that raw name is passed to the DataStax driver's
> {*}Metadata.getKeyspace(){*}, which case-folds it to {_}*mykeyspace*{_}, a
> name that does not exist in the cluster. The restore job then fails with:
> *▎ Keyspace does not exist: MyKeyspace*
> +_*Root Cause*_+
> *CloudStorageDataTransferApiImpl* (and its coordinated variant) called
> *qualifiedTableName.keyspace() / qualifiedTableName.table()* directly when
> building API requests. These return the raw stored name with no CQL quoting
> applied, regardless of whether quoteIdentifiers was set by the caller.
> +_*Solution*_+
> Added *maybeQuotedKeyspace()* and *maybeQuotedTable()* convenience methods
> to {*}QualifiedTableName{*}. These wrap the existing *maybeQuote()* helper
> and return the name surrounded by CQL double-quotes when
> {_}*quoteIdentifiers=true*{_}, or the plain name otherwise.
> All restore job API call sites in *CloudStorageDataTransferApiImpl* and
> *CoordinatedCloudStorageDataTransferApi* will be updated to use these methods:
> - createRestoreJob
> - restoreJobSummary
> - updateRestoreJob
> - abortRestoreJob
> - CreateRestoreJobSliceRequest (both direct and coordinated)
> - RestoreJobProgressRequestParams
>
> *Dependencies*
> This change ensures the correct quoted name is sent in the request;
> CASSSIDECAR-475 ensures Sidecar resolves it correctly on lookup.
--
This message was sent by Atlassian Jira
(v8.20.10#820010)
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]