You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cassandra.apache.org by jb...@apache.org on 2011/10/03 23:51:48 UTC

svn commit: r1178599 - in /cassandra/branches/cassandra-1.0: ./ src/java/org/apache/cassandra/config/ src/java/org/apache/cassandra/cql/ src/java/org/apache/cassandra/db/ src/java/org/apache/cassandra/service/

Author: jbellis
Date: Mon Oct  3 21:51:48 2011
New Revision: 1178599

URL: http://svn.apache.org/viewvc?rev=1178599&view=rev
Log:
add system.versions ColumnFamily
patch by jbellis; reviewed by Paul Cannon for CASSANDRA-3140

Modified:
    cassandra/branches/cassandra-1.0/CHANGES.txt
    cassandra/branches/cassandra-1.0/src/java/org/apache/cassandra/config/CFMetaData.java
    cassandra/branches/cassandra-1.0/src/java/org/apache/cassandra/config/DatabaseDescriptor.java
    cassandra/branches/cassandra-1.0/src/java/org/apache/cassandra/cql/QueryProcessor.java
    cassandra/branches/cassandra-1.0/src/java/org/apache/cassandra/db/SystemTable.java
    cassandra/branches/cassandra-1.0/src/java/org/apache/cassandra/service/AbstractCassandraDaemon.java

Modified: cassandra/branches/cassandra-1.0/CHANGES.txt
URL: http://svn.apache.org/viewvc/cassandra/branches/cassandra-1.0/CHANGES.txt?rev=1178599&r1=1178598&r2=1178599&view=diff
==============================================================================
--- cassandra/branches/cassandra-1.0/CHANGES.txt (original)
+++ cassandra/branches/cassandra-1.0/CHANGES.txt Mon Oct  3 21:51:48 2011
@@ -2,6 +2,7 @@
  * describe_ring should include datacenter/topology information (CASSANDRA-2882)
  * Thrift sockets are not properly buffered (CASSANDRA-3261)
  * performance improvement for bytebufferutil compare function (CASSANDRA-3286)
+ * add system.versions ColumnFamily (CASSANDRA-3140)
 
 
 1.0.0-final

Modified: cassandra/branches/cassandra-1.0/src/java/org/apache/cassandra/config/CFMetaData.java
URL: http://svn.apache.org/viewvc/cassandra/branches/cassandra-1.0/src/java/org/apache/cassandra/config/CFMetaData.java?rev=1178599&r1=1178598&r2=1178599&view=diff
==============================================================================
--- cassandra/branches/cassandra-1.0/src/java/org/apache/cassandra/config/CFMetaData.java (original)
+++ cassandra/branches/cassandra-1.0/src/java/org/apache/cassandra/config/CFMetaData.java Mon Oct  3 21:51:48 2011
@@ -77,6 +77,25 @@ public final class CFMetaData
     public static final CFMetaData SchemaCf = newSystemMetadata(Migration.SCHEMA_CF, 3, "current state of the schema", UTF8Type.instance, null);
     public static final CFMetaData IndexCf = newSystemMetadata(SystemTable.INDEX_CF, 5, "indexes that have been completed", UTF8Type.instance, null);
     public static final CFMetaData NodeIdCf = newSystemMetadata(SystemTable.NODE_ID_CF, 6, "nodeId and their metadata", TimeUUIDType.instance, null);
+    public static final CFMetaData VersionCf = newSystemMetadata(SystemTable.VERSION_CF, 7, "server version information", UTF8Type.instance, null);
+    static
+    {
+        try
+        {
+            VersionCf.keyAlias(ByteBufferUtil.bytes("component"))
+                     .keyValidator(UTF8Type.instance)
+                     .columnMetadata(Collections.singletonMap(ByteBufferUtil.bytes("version"),
+                                                              new ColumnDefinition(ByteBufferUtil.bytes("version"),
+                                                                                   UTF8Type.instance,
+                                                                                   null,
+                                                                                   null,
+                                                                                   null)));
+        }
+        catch (ConfigurationException e)
+        {
+            throw new RuntimeException(e);
+        }
+    }
 
     private static IRowCacheProvider initDefaultRowCacheProvider()
     {

Modified: cassandra/branches/cassandra-1.0/src/java/org/apache/cassandra/config/DatabaseDescriptor.java
URL: http://svn.apache.org/viewvc/cassandra/branches/cassandra-1.0/src/java/org/apache/cassandra/config/DatabaseDescriptor.java?rev=1178599&r1=1178598&r2=1178599&view=diff
==============================================================================
--- cassandra/branches/cassandra-1.0/src/java/org/apache/cassandra/config/DatabaseDescriptor.java (original)
+++ cassandra/branches/cassandra-1.0/src/java/org/apache/cassandra/config/DatabaseDescriptor.java Mon Oct  3 21:51:48 2011
@@ -34,6 +34,7 @@ import org.apache.cassandra.auth.IAuthor
 import org.apache.cassandra.config.Config.RequestSchedulerId;
 import org.apache.cassandra.db.ColumnFamilyStore;
 import org.apache.cassandra.db.DefsTable;
+import org.apache.cassandra.db.SystemTable;
 import org.apache.cassandra.db.Table;
 import org.apache.cassandra.db.migration.Migration;
 import org.apache.cassandra.dht.IPartitioner;
@@ -402,16 +403,18 @@ public class DatabaseDescriptor
                                                    CFMetaData.MigrationsCf,
                                                    CFMetaData.SchemaCf,
                                                    CFMetaData.IndexCf,
-                                                   CFMetaData.NodeIdCf);
+                                                   CFMetaData.NodeIdCf,
+                                                   CFMetaData.VersionCf);
             Schema.instance.load(CFMetaData.StatusCf);
             Schema.instance.load(CFMetaData.HintsCf);
             Schema.instance.load(CFMetaData.MigrationsCf);
             Schema.instance.load(CFMetaData.SchemaCf);
             Schema.instance.load(CFMetaData.IndexCf);
             Schema.instance.load(CFMetaData.NodeIdCf);
+            Schema.instance.load(CFMetaData.VersionCf);
 
             Schema.instance.addSystemTable(systemMeta);
-            
+
             /* Load the seeds for node contact points */
             if (conf.seed_provider == null)
             {

Modified: cassandra/branches/cassandra-1.0/src/java/org/apache/cassandra/cql/QueryProcessor.java
URL: http://svn.apache.org/viewvc/cassandra/branches/cassandra-1.0/src/java/org/apache/cassandra/cql/QueryProcessor.java?rev=1178599&r1=1178598&r2=1178599&view=diff
==============================================================================
--- cassandra/branches/cassandra-1.0/src/java/org/apache/cassandra/cql/QueryProcessor.java (original)
+++ cassandra/branches/cassandra-1.0/src/java/org/apache/cassandra/cql/QueryProcessor.java Mon Oct  3 21:51:48 2011
@@ -64,6 +64,8 @@ import static org.apache.cassandra.thrif
 
 public class QueryProcessor
 {
+    public static final String CQL_VERSION = "2.0.0";
+
     private static final Logger logger = LoggerFactory.getLogger(QueryProcessor.class);
 
     private static final long timeLimitForSchemaAgreement = 10 * 1000;

Modified: cassandra/branches/cassandra-1.0/src/java/org/apache/cassandra/db/SystemTable.java
URL: http://svn.apache.org/viewvc/cassandra/branches/cassandra-1.0/src/java/org/apache/cassandra/db/SystemTable.java?rev=1178599&r1=1178598&r2=1178599&view=diff
==============================================================================
--- cassandra/branches/cassandra-1.0/src/java/org/apache/cassandra/db/SystemTable.java (original)
+++ cassandra/branches/cassandra-1.0/src/java/org/apache/cassandra/db/SystemTable.java Mon Oct  3 21:51:48 2011
@@ -35,12 +35,14 @@ import org.slf4j.LoggerFactory;
 
 import org.apache.cassandra.config.ConfigurationException;
 import org.apache.cassandra.config.DatabaseDescriptor;
+import org.apache.cassandra.cql.QueryProcessor;
 import org.apache.cassandra.db.filter.QueryFilter;
 import org.apache.cassandra.db.filter.QueryPath;
 import org.apache.cassandra.db.marshal.BytesType;
 import org.apache.cassandra.dht.IPartitioner;
 import org.apache.cassandra.dht.Token;
 import org.apache.cassandra.service.StorageService;
+import org.apache.cassandra.thrift.Constants;
 import org.apache.cassandra.utils.ByteBufferUtil;
 import org.apache.cassandra.utils.FBUtilities;
 import org.apache.cassandra.utils.NodeId;
@@ -51,6 +53,7 @@ public class SystemTable
     public static final String STATUS_CF = "LocationInfo"; // keep the old CF string for backwards-compatibility
     public static final String INDEX_CF = "IndexInfo";
     public static final String NODE_ID_CF = "NodeIdInfo";
+    public static final String VERSION_CF = "Versions";
     private static final ByteBuffer LOCATION_KEY = ByteBufferUtil.bytes("L");
     private static final ByteBuffer RING_KEY = ByteBufferUtil.bytes("Ring");
     private static final ByteBuffer BOOTSTRAP_KEY = ByteBufferUtil.bytes("Bootstrap");
@@ -68,8 +71,38 @@ public class SystemTable
         return StorageService.getPartitioner().decorateKey(key);
     }
     
-    /* if hints become incompatible across versions of cassandra, that logic (and associated purging) is managed here. */
-    public static void purgeIncompatibleHints() throws IOException
+    public static void finishStartup() throws IOException
+    {
+        setupVersion();
+        purgeIncompatibleHints();
+    }
+
+    private static void setupVersion() throws IOException
+    {
+        RowMutation rm;
+        ColumnFamily cf;
+
+        rm = new RowMutation(Table.SYSTEM_TABLE, ByteBufferUtil.bytes("build"));
+        cf = ColumnFamily.create(Table.SYSTEM_TABLE, VERSION_CF);
+        cf.addColumn(new Column(ByteBufferUtil.bytes("version"), ByteBufferUtil.bytes(FBUtilities.getReleaseVersionString())));
+        rm.add(cf);
+        rm.apply();
+
+        rm = new RowMutation(Table.SYSTEM_TABLE, ByteBufferUtil.bytes("cql"));
+        cf = ColumnFamily.create(Table.SYSTEM_TABLE, VERSION_CF);
+        cf.addColumn(new Column(ByteBufferUtil.bytes("version"), ByteBufferUtil.bytes(QueryProcessor.CQL_VERSION)));
+        rm.add(cf);
+        rm.apply();
+
+        rm = new RowMutation(Table.SYSTEM_TABLE, ByteBufferUtil.bytes("thrift"));
+        cf = ColumnFamily.create(Table.SYSTEM_TABLE, VERSION_CF);
+        cf.addColumn(new Column(ByteBufferUtil.bytes("version"), ByteBufferUtil.bytes(Constants.VERSION)));
+        rm.add(cf);
+        rm.apply();
+    }
+
+    /** if hints become incompatible across versions of cassandra, that logic (and associated purging) is managed here. */
+    private static void purgeIncompatibleHints() throws IOException
     {
         ByteBuffer upgradeMarker = ByteBufferUtil.bytes("Pre-1.0 hints purged");
         Table table = Table.open(Table.SYSTEM_TABLE);

Modified: cassandra/branches/cassandra-1.0/src/java/org/apache/cassandra/service/AbstractCassandraDaemon.java
URL: http://svn.apache.org/viewvc/cassandra/branches/cassandra-1.0/src/java/org/apache/cassandra/service/AbstractCassandraDaemon.java?rev=1178599&r1=1178598&r2=1178599&view=diff
==============================================================================
--- cassandra/branches/cassandra-1.0/src/java/org/apache/cassandra/service/AbstractCassandraDaemon.java (original)
+++ cassandra/branches/cassandra-1.0/src/java/org/apache/cassandra/service/AbstractCassandraDaemon.java Mon Oct  3 21:51:48 2011
@@ -206,7 +206,7 @@ public abstract class AbstractCassandraD
             MigrationManager.applyMigrations(currentMigration, lastMigration);
         }
         
-        SystemTable.purgeIncompatibleHints();
+        SystemTable.finishStartup();
 
         // start server internals
         StorageService.instance.registerDaemon(this);