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


Reply via email to