[ 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)