Changes for HDFS-3077 branch. This will be merged into the main CHANGES.txt when the branch is merged. HDFS-3077. Quorum-based protocol for reading and writing edit logs. Contributed by Todd Lipcon based on initial work from Brandon Li and Hari Mankude. HDFS-3694. Fix getEditLogManifest to fetch httpPort if necessary (todd) HDFS-3692. Support purgeEditLogs() call to remotely purge logs on JNs (todd) HDFS-3693. JNStorage should read its storage info even before a writer becomes active (todd) HDFS-3725. Fix QJM startup when individual JNs have gaps (todd) HDFS-3741. Exhaustive failure injection test for skipped RPCs (todd) HDFS-3773. TestNNWithQJM fails after HDFS-3741. (atm) HDFS-3793. Implement genericized format() in QJM (todd) HDFS-3795. QJM: validate journal dir at startup (todd) HDFS-3798. Avoid throwing NPE when finalizeSegment() is called on invalid segment (todd) HDFS-3799. QJM: handle empty log segments during recovery (todd) HDFS-3797. QJM: add segment txid as a parameter to journal() RPC (todd) HDFS-3800. improvements to QJM fault testing (todd) HDFS-3823. QJM: TestQJMWithFaults fails occasionally because of missed setting of HTTP port. (todd and atm) HDFS-3826. QJM: Some trivial logging / exception text improvements. (todd and atm) HDFS-3839. QJM: hadoop-daemon.sh should be updated to accept "journalnode" (eli) HDFS-3845. Fixes for edge cases in QJM recovery protocol (todd) HDFS-3877. QJM: Provide defaults for dfs.journalnode.*address (eli) HDFS-3863. Track last "committed" txid in QJM (todd) HDFS-3869. Expose non-file journal manager details in web UI (todd) HDFS-3884. Journal format() should reset cached values (todd) HDFS-3870. Add metrics to JournalNode (todd) HDFS-3891. Make selectInputStreams throw IOE instead of RTE (todd) HDFS-3726. If a logger misses an RPC, don't retry that logger until next segment (todd) HDFS-3893. QJM: Make QJM work with security enabled. (atm) HDFS-3897. QJM: TestBlockToken fails after HDFS-3893. (atm) HDFS-3898. QJM: enable TCP_NODELAY for IPC (todd) HDFS-3885. QJM: optimize log sync when JN is lagging behind (todd) HDFS-3900. QJM: avoid validating log segments on log rolls (todd) HDFS-3901. QJM: send 'heartbeat' messages to JNs even when they are out-of-sync (todd) HDFS-3899. QJM: Add client-side metrics (todd) HDFS-3914. QJM: acceptRecovery should abort current segment (todd) HDFS-3915. QJM: Failover fails with auth error in secure cluster (todd) HDFS-3906. QJM: quorum timeout on failover with large log segment (todd) HDFS-3840. JournalNodes log JournalNotFormattedException backtrace error before being formatted (todd)