[ 
https://issues.apache.org/jira/browse/CASSANDRA-7301?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Robert Stupp updated CASSANDRA-7301:
------------------------------------

    Description: 
The {{system.schema_columns}} table contains the "denormalized" description of 
the user type its {{validator}} column.

But if the type is changed after a column using that type has been created, the 
column's {{validator}} column still contains the old (and now incorrect) 
description of the user type.

This gets even more complicated if user types are embedded in other user 
types...

{code}
cqlsh:demo> CREATE KEYSPACE demo WITH replication = 
{'class':'SimpleStrategy','replication_factor':1};
cqlsh:demo> CREATE TYPE demo.address ( street varchar, city varchar, country 
varchar);
cqlsh:demo> CREATE TABLE demo.user ( name varchar primary key, main_address 
address);
cqlsh:demo> select * from system.schema_columns where keyspace_name='demo';

 keyspace_name | columnfamily_name | column_name  | component_index | 
index_name | index_options | index_type | type          | validator
---------------+-------------------+--------------+-----------------+------------+---------------+------------+---------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
          demo |              user | main_address |               0 |       
null |          null |       null |       regular | 
org.apache.cassandra.db.marshal.UserType(demo,61646472657373,737472656574:org.apache.cassandra.db.marshal.UTF8Type,63697479:org.apache.cassandra.db.marshal.UTF8Type,636f756e747279:org.apache.cassandra.db.marshal.UTF8Type)
          demo |              user |         name |            null |       
null |          null |       null | partition_key |                             
                                                                                
                                                                         
org.apache.cassandra.db.marshal.UTF8Type

(2 rows)

cqlsh:demo> alter type demo.address add zip_code text;
<ErrorMessage code=0000 [Server error] message="java.lang.RuntimeException: 
java.util.concurrent.ExecutionException: java.lang.AssertionError">
cqlsh:demo> select * from system.schema_columns where keyspace_name='demo';

 keyspace_name | columnfamily_name | column_name  | component_index | 
index_name | index_options | index_type | type          | validator
---------------+-------------------+--------------+-----------------+------------+---------------+------------+---------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
          demo |              user | main_address |               0 |       
null |          null |       null |       regular | 
org.apache.cassandra.db.marshal.UserType(demo,61646472657373,737472656574:org.apache.cassandra.db.marshal.UTF8Type,63697479:org.apache.cassandra.db.marshal.UTF8Type,636f756e747279:org.apache.cassandra.db.marshal.UTF8Type)
          demo |              user |         name |            null |       
null |          null |       null | partition_key |                             
                                                                                
                                                                         
org.apache.cassandra.db.marshal.UTF8Type

(2 rows)

cqlsh:demo> select * from system.schema_usertypes where keyspace_name='demo';

 keyspace_name | type_name | field_names                               | 
field_types
---------------+-----------+-------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
          demo |   address | ['street', 'city', 'country', 'zip_code'] | 
['org.apache.cassandra.db.marshal.UTF8Type', 
'org.apache.cassandra.db.marshal.UTF8Type', 
'org.apache.cassandra.db.marshal.UTF8Type', 
'org.apache.cassandra.db.marshal.UTF8Type']

(1 rows)
{code}

  was:
The {system.schema_columns} table contains the "denormalized" description of 
the user type its {validator} column.

But if the type is changed after a column using that type has been created, the 
column's validator column still contains the old (and now incorrect) 
description of the user type.

This gets even more complicated if user types are embedded in other user 
types...

{code}
cqlsh:demo> CREATE KEYSPACE demo WITH replication = 
{'class':'SimpleStrategy','replication_factor':1};
cqlsh:demo> CREATE TYPE demo.address ( street varchar, city varchar, country 
varchar);
cqlsh:demo> CREATE TABLE demo.user ( name varchar primary key, main_address 
address);
cqlsh:demo> select * from system.schema_columns where keyspace_name='demo';

 keyspace_name | columnfamily_name | column_name  | component_index | 
index_name | index_options | index_type | type          | validator
---------------+-------------------+--------------+-----------------+------------+---------------+------------+---------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
          demo |              user | main_address |               0 |       
null |          null |       null |       regular | 
org.apache.cassandra.db.marshal.UserType(demo,61646472657373,737472656574:org.apache.cassandra.db.marshal.UTF8Type,63697479:org.apache.cassandra.db.marshal.UTF8Type,636f756e747279:org.apache.cassandra.db.marshal.UTF8Type)
          demo |              user |         name |            null |       
null |          null |       null | partition_key |                             
                                                                                
                                                                         
org.apache.cassandra.db.marshal.UTF8Type

(2 rows)

cqlsh:demo> alter type demo.address add zip_code text;
<ErrorMessage code=0000 [Server error] message="java.lang.RuntimeException: 
java.util.concurrent.ExecutionException: java.lang.AssertionError">
cqlsh:demo> select * from system.schema_columns where keyspace_name='demo';

 keyspace_name | columnfamily_name | column_name  | component_index | 
index_name | index_options | index_type | type          | validator
---------------+-------------------+--------------+-----------------+------------+---------------+------------+---------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
          demo |              user | main_address |               0 |       
null |          null |       null |       regular | 
org.apache.cassandra.db.marshal.UserType(demo,61646472657373,737472656574:org.apache.cassandra.db.marshal.UTF8Type,63697479:org.apache.cassandra.db.marshal.UTF8Type,636f756e747279:org.apache.cassandra.db.marshal.UTF8Type)
          demo |              user |         name |            null |       
null |          null |       null | partition_key |                             
                                                                                
                                                                         
org.apache.cassandra.db.marshal.UTF8Type

(2 rows)

cqlsh:demo> select * from system.schema_usertypes where keyspace_name='demo';

 keyspace_name | type_name | field_names                               | 
field_types
---------------+-----------+-------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
          demo |   address | ['street', 'city', 'country', 'zip_code'] | 
['org.apache.cassandra.db.marshal.UTF8Type', 
'org.apache.cassandra.db.marshal.UTF8Type', 
'org.apache.cassandra.db.marshal.UTF8Type', 
'org.apache.cassandra.db.marshal.UTF8Type']

(1 rows)
{code}


> UDT - alter type add field not propagated
> -----------------------------------------
>
>                 Key: CASSANDRA-7301
>                 URL: https://issues.apache.org/jira/browse/CASSANDRA-7301
>             Project: Cassandra
>          Issue Type: Bug
>            Reporter: Robert Stupp
>
> The {{system.schema_columns}} table contains the "denormalized" description 
> of the user type its {{validator}} column.
> But if the type is changed after a column using that type has been created, 
> the column's {{validator}} column still contains the old (and now incorrect) 
> description of the user type.
> This gets even more complicated if user types are embedded in other user 
> types...
> {code}
> cqlsh:demo> CREATE KEYSPACE demo WITH replication = 
> {'class':'SimpleStrategy','replication_factor':1};
> cqlsh:demo> CREATE TYPE demo.address ( street varchar, city varchar, country 
> varchar);
> cqlsh:demo> CREATE TABLE demo.user ( name varchar primary key, main_address 
> address);
> cqlsh:demo> select * from system.schema_columns where keyspace_name='demo';
>  keyspace_name | columnfamily_name | column_name  | component_index | 
> index_name | index_options | index_type | type          | validator
> ---------------+-------------------+--------------+-----------------+------------+---------------+------------+---------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
>           demo |              user | main_address |               0 |       
> null |          null |       null |       regular | 
> org.apache.cassandra.db.marshal.UserType(demo,61646472657373,737472656574:org.apache.cassandra.db.marshal.UTF8Type,63697479:org.apache.cassandra.db.marshal.UTF8Type,636f756e747279:org.apache.cassandra.db.marshal.UTF8Type)
>           demo |              user |         name |            null |       
> null |          null |       null | partition_key |                           
>                                                                               
>                                                                              
> org.apache.cassandra.db.marshal.UTF8Type
> (2 rows)
> cqlsh:demo> alter type demo.address add zip_code text;
> <ErrorMessage code=0000 [Server error] message="java.lang.RuntimeException: 
> java.util.concurrent.ExecutionException: java.lang.AssertionError">
> cqlsh:demo> select * from system.schema_columns where keyspace_name='demo';
>  keyspace_name | columnfamily_name | column_name  | component_index | 
> index_name | index_options | index_type | type          | validator
> ---------------+-------------------+--------------+-----------------+------------+---------------+------------+---------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
>           demo |              user | main_address |               0 |       
> null |          null |       null |       regular | 
> org.apache.cassandra.db.marshal.UserType(demo,61646472657373,737472656574:org.apache.cassandra.db.marshal.UTF8Type,63697479:org.apache.cassandra.db.marshal.UTF8Type,636f756e747279:org.apache.cassandra.db.marshal.UTF8Type)
>           demo |              user |         name |            null |       
> null |          null |       null | partition_key |                           
>                                                                               
>                                                                              
> org.apache.cassandra.db.marshal.UTF8Type
> (2 rows)
> cqlsh:demo> select * from system.schema_usertypes where keyspace_name='demo';
>  keyspace_name | type_name | field_names                               | 
> field_types
> ---------------+-----------+-------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
>           demo |   address | ['street', 'city', 'country', 'zip_code'] | 
> ['org.apache.cassandra.db.marshal.UTF8Type', 
> 'org.apache.cassandra.db.marshal.UTF8Type', 
> 'org.apache.cassandra.db.marshal.UTF8Type', 
> 'org.apache.cassandra.db.marshal.UTF8Type']
> (1 rows)
> {code}



--
This message was sent by Atlassian JIRA
(v6.2#6252)

Reply via email to