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");