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 2012/02/29 04:16:02 UTC

[10/10] git commit: delete hints from dropped ColumnFamilies on handoff instead of erroring out patch by jbellis; reviewed by brandonwilliams for CASSANDRA-3975

delete hints from dropped ColumnFamilies on handoff instead of erroring out
patch by jbellis; reviewed by brandonwilliams for CASSANDRA-3975


Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo
Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/24a70804
Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/24a70804
Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/24a70804

Branch: refs/heads/cassandra-1.0
Commit: 24a70804086a07409fef1303f7c53327661806bc
Parents: 4a49b9d
Author: Jonathan Ellis <jb...@apache.org>
Authored: Tue Feb 28 15:05:28 2012 -0600
Committer: Jonathan Ellis <jb...@apache.org>
Committed: Tue Feb 28 21:13:43 2012 -0600

----------------------------------------------------------------------
 CHANGES.txt                                        |    2 +
 .../cassandra/db/ColumnFamilySerializer.java       |    5 +--
 .../apache/cassandra/db/HintedHandOffManager.java  |   18 +++++++-
 .../cassandra/db/UnknownColumnFamilyException.java |   33 +++++++++++++++
 .../db/UnserializableColumnFamilyException.java    |   33 ---------------
 .../apache/cassandra/db/commitlog/CommitLog.java   |    2 +-
 6 files changed, 52 insertions(+), 41 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cassandra/blob/24a70804/CHANGES.txt
----------------------------------------------------------------------
diff --git a/CHANGES.txt b/CHANGES.txt
index 31ae77d..cb6c255 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -1,5 +1,7 @@
 1.0.9
  * always compact away deleted hints immediately after handoff (CASSANDRA-3955)
+ * delete hints from dropped ColumnFamilies on handoff instead of
+   erroring out (CASSANDRA-3975)
 
 
 1.0.8

http://git-wip-us.apache.org/repos/asf/cassandra/blob/24a70804/src/java/org/apache/cassandra/db/ColumnFamilySerializer.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/db/ColumnFamilySerializer.java b/src/java/org/apache/cassandra/db/ColumnFamilySerializer.java
index 7f11948..abfe76c 100644
--- a/src/java/org/apache/cassandra/db/ColumnFamilySerializer.java
+++ b/src/java/org/apache/cassandra/db/ColumnFamilySerializer.java
@@ -24,17 +24,14 @@ package org.apache.cassandra.db;
 import java.io.DataInput;
 import java.io.DataOutput;
 import java.io.IOException;
-import java.io.RandomAccessFile;
 import java.util.Collection;
 
 import org.apache.cassandra.config.Schema;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import org.apache.cassandra.config.CFMetaData;
 import org.apache.cassandra.io.IColumnSerializer;
 import org.apache.cassandra.io.ISerializer;
-import org.apache.cassandra.io.sstable.SSTableMetadata;
 
 public class ColumnFamilySerializer implements ISerializer<ColumnFamily>
 {
@@ -126,7 +123,7 @@ public class ColumnFamilySerializer implements ISerializer<ColumnFamily>
         // create a ColumnFamily based on the cf id
         int cfId = dis.readInt();
         if (Schema.instance.getCF(cfId) == null)
-            throw new UnserializableColumnFamilyException("Couldn't find cfId=" + cfId, cfId);
+            throw new UnknownColumnFamilyException("Couldn't find cfId=" + cfId, cfId);
         ColumnFamily cf = ColumnFamily.create(cfId, factory);
         deserializeFromSSTableNoColumns(cf, dis);
         deserializeColumns(dis, cf, flag);

http://git-wip-us.apache.org/repos/asf/cassandra/blob/24a70804/src/java/org/apache/cassandra/db/HintedHandOffManager.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/db/HintedHandOffManager.java b/src/java/org/apache/cassandra/db/HintedHandOffManager.java
index ca416d7..a9f979f 100644
--- a/src/java/org/apache/cassandra/db/HintedHandOffManager.java
+++ b/src/java/org/apache/cassandra/db/HintedHandOffManager.java
@@ -349,13 +349,25 @@ public class HintedHandOffManager implements HintedHandOffManagerMBean
                 assert keyColumn != null;
                 assert mutationColumn != null;
                 DataInputStream in = new DataInputStream(ByteBufferUtil.inputStream(mutationColumn.value()));
-                RowMutation rm = RowMutation.serializer().deserialize(in, ByteBufferUtil.toInt(versionColumn.value()));
+                RowMutation rm;
+                try
+                {
+                    rm = RowMutation.serializer().deserialize(in, ByteBufferUtil.toInt(versionColumn.value()));
+                }
+                catch (UnknownColumnFamilyException e)
+                {
+                    logger_.debug("Skipping delivery of hint for deleted columnfamily", e);
+                    rm = null;
+                }
 
                 try
                 {
-                    sendMutation(endpoint, rm);
+                    if (rm != null)
+                    {
+                        sendMutation(endpoint, rm);
+                        rowsReplayed++;
+                    }
                     deleteHint(tokenBytes, hint.name(), hint.maxTimestamp());
-                    rowsReplayed++;
                 }
                 catch (TimeoutException e)
                 {

http://git-wip-us.apache.org/repos/asf/cassandra/blob/24a70804/src/java/org/apache/cassandra/db/UnknownColumnFamilyException.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/db/UnknownColumnFamilyException.java b/src/java/org/apache/cassandra/db/UnknownColumnFamilyException.java
new file mode 100644
index 0000000..e371262
--- /dev/null
+++ b/src/java/org/apache/cassandra/db/UnknownColumnFamilyException.java
@@ -0,0 +1,33 @@
+package org.apache.cassandra.db;
+
+import java.io.IOException;
+
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * <p/>
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * <p/>
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+public class UnknownColumnFamilyException extends IOException
+{
+    public final int cfId;
+    
+    public UnknownColumnFamilyException(String msg, int cfId)
+    {
+        super(msg);
+        this.cfId = cfId;
+    }
+}

http://git-wip-us.apache.org/repos/asf/cassandra/blob/24a70804/src/java/org/apache/cassandra/db/UnserializableColumnFamilyException.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/db/UnserializableColumnFamilyException.java b/src/java/org/apache/cassandra/db/UnserializableColumnFamilyException.java
deleted file mode 100644
index df46b28..0000000
--- a/src/java/org/apache/cassandra/db/UnserializableColumnFamilyException.java
+++ /dev/null
@@ -1,33 +0,0 @@
-package org.apache.cassandra.db;
-
-import java.io.IOException;
-
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- * <p/>
- * http://www.apache.org/licenses/LICENSE-2.0
- * <p/>
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-
-public class UnserializableColumnFamilyException extends IOException
-{
-    public final int cfId;
-    
-    public UnserializableColumnFamilyException(String msg, int cfId)
-    {
-        super(msg);
-        this.cfId = cfId;
-    }
-}

http://git-wip-us.apache.org/repos/asf/cassandra/blob/24a70804/src/java/org/apache/cassandra/db/commitlog/CommitLog.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/db/commitlog/CommitLog.java b/src/java/org/apache/cassandra/db/commitlog/CommitLog.java
index c4942d2..1a5509e 100644
--- a/src/java/org/apache/cassandra/db/commitlog/CommitLog.java
+++ b/src/java/org/apache/cassandra/db/commitlog/CommitLog.java
@@ -285,7 +285,7 @@ public class CommitLog implements CommitLogMBean
                         // the current version.  so do make sure the CL is drained prior to upgrading a node.
                         rm = RowMutation.serializer().deserialize(new DataInputStream(bufIn), MessagingService.version_, IColumnSerializer.Flag.LOCAL);
                     }
-                    catch (UnserializableColumnFamilyException ex)
+                    catch (UnknownColumnFamilyException ex)
                     {
                         AtomicInteger i = invalidMutations.get(ex.cfId);
                         if (i == null)