cassandra-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Stefania (JIRA)" <j...@apache.org>
Subject [jira] [Commented] (CASSANDRA-11055) C*2.1 cqlsh DESCRIBE KEYSPACE ( or TABLE ) returns 'NoneType' object has no attribute 'replace'
Date Wed, 11 May 2016 03:56:13 GMT

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

Stefania commented on CASSANDRA-11055:
--------------------------------------

This is the exception stack trace:

{code}
raceback (most recent call last):
  File "/home/stefi/git/cstar/cassandra/bin/cqlsh", line 1010, in onecmd
    self.handle_statement(st, statementtext)
  File "/home/stefi/git/cstar/cassandra/bin/cqlsh", line 1047, in handle_statement
    return custom_handler(parsed)
  File "/home/stefi/git/cstar/cassandra/bin/cqlsh", line 1475, in do_describe
    self.describe_keyspace(ksname)
  File "/home/stefi/git/cstar/cassandra/bin/cqlsh", line 1317, in describe_keyspace
    self.print_recreate_keyspace(self.get_keyspace_meta(ksname), sys.stdout)
  File "/home/stefi/git/cstar/cassandra/bin/cqlsh", line 1277, in print_recreate_keyspace
    out.write(ksdef.export_as_string())
  File "/home/stefi/git/cstar/cassandra/bin/../lib/cassandra-driver-internal-only-2.7.2.zip/cassandra-driver-2.7.2/cassandra/metadata.py",
line 875, in export_as_string
    + [t.export_as_string() for t in self.tables.values()])
  File "/home/stefi/git/cstar/cassandra/bin/../lib/cassandra-driver-internal-only-2.7.2.zip/cassandra-driver-2.7.2/cassandra/metadata.py",
line 1302, in export_as_string
    ret += "\nApproximate structure, for reference:\n(this should not be used to reproduce
this schema)\n\n%s\n*/" % self.all_as_cql()
  File "/home/stefi/git/cstar/cassandra/bin/../lib/cassandra-driver-internal-only-2.7.2.zip/cassandra-driver-2.7.2/cassandra/metadata.py",
line 1309, in all_as_cql
    ret = self.as_cql_query(formatted=True)
  File "/home/stefi/git/cstar/cassandra/bin/../lib/cassandra-driver-internal-only-2.7.2.zip/cassandra-driver-2.7.2/cassandra/metadata.py",
line 1340, in as_cql_query
    columns.append("%s %s%s" % (protect_name(col.name), col.typestring, ' static' if col.is_static
else ''))
  File "/home/stefi/git/cstar/cassandra/bin/../lib/cassandra-driver-internal-only-2.7.2.zip/cassandra-driver-2.7.2/cassandra/metadata.py",
line 1430, in protect_name
    return maybe_escape_name(name)
  File "/home/stefi/git/cstar/cassandra/bin/../lib/cassandra-driver-internal-only-2.7.2.zip/cassandra-driver-2.7.2/cassandra/metadata.py",
line 1459, in maybe_escape_name
    return escape_name(name)
  File "/home/stefi/git/cstar/cassandra/bin/../lib/cassandra-driver-internal-only-2.7.2.zip/cassandra-driver-2.7.2/cassandra/metadata.py",
line 1463, in escape_name
    return '"%s"' % (name.replace('"', '""'),)
AttributeError: 'NoneType' object has no attribute 'replace'
{code}

It is caused by {{ColumnMetadata}} instances where the name is set to {{None}}. I've attached
[^data.tar.gz], it contains a data directory with a CF that was generated in 1.2.9 following
the instructions in the description and it can be used to reproduce the problem in 2.1 HEAD.

[~aholmber]: the problem is in {{_build_table_metadata()}}, see patch attached ([^11055-driver-2.7.2.patch]).
In the absence of column aliases, we pick up an array set to {{\[None, None\]}} from {{comparator.fieldnames}}.
I've fixed it so that it gets the column names from the clustering rows but you may want to
check the contents of {{comparator.fieldnames}} before using it. Also, when processing the
normal columns, {{cf_col_rows}}, shouldn't we skip clustering and partition columns?

*The exception does not happen in 2.2 HEAD*, so I am not sure how much of this patch is required
in the latest driver version.

Due to the API changes in the 3.0+ driver, I would prefer to apply this patch to the 2.7.2
branch rather than upgrade the bundled driver in 2.1 to 3.0, is this OK [~aholmber]? 

> C*2.1 cqlsh DESCRIBE KEYSPACE ( or TABLE ) returns 'NoneType' object has no attribute
'replace'
> -----------------------------------------------------------------------------------------------
>
>                 Key: CASSANDRA-11055
>                 URL: https://issues.apache.org/jira/browse/CASSANDRA-11055
>             Project: Cassandra
>          Issue Type: Bug
>            Reporter: Simon Ashley
>            Assignee: Stefania
>              Labels: cqlsh
>             Fix For: 2.1.x
>
>         Attachments: 11055-driver-2.7.2.patch, data.tar.gz
>
>
> C* 2.1 cqlsh DESCRIBE KEYSPACE ( or TABLE ) returns:
>  'NoneType' object has no attribute 'replace' 
> for thrift CF's originally created in C* 1.2.
> Repro:
> 1. Create cf in cassandra-cli on C* 1.2.x  (1.2.9 was used here)
> [default@ks1] CREATE COLUMN FAMILY t1
> ...	WITH column_type='Standard'
> ...	AND comparator='CompositeType(org.apache.cassandra.db.marshal.UTF8Type,org.apache.cassandra.db.marshal.UTF8Type)'
> ...	AND default_validation_class='UTF8Type'
> ...	AND key_validation_class='UTF8Type'
> ...	AND read_repair_chance=0.1
> ...	AND dclocal_read_repair_chance=0.0
> ...	AND gc_grace=864000
> ...	AND min_compaction_threshold=4
> ...	AND max_compaction_threshold=32
> ...	AND replicate_on_write=true
> ...	AND compaction_strategy='LeveledCompactionStrategy' AND compaction_strategy_options={sstable_size_in_mb:
32}
> ...	AND caching='KEYS_ONLY'
> ...	AND compression_options={sstable_compression:SnappyCompressor, chunk_length_kb:64};
> qlsh> describe keyspace ks1;
> CREATE KEYSPACE ks1 WITH replication = {
>   'class': 'NetworkTopologyStrategy',
>   'datacenter1': '1'
> };
> USE ks1;
> CREATE TABLE t1 (
>   key text,
>   column1 text,
>   column2 text,
>   value text,
>   PRIMARY KEY (key, column1, column2)
> ) WITH COMPACT STORAGE AND
>   bloom_filter_fp_chance=0.100000 AND
>   caching='KEYS_ONLY' AND
>   comment='' AND
>   dclocal_read_repair_chance=0.000000 AND
>   gc_grace_seconds=864000 AND
>   read_repair_chance=0.100000 AND
>   replicate_on_write='true' AND
>   populate_io_cache_on_flush='false' AND
>   compaction={'sstable_size_in_mb': '32', 'class': 'LeveledCompactionStrategy'} AND
>   compression={'chunk_length_kb': '64', 'sstable_compression': 'SnappyCompressor'};
> cqlsh> select keyspace_name, columnfamily_name,column_aliases,key_aliases from system.schema_columnfamilies
where keyspace_name= 'ks1';
>  keyspace_name | columnfamily_name | column_aliases | key_aliases
> ---------------+-------------------+----------------+-------------
>            ks1 |                t1 |             [] |          []
> 2/ Upgrade -> C* 2.0.9 -> nodetool upgradesstables -a
> At this stage , DESCRIBE in cqlsh is working
> 3/ Upgrade -> C* 2.1.12 -> nodetool upgradesstables -a
> DESCRIBE now fails:
> cqlsh> describe table ks1.t1;
> 'NoneType' object has no attribute 'replace'
> cqlsh> describe keyspace ks1;
> 'NoneType' object has no attribute 'replace'
> You can workaround by manually updating system.schema_columnfamilies
>  UPDATE system.schema_columnfamilies SET column_aliases ='["column1","column2"]' WHERE
keyspace_name = 'ks1' AND columnfamily_name = 't1';
> Once you exit and restart cqlsh, DESCRIBE is not working as per C* 1.2
> cqlsh> describe keyspace ks1;
> CREATE KEYSPACE ks1 WITH replication = {'class': 'NetworkTopologyStrategy', 'datacenter1':
'1'}  AND durable_writes = true;
> CREATE TABLE ks1.t1 (
>     key text,
>     column1 text,
>     column2 text,
>     value text,
>     PRIMARY KEY (key, column1, column2)
> ) WITH COMPACT STORAGE
>     AND CLUSTERING ORDER BY (column1 ASC, column2 ASC)
>     AND caching = '{"keys":"ALL", "rows_per_partition":"NONE"}'
>     AND comment = ''
>     AND compaction = {'sstable_size_in_mb': '32', 'class': 'org.apache.cassandra.db.compaction.LeveledCompactionStrategy'}
>     AND compression = {'chunk_length_kb': '64', 'sstable_compression': 'org.apache.cassandra.io.compress.SnappyCompressor'}
>     AND dclocal_read_repair_chance = 0.0
>     AND default_time_to_live = 0
>     AND gc_grace_seconds = 864000
>     AND max_index_interval = 2048
>     AND memtable_flush_period_in_ms = 0
>     AND min_index_interval = 128
>     AND read_repair_chance = 0.1
>     AND speculative_retry = '99.0PERCENTILE';



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

Mime
View raw message