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;
+ }
}