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)