You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cassandra.apache.org by "Bianca Stanciu (Jira)" <ji...@apache.org> on 2026/07/22 15:04:00 UTC
[jira] [Commented] (CASSANALYTICS-183) Mixed-case keyspace restore fails with "Keyspace does not exist" when quoteIdentifiers is set
[ https://issues.apache.org/jira/browse/CASSANALYTICS-183?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=18098216#comment-18098216 ]
Bianca Stanciu commented on CASSANALYTICS-183:
----------------------------------------------
[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: commits-unsubscribe@cassandra.apache.org
For additional commands, e-mail: commits-help@cassandra.apache.org