cassandra-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From aaron morton <aa...@thelastpickle.com>
Subject Re: In the ‘Cassandra.Iface’ interface, is it correct to call ‘void set_keyspace()’ prior to ‘login()’?
Date Mon, 31 Jan 2011 07:21:27 GMT
I'm having trouble understanding the steps you've described in step 1. 

The error is raised because the Keyspace must exist in the system meta data. It's used as
the container to find the CF definition, and as part of the Resource description when the
request is Authorized .  
 
Hope that helps.
Aaron

On 31 Jan 2011, at 17:39, indika kumara wrote:

> Hi Aaron,
> 
> Thank a lot for your help. 
> 
> I have still some questions to get clarified.. The issue happens in the following scenario.
> 
> 1) Call add keyspace from a client API -The keyspace given by the client is modified
and used for further operations. 
>    e.g  Client's keysace = 'foo' and the his domain name = 'bar.com'  => modified
keyspace = 'bar.com_foo'
> 2) Call add column family from a a client API
>    Client's keyspace = 'foo' ...now prior to calling 'login', 'set_keyspace' is called.
Within that method, the following method is called. This throws an error because the keyspace
Cassadara kept is   'bar.com_foo' not 'foo'
> 
>    public static void validateTable(String tablename) throws KeyspaceNotDefinedException
>     {
>         if (!DatabaseDescriptor.getTables().contains(tablename))
>         {
>             throw new KeyspaceNotDefinedException("Keyspace " + tablename + " does not
exist");
>         }
>     }
> 
> Thanks,
> 
> Indika       
>    
> 
> On Mon, Jan 31, 2011 at 1:58 AM, Aaron Morton <aaron@thelastpickle.com> wrote:
> AFAIK The order of calling login() and set_keyspace() is not important. 
> 
> set_keyspace() just stores the keyspace in the ClientState on the connection thread,
and  login authenticates the user name and password and stores them in the ClientState. Functions
on CassandraServer that require authorisation call functions such as ClientState.hasColumnFamilyAccess()
where things are checked.
> 
> If you wanted to set the keyspace based on the login, you could do it in the login()
function on the ClientState. Then your client would not need to call set_keyspace() . The
keyspace has to exist though, it's used it lots of places to identify the CF
> 
> Hope that helps.
> Aaron
> 
> 
> On 31 Jan, 2011,at 07:18 AM, indika kumara <indika.kuma@gmail.com> wrote:
> 
>> This issue came when I was trying to implement an idea listed at [http://wiki.apache.org/cassandra/MultiTenant]
– Namespaces. I thought the namespace can be the tenant’s domain name provided though
username (e.g. foo@bar.com) or can be returned through authentication backend on login. For
both cases, calling ‘login’ prior to ‘set_keyspace’ is required. 
>> 
>> The ‘CassandraServer.java’’s ‘set_keyspace()’ checks the availability of
a given keyspace. Here, prior to pass the keyspace, it has to be modified.  Any solutions?
I would like to create a JIRA for the idea with a working patch.
>> 
>> Highly appreciate the suggestions for implementing the aforementioned idea listed
in the wiki. 
>> 
>> Thanks,
>> 
>> Indika
>> 
>> On Sun, Jan 30, 2011 at 10:21 PM, indika kumara <indika@apache.org> wrote:
>> Hi All,
>> 
>> I observed the behavior indicated in the subject of this email even the ‘default
User’ returned from authentication is null.  Is this correct? 
>> 
>> 
>> Thanks,
>> 
>> Indika
>> 
> 


Mime
View raw message