[ 
https://issues.apache.org/jira/browse/CASSANDRA-79?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12710589#action_12710589
 ] 

Jonathan Ellis edited comment on CASSANDRA-79 at 5/18/09 7:52 PM:
------------------------------------------------------------------

>From what I have seen the underlying mechanics for multiple table support are 
>already there.  We just need to make all the places that assume there is only 
>one for convenience, stop doing so.

DatabaseDescriptor parses and stores the results of the config xml.  Right now 
the shortcut for "get the table name" is DD.getTables().get(0).  I suggest 
auditing the calls to getTables() and see if any are actually using it for more 
than that.  (I don't think there are.)  Then start fixing them.  When you are 
done, get rid of it so nobody is tempted to be lazy like that again. :)

There are two classes of fixes.  Client API fixes and internal uses.  The 
client ones are probably easier in general.  What should happen is, the client 
gives cassandra a table name as part of any API call, and that is passed to one 
of the handler methods (e.g., ReadVerbHandler, RowMutationVerbHandler).  Those 
will have the table name as part of the Command object they read off the wire.  
So just start including the table name down the call stack.

The internal ones are a bit harder but only a little.  Often an object will 
need the table name in a place where its caller does not know the table either, 
e.g. ColumnFamily.getColumnComparator.  Here you'll need to add an instance 
variable containing either the table name or a reference to the parent Table 
object.  Adding factory methods  to Table such as Table.getColumnFamily may be 
convenient.

Some of DatabaseDescriptor itself needs to stop assuming only one table.  This 
will not be much code.  applicationColumnFamilies_ is one place.  at the very 
least that needs another layer of Map<tablename, appCFs> like 
tableToCFMetaDataMap_ does.  If you're more ambitious you could try moving 
those into the Table object as additional cleanup.

Please leave any questions here in case anyone else wants to help. :)

      was (Author: jbellis):
    From what I have seen the underlying mechanics for multiple table support 
are already there.  We just need to make all the places that assume there is 
only one for convenience, stop doing so.

DatabaseDescriptor parses and stores the results of the config xml.  Right now 
the shortcut for "get the table name" is DD.getTables().get(0).  I suggest 
auditing the calls to getTables() and see if any are actually using it for more 
than that.  (I don't think there are.)  Then get rid of it so nobody is tempted 
to do that anymore and start fixing them.

There are two classes of fixes.  Client API fixes and internal uses.  The 
client ones are probably easier in general.  What should happen is, the client 
gives cassandra a table name as part of any API call, and that is passed to one 
of the handler methods (e.g., ReadVerbHandler, RowMutationVerbHandler).  Those 
will have the table name as part of the Command object they read off the wire.  
So just start including the table name down the call stack.

The internal ones are a bit harder but only a little.  Often an object will 
need the table name in a place where its caller does not know the table either, 
e.g. ColumnFamily.getColumnComparator.  Here you'll need to add an instance 
variable containing either the table name or a reference to the parent Table 
object.  Adding factory methods  to Table such as Table.getColumnFamily may be 
convenient.

Some of DatabaseDescriptor itself needs to stop assuming only one table.  This 
will not be much code.  applicationColumnFamilies_ is one place.  at the very 
least that needs another layer of Map<tablename, appCFs> like 
tableToCFMetaDataMap_ does.  If you're more ambitious you could try moving 
those into the Table object as additional cleanup.

Please leave any questions here in case anyone else wants to help. :)
  
> Multi-table support
> -------------------
>
>                 Key: CASSANDRA-79
>                 URL: https://issues.apache.org/jira/browse/CASSANDRA-79
>             Project: Cassandra
>          Issue Type: New Feature
>    Affects Versions: trunk
>            Reporter: Jonathan Ellis
>             Fix For: 0.4
>
>
> Cassandra has preliminary support for multiple tables (namespaces / sets of 
> ColumnFamilies) but a lot of the code assumes there is only one.  Multitable 
> support is important for allowing multiple applications to run on a single 
> cluster.  It's also useful to cleanly separate "system" columnfamilies from 
> application data.

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to