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 2009/10/07 21:41:49 UTC
svn commit: r822876 - in /incubator/cassandra/trunk: bin/cassandra
src/java/org/apache/cassandra/db/SystemTable.java
src/java/org/apache/cassandra/service/StorageService.java
Author: jbellis
Date: Wed Oct 7 19:41:47 2009
New Revision: 822876
URL: http://svn.apache.org/viewvc?rev=822876&view=rev
Log:
add autobootstrap
patch by jbellis; reviewed by Eric Evans for CASSANDRA-438
Modified:
incubator/cassandra/trunk/bin/cassandra
incubator/cassandra/trunk/src/java/org/apache/cassandra/db/SystemTable.java
incubator/cassandra/trunk/src/java/org/apache/cassandra/service/StorageService.java
Modified: incubator/cassandra/trunk/bin/cassandra
URL: http://svn.apache.org/viewvc/incubator/cassandra/trunk/bin/cassandra?rev=822876&r1=822875&r2=822876&view=diff
==============================================================================
--- incubator/cassandra/trunk/bin/cassandra (original)
+++ incubator/cassandra/trunk/bin/cassandra Wed Oct 7 19:41:47 2009
@@ -102,17 +102,12 @@
{
pidpath=$1
foreground=$2
- bootstrap=$3
cassandra_parms="-Dcassandra -Dstorage-config=$CASSANDRA_CONF"
if [ "x$pidpath" != "x" ]; then
cassandra_parms="$cassandra_parms -Dcassandra-pidfile=$pidpath"
fi
- if [ "x$bootstrap" != "x" ]; then
- cassandra_parms="$cassandra_parms -Dbootstrap=$bootstrap"
- fi
-
# The cassandra-foreground option will tell CassandraDaemon not
# to close stdout/stderr, but it's up to us not to background.
if [ "x$foreground" != "x" ]; then
@@ -143,10 +138,6 @@
foreground="yes"
shift
;;
- -b)
- bootstrap="true"
- shift
- ;;
-h)
echo "Usage: $0 [-f] [-h] [-p pidfile] [-b]"
exit 0
@@ -163,7 +154,7 @@
done
# Start up the service
-launch_service "$pidfile" "$foreground" "$bootstrap"
+launch_service "$pidfile" "$foreground"
exit $?
Modified: incubator/cassandra/trunk/src/java/org/apache/cassandra/db/SystemTable.java
URL: http://svn.apache.org/viewvc/incubator/cassandra/trunk/src/java/org/apache/cassandra/db/SystemTable.java?rev=822876&r1=822875&r2=822876&view=diff
==============================================================================
--- incubator/cassandra/trunk/src/java/org/apache/cassandra/db/SystemTable.java (original)
+++ incubator/cassandra/trunk/src/java/org/apache/cassandra/db/SystemTable.java Wed Oct 7 19:41:47 2009
@@ -27,9 +27,11 @@
import org.apache.cassandra.dht.Token;
import org.apache.cassandra.dht.IPartitioner;
import org.apache.cassandra.utils.BasicUtilities;
+import org.apache.cassandra.utils.FBUtilities;
import org.apache.cassandra.db.filter.IdentityQueryFilter;
import org.apache.cassandra.db.filter.QueryPath;
import org.apache.cassandra.db.filter.QueryFilter;
+import org.apache.cassandra.db.filter.NamesQueryFilter;
import org.apache.cassandra.net.EndPoint;
public class SystemTable
@@ -38,6 +40,7 @@
public static final String STATUS_CF = "LocationInfo"; // keep the old CF string for backwards-compatibility
private static final String LOCATION_KEY = "L";
private static final String BOOTSTRAP_KEY = "Bootstrap";
+ private static final byte[] BOOTSTRAP = utf8("B");
private static final byte[] TOKEN = utf8("Token");
private static final byte[] GENERATION = utf8("Generation");
private static StorageMetadata metadata;
@@ -135,6 +138,38 @@
return metadata;
}
+ public static boolean isBootstrapped()
+ {
+ Table table = null;
+ try
+ {
+ table = Table.open(Table.SYSTEM_TABLE);
+ QueryFilter filter = new NamesQueryFilter(BOOTSTRAP_KEY, new QueryPath(STATUS_CF), BOOTSTRAP);
+ ColumnFamily cf = table.getColumnFamilyStore(STATUS_CF).getColumnFamily(filter);
+ return cf != null;
+ }
+ catch (IOException e)
+ {
+ throw new RuntimeException(e);
+ }
+ }
+
+ public static void setBootstrapped()
+ {
+ ColumnFamily cf = ColumnFamily.create(Table.SYSTEM_TABLE, STATUS_CF);
+ cf.addColumn(new Column(BOOTSTRAP, new byte[] {1}, System.currentTimeMillis()));
+ RowMutation rm = new RowMutation(Table.SYSTEM_TABLE, BOOTSTRAP_KEY);
+ rm.add(cf);
+ try
+ {
+ rm.apply();
+ }
+ catch (IOException e)
+ {
+ throw new RuntimeException(e);
+ }
+ }
+
public static class StorageMetadata
{
private Token token;
Modified: incubator/cassandra/trunk/src/java/org/apache/cassandra/service/StorageService.java
URL: http://svn.apache.org/viewvc/incubator/cassandra/trunk/src/java/org/apache/cassandra/service/StorageService.java?rev=822876&r1=822875&r2=822876&view=diff
==============================================================================
--- incubator/cassandra/trunk/src/java/org/apache/cassandra/service/StorageService.java (original)
+++ incubator/cassandra/trunk/src/java/org/apache/cassandra/service/StorageService.java Wed Oct 7 19:41:47 2009
@@ -137,11 +137,10 @@
*/
public static StorageService instance()
{
- String bs = System.getProperty("bootstrap");
- boolean bootstrap = bs != null && bs.contains("true");
-
if (instance_ == null)
{
+ boolean bootstrap = !(DatabaseDescriptor.getSeeds().contains(getLocalControlEndPoint().getHost()) || SystemTable.isBootstrapped());
+
synchronized (StorageService.class)
{
if (instance_ == null)
@@ -205,6 +204,7 @@
logger_.debug("Removed " + s.getHost() + " as a bootstrap source");
if (bootstrapSet.isEmpty())
{
+ SystemTable.setBootstrapped();
isBootstrapMode = false;
updateTokenMetadata(storageMetadata_.getToken(), StorageService.tcpAddr_, false);