merge from 1.2
Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/0b6913ee Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/0b6913ee Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/0b6913ee Branch: refs/heads/trunk Commit: 0b6913ee0607e1392c5d743d2f896dcdd138fe40 Parents: 43e6e18 8b6d87b Author: Jonathan Ellis <jbel...@apache.org> Authored: Thu Feb 6 10:17:57 2014 -0600 Committer: Jonathan Ellis <jbel...@apache.org> Committed: Thu Feb 6 10:17:57 2014 -0600 ---------------------------------------------------------------------- CHANGES.txt | 1 + .../cassandra/db/index/SecondaryIndexSearcher.java | 2 +- .../db/index/composites/CompositesSearcher.java | 1 + .../apache/cassandra/db/index/keys/KeysSearcher.java | 1 + .../org/apache/cassandra/service/StorageService.java | 12 ++++++++---- 5 files changed, 12 insertions(+), 5 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/cassandra/blob/0b6913ee/CHANGES.txt ---------------------------------------------------------------------- diff --cc CHANGES.txt index dfbe5c6,4be97f1..94c89cb --- a/CHANGES.txt +++ b/CHANGES.txt @@@ -1,8 -1,5 +1,9 @@@ -1.2.16 +2.0.6 + * Improve nodetool cfhistograms formatting (CASSANDRA-6360) + * Expose bulk loading progress over JMX (CASSANDRA-4757) + * Correctly handle null with IF conditions and TTL (CASSANDRA-6623) +Merged from 1.2: + * Fix upgradesstables NPE for non-CF-based indexes (CASSANDRA-6645) * Fix partition and range deletes not triggering flush (CASSANDRA-6655) http://git-wip-us.apache.org/repos/asf/cassandra/blob/0b6913ee/src/java/org/apache/cassandra/db/index/SecondaryIndexSearcher.java ---------------------------------------------------------------------- diff --cc src/java/org/apache/cassandra/db/index/SecondaryIndexSearcher.java index f3e993d,a8c1dde..e93efd1 --- a/src/java/org/apache/cassandra/db/index/SecondaryIndexSearcher.java +++ b/src/java/org/apache/cassandra/db/index/SecondaryIndexSearcher.java @@@ -45,41 -43,15 +45,41 @@@ public abstract class SecondaryIndexSea /** * @return true this index is able to handle given clauses. */ - public abstract boolean isIndexing(List<IndexExpression> clause); - - protected boolean isIndexValueStale(ColumnFamily liveData, ByteBuffer indexedColumnName, ByteBuffer indexedValue) + public boolean isIndexing(List<IndexExpression> clause) { - IColumn liveColumn = liveData.getColumn(indexedColumnName); - if (liveColumn == null || liveColumn.isMarkedForDelete()) - return true; - - ByteBuffer liveValue = liveColumn.value(); - return 0 != liveData.metadata().getValueValidator(indexedColumnName).compare(indexedValue, liveValue); + return highestSelectivityPredicate(clause) != null; + } + + protected IndexExpression highestSelectivityPredicate(List<IndexExpression> clause) + { + IndexExpression best = null; + int bestMeanCount = Integer.MAX_VALUE; + Map<SecondaryIndex, Integer> candidates = new HashMap<>(); + + for (IndexExpression expression : clause) + { + // skip columns belonging to a different index type + if (!columns.contains(expression.column_name)) + 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); + if (columns < bestMeanCount) + { + best = expression; + bestMeanCount = columns; + } + } + + if (best == null) + Tracing.trace("No applicable indexes found"); + else + Tracing.trace("Candidate index mean cardinalities are {}. Scanning with {}.", + FBUtilities.toString(candidates), indexManager.getIndexForColumn(best.column_name).getIndexName()); + + return best; } } http://git-wip-us.apache.org/repos/asf/cassandra/blob/0b6913ee/src/java/org/apache/cassandra/db/index/composites/CompositesSearcher.java ---------------------------------------------------------------------- diff --cc src/java/org/apache/cassandra/db/index/composites/CompositesSearcher.java index aa35605,3974466..90e7089 --- a/src/java/org/apache/cassandra/db/index/composites/CompositesSearcher.java +++ b/src/java/org/apache/cassandra/db/index/composites/CompositesSearcher.java @@@ -78,8 -104,9 +78,9 @@@ public class CompositesSearcher extend // to each row matching that clause. // TODO: allow merge join instead of just one index + loop final IndexExpression primary = highestSelectivityPredicate(filter.getClause()); - final SecondaryIndex index = indexManager.getIndexForColumn(primary.column_name); + final CompositesIndex index = (CompositesIndex)indexManager.getIndexForColumn(primary.column_name); assert index != null; + assert index.getIndexCfs() != null; final DecoratedKey indexKey = index.getIndexKeyFor(primary.value); if (logger.isDebugEnabled()) http://git-wip-us.apache.org/repos/asf/cassandra/blob/0b6913ee/src/java/org/apache/cassandra/db/index/keys/KeysSearcher.java ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/cassandra/blob/0b6913ee/src/java/org/apache/cassandra/service/StorageService.java ---------------------------------------------------------------------- diff --cc src/java/org/apache/cassandra/service/StorageService.java index 9a6b50f,94dd73d..26846e7 --- a/src/java/org/apache/cassandra/service/StorageService.java +++ b/src/java/org/apache/cassandra/service/StorageService.java @@@ -2297,8 -2314,11 +2297,10 @@@ public class StorageService extends Not { for (SecondaryIndex si : cfStore.indexManager.getIndexes()) { - logger.info("adding secondary index {} to operation", si.getIndexName()); - valid.add(si.getIndexCfs()); - if (si.getIndexCfs() != null) - { ++ if (si.getIndexCfs() != null) { + logger.info("adding secondary index {} to operation", si.getIndexName()); + valid.add(si.getIndexCfs()); + } } } @@@ -2346,8 -2367,11 +2348,10 @@@ { for(SecondaryIndex si : cfStore.indexManager.getIndexes()) { - logger.info("adding secondary index {} to operation", si.getIndexName()); - valid.add(si.getIndexCfs()); - if (si.getIndexCfs() != null) - { ++ if (si.getIndexCfs() != null) { + logger.info("adding secondary index {} to operation", si.getIndexName()); + valid.add(si.getIndexCfs()); + } } } }