Branch-2802 Snapshot (Unreleased) HDFS-4076. Support snapshot of single files. (szetszwo) HDFS-4082. Add editlog opcodes for snapshot create and delete operations. (suresh via szetszwo) HDFS-4086. Add editlog opcodes to allow and disallow snapshots on a directory. (Brandon Li via suresh) HDFS-4083. Protocol changes for snapshots. (suresh) HDFS-4077. Add support for Snapshottable Directory. (szetszwo via suresh) HDFS-4087. Protocol changes for listSnapshots functionality. (Brandon Li via suresh) HDFS-4079. Add SnapshotManager which maintains a list for all the snapshottable directories and supports snapshot methods such as setting a directory to snapshottable and creating a snapshot. (szetszwo) HDFS-4078. Handle replication in snapshots. (szetszwo) HDFS-4084. Provide CLI support to allow and disallow snapshot on a directory. (Brondon Li via suresh) HDFS-4091. Add snapshot quota to limit the number of snapshots allowed. (szetszwo) HDFS-4097. Provide CLI support for createSnapshot. (Brandon Li via suresh) HDFS-4092. Update file deletion logic for snapshot so that the current inode is removed from the circular linked list; and if some blocks at the end of the block list no longer belong to any other inode, collect them and update the block list. (szetszwo) HDFS-4111. Support snapshot of subtrees. (szetszwo via suresh) HDFS-4119. Complete the allowSnapshot code and add a test for it. (szetszwo) HDFS-4133. Add testcases for testing basic snapshot functionalities. (Jing Zhao via suresh) HDFS-4116. Add auditlog for some snapshot operations. (Jing Zhao via suresh) HDFS-4095. Add some snapshot related metrics. (Jing Zhao via suresh) HDFS-4141. Support directory diff - the difference between the current state and a previous snapshot of an INodeDirectory. (szetszwo) HDFS-4146. Use getter and setter in INodeFileWithLink to access blocks and initialize root directory as snapshottable. (szetszwo) HDFS-4149. Implement the disallowSnapshot(..) in FSNamesystem and add resetSnapshottable(..) to SnapshotManager. (szetszwo) HDFS-4147. When there is a snapshot in a subtree, deletion of the subtree should fail. (Jing Zhao via szetszwo) HDFS-4150. Update the inode in the block map when a snapshotted file or a snapshot file is deleted. (Jing Zhao via szetszwo) HDFS-4159. Rename should fail when the destination directory is snapshottable and has snapshots. (Jing Zhao via szetszwo) HDFS-4170. Add snapshot information to INodesInPath. (szetszwo) HDFS-4177. Add a snapshot parameter to INodeDirectory.getChildrenList() for selecting particular snapshot children list views. (szetszwo) HDFS-4148. Disallow write/modify operations on files and directories in a snapshot. (Brandon Li via suresh) HDFS-4188. Add Snapshot.ID_COMPARATOR for comparing IDs and fix a bug in ReadOnlyList.Util.binarySearch(..). (szetszwo) HDFS-4187. Add tests for replication handling in snapshots. (Jing Zhao via szetszwo) HDFS-4196. Support renaming of snapshots. (Jing Zhao via szetszwo) HDFS-4175. Additional snapshot tests for more complicated directory structure and modifications. (Jing Zhao via suresh) HDFS-4293. Fix TestSnapshot failure. (Jing Zhao via suresh) HDFS-4317. Change INode and its subclasses to support HDFS-4103. (szetszwo) HDFS-4103. Support O(1) snapshot creation. (szetszwo) HDFS-4330. Support snapshots up to the snapshot limit. (szetszwo) HDFS-4357. Fix a bug that if an inode is replaced, further INode operations should apply to the new inode. (Jing Zhao via szetszwo) HDFS-4230. Support listing of all the snapshottable directories. (Jing Zhao via szetszwo) HDFS-4244. Support snapshot deletion. (Jing Zhao via szetszwo) HDFS-4245. Include snapshot related operations in TestOfflineEditsViewer. (Jing Zhao via szetszwo) HDFS-4395. In INodeDirectorySnapshottable's constructor, the passed-in dir could be an INodeDirectoryWithSnapshot. (Jing Zhao via szetszwo) HDFS-4397. Fix a bug in INodeDirectoryWithSnapshot.Diff.combinePostDiff(..) that it may put the wrong node into the deleted list. (szetszwo) HDFS-4407. Change INodeDirectoryWithSnapshot.Diff.combinePostDiff(..) to merge-sort like and keep the postDiff parameter unmodified. (szetszwo) HDFS-4098. Add FileWithSnapshot, INodeFileUnderConstructionWithSnapshot and INodeFileUnderConstructionSnapshot for supporting append to snapshotted files. (szetszwo) HDFS-4126. Add reading/writing snapshot information to FSImage. (Jing Zhao via suresh) HDFS-4436. Change INode.recordModification(..) to return only the current inode and remove the updateCircularList parameter from some methods in INodeDirectoryWithSnapshot.Diff. (szetszwo) HDFS-4429. When the latest snapshot exists, INodeFileUnderConstruction should be replaced with INodeFileWithSnapshot but not INodeFile. (Jing Zhao via szetszwo) HDFS-4441. Move INodeDirectoryWithSnapshot.Diff and the related classes to a package. (szetszwo) HDFS-4432. Support INodeFileUnderConstructionWithSnapshot in FSImage saving/loading. (Jing Zhao via suresh) HDFS-4131. Add capability to namenode to get snapshot diff. (Jing Zhao via suresh) HDFS-4447. Refactor INodeDirectoryWithSnapshot for supporting general INode diff lists. (szetszwo) HDFS-4189. Renames the getMutableXxx methods to getXxx4Write and fix a bug that some getExistingPathINodes calls should be getINodesInPath4Write. (szetszwo) HDFS-4361. When listing snapshottable directories, only return those where the user has permission to take snapshots. (Jing Zhao via szetszwo) HDFS-4464. Combine collectSubtreeBlocksAndClear with deleteDiffsForSnapshot and rename it to destroySubtreeAndCollectBlocks. (szetszwo) HDFS-4414. Add support for getting snapshot diff from DistributedFileSystem. (Jing Zhao via suresh) HDFS-4446. Support file snapshots with diff lists. (szetszwo) HDFS-4480. Eliminate the file snapshot circular linked list. (szetszwo) HDFS-4481. Change fsimage to support snapshot file diffs. (szetszwo) HDFS-4500. Refactor snapshot INode methods. (szetszwo) HDFS-4487. Fix snapshot diff report for HDFS-4446. (Jing Zhao via szetszwo) HDFS-4431. Support snapshot in OfflineImageViewer. (Jing Zhao via szetszwo) HDFS-4503. Update computeContentSummary(..), spaceConsumedInTree(..) and diskspaceConsumed(..) in INode for snapshot. (szetszwo) HDFS-4499. Fix file/directory/snapshot deletion for file diff. (Jing Zhao via szetszwo) HDFS-4524. Update SnapshotManager#snapshottables when loading fsimage. (Jing Zhao via szetszwo) HDFS-4520. Support listing snapshots under a snapshottable directory using ls. (Jing Zhao via szetszwo) HDFS-4514. Add CLI for supporting snapshot rename, diff report, and snapshottable directory listing. (Jing Zhao via szetszwo) HDFS-4523. Fix INodeFile replacement, TestQuota and javac errors from trunk merge. (szetszwo) HDFS-4507. Update quota verification for snapshots. (szetszwo) HDFS-4545. With snapshots, FSDirectory.unprotectedSetReplication(..) always changes file replication but it may or may not changes block replication. (szetszwo) HDFS-4557. Fix FSDirectory#delete when INode#cleanSubtree returns 0. (Jing Zhao via szetszwo) HDFS-4579. Annotate snapshot tests. (Arpit Agarwal via suresh) HDFS-4574. Move Diff to the util package. (szetszwo) HDFS-4563. Update namespace/diskspace usage after deleting snapshots. (Jing Zhao via szetszwo) HDFS-4144. Create test for all snapshot-related metrics. (Jing Zhao via suresh) HDFS-4556. Add snapshotdiff and LsSnapshottableDir tools to hdfs script. (Arpit Agarwal via szetszwo) HDFS-4534. Add INodeReference in order to support rename with snapshots. (szetszwo) HDFS-4616. Update the FilesDeleted metric while deleting file/dir in the current tree. (Jing Zhao via szetszwo) HDFS-4627. Fix FSImageFormat#Loader NPE and synchronization issues. (Jing Zhao via suresh) HDFS-4612. Not to use INode.getParent() when generating snapshot diff report. (Jing Zhao via szetszwo) HDFS-4636. Update quota usage when deleting files/dirs that were created after taking the latest snapshot. (Jing Zhao via szetszwo) HDFS-4648. For snapshot deletion, when merging the diff from to-delete snapshot to the prior snapshot, make sure files/directories created after the prior snapshot get deleted. (Jing Zhao via szetszwo) HDFS-4637. INodeDirectory#replaceSelf4Quota may incorrectly convert a newly created directory to an INodeDirectoryWithSnapshot. (Jing Zhao via szetszwo) HDFS-4611. Update FSImage for INodeReference. (szetszwo) HDFS-4647. Rename should call setLocalName after an inode is removed from snapshots. (Arpit Agarwal via szetszwo)