Author: jbellis
Date: Thu Oct 27 16:44:50 2011
New Revision: 1189863
URL: http://svn.apache.org/viewvc?rev=1189863&view=rev
Log:
ignore 0.8 hints even if compaction begins before we try to purge them
patch by jbellis; reviewed by brandonwilliams for CASSANDRA-3385
Modified:
cassandra/branches/cassandra-1.0/CHANGES.txt
cassandra/branches/cassandra-1.0/src/java/org/apache/cassandra/db/HintedHandOffManager.java
cassandra/branches/cassandra-1.0/src/java/org/apache/cassandra/db/SystemTable.java
Modified: cassandra/branches/cassandra-1.0/CHANGES.txt
URL:
http://svn.apache.org/viewvc/cassandra/branches/cassandra-1.0/CHANGES.txt?rev=1189863&r1=1189862&r2=1189863&view=diff
==============================================================================
--- cassandra/branches/cassandra-1.0/CHANGES.txt (original)
+++ cassandra/branches/cassandra-1.0/CHANGES.txt Thu Oct 27 16:44:50 2011
@@ -28,6 +28,8 @@
* fix cassandra hanging on jsvc stop (CASSANDRA-3302)
* Avoid leveled compaction getting blocked on errors (CASSANDRA-3408)
* Make reloading the compaction strategy safe (CASSANDRA-3409)
+ * ignore 0.8 hints even if compaction begins before we try to purge
+ them (CASSANDRA-3385)
Merged from 0.8:
* (CQL) update grammar to require key clause in DELETE statement
(CASSANDRA-3349)
Modified:
cassandra/branches/cassandra-1.0/src/java/org/apache/cassandra/db/HintedHandOffManager.java
URL:
http://svn.apache.org/viewvc/cassandra/branches/cassandra-1.0/src/java/org/apache/cassandra/db/HintedHandOffManager.java?rev=1189863&r1=1189862&r2=1189863&view=diff
==============================================================================
---
cassandra/branches/cassandra-1.0/src/java/org/apache/cassandra/db/HintedHandOffManager.java
(original)
+++
cassandra/branches/cassandra-1.0/src/java/org/apache/cassandra/db/HintedHandOffManager.java
Thu Oct 27 16:44:50 2011
@@ -85,9 +85,13 @@ public class HintedHandOffManager implem
private static final Logger logger_ =
LoggerFactory.getLogger(HintedHandOffManager.class);
private static final int PAGE_SIZE = 1024;
- private static final String SEPARATOR = "-";
private static final int LARGE_NUMBER = 65536; // 64k nodes ought to be
enough for anybody.
+ // in 0.8, subcolumns were KS-CF bytestrings, and the data was stored in
the "normal" storage there.
+ // (so replay always consisted of sending an entire row,
+ // no matter how little was part of the mutation that created the hint.)
+ private static final String SEPARATOR_08 = "-";
+
private final NonBlockingHashSet<InetAddress> queuedDeliveries = new
NonBlockingHashSet<InetAddress>();
private final ExecutorService executor_ = new
JMXEnabledThreadPoolExecutor("HintedHandoff", Thread.MIN_PRIORITY);
@@ -139,7 +143,7 @@ public class HintedHandOffManager implem
{
RowMutation rm = new RowMutation(Table.SYSTEM_TABLE, tokenBytes);
rm.delete(new QueryPath(HINTS_CF, hintId), timestamp);
- rm.apply();
+ rm.applyUnsafe(); // don't bother with commitlog since we're going to
flush as soon as we're done with delivery
}
public void deleteHintsForEndpoint(final String ipOrHostname)
@@ -275,9 +279,20 @@ public class HintedHandOffManager implem
if (pagingFinished(hintColumnFamily, startColumn))
break;
+ page:
for (IColumn hint : hintColumnFamily.getSortedColumns())
{
startColumn = hint.name();
+ for (IColumn subColumn : hint.getSubColumns())
+ {
+ // both 0.8 and 1.0 column names are UTF8 strings, so this
check is safe
+ if
(ByteBufferUtil.string(subColumn.name()).contains(SEPARATOR_08))
+ {
+ logger_.debug("0.8-style hint found. This should have
been taken care of by purgeIncompatibleHints");
+ deleteHint(tokenBytes, hint.name(),
subColumn.timestamp());
+ continue page;
+ }
+ }
IColumn versionColumn =
hint.getSubColumn(ByteBufferUtil.bytes("version"));
IColumn tableColumn =
hint.getSubColumn(ByteBufferUtil.bytes("table"));
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=1189863&r1=1189862&r2=1189863&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
Thu Oct 27 16:44:50 2011
@@ -118,9 +118,15 @@ public class SystemTable
ColumnFamilyStore hintsCfs =
Table.open(Table.SYSTEM_TABLE).getColumnFamilyStore(HintedHandOffManager.HINTS_CF);
if (hintsCfs.getSSTables().size() > 0)
{
- logger.info("Possible old-format hints found. Snapshotting as
'old-hints' and purging");
- hintsCfs.snapshot("old-hints");
- hintsCfs.removeAllSSTables();
+ logger.info("Possible old-format hints found. Truncating");
+ try
+ {
+ hintsCfs.truncate();
+ }
+ catch (Exception e)
+ {
+ throw new RuntimeException(e);
+ }
}
logger.debug("Marking pre-1.0 hints purged");
RowMutation rm = new RowMutation(Table.SYSTEM_TABLE, COOKIE_KEY);