You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cassandra.apache.org by xe...@apache.org on 2012/08/17 00:56:16 UTC
git commit: remove schema agreement checking from all external APIs
(Thrift, CQL and CQL3) patch by Pavel Yaskevich;
reviewed by Jonathan Ellis for CASSANDRA-4487
Updated Branches:
refs/heads/trunk 7ddb5c7a4 -> 71f5d91ab
remove schema agreement checking from all external APIs (Thrift, CQL and CQL3)
patch by Pavel Yaskevich; reviewed by Jonathan Ellis for CASSANDRA-4487
Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo
Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/71f5d91a
Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/71f5d91a
Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/71f5d91a
Branch: refs/heads/trunk
Commit: 71f5d91ab7825196990a2744cf3e40e654917d33
Parents: 7ddb5c7
Author: Pavel Yaskevich <xe...@apache.org>
Authored: Wed Aug 15 14:00:28 2012 +0300
Committer: Pavel Yaskevich <xe...@apache.org>
Committed: Fri Aug 17 01:54:13 2012 +0300
----------------------------------------------------------------------
CHANGES.txt | 1 +
interface/cassandra.thrift | 7 ++-
src/java/org/apache/cassandra/cli/CliClient.java | 49 +--------------
src/java/org/apache/cassandra/cli/CliMain.java | 2 +-
.../org/apache/cassandra/cql/QueryProcessor.java | 50 +--------------
.../org/apache/cassandra/cql3/CQLStatement.java | 5 +-
.../org/apache/cassandra/cql3/QueryProcessor.java | 10 +--
.../cql3/statements/CreateKeyspaceStatement.java | 3 +-
.../cql3/statements/DropKeyspaceStatement.java | 3 +-
.../cql3/statements/SchemaAlteringStatement.java | 46 +------------
.../apache/cassandra/thrift/CassandraServer.java | 16 -----
.../cassandra/transport/messages/ErrorMessage.java | 4 -
.../cassandra/transport/messages/QueryMessage.java | 4 +-
13 files changed, 24 insertions(+), 176 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cassandra/blob/71f5d91a/CHANGES.txt
----------------------------------------------------------------------
diff --git a/CHANGES.txt b/CHANGES.txt
index 75de54e..39c92b1 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -37,6 +37,7 @@
* improve DynamicEndpointSnitch by using reservoir sampling (CASSANDRA-4038)
* (cql3) Add support for 2ndary indexes (CASSANDRA-3680)
* (cql3) fix defining more than one PK to be invalid (CASSANDRA-4477)
+ * remove schema agreement checking from all external APIs (Thrift, CQL and CQL3) (CASSANDRA-4487)
1.1.4
http://git-wip-us.apache.org/repos/asf/cassandra/blob/71f5d91a/interface/cassandra.thrift
----------------------------------------------------------------------
diff --git a/interface/cassandra.thrift b/interface/cassandra.thrift
index 5e933d7..1f735e6 100644
--- a/interface/cassandra.thrift
+++ b/interface/cassandra.thrift
@@ -158,7 +158,12 @@ exception AuthorizationException {
1: required string why
}
-/** schemas are not in agreement across all nodes */
+/**
+ * NOTE: This up outdated exception left for backward compatibility reasons,
+ * no actual schema agreement validation is done starting from Cassandra 1.2
+ *
+ * schemas are not in agreement across all nodes
+ */
exception SchemaDisagreementException {
}
http://git-wip-us.apache.org/repos/asf/cassandra/blob/71f5d91a/src/java/org/apache/cassandra/cli/CliClient.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/cli/CliClient.java b/src/java/org/apache/cassandra/cli/CliClient.java
index f2f492a..176f70a 100644
--- a/src/java/org/apache/cassandra/cli/CliClient.java
+++ b/src/java/org/apache/cassandra/cli/CliClient.java
@@ -198,7 +198,7 @@ public class CliClient
}
// Execute a CLI Statement
- public void executeCLIStatement(String statement) throws CharacterCodingException, TException, TimedOutException, NotFoundException, NoSuchFieldException, InvalidRequestException, UnavailableException, InstantiationException, IllegalAccessException, ClassNotFoundException, SchemaDisagreementException
+ public void executeCLIStatement(String statement) throws CharacterCodingException, TException, TimedOutException, NotFoundException, NoSuchFieldException, InvalidRequestException, UnavailableException, InstantiationException, IllegalAccessException, ClassNotFoundException
{
Tree tree = CliCompiler.compileQuery(statement);
try
@@ -1006,7 +1006,6 @@ public class CliClient
{
String mySchemaVersion = thriftClient.system_add_keyspace(updateKsDefAttributes(statement, ksDef));
sessionState.out.println(mySchemaVersion);
- validateSchemaIsSettled(mySchemaVersion);
keyspacesMap.put(keyspaceName, thriftClient.describe_keyspace(keyspaceName));
}
@@ -1037,7 +1036,6 @@ public class CliClient
{
String mySchemaVersion = thriftClient.system_add_column_family(updateCfDefAttributes(statement, cfDef));
sessionState.out.println(mySchemaVersion);
- validateSchemaIsSettled(mySchemaVersion);
keyspacesMap.put(keySpace, thriftClient.describe_keyspace(keySpace));
}
catch (InvalidRequestException e)
@@ -1068,7 +1066,6 @@ public class CliClient
String mySchemaVersion = thriftClient.system_update_keyspace(updatedKsDef);
sessionState.out.println(mySchemaVersion);
- validateSchemaIsSettled(mySchemaVersion);
keyspacesMap.remove(keyspaceName);
getKSMetaData(keySpace);
}
@@ -1103,7 +1100,6 @@ public class CliClient
String mySchemaVersion = thriftClient.system_update_column_family(updateCfDefAttributes(statement, cfDef));
sessionState.out.println(mySchemaVersion);
- validateSchemaIsSettled(mySchemaVersion);
keyspacesMap.put(keySpace, thriftClient.describe_keyspace(keySpace));
}
catch (InvalidRequestException e)
@@ -1293,7 +1289,6 @@ public class CliClient
String keyspaceName = CliCompiler.getKeySpace(statement, thriftClient.describe_keyspaces());
String version = thriftClient.system_drop_keyspace(keyspaceName);
sessionState.out.println(version);
- validateSchemaIsSettled(version);
if (keyspaceName.equals(keySpace)) //we just deleted the keyspace we were authenticated too
keySpace = null;
@@ -1316,7 +1311,6 @@ public class CliClient
String cfName = CliCompiler.getColumnFamily(statement, keyspacesMap.get(keySpace).cf_defs);
String mySchemaVersion = thriftClient.system_drop_column_family(cfName);
sessionState.out.println(mySchemaVersion);
- validateSchemaIsSettled(mySchemaVersion);
}
private void executeList(Tree statement)
@@ -1466,7 +1460,6 @@ public class CliClient
String mySchemaVersion = thriftClient.system_update_column_family(cfDef);
sessionState.out.println(mySchemaVersion);
- validateSchemaIsSettled(mySchemaVersion);
keyspacesMap.put(keySpace, thriftClient.describe_keyspace(keySpace));
}
@@ -2898,46 +2891,6 @@ public class CliClient
}
}
- /** validates schema is propagated to all nodes */
- private void validateSchemaIsSettled(String currentVersionId)
- {
- sessionState.out.println("Waiting for schema agreement...");
- Map<String, List<String>> versions = null;
-
- long limit = System.currentTimeMillis() + sessionState.schema_mwt;
- boolean inAgreement = false;
- outer:
- while (limit - System.currentTimeMillis() >= 0 && !inAgreement)
- {
- try
- {
- versions = thriftClient.describe_schema_versions(); // getting schema version for nodes of the ring
- }
- catch (Exception e)
- {
- sessionState.err.println((e instanceof InvalidRequestException) ? ((InvalidRequestException) e).getWhy() : e.getMessage());
- continue;
- }
-
- for (String version : versions.keySet())
- {
- if (!version.equals(currentVersionId) && !version.equals(StorageProxy.UNREACHABLE))
- continue outer;
- }
- inAgreement = true;
- }
-
- if (versions.containsKey(StorageProxy.UNREACHABLE))
- sessionState.err.printf("Warning: unreachable nodes %s", Joiner.on(", ").join(versions.get(StorageProxy.UNREACHABLE)));
- if (!inAgreement)
- {
- sessionState.err.printf("The schema has not settled in %d seconds; further migrations are ill-advised until it does.%nVersions are %s%n",
- sessionState.schema_mwt / 1000, FBUtilities.toString(versions));
- System.exit(-1);
- }
- sessionState.out.println("... schemas agree across the cluster");
- }
-
private static class CfDefNamesComparator implements Comparator<CfDef>
{
public int compare(CfDef a, CfDef b)
http://git-wip-us.apache.org/repos/asf/cassandra/blob/71f5d91a/src/java/org/apache/cassandra/cli/CliMain.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/cli/CliMain.java b/src/java/org/apache/cassandra/cli/CliMain.java
index ff73aea..ac7a3c3 100644
--- a/src/java/org/apache/cassandra/cli/CliMain.java
+++ b/src/java/org/apache/cassandra/cli/CliMain.java
@@ -206,7 +206,7 @@ public class CliMain
completer.setCandidateStrings(strs);
}
- public static void processStatement(String query) throws CharacterCodingException, ClassNotFoundException, TException, TimedOutException, SchemaDisagreementException, NotFoundException, InvalidRequestException, NoSuchFieldException, UnavailableException, IllegalAccessException, InstantiationException
+ public static void processStatement(String query) throws CharacterCodingException, ClassNotFoundException, TException, TimedOutException, NotFoundException, InvalidRequestException, NoSuchFieldException, UnavailableException, IllegalAccessException, InstantiationException
{
cliClient.executeCLIStatement(query);
}
http://git-wip-us.apache.org/repos/asf/cassandra/blob/71f5d91a/src/java/org/apache/cassandra/cql/QueryProcessor.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/cql/QueryProcessor.java b/src/java/org/apache/cassandra/cql/QueryProcessor.java
index b23cf44..5cd2d1d 100644
--- a/src/java/org/apache/cassandra/cql/QueryProcessor.java
+++ b/src/java/org/apache/cassandra/cql/QueryProcessor.java
@@ -62,8 +62,6 @@ public class QueryProcessor
private static final Logger logger = LoggerFactory.getLogger(QueryProcessor.class);
- private static final long timeLimitForSchemaAgreement = 10 * 1000;
-
public static final String DEFAULT_KEY_NAME = bufferToString(CFMetaData.DEFAULT_KEY_NAME);
private static List<org.apache.cassandra.db.Row> getSlice(CFMetaData metadata, SelectStatement select, List<ByteBuffer> variables)
@@ -399,13 +397,6 @@ public class QueryProcessor
throw new InvalidRequestException("range finish must come after start in traversal order");
}
- // Copypasta from CassandraServer (where it is private).
- private static void validateSchemaAgreement() throws SchemaDisagreementException
- {
- if (describeSchemaVersions().size() > 1)
- throw new SchemaDisagreementException();
- }
-
private static Map<String, List<String>> describeSchemaVersions()
{
// unreachable hosts don't count towards disagreement
@@ -414,7 +405,7 @@ public class QueryProcessor
}
public static CqlResult processStatement(CQLStatement statement,ClientState clientState, List<ByteBuffer> variables )
- throws UnavailableException, InvalidRequestException, TimedOutException, SchemaDisagreementException
+ throws UnavailableException, InvalidRequestException, TimedOutException
{
String keyspace = null;
@@ -663,7 +654,6 @@ public class QueryProcessor
create.validate();
ThriftValidation.validateKeyspaceNotSystem(create.getName());
clientState.hasKeyspaceSchemaAccess(Permission.WRITE);
- validateSchemaAgreement();
try
{
@@ -672,7 +662,6 @@ public class QueryProcessor
create.getStrategyOptions());
ThriftValidation.validateKeyspaceNotYetExisting(ksm.name);
MigrationManager.announceNewKeyspace(ksm);
- validateSchemaIsSettled();
}
catch (ConfigurationException e)
{
@@ -687,12 +676,10 @@ public class QueryProcessor
case CREATE_COLUMNFAMILY:
CreateColumnFamilyStatement createCf = (CreateColumnFamilyStatement)statement.statement;
clientState.hasColumnFamilySchemaAccess(Permission.WRITE);
- validateSchemaAgreement();
try
{
MigrationManager.announceNewColumnFamily(createCf.getCFMetaData(keyspace, variables));
- validateSchemaIsSettled();
}
catch (ConfigurationException e)
{
@@ -707,7 +694,6 @@ public class QueryProcessor
case CREATE_INDEX:
CreateIndexStatement createIdx = (CreateIndexStatement)statement.statement;
clientState.hasColumnFamilySchemaAccess(Permission.WRITE);
- validateSchemaAgreement();
CFMetaData oldCfm = Schema.instance.getCFMetaData(keyspace, createIdx.getColumnFamily());
if (oldCfm == null)
throw new InvalidRequestException("No such column family: " + createIdx.getColumnFamily());
@@ -737,7 +723,6 @@ public class QueryProcessor
{
cfm.addDefaultIndexNames();
MigrationManager.announceColumnFamilyUpdate(cfm);
- validateSchemaIsSettled();
}
catch (ConfigurationException e)
{
@@ -752,12 +737,10 @@ public class QueryProcessor
case DROP_INDEX:
DropIndexStatement dropIdx = (DropIndexStatement)statement.statement;
clientState.hasColumnFamilySchemaAccess(Permission.WRITE);
- validateSchemaAgreement();
try
{
MigrationManager.announceColumnFamilyUpdate(dropIdx.generateCFMetadataUpdate(clientState.getKeyspace()));
- validateSchemaIsSettled();
}
catch (ConfigurationException e)
{
@@ -779,12 +762,10 @@ public class QueryProcessor
String deleteKeyspace = (String)statement.statement;
ThriftValidation.validateKeyspaceNotSystem(deleteKeyspace);
clientState.hasKeyspaceSchemaAccess(Permission.WRITE);
- validateSchemaAgreement();
try
{
MigrationManager.announceKeyspaceDrop(deleteKeyspace);
- validateSchemaIsSettled();
}
catch (ConfigurationException e)
{
@@ -799,12 +780,10 @@ public class QueryProcessor
case DROP_COLUMNFAMILY:
String deleteColumnFamily = (String)statement.statement;
clientState.hasColumnFamilySchemaAccess(Permission.WRITE);
- validateSchemaAgreement();
try
{
MigrationManager.announceColumnFamilyDrop(keyspace, deleteColumnFamily);
- validateSchemaIsSettled();
}
catch (ConfigurationException e)
{
@@ -821,12 +800,10 @@ public class QueryProcessor
validateColumnFamily(keyspace, alterTable.columnFamily);
clientState.hasColumnFamilyAccess(alterTable.columnFamily, Permission.WRITE);
- validateSchemaAgreement();
try
{
MigrationManager.announceColumnFamilyUpdate(alterTable.getCFMetaData(keyspace));
- validateSchemaIsSettled();
}
catch (ConfigurationException e)
{
@@ -842,7 +819,7 @@ public class QueryProcessor
}
public static CqlResult process(String queryString, ClientState clientState)
- throws UnavailableException, InvalidRequestException, TimedOutException, SchemaDisagreementException
+ throws UnavailableException, InvalidRequestException, TimedOutException
{
logger.trace("CQL QUERY: {}", queryString);
return processStatement(getStatement(queryString), clientState, new ArrayList<ByteBuffer>(0));
@@ -866,7 +843,7 @@ public class QueryProcessor
}
public static CqlResult processPrepared(CQLStatement statement, ClientState clientState, List<ByteBuffer> variables)
- throws UnavailableException, InvalidRequestException, TimedOutException, SchemaDisagreementException
+ throws UnavailableException, InvalidRequestException, TimedOutException
{
// Check to see if there are any bound variables to verify
if (!(variables.isEmpty() && (statement.boundTerms == 0)))
@@ -948,27 +925,6 @@ public class QueryProcessor
}
}
- private static void validateSchemaIsSettled() throws SchemaDisagreementException
- {
- long limit = System.currentTimeMillis() + timeLimitForSchemaAgreement;
-
- outer:
- while (limit - System.currentTimeMillis() >= 0)
- {
- String currentVersionId = Schema.instance.getVersion().toString();
- for (String version : describeSchemaVersions().keySet())
- {
- if (!version.equals(currentVersionId))
- continue outer;
- }
-
- // schemas agree
- return;
- }
-
- throw new SchemaDisagreementException();
- }
-
private static void validateCountOperation(SelectStatement select) throws InvalidRequestException
{
if (select.isWildcard())
http://git-wip-us.apache.org/repos/asf/cassandra/blob/71f5d91a/src/java/org/apache/cassandra/cql3/CQLStatement.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/cql3/CQLStatement.java b/src/java/org/apache/cassandra/cql3/CQLStatement.java
index 5cb6288..c1daa52 100644
--- a/src/java/org/apache/cassandra/cql3/CQLStatement.java
+++ b/src/java/org/apache/cassandra/cql3/CQLStatement.java
@@ -23,7 +23,6 @@ import java.util.List;
import org.apache.cassandra.transport.messages.ResultMessage;
import org.apache.cassandra.service.ClientState;
import org.apache.cassandra.thrift.InvalidRequestException;
-import org.apache.cassandra.thrift.SchemaDisagreementException;
import org.apache.cassandra.thrift.TimedOutException;
import org.apache.cassandra.thrift.UnavailableException;
@@ -47,7 +46,7 @@ public interface CQLStatement
*
* @param state the current client state
*/
- public void validate(ClientState state) throws InvalidRequestException, SchemaDisagreementException;
+ public void validate(ClientState state) throws InvalidRequestException;
/**
* Execute the statement and return the resulting result or null if there is no result.
@@ -56,5 +55,5 @@ public interface CQLStatement
* @param variables the values for bounded variables. The implementation
* can assume that each bound term have a corresponding value.
*/
- public ResultMessage execute(ClientState state, List<ByteBuffer> variables) throws InvalidRequestException, UnavailableException, TimedOutException, SchemaDisagreementException;
+ public ResultMessage execute(ClientState state, List<ByteBuffer> variables) throws InvalidRequestException, UnavailableException, TimedOutException;
}
http://git-wip-us.apache.org/repos/asf/cassandra/blob/71f5d91a/src/java/org/apache/cassandra/cql3/QueryProcessor.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/cql3/QueryProcessor.java b/src/java/org/apache/cassandra/cql3/QueryProcessor.java
index 55c9450..d5eb486 100644
--- a/src/java/org/apache/cassandra/cql3/QueryProcessor.java
+++ b/src/java/org/apache/cassandra/cql3/QueryProcessor.java
@@ -100,7 +100,7 @@ public class QueryProcessor
}
private static ResultMessage processStatement(CQLStatement statement, ClientState clientState, List<ByteBuffer> variables)
- throws UnavailableException, InvalidRequestException, TimedOutException, SchemaDisagreementException
+ throws UnavailableException, InvalidRequestException, TimedOutException
{
statement.checkAccess(clientState);
statement.validate(clientState);
@@ -109,7 +109,7 @@ public class QueryProcessor
}
public static ResultMessage process(String queryString, ClientState clientState)
- throws UnavailableException, InvalidRequestException, TimedOutException, SchemaDisagreementException
+ throws UnavailableException, InvalidRequestException, TimedOutException
{
logger.trace("CQL QUERY: {}", queryString);
return processStatement(getStatement(queryString, clientState).statement, clientState, Collections.<ByteBuffer>emptyList());
@@ -138,10 +138,6 @@ public class QueryProcessor
{
throw new RuntimeException(e);
}
- catch (SchemaDisagreementException e)
- {
- throw new RuntimeException(e);
- }
}
public static UntypedResultSet resultify(String query, Row row)
@@ -175,7 +171,7 @@ public class QueryProcessor
}
public static ResultMessage processPrepared(CQLStatement statement, ClientState clientState, List<ByteBuffer> variables)
- throws UnavailableException, InvalidRequestException, TimedOutException, SchemaDisagreementException
+ throws UnavailableException, InvalidRequestException, TimedOutException
{
// Check to see if there are any bound variables to verify
if (!(variables.isEmpty() && (statement.getBoundsTerms() == 0)))
http://git-wip-us.apache.org/repos/asf/cassandra/blob/71f5d91a/src/java/org/apache/cassandra/cql3/statements/CreateKeyspaceStatement.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/cql3/statements/CreateKeyspaceStatement.java b/src/java/org/apache/cassandra/cql3/statements/CreateKeyspaceStatement.java
index 9e53f23..262c6aa 100644
--- a/src/java/org/apache/cassandra/cql3/statements/CreateKeyspaceStatement.java
+++ b/src/java/org/apache/cassandra/cql3/statements/CreateKeyspaceStatement.java
@@ -29,7 +29,6 @@ import org.apache.cassandra.service.ClientState;
import org.apache.cassandra.service.MigrationManager;
import org.apache.cassandra.service.StorageService;
import org.apache.cassandra.thrift.InvalidRequestException;
-import org.apache.cassandra.thrift.SchemaDisagreementException;
import org.apache.cassandra.thrift.ThriftValidation;
/** A <code>CREATE KEYSPACE</code> statement parsed from a CQL query. */
@@ -62,7 +61,7 @@ public class CreateKeyspaceStatement extends SchemaAlteringStatement
* @throws InvalidRequestException if arguments are missing or unacceptable
*/
@Override
- public void validate(ClientState state) throws InvalidRequestException, SchemaDisagreementException
+ public void validate(ClientState state) throws InvalidRequestException
{
super.validate(state);
ThriftValidation.validateKeyspaceNotSystem(name);
http://git-wip-us.apache.org/repos/asf/cassandra/blob/71f5d91a/src/java/org/apache/cassandra/cql3/statements/DropKeyspaceStatement.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/cql3/statements/DropKeyspaceStatement.java b/src/java/org/apache/cassandra/cql3/statements/DropKeyspaceStatement.java
index 9c3b345..af9b0a2 100644
--- a/src/java/org/apache/cassandra/cql3/statements/DropKeyspaceStatement.java
+++ b/src/java/org/apache/cassandra/cql3/statements/DropKeyspaceStatement.java
@@ -22,7 +22,6 @@ import org.apache.cassandra.config.ConfigurationException;
import org.apache.cassandra.service.ClientState;
import org.apache.cassandra.service.MigrationManager;
import org.apache.cassandra.thrift.InvalidRequestException;
-import org.apache.cassandra.thrift.SchemaDisagreementException;
import org.apache.cassandra.thrift.ThriftValidation;
public class DropKeyspaceStatement extends SchemaAlteringStatement
@@ -36,7 +35,7 @@ public class DropKeyspaceStatement extends SchemaAlteringStatement
}
@Override
- public void validate(ClientState state) throws InvalidRequestException, SchemaDisagreementException
+ public void validate(ClientState state) throws InvalidRequestException
{
super.validate(state);
ThriftValidation.validateKeyspaceNotSystem(keyspace);
http://git-wip-us.apache.org/repos/asf/cassandra/blob/71f5d91a/src/java/org/apache/cassandra/cql3/statements/SchemaAlteringStatement.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/cql3/statements/SchemaAlteringStatement.java b/src/java/org/apache/cassandra/cql3/statements/SchemaAlteringStatement.java
index c393eb2..8d85351 100644
--- a/src/java/org/apache/cassandra/cql3/statements/SchemaAlteringStatement.java
+++ b/src/java/org/apache/cassandra/cql3/statements/SchemaAlteringStatement.java
@@ -30,7 +30,6 @@ import org.apache.cassandra.cql3.CFName;
import org.apache.cassandra.service.ClientState;
import org.apache.cassandra.service.StorageProxy;
import org.apache.cassandra.thrift.InvalidRequestException;
-import org.apache.cassandra.thrift.SchemaDisagreementException;
import com.google.common.base.Predicates;
import com.google.common.collect.Maps;
@@ -79,12 +78,10 @@ public abstract class SchemaAlteringStatement extends CFStatement implements CQL
}
@Override
- public void validate(ClientState state) throws InvalidRequestException, SchemaDisagreementException
- {
- validateSchemaAgreement();
- }
+ public void validate(ClientState state) throws InvalidRequestException
+ {}
- public ResultMessage execute(ClientState state, List<ByteBuffer> variables) throws InvalidRequestException, SchemaDisagreementException
+ public ResultMessage execute(ClientState state, List<ByteBuffer> variables) throws InvalidRequestException
{
try
{
@@ -96,42 +93,7 @@ public abstract class SchemaAlteringStatement extends CFStatement implements CQL
ex.initCause(e);
throw ex;
}
- validateSchemaIsSettled();
- return null;
- }
- // Copypasta from CassandraServer (where it is private).
- private static void validateSchemaAgreement() throws SchemaDisagreementException
- {
- if (describeSchemaVersions().size() > 1)
- throw new SchemaDisagreementException();
- }
-
- private static Map<String, List<String>> describeSchemaVersions()
- {
- // unreachable hosts don't count towards disagreement
- return Maps.filterKeys(StorageProxy.describeSchemaVersions(),
- Predicates.not(Predicates.equalTo(StorageProxy.UNREACHABLE)));
- }
-
- private static void validateSchemaIsSettled() throws SchemaDisagreementException
- {
- long limit = System.currentTimeMillis() + timeLimitForSchemaAgreement;
-
- outer:
- while (limit - System.currentTimeMillis() >= 0)
- {
- String currentVersionId = Schema.instance.getVersion().toString();
- for (String version : describeSchemaVersions().keySet())
- {
- if (!version.equals(currentVersionId))
- continue outer;
- }
-
- // schemas agree
- return;
- }
-
- throw new SchemaDisagreementException();
+ return null;
}
}
http://git-wip-us.apache.org/repos/asf/cassandra/blob/71f5d91a/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 0b5205a..1437cb8 100644
--- a/src/java/org/apache/cassandra/thrift/CassandraServer.java
+++ b/src/java/org/apache/cassandra/thrift/CassandraServer.java
@@ -918,8 +918,6 @@ public class CassandraServer implements Cassandra.Iface
logger.debug("add_column_family");
state().hasColumnFamilySchemaAccess(Permission.WRITE);
- validateSchemaAgreement();
-
try
{
cf_def.unsetId(); // explicitly ignore any id set by client (Hector likes to set zero)
@@ -945,7 +943,6 @@ public class CassandraServer implements Cassandra.Iface
ClientState cState = state();
cState.hasColumnFamilySchemaAccess(Permission.WRITE);
- validateSchemaAgreement();
try
{
@@ -966,7 +963,6 @@ public class CassandraServer implements Cassandra.Iface
logger.debug("add_keyspace");
ThriftValidation.validateKeyspaceNotSystem(ks_def.name);
state().hasKeyspaceSchemaAccess(Permission.WRITE);
- validateSchemaAgreement();
ThriftValidation.validateKeyspaceNotYetExisting(ks_def.name);
// generate a meaningful error if the user setup keyspace and/or column definition incorrectly
@@ -1005,7 +1001,6 @@ public class CassandraServer implements Cassandra.Iface
logger.debug("drop_keyspace");
ThriftValidation.validateKeyspaceNotSystem(keyspace);
state().hasKeyspaceSchemaAccess(Permission.WRITE);
- validateSchemaAgreement();
try
{
@@ -1032,7 +1027,6 @@ public class CassandraServer implements Cassandra.Iface
ThriftValidation.validateTable(ks_def.name);
if (ks_def.getCf_defs() != null && ks_def.getCf_defs().size() > 0)
throw new InvalidRequestException("Keyspace update must not contain any column family definitions.");
- validateSchemaAgreement();
try
{
@@ -1057,7 +1051,6 @@ public class CassandraServer implements Cassandra.Iface
CFMetaData oldCfm = Schema.instance.getCFMetaData(cf_def.keyspace, cf_def.name);
if (oldCfm == null)
throw new InvalidRequestException("Could not find column family definition to modify.");
- validateSchemaAgreement();
try
{
@@ -1075,15 +1068,6 @@ public class CassandraServer implements Cassandra.Iface
}
}
- private void validateSchemaAgreement() throws SchemaDisagreementException
- {
- // unreachable hosts don't count towards disagreement
- Map<String, List<String>> versions = Maps.filterKeys(StorageProxy.describeSchemaVersions(),
- Predicates.not(Predicates.equalTo(StorageProxy.UNREACHABLE)));
- if (versions.size() > 1)
- throw new SchemaDisagreementException();
- }
-
public void truncate(String cfname) throws InvalidRequestException, UnavailableException, TimedOutException, TException
{
ClientState cState = state();
http://git-wip-us.apache.org/repos/asf/cassandra/blob/71f5d91a/src/java/org/apache/cassandra/transport/messages/ErrorMessage.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/transport/messages/ErrorMessage.java b/src/java/org/apache/cassandra/transport/messages/ErrorMessage.java
index 1cec3fc..7204f97 100644
--- a/src/java/org/apache/cassandra/transport/messages/ErrorMessage.java
+++ b/src/java/org/apache/cassandra/transport/messages/ErrorMessage.java
@@ -27,7 +27,6 @@ import org.apache.cassandra.transport.Message;
import org.apache.cassandra.transport.ProtocolException;
import org.apache.cassandra.thrift.AuthenticationException;
import org.apache.cassandra.thrift.InvalidRequestException;
-import org.apache.cassandra.thrift.SchemaDisagreementException;
import org.apache.cassandra.thrift.TimedOutException;
import org.apache.cassandra.thrift.UnavailableException;
@@ -40,7 +39,6 @@ import org.apache.cassandra.thrift.UnavailableException;
* 0x0002: Authentication error
* 0x0100: Unavailable exception
* 0x0101: Timeout exception
- * 0x0102: Schema disagreement exception
* 0x0200: Request exception
*/
public class ErrorMessage extends Message.Response
@@ -81,8 +79,6 @@ public class ErrorMessage extends Message.Response
return new ErrorMessage(0x0101, msg);
else if (t instanceof UnavailableException)
return new ErrorMessage(0x0100, msg);
- else if (t instanceof SchemaDisagreementException)
- return new ErrorMessage(0x0102, msg);
else if (t instanceof InvalidRequestException)
return new ErrorMessage(0x0200, msg);
else if (t instanceof ProtocolException)
http://git-wip-us.apache.org/repos/asf/cassandra/blob/71f5d91a/src/java/org/apache/cassandra/transport/messages/QueryMessage.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/transport/messages/QueryMessage.java b/src/java/org/apache/cassandra/transport/messages/QueryMessage.java
index 6fcdc67..2aefcb8 100644
--- a/src/java/org/apache/cassandra/transport/messages/QueryMessage.java
+++ b/src/java/org/apache/cassandra/transport/messages/QueryMessage.java
@@ -22,7 +22,6 @@ import org.jboss.netty.buffer.ChannelBuffer;
import org.apache.cassandra.cql3.QueryProcessor;
import org.apache.cassandra.transport.*;
import org.apache.cassandra.thrift.InvalidRequestException;
-import org.apache.cassandra.thrift.SchemaDisagreementException;
import org.apache.cassandra.thrift.TimedOutException;
import org.apache.cassandra.thrift.UnavailableException;
@@ -68,8 +67,7 @@ public class QueryMessage extends Message.Request
{
if (!((e instanceof UnavailableException)
|| (e instanceof InvalidRequestException)
- || (e instanceof TimedOutException)
- || (e instanceof SchemaDisagreementException)))
+ || (e instanceof TimedOutException)))
{
logger.error("Unexpected error during query", e);
}