Browse Source

HDFS-3023. Optimize entries in edits log for persistBlocks call. Contributed by Todd Lipcon.

git-svn-id: https://svn.apache.org/repos/asf/hadoop/common/branches/HDFS-1623@1295356 13f79535-47bb-0310-9956-ffa450edef68
Todd Lipcon 13 years ago
parent
commit
30cffeb388

+ 2 - 0
hadoop-hdfs-project/hadoop-hdfs/CHANGES.HDFS-1623.txt

@@ -244,3 +244,5 @@ HDFS-2920. fix remaining TODO items. (atm and todd)
 HDFS-3027. Implement a simple NN health check. (atm)
 
 HDFS-2979. Balancer should use logical uri for creating failover proxy with HA enabled. (atm)
+
+HDFS-3023. Optimize entries in edits log for persistBlocks call. (todd)

+ 4 - 1
hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/protocol/LayoutVersion.java

@@ -91,7 +91,10 @@ public class LayoutVersion {
     STORED_TXIDS(-37, "Transaction IDs are stored in edits log and image files"),
     TXID_BASED_LAYOUT(-38, "File names in NN Storage are based on transaction IDs"), 
     EDITLOG_OP_OPTIMIZATION(-39,
-        "Use LongWritable and ShortWritable directly instead of ArrayWritable of UTF8");
+        "Use LongWritable and ShortWritable directly instead of ArrayWritable of UTF8"),
+    OPTIMIZE_PERSIST_BLOCKS(-40,
+        "Serialize block lists with delta-encoded variable length ints, " +
+        "add OP_UPDATE_BLOCKS");
     
     final int lv;
     final int ancestorLV;

+ 1 - 1
hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/FSDirectory.java

@@ -369,7 +369,7 @@ public class FSDirectory implements Closeable {
 
     writeLock();
     try {
-      fsImage.getEditLog().logOpenFile(path, file);
+      fsImage.getEditLog().logUpdateBlocks(path, file);
       if(NameNode.stateChangeLog.isDebugEnabled()) {
         NameNode.stateChangeLog.debug("DIR* FSDirectory.persistBlocks: "
             +path+" with "+ file.getBlocks().length 

+ 7 - 0
hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/FSEditLog.java

@@ -626,6 +626,13 @@ public class FSEditLog  {
     logEdit(op);
   }
   
+  public void logUpdateBlocks(String path, INodeFileUnderConstruction file) {
+    UpdateBlocksOp op = UpdateBlocksOp.getInstance()
+      .setPath(path)
+      .setBlocks(file.getBlocks());
+    logEdit(op);
+  }
+  
   /** 
    * Add create directory record to edit log
    */

+ 46 - 22
hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/FSEditLogLoader.java

@@ -37,6 +37,7 @@ import org.apache.hadoop.hdfs.server.blockmanagement.BlockInfo;
 import org.apache.hadoop.hdfs.server.blockmanagement.BlockInfoUnderConstruction;
 import org.apache.hadoop.hdfs.server.common.Storage;
 import org.apache.hadoop.hdfs.server.namenode.FSEditLogOp.AddCloseOp;
+import org.apache.hadoop.hdfs.server.namenode.FSEditLogOp.BlockListUpdatingOp;
 import org.apache.hadoop.hdfs.server.namenode.FSEditLogOp.CancelDelegationTokenOp;
 import org.apache.hadoop.hdfs.server.namenode.FSEditLogOp.ClearNSQuotaOp;
 import org.apache.hadoop.hdfs.server.namenode.FSEditLogOp.ConcatDeleteOp;
@@ -55,6 +56,7 @@ import org.apache.hadoop.hdfs.server.namenode.FSEditLogOp.SetQuotaOp;
 import org.apache.hadoop.hdfs.server.namenode.FSEditLogOp.SetReplicationOp;
 import org.apache.hadoop.hdfs.server.namenode.FSEditLogOp.SymlinkOp;
 import org.apache.hadoop.hdfs.server.namenode.FSEditLogOp.TimesOp;
+import org.apache.hadoop.hdfs.server.namenode.FSEditLogOp.UpdateBlocksOp;
 import org.apache.hadoop.hdfs.server.namenode.FSEditLogOp.UpdateMasterKeyOp;
 import org.apache.hadoop.hdfs.server.namenode.LeaseManager.Lease;
 import org.apache.hadoop.hdfs.util.Holder;
@@ -242,6 +244,10 @@ public class FSEditLogLoader {
       // Fall-through for case 2.
       // Regardless of whether it's a new file or an updated file,
       // update the block list.
+      
+      // Update the salient file attributes.
+      newFile.setAccessTime(addCloseOp.atime);
+      newFile.setModificationTimeForce(addCloseOp.mtime);
       updateBlocks(fsDir, addCloseOp, newFile);
       break;
     }
@@ -283,6 +289,24 @@ public class FSEditLogLoader {
       }
       break;
     }
+    case OP_UPDATE_BLOCKS: {
+      UpdateBlocksOp updateOp = (UpdateBlocksOp)op;
+      if (FSNamesystem.LOG.isDebugEnabled()) {
+        FSNamesystem.LOG.debug(op.opCode + ": " + updateOp.path +
+            " numblocks : " + updateOp.blocks.length);
+      }
+      INodeFile oldFile = getINodeFile(fsDir, updateOp.path);
+      if (oldFile == null) {
+        throw new IOException(
+            "Operation trying to update blocks in non-existent file " +
+            updateOp.path);
+      }
+      
+      // Update in-memory data structures
+      updateBlocks(fsDir, updateOp, oldFile);
+      break;
+    }
+      
     case OP_SET_REPLICATION: {
       SetReplicationOp setReplicationOp = (SetReplicationOp)op;
       short replication = fsNamesys.getBlockManager().adjustReplication(
@@ -472,32 +496,29 @@ public class FSEditLogLoader {
    * Update in-memory data structures with new block information.
    * @throws IOException
    */
-  private void updateBlocks(FSDirectory fsDir, AddCloseOp addCloseOp,
+  private void updateBlocks(FSDirectory fsDir, BlockListUpdatingOp op,
       INodeFile file) throws IOException {
-    
-    // Update the salient file attributes.
-    file.setAccessTime(addCloseOp.atime);
-    file.setModificationTimeForce(addCloseOp.mtime);
-    
     // Update its block list
     BlockInfo[] oldBlocks = file.getBlocks();
+    Block[] newBlocks = op.getBlocks();
+    String path = op.getPath();
     
     // Are we only updating the last block's gen stamp.
-    boolean isGenStampUpdate = oldBlocks.length == addCloseOp.blocks.length;
+    boolean isGenStampUpdate = oldBlocks.length == newBlocks.length;
     
     // First, update blocks in common
-    for (int i = 0; i < oldBlocks.length && i < addCloseOp.blocks.length; i++) {
+    for (int i = 0; i < oldBlocks.length && i < newBlocks.length; i++) {
       BlockInfo oldBlock = oldBlocks[i];
-      Block newBlock = addCloseOp.blocks[i];
+      Block newBlock = newBlocks[i];
       
-      boolean isLastBlock = i == addCloseOp.blocks.length - 1;
+      boolean isLastBlock = i == newBlocks.length - 1;
       if (oldBlock.getBlockId() != newBlock.getBlockId() ||
           (oldBlock.getGenerationStamp() != newBlock.getGenerationStamp() && 
               !(isGenStampUpdate && isLastBlock))) {
         throw new IOException("Mismatched block IDs or generation stamps, " + 
             "attempting to replace block " + oldBlock + " with " + newBlock +
-            " as block # " + i + "/" + addCloseOp.blocks.length + " of " +
-            addCloseOp.path);
+            " as block # " + i + "/" + newBlocks.length + " of " +
+            path);
       }
       
       oldBlock.setNumBytes(newBlock.getNumBytes());
@@ -506,7 +527,7 @@ public class FSEditLogLoader {
       oldBlock.setGenerationStamp(newBlock.getGenerationStamp());
       
       if (oldBlock instanceof BlockInfoUnderConstruction &&
-          (!isLastBlock || addCloseOp.opCode == FSEditLogOpCodes.OP_CLOSE)) {
+          (!isLastBlock || op.shouldCompleteLastBlock())) {
         changeMade = true;
         fsNamesys.getBlockManager().forceCompleteBlock(
             (INodeFileUnderConstruction)file,
@@ -520,24 +541,27 @@ public class FSEditLogLoader {
       }
     }
     
-    if (addCloseOp.blocks.length < oldBlocks.length) {
+    if (newBlocks.length < oldBlocks.length) {
       // We're removing a block from the file, e.g. abandonBlock(...)
       if (!file.isUnderConstruction()) {
         throw new IOException("Trying to remove a block from file " +
-            addCloseOp.path + " which is not under construction.");
+            path + " which is not under construction.");
       }
-      if (addCloseOp.blocks.length != oldBlocks.length - 1) {
+      if (newBlocks.length != oldBlocks.length - 1) {
         throw new IOException("Trying to remove more than one block from file "
-            + addCloseOp.path);
+            + path);
       }
-      fsDir.unprotectedRemoveBlock(addCloseOp.path,
+      fsDir.unprotectedRemoveBlock(path,
           (INodeFileUnderConstruction)file, oldBlocks[oldBlocks.length - 1]);
-    } else if (addCloseOp.blocks.length > oldBlocks.length) {
+    } else if (newBlocks.length > oldBlocks.length) {
       // We're adding blocks
-      for (int i = oldBlocks.length; i < addCloseOp.blocks.length; i++) {
-        Block newBlock = addCloseOp.blocks[i];
+      for (int i = oldBlocks.length; i < newBlocks.length; i++) {
+        Block newBlock = newBlocks[i];
         BlockInfo newBI;
-        if (addCloseOp.opCode == FSEditLogOpCodes.OP_ADD){
+        if (!op.shouldCompleteLastBlock()) {
+          // TODO: shouldn't this only be true for the last block?
+          // what about an old-version fsync() where fsync isn't called
+          // until several blocks in?
           newBI = new BlockInfoUnderConstruction(
               newBlock, file.getReplication());
         } else {

+ 86 - 1
hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/FSEditLogOp.java

@@ -101,6 +101,7 @@ public abstract class FSEditLogOp {
                       new LogSegmentOp(OP_START_LOG_SEGMENT));
         instances.put(OP_END_LOG_SEGMENT,
                       new LogSegmentOp(OP_END_LOG_SEGMENT));
+        instances.put(OP_UPDATE_BLOCKS, new UpdateBlocksOp());
         return instances;
       }
   };
@@ -128,8 +129,14 @@ public abstract class FSEditLogOp {
   abstract void writeFields(DataOutputStream out)
       throws IOException;
 
+  static interface BlockListUpdatingOp {
+    Block[] getBlocks();
+    String getPath();
+    boolean shouldCompleteLastBlock();
+  }
+  
   @SuppressWarnings("unchecked")
-  static abstract class AddCloseOp extends FSEditLogOp {
+  static abstract class AddCloseOp extends FSEditLogOp implements BlockListUpdatingOp {
     int length;
     String path;
     short replication;
@@ -151,6 +158,10 @@ public abstract class FSEditLogOp {
       this.path = path;
       return (T)this;
     }
+    
+    public String getPath() {
+      return path;
+    }
 
     <T extends AddCloseOp> T setReplication(short replication) {
       this.replication = replication;
@@ -176,6 +187,10 @@ public abstract class FSEditLogOp {
       this.blocks = blocks;
       return (T)this;
     }
+    
+    public Block[] getBlocks() {
+      return blocks;
+    }
 
     <T extends AddCloseOp> T setPermissionStatus(PermissionStatus permissions) {
       this.permissions = permissions;
@@ -347,6 +362,10 @@ public abstract class FSEditLogOp {
       return (AddOp)opInstances.get().get(OP_ADD);
     }
 
+    public boolean shouldCompleteLastBlock() {
+      return false;
+    }
+
     @Override
     public String toString() {
       StringBuilder builder = new StringBuilder();
@@ -365,6 +384,10 @@ public abstract class FSEditLogOp {
       return (CloseOp)opInstances.get().get(OP_CLOSE);
     }
 
+    public boolean shouldCompleteLastBlock() {
+      return true;
+    }
+
     @Override
     public String toString() {
       StringBuilder builder = new StringBuilder();
@@ -373,6 +396,68 @@ public abstract class FSEditLogOp {
       return builder.toString();
     }
   }
+  
+  static class UpdateBlocksOp extends FSEditLogOp implements BlockListUpdatingOp {
+    String path;
+    Block[] blocks;
+    
+    private UpdateBlocksOp() {
+      super(OP_UPDATE_BLOCKS);
+    }
+    
+    static UpdateBlocksOp getInstance() {
+      return (UpdateBlocksOp)opInstances.get()
+        .get(OP_UPDATE_BLOCKS);
+    }
+    
+    
+    UpdateBlocksOp setPath(String path) {
+      this.path = path;
+      return this;
+    }
+    
+    public String getPath() {
+      return path;
+    }
+
+    UpdateBlocksOp setBlocks(Block[] blocks) {
+      this.blocks = blocks;
+      return this;
+    }
+    
+    public Block[] getBlocks() {
+      return blocks;
+    }
+
+    @Override
+    void writeFields(DataOutputStream out) throws IOException {
+      FSImageSerialization.writeString(path, out);
+      FSImageSerialization.writeCompactBlockArray(blocks, out);
+    }
+    
+    @Override
+    void readFields(DataInputStream in, int logVersion) throws IOException {
+      path = FSImageSerialization.readString(in);
+      this.blocks = FSImageSerialization.readCompactBlockArray(
+          in, logVersion);
+    }
+
+    @Override
+    public boolean shouldCompleteLastBlock() {
+      return false;
+    }
+
+    @Override
+    public String toString() {
+      StringBuilder sb = new StringBuilder();
+      sb.append("UpdateBlocksOp [path=")
+        .append(path)
+        .append(", blocks=")
+        .append(Arrays.toString(blocks))
+        .append("]");
+      return sb.toString();
+    }
+  }
 
   static class SetReplicationOp extends FSEditLogOp {
     String path;

+ 2 - 1
hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/FSEditLogOpCodes.java

@@ -55,7 +55,8 @@ public enum FSEditLogOpCodes {
   OP_UPDATE_MASTER_KEY          ((byte) 21),
   OP_REASSIGN_LEASE             ((byte) 22),
   OP_END_LOG_SEGMENT            ((byte) 23),
-  OP_START_LOG_SEGMENT          ((byte) 24);
+  OP_START_LOG_SEGMENT          ((byte) 24),
+  OP_UPDATE_BLOCKS              ((byte) 25);
 
   private byte opCode;
 

+ 44 - 0
hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/FSImageSerialization.java

@@ -40,6 +40,7 @@ import org.apache.hadoop.io.LongWritable;
 import org.apache.hadoop.io.ShortWritable;
 import org.apache.hadoop.io.Text;
 import org.apache.hadoop.io.Writable;
+import org.apache.hadoop.io.WritableUtils;
 
 /**
  * Static utility functions for serializing various pieces of data in the correct
@@ -277,6 +278,49 @@ public class FSImageSerialization {
       ustr.getLength(), (byte) Path.SEPARATOR_CHAR);
   }
 
+
+  /**
+   * Write an array of blocks as compactly as possible. This uses
+   * delta-encoding for the generation stamp and size, following
+   * the principle that genstamp increases relatively slowly,
+   * and size is equal for all but the last block of a file.
+   */
+  public static void writeCompactBlockArray(
+      Block[] blocks, DataOutputStream out) throws IOException {
+    WritableUtils.writeVInt(out, blocks.length);
+    Block prev = null;
+    for (Block b : blocks) {
+      long szDelta = b.getNumBytes() -
+          (prev != null ? prev.getNumBytes() : 0);
+      long gsDelta = b.getGenerationStamp() -
+          (prev != null ? prev.getGenerationStamp() : 0);
+      out.writeLong(b.getBlockId()); // blockid is random
+      WritableUtils.writeVLong(out, szDelta);
+      WritableUtils.writeVLong(out, gsDelta);
+      prev = b;
+    }
+  }
+  
+  public static Block[] readCompactBlockArray(
+      DataInputStream in, int logVersion) throws IOException {
+    int num = WritableUtils.readVInt(in);
+    if (num < 0) {
+      throw new IOException("Invalid block array length: " + num);
+    }
+    Block prev = null;
+    Block[] ret = new Block[num];
+    for (int i = 0; i < num; i++) {
+      long id = in.readLong();
+      long sz = WritableUtils.readVLong(in) +
+          ((prev != null) ? prev.getNumBytes() : 0);
+      long gs = WritableUtils.readVLong(in) +
+          ((prev != null) ? prev.getGenerationStamp() : 0);
+      ret[i] = new Block(id, sz, gs);
+      prev = ret[i];
+    }
+    return ret;
+  }
+
   /**
    * DatanodeImage is used to store persistent information
    * about datanodes into the fsImage.

+ 2 - 0
hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/tools/offlineEditsViewer/EditsElement.java

@@ -48,6 +48,8 @@ public enum EditsElement {
       BLOCK_ID,
       BLOCK_NUM_BYTES,
       BLOCK_GENERATION_STAMP,
+      BLOCK_DELTA_NUM_BYTES, // delta-encoded relative to previous block
+      BLOCK_DELTA_GEN_STAMP, // delta-encoded relative to previous block
     PERMISSION_STATUS,
       FS_PERMISSIONS,
     CLIENT_NAME,

+ 23 - 1
hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/tools/offlineEditsViewer/EditsLoaderCurrent.java

@@ -41,7 +41,7 @@ import static org.apache.hadoop.hdfs.tools.offlineEditsViewer.Tokenizer.VIntToke
 class EditsLoaderCurrent implements EditsLoader {
 
   private static int[] supportedVersions = { -18, -19, -20, -21, -22, -23, -24,
-      -25, -26, -27, -28, -30, -31, -32, -33, -34, -35, -36, -37, -38, -39};
+      -25, -26, -27, -28, -30, -31, -32, -33, -34, -35, -36, -37, -38, -39, -40};
 
   private EditsVisitor v;
   private int editsVersion = 0;
@@ -150,6 +150,25 @@ class EditsLoaderCurrent implements EditsLoader {
     }
   }
 
+  private void visit_OP_UPDATE_BLOCKS() throws IOException {
+    visitTxId();
+    v.visitStringUTF8(EditsElement.PATH);
+    VIntToken numBlocksToken = v.visitVInt(EditsElement.NUMBLOCKS);
+    for (int i = 0; i < numBlocksToken.value; i++) {
+      v.visitEnclosingElement(EditsElement.BLOCK);
+
+      v.visitLong(EditsElement.BLOCK_ID);
+      if (i == 0) {
+        v.visitVLong(EditsElement.BLOCK_NUM_BYTES);
+        v.visitVLong(EditsElement.BLOCK_GENERATION_STAMP);
+      } else {
+        v.visitVLong(EditsElement.BLOCK_DELTA_NUM_BYTES);
+        v.visitVLong(EditsElement.BLOCK_DELTA_GEN_STAMP);
+      }
+      v.leaveEnclosingElement();
+    }
+  }
+  
   /**
    * Visit OP_RENAME_OLD
    */
@@ -521,6 +540,9 @@ class EditsLoaderCurrent implements EditsLoader {
       case OP_START_LOG_SEGMENT: // 24
         visit_OP_BEGIN_LOG_SEGMENT();
         break;
+      case OP_UPDATE_BLOCKS: // 25
+        visit_OP_UPDATE_BLOCKS();
+        break;
       default:
       {
         throw new IOException("Unknown op code " + editsOpCode);

BIN
hadoop-hdfs-project/hadoop-hdfs/src/test/resources/editsStored


+ 436 - 135
hadoop-hdfs-project/hadoop-hdfs/src/test/resources/editsStored.xml

@@ -1,34 +1,34 @@
 <?xml version="1.0"?>
 <EDITS>
-  <EDITS_VERSION>-38</EDITS_VERSION>
+  <EDITS_VERSION>-40</EDITS_VERSION>
   <RECORD>
     <OPCODE>24</OPCODE>
     <DATA>
       <TRANSACTION_ID>1</TRANSACTION_ID>
     </DATA>
-    <CHECKSUM>1504643968</CHECKSUM>
+    <CHECKSUM>-2045328303</CHECKSUM>
   </RECORD>
   <RECORD>
     <OPCODE>21</OPCODE>
     <DATA>
       <TRANSACTION_ID>2</TRANSACTION_ID>
       <KEY_ID>1</KEY_ID>
-      <KEY_EXPIRY_DATE>1304751257518</KEY_EXPIRY_DATE>
+      <KEY_EXPIRY_DATE>1331096884634</KEY_EXPIRY_DATE>
       <KEY_LENGTH>3</KEY_LENGTH>
-      <KEY_BLOB>2FhO</KEY_BLOB>
+      <KEY_BLOB>o0v1</KEY_BLOB>
     </DATA>
-    <CHECKSUM>-174778556</CHECKSUM>
+    <CHECKSUM>-1521490291</CHECKSUM>
   </RECORD>
   <RECORD>
     <OPCODE>21</OPCODE>
     <DATA>
       <TRANSACTION_ID>3</TRANSACTION_ID>
       <KEY_ID>2</KEY_ID>
-      <KEY_EXPIRY_DATE>1304751257521</KEY_EXPIRY_DATE>
+      <KEY_EXPIRY_DATE>1331096884637</KEY_EXPIRY_DATE>
       <KEY_LENGTH>3</KEY_LENGTH>
-      <KEY_BLOB>77-r</KEY_BLOB>
+      <KEY_BLOB>3WMF</KEY_BLOB>
     </DATA>
-    <CHECKSUM>1565957291</CHECKSUM>
+    <CHECKSUM>65546244</CHECKSUM>
   </RECORD>
   <RECORD>
     <OPCODE>10</OPCODE>
@@ -42,11 +42,10 @@
     <OPCODE>0</OPCODE>
     <DATA>
       <TRANSACTION_ID>5</TRANSACTION_ID>
-      <LENGTH>5</LENGTH>
       <PATH>/file_create</PATH>
       <REPLICATION>1</REPLICATION>
-      <MTIME>1304060057562</MTIME>
-      <ATIME>1304060057562</ATIME>
+      <MTIME>1330405685834</MTIME>
+      <ATIME>1330405685834</ATIME>
       <BLOCKSIZE>512</BLOCKSIZE>
       <NUMBLOCKS>0</NUMBLOCKS>
       <PERMISSION_STATUS>
@@ -54,20 +53,19 @@
         <GROUPNAME>supergroup</GROUPNAME>
         <FS_PERMISSIONS>420</FS_PERMISSIONS>
       </PERMISSION_STATUS>
-      <CLIENT_NAME>DFSClient_NONMAPREDUCE_-66857152_1</CLIENT_NAME>
+      <CLIENT_NAME>DFSClient_NONMAPREDUCE_-2143415023_1</CLIENT_NAME>
       <CLIENT_MACHINE>127.0.0.1</CLIENT_MACHINE>
     </DATA>
-    <CHECKSUM>-1854451489</CHECKSUM>
+    <CHECKSUM>179250704</CHECKSUM>
   </RECORD>
   <RECORD>
     <OPCODE>9</OPCODE>
     <DATA>
       <TRANSACTION_ID>6</TRANSACTION_ID>
-      <LENGTH>5</LENGTH>
       <PATH>/file_create</PATH>
       <REPLICATION>1</REPLICATION>
-      <MTIME>1304060057572</MTIME>
-      <ATIME>1304060057562</ATIME>
+      <MTIME>1330405685848</MTIME>
+      <ATIME>1330405685834</ATIME>
       <BLOCKSIZE>512</BLOCKSIZE>
       <NUMBLOCKS>0</NUMBLOCKS>
       <PERMISSION_STATUS>
@@ -76,44 +74,41 @@
         <FS_PERMISSIONS>420</FS_PERMISSIONS>
       </PERMISSION_STATUS>
     </DATA>
-    <CHECKSUM>617592855</CHECKSUM>
+    <CHECKSUM>-584136658</CHECKSUM>
   </RECORD>
   <RECORD>
     <OPCODE>1</OPCODE>
     <DATA>
       <TRANSACTION_ID>7</TRANSACTION_ID>
-      <LENGTH>3</LENGTH>
       <SOURCE>/file_create</SOURCE>
       <DESTINATION>/file_moved</DESTINATION>
-      <TIMESTAMP>1304060057575</TIMESTAMP>
+      <TIMESTAMP>1330405685852</TIMESTAMP>
     </DATA>
-    <CHECKSUM>367100554</CHECKSUM>
+    <CHECKSUM>-1983534581</CHECKSUM>
   </RECORD>
   <RECORD>
     <OPCODE>2</OPCODE>
     <DATA>
       <TRANSACTION_ID>8</TRANSACTION_ID>
-      <LENGTH>2</LENGTH>
       <PATH>/file_moved</PATH>
-      <TIMESTAMP>1304060057577</TIMESTAMP>
+      <TIMESTAMP>1330405685857</TIMESTAMP>
     </DATA>
-    <CHECKSUM>1048346698</CHECKSUM>
+    <CHECKSUM>-97648053</CHECKSUM>
   </RECORD>
   <RECORD>
     <OPCODE>3</OPCODE>
     <DATA>
       <TRANSACTION_ID>9</TRANSACTION_ID>
-      <LENGTH>3</LENGTH>
       <PATH>/directory_mkdir</PATH>
-      <TIMESTAMP>1304060057581</TIMESTAMP>
-      <ATIME>0</ATIME>
+      <TIMESTAMP>1330405685861</TIMESTAMP>
+      <ATIME>1330405685861</ATIME>
       <PERMISSION_STATUS>
         <USERNAME>todd</USERNAME>
         <GROUPNAME>supergroup</GROUPNAME>
         <FS_PERMISSIONS>493</FS_PERMISSIONS>
       </PERMISSION_STATUS>
     </DATA>
-    <CHECKSUM>1207240248</CHECKSUM>
+    <CHECKSUM>-146811985</CHECKSUM>
   </RECORD>
   <RECORD>
     <OPCODE>10</OPCODE>
@@ -127,11 +122,10 @@
     <OPCODE>0</OPCODE>
     <DATA>
       <TRANSACTION_ID>11</TRANSACTION_ID>
-      <LENGTH>5</LENGTH>
       <PATH>/file_create</PATH>
       <REPLICATION>1</REPLICATION>
-      <MTIME>1304060057584</MTIME>
-      <ATIME>1304060057584</ATIME>
+      <MTIME>1330405685866</MTIME>
+      <ATIME>1330405685866</ATIME>
       <BLOCKSIZE>512</BLOCKSIZE>
       <NUMBLOCKS>0</NUMBLOCKS>
       <PERMISSION_STATUS>
@@ -139,20 +133,19 @@
         <GROUPNAME>supergroup</GROUPNAME>
         <FS_PERMISSIONS>420</FS_PERMISSIONS>
       </PERMISSION_STATUS>
-      <CLIENT_NAME>DFSClient_NONMAPREDUCE_-66857152_1</CLIENT_NAME>
+      <CLIENT_NAME>DFSClient_NONMAPREDUCE_-2143415023_1</CLIENT_NAME>
       <CLIENT_MACHINE>127.0.0.1</CLIENT_MACHINE>
     </DATA>
-    <CHECKSUM>1796314473</CHECKSUM>
+    <CHECKSUM>806955943</CHECKSUM>
   </RECORD>
   <RECORD>
     <OPCODE>9</OPCODE>
     <DATA>
       <TRANSACTION_ID>12</TRANSACTION_ID>
-      <LENGTH>5</LENGTH>
       <PATH>/file_create</PATH>
       <REPLICATION>1</REPLICATION>
-      <MTIME>1304060057588</MTIME>
-      <ATIME>1304060057584</ATIME>
+      <MTIME>1330405685868</MTIME>
+      <ATIME>1330405685866</ATIME>
       <BLOCKSIZE>512</BLOCKSIZE>
       <NUMBLOCKS>0</NUMBLOCKS>
       <PERMISSION_STATUS>
@@ -161,7 +154,7 @@
         <FS_PERMISSIONS>420</FS_PERMISSIONS>
       </PERMISSION_STATUS>
     </DATA>
-    <CHECKSUM>1017626905</CHECKSUM>
+    <CHECKSUM>641893387</CHECKSUM>
   </RECORD>
   <RECORD>
     <OPCODE>4</OPCODE>
@@ -170,7 +163,7 @@
       <PATH>/file_create</PATH>
       <REPLICATION>1</REPLICATION>
     </DATA>
-    <CHECKSUM>1842610087</CHECKSUM>
+    <CHECKSUM>24198146</CHECKSUM>
   </RECORD>
   <RECORD>
     <OPCODE>7</OPCODE>
@@ -195,12 +188,11 @@
     <OPCODE>13</OPCODE>
     <DATA>
       <TRANSACTION_ID>16</TRANSACTION_ID>
-      <LENGTH>3</LENGTH>
       <PATH>/file_create</PATH>
       <MTIME>1285195527000</MTIME>
       <ATIME>1285195527000</ATIME>
     </DATA>
-    <CHECKSUM>1428793678</CHECKSUM>
+    <CHECKSUM>1853168961</CHECKSUM>
   </RECORD>
   <RECORD>
     <OPCODE>14</OPCODE>
@@ -216,13 +208,12 @@
     <OPCODE>15</OPCODE>
     <DATA>
       <TRANSACTION_ID>18</TRANSACTION_ID>
-      <LENGTH>3</LENGTH>
       <SOURCE>/file_create</SOURCE>
       <DESTINATION>/file_moved</DESTINATION>
-      <TIMESTAMP>1304060057605</TIMESTAMP>
+      <TIMESTAMP>1330405685882</TIMESTAMP>
       <RENAME_OPTIONS>AA</RENAME_OPTIONS>
     </DATA>
-    <CHECKSUM>-1155144192</CHECKSUM>
+    <CHECKSUM>-1235158297</CHECKSUM>
   </RECORD>
   <RECORD>
     <OPCODE>10</OPCODE>
@@ -236,11 +227,10 @@
     <OPCODE>0</OPCODE>
     <DATA>
       <TRANSACTION_ID>20</TRANSACTION_ID>
-      <LENGTH>5</LENGTH>
       <PATH>/file_concat_target</PATH>
       <REPLICATION>1</REPLICATION>
-      <MTIME>1304060057613</MTIME>
-      <ATIME>1304060057613</ATIME>
+      <MTIME>1330405685889</MTIME>
+      <ATIME>1330405685889</ATIME>
       <BLOCKSIZE>512</BLOCKSIZE>
       <NUMBLOCKS>0</NUMBLOCKS>
       <PERMISSION_STATUS>
@@ -248,36 +238,116 @@
         <GROUPNAME>supergroup</GROUPNAME>
         <FS_PERMISSIONS>420</FS_PERMISSIONS>
       </PERMISSION_STATUS>
-      <CLIENT_NAME>DFSClient_NONMAPREDUCE_-66857152_1</CLIENT_NAME>
+      <CLIENT_NAME>DFSClient_NONMAPREDUCE_-2143415023_1</CLIENT_NAME>
       <CLIENT_MACHINE>127.0.0.1</CLIENT_MACHINE>
     </DATA>
-    <CHECKSUM>-428545606</CHECKSUM>
+    <CHECKSUM>-981119572</CHECKSUM>
   </RECORD>
   <RECORD>
-    <OPCODE>9</OPCODE>
+    <OPCODE>10</OPCODE>
     <DATA>
       <TRANSACTION_ID>21</TRANSACTION_ID>
-      <LENGTH>5</LENGTH>
+      <GENERATION_STAMP>1004</GENERATION_STAMP>
+    </DATA>
+    <CHECKSUM>-1627007926</CHECKSUM>
+  </RECORD>
+  <RECORD>
+    <OPCODE>25</OPCODE>
+    <DATA>
+      <TRANSACTION_ID>22</TRANSACTION_ID>
+      <PATH>/file_concat_target</PATH>
+      <NUMBLOCKS>1</NUMBLOCKS>
+      <BLOCK>
+        <BLOCK_ID>-7144805496741076283</BLOCK_ID>
+        <BLOCK_NUM_BYTES>0</BLOCK_NUM_BYTES>
+        <BLOCK_GENERATION_STAMP>1004</BLOCK_GENERATION_STAMP>
+      </BLOCK>
+    </DATA>
+    <CHECKSUM>-1131701615</CHECKSUM>
+  </RECORD>
+  <RECORD>
+    <OPCODE>10</OPCODE>
+    <DATA>
+      <TRANSACTION_ID>23</TRANSACTION_ID>
+      <GENERATION_STAMP>1005</GENERATION_STAMP>
+    </DATA>
+    <CHECKSUM>-957035430</CHECKSUM>
+  </RECORD>
+  <RECORD>
+    <OPCODE>25</OPCODE>
+    <DATA>
+      <TRANSACTION_ID>24</TRANSACTION_ID>
+      <PATH>/file_concat_target</PATH>
+      <NUMBLOCKS>2</NUMBLOCKS>
+      <BLOCK>
+        <BLOCK_ID>-7144805496741076283</BLOCK_ID>
+        <BLOCK_NUM_BYTES>512</BLOCK_NUM_BYTES>
+        <BLOCK_GENERATION_STAMP>1004</BLOCK_GENERATION_STAMP>
+      </BLOCK>
+      <BLOCK>
+        <BLOCK_ID>-4125931756867080767</BLOCK_ID>
+        <BLOCK_DELTA_NUM_BYTES>-512</BLOCK_DELTA_NUM_BYTES>
+        <BLOCK_DELTA_GEN_STAMP>1</BLOCK_DELTA_GEN_STAMP>
+      </BLOCK>
+    </DATA>
+    <CHECKSUM>-932985519</CHECKSUM>
+  </RECORD>
+  <RECORD>
+    <OPCODE>10</OPCODE>
+    <DATA>
+      <TRANSACTION_ID>25</TRANSACTION_ID>
+      <GENERATION_STAMP>1006</GENERATION_STAMP>
+    </DATA>
+    <CHECKSUM>-1757460878</CHECKSUM>
+  </RECORD>
+  <RECORD>
+    <OPCODE>25</OPCODE>
+    <DATA>
+      <TRANSACTION_ID>26</TRANSACTION_ID>
+      <PATH>/file_concat_target</PATH>
+      <NUMBLOCKS>3</NUMBLOCKS>
+      <BLOCK>
+        <BLOCK_ID>-7144805496741076283</BLOCK_ID>
+        <BLOCK_NUM_BYTES>512</BLOCK_NUM_BYTES>
+        <BLOCK_GENERATION_STAMP>1004</BLOCK_GENERATION_STAMP>
+      </BLOCK>
+      <BLOCK>
+        <BLOCK_ID>-4125931756867080767</BLOCK_ID>
+        <BLOCK_DELTA_NUM_BYTES>0</BLOCK_DELTA_NUM_BYTES>
+        <BLOCK_DELTA_GEN_STAMP>1</BLOCK_DELTA_GEN_STAMP>
+      </BLOCK>
+      <BLOCK>
+        <BLOCK_ID>1562413691487277050</BLOCK_ID>
+        <BLOCK_DELTA_NUM_BYTES>-512</BLOCK_DELTA_NUM_BYTES>
+        <BLOCK_DELTA_GEN_STAMP>1</BLOCK_DELTA_GEN_STAMP>
+      </BLOCK>
+    </DATA>
+    <CHECKSUM>-154090859</CHECKSUM>
+  </RECORD>
+  <RECORD>
+    <OPCODE>9</OPCODE>
+    <DATA>
+      <TRANSACTION_ID>27</TRANSACTION_ID>
       <PATH>/file_concat_target</PATH>
       <REPLICATION>1</REPLICATION>
-      <MTIME>1304060057694</MTIME>
-      <ATIME>1304060057613</ATIME>
+      <MTIME>1330405685978</MTIME>
+      <ATIME>1330405685889</ATIME>
       <BLOCKSIZE>512</BLOCKSIZE>
       <NUMBLOCKS>3</NUMBLOCKS>
       <BLOCK>
-        <BLOCK_ID>3459038074990663911</BLOCK_ID>
+        <BLOCK_ID>-7144805496741076283</BLOCK_ID>
         <BLOCK_NUM_BYTES>512</BLOCK_NUM_BYTES>
-        <BLOCK_GENERATION_STAMP>1003</BLOCK_GENERATION_STAMP>
+        <BLOCK_GENERATION_STAMP>1004</BLOCK_GENERATION_STAMP>
       </BLOCK>
       <BLOCK>
-        <BLOCK_ID>-5555244278278879146</BLOCK_ID>
+        <BLOCK_ID>-4125931756867080767</BLOCK_ID>
         <BLOCK_NUM_BYTES>512</BLOCK_NUM_BYTES>
-        <BLOCK_GENERATION_STAMP>1003</BLOCK_GENERATION_STAMP>
+        <BLOCK_GENERATION_STAMP>1005</BLOCK_GENERATION_STAMP>
       </BLOCK>
       <BLOCK>
-        <BLOCK_ID>-6344128791846831740</BLOCK_ID>
+        <BLOCK_ID>1562413691487277050</BLOCK_ID>
         <BLOCK_NUM_BYTES>512</BLOCK_NUM_BYTES>
-        <BLOCK_GENERATION_STAMP>1003</BLOCK_GENERATION_STAMP>
+        <BLOCK_GENERATION_STAMP>1006</BLOCK_GENERATION_STAMP>
       </BLOCK>
       <PERMISSION_STATUS>
         <USERNAME>todd</USERNAME>
@@ -285,25 +355,24 @@
         <FS_PERMISSIONS>420</FS_PERMISSIONS>
       </PERMISSION_STATUS>
     </DATA>
-    <CHECKSUM>707995174</CHECKSUM>
+    <CHECKSUM>-292633850</CHECKSUM>
   </RECORD>
   <RECORD>
     <OPCODE>10</OPCODE>
     <DATA>
-      <TRANSACTION_ID>22</TRANSACTION_ID>
-      <GENERATION_STAMP>1004</GENERATION_STAMP>
+      <TRANSACTION_ID>28</TRANSACTION_ID>
+      <GENERATION_STAMP>1007</GENERATION_STAMP>
     </DATA>
-    <CHECKSUM>-1500977009</CHECKSUM>
+    <CHECKSUM>-1431358549</CHECKSUM>
   </RECORD>
   <RECORD>
     <OPCODE>0</OPCODE>
     <DATA>
-      <TRANSACTION_ID>23</TRANSACTION_ID>
-      <LENGTH>5</LENGTH>
+      <TRANSACTION_ID>29</TRANSACTION_ID>
       <PATH>/file_concat_0</PATH>
       <REPLICATION>1</REPLICATION>
-      <MTIME>1304060057701</MTIME>
-      <ATIME>1304060057701</ATIME>
+      <MTIME>1330405685983</MTIME>
+      <ATIME>1330405685983</ATIME>
       <BLOCKSIZE>512</BLOCKSIZE>
       <NUMBLOCKS>0</NUMBLOCKS>
       <PERMISSION_STATUS>
@@ -311,36 +380,116 @@
         <GROUPNAME>supergroup</GROUPNAME>
         <FS_PERMISSIONS>420</FS_PERMISSIONS>
       </PERMISSION_STATUS>
-      <CLIENT_NAME>DFSClient_NONMAPREDUCE_-66857152_1</CLIENT_NAME>
+      <CLIENT_NAME>DFSClient_NONMAPREDUCE_-2143415023_1</CLIENT_NAME>
       <CLIENT_MACHINE>127.0.0.1</CLIENT_MACHINE>
     </DATA>
-    <CHECKSUM>-119850856</CHECKSUM>
+    <CHECKSUM>-318194869</CHECKSUM>
+  </RECORD>
+  <RECORD>
+    <OPCODE>10</OPCODE>
+    <DATA>
+      <TRANSACTION_ID>30</TRANSACTION_ID>
+      <GENERATION_STAMP>1008</GENERATION_STAMP>
+    </DATA>
+    <CHECKSUM>156309208</CHECKSUM>
+  </RECORD>
+  <RECORD>
+    <OPCODE>25</OPCODE>
+    <DATA>
+      <TRANSACTION_ID>31</TRANSACTION_ID>
+      <PATH>/file_concat_0</PATH>
+      <NUMBLOCKS>1</NUMBLOCKS>
+      <BLOCK>
+        <BLOCK_ID>6084289468290363112</BLOCK_ID>
+        <BLOCK_NUM_BYTES>0</BLOCK_NUM_BYTES>
+        <BLOCK_GENERATION_STAMP>1008</BLOCK_GENERATION_STAMP>
+      </BLOCK>
+    </DATA>
+    <CHECKSUM>-596016492</CHECKSUM>
+  </RECORD>
+  <RECORD>
+    <OPCODE>10</OPCODE>
+    <DATA>
+      <TRANSACTION_ID>32</TRANSACTION_ID>
+      <GENERATION_STAMP>1009</GENERATION_STAMP>
+    </DATA>
+    <CHECKSUM>-1734001394</CHECKSUM>
+  </RECORD>
+  <RECORD>
+    <OPCODE>25</OPCODE>
+    <DATA>
+      <TRANSACTION_ID>33</TRANSACTION_ID>
+      <PATH>/file_concat_0</PATH>
+      <NUMBLOCKS>2</NUMBLOCKS>
+      <BLOCK>
+        <BLOCK_ID>6084289468290363112</BLOCK_ID>
+        <BLOCK_NUM_BYTES>512</BLOCK_NUM_BYTES>
+        <BLOCK_GENERATION_STAMP>1008</BLOCK_GENERATION_STAMP>
+      </BLOCK>
+      <BLOCK>
+        <BLOCK_ID>-4219431127125026105</BLOCK_ID>
+        <BLOCK_DELTA_NUM_BYTES>-512</BLOCK_DELTA_NUM_BYTES>
+        <BLOCK_DELTA_GEN_STAMP>1</BLOCK_DELTA_GEN_STAMP>
+      </BLOCK>
+    </DATA>
+    <CHECKSUM>1352178323</CHECKSUM>
+  </RECORD>
+  <RECORD>
+    <OPCODE>10</OPCODE>
+    <DATA>
+      <TRANSACTION_ID>34</TRANSACTION_ID>
+      <GENERATION_STAMP>1010</GENERATION_STAMP>
+    </DATA>
+    <CHECKSUM>794444850</CHECKSUM>
+  </RECORD>
+  <RECORD>
+    <OPCODE>25</OPCODE>
+    <DATA>
+      <TRANSACTION_ID>35</TRANSACTION_ID>
+      <PATH>/file_concat_0</PATH>
+      <NUMBLOCKS>3</NUMBLOCKS>
+      <BLOCK>
+        <BLOCK_ID>6084289468290363112</BLOCK_ID>
+        <BLOCK_NUM_BYTES>512</BLOCK_NUM_BYTES>
+        <BLOCK_GENERATION_STAMP>1008</BLOCK_GENERATION_STAMP>
+      </BLOCK>
+      <BLOCK>
+        <BLOCK_ID>-4219431127125026105</BLOCK_ID>
+        <BLOCK_DELTA_NUM_BYTES>0</BLOCK_DELTA_NUM_BYTES>
+        <BLOCK_DELTA_GEN_STAMP>1</BLOCK_DELTA_GEN_STAMP>
+      </BLOCK>
+      <BLOCK>
+        <BLOCK_ID>-1765119074945211374</BLOCK_ID>
+        <BLOCK_DELTA_NUM_BYTES>-512</BLOCK_DELTA_NUM_BYTES>
+        <BLOCK_DELTA_GEN_STAMP>1</BLOCK_DELTA_GEN_STAMP>
+      </BLOCK>
+    </DATA>
+    <CHECKSUM>-1530696539</CHECKSUM>
   </RECORD>
   <RECORD>
     <OPCODE>9</OPCODE>
     <DATA>
-      <TRANSACTION_ID>24</TRANSACTION_ID>
-      <LENGTH>5</LENGTH>
+      <TRANSACTION_ID>36</TRANSACTION_ID>
       <PATH>/file_concat_0</PATH>
       <REPLICATION>1</REPLICATION>
-      <MTIME>1304060057737</MTIME>
-      <ATIME>1304060057701</ATIME>
+      <MTIME>1330405686013</MTIME>
+      <ATIME>1330405685983</ATIME>
       <BLOCKSIZE>512</BLOCKSIZE>
       <NUMBLOCKS>3</NUMBLOCKS>
       <BLOCK>
-        <BLOCK_ID>4671949296381030428</BLOCK_ID>
+        <BLOCK_ID>6084289468290363112</BLOCK_ID>
         <BLOCK_NUM_BYTES>512</BLOCK_NUM_BYTES>
-        <BLOCK_GENERATION_STAMP>1004</BLOCK_GENERATION_STAMP>
+        <BLOCK_GENERATION_STAMP>1008</BLOCK_GENERATION_STAMP>
       </BLOCK>
       <BLOCK>
-        <BLOCK_ID>-844362243522407159</BLOCK_ID>
+        <BLOCK_ID>-4219431127125026105</BLOCK_ID>
         <BLOCK_NUM_BYTES>512</BLOCK_NUM_BYTES>
-        <BLOCK_GENERATION_STAMP>1004</BLOCK_GENERATION_STAMP>
+        <BLOCK_GENERATION_STAMP>1009</BLOCK_GENERATION_STAMP>
       </BLOCK>
       <BLOCK>
-        <BLOCK_ID>3476886462779656950</BLOCK_ID>
+        <BLOCK_ID>-1765119074945211374</BLOCK_ID>
         <BLOCK_NUM_BYTES>512</BLOCK_NUM_BYTES>
-        <BLOCK_GENERATION_STAMP>1004</BLOCK_GENERATION_STAMP>
+        <BLOCK_GENERATION_STAMP>1010</BLOCK_GENERATION_STAMP>
       </BLOCK>
       <PERMISSION_STATUS>
         <USERNAME>todd</USERNAME>
@@ -348,25 +497,24 @@
         <FS_PERMISSIONS>420</FS_PERMISSIONS>
       </PERMISSION_STATUS>
     </DATA>
-    <CHECKSUM>-766805874</CHECKSUM>
+    <CHECKSUM>-2043978220</CHECKSUM>
   </RECORD>
   <RECORD>
     <OPCODE>10</OPCODE>
     <DATA>
-      <TRANSACTION_ID>25</TRANSACTION_ID>
-      <GENERATION_STAMP>1005</GENERATION_STAMP>
+      <TRANSACTION_ID>37</TRANSACTION_ID>
+      <GENERATION_STAMP>1011</GENERATION_STAMP>
     </DATA>
-    <CHECKSUM>238426056</CHECKSUM>
+    <CHECKSUM>1010571629</CHECKSUM>
   </RECORD>
   <RECORD>
     <OPCODE>0</OPCODE>
     <DATA>
-      <TRANSACTION_ID>26</TRANSACTION_ID>
-      <LENGTH>5</LENGTH>
+      <TRANSACTION_ID>38</TRANSACTION_ID>
       <PATH>/file_concat_1</PATH>
       <REPLICATION>1</REPLICATION>
-      <MTIME>1304060057742</MTIME>
-      <ATIME>1304060057742</ATIME>
+      <MTIME>1330405686017</MTIME>
+      <ATIME>1330405686017</ATIME>
       <BLOCKSIZE>512</BLOCKSIZE>
       <NUMBLOCKS>0</NUMBLOCKS>
       <PERMISSION_STATUS>
@@ -374,36 +522,116 @@
         <GROUPNAME>supergroup</GROUPNAME>
         <FS_PERMISSIONS>420</FS_PERMISSIONS>
       </PERMISSION_STATUS>
-      <CLIENT_NAME>DFSClient_NONMAPREDUCE_-66857152_1</CLIENT_NAME>
+      <CLIENT_NAME>DFSClient_NONMAPREDUCE_-2143415023_1</CLIENT_NAME>
       <CLIENT_MACHINE>127.0.0.1</CLIENT_MACHINE>
     </DATA>
-    <CHECKSUM>1156254705</CHECKSUM>
+    <CHECKSUM>-501297097</CHECKSUM>
+  </RECORD>
+  <RECORD>
+    <OPCODE>10</OPCODE>
+    <DATA>
+      <TRANSACTION_ID>39</TRANSACTION_ID>
+      <GENERATION_STAMP>1012</GENERATION_STAMP>
+    </DATA>
+    <CHECKSUM>-1934711736</CHECKSUM>
+  </RECORD>
+  <RECORD>
+    <OPCODE>25</OPCODE>
+    <DATA>
+      <TRANSACTION_ID>40</TRANSACTION_ID>
+      <PATH>/file_concat_1</PATH>
+      <NUMBLOCKS>1</NUMBLOCKS>
+      <BLOCK>
+        <BLOCK_ID>-7448471719302683860</BLOCK_ID>
+        <BLOCK_NUM_BYTES>0</BLOCK_NUM_BYTES>
+        <BLOCK_GENERATION_STAMP>1012</BLOCK_GENERATION_STAMP>
+      </BLOCK>
+    </DATA>
+    <CHECKSUM>-1853122907</CHECKSUM>
+  </RECORD>
+  <RECORD>
+    <OPCODE>10</OPCODE>
+    <DATA>
+      <TRANSACTION_ID>41</TRANSACTION_ID>
+      <GENERATION_STAMP>1013</GENERATION_STAMP>
+    </DATA>
+    <CHECKSUM>862670668</CHECKSUM>
+  </RECORD>
+  <RECORD>
+    <OPCODE>25</OPCODE>
+    <DATA>
+      <TRANSACTION_ID>42</TRANSACTION_ID>
+      <PATH>/file_concat_1</PATH>
+      <NUMBLOCKS>2</NUMBLOCKS>
+      <BLOCK>
+        <BLOCK_ID>-7448471719302683860</BLOCK_ID>
+        <BLOCK_NUM_BYTES>512</BLOCK_NUM_BYTES>
+        <BLOCK_GENERATION_STAMP>1012</BLOCK_GENERATION_STAMP>
+      </BLOCK>
+      <BLOCK>
+        <BLOCK_ID>-8051065559769974521</BLOCK_ID>
+        <BLOCK_DELTA_NUM_BYTES>-512</BLOCK_DELTA_NUM_BYTES>
+        <BLOCK_DELTA_GEN_STAMP>1</BLOCK_DELTA_GEN_STAMP>
+      </BLOCK>
+    </DATA>
+    <CHECKSUM>-1169706939</CHECKSUM>
+  </RECORD>
+  <RECORD>
+    <OPCODE>10</OPCODE>
+    <DATA>
+      <TRANSACTION_ID>43</TRANSACTION_ID>
+      <GENERATION_STAMP>1014</GENERATION_STAMP>
+    </DATA>
+    <CHECKSUM>-2070661520</CHECKSUM>
+  </RECORD>
+  <RECORD>
+    <OPCODE>25</OPCODE>
+    <DATA>
+      <TRANSACTION_ID>44</TRANSACTION_ID>
+      <PATH>/file_concat_1</PATH>
+      <NUMBLOCKS>3</NUMBLOCKS>
+      <BLOCK>
+        <BLOCK_ID>-7448471719302683860</BLOCK_ID>
+        <BLOCK_NUM_BYTES>512</BLOCK_NUM_BYTES>
+        <BLOCK_GENERATION_STAMP>1012</BLOCK_GENERATION_STAMP>
+      </BLOCK>
+      <BLOCK>
+        <BLOCK_ID>-8051065559769974521</BLOCK_ID>
+        <BLOCK_DELTA_NUM_BYTES>0</BLOCK_DELTA_NUM_BYTES>
+        <BLOCK_DELTA_GEN_STAMP>1</BLOCK_DELTA_GEN_STAMP>
+      </BLOCK>
+      <BLOCK>
+        <BLOCK_ID>3808670437711973616</BLOCK_ID>
+        <BLOCK_DELTA_NUM_BYTES>-512</BLOCK_DELTA_NUM_BYTES>
+        <BLOCK_DELTA_GEN_STAMP>1</BLOCK_DELTA_GEN_STAMP>
+      </BLOCK>
+    </DATA>
+    <CHECKSUM>-1568093815</CHECKSUM>
   </RECORD>
   <RECORD>
     <OPCODE>9</OPCODE>
     <DATA>
-      <TRANSACTION_ID>27</TRANSACTION_ID>
-      <LENGTH>5</LENGTH>
+      <TRANSACTION_ID>45</TRANSACTION_ID>
       <PATH>/file_concat_1</PATH>
       <REPLICATION>1</REPLICATION>
-      <MTIME>1304060057764</MTIME>
-      <ATIME>1304060057742</ATIME>
+      <MTIME>1330405686042</MTIME>
+      <ATIME>1330405686017</ATIME>
       <BLOCKSIZE>512</BLOCKSIZE>
       <NUMBLOCKS>3</NUMBLOCKS>
       <BLOCK>
-        <BLOCK_ID>-754893470864399741</BLOCK_ID>
+        <BLOCK_ID>-7448471719302683860</BLOCK_ID>
         <BLOCK_NUM_BYTES>512</BLOCK_NUM_BYTES>
-        <BLOCK_GENERATION_STAMP>1005</BLOCK_GENERATION_STAMP>
+        <BLOCK_GENERATION_STAMP>1012</BLOCK_GENERATION_STAMP>
       </BLOCK>
       <BLOCK>
-        <BLOCK_ID>1820875380010181049</BLOCK_ID>
+        <BLOCK_ID>-8051065559769974521</BLOCK_ID>
         <BLOCK_NUM_BYTES>512</BLOCK_NUM_BYTES>
-        <BLOCK_GENERATION_STAMP>1005</BLOCK_GENERATION_STAMP>
+        <BLOCK_GENERATION_STAMP>1013</BLOCK_GENERATION_STAMP>
       </BLOCK>
       <BLOCK>
-        <BLOCK_ID>8266387560744259971</BLOCK_ID>
+        <BLOCK_ID>3808670437711973616</BLOCK_ID>
         <BLOCK_NUM_BYTES>512</BLOCK_NUM_BYTES>
-        <BLOCK_GENERATION_STAMP>1005</BLOCK_GENERATION_STAMP>
+        <BLOCK_GENERATION_STAMP>1014</BLOCK_GENERATION_STAMP>
       </BLOCK>
       <PERMISSION_STATUS>
         <USERNAME>todd</USERNAME>
@@ -411,121 +639,194 @@
         <FS_PERMISSIONS>420</FS_PERMISSIONS>
       </PERMISSION_STATUS>
     </DATA>
-    <CHECKSUM>-654780301</CHECKSUM>
+    <CHECKSUM>-1640101896</CHECKSUM>
   </RECORD>
   <RECORD>
     <OPCODE>16</OPCODE>
     <DATA>
-      <TRANSACTION_ID>28</TRANSACTION_ID>
-      <LENGTH>4</LENGTH>
+      <TRANSACTION_ID>46</TRANSACTION_ID>
       <CONCAT_TARGET>/file_concat_target</CONCAT_TARGET>
+      <LENGTH>2</LENGTH>
       <CONCAT_SOURCE>/file_concat_0</CONCAT_SOURCE>
       <CONCAT_SOURCE>/file_concat_1</CONCAT_SOURCE>
-      <TIMESTAMP>1304060057767</TIMESTAMP>
+      <TIMESTAMP>1330405686046</TIMESTAMP>
     </DATA>
-    <CHECKSUM>1273279541</CHECKSUM>
+    <CHECKSUM>2122891157</CHECKSUM>
   </RECORD>
   <RECORD>
     <OPCODE>17</OPCODE>
     <DATA>
-      <TRANSACTION_ID>29</TRANSACTION_ID>
-      <LENGTH>4</LENGTH>
+      <TRANSACTION_ID>47</TRANSACTION_ID>
       <SOURCE>/file_symlink</SOURCE>
       <DESTINATION>/file_concat_target</DESTINATION>
-      <MTIME>1304060057770</MTIME>
-      <ATIME>1304060057770</ATIME>
+      <MTIME>1330405686051</MTIME>
+      <ATIME>1330405686051</ATIME>
       <PERMISSION_STATUS>
         <USERNAME>todd</USERNAME>
         <GROUPNAME>supergroup</GROUPNAME>
         <FS_PERMISSIONS>511</FS_PERMISSIONS>
       </PERMISSION_STATUS>
     </DATA>
-    <CHECKSUM>1385678569</CHECKSUM>
+    <CHECKSUM>-585385283</CHECKSUM>
   </RECORD>
   <RECORD>
     <OPCODE>18</OPCODE>
     <DATA>
-      <TRANSACTION_ID>30</TRANSACTION_ID>
+      <TRANSACTION_ID>48</TRANSACTION_ID>
       <T_VERSION>0</T_VERSION>
       <T_OWNER>todd</T_OWNER>
       <T_RENEWER>JobTracker</T_RENEWER>
       <T_REAL_USER/>
-      <T_ISSUE_DATE>1304060057773</T_ISSUE_DATE>
-      <T_MAX_DATE>1304664857773</T_MAX_DATE>
+      <T_ISSUE_DATE>1330405686056</T_ISSUE_DATE>
+      <T_MAX_DATE>1331010486056</T_MAX_DATE>
       <T_SEQUENCE_NUMBER>1</T_SEQUENCE_NUMBER>
       <T_MASTER_KEY_ID>2</T_MASTER_KEY_ID>
-      <T_EXPIRY_TIME>1304146457773</T_EXPIRY_TIME>
+      <T_EXPIRY_TIME>1330492086056</T_EXPIRY_TIME>
     </DATA>
-    <CHECKSUM>913145699</CHECKSUM>
+    <CHECKSUM>791321007</CHECKSUM>
   </RECORD>
   <RECORD>
     <OPCODE>19</OPCODE>
     <DATA>
-      <TRANSACTION_ID>31</TRANSACTION_ID>
+      <TRANSACTION_ID>49</TRANSACTION_ID>
       <T_VERSION>0</T_VERSION>
       <T_OWNER>todd</T_OWNER>
       <T_RENEWER>JobTracker</T_RENEWER>
       <T_REAL_USER/>
-      <T_ISSUE_DATE>1304060057773</T_ISSUE_DATE>
-      <T_MAX_DATE>1304664857773</T_MAX_DATE>
+      <T_ISSUE_DATE>1330405686056</T_ISSUE_DATE>
+      <T_MAX_DATE>1331010486056</T_MAX_DATE>
       <T_SEQUENCE_NUMBER>1</T_SEQUENCE_NUMBER>
       <T_MASTER_KEY_ID>2</T_MASTER_KEY_ID>
-      <T_EXPIRY_TIME>1304146457785</T_EXPIRY_TIME>
+      <T_EXPIRY_TIME>1330492086075</T_EXPIRY_TIME>
     </DATA>
-    <CHECKSUM>-1772039941</CHECKSUM>
+    <CHECKSUM>649714969</CHECKSUM>
   </RECORD>
   <RECORD>
     <OPCODE>20</OPCODE>
     <DATA>
-      <TRANSACTION_ID>32</TRANSACTION_ID>
+      <TRANSACTION_ID>50</TRANSACTION_ID>
       <T_VERSION>0</T_VERSION>
       <T_OWNER>todd</T_OWNER>
       <T_RENEWER>JobTracker</T_RENEWER>
       <T_REAL_USER/>
-      <T_ISSUE_DATE>1304060057773</T_ISSUE_DATE>
-      <T_MAX_DATE>1304664857773</T_MAX_DATE>
+      <T_ISSUE_DATE>1330405686056</T_ISSUE_DATE>
+      <T_MAX_DATE>1331010486056</T_MAX_DATE>
       <T_SEQUENCE_NUMBER>1</T_SEQUENCE_NUMBER>
       <T_MASTER_KEY_ID>2</T_MASTER_KEY_ID>
     </DATA>
-    <CHECKSUM>1382094146</CHECKSUM>
+    <CHECKSUM>1190872628</CHECKSUM>
+  </RECORD>
+  <RECORD>
+    <OPCODE>10</OPCODE>
+    <DATA>
+      <TRANSACTION_ID>51</TRANSACTION_ID>
+      <GENERATION_STAMP>1015</GENERATION_STAMP>
+    </DATA>
+    <CHECKSUM>-460593521</CHECKSUM>
   </RECORD>
   <RECORD>
     <OPCODE>0</OPCODE>
     <DATA>
-      <TRANSACTION_ID>33</TRANSACTION_ID>
-      <LENGTH>5</LENGTH>
-      <PATH>/reassign-lease-test</PATH>
+      <TRANSACTION_ID>52</TRANSACTION_ID>
+      <PATH>/hard-lease-recovery-test</PATH>
       <REPLICATION>1</REPLICATION>
-      <MTIME>1286491964741</MTIME>
-      <ATIME>1286491964741</ATIME>
+      <MTIME>1330405686084</MTIME>
+      <ATIME>1330405686084</ATIME>
       <BLOCKSIZE>512</BLOCKSIZE>
       <NUMBLOCKS>0</NUMBLOCKS>
       <PERMISSION_STATUS>
-        <USERNAME>atm</USERNAME>
+        <USERNAME>todd</USERNAME>
         <GROUPNAME>supergroup</GROUPNAME>
         <FS_PERMISSIONS>420</FS_PERMISSIONS>
       </PERMISSION_STATUS>
-      <CLIENT_NAME>DFSClient_871171074</CLIENT_NAME>
+      <CLIENT_NAME>DFSClient_NONMAPREDUCE_-2143415023_1</CLIENT_NAME>
       <CLIENT_MACHINE>127.0.0.1</CLIENT_MACHINE>
     </DATA>
-    <CHECKSUM>1975140107</CHECKSUM>
+    <CHECKSUM>2093219037</CHECKSUM>
+  </RECORD>
+  <RECORD>
+    <OPCODE>10</OPCODE>
+    <DATA>
+      <TRANSACTION_ID>53</TRANSACTION_ID>
+      <GENERATION_STAMP>1016</GENERATION_STAMP>
+    </DATA>
+    <CHECKSUM>120488596</CHECKSUM>
+  </RECORD>
+  <RECORD>
+    <OPCODE>25</OPCODE>
+    <DATA>
+      <TRANSACTION_ID>54</TRANSACTION_ID>
+      <PATH>/hard-lease-recovery-test</PATH>
+      <NUMBLOCKS>1</NUMBLOCKS>
+      <BLOCK>
+        <BLOCK_ID>-357061736603024522</BLOCK_ID>
+        <BLOCK_NUM_BYTES>0</BLOCK_NUM_BYTES>
+        <BLOCK_GENERATION_STAMP>1016</BLOCK_GENERATION_STAMP>
+      </BLOCK>
+    </DATA>
+    <CHECKSUM>2098840974</CHECKSUM>
+  </RECORD>
+  <RECORD>
+    <OPCODE>25</OPCODE>
+    <DATA>
+      <TRANSACTION_ID>55</TRANSACTION_ID>
+      <PATH>/hard-lease-recovery-test</PATH>
+      <NUMBLOCKS>1</NUMBLOCKS>
+      <BLOCK>
+        <BLOCK_ID>-357061736603024522</BLOCK_ID>
+        <BLOCK_NUM_BYTES>0</BLOCK_NUM_BYTES>
+        <BLOCK_GENERATION_STAMP>1016</BLOCK_GENERATION_STAMP>
+      </BLOCK>
+    </DATA>
+    <CHECKSUM>-1794222801</CHECKSUM>
+  </RECORD>
+  <RECORD>
+    <OPCODE>10</OPCODE>
+    <DATA>
+      <TRANSACTION_ID>56</TRANSACTION_ID>
+      <GENERATION_STAMP>1017</GENERATION_STAMP>
+    </DATA>
+    <CHECKSUM>-2123999915</CHECKSUM>
   </RECORD>
   <RECORD>
     <OPCODE>22</OPCODE>
     <DATA>
-      <TRANSACTION_ID>34</TRANSACTION_ID>
-      <CLIENT_NAME>DFSClient_871171074</CLIENT_NAME>
-      <PATH>/reassign-lease-test</PATH>
+      <TRANSACTION_ID>57</TRANSACTION_ID>
+      <CLIENT_NAME>DFSClient_NONMAPREDUCE_-2143415023_1</CLIENT_NAME>
+      <PATH>/hard-lease-recovery-test</PATH>
       <CLIENT_NAME>HDFS_NameNode</CLIENT_NAME>
     </DATA>
-    <CHECKSUM>1975140107</CHECKSUM>
+    <CHECKSUM>-1841690515</CHECKSUM>
+  </RECORD>
+  <RECORD>
+    <OPCODE>9</OPCODE>
+    <DATA>
+      <TRANSACTION_ID>58</TRANSACTION_ID>
+      <PATH>/hard-lease-recovery-test</PATH>
+      <REPLICATION>1</REPLICATION>
+      <MTIME>1330405688726</MTIME>
+      <ATIME>1330405686084</ATIME>
+      <BLOCKSIZE>512</BLOCKSIZE>
+      <NUMBLOCKS>1</NUMBLOCKS>
+      <BLOCK>
+        <BLOCK_ID>-357061736603024522</BLOCK_ID>
+        <BLOCK_NUM_BYTES>11</BLOCK_NUM_BYTES>
+        <BLOCK_GENERATION_STAMP>1017</BLOCK_GENERATION_STAMP>
+      </BLOCK>
+      <PERMISSION_STATUS>
+        <USERNAME>todd</USERNAME>
+        <GROUPNAME>supergroup</GROUPNAME>
+        <FS_PERMISSIONS>420</FS_PERMISSIONS>
+      </PERMISSION_STATUS>
+    </DATA>
+    <CHECKSUM>-218102037</CHECKSUM>
   </RECORD>
   <RECORD>
     <OPCODE>23</OPCODE>
     <DATA>
-      <TRANSACTION_ID>35</TRANSACTION_ID>
+      <TRANSACTION_ID>59</TRANSACTION_ID>
     </DATA>
-    <CHECKSUM>1975140107</CHECKSUM>
+    <CHECKSUM>-1616653774</CHECKSUM>
   </RECORD>
   <RECORD>
     <OPCODE>-1</OPCODE>