Author: jbellis
Date: Sat Jan 15 19:37:11 2011
New Revision: 1059401

URL: http://svn.apache.org/viewvc?rev=1059401&view=rev
Log:
fix read repair on CL.ONE regression
patch by jbellis; reviewed by tjake for CASSANDRA-1985

Modified:
    
cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/service/RepairCallback.java
    
cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/service/StorageProxy.java

Modified: 
cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/service/RepairCallback.java
URL: 
http://svn.apache.org/viewvc/cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/service/RepairCallback.java?rev=1059401&r1=1059400&r2=1059401&view=diff
==============================================================================
--- 
cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/service/RepairCallback.java
 (original)
+++ 
cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/service/RepairCallback.java
 Sat Jan 15 19:37:11 2011
@@ -13,9 +13,9 @@ import org.apache.cassandra.utils.Simple
 
 public class RepairCallback<T> implements IAsyncCallback
 {
-    public final IResponseResolver<T> resolver;
+    private final IResponseResolver<T> resolver;
     private final List<InetAddress> endpoints;
-    protected final SimpleCondition condition = new SimpleCondition();
+    private final SimpleCondition condition = new SimpleCondition();
     private final long startTime;
 
     public RepairCallback(IResponseResolver<T> resolver, List<InetAddress> 
endpoints)
@@ -41,10 +41,9 @@ public class RepairCallback<T> implement
             throw new AssertionError(ex);
         }
 
-        return resolver.resolve();
+        return resolver.isDataPresent() ? resolver.resolve() : null;
     }
 
-
     public void response(Message message)
     {
         resolver.preprocess(message);

Modified: 
cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/service/StorageProxy.java
URL: 
http://svn.apache.org/viewvc/cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/service/StorageProxy.java?rev=1059401&r1=1059400&r2=1059401&view=diff
==============================================================================
--- 
cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/service/StorageProxy.java
 (original)
+++ 
cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/service/StorageProxy.java
 Sat Jan 15 19:37:11 2011
@@ -867,7 +867,15 @@ public class StorageProxy implements Sto
             {
                 if (logger.isDebugEnabled())
                     logger.debug("Digest mismatch:", e);
-                repair(command, endpoints);
+                final RepairCallback<Row> callback = repair(command, 
endpoints);
+                Runnable runnable = new WrappedRunnable()
+                {
+                    public void runMayThrow() throws DigestMismatchException, 
IOException, TimeoutException
+                    {
+                        callback.get();
+                    }
+                };
+                repairExecutor.schedule(runnable, 
DatabaseDescriptor.getRpcTimeout(), TimeUnit.MILLISECONDS);
             }
         }
     }


Reply via email to