Author: eevans
Date: Tue Sep 28 23:00:33 2010
New Revision: 1002398
URL: http://svn.apache.org/viewvc?rev=1002398&view=rev
Log:
Rather than 3 ThreadLocals (sure to continue to expand), use 1.
Patch by Stu Hood; reviewed by eevans for CASSANDRA-1271
Modified:
cassandra/trunk/src/java/org/apache/cassandra/avro/CassandraServer.java
cassandra/trunk/src/java/org/apache/cassandra/service/AbstractCassandraDaemon.java
cassandra/trunk/src/java/org/apache/cassandra/service/ClientState.java
cassandra/trunk/src/java/org/apache/cassandra/thrift/CassandraServer.java
Modified:
cassandra/trunk/src/java/org/apache/cassandra/avro/CassandraServer.java
URL:
http://svn.apache.org/viewvc/cassandra/trunk/src/java/org/apache/cassandra/avro/CassandraServer.java?rev=1002398&r1=1002397&r2=1002398&view=diff
==============================================================================
--- cassandra/trunk/src/java/org/apache/cassandra/avro/CassandraServer.java
(original)
+++ cassandra/trunk/src/java/org/apache/cassandra/avro/CassandraServer.java Tue
Sep 28 23:00:33 2010
@@ -97,7 +97,14 @@ public class CassandraServer implements
public final static String D_COLDEF_INDEXNAME = null;
// thread local state containing session information
- final ClientState clientState = new ClientState();
+ public final ThreadLocal<ClientState> clientState = new
ThreadLocal<ClientState>()
+ {
+ @Override
+ public ClientState initialValue()
+ {
+ return new ClientState();
+ }
+ };
/*
* RequestScheduler to perform the scheduling of incoming requests
@@ -113,20 +120,27 @@ public class CassandraServer implements
{
try
{
- clientState.login(auth_request.credentials);
+ state().login(auth_request.credentials);
}
- catch (org.apache.cassandra.thrift.AuthenticationException thriftE) {
+ catch (org.apache.cassandra.thrift.AuthenticationException thriftE)
+ {
throw new AuthenticationException();
}
return null;
}
+ public ClientState state()
+ {
+ return clientState.get();
+ }
+
+ @Override
public ColumnOrSuperColumn get(ByteBuffer key, ColumnPath columnPath,
ConsistencyLevel consistencyLevel)
throws AvroRemoteException, InvalidRequestException, NotFoundException,
UnavailableException, TimedOutException {
if (logger.isDebugEnabled())
logger.debug("get");
- AvroValidation.validateColumnPath(clientState.getKeyspace(),
columnPath);
+ AvroValidation.validateColumnPath(state().getKeyspace(), columnPath);
// FIXME: This is repetitive.
byte[] column, super_column;
@@ -136,7 +150,7 @@ public class CassandraServer implements
QueryPath path = new QueryPath(columnPath.column_family.toString(),
column == null ? null : super_column);
List<byte[]> nameAsList = Arrays.asList(column == null ? super_column
: column);
AvroValidation.validateKey(key.array());
- ReadCommand command = new
SliceByNamesReadCommand(clientState.getKeyspace(), key.array(), path,
nameAsList);
+ ReadCommand command = new
SliceByNamesReadCommand(state().getKeyspace(), key.array(), path, nameAsList);
Map<DecoratedKey<?>, ColumnFamily> cfamilies =
readColumnFamily(Arrays.asList(command), consistencyLevel);
ColumnFamily cf =
cfamilies.get(StorageService.getPartitioner().decorateKey(command.key));
@@ -301,7 +315,7 @@ public class CassandraServer implements
GenericArray<ByteBuffer> keys = new GenericData.Array<ByteBuffer>(1,
bytesArray);
keys.add(key);
- return multigetSliceInternal(clientState.getKeyspace(), keys,
columnParent, predicate, consistencyLevel).iterator().next().columns;
+ return multigetSliceInternal(state().getKeyspace(), keys,
columnParent, predicate, consistencyLevel).iterator().next().columns;
}
private List<CoscsMapEntry> multigetSliceInternal(String keyspace,
List<ByteBuffer> keys,
@@ -376,7 +390,7 @@ public class CassandraServer implements
if (logger.isDebugEnabled())
logger.debug("multiget_slice");
- return multigetSliceInternal(clientState.getKeyspace(), keys,
columnParent, predicate, consistencyLevel);
+ return multigetSliceInternal(state().getKeyspace(), keys,
columnParent, predicate, consistencyLevel);
}
public Void insert(ByteBuffer key, ColumnParent parent, Column column,
ConsistencyLevel consistencyLevel)
@@ -386,10 +400,10 @@ public class CassandraServer implements
logger.debug("insert");
AvroValidation.validateKey(key.array());
- AvroValidation.validateColumnParent(clientState.getKeyspace(), parent);
- AvroValidation.validateColumn(clientState.getKeyspace(), parent,
column);
+ AvroValidation.validateColumnParent(state().getKeyspace(), parent);
+ AvroValidation.validateColumn(state().getKeyspace(), parent, column);
- RowMutation rm = new RowMutation(clientState.getKeyspace(),
key.array());
+ RowMutation rm = new RowMutation(state().getKeyspace(), key.array());
try
{
rm.add(new QueryPath(parent.column_family.toString(),
@@ -415,9 +429,9 @@ public class CassandraServer implements
logger.debug("remove");
AvroValidation.validateKey(key.array());
- AvroValidation.validateColumnPath(clientState.getKeyspace(),
columnPath);
+ AvroValidation.validateColumnPath(state().getKeyspace(), columnPath);
- RowMutation rm = new RowMutation(clientState.getKeyspace(),
key.array());
+ RowMutation rm = new RowMutation(state().getKeyspace(), key.array());
byte[] superName = columnPath.super_column == null ? null :
columnPath.super_column.array();
rm.delete(new QueryPath(columnPath.column_family.toString(),
superName), unavronateClock(timestamp));
@@ -465,9 +479,9 @@ public class CassandraServer implements
String cfName = cfMutations.getKey().toString();
for (Mutation mutation : cfMutations.getValue())
- AvroValidation.validateMutation(clientState.getKeyspace(),
cfName, mutation);
+ AvroValidation.validateMutation(state().getKeyspace(),
cfName, mutation);
}
-
rowMutations.add(getRowMutationFromMutations(clientState.getKeyspace(),
pair.key.array(), cfToMutations));
+
rowMutations.add(getRowMutationFromMutations(state().getKeyspace(),
pair.key.array(), cfToMutations));
}
try
@@ -612,7 +626,7 @@ public class CassandraServer implements
throw newInvalidRequestException("Keyspace does not exist");
}
- clientState.setKeyspace(keyspaceStr);
+ state().setKeyspace(keyspaceStr);
return null;
}
@@ -809,7 +823,7 @@ public class CassandraServer implements
{
try
{
- clientState.hasKeyspaceAccess(perm);
+ state().hasKeyspaceAccess(perm);
}
catch (org.apache.cassandra.thrift.InvalidRequestException e)
{
@@ -822,7 +836,7 @@ public class CassandraServer implements
*/
private void schedule()
{
- requestScheduler.queue(Thread.currentThread(),
clientState.getSchedulingValue());
+ requestScheduler.queue(Thread.currentThread(),
state().getSchedulingValue());
}
/**
@@ -894,7 +908,7 @@ public class CassandraServer implements
try
{
- applyMigrationOnStage(new
RenameColumnFamily(clientState.getKeyspace(), old_name.toString(),
new_name.toString()));
+ applyMigrationOnStage(new
RenameColumnFamily(state().getKeyspace(), old_name.toString(),
new_name.toString()));
return DatabaseDescriptor.getDefsVersion().toString();
}
catch (ConfigurationException e)
@@ -913,7 +927,7 @@ public class CassandraServer implements
try
{
- applyMigrationOnStage(new
DropColumnFamily(clientState.getKeyspace(), column_family.toString(), true));
+ applyMigrationOnStage(new DropColumnFamily(state().getKeyspace(),
column_family.toString(), true));
return DatabaseDescriptor.getDefsVersion().toString();
}
catch (ConfigurationException e)
@@ -972,7 +986,7 @@ public class CassandraServer implements
public List<CharSequence> describe_splits(CharSequence cfName,
CharSequence start_token, CharSequence end_token, int keys_per_split) {
Token.TokenFactory<?> tf =
StorageService.getPartitioner().getTokenFactory();
- List<Token> tokens =
StorageService.instance.getSplits(clientState.getKeyspace(), cfName.toString(),
new Range(tf.fromString(start_token.toString()),
tf.fromString(end_token.toString())), keys_per_split);
+ List<Token> tokens =
StorageService.instance.getSplits(state().getKeyspace(), cfName.toString(), new
Range(tf.fromString(start_token.toString()),
tf.fromString(end_token.toString())), keys_per_split);
List<CharSequence> splits = new ArrayList<CharSequence>(tokens.size());
for (Token token : tokens)
{
@@ -988,7 +1002,7 @@ public class CassandraServer implements
logger.debug("multiget_count");
checkKeyspaceAndLoginAuthorized(Permission.READ_VALUE);
- String keyspace = clientState.getKeyspace();
+ String keyspace = state().getKeyspace();
List<KeyCountMapEntry> counts = new ArrayList<KeyCountMapEntry>();
List<CoscsMapEntry> columnFamiliesMap =
multigetSliceInternal(keyspace, keys, columnParent, predicate,
consistencyLevel);
@@ -1022,13 +1036,13 @@ public class CassandraServer implements
public Void truncate(CharSequence columnFamily) throws
AvroRemoteException, InvalidRequestException, UnavailableException
{
if (logger.isDebugEnabled())
- logger.debug("truncating {} in {}", columnFamily,
clientState.getKeyspace());
+ logger.debug("truncating {} in {}", columnFamily,
state().getKeyspace());
try
{
- clientState.hasKeyspaceAccess(Permission.WRITE_VALUE);
+ state().hasKeyspaceAccess(Permission.WRITE_VALUE);
schedule();
- StorageProxy.truncateBlocking(clientState.getKeyspace(),
columnFamily.toString());
+ StorageProxy.truncateBlocking(state().getKeyspace(),
columnFamily.toString());
}
catch (org.apache.cassandra.thrift.InvalidRequestException e)
{
@@ -1056,10 +1070,10 @@ public class CassandraServer implements
public List<KeySlice> get_range_slices(ColumnParent column_parent,
SlicePredicate slice_predicate, KeyRange range, ConsistencyLevel
consistency_level)
throws InvalidRequestException, TimedOutException
{
- String keyspace = clientState.getKeyspace();
+ String keyspace = state().getKeyspace();
try
{
- clientState.hasKeyspaceAccess(Permission.READ_VALUE);
+ state().hasKeyspaceAccess(Permission.READ_VALUE);
}
catch (org.apache.cassandra.thrift.InvalidRequestException thriftE)
{
@@ -1125,14 +1139,14 @@ public class CassandraServer implements
try
{
- clientState.hasKeyspaceAccess(Permission.READ_VALUE);
+ state().hasKeyspaceAccess(Permission.READ_VALUE);
}
catch (org.apache.cassandra.thrift.InvalidRequestException thriftE)
{
throw newInvalidRequestException(thriftE);
}
- String keyspace = clientState.getKeyspace();
+ String keyspace = state().getKeyspace();
AvroValidation.validateColumnParent(keyspace, column_parent);
AvroValidation.validatePredicate(keyspace, column_parent,
column_predicate);
AvroValidation.validateIndexClauses(keyspace,
column_parent.column_family.toString(), index_clause);
Modified:
cassandra/trunk/src/java/org/apache/cassandra/service/AbstractCassandraDaemon.java
URL:
http://svn.apache.org/viewvc/cassandra/trunk/src/java/org/apache/cassandra/service/AbstractCassandraDaemon.java?rev=1002398&r1=1002397&r2=1002398&view=diff
==============================================================================
---
cassandra/trunk/src/java/org/apache/cassandra/service/AbstractCassandraDaemon.java
(original)
+++
cassandra/trunk/src/java/org/apache/cassandra/service/AbstractCassandraDaemon.java
Tue Sep 28 23:00:33 2010
@@ -240,8 +240,8 @@ public abstract class AbstractCassandraD
*/
public static class CleaningThreadPool extends ThreadPoolExecutor
implements ThreadPool
{
- private ClientState state;
- public CleaningThreadPool(ClientState state, int minWorkerThread, int
maxWorkerThreads)
+ private ThreadLocal<ClientState> state;
+ public CleaningThreadPool(ThreadLocal<ClientState> state, int
minWorkerThread, int maxWorkerThreads)
{
super(minWorkerThread, maxWorkerThreads, 60, TimeUnit.SECONDS, new
SynchronousQueue<Runnable>());
this.state = state;
@@ -251,7 +251,7 @@ public abstract class AbstractCassandraD
protected void afterExecute(Runnable r, Throwable t)
{
super.afterExecute(r, t);
- state.logout();
+ state.get().logout();
}
/*********************************************************************/
Modified: cassandra/trunk/src/java/org/apache/cassandra/service/ClientState.java
URL:
http://svn.apache.org/viewvc/cassandra/trunk/src/java/org/apache/cassandra/service/ClientState.java?rev=1002398&r1=1002397&r2=1002398&view=diff
==============================================================================
--- cassandra/trunk/src/java/org/apache/cassandra/service/ClientState.java
(original)
+++ cassandra/trunk/src/java/org/apache/cassandra/service/ClientState.java Tue
Sep 28 23:00:33 2010
@@ -40,53 +40,49 @@ public class ClientState
private static Logger logger = LoggerFactory.getLogger(ClientState.class);
// Current user for the session
- private final ThreadLocal<AuthenticatedUser> user = new
ThreadLocal<AuthenticatedUser>()
- {
- @Override
- public AuthenticatedUser initialValue()
- {
- return DatabaseDescriptor.getAuthenticator().defaultUser();
- }
- };
+ private AuthenticatedUser user;
+ private String keyspace;
+ private Set<Permission> keyspaceAccess;
- // Keyspace and keyspace Permissions associated with the session
- private final ThreadLocal<String> keyspace = new ThreadLocal<String>();
- private final ThreadLocal<Set<Permission>> keyspaceAccess = new
ThreadLocal<Set<Permission>>();
+ /**
+ * Construct a new, empty ClientState: can be reused after logout() or
reset().
+ */
+ public ClientState()
+ {
+ reset();
+ }
/**
* Called when the keyspace or user have changed.
*/
private void updateKeyspaceAccess()
{
- if (user.get() == null || keyspace.get() == null)
+ if (user == null || keyspace == null)
// user is not logged in or keyspace is not set
- keyspaceAccess.set(null);
+ keyspaceAccess = null;
else
// authorize the user for the current keyspace
-
keyspaceAccess.set(DatabaseDescriptor.getAuthority().authorize(user.get(),
keyspace.get()));
+ keyspaceAccess = DatabaseDescriptor.getAuthority().authorize(user,
keyspace);
}
public String getKeyspace()
{
- return keyspace.get();
+ return keyspace;
}
public void setKeyspace(String ks)
{
- keyspace.set(ks);
+ keyspace = ks;
updateKeyspaceAccess();
}
public String getSchedulingValue()
{
- String schedulingValue = "default";
switch(DatabaseDescriptor.getRequestSchedulerId())
{
- case keyspace:
- schedulingValue = keyspace.get();
- break;
+ case keyspace: return keyspace;
}
- return schedulingValue;
+ return "default";
}
/**
@@ -97,17 +93,22 @@ public class ClientState
AuthenticatedUser user =
DatabaseDescriptor.getAuthenticator().authenticate(credentials);
if (logger.isDebugEnabled())
logger.debug("logged in: {}", user);
- this.user.set(user);
+ this.user = user;
updateKeyspaceAccess();
}
public void logout()
{
if (logger.isDebugEnabled())
- logger.debug("logged out: {}", user.get());
- user.remove();
- keyspace.remove();
- keyspaceAccess.remove();
+ logger.debug("logged out: {}", user);
+ reset();
+ }
+
+ public void reset()
+ {
+ user = DatabaseDescriptor.getAuthenticator().defaultUser();
+ keyspace = null;
+ keyspaceAccess = null;
}
/**
@@ -115,11 +116,11 @@ public class ClientState
*/
public void hasKeyspaceAccess(Permission perm) throws
InvalidRequestException
{
- if (user.get() == null)
+ if (user == null)
throw new InvalidRequestException("You have not logged in");
- if (keyspaceAccess.get() == null)
+ if (keyspaceAccess == null)
throw new InvalidRequestException("You have not set a keyspace for
this session");
- if (!keyspaceAccess.get().contains(perm))
- throw new InvalidRequestException(String.format("You (%s) do not
have permission %s for %s", user, perm, keyspace.get()));
+ if (!keyspaceAccess.contains(perm))
+ throw new InvalidRequestException(String.format("You (%s) do not
have permission %s for %s", user, perm, keyspace));
}
}
Modified:
cassandra/trunk/src/java/org/apache/cassandra/thrift/CassandraServer.java
URL:
http://svn.apache.org/viewvc/cassandra/trunk/src/java/org/apache/cassandra/thrift/CassandraServer.java?rev=1002398&r1=1002397&r2=1002398&view=diff
==============================================================================
--- cassandra/trunk/src/java/org/apache/cassandra/thrift/CassandraServer.java
(original)
+++ cassandra/trunk/src/java/org/apache/cassandra/thrift/CassandraServer.java
Tue Sep 28 23:00:33 2010
@@ -73,7 +73,14 @@ public class CassandraServer implements
private final static List<Column> EMPTY_SUBCOLUMNS =
Collections.emptyList();
// thread local state containing session information
- public final ClientState clientState = new ClientState();
+ public final ThreadLocal<ClientState> clientState = new
ThreadLocal<ClientState>()
+ {
+ @Override
+ public ClientState initialValue()
+ {
+ return new ClientState();
+ }
+ };
/*
* RequestScheduler to perform the scheduling of incoming requests
@@ -92,6 +99,11 @@ public class CassandraServer implements
requestScheduler = DatabaseDescriptor.getRequestScheduler();
}
+ public ClientState state()
+ {
+ return clientState.get();
+ }
+
protected Map<DecoratedKey, ColumnFamily>
readColumnFamily(List<ReadCommand> commands, ConsistencyLevel consistency_level)
throws InvalidRequestException, UnavailableException, TimedOutException
{
@@ -253,8 +265,8 @@ public class CassandraServer implements
if (logger.isDebugEnabled())
logger.debug("get_slice");
- clientState.hasKeyspaceAccess(Permission.READ_VALUE);
- return multigetSliceInternal(clientState.getKeyspace(),
Arrays.asList(key), column_parent, predicate, consistency_level).get(key);
+ state().hasKeyspaceAccess(Permission.READ_VALUE);
+ return multigetSliceInternal(state().getKeyspace(),
Collections.singletonList(key), column_parent, predicate,
consistency_level).get(key);
}
public Map<byte[], List<ColumnOrSuperColumn>> multiget_slice(List<byte[]>
keys, ColumnParent column_parent, SlicePredicate predicate, ConsistencyLevel
consistency_level)
@@ -263,9 +275,9 @@ public class CassandraServer implements
if (logger.isDebugEnabled())
logger.debug("multiget_slice");
- clientState.hasKeyspaceAccess(Permission.READ_VALUE);
+ state().hasKeyspaceAccess(Permission.READ_VALUE);
- return multigetSliceInternal(clientState.getKeyspace(), keys,
column_parent, predicate, consistency_level);
+ return multigetSliceInternal(state().getKeyspace(), keys,
column_parent, predicate, consistency_level);
}
private Map<byte[], List<ColumnOrSuperColumn>>
multigetSliceInternal(String keyspace, List<byte[]> keys, ColumnParent
column_parent, SlicePredicate predicate, ConsistencyLevel consistency_level)
@@ -302,8 +314,8 @@ public class CassandraServer implements
if (logger.isDebugEnabled())
logger.debug("get");
- clientState.hasKeyspaceAccess(Permission.READ_VALUE);
- String keyspace = clientState.getKeyspace();
+ state().hasKeyspaceAccess(Permission.READ_VALUE);
+ String keyspace = state().getKeyspace();
ThriftValidation.validateColumnPath(keyspace, column_path);
@@ -330,7 +342,7 @@ public class CassandraServer implements
if (logger.isDebugEnabled())
logger.debug("get_count");
- clientState.hasKeyspaceAccess(Permission.READ_VALUE);
+ state().hasKeyspaceAccess(Permission.READ_VALUE);
return get_slice(key, column_parent, predicate,
consistency_level).size();
}
@@ -341,8 +353,8 @@ public class CassandraServer implements
if (logger.isDebugEnabled())
logger.debug("multiget_count");
- clientState.hasKeyspaceAccess(Permission.READ_VALUE);
- String keyspace = clientState.getKeyspace();
+ state().hasKeyspaceAccess(Permission.READ_VALUE);
+ String keyspace = state().getKeyspace();
Map<byte[], Integer> counts = new HashMap<byte[], Integer>();
Map<byte[], List<ColumnOrSuperColumn>> columnFamiliesMap =
multigetSliceInternal(keyspace, keys, column_parent, predicate,
consistency_level);
@@ -359,13 +371,13 @@ public class CassandraServer implements
if (logger.isDebugEnabled())
logger.debug("insert");
- clientState.hasKeyspaceAccess(Permission.WRITE_VALUE);
+ state().hasKeyspaceAccess(Permission.WRITE_VALUE);
ThriftValidation.validateKey(key);
- ThriftValidation.validateColumnParent(clientState.getKeyspace(),
column_parent);
- ThriftValidation.validateColumn(clientState.getKeyspace(),
column_parent, column);
+ ThriftValidation.validateColumnParent(state().getKeyspace(),
column_parent);
+ ThriftValidation.validateColumn(state().getKeyspace(), column_parent,
column);
- RowMutation rm = new RowMutation(clientState.getKeyspace(), key);
+ RowMutation rm = new RowMutation(state().getKeyspace(), key);
try
{
rm.add(new QueryPath(column_parent.column_family,
column_parent.super_column, column.name), column.value, new
TimestampClock(column.timestamp), column.ttl);
@@ -383,7 +395,7 @@ public class CassandraServer implements
if (logger.isDebugEnabled())
logger.debug("batch_mutate");
- clientState.hasKeyspaceAccess(Permission.WRITE_VALUE);
+ state().hasKeyspaceAccess(Permission.WRITE_VALUE);
List<RowMutation> rowMutations = new ArrayList<RowMutation>();
for (Map.Entry<byte[], Map<String, List<Mutation>>> mutationEntry:
mutation_map.entrySet())
@@ -398,10 +410,10 @@ public class CassandraServer implements
for (Mutation mutation : columnFamilyMutations.getValue())
{
-
ThriftValidation.validateMutation(clientState.getKeyspace(), cfName, mutation);
+ ThriftValidation.validateMutation(state().getKeyspace(),
cfName, mutation);
}
}
-
rowMutations.add(RowMutation.getRowMutationFromMutations(clientState.getKeyspace(),
key, columnFamilyToMutations));
+
rowMutations.add(RowMutation.getRowMutationFromMutations(state().getKeyspace(),
key, columnFamilyToMutations));
}
doInsert(consistency_level, rowMutations);
@@ -413,12 +425,12 @@ public class CassandraServer implements
if (logger.isDebugEnabled())
logger.debug("remove");
- clientState.hasKeyspaceAccess(Permission.WRITE_VALUE);
+ state().hasKeyspaceAccess(Permission.WRITE_VALUE);
ThriftValidation.validateKey(key);
- ThriftValidation.validateColumnPathOrParent(clientState.getKeyspace(),
column_path);
+ ThriftValidation.validateColumnPathOrParent(state().getKeyspace(),
column_path);
- RowMutation rm = new RowMutation(clientState.getKeyspace(), key);
+ RowMutation rm = new RowMutation(state().getKeyspace(), key);
rm.delete(new QueryPath(column_path), new TimestampClock(clock));
doInsert(consistency_level, Arrays.asList(rm));
@@ -463,8 +475,8 @@ public class CassandraServer implements
if (logger.isDebugEnabled())
logger.debug("range_slice");
- String keyspace = clientState.getKeyspace();
- clientState.hasKeyspaceAccess(Permission.READ_VALUE);
+ String keyspace = state().getKeyspace();
+ state().hasKeyspaceAccess(Permission.READ_VALUE);
ThriftValidation.validateColumnParent(keyspace, column_parent);
ThriftValidation.validatePredicate(keyspace, column_parent, predicate);
@@ -527,8 +539,8 @@ public class CassandraServer implements
if (logger.isDebugEnabled())
logger.debug("scan");
- clientState.hasKeyspaceAccess(Permission.READ_VALUE);
- String keyspace = clientState.getKeyspace();
+ state().hasKeyspaceAccess(Permission.READ_VALUE);
+ String keyspace = state().getKeyspace();
ThriftValidation.validateColumnParent(keyspace, column_parent);
ThriftValidation.validatePredicate(keyspace, column_parent,
column_predicate);
ThriftValidation.validateIndexClauses(keyspace,
column_parent.column_family, index_clause);
@@ -604,7 +616,7 @@ public class CassandraServer implements
public List<String> describe_splits(String cfName, String start_token,
String end_token, int keys_per_split) throws TException
{
Token.TokenFactory tf =
StorageService.getPartitioner().getTokenFactory();
- List<Token> tokens =
StorageService.instance.getSplits(clientState.getKeyspace(), cfName, new
Range(tf.fromString(start_token), tf.fromString(end_token)), keys_per_split);
+ List<Token> tokens =
StorageService.instance.getSplits(state().getKeyspace(), cfName, new
Range(tf.fromString(start_token), tf.fromString(end_token)), keys_per_split);
List<String> splits = new ArrayList<String>(tokens.size());
for (Token token : tokens)
{
@@ -615,7 +627,7 @@ public class CassandraServer implements
public void login(AuthenticationRequest auth_request) throws
AuthenticationException, AuthorizationException, TException
{
- clientState.login(auth_request.getCredentials());
+ state().login(auth_request.getCredentials());
}
/**
@@ -623,7 +635,7 @@ public class CassandraServer implements
*/
private void schedule()
{
- requestScheduler.queue(Thread.currentThread(),
clientState.getSchedulingValue());
+ requestScheduler.queue(Thread.currentThread(),
state().getSchedulingValue());
}
/**
@@ -675,7 +687,7 @@ public class CassandraServer implements
public String system_add_column_family(CfDef cf_def) throws
InvalidRequestException, TException
{
- clientState.hasKeyspaceAccess(Permission.WRITE);
+ state().hasKeyspaceAccess(Permission.WRITE);
try
{
applyMigrationOnStage(new
AddColumnFamily(convertToCFMetaData(cf_def)));
@@ -697,11 +709,11 @@ public class CassandraServer implements
public String system_drop_column_family(String column_family) throws
InvalidRequestException, TException
{
- clientState.hasKeyspaceAccess(Permission.WRITE);
+ state().hasKeyspaceAccess(Permission.WRITE);
try
{
- applyMigrationOnStage(new
DropColumnFamily(clientState.getKeyspace(), column_family, true));
+ applyMigrationOnStage(new DropColumnFamily(state().getKeyspace(),
column_family, true));
return DatabaseDescriptor.getDefsVersion().toString();
}
catch (ConfigurationException e)
@@ -720,11 +732,11 @@ public class CassandraServer implements
public String system_rename_column_family(String old_name, String
new_name) throws InvalidRequestException, TException
{
- clientState.hasKeyspaceAccess(Permission.WRITE);
+ state().hasKeyspaceAccess(Permission.WRITE);
try
{
- applyMigrationOnStage(new
RenameColumnFamily(clientState.getKeyspace(), old_name, new_name));
+ applyMigrationOnStage(new
RenameColumnFamily(state().getKeyspace(), old_name, new_name));
return DatabaseDescriptor.getDefsVersion().toString();
}
catch (ConfigurationException e)
@@ -830,7 +842,7 @@ public class CassandraServer implements
public String system_rename_keyspace(String old_name, String new_name)
throws InvalidRequestException, TException
{
- clientState.hasKeyspaceAccess(Permission.WRITE);
+ state().hasKeyspaceAccess(Permission.WRITE);
try
{
@@ -854,7 +866,7 @@ public class CassandraServer implements
/** update an existing keyspace, but do not allow column family
modifications. */
public String system_update_keyspace(KsDef ks_def) throws
InvalidRequestException, TException
{
- clientState.hasKeyspaceAccess(Permission.WRITE);
+ state().hasKeyspaceAccess(Permission.WRITE);
if (ks_def.getCf_defs() != null && ks_def.getCf_defs().size() > 0)
throw new InvalidRequestException("Keyspace update must not
contain any column family definitions.");
@@ -892,7 +904,7 @@ public class CassandraServer implements
public String system_update_column_family(CfDef cf_def) throws
InvalidRequestException, TException
{
- clientState.hasKeyspaceAccess(Permission.WRITE);
+ state().hasKeyspaceAccess(Permission.WRITE);
if (cf_def.keyspace == null || cf_def.name == null)
throw new InvalidRequestException("Keyspace and CF name must be
set.");
@@ -951,12 +963,12 @@ public class CassandraServer implements
public void truncate(String cfname) throws InvalidRequestException,
UnavailableException, TException
{
- logger.debug("truncating {} in {}", cfname, clientState.getKeyspace());
- clientState.hasKeyspaceAccess(Permission.WRITE_VALUE);
+ logger.debug("truncating {} in {}", cfname, state().getKeyspace());
+ state().hasKeyspaceAccess(Permission.WRITE_VALUE);
try
{
schedule();
- StorageProxy.truncateBlocking(clientState.getKeyspace(), cfname);
+ StorageProxy.truncateBlocking(state().getKeyspace(), cfname);
}
catch (TimeoutException e)
{
@@ -979,7 +991,7 @@ public class CassandraServer implements
throw new InvalidRequestException("Keyspace does not exist");
}
- clientState.setKeyspace(keyspace);
+ state().setKeyspace(keyspace);
}
public Map<String, List<String>> describe_schema_versions() throws
TException, InvalidRequestException