Author: eevans
Date: Tue May 11 17:20:30 2010
New Revision: 943187

URL: http://svn.apache.org/viewvc?rev=943187&view=rev
Log:
set_keyspace() impl (setup for keyspace arg removal)

Patch by eevans

Modified:
    cassandra/trunk/interface/cassandra.avpr
    cassandra/trunk/src/java/org/apache/cassandra/avro/CassandraServer.java

Modified: cassandra/trunk/interface/cassandra.avpr
URL: 
http://svn.apache.org/viewvc/cassandra/trunk/interface/cassandra.avpr?rev=943187&r1=943186&r2=943187&view=diff
==============================================================================
--- cassandra/trunk/interface/cassandra.avpr (original)
+++ cassandra/trunk/interface/cassandra.avpr Tue May 11 17:20:30 2010
@@ -3,6 +3,11 @@
   "protocol":   "Cassandra",
 
   "types": [
+      {"name": "AccessLevel", "type": "enum",
+          "symbols": [
+            "NONE", "READONLY", "READWRITE", "FULL"
+          ]
+      },
       {"name": "ColumnPath", "type": "record",
           "fields": [
             {"name": "column_family", "type": "string"},
@@ -148,6 +153,11 @@
     "get_api_version": {
         "request": [],
         "response": "string"
+    },
+    "set_keyspace": {
+        "request": [{"name": "keyspace", "type": "string"}],
+        "response": "null",
+        "errors": ["InvalidRequestException"]
     }
   }
 }

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=943187&r1=943186&r2=943187&view=diff
==============================================================================
--- cassandra/trunk/src/java/org/apache/cassandra/avro/CassandraServer.java 
(original)
+++ cassandra/trunk/src/java/org/apache/cassandra/avro/CassandraServer.java Tue 
May 11 17:20:30 2010
@@ -43,6 +43,7 @@ import org.apache.cassandra.service.Stor
 import static org.apache.cassandra.utils.FBUtilities.UTF8;
 
 import org.apache.cassandra.service.StorageService;
+import org.apache.cassandra.thrift.AccessLevel;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import static org.apache.cassandra.avro.AvroRecordFactory.*;
@@ -53,6 +54,18 @@ public class CassandraServer implements 
 
     private final static GenericArray<Column> EMPTY_SUBCOLUMNS = new 
GenericData.Array<Column>(0, Schema.parse("{\"type\":\"array\",\"items\":" + 
Column.SCHEMA$ + "}"));
     private final static Utf8 API_VERSION = new Utf8("0.0.0");
+    
+    private ThreadLocal<AccessLevel> loginDone = new ThreadLocal<AccessLevel>()
+    {
+        @Override
+        protected AccessLevel initialValue()
+        {
+            return AccessLevel.NONE;
+        }
+    };
+    
+    // Session keyspace.
+    private ThreadLocal<String> curKeyspace = new ThreadLocal<String>();
 
     public ColumnOrSuperColumn get(Utf8 keyspace, Utf8 key, ColumnPath 
columnPath, ConsistencyLevel consistencyLevel)
     throws AvroRemoteException, InvalidRequestException, NotFoundException, 
UnavailableException, TimedOutException {
@@ -446,4 +459,23 @@ public class CassandraServer implements 
     {
         return API_VERSION;
     }
+
+    @Override
+    public Void set_keyspace(Utf8 keyspace) throws InvalidRequestException
+    {
+        String keyspaceStr = keyspace.toString();
+        
+        if (DatabaseDescriptor.getTableDefinition(keyspaceStr) == null)
+        {
+            throw newInvalidRequestException("Keyspace does not exist");
+        }
+        
+        // If switching, invalidate previous access level; force a new login.
+        if (this.curKeyspace.get() != null && 
!this.curKeyspace.get().equals(keyspaceStr))
+            loginDone.set(AccessLevel.NONE);
+        
+        this.curKeyspace.set(keyspaceStr);
+        
+        return null;
+    }
 }


Reply via email to