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

Reply via email to