Author: billie
Date: Thu Jun 6 17:46:38 2013
New Revision: 1490379
URL: http://svn.apache.org/r1490379
Log:
ACCUMULO-1486 handle absence of sync method
Modified:
accumulo/trunk/server/src/main/java/org/apache/accumulo/server/tabletserver/log/DfsLogger.java
Modified:
accumulo/trunk/server/src/main/java/org/apache/accumulo/server/tabletserver/log/DfsLogger.java
URL:
http://svn.apache.org/viewvc/accumulo/trunk/server/src/main/java/org/apache/accumulo/server/tabletserver/log/DfsLogger.java?rev=1490379&r1=1490378&r2=1490379&view=diff
==============================================================================
---
accumulo/trunk/server/src/main/java/org/apache/accumulo/server/tabletserver/log/DfsLogger.java
(original)
+++
accumulo/trunk/server/src/main/java/org/apache/accumulo/server/tabletserver/log/DfsLogger.java
Thu Jun 6 17:46:38 2013
@@ -271,13 +271,21 @@ public class DfsLogger {
logFile = fs.create(logPath, true,
fs.getConf().getInt("io.file.buffer.size", 4096), replication, blockSize);
try {
- // sync: send data to datanodes
- sync = logFile.getClass().getMethod("sync");
+ NoSuchMethodException e = null;
try {
- // hsych: send data to datanodes and sync the data to disk
+ // sync: send data to datanodes
+ sync = logFile.getClass().getMethod("sync");
+ } catch (NoSuchMethodException ex) {
+ e = ex;
+ }
+ try {
+ // hsync: send data to datanodes and sync the data to disk
sync = logFile.getClass().getMethod("hsync");
+ e = null;
} catch (NoSuchMethodException ex) {
}
+ if (e != null)
+ throw new RuntimeException(e);
} catch (Exception e) {
throw new RuntimeException(e);
}
@@ -314,13 +322,13 @@ public class DfsLogger {
key.tserverSession = filename;
key.filename = filename;
write(key, EMPTY);
- logFile.sync();
+ sync.invoke(logFile);
log.debug("Got new write-ahead log: " + this);
- } catch (IOException ex) {
+ } catch (Exception ex) {
if (logFile != null)
logFile.close();
logFile = null;
- throw ex;
+ throw new IOException(ex);
}
Thread t = new Daemon(new LogSyncingTask());
@@ -421,10 +429,10 @@ public class DfsLogger {
key.tablet = tablet;
try {
write(key, EMPTY);
- logFile.sync();
- } catch (IOException ex) {
+ sync.invoke(logFile);
+ } catch (Exception ex) {
log.error(ex);
- throw ex;
+ throw new IOException(ex);
}
}