cassandra-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Benjamin Lerer (JIRA)" <j...@apache.org>
Subject [jira] [Commented] (CASSANDRA-7423) Allow updating individual subfields of UDT
Date Tue, 05 Apr 2016 10:24:26 GMT

    [ https://issues.apache.org/jira/browse/CASSANDRA-7423?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15226037#comment-15226037
] 

Benjamin Lerer commented on CASSANDRA-7423:
-------------------------------------------

The patch seems pretty good. :-)

The 2 missing things are the CQL documentation and the CQLSH auto completion for field update/deletion.

Otherwise, I have found the following nits:
* In {{AbstractMarker}} and {{FunctionCall}} the {{else}} are not needed as all the if end
with return statements.
* It seems to me that the signature of {{Operation.RawUpdate::prepare}} method could be improved
by removing the keyspace name (it can be retrieved from cfm.ksName) and making cfm the first
parameter.
* In {{AbstractFunction}} and {{Selector}} I think that {{receiver.type.isFrozenCollection()
|| (receiver.type.isUDT() && !receiver.type.isMultiCell())}} should be changed.
In my opinion, we could add a {{isFreezable}} method to {{AbstractType}} ({{receiver.type.isFreezable()
&& !receiver.type.isMultiCell()}}) or use a {{isFrozenUDT}} method. 
* In the {{TulpeType}} constructor it seems that the code:
{code}
for (int i = 0; i < types.size(); i++)
{
    AbstractType<?> type = types.get(i);
    if (freezeInner)
        type = type.freeze();
    types.set(i, type);
}
{code}
could be written:
{code}
if (freezeInner)
    types.forEach(AbstractType::freeze);
{code}
* In {{CollectionType::serializeForNativeProtocol}} the def parameter is not used and can
be removed (it was there before the patch).
* It might make sense to pass the protocol version to the {{UDType::serializeForNativeProtocol}}
like for {{CollectionType::serializeForNativeProtocol}} even if it is not used for the moment.

* I like a lot the {{beforeAndAfterFlush}} method used in {{UserTypesTest}}. Could you put
in {{CQLTester}} instead? There is several places where I would like to use it. :-)

> Allow updating individual subfields of UDT
> ------------------------------------------
>
>                 Key: CASSANDRA-7423
>                 URL: https://issues.apache.org/jira/browse/CASSANDRA-7423
>             Project: Cassandra
>          Issue Type: Improvement
>          Components: CQL
>            Reporter: Tupshin Harper
>            Assignee: Tyler Hobbs
>              Labels: client-impacting, cql, docs-impacting
>             Fix For: 3.x
>
>
> Since user defined types were implemented in CASSANDRA-5590 as blobs (you have to rewrite
the entire type in order to make any modifications), they can't be safely used without LWT
for any operation that wants to modify a subset of the UDT's fields by any client process
that is not authoritative for the entire blob. 
> When trying to use UDTs to model complex records (particularly with nesting), this is
not an exceptional circumstance, this is the totally expected normal situation. 
> The use of UDTs for anything non-trivial is harmful to either performance or consistency
or both.
> edit: to clarify, i believe that most potential uses of UDTs should be considered anti-patterns
until/unless we have field-level r/w access to individual elements of the UDT, with individual
timestamps and standard LWW semantics



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Mime
View raw message