You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cassandra.apache.org by sn...@apache.org on 2015/08/03 21:55:14 UTC

[1/2] cassandra git commit: Log warning when using an aggregate without partition key

Repository: cassandra
Updated Branches:
  refs/heads/trunk cc95bae85 -> fcece2dc2


Log warning when using an aggregate without partition key

patch by Robert Stupp; reviewed by Aleksey Yeschenko for CASSANDRA-9737


Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo
Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/5a54d9a6
Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/5a54d9a6
Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/5a54d9a6

Branch: refs/heads/trunk
Commit: 5a54d9a6240daa9e58dde702245f574002a42783
Parents: f60abbd
Author: Robert Stupp <sn...@snazy.de>
Authored: Mon Aug 3 21:51:34 2015 +0200
Committer: Robert Stupp <sn...@snazy.de>
Committed: Mon Aug 3 21:51:34 2015 +0200

----------------------------------------------------------------------
 CHANGES.txt                                     |  1 +
 .../restrictions/StatementRestrictions.java     |  5 +++++
 .../cql3/statements/SelectStatement.java        | 21 ++++++++++++++++++--
 3 files changed, 25 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cassandra/blob/5a54d9a6/CHANGES.txt
----------------------------------------------------------------------
diff --git a/CHANGES.txt b/CHANGES.txt
index 401f426..66e5a0c 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -1,4 +1,5 @@
 2.2.1
+ * Log warning when using an aggregate without partition key (CASSANDRA-9737)
  * Avoid grouping sstables for anticompaction with DTCS (CASSANDRA-9900)
  * UDF / UDA execution time in trace (CASSANDRA-9723)
  * Fix broken internode SSL (CASSANDRA-9884)

http://git-wip-us.apache.org/repos/asf/cassandra/blob/5a54d9a6/src/java/org/apache/cassandra/cql3/restrictions/StatementRestrictions.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/cql3/restrictions/StatementRestrictions.java b/src/java/org/apache/cassandra/cql3/restrictions/StatementRestrictions.java
index c10a56a..55c6808 100644
--- a/src/java/org/apache/cassandra/cql3/restrictions/StatementRestrictions.java
+++ b/src/java/org/apache/cassandra/cql3/restrictions/StatementRestrictions.java
@@ -256,6 +256,11 @@ public final class StatementRestrictions
         return partitionKeyRestrictions.size() <  cfm.partitionKeyColumns().size();
     }
 
+    public boolean hasPartitionKeyRestrictions()
+    {
+        return !partitionKeyRestrictions.isEmpty();
+    }
+
     /**
      * Returns the partition key components that are not restricted.
      * @return the partition key components that are not restricted.

http://git-wip-us.apache.org/repos/asf/cassandra/blob/5a54d9a6/src/java/org/apache/cassandra/cql3/statements/SelectStatement.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/cql3/statements/SelectStatement.java b/src/java/org/apache/cassandra/cql3/statements/SelectStatement.java
index cd0eeaa..3edb7d0 100644
--- a/src/java/org/apache/cassandra/cql3/statements/SelectStatement.java
+++ b/src/java/org/apache/cassandra/cql3/statements/SelectStatement.java
@@ -25,6 +25,9 @@ import com.google.common.base.Predicate;
 import com.google.common.collect.Iterables;
 import com.google.common.collect.Iterators;
 
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
 import org.apache.cassandra.auth.Permission;
 import org.apache.cassandra.config.CFMetaData;
 import org.apache.cassandra.config.ColumnDefinition;
@@ -44,6 +47,7 @@ import org.apache.cassandra.dht.AbstractBounds;
 import org.apache.cassandra.exceptions.*;
 import org.apache.cassandra.serializers.MarshalException;
 import org.apache.cassandra.service.ClientState;
+import org.apache.cassandra.service.ClientWarn;
 import org.apache.cassandra.service.QueryState;
 import org.apache.cassandra.service.StorageProxy;
 import org.apache.cassandra.service.pager.Pageable;
@@ -71,6 +75,8 @@ import static org.apache.cassandra.utils.ByteBufferUtil.UNSET_BYTE_BUFFER;
  */
 public class SelectStatement implements CQLStatement
 {
+    private static final Logger logger = LoggerFactory.getLogger(SelectStatement.class);
+
     private static final int DEFAULT_COUNT_PAGE_SIZE = 10000;
 
     private final int boundTerms;
@@ -242,10 +248,21 @@ public class SelectStatement implements CQLStatement
     private ResultMessage.Rows pageAggregateQuery(QueryPager pager, QueryOptions options, int pageSize, long now)
             throws RequestValidationException, RequestExecutionException
     {
+        if (!restrictions.hasPartitionKeyRestrictions())
+        {
+            logger.warn("Aggregation query used without partition key");
+            ClientWarn.warn("Aggregation query used without partition key");
+        }
+        else if (restrictions.keyIsInRelation())
+        {
+            logger.warn("Aggregation query used on multiple partition keys (IN restriction)");
+            ClientWarn.warn("Aggregation query used on multiple partition keys (IN restriction)");
+        }
+
         Selection.ResultSetBuilder result = selection.resultSetBuilder(now, parameters.isJson);
         while (!pager.isExhausted())
         {
-            for (org.apache.cassandra.db.Row row : pager.fetchPage(pageSize))
+            for (Row row : pager.fetchPage(pageSize))
             {
                 // Not columns match the query, skip
                 if (row.cf == null)
@@ -619,7 +636,7 @@ public class SelectStatement implements CQLStatement
     private ResultSet process(List<Row> rows, QueryOptions options, int limit, long now) throws InvalidRequestException
     {
         Selection.ResultSetBuilder result = selection.resultSetBuilder(now, parameters.isJson);
-        for (org.apache.cassandra.db.Row row : rows)
+        for (Row row : rows)
         {
             // Not columns match the query, skip
             if (row.cf == null)


[2/2] cassandra git commit: Merge branch 'cassandra-2.2' into trunk

Posted by sn...@apache.org.
Merge branch 'cassandra-2.2' into trunk


Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo
Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/fcece2dc
Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/fcece2dc
Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/fcece2dc

Branch: refs/heads/trunk
Commit: fcece2dc2b57ddc456af848293b9fd3cdb34710c
Parents: cc95bae 5a54d9a
Author: Robert Stupp <sn...@snazy.de>
Authored: Mon Aug 3 21:54:57 2015 +0200
Committer: Robert Stupp <sn...@snazy.de>
Committed: Mon Aug 3 21:54:57 2015 +0200

----------------------------------------------------------------------
 CHANGES.txt                                       | 18 ++++++++++++------
 .../cql3/restrictions/StatementRestrictions.java  |  5 +++++
 .../cql3/statements/SelectStatement.java          | 11 +++++++++++
 3 files changed, 28 insertions(+), 6 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cassandra/blob/fcece2dc/CHANGES.txt
----------------------------------------------------------------------
diff --cc CHANGES.txt
index 4b4f908,66e5a0c..4ad1052
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@@ -1,36 -1,10 +1,42 @@@
- 3.0
 -2.2.1
++3.0.0-beta1
 + * Add transparent data encryption core classes (CASSANDRA-9945)
-  * Implement proper sandboxing for UDFs (CASSANDRA-9402, 9890)
++ * Bytecode inspection for Java-UDFs (CASSANDRA-9890)
++Merged from 2.2:
+  * Log warning when using an aggregate without partition key (CASSANDRA-9737)
++Merged from 2.1:
++ * Cannot replace token does not exist - DN node removed as Fat Client (CASSANDRA-9871)
++Merged from 2.0:
++ * Don't cast expected bf size to an int (CASSANDRA-9959)
++
++3.0.0-alpha1
++ * Implement proper sandboxing for UDFs (CASSANDRA-9402)
 + * Simplify (and unify) cleanup of compaction leftovers (CASSANDRA-7066)
 + * Allow extra schema definitions in cassandra-stress yaml (CASSANDRA-9850)
 + * Metrics should use up to date nomenclature (CASSANDRA-9448)
 + * Change CREATE/ALTER TABLE syntax for compression (CASSANDRA-8384)
 + * Cleanup crc and adler code for java 8 (CASSANDRA-9650)
 + * Storage engine refactor (CASSANDRA-8099, 9743, 9746, 9759, 9781, 9808, 9825,
 +   9848, 9705, 9859, 9867, 9874, 9828, 9801)
 + * Update Guava to 18.0 (CASSANDRA-9653)
 + * Bloom filter false positive ratio is not honoured (CASSANDRA-8413)
 + * New option for cassandra-stress to leave a ratio of columns null (CASSANDRA-9522)
 + * Change hinted_handoff_enabled yaml setting, JMX (CASSANDRA-9035)
 + * Add algorithmic token allocation (CASSANDRA-7032)
 + * Add nodetool command to replay batchlog (CASSANDRA-9547)
 + * Make file buffer cache independent of paths being read (CASSANDRA-8897)
 + * Remove deprecated legacy Hadoop code (CASSANDRA-9353)
 + * Decommissioned nodes will not rejoin the cluster (CASSANDRA-8801)
 + * Change gossip stabilization to use endpoit size (CASSANDRA-9401)
 + * Change default garbage collector to G1 (CASSANDRA-7486)
 + * Populate TokenMetadata early during startup (CASSANDRA-9317)
 + * Undeprecate cache recentHitRate (CASSANDRA-6591)
 + * Add support for selectively varint encoding fields (CASSANDRA-9499, 9865)
 + * Materialized Views (CASSANDRA-6477)
- 
- 
- 2.2.1
++Merged from 2.2:
   * Avoid grouping sstables for anticompaction with DTCS (CASSANDRA-9900)
   * UDF / UDA execution time in trace (CASSANDRA-9723)
   * Fix broken internode SSL (CASSANDRA-9884)
  Merged from 2.1:
-- * Cannot replace token does not exist - DN node removed as Fat Client (CASSANDRA-9871)
   * Fix handling of enable/disable autocompaction (CASSANDRA-9899)
   * Add consistency level to tracing ouput (CASSANDRA-9827)
   * Remove repair snapshot leftover on startup (CASSANDRA-7357)

http://git-wip-us.apache.org/repos/asf/cassandra/blob/fcece2dc/src/java/org/apache/cassandra/cql3/restrictions/StatementRestrictions.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/cassandra/blob/fcece2dc/src/java/org/apache/cassandra/cql3/statements/SelectStatement.java
----------------------------------------------------------------------
diff --cc src/java/org/apache/cassandra/cql3/statements/SelectStatement.java
index 94f04b8,3edb7d0..9ac76d6
--- a/src/java/org/apache/cassandra/cql3/statements/SelectStatement.java
+++ b/src/java/org/apache/cassandra/cql3/statements/SelectStatement.java
@@@ -317,16 -245,30 +317,27 @@@ public class SelectStatement implement
          return msg;
      }
  
 -    private ResultMessage.Rows pageAggregateQuery(QueryPager pager, QueryOptions options, int pageSize, long now)
 -            throws RequestValidationException, RequestExecutionException
 +    private ResultMessage.Rows pageAggregateQuery(Pager pager, QueryOptions options, int pageSize, int nowInSec)
 +    throws RequestValidationException, RequestExecutionException
      {
+         if (!restrictions.hasPartitionKeyRestrictions())
+         {
+             logger.warn("Aggregation query used without partition key");
+             ClientWarn.warn("Aggregation query used without partition key");
+         }
+         else if (restrictions.keyIsInRelation())
+         {
+             logger.warn("Aggregation query used on multiple partition keys (IN restriction)");
+             ClientWarn.warn("Aggregation query used on multiple partition keys (IN restriction)");
+         }
+ 
 -        Selection.ResultSetBuilder result = selection.resultSetBuilder(now, parameters.isJson);
 +        Selection.ResultSetBuilder result = selection.resultSetBuilder(parameters.isJson);
          while (!pager.isExhausted())
          {
 -            for (Row row : pager.fetchPage(pageSize))
 +            try (PartitionIterator iter = pager.fetchPage(pageSize))
              {
 -                // Not columns match the query, skip
 -                if (row.cf == null)
 -                    continue;
 -
 -                processColumnFamily(row.key.getKey(), row.cf, options, now, result);
 +                while (iter.hasNext())
 +                    processPartition(iter.next(), options, result, nowInSec);
              }
          }
          return new ResultMessage.Rows(result.build(options.getProtocolVersion()));