You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cassandra.apache.org by sl...@apache.org on 2016/09/13 08:53:01 UTC
[6/8] cassandra git commit: Use empty partition rather than null one
Use empty partition rather than null one
Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo
Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/f58c3510
Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/f58c3510
Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/f58c3510
Branch: refs/heads/12060-3.0-v2
Commit: f58c351077bd1e20e2714a3a7c74d72e746efce4
Parents: 578450b
Author: Sylvain Lebresne <sy...@datastax.com>
Authored: Fri Sep 2 11:21:33 2016 +0200
Committer: Sylvain Lebresne <sy...@datastax.com>
Committed: Mon Sep 12 11:50:22 2016 +0200
----------------------------------------------------------------------
.../cql3/statements/CQL3CasRequest.java | 19 +++++++++++++++----
.../cql3/statements/ModificationStatement.java | 5 +----
.../apache/cassandra/service/StorageProxy.java | 2 +-
.../apache/cassandra/thrift/CassandraServer.java | 4 ++--
4 files changed, 19 insertions(+), 11 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cassandra/blob/f58c3510/src/java/org/apache/cassandra/cql3/statements/CQL3CasRequest.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/cql3/statements/CQL3CasRequest.java b/src/java/org/apache/cassandra/cql3/statements/CQL3CasRequest.java
index 6ce05f3..3af3c35 100644
--- a/src/java/org/apache/cassandra/cql3/statements/CQL3CasRequest.java
+++ b/src/java/org/apache/cassandra/cql3/statements/CQL3CasRequest.java
@@ -27,6 +27,7 @@ import org.apache.cassandra.config.CFMetaData;
import org.apache.cassandra.cql3.*;
import org.apache.cassandra.db.*;
import org.apache.cassandra.db.filter.*;
+import org.apache.cassandra.db.rows.Row;
import org.apache.cassandra.db.partitions.FilteredPartition;
import org.apache.cassandra.db.partitions.Partition;
import org.apache.cassandra.db.partitions.PartitionUpdate;
@@ -176,6 +177,15 @@ public class CQL3CasRequest implements CASRequest
return SinglePartitionReadCommand.create(cfm, nowInSec, key, ColumnFilter.selection(columnsToRead()), filter);
}
+ /**
+ * Checks whether the conditions represented by this object applies provided the current state of the partition on
+ * which those conditions are.
+ *
+ * @param current the partition with current data corresponding to these conditions. More precisely, this must be
+ * the result of executing the command returned by {@link #readCommand}. This can be empty but it should not be
+ * {@code null}.
+ * @return whether the conditions represented by this object applies or not.
+ */
public boolean appliesTo(FilteredPartition current) throws InvalidRequestException
{
if (staticConditions != null && !staticConditions.appliesTo(current))
@@ -261,7 +271,7 @@ public class CQL3CasRequest implements CASRequest
public boolean appliesTo(FilteredPartition current)
{
- return current == null || current.getRow(clustering) == null;
+ return current.getRow(clustering) == null;
}
}
@@ -274,7 +284,7 @@ public class CQL3CasRequest implements CASRequest
public boolean appliesTo(FilteredPartition current)
{
- return current != null && current.getRow(clustering) != null;
+ return current.getRow(clustering) != null;
}
}
@@ -298,12 +308,13 @@ public class CQL3CasRequest implements CASRequest
public boolean appliesTo(FilteredPartition current) throws InvalidRequestException
{
- if (current == null)
+ if (current.isEmpty())
return conditions.isEmpty();
+ Row row = current.getRow(clustering);
for (ColumnCondition.Bound condition : conditions.values())
{
- if (!condition.appliesTo(current.getRow(clustering)))
+ if (!condition.appliesTo(row))
return false;
}
return true;
http://git-wip-us.apache.org/repos/asf/cassandra/blob/f58c3510/src/java/org/apache/cassandra/cql3/statements/ModificationStatement.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/cql3/statements/ModificationStatement.java b/src/java/org/apache/cassandra/cql3/statements/ModificationStatement.java
index 7094853..01c2ad1 100644
--- a/src/java/org/apache/cassandra/cql3/statements/ModificationStatement.java
+++ b/src/java/org/apache/cassandra/cql3/statements/ModificationStatement.java
@@ -587,11 +587,8 @@ public abstract class ModificationStatement implements CQLStatement
current = FilteredPartition.create(PartitionIterators.getOnlyElement(iter, readCommand));
}
- // If partition is effectively empty (no rows, no statics, not live), we pass null to indicate it does not exist
- if (!request.appliesTo(current.isEmpty() ? null : current))
- {
+ if (!request.appliesTo(current))
return current.rowIterator();
- }
PartitionUpdate updates = request.makeUpdates(current);
updates = TriggerExecutor.instance.execute(updates);
http://git-wip-us.apache.org/repos/asf/cassandra/blob/f58c3510/src/java/org/apache/cassandra/service/StorageProxy.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/service/StorageProxy.java b/src/java/org/apache/cassandra/service/StorageProxy.java
index 1550bb0..8a151f2 100644
--- a/src/java/org/apache/cassandra/service/StorageProxy.java
+++ b/src/java/org/apache/cassandra/service/StorageProxy.java
@@ -251,7 +251,7 @@ public class StorageProxy implements StorageProxyMBean
current = FilteredPartition.create(rowIter);
}
- if (!request.appliesTo(current.isEmpty() ? null : current))
+ if (!request.appliesTo(current))
{
Tracing.trace("CAS precondition does not match current values {}", current);
casWriteMetrics.conditionNotMet.inc();
http://git-wip-us.apache.org/repos/asf/cassandra/blob/f58c3510/src/java/org/apache/cassandra/thrift/CassandraServer.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/thrift/CassandraServer.java b/src/java/org/apache/cassandra/thrift/CassandraServer.java
index 201dc43..0dec94e 100644
--- a/src/java/org/apache/cassandra/thrift/CassandraServer.java
+++ b/src/java/org/apache/cassandra/thrift/CassandraServer.java
@@ -2554,8 +2554,8 @@ public class CassandraServer implements Cassandra.Iface
public boolean appliesTo(FilteredPartition current)
{
if (expected.isEmpty())
- return current == null;
- else if (current == null)
+ return current.isEmpty();
+ else if (current.isEmpty())
return false;
// Push the expected results through ThriftResultsMerger to translate any static