Java 类org.apache.hadoop.hdfs.util.Diff.UndoInfo 实例源码

项目:hadoop    文件:DirectoryWithSnapshotFeature.java   
/**
 * Remove an inode from parent's children list. The caller of this method
 * needs to make sure that parent is in the given snapshot "latest".
 */
public boolean removeChild(INodeDirectory parent, INode child,
    int latestSnapshotId) {
  // For a directory that is not a renamed node, if isInLatestSnapshot returns
  // false, the directory is not in the latest snapshot, thus we do not need
  // to record the removed child in any snapshot.
  // For a directory that was moved/renamed, note that if the directory is in
  // any of the previous snapshots, we will create a reference node for the
  // directory while rename, and isInLatestSnapshot will return true in that
  // scenario (if all previous snapshots have been deleted, isInLatestSnapshot
  // still returns false). Thus if isInLatestSnapshot returns false, the
  // directory node cannot be in any snapshot (not in current tree, nor in
  // previous src tree). Thus we do not need to record the removed child in
  // any snapshot.
  ChildrenDiff diff = diffs.checkAndAddLatestSnapshotDiff(latestSnapshotId,
      parent).diff;
  UndoInfo<INode> undoInfo = diff.delete(child);

  final boolean removed = parent.removeChild(child);
  if (!removed && undoInfo != null) {
    // remove failed, undo
    diff.undoDelete(child, undoInfo);
  }
  return removed;
}
项目:hadoop    文件:TestDiff.java   
static void delete(INode inode, final List<INode> current,
    Diff<byte[], INode> diff) {
  final int i = Diff.search(current, inode.getKey());
  current.remove(i);
  if (diff != null) {
    //test undo with 1/UNDO_TEST_P probability
    final boolean testUndo = RANDOM.nextInt(UNDO_TEST_P) == 0;
    String before = null;
    if (testUndo) {
      before = diff.toString();
    }

    final UndoInfo<INode> undoInfo = diff.delete(inode);

    if (testUndo) {
      final String after = diff.toString();
      //undo
      diff.undoDelete(inode, undoInfo);
      assertDiff(before, diff);
      //re-do
      diff.delete(inode);
      assertDiff(after, diff);
    }
  }
}
项目:aliyun-oss-hadoop-fs    文件:DirectoryWithSnapshotFeature.java   
/**
 * Remove an inode from parent's children list. The caller of this method
 * needs to make sure that parent is in the given snapshot "latest".
 */
public boolean removeChild(INodeDirectory parent, INode child,
    int latestSnapshotId) {
  // For a directory that is not a renamed node, if isInLatestSnapshot returns
  // false, the directory is not in the latest snapshot, thus we do not need
  // to record the removed child in any snapshot.
  // For a directory that was moved/renamed, note that if the directory is in
  // any of the previous snapshots, we will create a reference node for the
  // directory while rename, and isInLatestSnapshot will return true in that
  // scenario (if all previous snapshots have been deleted, isInLatestSnapshot
  // still returns false). Thus if isInLatestSnapshot returns false, the
  // directory node cannot be in any snapshot (not in current tree, nor in
  // previous src tree). Thus we do not need to record the removed child in
  // any snapshot.
  ChildrenDiff diff = diffs.checkAndAddLatestSnapshotDiff(latestSnapshotId,
      parent).diff;
  UndoInfo<INode> undoInfo = diff.delete(child);

  final boolean removed = parent.removeChild(child);
  if (!removed && undoInfo != null) {
    // remove failed, undo
    diff.undoDelete(child, undoInfo);
  }
  return removed;
}
项目:aliyun-oss-hadoop-fs    文件:TestDiff.java   
static void delete(INode inode, final List<INode> current,
    Diff<byte[], INode> diff) {
  final int i = Diff.search(current, inode.getKey());
  current.remove(i);
  if (diff != null) {
    //test undo with 1/UNDO_TEST_P probability
    final boolean testUndo = RANDOM.nextInt(UNDO_TEST_P) == 0;
    String before = null;
    if (testUndo) {
      before = diff.toString();
    }

    final UndoInfo<INode> undoInfo = diff.delete(inode);

    if (testUndo) {
      final String after = diff.toString();
      //undo
      diff.undoDelete(inode, undoInfo);
      assertDiff(before, diff);
      //re-do
      diff.delete(inode);
      assertDiff(after, diff);
    }
  }
}
项目:big-c    文件:DirectoryWithSnapshotFeature.java   
/**
 * Remove an inode from parent's children list. The caller of this method
 * needs to make sure that parent is in the given snapshot "latest".
 */
public boolean removeChild(INodeDirectory parent, INode child,
    int latestSnapshotId) {
  // For a directory that is not a renamed node, if isInLatestSnapshot returns
  // false, the directory is not in the latest snapshot, thus we do not need
  // to record the removed child in any snapshot.
  // For a directory that was moved/renamed, note that if the directory is in
  // any of the previous snapshots, we will create a reference node for the
  // directory while rename, and isInLatestSnapshot will return true in that
  // scenario (if all previous snapshots have been deleted, isInLatestSnapshot
  // still returns false). Thus if isInLatestSnapshot returns false, the
  // directory node cannot be in any snapshot (not in current tree, nor in
  // previous src tree). Thus we do not need to record the removed child in
  // any snapshot.
  ChildrenDiff diff = diffs.checkAndAddLatestSnapshotDiff(latestSnapshotId,
      parent).diff;
  UndoInfo<INode> undoInfo = diff.delete(child);

  final boolean removed = parent.removeChild(child);
  if (!removed && undoInfo != null) {
    // remove failed, undo
    diff.undoDelete(child, undoInfo);
  }
  return removed;
}
项目:big-c    文件:TestDiff.java   
static void delete(INode inode, final List<INode> current,
    Diff<byte[], INode> diff) {
  final int i = Diff.search(current, inode.getKey());
  current.remove(i);
  if (diff != null) {
    //test undo with 1/UNDO_TEST_P probability
    final boolean testUndo = RANDOM.nextInt(UNDO_TEST_P) == 0;
    String before = null;
    if (testUndo) {
      before = diff.toString();
    }

    final UndoInfo<INode> undoInfo = diff.delete(inode);

    if (testUndo) {
      final String after = diff.toString();
      //undo
      diff.undoDelete(inode, undoInfo);
      assertDiff(before, diff);
      //re-do
      diff.delete(inode);
      assertDiff(after, diff);
    }
  }
}
项目:hadoop-2.6.0-cdh5.4.3    文件:DirectoryWithSnapshotFeature.java   
/**
 * Remove an inode from parent's children list. The caller of this method
 * needs to make sure that parent is in the given snapshot "latest".
 */
public boolean removeChild(INodeDirectory parent, INode child,
    int latestSnapshotId) {
  // For a directory that is not a renamed node, if isInLatestSnapshot returns
  // false, the directory is not in the latest snapshot, thus we do not need
  // to record the removed child in any snapshot.
  // For a directory that was moved/renamed, note that if the directory is in
  // any of the previous snapshots, we will create a reference node for the
  // directory while rename, and isInLatestSnapshot will return true in that
  // scenario (if all previous snapshots have been deleted, isInLatestSnapshot
  // still returns false). Thus if isInLatestSnapshot returns false, the
  // directory node cannot be in any snapshot (not in current tree, nor in
  // previous src tree). Thus we do not need to record the removed child in
  // any snapshot.
  ChildrenDiff diff = diffs.checkAndAddLatestSnapshotDiff(latestSnapshotId,
      parent).diff;
  UndoInfo<INode> undoInfo = diff.delete(child);

  final boolean removed = parent.removeChild(child);
  if (!removed && undoInfo != null) {
    // remove failed, undo
    diff.undoDelete(child, undoInfo);
  }
  return removed;
}
项目:hadoop-2.6.0-cdh5.4.3    文件:TestDiff.java   
static void delete(INode inode, final List<INode> current,
    Diff<byte[], INode> diff) {
  final int i = Diff.search(current, inode.getKey());
  current.remove(i);
  if (diff != null) {
    //test undo with 1/UNDO_TEST_P probability
    final boolean testUndo = RANDOM.nextInt(UNDO_TEST_P) == 0;
    String before = null;
    if (testUndo) {
      before = diff.toString();
    }

    final UndoInfo<INode> undoInfo = diff.delete(inode);

    if (testUndo) {
      final String after = diff.toString();
      //undo
      diff.undoDelete(inode, undoInfo);
      assertDiff(before, diff);
      //re-do
      diff.delete(inode);
      assertDiff(after, diff);
    }
  }
}
项目:hadoop-plus    文件:TestDiff.java   
static void delete(INode inode, final List<INode> current,
    Diff<byte[], INode> diff) {
  final int i = Diff.search(current, inode.getKey());
  current.remove(i);
  if (diff != null) {
    //test undo with 1/UNDO_TEST_P probability
    final boolean testUndo = RANDOM.nextInt(UNDO_TEST_P) == 0;
    String before = null;
    if (testUndo) {
      before = diff.toString();
    }

    final UndoInfo<INode> undoInfo = diff.delete(inode);

    if (testUndo) {
      final String after = diff.toString();
      //undo
      diff.undoDelete(inode, undoInfo);
      assertDiff(before, diff);
      //re-do
      diff.delete(inode);
      assertDiff(after, diff);
    }
  }
}
项目:FlexMap    文件:DirectoryWithSnapshotFeature.java   
/**
 * Remove an inode from parent's children list. The caller of this method
 * needs to make sure that parent is in the given snapshot "latest".
 */
public boolean removeChild(INodeDirectory parent, INode child,
    int latestSnapshotId) throws QuotaExceededException {
  // For a directory that is not a renamed node, if isInLatestSnapshot returns
  // false, the directory is not in the latest snapshot, thus we do not need
  // to record the removed child in any snapshot.
  // For a directory that was moved/renamed, note that if the directory is in
  // any of the previous snapshots, we will create a reference node for the
  // directory while rename, and isInLatestSnapshot will return true in that
  // scenario (if all previous snapshots have been deleted, isInLatestSnapshot
  // still returns false). Thus if isInLatestSnapshot returns false, the
  // directory node cannot be in any snapshot (not in current tree, nor in
  // previous src tree). Thus we do not need to record the removed child in
  // any snapshot.
  ChildrenDiff diff = diffs.checkAndAddLatestSnapshotDiff(latestSnapshotId,
      parent).diff;
  UndoInfo<INode> undoInfo = diff.delete(child);

  final boolean removed = parent.removeChild(child);
  if (!removed && undoInfo != null) {
    // remove failed, undo
    diff.undoDelete(child, undoInfo);
  }
  return removed;
}
项目:FlexMap    文件:TestDiff.java   
static void delete(INode inode, final List<INode> current,
    Diff<byte[], INode> diff) {
  final int i = Diff.search(current, inode.getKey());
  current.remove(i);
  if (diff != null) {
    //test undo with 1/UNDO_TEST_P probability
    final boolean testUndo = RANDOM.nextInt(UNDO_TEST_P) == 0;
    String before = null;
    if (testUndo) {
      before = diff.toString();
    }

    final UndoInfo<INode> undoInfo = diff.delete(inode);

    if (testUndo) {
      final String after = diff.toString();
      //undo
      diff.undoDelete(inode, undoInfo);
      assertDiff(before, diff);
      //re-do
      diff.delete(inode);
      assertDiff(after, diff);
    }
  }
}
项目:hadoop-TCP    文件:TestDiff.java   
static void delete(INode inode, final List<INode> current,
    Diff<byte[], INode> diff) {
  final int i = Diff.search(current, inode.getKey());
  current.remove(i);
  if (diff != null) {
    //test undo with 1/UNDO_TEST_P probability
    final boolean testUndo = RANDOM.nextInt(UNDO_TEST_P) == 0;
    String before = null;
    if (testUndo) {
      before = diff.toString();
    }

    final UndoInfo<INode> undoInfo = diff.delete(inode);

    if (testUndo) {
      final String after = diff.toString();
      //undo
      diff.undoDelete(inode, undoInfo);
      assertDiff(before, diff);
      //re-do
      diff.delete(inode);
      assertDiff(after, diff);
    }
  }
}
项目:hardfs    文件:TestDiff.java   
static void delete(INode inode, final List<INode> current,
    Diff<byte[], INode> diff) {
  final int i = Diff.search(current, inode.getKey());
  current.remove(i);
  if (diff != null) {
    //test undo with 1/UNDO_TEST_P probability
    final boolean testUndo = RANDOM.nextInt(UNDO_TEST_P) == 0;
    String before = null;
    if (testUndo) {
      before = diff.toString();
    }

    final UndoInfo<INode> undoInfo = diff.delete(inode);

    if (testUndo) {
      final String after = diff.toString();
      //undo
      diff.undoDelete(inode, undoInfo);
      assertDiff(before, diff);
      //re-do
      diff.delete(inode);
      assertDiff(after, diff);
    }
  }
}
项目:hadoop-on-lustre2    文件:DirectoryWithSnapshotFeature.java   
/**
 * Remove an inode from parent's children list. The caller of this method
 * needs to make sure that parent is in the given snapshot "latest".
 */
public boolean removeChild(INodeDirectory parent, INode child,
    int latestSnapshotId) throws QuotaExceededException {
  // For a directory that is not a renamed node, if isInLatestSnapshot returns
  // false, the directory is not in the latest snapshot, thus we do not need
  // to record the removed child in any snapshot.
  // For a directory that was moved/renamed, note that if the directory is in
  // any of the previous snapshots, we will create a reference node for the
  // directory while rename, and isInLatestSnapshot will return true in that
  // scenario (if all previous snapshots have been deleted, isInLatestSnapshot
  // still returns false). Thus if isInLatestSnapshot returns false, the
  // directory node cannot be in any snapshot (not in current tree, nor in
  // previous src tree). Thus we do not need to record the removed child in
  // any snapshot.
  ChildrenDiff diff = diffs.checkAndAddLatestSnapshotDiff(latestSnapshotId,
      parent).diff;
  UndoInfo<INode> undoInfo = diff.delete(child);

  final boolean removed = parent.removeChild(child);
  if (!removed && undoInfo != null) {
    // remove failed, undo
    diff.undoDelete(child, undoInfo);
  }
  return removed;
}
项目:hadoop-on-lustre2    文件:TestDiff.java   
static void delete(INode inode, final List<INode> current,
    Diff<byte[], INode> diff) {
  final int i = Diff.search(current, inode.getKey());
  current.remove(i);
  if (diff != null) {
    //test undo with 1/UNDO_TEST_P probability
    final boolean testUndo = RANDOM.nextInt(UNDO_TEST_P) == 0;
    String before = null;
    if (testUndo) {
      before = diff.toString();
    }

    final UndoInfo<INode> undoInfo = diff.delete(inode);

    if (testUndo) {
      final String after = diff.toString();
      //undo
      diff.undoDelete(inode, undoInfo);
      assertDiff(before, diff);
      //re-do
      diff.delete(inode);
      assertDiff(after, diff);
    }
  }
}
项目:hadoop    文件:TestDiff.java   
static void modify(INode inode, final List<INode> current,
    Diff<byte[], INode> diff) {
  final int i = Diff.search(current, inode.getKey());
  Assert.assertTrue(i >= 0);
  final INodeDirectory oldinode = (INodeDirectory)current.get(i);
  final INodeDirectory newinode = new INodeDirectory(oldinode, false,
    oldinode.getFeatures());
  newinode.setModificationTime(oldinode.getModificationTime() + 1);

  current.set(i, newinode);
  if (diff != null) {
    //test undo with 1/UNDO_TEST_P probability
    final boolean testUndo = RANDOM.nextInt(UNDO_TEST_P) == 0;
    String before = null;
    if (testUndo) {
      before = diff.toString();
    }

    final UndoInfo<INode> undoInfo = diff.modify(oldinode, newinode);

    if (testUndo) {
      final String after = diff.toString();
      //undo
      diff.undoModify(oldinode, newinode, undoInfo);
      assertDiff(before, diff);
      //re-do
      diff.modify(oldinode, newinode);
      assertDiff(after, diff);
    }
  }
}
项目:aliyun-oss-hadoop-fs    文件:TestDiff.java   
static void modify(INode inode, final List<INode> current,
    Diff<byte[], INode> diff) {
  final int i = Diff.search(current, inode.getKey());
  Assert.assertTrue(i >= 0);
  final INodeDirectory oldinode = (INodeDirectory)current.get(i);
  final INodeDirectory newinode = new INodeDirectory(oldinode, false,
    oldinode.getFeatures());
  newinode.setModificationTime(oldinode.getModificationTime() + 1);

  current.set(i, newinode);
  if (diff != null) {
    //test undo with 1/UNDO_TEST_P probability
    final boolean testUndo = RANDOM.nextInt(UNDO_TEST_P) == 0;
    String before = null;
    if (testUndo) {
      before = diff.toString();
    }

    final UndoInfo<INode> undoInfo = diff.modify(oldinode, newinode);

    if (testUndo) {
      final String after = diff.toString();
      //undo
      diff.undoModify(oldinode, newinode, undoInfo);
      assertDiff(before, diff);
      //re-do
      diff.modify(oldinode, newinode);
      assertDiff(after, diff);
    }
  }
}
项目:big-c    文件:TestDiff.java   
static void modify(INode inode, final List<INode> current,
    Diff<byte[], INode> diff) {
  final int i = Diff.search(current, inode.getKey());
  Assert.assertTrue(i >= 0);
  final INodeDirectory oldinode = (INodeDirectory)current.get(i);
  final INodeDirectory newinode = new INodeDirectory(oldinode, false,
    oldinode.getFeatures());
  newinode.setModificationTime(oldinode.getModificationTime() + 1);

  current.set(i, newinode);
  if (diff != null) {
    //test undo with 1/UNDO_TEST_P probability
    final boolean testUndo = RANDOM.nextInt(UNDO_TEST_P) == 0;
    String before = null;
    if (testUndo) {
      before = diff.toString();
    }

    final UndoInfo<INode> undoInfo = diff.modify(oldinode, newinode);

    if (testUndo) {
      final String after = diff.toString();
      //undo
      diff.undoModify(oldinode, newinode, undoInfo);
      assertDiff(before, diff);
      //re-do
      diff.modify(oldinode, newinode);
      assertDiff(after, diff);
    }
  }
}
项目:hadoop-2.6.0-cdh5.4.3    文件:TestDiff.java   
static void modify(INode inode, final List<INode> current,
    Diff<byte[], INode> diff) {
  final int i = Diff.search(current, inode.getKey());
  Assert.assertTrue(i >= 0);
  final INodeDirectory oldinode = (INodeDirectory)current.get(i);
  final INodeDirectory newinode = new INodeDirectory(oldinode, false,
    oldinode.getFeatures());
  newinode.setModificationTime(oldinode.getModificationTime() + 1);

  current.set(i, newinode);
  if (diff != null) {
    //test undo with 1/UNDO_TEST_P probability
    final boolean testUndo = RANDOM.nextInt(UNDO_TEST_P) == 0;
    String before = null;
    if (testUndo) {
      before = diff.toString();
    }

    final UndoInfo<INode> undoInfo = diff.modify(oldinode, newinode);

    if (testUndo) {
      final String after = diff.toString();
      //undo
      diff.undoModify(oldinode, newinode, undoInfo);
      assertDiff(before, diff);
      //re-do
      diff.modify(oldinode, newinode);
      assertDiff(after, diff);
    }
  }
}
项目:hadoop-plus    文件:INodeDirectoryWithSnapshot.java   
@Override
public boolean removeChild(INode child, Snapshot latest,
    final INodeMap inodeMap) throws QuotaExceededException {
  ChildrenDiff diff = null;
  UndoInfo<INode> undoInfo = null;
  // For a directory that is not a renamed node, if isInLatestSnapshot returns
  // false, the directory is not in the latest snapshot, thus we do not need
  // to record the removed child in any snapshot.
  // For a directory that was moved/renamed, note that if the directory is in
  // any of the previous snapshots, we will create a reference node for the 
  // directory while rename, and isInLatestSnapshot will return true in that
  // scenario (if all previous snapshots have been deleted, isInLatestSnapshot
  // still returns false). Thus if isInLatestSnapshot returns false, the 
  // directory node cannot be in any snapshot (not in current tree, nor in 
  // previous src tree). Thus we do not need to record the removed child in 
  // any snapshot.
  if (isInLatestSnapshot(latest)) {
    diff = diffs.checkAndAddLatestSnapshotDiff(latest, this).diff;
    undoInfo = diff.delete(child);
  }
  final boolean removed = removeChild(child);
  if (undoInfo != null) {
    if (!removed) {
      //remove failed, undo
      diff.undoDelete(child, undoInfo);
    }
  }
  return removed;
}
项目:hadoop-plus    文件:TestDiff.java   
static void modify(INode inode, final List<INode> current,
    Diff<byte[], INode> diff) {
  final int i = Diff.search(current, inode.getKey());
  Assert.assertTrue(i >= 0);
  final INodeDirectory oldinode = (INodeDirectory)current.get(i);
  final INodeDirectory newinode = new INodeDirectory(oldinode, false);
  newinode.setModificationTime(oldinode.getModificationTime() + 1);

  current.set(i, newinode);
  if (diff != null) {
    //test undo with 1/UNDO_TEST_P probability
    final boolean testUndo = RANDOM.nextInt(UNDO_TEST_P) == 0;
    String before = null;
    if (testUndo) {
      before = diff.toString();
    }

    final UndoInfo<INode> undoInfo = diff.modify(oldinode, newinode);

    if (testUndo) {
      final String after = diff.toString();
      //undo
      diff.undoModify(oldinode, newinode, undoInfo);
      assertDiff(before, diff);
      //re-do
      diff.modify(oldinode, newinode);
      assertDiff(after, diff);
    }
  }
}
项目:FlexMap    文件:TestDiff.java   
static void modify(INode inode, final List<INode> current,
    Diff<byte[], INode> diff) {
  final int i = Diff.search(current, inode.getKey());
  Assert.assertTrue(i >= 0);
  final INodeDirectory oldinode = (INodeDirectory)current.get(i);
  final INodeDirectory newinode = new INodeDirectory(oldinode, false,
    oldinode.getFeatures());
  newinode.setModificationTime(oldinode.getModificationTime() + 1);

  current.set(i, newinode);
  if (diff != null) {
    //test undo with 1/UNDO_TEST_P probability
    final boolean testUndo = RANDOM.nextInt(UNDO_TEST_P) == 0;
    String before = null;
    if (testUndo) {
      before = diff.toString();
    }

    final UndoInfo<INode> undoInfo = diff.modify(oldinode, newinode);

    if (testUndo) {
      final String after = diff.toString();
      //undo
      diff.undoModify(oldinode, newinode, undoInfo);
      assertDiff(before, diff);
      //re-do
      diff.modify(oldinode, newinode);
      assertDiff(after, diff);
    }
  }
}
项目:hadoop-TCP    文件:INodeDirectoryWithSnapshot.java   
@Override
public boolean removeChild(INode child, Snapshot latest,
    final INodeMap inodeMap) throws QuotaExceededException {
  ChildrenDiff diff = null;
  UndoInfo<INode> undoInfo = null;
  // For a directory that is not a renamed node, if isInLatestSnapshot returns
  // false, the directory is not in the latest snapshot, thus we do not need
  // to record the removed child in any snapshot.
  // For a directory that was moved/renamed, note that if the directory is in
  // any of the previous snapshots, we will create a reference node for the 
  // directory while rename, and isInLatestSnapshot will return true in that
  // scenario (if all previous snapshots have been deleted, isInLatestSnapshot
  // still returns false). Thus if isInLatestSnapshot returns false, the 
  // directory node cannot be in any snapshot (not in current tree, nor in 
  // previous src tree). Thus we do not need to record the removed child in 
  // any snapshot.
  if (isInLatestSnapshot(latest)) {
    diff = diffs.checkAndAddLatestSnapshotDiff(latest, this).diff;
    undoInfo = diff.delete(child);
  }
  final boolean removed = removeChild(child);
  if (undoInfo != null) {
    if (!removed) {
      //remove failed, undo
      diff.undoDelete(child, undoInfo);
    }
  }
  return removed;
}
项目:hadoop-TCP    文件:TestDiff.java   
static void modify(INode inode, final List<INode> current,
    Diff<byte[], INode> diff) {
  final int i = Diff.search(current, inode.getKey());
  Assert.assertTrue(i >= 0);
  final INodeDirectory oldinode = (INodeDirectory)current.get(i);
  final INodeDirectory newinode = new INodeDirectory(oldinode, false);
  newinode.setModificationTime(oldinode.getModificationTime() + 1);

  current.set(i, newinode);
  if (diff != null) {
    //test undo with 1/UNDO_TEST_P probability
    final boolean testUndo = RANDOM.nextInt(UNDO_TEST_P) == 0;
    String before = null;
    if (testUndo) {
      before = diff.toString();
    }

    final UndoInfo<INode> undoInfo = diff.modify(oldinode, newinode);

    if (testUndo) {
      final String after = diff.toString();
      //undo
      diff.undoModify(oldinode, newinode, undoInfo);
      assertDiff(before, diff);
      //re-do
      diff.modify(oldinode, newinode);
      assertDiff(after, diff);
    }
  }
}
项目:hardfs    文件:INodeDirectoryWithSnapshot.java   
@Override
public boolean removeChild(INode child, Snapshot latest,
    final INodeMap inodeMap) throws QuotaExceededException {
  ChildrenDiff diff = null;
  UndoInfo<INode> undoInfo = null;
  // For a directory that is not a renamed node, if isInLatestSnapshot returns
  // false, the directory is not in the latest snapshot, thus we do not need
  // to record the removed child in any snapshot.
  // For a directory that was moved/renamed, note that if the directory is in
  // any of the previous snapshots, we will create a reference node for the 
  // directory while rename, and isInLatestSnapshot will return true in that
  // scenario (if all previous snapshots have been deleted, isInLatestSnapshot
  // still returns false). Thus if isInLatestSnapshot returns false, the 
  // directory node cannot be in any snapshot (not in current tree, nor in 
  // previous src tree). Thus we do not need to record the removed child in 
  // any snapshot.
  if (isInLatestSnapshot(latest)) {
    diff = diffs.checkAndAddLatestSnapshotDiff(latest, this).diff;
    undoInfo = diff.delete(child);
  }
  final boolean removed = removeChild(child);
  if (undoInfo != null) {
    if (!removed) {
      //remove failed, undo
      diff.undoDelete(child, undoInfo);
    }
  }
  return removed;
}
项目:hardfs    文件:TestDiff.java   
static void modify(INode inode, final List<INode> current,
    Diff<byte[], INode> diff) {
  final int i = Diff.search(current, inode.getKey());
  Assert.assertTrue(i >= 0);
  final INodeDirectory oldinode = (INodeDirectory)current.get(i);
  final INodeDirectory newinode = new INodeDirectory(oldinode, false);
  newinode.setModificationTime(oldinode.getModificationTime() + 1);

  current.set(i, newinode);
  if (diff != null) {
    //test undo with 1/UNDO_TEST_P probability
    final boolean testUndo = RANDOM.nextInt(UNDO_TEST_P) == 0;
    String before = null;
    if (testUndo) {
      before = diff.toString();
    }

    final UndoInfo<INode> undoInfo = diff.modify(oldinode, newinode);

    if (testUndo) {
      final String after = diff.toString();
      //undo
      diff.undoModify(oldinode, newinode, undoInfo);
      assertDiff(before, diff);
      //re-do
      diff.modify(oldinode, newinode);
      assertDiff(after, diff);
    }
  }
}
项目:hadoop-on-lustre2    文件:TestDiff.java   
static void modify(INode inode, final List<INode> current,
    Diff<byte[], INode> diff) {
  final int i = Diff.search(current, inode.getKey());
  Assert.assertTrue(i >= 0);
  final INodeDirectory oldinode = (INodeDirectory)current.get(i);
  final INodeDirectory newinode = new INodeDirectory(oldinode, false,
    oldinode.getFeatures());
  newinode.setModificationTime(oldinode.getModificationTime() + 1);

  current.set(i, newinode);
  if (diff != null) {
    //test undo with 1/UNDO_TEST_P probability
    final boolean testUndo = RANDOM.nextInt(UNDO_TEST_P) == 0;
    String before = null;
    if (testUndo) {
      before = diff.toString();
    }

    final UndoInfo<INode> undoInfo = diff.modify(oldinode, newinode);

    if (testUndo) {
      final String after = diff.toString();
      //undo
      diff.undoModify(oldinode, newinode, undoInfo);
      assertDiff(before, diff);
      //re-do
      diff.modify(oldinode, newinode);
      assertDiff(after, diff);
    }
  }
}