[
https://issues.apache.org/jira/browse/CASSANDRA-10857?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16209348#comment-16209348
]
Sylvain Lebresne commented on CASSANDRA-10857:
----------------------------------------------
I definitively like the approach of the patch, and it looks largely good.
As we discussed offline, we should test 2ndary indexes. Other than that, I have
a few smaller remarks/nits that I'm going to list below, but I took the liberty
to push 3 commits
[here|https://github.com/pcmanus/cassandra/commits/10857-review] fixing those
to move faster. Feel free to push back on some of it, but here's what those
commit do:
* The first commit has various nits, including some around making language a
bit more consistent. It also toy around the {{validateColumnFamily}} a bit: I
figured that since we were calling it most of the time with the thrid parameter
being {{false}}, we could have an override without that third argument. Then it
occured to me that moving those methods back to {{ThriftValidation}} would
remove quite a bit from the diff of this ticket, which made it easier to review
so I did that. If you care about those methods being in {{Schema}}, I can move
them back again, and I agree on principle that {{Schema}} is a better home for
them, but it's all fixed in trunk and 3.x branches are in maintenance mode, so
felt like minimizing code moved around was a decent idea; ¯\_(ツ)_/¯.
* In the parser, I was a bit worried about allowing empty strings in
{{QUOTED_NAME}} directly, because that is used in very many places and it felt
hard/error prone to check all impacted places (and I think some places were
missing in the patch; typically, I don't think we should let user add column
with empty names but it doesn't seem ALTER TABLE was preventing that). I
suggest lowering that risk by limiting the places where we do allow this
directly in the parser. Thanksfully, that's reasonably easy because the parser
already had the {{cident}}, which is used in place where we could get a
thrift-created column name (as those required a special handling), and it's
exactly the same places we want to support here. This is the 2nd commit.
* The patch mentions in a number of places that schema changes were not allowed
in the no-compact mode, which sounds fine, but I didn't find the place where
that was enforced. So I added it in {{SchemaAlteringStatement}} directly (and
I've let changes on keyspaces/non compact tables go because no real reason to
refuse them). That's the third commit.
The last (but not least) remark is around the {{NEWS.txt}} changes. First, as
it's in the section for 3.0.15, I'm not sure having details there is the best
place. Second, some of it will be confusing to users because things like
"sparse/dense" and "compact value columns" are stuffs we use internally but
aren't something users know about. We can rephrase to make it
user-understandable, but that will expand the whole section, and back to the
first point: not the right place for that.
Tl;dr, what I think we should do is shrink that {{NEWS.txt}} section (just say
we've added DROP COMPACT STORAGE and a new mode to make transitions easier) and
link to a proper documentation section (to be written). I'll note that the new
doc isn't in 3.0 so I the new section will have to be added to a 3.11 patch,
but it doesn't feel like a big deal to have the 3.0 news file point to the 3.11
documentation.
> Allow dropping COMPACT STORAGE flag from tables in 3.X
> ------------------------------------------------------
>
> Key: CASSANDRA-10857
> URL: https://issues.apache.org/jira/browse/CASSANDRA-10857
> Project: Cassandra
> Issue Type: Improvement
> Components: CQL, Distributed Metadata
> Reporter: Aleksey Yeschenko
> Assignee: Alex Petrov
> Priority: Blocker
> Fix For: 3.0.x, 3.11.x
>
>
> Thrift allows users to define flexible mixed column families - where certain
> columns would have explicitly pre-defined names, potentially non-default
> validation types, and be indexed.
> Example:
> {code}
> create column family foo
> and default_validation_class = UTF8Type
> and column_metadata = [
> {column_name: bar, validation_class: Int32Type, index_type: KEYS},
> {column_name: baz, validation_class: UUIDType, index_type: KEYS}
> ];
> {code}
> Columns named {{bar}} and {{baz}} will be validated as {{Int32Type}} and
> {{UUIDType}}, respectively, and be indexed. Columns with any other name will
> be validated by {{UTF8Type}} and will not be indexed.
> With CASSANDRA-8099, {{bar}} and {{baz}} would be mapped to static columns
> internally. However, being {{WITH COMPACT STORAGE}}, the table will only
> expose {{bar}} and {{baz}} columns. Accessing any dynamic columns (any column
> not named {{bar}} and {{baz}}) right now requires going through Thrift.
> This is blocking Thrift -> CQL migration for users who have mixed
> dynamic/static column families. That said, it *shouldn't* be hard to allow
> users to drop the {{compact}} flag to expose the table as it is internally
> now, and be able to access all columns.
--
This message was sent by Atlassian JIRA
(v6.4.14#64029)
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]