Author: [email protected]
Date: Fri Apr 6 17:14:40 2012
New Revision: 2198
Log:
[AMDATUCASSANDRA-172] Added extra catch for IOError and enhanced error logging
Added:
trunk/amdatu-cassandra/_patches/AMDATUCASSANDRA-172-3.patch
Modified:
trunk/amdatu-cassandra/_patches/patches overview.txt
trunk/amdatu-cassandra/pom.xml
Added: trunk/amdatu-cassandra/_patches/AMDATUCASSANDRA-172-3.patch
==============================================================================
--- (empty file)
+++ trunk/amdatu-cassandra/_patches/AMDATUCASSANDRA-172-3.patch Fri Apr 6
17:14:40 2012
@@ -0,0 +1,101 @@
+diff --git a/src/java/org/apache/cassandra/db/ColumnFamilySerializer.java
b/src/java/org/apache/cassandra/db/ColumnFamilySerializer.java
+index 9f796f9..f9bca43 100644
+--- a/src/java/org/apache/cassandra/db/ColumnFamilySerializer.java
++++ b/src/java/org/apache/cassandra/db/ColumnFamilySerializer.java
+@@ -23,15 +23,16 @@ package org.apache.cassandra.db;
+
+ import java.io.DataInput;
+ import java.io.DataOutput;
++import java.io.EOFException;
++import java.io.IOError;
+ import java.io.IOException;
+ import java.util.Collection;
+
+-import org.slf4j.Logger;
+-import org.slf4j.LoggerFactory;
+-
+ import org.apache.cassandra.config.CFMetaData;
+-import org.apache.cassandra.io.ICompactSerializer2;
++import org.apache.cassandra.config.DatabaseDescriptor;
+ import org.apache.cassandra.io.ICompactSerializer3;
++import org.slf4j.Logger;
++import org.slf4j.LoggerFactory;
+
+ public class ColumnFamilySerializer implements
ICompactSerializer3<ColumnFamily>
+ {
+@@ -121,10 +122,33 @@ public class ColumnFamilySerializer implements
ICompactSerializer3<ColumnFamily>
+ int cfId = dis.readInt();
+ if (CFMetaData.getCF(cfId) == null)
+ throw new UnserializableColumnFamilyException("Couldn't find
cfId=" + cfId, cfId);
+- ColumnFamily cf = ColumnFamily.create(cfId);
+- deserializeFromSSTableNoColumns(cf, dis);
+- deserializeColumns(dis, cf, intern, fromRemote);
+- return cf;
++ try {
++ ColumnFamily cf = ColumnFamily.create(cfId);
++ deserializeFromSSTableNoColumns(cf, dis);
++ deserializeColumns(dis, cf, intern, fromRemote);
++ return cf;
++ } catch (IOError err) {
++ String cfName = null;
++ try {
++ cfName = DatabaseDescriptor.getCFMetaData(cfId).cfName;
++ } catch (Exception e) {
++ cfName = "Unknown";
++ }
++
++ String msg = "Could not deserialize ColumnFamily: id='" + cfId +
"', name='" + cfName + "'";
++ throw new UnserializableColumnFamilyException(msg, err, cfId);
++ } catch (EOFException eof) {
++
++ String cfName = null;
++ try {
++ cfName = DatabaseDescriptor.getCFMetaData(cfId).cfName;
++ } catch (Exception e) {
++ cfName = "Unknown";
++ }
++
++ String msg = "Could not deserialize ColumnFamily: id='" + cfId +
"', name='" + cfName + "'";
++ throw new UnserializableColumnFamilyException(msg, eof, cfId);
++ }
+ }
+
+ public void deserializeColumns(DataInput dis, ColumnFamily cf, boolean
intern, boolean fromRemote) throws IOException
+diff --git
a/src/java/org/apache/cassandra/db/UnserializableColumnFamilyException.java
b/src/java/org/apache/cassandra/db/UnserializableColumnFamilyException.java
+index df46b28..425ca44 100644
+--- a/src/java/org/apache/cassandra/db/UnserializableColumnFamilyException.java
++++ b/src/java/org/apache/cassandra/db/UnserializableColumnFamilyException.java
+@@ -30,4 +30,10 @@ public class UnserializableColumnFamilyException extends
IOException
+ super(msg);
+ this.cfId = cfId;
+ }
++
++ public UnserializableColumnFamilyException(String msg, Throwable t, int
cfId)
++ {
++ super(msg, t);
++ this.cfId = cfId;
++ }
+ }
+diff --git a/src/java/org/apache/cassandra/db/commitlog/CommitLog.java
b/src/java/org/apache/cassandra/db/commitlog/CommitLog.java
+index ba1ebf0..ecc2a2e 100644
+--- a/src/java/org/apache/cassandra/db/commitlog/CommitLog.java
++++ b/src/java/org/apache/cassandra/db/commitlog/CommitLog.java
+@@ -276,6 +276,9 @@ public class CommitLog
+ }
+ catch (UnserializableColumnFamilyException ex)
+ {
++ // Log the error message
++ logger.warn(ex.getMessage());
++
+ AtomicInteger i = invalidMutations.get(ex.cfId);
+ if (i == null)
+ {
+@@ -346,7 +349,7 @@ public class CommitLog
+ }
+
+ for (Map.Entry<Integer, AtomicInteger> entry :
invalidMutations.entrySet())
+- logger.info(String.format("Skipped %d mutations from unknown
(probably removed) CF with id %d", entry.getValue().intValue(),
entry.getKey()));
++ logger.warn(String.format("Skipped %d mutations from unknown
(probably removed) CF with id %d", entry.getValue().intValue(),
entry.getKey()));
+
+ // wait for all the writes to finish on the mutation stage
+ FBUtilities.waitOnFutures(futures);
Modified: trunk/amdatu-cassandra/_patches/patches overview.txt
==============================================================================
--- trunk/amdatu-cassandra/_patches/patches overview.txt (original)
+++ trunk/amdatu-cassandra/_patches/patches overview.txt Fri Apr 6
17:14:40 2012
@@ -7,9 +7,9 @@
QUORUM range scan read triggers unnecessary row mutation in a 3-node cluster
with RF 3
-> 0.8.10-2
-http://jira.amdatu.org/jira/browse/AMDATUCASSANDRA-172
+http://jira.amdatu.org/jira/browse/AMDATUCASSANDRA-172 (v1, v2, v3)
Cassandra should skip corrupted commit log entries
--> 0.8.10-3
+-> 0.8.10-5
Hector core 0.8.0-3
@@ -24,4 +24,4 @@
http://jira.amdatu.org/jira/browse/AMDATUCASSANDRA-142
memory leak in hector/thrift connection pool
-> 0.6.0-2
--> 0.6.1-2
\ No newline at end of file
+-> 0.6.1-2
Modified: trunk/amdatu-cassandra/pom.xml
==============================================================================
--- trunk/amdatu-cassandra/pom.xml (original)
+++ trunk/amdatu-cassandra/pom.xml Fri Apr 6 17:14:40 2012
@@ -36,7 +36,7 @@
<amdatu.web.version>0.2.1</amdatu.web.version>
<!-- Version of cassandra itself -->
- <cassandra.version>0.8.10-3</cassandra.version>
+ <cassandra.version>0.8.10-5</cassandra.version>
<!-- Version of SLF4J -->
<slf4j.version>1.6.1</slf4j.version>
_______________________________________________
Amdatu-commits mailing list
[email protected]
http://lists.amdatu.org/mailman/listinfo/amdatu-commits