You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cassandra.apache.org by jb...@apache.org on 2013/10/08 18:17:17 UTC
[1/6] git commit: Trace index selection patch by Lyuben Todorov and
jbellis for CASSANDRA-6001
Updated Branches:
refs/heads/cassandra-1.2 fe56518d9 -> 241c70a37
refs/heads/cassandra-2.0 690dac3c2 -> 21ab8f81a
refs/heads/trunk cfac7fbc1 -> c8434acf7
Trace index selection
patch by Lyuben Todorov and jbellis for CASSANDRA-6001
Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo
Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/241c70a3
Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/241c70a3
Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/241c70a3
Branch: refs/heads/cassandra-1.2
Commit: 241c70a37a89334657c9983736b35db0611fb874
Parents: fe56518
Author: Jonathan Ellis <jb...@apache.org>
Authored: Tue Oct 8 09:52:42 2013 -0500
Committer: Jonathan Ellis <jb...@apache.org>
Committed: Tue Oct 8 10:00:25 2013 -0500
----------------------------------------------------------------------
CHANGES.txt | 1 +
.../db/index/composites/CompositesSearcher.java | 16 ++++++++++++++--
.../cassandra/db/index/keys/KeysSearcher.java | 16 ++++++++++++++--
3 files changed, 29 insertions(+), 4 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cassandra/blob/241c70a3/CHANGES.txt
----------------------------------------------------------------------
diff --git a/CHANGES.txt b/CHANGES.txt
index 35bd832..adbae91 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -15,6 +15,7 @@
* Fix skipping columns with multiple slices (CASSANDRA-6119)
* Expose connected thrift + native client counts (CASSANDRA-5084)
* Optimize auth setup (CASSANDRA-6122)
+ * Trace index selection (CASSANDRA-6001)
1.2.10
http://git-wip-us.apache.org/repos/asf/cassandra/blob/241c70a3/src/java/org/apache/cassandra/db/index/composites/CompositesSearcher.java
----------------------------------------------------------------------
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 1e9d59d..82e227f 100644
--- a/src/java/org/apache/cassandra/db/index/composites/CompositesSearcher.java
+++ b/src/java/org/apache/cassandra/db/index/composites/CompositesSearcher.java
@@ -36,7 +36,9 @@ import org.apache.cassandra.dht.AbstractBounds;
import org.apache.cassandra.dht.Range;
import org.apache.cassandra.thrift.IndexExpression;
import org.apache.cassandra.thrift.IndexOperator;
+import org.apache.cassandra.tracing.Tracing;
import org.apache.cassandra.utils.ByteBufferUtil;
+import org.apache.cassandra.utils.FBUtilities;
public class CompositesSearcher extends SecondaryIndexSearcher
{
@@ -54,22 +56,32 @@ public class CompositesSearcher extends SecondaryIndexSearcher
{
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))
+ // 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))
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/241c70a3/src/java/org/apache/cassandra/db/index/keys/KeysSearcher.java
----------------------------------------------------------------------
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 4be7988..7d23e6c 100644
--- a/src/java/org/apache/cassandra/db/index/keys/KeysSearcher.java
+++ b/src/java/org/apache/cassandra/db/index/keys/KeysSearcher.java
@@ -32,7 +32,9 @@ import org.apache.cassandra.dht.AbstractBounds;
import org.apache.cassandra.dht.Range;
import org.apache.cassandra.thrift.IndexExpression;
import org.apache.cassandra.thrift.IndexOperator;
+import org.apache.cassandra.tracing.Tracing;
import org.apache.cassandra.utils.ByteBufferUtil;
+import org.apache.cassandra.utils.FBUtilities;
import org.apache.cassandra.utils.HeapAllocator;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -50,22 +52,32 @@ public class KeysSearcher extends SecondaryIndexSearcher
{
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))
+ // 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))
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;
}
[3/6] git commit: Trace index selection patch by Lyuben Todorov and
jbellis for CASSANDRA-6001
Posted by jb...@apache.org.
Trace index selection
patch by Lyuben Todorov and jbellis for CASSANDRA-6001
Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo
Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/241c70a3
Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/241c70a3
Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/241c70a3
Branch: refs/heads/trunk
Commit: 241c70a37a89334657c9983736b35db0611fb874
Parents: fe56518
Author: Jonathan Ellis <jb...@apache.org>
Authored: Tue Oct 8 09:52:42 2013 -0500
Committer: Jonathan Ellis <jb...@apache.org>
Committed: Tue Oct 8 10:00:25 2013 -0500
----------------------------------------------------------------------
CHANGES.txt | 1 +
.../db/index/composites/CompositesSearcher.java | 16 ++++++++++++++--
.../cassandra/db/index/keys/KeysSearcher.java | 16 ++++++++++++++--
3 files changed, 29 insertions(+), 4 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cassandra/blob/241c70a3/CHANGES.txt
----------------------------------------------------------------------
diff --git a/CHANGES.txt b/CHANGES.txt
index 35bd832..adbae91 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -15,6 +15,7 @@
* Fix skipping columns with multiple slices (CASSANDRA-6119)
* Expose connected thrift + native client counts (CASSANDRA-5084)
* Optimize auth setup (CASSANDRA-6122)
+ * Trace index selection (CASSANDRA-6001)
1.2.10
http://git-wip-us.apache.org/repos/asf/cassandra/blob/241c70a3/src/java/org/apache/cassandra/db/index/composites/CompositesSearcher.java
----------------------------------------------------------------------
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 1e9d59d..82e227f 100644
--- a/src/java/org/apache/cassandra/db/index/composites/CompositesSearcher.java
+++ b/src/java/org/apache/cassandra/db/index/composites/CompositesSearcher.java
@@ -36,7 +36,9 @@ import org.apache.cassandra.dht.AbstractBounds;
import org.apache.cassandra.dht.Range;
import org.apache.cassandra.thrift.IndexExpression;
import org.apache.cassandra.thrift.IndexOperator;
+import org.apache.cassandra.tracing.Tracing;
import org.apache.cassandra.utils.ByteBufferUtil;
+import org.apache.cassandra.utils.FBUtilities;
public class CompositesSearcher extends SecondaryIndexSearcher
{
@@ -54,22 +56,32 @@ public class CompositesSearcher extends SecondaryIndexSearcher
{
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))
+ // 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))
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/241c70a3/src/java/org/apache/cassandra/db/index/keys/KeysSearcher.java
----------------------------------------------------------------------
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 4be7988..7d23e6c 100644
--- a/src/java/org/apache/cassandra/db/index/keys/KeysSearcher.java
+++ b/src/java/org/apache/cassandra/db/index/keys/KeysSearcher.java
@@ -32,7 +32,9 @@ import org.apache.cassandra.dht.AbstractBounds;
import org.apache.cassandra.dht.Range;
import org.apache.cassandra.thrift.IndexExpression;
import org.apache.cassandra.thrift.IndexOperator;
+import org.apache.cassandra.tracing.Tracing;
import org.apache.cassandra.utils.ByteBufferUtil;
+import org.apache.cassandra.utils.FBUtilities;
import org.apache.cassandra.utils.HeapAllocator;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -50,22 +52,32 @@ public class KeysSearcher extends SecondaryIndexSearcher
{
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))
+ // 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))
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;
}
[5/6] git commit: merge from 1.2
Posted by jb...@apache.org.
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/21ab8f81
Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/21ab8f81
Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/21ab8f81
Branch: refs/heads/cassandra-2.0
Commit: 21ab8f81a2adde9be27728c22e8b5733079aee9b
Parents: 690dac3 241c70a
Author: Jonathan Ellis <jb...@apache.org>
Authored: Tue Oct 8 10:55:31 2013 -0500
Committer: Jonathan Ellis <jb...@apache.org>
Committed: Tue Oct 8 10:55:31 2013 -0500
----------------------------------------------------------------------
CHANGES.txt | 1 +
.../db/index/SecondaryIndexSearcher.java | 18 +++++++++++++++---
.../db/index/composites/CompositesSearcher.java | 5 ++++-
.../cassandra/db/index/keys/KeysSearcher.java | 15 ++++++++-------
4 files changed, 28 insertions(+), 11 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cassandra/blob/21ab8f81/CHANGES.txt
----------------------------------------------------------------------
diff --cc CHANGES.txt
index fef5243,adbae91..1877a85
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@@ -39,43 -15,10 +39,44 @@@ Merged from 1.2
* Fix skipping columns with multiple slices (CASSANDRA-6119)
* Expose connected thrift + native client counts (CASSANDRA-5084)
* Optimize auth setup (CASSANDRA-6122)
+ * Trace index selection (CASSANDRA-6001)
-1.2.10
+2.0.1
+ * Fix bug that could allow reading deleted data temporarily (CASSANDRA-6025)
+ * Improve memory use defaults (CASSANDRA-5069)
+ * Make ThriftServer more easlly extensible (CASSANDRA-6058)
+ * Remove Hadoop dependency from ITransportFactory (CASSANDRA-6062)
+ * add file_cache_size_in_mb setting (CASSANDRA-5661)
+ * Improve error message when yaml contains invalid properties (CASSANDRA-5958)
+ * Improve leveled compaction's ability to find non-overlapping L0 compactions
+ to work on concurrently (CASSANDRA-5921)
+ * Notify indexer of columns shadowed by range tombstones (CASSANDRA-5614)
+ * Log Merkle tree stats (CASSANDRA-2698)
+ * Switch from crc32 to adler32 for compressed sstable checksums (CASSANDRA-5862)
+ * Improve offheap memcpy performance (CASSANDRA-5884)
+ * Use a range aware scanner for cleanup (CASSANDRA-2524)
+ * Cleanup doesn't need to inspect sstables that contain only local data
+ (CASSANDRA-5722)
+ * Add ability for CQL3 to list partition keys (CASSANDRA-4536)
+ * Improve native protocol serialization (CASSANDRA-5664)
+ * Upgrade Thrift to 0.9.1 (CASSANDRA-5923)
+ * Require superuser status for adding triggers (CASSANDRA-5963)
+ * Make standalone scrubber handle old and new style leveled manifest
+ (CASSANDRA-6005)
+ * Fix paxos bugs (CASSANDRA-6012, 6013, 6023)
+ * Fix paged ranges with multiple replicas (CASSANDRA-6004)
+ * Fix potential AssertionError during tracing (CASSANDRA-6041)
+ * Fix NPE in sstablesplit (CASSANDRA-6027)
+ * Migrate pre-2.0 key/value/column aliases to system.schema_columns
+ (CASSANDRA-6009)
+ * Paging filter empty rows too agressively (CASSANDRA-6040)
+ * Support variadic parameters for IN clauses (CASSANDRA-4210)
+ * cqlsh: return the result of CAS writes (CASSANDRA-5796)
+ * Fix validation of IN clauses with 2ndary indexes (CASSANDRA-6050)
+ * Support named bind variables in CQL (CASSANDRA-6033)
+Merged from 1.2:
+ * Allow cache-keys-to-save to be set at runtime (CASSANDRA-5980)
* Avoid second-guessing out-of-space state (CASSANDRA-5605)
* Tuning knobs for dealing with large blobs and many CFs (CASSANDRA-5982)
* (Hadoop) Fix CQLRW for thrift tables (CASSANDRA-6002)
http://git-wip-us.apache.org/repos/asf/cassandra/blob/21ab8f81/src/java/org/apache/cassandra/db/index/SecondaryIndexSearcher.java
----------------------------------------------------------------------
diff --cc src/java/org/apache/cassandra/db/index/SecondaryIndexSearcher.java
index d28afc0,a8c1dde..f3e993d
--- a/src/java/org/apache/cassandra/db/index/SecondaryIndexSearcher.java
+++ b/src/java/org/apache/cassandra/db/index/SecondaryIndexSearcher.java
@@@ -21,13 -21,13 +21,15 @@@ import java.nio.ByteBuffer
import java.util.*;
import org.apache.cassandra.db.*;
-import org.apache.cassandra.db.filter.IDiskAtomFilter;
-import org.apache.cassandra.dht.AbstractBounds;
+import org.apache.cassandra.db.filter.ExtendedFilter;
import org.apache.cassandra.thrift.IndexExpression;
+import org.apache.cassandra.thrift.IndexOperator;
++import org.apache.cassandra.tracing.Tracing;
++import org.apache.cassandra.utils.FBUtilities;
public abstract class SecondaryIndexSearcher
{
-- protected final SecondaryIndexManager indexManager;
++ protected final SecondaryIndexManager indexManager;
protected final Set<ByteBuffer> columns;
protected final ColumnFamilyStore baseCfs;
@@@ -43,31 -43,15 +45,41 @@@
/**
* @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))
++ // 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))
+ 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/21ab8f81/src/java/org/apache/cassandra/db/index/composites/CompositesSearcher.java
----------------------------------------------------------------------
diff --cc src/java/org/apache/cassandra/db/index/composites/CompositesSearcher.java
index 0242fd2,82e227f..aa35605
--- a/src/java/org/apache/cassandra/db/index/composites/CompositesSearcher.java
+++ b/src/java/org/apache/cassandra/db/index/composites/CompositesSearcher.java
@@@ -24,9 -24,11 +24,12 @@@ import java.util.*
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import org.apache.cassandra.cql3.ColumnNameBuilder;
import org.apache.cassandra.db.*;
--import org.apache.cassandra.db.filter.*;
-import org.apache.cassandra.db.index.AbstractSimplePerColumnSecondaryIndex;
-import org.apache.cassandra.db.index.PerColumnSecondaryIndex;
-import org.apache.cassandra.db.index.SecondaryIndex;
++import org.apache.cassandra.db.filter.ExtendedFilter;
++import org.apache.cassandra.db.filter.IDiskAtomFilter;
++import org.apache.cassandra.db.filter.QueryFilter;
++import org.apache.cassandra.db.filter.SliceQueryFilter;
import org.apache.cassandra.db.index.SecondaryIndexManager;
import org.apache.cassandra.db.index.SecondaryIndexSearcher;
import org.apache.cassandra.db.marshal.CompositeType;
http://git-wip-us.apache.org/repos/asf/cassandra/blob/21ab8f81/src/java/org/apache/cassandra/db/index/keys/KeysSearcher.java
----------------------------------------------------------------------
diff --cc src/java/org/apache/cassandra/db/index/keys/KeysSearcher.java
index 205efb7,7d23e6c..e14f865
--- a/src/java/org/apache/cassandra/db/index/keys/KeysSearcher.java
+++ b/src/java/org/apache/cassandra/db/index/keys/KeysSearcher.java
@@@ -19,18 -19,15 +19,19 @@@ package org.apache.cassandra.db.index.k
import java.io.IOException;
import java.nio.ByteBuffer;
--import java.util.*;
++import java.util.Collection;
++import java.util.Iterator;
++import java.util.List;
++import java.util.Set;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
import org.apache.cassandra.db.*;
--import org.apache.cassandra.db.filter.*;
--import org.apache.cassandra.db.index.AbstractSimplePerColumnSecondaryIndex;
--import org.apache.cassandra.db.index.PerColumnSecondaryIndex;
--import org.apache.cassandra.db.index.SecondaryIndex;
--import org.apache.cassandra.db.index.SecondaryIndexManager;
--import org.apache.cassandra.db.index.SecondaryIndexSearcher;
++import org.apache.cassandra.db.filter.ExtendedFilter;
++import org.apache.cassandra.db.filter.IDiskAtomFilter;
++import org.apache.cassandra.db.filter.QueryFilter;
++import org.apache.cassandra.db.index.*;
import org.apache.cassandra.dht.AbstractBounds;
import org.apache.cassandra.dht.Range;
import org.apache.cassandra.thrift.IndexExpression;
[2/6] git commit: Trace index selection patch by Lyuben Todorov and
jbellis for CASSANDRA-6001
Posted by jb...@apache.org.
Trace index selection
patch by Lyuben Todorov and jbellis for CASSANDRA-6001
Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo
Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/241c70a3
Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/241c70a3
Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/241c70a3
Branch: refs/heads/cassandra-2.0
Commit: 241c70a37a89334657c9983736b35db0611fb874
Parents: fe56518
Author: Jonathan Ellis <jb...@apache.org>
Authored: Tue Oct 8 09:52:42 2013 -0500
Committer: Jonathan Ellis <jb...@apache.org>
Committed: Tue Oct 8 10:00:25 2013 -0500
----------------------------------------------------------------------
CHANGES.txt | 1 +
.../db/index/composites/CompositesSearcher.java | 16 ++++++++++++++--
.../cassandra/db/index/keys/KeysSearcher.java | 16 ++++++++++++++--
3 files changed, 29 insertions(+), 4 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cassandra/blob/241c70a3/CHANGES.txt
----------------------------------------------------------------------
diff --git a/CHANGES.txt b/CHANGES.txt
index 35bd832..adbae91 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -15,6 +15,7 @@
* Fix skipping columns with multiple slices (CASSANDRA-6119)
* Expose connected thrift + native client counts (CASSANDRA-5084)
* Optimize auth setup (CASSANDRA-6122)
+ * Trace index selection (CASSANDRA-6001)
1.2.10
http://git-wip-us.apache.org/repos/asf/cassandra/blob/241c70a3/src/java/org/apache/cassandra/db/index/composites/CompositesSearcher.java
----------------------------------------------------------------------
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 1e9d59d..82e227f 100644
--- a/src/java/org/apache/cassandra/db/index/composites/CompositesSearcher.java
+++ b/src/java/org/apache/cassandra/db/index/composites/CompositesSearcher.java
@@ -36,7 +36,9 @@ import org.apache.cassandra.dht.AbstractBounds;
import org.apache.cassandra.dht.Range;
import org.apache.cassandra.thrift.IndexExpression;
import org.apache.cassandra.thrift.IndexOperator;
+import org.apache.cassandra.tracing.Tracing;
import org.apache.cassandra.utils.ByteBufferUtil;
+import org.apache.cassandra.utils.FBUtilities;
public class CompositesSearcher extends SecondaryIndexSearcher
{
@@ -54,22 +56,32 @@ public class CompositesSearcher extends SecondaryIndexSearcher
{
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))
+ // 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))
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/241c70a3/src/java/org/apache/cassandra/db/index/keys/KeysSearcher.java
----------------------------------------------------------------------
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 4be7988..7d23e6c 100644
--- a/src/java/org/apache/cassandra/db/index/keys/KeysSearcher.java
+++ b/src/java/org/apache/cassandra/db/index/keys/KeysSearcher.java
@@ -32,7 +32,9 @@ import org.apache.cassandra.dht.AbstractBounds;
import org.apache.cassandra.dht.Range;
import org.apache.cassandra.thrift.IndexExpression;
import org.apache.cassandra.thrift.IndexOperator;
+import org.apache.cassandra.tracing.Tracing;
import org.apache.cassandra.utils.ByteBufferUtil;
+import org.apache.cassandra.utils.FBUtilities;
import org.apache.cassandra.utils.HeapAllocator;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -50,22 +52,32 @@ public class KeysSearcher extends SecondaryIndexSearcher
{
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))
+ // 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))
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;
}
[4/6] git commit: merge from 1.2
Posted by jb...@apache.org.
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/21ab8f81
Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/21ab8f81
Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/21ab8f81
Branch: refs/heads/trunk
Commit: 21ab8f81a2adde9be27728c22e8b5733079aee9b
Parents: 690dac3 241c70a
Author: Jonathan Ellis <jb...@apache.org>
Authored: Tue Oct 8 10:55:31 2013 -0500
Committer: Jonathan Ellis <jb...@apache.org>
Committed: Tue Oct 8 10:55:31 2013 -0500
----------------------------------------------------------------------
CHANGES.txt | 1 +
.../db/index/SecondaryIndexSearcher.java | 18 +++++++++++++++---
.../db/index/composites/CompositesSearcher.java | 5 ++++-
.../cassandra/db/index/keys/KeysSearcher.java | 15 ++++++++-------
4 files changed, 28 insertions(+), 11 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cassandra/blob/21ab8f81/CHANGES.txt
----------------------------------------------------------------------
diff --cc CHANGES.txt
index fef5243,adbae91..1877a85
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@@ -39,43 -15,10 +39,44 @@@ Merged from 1.2
* Fix skipping columns with multiple slices (CASSANDRA-6119)
* Expose connected thrift + native client counts (CASSANDRA-5084)
* Optimize auth setup (CASSANDRA-6122)
+ * Trace index selection (CASSANDRA-6001)
-1.2.10
+2.0.1
+ * Fix bug that could allow reading deleted data temporarily (CASSANDRA-6025)
+ * Improve memory use defaults (CASSANDRA-5069)
+ * Make ThriftServer more easlly extensible (CASSANDRA-6058)
+ * Remove Hadoop dependency from ITransportFactory (CASSANDRA-6062)
+ * add file_cache_size_in_mb setting (CASSANDRA-5661)
+ * Improve error message when yaml contains invalid properties (CASSANDRA-5958)
+ * Improve leveled compaction's ability to find non-overlapping L0 compactions
+ to work on concurrently (CASSANDRA-5921)
+ * Notify indexer of columns shadowed by range tombstones (CASSANDRA-5614)
+ * Log Merkle tree stats (CASSANDRA-2698)
+ * Switch from crc32 to adler32 for compressed sstable checksums (CASSANDRA-5862)
+ * Improve offheap memcpy performance (CASSANDRA-5884)
+ * Use a range aware scanner for cleanup (CASSANDRA-2524)
+ * Cleanup doesn't need to inspect sstables that contain only local data
+ (CASSANDRA-5722)
+ * Add ability for CQL3 to list partition keys (CASSANDRA-4536)
+ * Improve native protocol serialization (CASSANDRA-5664)
+ * Upgrade Thrift to 0.9.1 (CASSANDRA-5923)
+ * Require superuser status for adding triggers (CASSANDRA-5963)
+ * Make standalone scrubber handle old and new style leveled manifest
+ (CASSANDRA-6005)
+ * Fix paxos bugs (CASSANDRA-6012, 6013, 6023)
+ * Fix paged ranges with multiple replicas (CASSANDRA-6004)
+ * Fix potential AssertionError during tracing (CASSANDRA-6041)
+ * Fix NPE in sstablesplit (CASSANDRA-6027)
+ * Migrate pre-2.0 key/value/column aliases to system.schema_columns
+ (CASSANDRA-6009)
+ * Paging filter empty rows too agressively (CASSANDRA-6040)
+ * Support variadic parameters for IN clauses (CASSANDRA-4210)
+ * cqlsh: return the result of CAS writes (CASSANDRA-5796)
+ * Fix validation of IN clauses with 2ndary indexes (CASSANDRA-6050)
+ * Support named bind variables in CQL (CASSANDRA-6033)
+Merged from 1.2:
+ * Allow cache-keys-to-save to be set at runtime (CASSANDRA-5980)
* Avoid second-guessing out-of-space state (CASSANDRA-5605)
* Tuning knobs for dealing with large blobs and many CFs (CASSANDRA-5982)
* (Hadoop) Fix CQLRW for thrift tables (CASSANDRA-6002)
http://git-wip-us.apache.org/repos/asf/cassandra/blob/21ab8f81/src/java/org/apache/cassandra/db/index/SecondaryIndexSearcher.java
----------------------------------------------------------------------
diff --cc src/java/org/apache/cassandra/db/index/SecondaryIndexSearcher.java
index d28afc0,a8c1dde..f3e993d
--- a/src/java/org/apache/cassandra/db/index/SecondaryIndexSearcher.java
+++ b/src/java/org/apache/cassandra/db/index/SecondaryIndexSearcher.java
@@@ -21,13 -21,13 +21,15 @@@ import java.nio.ByteBuffer
import java.util.*;
import org.apache.cassandra.db.*;
-import org.apache.cassandra.db.filter.IDiskAtomFilter;
-import org.apache.cassandra.dht.AbstractBounds;
+import org.apache.cassandra.db.filter.ExtendedFilter;
import org.apache.cassandra.thrift.IndexExpression;
+import org.apache.cassandra.thrift.IndexOperator;
++import org.apache.cassandra.tracing.Tracing;
++import org.apache.cassandra.utils.FBUtilities;
public abstract class SecondaryIndexSearcher
{
-- protected final SecondaryIndexManager indexManager;
++ protected final SecondaryIndexManager indexManager;
protected final Set<ByteBuffer> columns;
protected final ColumnFamilyStore baseCfs;
@@@ -43,31 -43,15 +45,41 @@@
/**
* @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))
++ // 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))
+ 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/21ab8f81/src/java/org/apache/cassandra/db/index/composites/CompositesSearcher.java
----------------------------------------------------------------------
diff --cc src/java/org/apache/cassandra/db/index/composites/CompositesSearcher.java
index 0242fd2,82e227f..aa35605
--- a/src/java/org/apache/cassandra/db/index/composites/CompositesSearcher.java
+++ b/src/java/org/apache/cassandra/db/index/composites/CompositesSearcher.java
@@@ -24,9 -24,11 +24,12 @@@ import java.util.*
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import org.apache.cassandra.cql3.ColumnNameBuilder;
import org.apache.cassandra.db.*;
--import org.apache.cassandra.db.filter.*;
-import org.apache.cassandra.db.index.AbstractSimplePerColumnSecondaryIndex;
-import org.apache.cassandra.db.index.PerColumnSecondaryIndex;
-import org.apache.cassandra.db.index.SecondaryIndex;
++import org.apache.cassandra.db.filter.ExtendedFilter;
++import org.apache.cassandra.db.filter.IDiskAtomFilter;
++import org.apache.cassandra.db.filter.QueryFilter;
++import org.apache.cassandra.db.filter.SliceQueryFilter;
import org.apache.cassandra.db.index.SecondaryIndexManager;
import org.apache.cassandra.db.index.SecondaryIndexSearcher;
import org.apache.cassandra.db.marshal.CompositeType;
http://git-wip-us.apache.org/repos/asf/cassandra/blob/21ab8f81/src/java/org/apache/cassandra/db/index/keys/KeysSearcher.java
----------------------------------------------------------------------
diff --cc src/java/org/apache/cassandra/db/index/keys/KeysSearcher.java
index 205efb7,7d23e6c..e14f865
--- a/src/java/org/apache/cassandra/db/index/keys/KeysSearcher.java
+++ b/src/java/org/apache/cassandra/db/index/keys/KeysSearcher.java
@@@ -19,18 -19,15 +19,19 @@@ package org.apache.cassandra.db.index.k
import java.io.IOException;
import java.nio.ByteBuffer;
--import java.util.*;
++import java.util.Collection;
++import java.util.Iterator;
++import java.util.List;
++import java.util.Set;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
import org.apache.cassandra.db.*;
--import org.apache.cassandra.db.filter.*;
--import org.apache.cassandra.db.index.AbstractSimplePerColumnSecondaryIndex;
--import org.apache.cassandra.db.index.PerColumnSecondaryIndex;
--import org.apache.cassandra.db.index.SecondaryIndex;
--import org.apache.cassandra.db.index.SecondaryIndexManager;
--import org.apache.cassandra.db.index.SecondaryIndexSearcher;
++import org.apache.cassandra.db.filter.ExtendedFilter;
++import org.apache.cassandra.db.filter.IDiskAtomFilter;
++import org.apache.cassandra.db.filter.QueryFilter;
++import org.apache.cassandra.db.index.*;
import org.apache.cassandra.dht.AbstractBounds;
import org.apache.cassandra.dht.Range;
import org.apache.cassandra.thrift.IndexExpression;
[6/6] git commit: merge from 2.0
Posted by jb...@apache.org.
merge from 2.0
Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo
Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/c8434acf
Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/c8434acf
Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/c8434acf
Branch: refs/heads/trunk
Commit: c8434acf75880a5bc273dd8e288a0de01fb90e27
Parents: cfac7fb 21ab8f8
Author: Jonathan Ellis <jb...@apache.org>
Authored: Tue Oct 8 11:17:13 2013 -0500
Committer: Jonathan Ellis <jb...@apache.org>
Committed: Tue Oct 8 11:17:13 2013 -0500
----------------------------------------------------------------------
CHANGES.txt | 1 +
.../db/index/SecondaryIndexSearcher.java | 18 +++++++++++++++---
.../db/index/composites/CompositesSearcher.java | 5 ++++-
.../cassandra/db/index/keys/KeysSearcher.java | 15 ++++++++-------
4 files changed, 28 insertions(+), 11 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cassandra/blob/c8434acf/CHANGES.txt
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cassandra/blob/c8434acf/src/java/org/apache/cassandra/db/index/SecondaryIndexSearcher.java
----------------------------------------------------------------------
diff --cc src/java/org/apache/cassandra/db/index/SecondaryIndexSearcher.java
index 1f72f62,f3e993d..f18357b
--- a/src/java/org/apache/cassandra/db/index/SecondaryIndexSearcher.java
+++ b/src/java/org/apache/cassandra/db/index/SecondaryIndexSearcher.java
@@@ -22,6 -22,10 +22,8 @@@ import java.util.*
import org.apache.cassandra.db.*;
import org.apache.cassandra.db.filter.ExtendedFilter;
-import org.apache.cassandra.thrift.IndexExpression;
-import org.apache.cassandra.thrift.IndexOperator;
+ import org.apache.cassandra.tracing.Tracing;
+ import org.apache.cassandra.utils.FBUtilities;
public abstract class SecondaryIndexSearcher
{
@@@ -56,22 -54,32 +58,32 @@@
{
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))
+ // skip columns belonging to a different index type
- if (!columns.contains(expression.column_name))
++ if (!columns.contains(expression.column))
continue;
- SecondaryIndex index = indexManager.getIndexForColumn(expression.column_name);
- if (index == null || (expression.op != IndexOperator.EQ))
+ SecondaryIndex index = indexManager.getIndexForColumn(expression.column);
+ if (index == null || expression.operator != IndexExpression.Operator.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());
++ FBUtilities.toString(candidates), indexManager.getIndexForColumn(best.column).getIndexName());
+
return best;
}
}
http://git-wip-us.apache.org/repos/asf/cassandra/blob/c8434acf/src/java/org/apache/cassandra/db/index/composites/CompositesSearcher.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cassandra/blob/c8434acf/src/java/org/apache/cassandra/db/index/keys/KeysSearcher.java
----------------------------------------------------------------------
diff --cc src/java/org/apache/cassandra/db/index/keys/KeysSearcher.java
index eefef0c,e14f865..3740e24
--- a/src/java/org/apache/cassandra/db/index/keys/KeysSearcher.java
+++ b/src/java/org/apache/cassandra/db/index/keys/KeysSearcher.java
@@@ -25,14 -28,13 +28,12 @@@ import org.slf4j.Logger
import org.slf4j.LoggerFactory;
import org.apache.cassandra.db.*;
- import org.apache.cassandra.db.filter.*;
- import org.apache.cassandra.db.index.AbstractSimplePerColumnSecondaryIndex;
- import org.apache.cassandra.db.index.PerColumnSecondaryIndex;
- import org.apache.cassandra.db.index.SecondaryIndex;
- import org.apache.cassandra.db.index.SecondaryIndexManager;
- import org.apache.cassandra.db.index.SecondaryIndexSearcher;
+ import org.apache.cassandra.db.filter.ExtendedFilter;
+ import org.apache.cassandra.db.filter.IDiskAtomFilter;
+ import org.apache.cassandra.db.filter.QueryFilter;
+ import org.apache.cassandra.db.index.*;
import org.apache.cassandra.dht.AbstractBounds;
import org.apache.cassandra.dht.Range;
-import org.apache.cassandra.thrift.IndexExpression;
import org.apache.cassandra.utils.ByteBufferUtil;
import org.apache.cassandra.utils.HeapAllocator;