-----------------------------------------------------------
This is an automatically generated e-mail. To reply, visit:
https://reviews.apache.org/r/6680/
-----------------------------------------------------------

(Updated Aug. 17, 2012, 11:51 p.m.)


Review request for Flume.


Changes
-------

Minor updates, removal of duplicate code, etc.


Description
-------

Very sorry for the enormous patch. I don't see a way around a large patch due 
to the nature of this JIRA. This is a first crack at a patch. I will be 
reviewing it again and possibly providing an updated patch without any reviews. 
However, I wanted to get feedback early.

This change creates file format versions 3, which allows field updates such as 
FLUME-1485 to be done without changing the format version and as such impact 
users.

This new format is entirely packed by Protocol Buffers with the exception of 
the memory mapped file we use as the queue. This last file has a checkpoint in 
progress marker the remaining portion is a memory mapped long buffer.

All data metadata was moved to seperate files so it can be updated without 
random writes.

Where as before, given a checkpoint directory and log directory we would have:

chkpt/checkpoint
log/log-1
log/log-2

Where as now we have:

chkpt/checkpoint
chkpt/checkpoint.meta
log/log-1
log/log-1.meta
log/log-2
log/log-2.meta

The .meta files contain all metadata and the files no longer contain a VERSION 
prefix. The .meta files do contain the a version identifer.

This patch is backwards compatible in that when it starts up:

-Old checkpoint is upgraded
-Only new v3 log files are written
-Old v2 log files are still readable

This process is tested during unit tests to the regression tests added in 
FLUME-1431. The long term plan would be to remove the V2 code after a couple 
releases.

To support this funcationality, the following were changed:

-IO was removed from FlumeEventQueue and operates on an abstract class 
EventQueueBackingStore which has a contrete implementation for V2 and V3.
-Checkpoint/Log file readers/writes are not obtained from factories which 
choose the correct object or in the case of the event queue execute the upgrade 
process


This addresses bug FLUME-1487.
    https://issues.apache.org/jira/browse/FLUME-1487


Diffs (updated)
-----

  flume-ng-channels/flume-file-channel/pom.xml cd882e5 
  
flume-ng-channels/flume-file-channel/src/main/java/org/apache/flume/channel/file/Commit.java
 2c92d28 
  
flume-ng-channels/flume-file-channel/src/main/java/org/apache/flume/channel/file/EventQueueBackingStore.java
 PRE-CREATION 
  
flume-ng-channels/flume-file-channel/src/main/java/org/apache/flume/channel/file/EventQueueBackingStoreFactory.java
 PRE-CREATION 
  
flume-ng-channels/flume-file-channel/src/main/java/org/apache/flume/channel/file/EventQueueBackingStoreFile.java
 PRE-CREATION 
  
flume-ng-channels/flume-file-channel/src/main/java/org/apache/flume/channel/file/EventQueueBackingStoreFileV2.java
 PRE-CREATION 
  
flume-ng-channels/flume-file-channel/src/main/java/org/apache/flume/channel/file/EventQueueBackingStoreFileV3.java
 PRE-CREATION 
  
flume-ng-channels/flume-file-channel/src/main/java/org/apache/flume/channel/file/FlumeEventPointer.java
 e40cd8c 
  
flume-ng-channels/flume-file-channel/src/main/java/org/apache/flume/channel/file/FlumeEventQueue.java
 9bfee2d 
  
flume-ng-channels/flume-file-channel/src/main/java/org/apache/flume/channel/file/Log.java
 11f1e1f 
  
flume-ng-channels/flume-file-channel/src/main/java/org/apache/flume/channel/file/LogFile.java
 561a501 
  
flume-ng-channels/flume-file-channel/src/main/java/org/apache/flume/channel/file/LogFileFactory.java
 PRE-CREATION 
  
flume-ng-channels/flume-file-channel/src/main/java/org/apache/flume/channel/file/LogFileV2.java
 PRE-CREATION 
  
flume-ng-channels/flume-file-channel/src/main/java/org/apache/flume/channel/file/LogFileV3.java
 PRE-CREATION 
  
flume-ng-channels/flume-file-channel/src/main/java/org/apache/flume/channel/file/LogUtils.java
 09956a4 
  
flume-ng-channels/flume-file-channel/src/main/java/org/apache/flume/channel/file/Put.java
 c3fda6b 
  
flume-ng-channels/flume-file-channel/src/main/java/org/apache/flume/channel/file/ReplayHandler.java
 bbca62c 
  
flume-ng-channels/flume-file-channel/src/main/java/org/apache/flume/channel/file/Rollback.java
 6e4e1fc 
  
flume-ng-channels/flume-file-channel/src/main/java/org/apache/flume/channel/file/Serialization.java
 PRE-CREATION 
  
flume-ng-channels/flume-file-channel/src/main/java/org/apache/flume/channel/file/Take.java
 cb575f9 
  
flume-ng-channels/flume-file-channel/src/main/java/org/apache/flume/channel/file/TransactionEventRecord.java
 67c68f8 
  flume-ng-channels/flume-file-channel/src/main/proto/filechannel.proto 
PRE-CREATION 
  
flume-ng-channels/flume-file-channel/src/test/java/org/apache/flume/channel/file/TestCheckpoint.java
 7ec5916 
  
flume-ng-channels/flume-file-channel/src/test/java/org/apache/flume/channel/file/TestFileChannel.java
 1d5a0f9 
  
flume-ng-channels/flume-file-channel/src/test/java/org/apache/flume/channel/file/TestFlumeEventQueue.java
 569b7c7 
  
flume-ng-channels/flume-file-channel/src/test/java/org/apache/flume/channel/file/TestLog.java
 e0b5e3f 
  
flume-ng-channels/flume-file-channel/src/test/java/org/apache/flume/channel/file/TestLogFile.java
 193cd2b 
  
flume-ng-channels/flume-file-channel/src/test/java/org/apache/flume/channel/file/TestLogRecord.java
 9f6adc7 
  
flume-ng-channels/flume-file-channel/src/test/java/org/apache/flume/channel/file/TestTransactionEventRecord.java
 c73b11b 
  
flume-ng-channels/flume-file-channel/src/test/java/org/apache/flume/channel/file/TestTransactionEventRecordV2.java
 PRE-CREATION 
  
flume-ng-channels/flume-file-channel/src/test/java/org/apache/flume/channel/file/TestTransactionEventRecordV3.java
 PRE-CREATION 

Diff: https://reviews.apache.org/r/6680/diff/


Testing
-------

Unit tests pass. I will be running some manual tests as well and will update 
when I do so.


Thanks,

Brock Noland

Reply via email to