Author: xedin
Date: Wed Dec 14 21:44:14 2011
New Revision: 1214488

URL: http://svn.apache.org/viewvc?rev=1214488&view=rev
Log:
CLibrary.createHardLinkWithExec() to check for errors
patch by Vijay; reviewed by Paul Cannon for CASSANDRA-3101

Modified:
    cassandra/branches/cassandra-1.0/CHANGES.txt
    
cassandra/branches/cassandra-1.0/src/java/org/apache/cassandra/utils/CLibrary.java

Modified: cassandra/branches/cassandra-1.0/CHANGES.txt
URL: 
http://svn.apache.org/viewvc/cassandra/branches/cassandra-1.0/CHANGES.txt?rev=1214488&r1=1214487&r2=1214488&view=diff
==============================================================================
--- cassandra/branches/cassandra-1.0/CHANGES.txt (original)
+++ cassandra/branches/cassandra-1.0/CHANGES.txt Wed Dec 14 21:44:14 2011
@@ -1,7 +1,7 @@
 1.0.7
  * fix assertion when dropping a columnfamily with no sstables (CASSANDRA-3614)
  * more efficient allocation of small bloom filters (CASSANDRA-3618)
-
+ * CLibrary.createHardLinkWithExec() to check for errors (CASSANDRA-3101)
 
 1.0.6
  * (CQL) fix cqlsh support for replicate_on_write (CASSANDRA-3596)

Modified: 
cassandra/branches/cassandra-1.0/src/java/org/apache/cassandra/utils/CLibrary.java
URL: 
http://svn.apache.org/viewvc/cassandra/branches/cassandra-1.0/src/java/org/apache/cassandra/utils/CLibrary.java?rev=1214488&r1=1214487&r2=1214488&view=diff
==============================================================================
--- 
cassandra/branches/cassandra-1.0/src/java/org/apache/cassandra/utils/CLibrary.java
 (original)
+++ 
cassandra/branches/cassandra-1.0/src/java/org/apache/cassandra/utils/CLibrary.java
 Wed Dec 14 21:44:14 2011
@@ -18,14 +18,18 @@
  */
 package org.apache.cassandra.utils;
 
+import java.io.BufferedReader;
 import java.io.File;
 import java.io.FileDescriptor;
 import java.io.IOException;
+import java.io.InputStreamReader;
 import java.lang.reflect.Field;
 
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import org.apache.commons.lang.StringUtils;
+
 import com.sun.jna.LastErrorException;
 import com.sun.jna.Native;
 
@@ -148,6 +152,7 @@ public final class CLibrary
         }
         catch (RuntimeException e)
         {
+            logger.error("Unable to create hard link", e);
             if (!(e instanceof LastErrorException))
                 throw e;
             // there are 17 different error codes listed on the man page.  
punt until/unless we find which
@@ -178,10 +183,37 @@ public final class CLibrary
             pb = new ProcessBuilder("ln", sourceFile.getAbsolutePath(), 
destinationFile.getAbsolutePath());
             pb.redirectErrorStream(true);
         }
+        try
+        {
+            exec(pb);
+        }
+        catch (IOException ex)
+        {
+            logger.error("Unable to create hard link", ex);
+            throw ex;
+        }
+    }
+
+    private static void exec(ProcessBuilder pb) throws IOException
+    {
         Process p = pb.start();
         try
         {
-            p.waitFor();
+            int errCode = p.waitFor();
+            if (errCode != 0)
+            {
+                BufferedReader in = new BufferedReader(new 
InputStreamReader(p.getInputStream()));
+                BufferedReader err = new BufferedReader(new 
InputStreamReader(p.getErrorStream()));
+                StringBuffer buff = new StringBuffer();
+                String str;
+                while ((str = in.readLine()) != null)
+                    
buff.append(str).append(System.getProperty("line.separator"));
+                while ((str = err.readLine()) != null)
+                    
buff.append(str).append(System.getProperty("line.separator"));
+                throw new IOException("Exception while executing the command: 
"+ StringUtils.join(pb.command(), " ") +
+                                      ", command error Code: " + errCode +
+                                      ", command output: "+ buff.toString());
+            }
         }
         catch (InterruptedException e)
         {


Reply via email to