Author: gdusbabek Date: Fri Aug 20 19:16:35 2010 New Revision: 987605 URL: http://svn.apache.org/viewvc?rev=987605&view=rev Log: truncate hints if starting 0.7 for the first time. patch by gdusbabek, reviewed by jbellis. CASSANDRA-1414
Modified: cassandra/trunk/CHANGES.txt cassandra/trunk/NEWS.txt cassandra/trunk/src/java/org/apache/cassandra/avro/CassandraDaemon.java cassandra/trunk/src/java/org/apache/cassandra/db/SystemTable.java cassandra/trunk/src/java/org/apache/cassandra/thrift/CassandraDaemon.java Modified: cassandra/trunk/CHANGES.txt URL: http://svn.apache.org/viewvc/cassandra/trunk/CHANGES.txt?rev=987605&r1=987604&r2=987605&view=diff ============================================================================== --- cassandra/trunk/CHANGES.txt (original) +++ cassandra/trunk/CHANGES.txt Fri Aug 20 19:16:35 2010 @@ -22,6 +22,7 @@ dev * disallow invalid keyspace and column family names. This includes name that matches a '^\w+' regex. (CASSANDRA-1377) * use JNA, if present, to take snapshots (CASSANDRA-1371) + * truncate hints if starting 0.7 for the first time (CASSANDRA-1414) 0.7-beta1 Modified: cassandra/trunk/NEWS.txt URL: http://svn.apache.org/viewvc/cassandra/trunk/NEWS.txt?rev=987605&r1=987604&r2=987605&view=diff ============================================================================== --- cassandra/trunk/NEWS.txt (original) +++ cassandra/trunk/NEWS.txt Fri Aug 20 19:16:35 2010 @@ -35,6 +35,10 @@ Upgrading The Cassandra inter-node protocol is incompatible with 0.6.x releases, meaning you will have to bring your cluster down prior to upgrading; you cannot mix 0.6 and 0.7 nodes. + + The hints schema was changed from 0.6 to 0.7. Cassandra automatically + snapshots and then truncates the hints column family as part of + starting up 0.7 for the first time. Keyspace and ColumnFamily definitions are stored in the system keyspace, rather than the configuration file. Modified: cassandra/trunk/src/java/org/apache/cassandra/avro/CassandraDaemon.java URL: http://svn.apache.org/viewvc/cassandra/trunk/src/java/org/apache/cassandra/avro/CassandraDaemon.java?rev=987605&r1=987604&r2=987605&view=diff ============================================================================== --- cassandra/trunk/src/java/org/apache/cassandra/avro/CassandraDaemon.java (original) +++ cassandra/trunk/src/java/org/apache/cassandra/avro/CassandraDaemon.java Fri Aug 20 19:16:35 2010 @@ -116,6 +116,8 @@ public class CassandraDaemon extends org { MigrationManager.applyMigrations(currentMigration, lastMigration); } + + SystemTable.purgeIncompatibleHints(); // start server internals StorageService.instance.initServer(); Modified: cassandra/trunk/src/java/org/apache/cassandra/db/SystemTable.java URL: http://svn.apache.org/viewvc/cassandra/trunk/src/java/org/apache/cassandra/db/SystemTable.java?rev=987605&r1=987604&r2=987605&view=diff ============================================================================== --- cassandra/trunk/src/java/org/apache/cassandra/db/SystemTable.java (original) +++ cassandra/trunk/src/java/org/apache/cassandra/db/SystemTable.java Fri Aug 20 19:16:35 2010 @@ -52,6 +52,7 @@ public class SystemTable private static final byte[] LOCATION_KEY = "L".getBytes(UTF_8); private static final byte[] BOOTSTRAP_KEY = "Bootstrap".getBytes(UTF_8); private static final byte[] GRAVEYARD_KEY = "Graveyard".getBytes(UTF_8); + private static final byte[] COOKIE_KEY = "Cookies".getBytes(UTF_8); private static final byte[] BOOTSTRAP = "B".getBytes(UTF_8); private static final byte[] TOKEN = "Token".getBytes(UTF_8); private static final byte[] GENERATION = "Generation".getBytes(UTF_8); @@ -63,6 +64,25 @@ 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 + { + // 0.6->0.7 + final byte[] hintsPurged6to7 = "Hints purged as part of upgrading from 0.6.x to 0.7".getBytes(); + Table table = Table.open(Table.SYSTEM_TABLE); + QueryFilter dotSeven = QueryFilter.getNamesFilter(decorate(COOKIE_KEY), new QueryPath(STATUS_CF), hintsPurged6to7); + ColumnFamily cf = table.getColumnFamilyStore(STATUS_CF).getColumnFamily(dotSeven); + if (cf == null) + { + // upgrading from 0.6 to 0.7. + logger.info("Upgrading to 0.7. Purging hints if there are any. Old hints will be snapshotted."); + new Truncation(Table.SYSTEM_TABLE, HintedHandOffManager.HINTS_CF).apply(); + RowMutation rm = new RowMutation(Table.SYSTEM_TABLE, COOKIE_KEY); + rm.add(new QueryPath(STATUS_CF, null, hintsPurged6to7), "oh yes, it they were purged.".getBytes(), new TimestampClock(System.currentTimeMillis())); + rm.apply(); + } + } /** * Record token being used by another node Modified: cassandra/trunk/src/java/org/apache/cassandra/thrift/CassandraDaemon.java URL: http://svn.apache.org/viewvc/cassandra/trunk/src/java/org/apache/cassandra/thrift/CassandraDaemon.java?rev=987605&r1=987604&r2=987605&view=diff ============================================================================== --- cassandra/trunk/src/java/org/apache/cassandra/thrift/CassandraDaemon.java (original) +++ cassandra/trunk/src/java/org/apache/cassandra/thrift/CassandraDaemon.java Fri Aug 20 19:16:35 2010 @@ -133,6 +133,8 @@ public class CassandraDaemon extends org MigrationManager.applyMigrations(currentMigration, lastMigration); } + SystemTable.purgeIncompatibleHints(); + // start server internals StorageService.instance.initServer();