You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@flume.apache.org by hs...@apache.org on 2012/07/19 00:24:12 UTC

svn commit: r1363157 - /flume/trunk/flume-ng-channels/flume-file-channel/src/main/java/org/apache/flume/channel/file/LogFile.java

Author: hshreedharan
Date: Wed Jul 18 22:24:11 2012
New Revision: 1363157

URL: http://svn.apache.org/viewvc?rev=1363157&view=rev
Log:
FLUME-1380. File channel log can record the op code and not the operation in some cases.

(Arvind Prabhakar via Hari Shreedharan)

Modified:
    flume/trunk/flume-ng-channels/flume-file-channel/src/main/java/org/apache/flume/channel/file/LogFile.java

Modified: flume/trunk/flume-ng-channels/flume-file-channel/src/main/java/org/apache/flume/channel/file/LogFile.java
URL: http://svn.apache.org/viewvc/flume/trunk/flume-ng-channels/flume-file-channel/src/main/java/org/apache/flume/channel/file/LogFile.java?rev=1363157&r1=1363156&r2=1363157&view=diff
==============================================================================
--- flume/trunk/flume-ng-channels/flume-file-channel/src/main/java/org/apache/flume/channel/file/LogFile.java (original)
+++ flume/trunk/flume-ng-channels/flume-file-channel/src/main/java/org/apache/flume/channel/file/LogFile.java Wed Jul 18 22:24:11 2012
@@ -195,10 +195,14 @@ class LogFile {
       Preconditions.checkArgument(expectedLength < (long) Integer.MAX_VALUE);
       int offset = (int)length;
       Preconditions.checkState(offset > 0);
-      preallocate(1 + buffer.capacity());
-      writeFileHandle.writeByte(OP_RECORD);
-      int wrote = writeFileChannel.write(buffer);
-      Preconditions.checkState(wrote == buffer.limit());
+      int recordLength = 1 + buffer.capacity();
+      preallocate(recordLength);
+      ByteBuffer toWrite = ByteBuffer.allocate(recordLength);
+      toWrite.put(OP_RECORD);
+      toWrite.put(buffer);
+      toWrite.position(0);
+      int wrote = writeFileChannel.write(toWrite);
+      Preconditions.checkState(wrote == toWrite.limit());
       return Pair.of(fileID, offset);
     }
     private void preallocate(int size) throws IOException {