Author: jbellis
Date: Tue Mar 16 23:17:51 2010
New Revision: 924044

URL: http://svn.apache.org/viewvc?rev=924044&view=rev
Log:
store cluster name in system table, exit on mismatch.  patch by Brandon 
Williams; reviewed by jbellis for CASSANDRA-769

Modified:
    
cassandra/branches/cassandra-0.6/src/java/org/apache/cassandra/db/SystemTable.java
    
cassandra/branches/cassandra-0.6/src/java/org/apache/cassandra/service/StorageService.java

Modified: 
cassandra/branches/cassandra-0.6/src/java/org/apache/cassandra/db/SystemTable.java
URL: 
http://svn.apache.org/viewvc/cassandra/branches/cassandra-0.6/src/java/org/apache/cassandra/db/SystemTable.java?rev=924044&r1=924043&r2=924044&view=diff
==============================================================================
--- 
cassandra/branches/cassandra-0.6/src/java/org/apache/cassandra/db/SystemTable.java
 (original)
+++ 
cassandra/branches/cassandra-0.6/src/java/org/apache/cassandra/db/SystemTable.java
 Tue Mar 16 23:17:51 2010
@@ -47,6 +47,7 @@ public class SystemTable
     private static final byte[] BOOTSTRAP = utf8("B");
     private static final byte[] TOKEN = utf8("Token");
     private static final byte[] GENERATION = utf8("Generation");
+    private static final byte[] CLUSTERNAME = utf8("ClusterName");
     private static StorageMetadata metadata;
 
     private static byte[] utf8(String str)
@@ -121,6 +122,7 @@ public class SystemTable
         SortedSet<byte[]> columns = new TreeSet<byte[]>(new BytesType());
         columns.add(TOKEN);
         columns.add(GENERATION);
+        columns.add(CLUSTERNAME);
         QueryFilter filter = new NamesQueryFilter(LOCATION_KEY, new 
QueryPath(STATUS_CF), columns);
         ColumnFamily cf = 
table.getColumnFamilyStore(STATUS_CF).getColumnFamily(filter);
 
@@ -140,13 +142,16 @@ public class SystemTable
             // but it's as close as sanely possible
             int generation = (int) (System.currentTimeMillis() / 1000);
 
+            logger.info("Saved ClusterName not found. Using " + 
DatabaseDescriptor.getClusterName());
+
             RowMutation rm = new RowMutation(Table.SYSTEM_TABLE, LOCATION_KEY);
             cf = ColumnFamily.create(Table.SYSTEM_TABLE, 
SystemTable.STATUS_CF);
             cf.addColumn(new Column(TOKEN, 
p.getTokenFactory().toByteArray(token)));
             cf.addColumn(new Column(GENERATION, 
FBUtilities.toByteArray(generation)));
+            cf.addColumn(new Column(CLUSTERNAME, 
DatabaseDescriptor.getClusterName().getBytes()));
             rm.add(cf);
             rm.apply();
-            metadata = new StorageMetadata(token, generation);
+            metadata = new StorageMetadata(token, generation, 
DatabaseDescriptor.getClusterName().getBytes());
             return metadata;
         }
 
@@ -161,14 +166,29 @@ public class SystemTable
         IColumn generation = cf.getColumn(GENERATION);
         assert generation != null : cf;
         int gen = Math.max(FBUtilities.byteArrayToInt(generation.value()) + 1, 
(int) (System.currentTimeMillis() / 1000));
-        
+
+        IColumn cluster = cf.getColumn(CLUSTERNAME);
+
         RowMutation rm = new RowMutation(Table.SYSTEM_TABLE, LOCATION_KEY);
         cf = ColumnFamily.create(Table.SYSTEM_TABLE, SystemTable.STATUS_CF);
         Column generation2 = new Column(GENERATION, 
FBUtilities.toByteArray(gen), generation.timestamp() + 1);
         cf.addColumn(generation2);
+        byte[] cname;
+        if (cluster != null)
+        {
+            logger.info("Saved ClusterName found: " + new 
String(cluster.value()));
+            cname = cluster.value();
+        }
+        else
+        {
+            Column clustername = new Column(CLUSTERNAME, 
DatabaseDescriptor.getClusterName().getBytes());
+            cf.addColumn(clustername);
+            cname = DatabaseDescriptor.getClusterName().getBytes();
+            logger.info("Saved ClusterName not found. Using " + 
DatabaseDescriptor.getClusterName());
+        }
         rm.add(cf);
         rm.apply();
-        metadata = new StorageMetadata(token, gen);
+        metadata = new StorageMetadata(token, gen, cname);
         return metadata;
     }
 
@@ -208,11 +228,13 @@ public class SystemTable
     {
         private Token token;
         private int generation;
+        private byte[] cluster;
 
-        StorageMetadata(Token storageId, int generation)
+        StorageMetadata(Token storageId, int generation, byte[] clustername)
         {
             token = storageId;
             this.generation = generation;
+            cluster = clustername;
         }
 
         public Token getToken()
@@ -229,5 +251,10 @@ public class SystemTable
         {
             return generation;
         }
+
+        public byte[] getClusterName()
+        {
+            return cluster;
+        }
     }
 }

Modified: 
cassandra/branches/cassandra-0.6/src/java/org/apache/cassandra/service/StorageService.java
URL: 
http://svn.apache.org/viewvc/cassandra/branches/cassandra-0.6/src/java/org/apache/cassandra/service/StorageService.java?rev=924044&r1=924043&r2=924044&view=diff
==============================================================================
--- 
cassandra/branches/cassandra-0.6/src/java/org/apache/cassandra/service/StorageService.java
 (original)
+++ 
cassandra/branches/cassandra-0.6/src/java/org/apache/cassandra/service/StorageService.java
 Tue Mar 16 23:17:51 2010
@@ -301,6 +301,15 @@ public class StorageService implements I
         initialized = true;
         isClientMode = false;
         storageMetadata_ = SystemTable.initMetadata();
+
+        // be certain that the recorded clustername matches what the user 
specified
+        if 
(!(Arrays.equals(storageMetadata_.getClusterName(),DatabaseDescriptor.getClusterName().getBytes())))
+        {
+            logger_.error("ClusterName mismatch: " + new 
String(storageMetadata_.getClusterName()) + " != " +
+                    DatabaseDescriptor.getClusterName());
+            System.exit(3);
+        }
+
         DatabaseDescriptor.createAllDirectories();
         GCInspector.instance.start();
         logger_.info("Starting up server gossip");


Reply via email to