From 8b6d87b86b0134221dd15fb74e96a9a8ee5ff1d9 Mon Sep 17 00:00:00 2001 From: Jonathan Ellis Date: Thu, 6 Feb 2014 10:16:41 -0600 Subject: [PATCH] Fix upgradesstables NPE for non-CF-based indexes patch by Sergio Bossa; reviewed by jbellis for CASSANDRA-6645 --- CHANGES.txt | 2 ++ .../db/index/composites/CompositesSearcher.java | 3 ++- .../cassandra/db/index/keys/KeysSearcher.java | 3 ++- .../apache/cassandra/service/StorageService.java | 14 ++++++++++---- 4 files changed, 16 insertions(+), 6 deletions(-) diff --git a/CHANGES.txt b/CHANGES.txt index cfdd148d0c..4be97f14bf 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -1,6 +1,8 @@ 1.2.16 + * Fix upgradesstables NPE for non-CF-based indexes (CASSANDRA-6645) * Fix partition and range deletes not triggering flush (CASSANDRA-6655) + 1.2.15 * Move handling of migration event source to solve bootstrap race (CASSANDRA-6648) * Make sure compaction throughput value doesn't overflow with int math (CASSANDRA-6647) diff --git a/src/java/org/apache/cassandra/db/index/composites/CompositesSearcher.java b/src/java/org/apache/cassandra/db/index/composites/CompositesSearcher.java index 5ab1df6b7c..3974466218 100644 --- a/src/java/org/apache/cassandra/db/index/composites/CompositesSearcher.java +++ b/src/java/org/apache/cassandra/db/index/composites/CompositesSearcher.java @@ -65,7 +65,7 @@ public class CompositesSearcher extends SecondaryIndexSearcher continue; SecondaryIndex index = indexManager.getIndexForColumn(expression.column_name); - if (index == null || (expression.op != IndexOperator.EQ)) + if (index == null || index.getIndexCfs() == null || (expression.op != IndexOperator.EQ)) continue; int columns = index.getIndexCfs().getMeanColumns(); candidates.put(index, columns); @@ -106,6 +106,7 @@ public class CompositesSearcher extends SecondaryIndexSearcher final IndexExpression primary = highestSelectivityPredicate(filter.getClause()); final SecondaryIndex index = indexManager.getIndexForColumn(primary.column_name); assert index != null; + assert index.getIndexCfs() != null; final DecoratedKey indexKey = index.getIndexKeyFor(primary.value); if (logger.isDebugEnabled()) diff --git a/src/java/org/apache/cassandra/db/index/keys/KeysSearcher.java b/src/java/org/apache/cassandra/db/index/keys/KeysSearcher.java index bed6104917..7e7595b498 100644 --- a/src/java/org/apache/cassandra/db/index/keys/KeysSearcher.java +++ b/src/java/org/apache/cassandra/db/index/keys/KeysSearcher.java @@ -61,7 +61,7 @@ public class KeysSearcher extends SecondaryIndexSearcher continue; SecondaryIndex index = indexManager.getIndexForColumn(expression.column_name); - if (index == null || (expression.op != IndexOperator.EQ)) + if (index == null || index.getIndexCfs() == null || (expression.op != IndexOperator.EQ)) continue; int columns = index.getIndexCfs().getMeanColumns(); candidates.put(index, columns); @@ -102,6 +102,7 @@ public class KeysSearcher extends SecondaryIndexSearcher final IndexExpression primary = highestSelectivityPredicate(filter.getClause()); final SecondaryIndex index = indexManager.getIndexForColumn(primary.column_name); assert index != null; + assert index.getIndexCfs() != null; final DecoratedKey indexKey = index.getIndexKeyFor(primary.value); if (logger.isDebugEnabled()) diff --git a/src/java/org/apache/cassandra/service/StorageService.java b/src/java/org/apache/cassandra/service/StorageService.java index fa4315439d..94dd73d9d7 100644 --- a/src/java/org/apache/cassandra/service/StorageService.java +++ b/src/java/org/apache/cassandra/service/StorageService.java @@ -2314,8 +2314,11 @@ public class StorageService extends NotificationBroadcasterSupport implements IE { for (SecondaryIndex si : cfStore.indexManager.getIndexes()) { - logger.info("adding secondary index {} to operation", si.getIndexName()); - valid.add(si.getIndexCfs()); + if (si.getIndexCfs() != null) + { + logger.info("adding secondary index {} to operation", si.getIndexName()); + valid.add(si.getIndexCfs()); + } } } @@ -2364,8 +2367,11 @@ public class StorageService extends NotificationBroadcasterSupport implements IE { for(SecondaryIndex si : cfStore.indexManager.getIndexes()) { - logger.info("adding secondary index {} to operation", si.getIndexName()); - valid.add(si.getIndexCfs()); + if (si.getIndexCfs() != null) + { + logger.info("adding secondary index {} to operation", si.getIndexName()); + valid.add(si.getIndexCfs()); + } } } }