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)
{