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

Lerh Chuan Low commented on CASSANDRA-13346:
--------------------------------------------

This is quite easily reproduced, we just have to create a materialized view and 
try to drop keyspace. 

{code}
CREATE KEYSPACE mvtest WITH REPLICATION = { 'class' : 'SimpleStrategy', 
'replication_factor': 1 };
CREATE TABLE mvtest.tobedropped (
    foo int,
    bar text,
    baz text,
    PRIMARY KEY (foo, bar)
);

CREATE MATERIALIZED VIEW mvtest.explosion AS
    SELECT foo, bar, baz FROM mvtest.tobedropped WHERE
    foo IS NOT NULL AND bar IS NOT NULL AND baz IS NOT NULL
PRIMARY KEY (foo, bar, baz);

INSERT INTO mvtest.tobedropped (foo, bar, baz) VALUES (1, 'baz', 'bokusapp');
INSERT INTO mvtest.tobedropped (foo, bar, baz) VALUES (2, 'baz', 'vitamin');
INSERT INTO mvtest.tobedropped (foo, bar, baz) VALUES (2, 'backgammon', 'gin');

DROP KEYSPACE mvtest;
{code}

As [~Andrew Efimov] mentioned, this seems to be because `ViewLockReadTime` and 
`ViewLockAcquireTime` are both set to null for materialized views (they don't 
make sense for materialized views and was decided to be that way based on 
https://issues.apache.org/jira/browse/CASSANDRA-10323). So the call to 
`Metrics.getMetrics().get(name.getMetricName())` returns null, which throws the 
Exception as the `remove` method does not allow `null` values (For the 
implementation of the set in `allTableMetrics`. I've attached a patch for both 
3.0.X and 3.X since it's a relatively small change - it looks like it's just a 
case of trying to unregister a metric from the registry that doesn't exist so 
we should just ignore it when it's `null` (which is only when it's releasing 
view metrics). I've retested it on my local and it works...Any feedbacks are 
welcome! ([~carlyeks]...?), or guidance on writing tests if necessary (It 
doesn't seem like there are any metrics tests though there are metrics dtests, 
I'll try taking a look at dtests). 

> Failed unregistering mbean during drop keyspace
> -----------------------------------------------
>
>                 Key: CASSANDRA-13346
>                 URL: https://issues.apache.org/jira/browse/CASSANDRA-13346
>             Project: Cassandra
>          Issue Type: Bug
>          Components: Materialized Views
>         Environment: Cassandra 3.9
>            Reporter: Gábor Auth
>            Priority: Minor
>              Labels: lhf
>             Fix For: 3.0.x, 3.11.x
>
>         Attachments: 13346-3.0.X.txt, 13346-3.X.txt
>
>
> All node throw exceptions about materialized views during drop keyspace:
> {code}
> WARN  [MigrationStage:1] 2017-03-16 16:54:25,016 ColumnFamilyStore.java:535 - 
> Failed unregistering mbean: 
> org.apache.cassandra.db:type=Tables,keyspace=test20160810,table=unit_by_account
> java.lang.NullPointerException: null
>         at 
> java.util.concurrent.ConcurrentHashMap.replaceNode(ConcurrentHashMap.java:1106)
>  ~[na:1.8.0_121]
>         at 
> java.util.concurrent.ConcurrentHashMap.remove(ConcurrentHashMap.java:1097) 
> ~[na:1.8.0_121]
>         at 
> java.util.concurrent.ConcurrentHashMap$KeySetView.remove(ConcurrentHashMap.java:4569)
>  ~[na:1.8.0_121]
>         at 
> org.apache.cassandra.metrics.TableMetrics.release(TableMetrics.java:712) 
> ~[apache-cassandra-3.9.0.jar:3.9.0]
>         at 
> org.apache.cassandra.db.ColumnFamilyStore.unregisterMBean(ColumnFamilyStore.java:570)
>  [apache-cassandra-3.9.0.jar:3.9.0]
>         at 
> org.apache.cassandra.db.ColumnFamilyStore.invalidate(ColumnFamilyStore.java:527)
>  [apache-cassandra-3.9.0.jar:3.9.0]
>         at 
> org.apache.cassandra.db.ColumnFamilyStore.invalidate(ColumnFamilyStore.java:517)
>  [apache-cassandra-3.9.0.jar:3.9.0]
>         at org.apache.cassandra.db.Keyspace.unloadCf(Keyspace.java:365) 
> [apache-cassandra-3.9.0.jar:3.9.0]
>         at org.apache.cassandra.db.Keyspace.dropCf(Keyspace.java:358) 
> [apache-cassandra-3.9.0.jar:3.9.0]
>         at org.apache.cassandra.config.Schema.dropView(Schema.java:744) 
> [apache-cassandra-3.9.0.jar:3.9.0]
>         at 
> org.apache.cassandra.schema.SchemaKeyspace.lambda$mergeSchema$373(SchemaKeyspace.java:1287)
>  [apache-cassandra-3.9.0.jar:3.9.0]
>         at java.lang.Iterable.forEach(Iterable.java:75) ~[na:1.8.0_121]
>         at 
> org.apache.cassandra.schema.SchemaKeyspace.mergeSchema(SchemaKeyspace.java:1287)
>  [apache-cassandra-3.9.0.jar:3.9.0]
>         at 
> org.apache.cassandra.schema.SchemaKeyspace.mergeSchemaAndAnnounceVersion(SchemaKeyspace.java:1256)
>  [apache-cassandra-3.9.0.jar:3.9.0]
>         at 
> org.apache.cassandra.db.DefinitionsUpdateVerbHandler$1.runMayThrow(DefinitionsUpdateVerbHandler.java:51)
>  ~[apache-cassandra-3.9.0.jar:3.9.0]
>         at 
> org.apache.cassandra.utils.WrappedRunnable.run(WrappedRunnable.java:28) 
> ~[apache-cassandra-3.9.0.jar:3.9.0]
>         at 
> java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) 
> ~[na:1.8.0_121]
>         at java.util.concurrent.FutureTask.run(FutureTask.java:266) 
> ~[na:1.8.0_121]
>         at 
> java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
>  ~[na:1.8.0_121]
>         at 
> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
>  ~[na:1.8.0_121]
>         at java.lang.Thread.run(Thread.java:745) ~[na:1.8.0_121]
> {code}



--
This message was sent by Atlassian JIRA
(v6.3.15#6346)

Reply via email to