HBase Change Log

Release Notes - HBase - Version 1.3.6

** Sub-task
    * [HBASE-22132] - Backport HBASE-22115 "HBase RPC aspires to grow an infinite tree of trace scopes; some other places are also unsafe" intent to branch-1
    * [HBASE-22554] - Upgrade to surefire 2.22.2
    * [HBASE-22627] - Port HBASE-22617 (Recovered WAL directories not getting cleaned up) to branch-1
    * [HBASE-22706] - Backport HBASE-21292 "IdLock.getLockEntry() may hang if interrupted" to branch-1
    * [HBASE-22719] - Add debug support for github PR pre commit job
    * [HBASE-22728] - Upgrade jackson dependencies in branch-1
    * [HBASE-22891] - Use HBaseQA in HBase-PreCommit-GitHub-PR job
    * [HBASE-22988] - Backport HBASE-11062 "hbtop" to branch-1
    * [HBASE-23000] - Backport HBASE-18150 to branch-1.3 to fix consistently failing tests
    * [HBASE-23101] - Backport HBASE-22380 to branch-1

** Bug
    * [HBASE-18813] - TestCanaryTool fails on branch-1 / branch-1.4
    * [HBASE-22145] - windows hbase-env causes hbase cli/etc to ignore HBASE_OPTS
    * [HBASE-22426] - Disable region split/merge switch doen't work when 'hbase.assignment.usezk' is set true
    * [HBASE-22492] - HBase server doesn't preserve SASL sequence number on the network
    * [HBASE-22520] - Avoid possible NPE in HalfStoreFileReader seekBefore()
    * [HBASE-22538] - Prevent graceful_stop.sh from shutting down RS too early before finishing unloading regions
    * [HBASE-22563] - Reduce retained jobs for Jenkins pipelines
    * [HBASE-22571] - Javadoc Warnings related to @return tag
    * [HBASE-22586] - Javadoc Warnings related to @param tag
    * [HBASE-22601] - Misconfigured addition of peers leads to cluster shutdown.
    * [HBASE-22603] - Javadoc Warnings related to @link tag
    * [HBASE-22605] - Ref guide includes dev guidance only applicable to EOM versions
    * [HBASE-22649] - Encode StoreFile path URLs in the UI to handle scenarios where CF contains special characters (like # etc.)
    * [HBASE-22686] - ZkSplitLogWorkerCoordination doesn't allow a regionserver to pick up all of the split work it is capable of
    * [HBASE-22720] - Incorrect link for hbase.unittests
    * [HBASE-22730] - XML Parsing error on branch-1
    * [HBASE-22774] - [WAL] RegionGroupingStrategy loses its function after split
    * [HBASE-22801] - Maven build issue on Github PRs
    * [HBASE-22835] - Scan/Get with setColumn and the store with ROWCOL bloom filter could throw AssertionError (backport of  HBASE-19863)
    * [HBASE-22838] - assembly:single failure: user id or group id 'xxxxx' is too big
    * [HBASE-22856] - HBASE-Find-Flaky-Tests fails with pip error
    * [HBASE-22861] - [WAL] Merged region should get its WAL according to WALProvider.
    * [HBASE-22866] - Multiple slf4j-log4j provider versions included in binary package (branch-1)
    * [HBASE-22900] - No longer include multiple httpcore and httpclient versions in binary package
    * [HBASE-22935] - TaskMonitor warns MonitoredRPCHandler task may be stuck when it recently started
    * [HBASE-22937] - The RawBytesComparator in branch-1 have wrong comparison order
    * [HBASE-22955] - Branches-1 precommit and nightly yetus jobs are using jdk8 for jdk7 jobs
    * [HBASE-22981] - Remove unused flags for Yetus
    * [HBASE-23015] - Replace Jackson with relocated gson everywhere but hbase-rest
    * [HBASE-23019] - Handle --skip-errorprone on branch-1
    * [HBASE-23094] - Wrong log message in simpleRegionNormaliser while checking if merge is enabled.
    * [HBASE-23128] - Restore Region interface compatibility
    * [HBASE-23139] - MapReduce jobs lauched from convenience distribution are nonfunctional

** Improvement
    * [HBASE-21996] - Set locale for javadoc
    * [HBASE-22344] - Document deprecated public APIs
    * [HBASE-22363] - Remove hardcoded number of read cache block buckets
    * [HBASE-22464] - Improvements to hbase-vote script
    * [HBASE-22593] - Add local Jenv file to gitignore
    * [HBASE-22604] - fix the link in the docs to "Understanding HBase and BigTable" by Jim R. Wilson
    * [HBASE-22616] - responseTooXXX logging for Multi should characterize the component ops
    * [HBASE-22669] - Add unit tests for org.apache.hadoop.hbase.util.Strings
    * [HBASE-22689] - Line break for fix version in documentation
    * [HBASE-22692] - Rubocop definition is not used in the /bin directory
    * [HBASE-22724] - Add a emoji on the vote table for pre commit result on github
    * [HBASE-22762] - Print the delta between phases in the split/merge/compact/flush transaction journals
    * [HBASE-22785] - Reduce number of Checkstyle issues in client exceptions
    * [HBASE-22786] - Fix Checkstyle issues in tests of hbase-client
    * [HBASE-22804] - Provide an API to get list of successful regions and total expected regions in Canary
    * [HBASE-22810] - Initialize an separate ThreadPoolExecutor for taking/restoring snapshot
    * [HBASE-22828] - Log a region close journal
    * [HBASE-22844] - Fix Checkstyle issues in client snapshot exceptions
    * [HBASE-22872] - Don't create normalization plan unnecesarily when split and merge both are disabled
    * [HBASE-22874] - Define a public interface for Canary and move existing implementation to LimitedPrivate
    * [HBASE-22930] - Set unique name to longCompactions/shortCompactions threads
    * [HBASE-23114] - Use archiveArtifacts in Jenkinsfiles
    * [HBASE-23174] - Upgrade jackson and jackson-databind to 2.9.10 (branch-1)

** Test
    * [HBASE-22615] - Make TestChoreService more robust to timing
    * [HBASE-22725] - Remove all remaining javadoc warnings

** Task
    * [HBASE-19230] - Write up fixVersion policy from dev discussion in refguide
    * [HBASE-22911] - fewer concurrent github PR builds
    * [HBASE-22913] - Use Hadoop label for nightly builds
    * [HBASE-23012] - Release 1.3.6
    * [HBASE-23023] - upgrade shellcheck used to test in nightly and precommit
    * [HBASE-23053] - Disable concurrent nightly builds



Release Notes - HBase - Version 1.3.5 06/14/2019

** Sub-task
    * [HBASE-22330] - Backport HBASE-20724 (Sometimes some compacted storefiles are still opened after region failover) to branch-1
    * [HBASE-22419] - Backport hbase-personality changes in HBASE-22399 and HBASE-20970 to all active branches
    * [HBASE-22429] - hbase-vote download step requires URL to end with '/' 
    * [HBASE-22430] - hbase-vote should tee build and test output to console

** Bug
    * [HBASE-17170] - HBase is also retrying DoNotRetryIOException because of class loader differences.
    * [HBASE-20851] - Change rubocop config for max line length of 100
    * [HBASE-21920] - Ignoring 'empty' end_key while calculating end_key for new region in HBCK -fixHdfsOverlaps command can cause data loss
    * [HBASE-22235] - OperationStatus.{SUCCESS|FAILURE|NOT_RUN} are not visible to 3rd party coprocessors
    * [HBASE-22270] - master's jmx.clusterRequests could be negative in branch-1
    * [HBASE-22391] - Fix flaky tests from TestFromClientSide
    * [HBASE-22421] - branch-1 docker mode for yetus fails
    * [HBASE-22451] - TestLoadIncrementalHFiles and TestSecureLoadIncrementalHFiles are flaky
    * [HBASE-22487] - getMostLoadedRegions is unused
    * [HBASE-22508] - Address findbugs/spotbugs complaints (branch-1.3) 
    * [HBASE-22518] - yetus personality is treating branch-1.4 like earlier branches for hadoopcheck
    * [HBASE-22533] - TestAccessController3 is flaky (branch-1)
    * [HBASE-22540] - [Memstore] Correct counters in MemStoreChunkPool

** New Feature
    * [HBASE-21815] - Make isTrackingMetrics and getMetrics of ScannerContext public

** Improvement
    * [HBASE-21784] - Dump replication queue should show list of wal files ordered chronologically
    * [HBASE-22225] - Profiler tab on Master/RS UI not working w/o comprehensive message
    * [HBASE-22291] - Fix recovery of recovered.edits files under root dir
    * [HBASE-22341] - Add explicit guidelines for removing deprecations in book
    * [HBASE-22358] - Change rubocop configuration for method length
    * [HBASE-22379] - Fix Markdown for "Voting on Release Candidates" in book
    * [HBASE-22384] - Formatting issues in administration section of book
    * [HBASE-22392] - Remove extra/useless + 
    * [HBASE-22474] - Add --mvn-custom-repo parameter to yetus calls
    * [HBASE-22496] - UnsafeAccess.unsafeCopy should not copy more than UNSAFE_COPY_THRESHOLD on each iteration

** Task
    * [HBASE-22020] - upgrade to yetus 0.9.0
    * [HBASE-22374] - Backport AccessChecker refactor to branch-1.3 
    * [HBASE-22375] - Promote AccessChecker to LimitedPrivate(Coprocessor)
    * [HBASE-22449] - https everywhere in Maven metadata
    * [HBASE-22507] - Backport the pre commit changes in HBASE-22500 to all active branches


Release Notes - HBase - Version 1.3.4 04/14/2019

** Sub-task
    * [HBASE-21374] - Backport HBASE-21342 to branch-1
    * [HBASE-21561] - Backport HBASE-21413 (Empty meta log doesn't get split when restart whole cluster) to branch-1
    * [HBASE-21711] - Remove references to git.apache.org/hbase.git
    * [HBASE-21748] - Port HBASE-21738 (Remove all the CLSM#size operation in our memstore because it's an quite time consuming.) to branch-1
    * [HBASE-22152] - Create a jenkins file for yetus to processing GitHub PR

** Bug
    * [HBASE-20911] - correct Swtich/case indentation in formatter template for eclipse
    * [HBASE-20912] - Add import order config in dev support for eclipse
    * [HBASE-21135] - Build fails on windows as it fails to parse windows path during license check
    * [HBASE-21196] - HTableMultiplexer clears the meta cache after every put operation
    * [HBASE-21475] - Put mutation (having TTL set) added via co-processor is retrieved even after TTL expires
    * [HBASE-21492] - CellCodec Written To WAL Before It's Verified
    * [HBASE-21547] - Precommit uses master flaky list for other branches
    * [HBASE-21766] - TestSimpleRpcScheduler is flaky (branch-1)
    * [HBASE-22058] - upgrade thrift dependency to 0.9.3.1 on  branches 1.4, 1.3 and 1.2
    * [HBASE-22067] - Fix log line in StochasticLoadBalancer when balancer is an ill-fit for cluster size
    * [HBASE-22070] - Checking restoreDir in RestoreSnapshotHelper 
    * [HBASE-22106] - Log cause of the failure when coprocessor specification parsing fails.
    * [HBASE-22125] - Fix more instances in make_rc.sh where we need -Dhttps.protocols=TLSv1.2

** New Feature
    * [HBASE-21926] - Profiler servlet

** Improvement
    * [HBASE-21818] - Incorrect list item in javadoc

** Test
    * [HBASE-21963] - Add a script for building and verifying release candidate

** Task
    * [HBASE-21685] - Change repository urls to Gitbox
    * [HBASE-21687] - Update Findbugs Maven Plugin to 3.0.4 to work with Maven 3.6.0+ [branches-1]
    * [HBASE-21853] - update copyright notices to 2019


Release Notes - HBase - Version 1.3.3 12/21/2018

** Sub-task
    * [HBASE-16848] - Usage for show_peer_tableCFs command doesn't include peer
    * [HBASE-18786] - FileNotFoundException should not be silently handled for primary region replicas
    * [HBASE-20316] - Backport HBASE-20229 "ConnectionImplementation.locateRegions() returns duplicated entries when region replication is on" to branch-1
    * [HBASE-20317] - Backport HBASE-20261 "Table page (table.jsp) in Master UI does not show replicaIds for hbase meta table" to branch-1
    * [HBASE-20557] - Backport HBASE-17215 to branch-1
    * [HBASE-20558] - Backport HBASE-17854 to branch-1
    * [HBASE-20559] - Backport HBASE-18083 to branch-1
    * [HBASE-20647] - Backport HBASE-20616 "TruncateTableProcedure is stuck in retry loop in TRUNCATE_TABLE_CREATE_FS_LAYOUT state" to branch-1
    * [HBASE-20974] - Backport HBASE-20583 (SplitLogWorker should handle FileNotFoundException when split a wal) to branch-1
    * [HBASE-21060] - fix dead store in SecureBulkLoadEndpoint
    * [HBASE-21061] - fix synchronization of org.apache.hadoop.hbase.ipc.RpcServer$Connection.useWrap
    * [HBASE-21189] - flaky job should gather machine stats
    * [HBASE-21190] - Log files and count of entries in each as we load from the MasterProcWAL store
    * [HBASE-21347] - Backport HBASE-21200 "Memstore flush doesn't finish because of seekToPreviousRow() in memstore scanner." to branch-1

** Bug
    * [HBASE-15291] - FileSystem not closed in secure bulkLoad
    * [HBASE-16091] - Canary takes lot more time when there are delete markers in the table
    * [HBASE-16576] - Shell add_peer doesn't allow setting cluster_key for custom endpoints
    * [HBASE-16910] - Avoid NPE when starting StochasticLoadBalancer
    * [HBASE-17072] - CPU usage starts to climb up to 90-100% when using G1GC; purge ThreadLocal usage
    * [HBASE-17118] - StoreScanner leaked in KeyValueHeap
    * [HBASE-17565] - StochasticLoadBalancer may incorrectly skip balancing due to skewed multiplier sum
    * [HBASE-17631] - Canary interval too low
    * [HBASE-17798] - RpcServer.Listener.Reader can abort due to CancelledKeyException
    * [HBASE-17816] - HRegion#mutateRowWithLocks should update writeRequestCount metric
    * [HBASE-17861] - Regionserver down when checking the permission of staging dir if hbase.rootdir is on S3
    * [HBASE-17885] - Backport HBASE-15871 to branch-1
    * [HBASE-17930] - Avoid using Canary.sniff in HBaseTestingUtility
    * [HBASE-17991] - Add more details about compaction queue on /dump
    * [HBASE-18058] - Zookeeper retry sleep time should have an upper limit
    * [HBASE-18111] - Replication stuck when cluster connection is closed
    * [HBASE-18451] - PeriodicMemstoreFlusher should inspect the queue before adding a delayed flush request
    * [HBASE-18512] - Region Server will abort with IllegalStateException if HDFS umask has limited scope
    * [HBASE-18762] - Canary sink type cast error
    * [HBASE-18830] - TestCanaryTool does not check Canary monitor's error code
    * [HBASE-18842] - The hbase shell clone_snaphost command returns bad error message
    * [HBASE-18862] - backport HBASE-15109 to branch-1.2,branch-1.3
    * [HBASE-19163] - "Maximum lock count exceeded" from region server's batch processing
    * [HBASE-19343] - Restore snapshot makes split parent region online 
    * [HBASE-19364] - Truncate_preserve fails with table when replica region > 1
    * [HBASE-19377] - Compatibility checker complaining about hash collisions 
    * [HBASE-19391] - Calling HRegion#initializeRegionInternals from a region replica can still re-create a region directory
    * [HBASE-19418] - RANGE_OF_DELAY in PeriodicMemstoreFlusher should be configurable.
    * [HBASE-19435] - Reopen Files for ClosedChannelException in BucketCache
    * [HBASE-19458] - Allow building HBase 1.3.x against Hadoop 2.8
    * [HBASE-19551] - hbck -boundaries doesn't work correctly
    * [HBASE-19553] - Old replica regions should be cleared from AM memory after primary region split or merge
    * [HBASE-19816] - Replication sink list is not updated on UnknownHostException
    * [HBASE-19905] - ReplicationSyncUp tool will not exit if a peer replication is disabled
    * [HBASE-19924] - hbase rpc throttling does not work for multi() with request count rater.
    * [HBASE-20004] - Client is not able to execute REST queries in a secure cluster
    * [HBASE-20068] - Hadoopcheck project health check uses default maven repo instead of yetus managed ones
    * [HBASE-20141] - Fix TooManyFiles exception when RefreshingChannels in FileIOEngine
    * [HBASE-20230] - Incorrrect log message in RSRpcService
    * [HBASE-20231] - Not able to delete column family from a row using RemoteHTable
    * [HBASE-20292] - Wrong URLs in the descriptions for update_all_config and update_config commands in shell
    * [HBASE-20302] - CatalogJanitor should log the reason why it is disabled
    * [HBASE-20322] - CME in StoreScanner causes region server crash
    * [HBASE-20335] - nightly jobs no longer contain machine information
    * [HBASE-20364] - nightly job gives old results or no results for stages that timeout on SCM
    * [HBASE-20404] - Ugly cleanerchore complaint that dir is not empty
    * [HBASE-20517] - Fix PerformanceEvaluation 'column' parameter
    * [HBASE-20554] - "WALs outstanding" message from CleanerChore is noisy
    * [HBASE-20571] - JMXJsonServlet generates invalid JSON if it has NaN in metrics
    * [HBASE-20575] - Fail to config COMPACTION_ENABLED by hbase shell
    * [HBASE-20590] - REST Java client is not able to negotiate with the server in the secure mode
    * [HBASE-20591] - nightly job doesn't respect maven options
    * [HBASE-20597] - Use a lock to serialize access to a shared reference to ZooKeeperWatcher in HBaseReplicationEndpoint
    * [HBASE-20604] - ProtobufLogReader#readNext can incorrectly loop to the same position in the stream until the the WAL is rolled
    * [HBASE-20638] - nightly source artifact testing should fail the stage if it's going to report an error on jira
    * [HBASE-20664] - Variable shared across multiple threads
    * [HBASE-20669] - [findbugs] autoboxing to parse primitive
    * [HBASE-20689] - Docker fails to install rubocop for precommit
    * [HBASE-20697] - Can't cache All region locations of the specify table by calling table.getRegionLocator().getAllRegionLocations()
    * [HBASE-20704] - Sometimes some compacted storefiles are not archived on region close
    * [HBASE-20723] - Custom hbase.wal.dir results in data loss because we write recovered edits into a different place than where the recovering region server looks for them
    * [HBASE-20732] - Shutdown scan pool when master is stopped.
    * [HBASE-20766] - Verify Replication Tool Has Typo "remove cluster"
    * [HBASE-20769] - getSplits() has a out of bounds problem in TableSnapshotInputFormatImpl
    * [HBASE-20770] - WAL cleaner logs way too much; gets clogged when lots of work to do
    * [HBASE-20771] - PUT operation fail with "No server address listed in hbase:meta for region xxxxx"
    * [HBASE-20785] - NPE getting metrics in PE testing scans
    * [HBASE-20808] - Wrong shutdown order between Chores and ChoreService
    * [HBASE-20866] - HBase 1.x scan performance degradation compared to 0.98 version
    * [HBASE-20889] - PE scan is failing with NullPointerException
    * [HBASE-20890] - PE filterScan seems to be stuck forever
    * [HBASE-20895] - NPE in RpcServer#readAndProcess
    * [HBASE-20908] - Infinite loop on regionserver if region replica are reduced 
    * [HBASE-20940] - HStore.cansplit should not allow split to happen if it has references
    * [HBASE-20997] - rebuildUserRegions() does not build ReplicaMapping during master switchover
    * [HBASE-21007] - Memory leak in HBase rest server
    * [HBASE-21030] - Correct javadoc for append operation
    * [HBASE-21042] - processor.getRowsToLock() always assumes there is some row being locked in HRegion#processRowsWithLocks
    * [HBASE-21047] - Object creation of StoreFileScanner thru constructor and close may leave refCount to -1
    * [HBASE-21058] - Nightly tests for branches 1 fail to build ref guide
    * [HBASE-21067] - Backport HBASE-17519 (Rollback the removed cells) to branch-1.3
    * [HBASE-21069] - NPE in StoreScanner.updateReaders causes RS to crash 
    * [HBASE-21074] - JDK7 branches need to pass "-Dhttps.protocols=TLSv1.2" to maven when building
    * [HBASE-21088] - HStoreFile should be closed in HStore#hasReferences
    * [HBASE-21104] - client.TestRestoreSnapshotFromClientWithRegionReplicas failing on branch-1.3, branch-1.2
    * [HBASE-21158] - Empty qualifier cell should not be returned if it does not match QualifierFilter
    * [HBASE-21166] - Creating a CoprocessorHConnection re-retrieves the cluster id from ZK
    * [HBASE-21173] - Remove the duplicate HRegion#close in TestHRegion
    * [HBASE-21179] - Fix the number of actions in responseTooSlow log
    * [HBASE-21203] - TestZKMainServer#testCommandLineWorks won't pass with default 4lw whitelist
    * [HBASE-21212] - Wrong flush time when update flush metric
    * [HBASE-21228] - Memory leak since AbstractFSWAL caches Thread object and never clean later
    * [HBASE-21266] - Not running balancer because processing dead regionservers, but empty dead rs list
    * [HBASE-21275] - Thrift Server (branch 1 fix) -> Disable TRACE HTTP method for thrift http server (branch 1 only)
    * [HBASE-21355] - HStore's storeSize is calculated repeatedly which causing the confusing region split 
    * [HBASE-21357] - RS should abort if OOM in Reader thread
    * [HBASE-21359] - Fix build problem against Hadoop 2.8.5
    * [HBASE-21387] - Race condition surrounding in progress snapshot handling in snapshot cache leads to loss of snapshot files
    * [HBASE-21417] - Pre commit build is broken due to surefire plugin crashes
    * [HBASE-21439] - StochasticLoadBalancer RegionLoads aren’t being used in RegionLoad cost functions
    * [HBASE-21445] - CopyTable by bulkload will write hfile into yarn's HDFS 
    * [HBASE-21546] - ConnectException in TestThriftHttpServer
    * [HBASE-21553] - schedLock not released in MasterProcedureScheduler
    * [HBASE-21582] - If call HBaseAdmin#snapshotAsync but forget call isSnapshotFinished, then SnapshotHFileCleaner will skip to run every time

** New Feature
    * [HBASE-15134] - Add visibility into Flush and Compaction queues

** Improvement
    * [HBASE-15466] - precommit should not run all java goals when given a docs-only patch
    * [HBASE-15529] - Override needBalance in StochasticLoadBalancer
    * [HBASE-15727] - Canary Tool for Zookeeper
    * [HBASE-16399] - Provide an API to get list of failed regions and servername in Canary
    * [HBASE-16947] - Some improvements for DumpReplicationQueues tool
    * [HBASE-17205] - Add a metric for the duration of region in transition
    * [HBASE-17437] - Support specifying a WAL directory outside of the root directory
    * [HBASE-17731] - Fractional latency reporting in MultiThreadedAction
    * [HBASE-17912] - Avoid major compactions on region server startup
    * [HBASE-17924] - Consider sorting the row order when processing multi() ops before taking rowlocks
    * [HBASE-17959] - Canary timeout should be configurable on a per-table basis
    * [HBASE-18248] - Warn if monitored RPC task has been tied up beyond a configurable threshold
    * [HBASE-20047] - AuthenticationTokenIdentifier should provide a toString
    * [HBASE-20307] - LoadTestTool prints too much zookeeper logging
    * [HBASE-20352] - [Chore] Backport HBASE-18309 to branch-1
    * [HBASE-20379] - shadedjars yetus plugin should add a footer link
    * [HBASE-20387] - flaky infrastructure should work for all branches
    * [HBASE-20401] - Make `MAX_WAIT` and `waitIfNotFinished` in CleanerContext configurable
    * [HBASE-20469] - Directory used for sidelining old recovered edits files should be made configurable
    * [HBASE-20545] - Improve performance of BaseLoadBalancer.retainAssignment
    * [HBASE-20548] - Master fails to startup on large clusters, refreshing block distribution
    * [HBASE-20605] - Exclude new Azure Storage FileSystem from SecureBulkLoadEndpoint permission check
    * [HBASE-20651] - Master, prevents hbck or shell command to reassign the split parent region
    * [HBASE-20672] - New metrics ReadRequestRate and WriteRequestRate
    * [HBASE-20701] - too much logging when balancer runs from BaseLoadBalancer
    * [HBASE-20733] - QABot should run checkstyle tests if the checkstyle configs change
    * [HBASE-20734] - Colocate recovered edits directory with hbase.wal.dir
    * [HBASE-20806] - Split style journal for flushes and compactions
    * [HBASE-20826] - Truncate responseInfo attributes on RpcServer WARN messages
    * [HBASE-20858] - port HBASE-20695 to branch-1
    * [HBASE-20930] - MetaScanner.metaScan should use passed variable for meta table name rather than TableName.META_TABLE_NAME
    * [HBASE-20935] - HStore.removeCompactedFiles should log in case it is unable to delete a file
    * [HBASE-21028] - Backport HBASE-18633 to branch-1.3
    * [HBASE-21103] - nightly test cache of yetus install needs to be more thorough in verification
    * [HBASE-21185] - WALPrettyPrinter: Additional useful info to be printed by wal printer tool, for debugability purposes
    * [HBASE-21263] - Mention compression algorithm along with other storefile details
    * [HBASE-21373] - Backport to branch-1, "HBASE-21338 [balancer] If balancer is an ill-fit for cluster size, it gives little indication"
    * [HBASE-21511] - Remove in progress snapshot check in SnapshotFileCache#getUnreferencedFiles
    * [HBASE-21567] - Allow overriding configs starting up the shell

** Test
    * [HBASE-20052] - TestRegionOpen#testNonExistentRegionReplica fails due to NPE
    * [HBASE-20505] - PE should support multi column family read and write cases
    * [HBASE-20513] - Collect and emit ScanMetrics in PerformanceEvaluation
    * [HBASE-20619] - TestWeakObjectPool occasionally times out
    * [HBASE-21076] - TestTableResource fails with NPE
    * [HBASE-21138] - Close HRegion instance at the end of every test in TestHRegion

** Task
    * [HBASE-17965] - Canary tool should print the regionserver name on failure
    * [HBASE-19475] - Extend backporting strategy in documentation
    * [HBASE-20112] - Include test results from nightly hadoop3 tests in jenkins test results
    * [HBASE-20665] - "Already cached block XXX" message should be DEBUG
    * [HBASE-20884] - Replace usage of our Base64 implementation with java.util.Base64
    * [HBASE-20905] - branch-1 docker build fails
    * [HBASE-20931] - [branch-1] Add -Dhttps.protocols=TLSv1.2 to Maven command line in make_rc.sh
    * [HBASE-20942] - Improve RpcServer TRACE logging
    * [HBASE-21168] - BloomFilterUtil uses hardcoded randomness


Release Notes - HBase - Version 1.3.2 03/05/18

** Sub-task
    * [HBASE-15691] - Port HBASE-10205 (ConcurrentModificationException in BucketAllocator) to branch-1
    * [HBASE-17887] - Row-level consistency is broken for read
    * [HBASE-17925] - mvn assembly:single fails against hadoop3-alpha2
    * [HBASE-18268] - Eliminate the findbugs warnings for hbase-client
    * [HBASE-18293] - Only add the spotbugs dependency when jdk8 is active
    * [HBASE-18295] -  The result contains the cells across different rows
    * [HBASE-18308] - Eliminate the findbugs warnings for hbase-server
    * [HBASE-18315] - Eliminate the findbugs warnings for hbase-rest
    * [HBASE-18365] - Eliminate the findbugs warnings for hbase-common
    * [HBASE-18398] - Snapshot operation fails with FileNotFoundException
    * [HBASE-18656] - Address issues found by error-prone in hbase-common
    * [HBASE-18731] - [compat 1-2] Mark protected methods of QuotaSettings that touch Protobuf internals as IA.Private
    * [HBASE-18867] - maven enforcer plugin needs update to work with jdk9
    * [HBASE-18936] - Backport HBASE-16870 to branch-1.3
    * [HBASE-18937] - Backport HBASE-16815 to branch-1.3
    * [HBASE-18938] - Backport HBASE-16985 to branch-1.3
    * [HBASE-18939] - Backport HBASE-16538 to branch-1.3
    * [HBASE-18957] - add test that confirms 2 FamilyFilters in a FilterList using MUST_PASS_ONE operator will return results that match either of the FamilyFilters and revert as needed to make it pass.
    * [HBASE-18967] - Backport HBASE-17181 to branch-1.3
    * [HBASE-18980] - Address issues found by error-prone in hbase-hadoop2-compat
    * [HBASE-19070] - temporarily make the mvnsite nightly test non-voting.
    * [HBASE-19182] - Add deprecation in branch-1 for hbase-prefix-tree so some heads up it removed in hbase2
    * [HBASE-19205] - Backport HBASE-18441 ZookeeperWatcher#interruptedException should throw exception
    * [HBASE-19243] - Start mini cluster once before class for TestFIFOCompactionPolicy
    * [HBASE-19354] - [branch-1] Build using a jdk that is beyond ubuntu trusty's openjdk-151
    * [HBASE-19368] - [nightly] Make xml test non-voting in branch-1.2
    * [HBASE-19373] - Fix Checkstyle error in hbase-annotations
    * [HBASE-19468] - FNFE during scans and flushes
    * [HBASE-19502] - Make sure we have closed all StoreFileScanners if we fail to open any StoreFileScanners
    * [HBASE-19877] - hbase-common and hbase-zookeeper don't add the log4j.properties to the resource path for testing

** Bug
    * [HBASE-8758] - Error in RegionCoprocessorHost class preScanner method documentation.
    * [HBASE-9393] - Hbase does not closing a closed socket resulting in many CLOSE_WAIT 
    * [HBASE-13860] - Remove units from ServerMetricsTmpl.jamon since values are formatted human readable
    * [HBASE-14499] - Master coprocessors shutdown will not happen on master abort
    * [HBASE-14897] - TestTableLockManager.testReapAllTableLocks is flakey
    * [HBASE-15497] - Incorrect javadoc for atomicity guarantee of Increment and Append
    * [HBASE-15548] - SyncTable: sourceHashDir is supposed to be optional but won't work without 
    * [HBASE-15947] - Classes used only for tests included in main code base
    * [HBASE-16011] - TableSnapshotScanner and TableSnapshotInputFormat can produce duplicate rows
    * [HBASE-16090] - ResultScanner is not closed in SyncTable#finishRemainingHashRanges()
    * [HBASE-16615] - Fix flaky TestScannerHeartbeatMessages
    * [HBASE-16731] - Inconsistent results from the Get/Scan if we use the empty FilterList
    * [HBASE-16939] - ExportSnapshot: set owner and permission on right directory
    * [HBASE-17079] - HBase build fails on windows, hbase-archetype-builder is reason for failure
    * [HBASE-17131] - Avoid livelock caused by HRegion#processRowsWithLocks
    * [HBASE-17352] - Fix hbase-assembly build with bash 4
    * [HBASE-17441] - precommit test "hadoopcheck" not properly testing Hadoop 3 profile
    * [HBASE-17513] - Thrift Server 1 uses different QOP settings than RPC and Thrift Server 2 and can easily be misconfigured so there is no encryption when the operator expects it.
    * [HBASE-17534] - SecureBulkLoadClient squashes DoNotRetryIOExceptions from the server
    * [HBASE-17617] - Backport HBASE-16731 (Inconsistent results from the Get/Scan if we use the empty FilterList) to branch-1
    * [HBASE-17648] - HBase Table-level synchronization fails between two secured(kerberized) clusters
    * [HBASE-17658] - Fix bookkeeping error with max regions for a table
    * [HBASE-17803] - PE always re-creates table when we specify the split policy
    * [HBASE-17862] - Condition that always returns true
    * [HBASE-17902] - Backport HBASE-16367 "Race between master and region server initialization may lead to premature server abort" to 1.3
    * [HBASE-17934] - Backport HBASE-17779 "disable_table_replication returns misleading message and does not turn off replication" to branch-1.3
    * [HBASE-17937] - Memstore size becomes negative in case of expensive postPut/Delete Coprocessor call
    * [HBASE-17985] - Inline package manage updates with package installation in Yetus Dockerfile
    * [HBASE-18000] - Make sure we always return the scanner id with ScanResponse
    * [HBASE-18014] - A case of Region remain unassigned when table enabled
    * [HBASE-18024] - HRegion#initializeRegionInternals should not re-create .hregioninfo file when the region directory no longer exists
    * [HBASE-18025] - CatalogJanitor should collect outdated RegionStates from the AM
    * [HBASE-18026] - ProtobufUtil seems to do extra array copying
    * [HBASE-18027] - Replication should respect RPC size limits when batching edits
    * [HBASE-18030] - Per Cell TTL tags may get duplicated with increments/Append causing tags length overflow
    * [HBASE-18036] - HBase 1.x : Data locality is not maintained after cluster restart or SSH
    * [HBASE-18042] - Client Compatibility breaks between versions 1.2 and 1.3
    * [HBASE-18066] - Get with closest_row_before on "hbase:meta" can return empty Cell during region merge/split
    * [HBASE-18077] - Update JUnit license to EPL from CPL
    * [HBASE-18081] - The way we process connection preamble in SimpleRpcServer is broken
    * [HBASE-18092] - Removing a peer does not properly clean up the ReplicationSourceManager state and metrics
    * [HBASE-18093] - Overloading the meaning of 'enabled' in Quota Manager to indicate either quota disabled or quota manager not ready is not good
    * [HBASE-18122] - Scanner id should include ServerName of region server
    * [HBASE-18125] - HBase shell disregards spaces at the end of a split key in a split file
    * [HBASE-18132] - Low replication should be checked in period in case of datanode rolling upgrade
    * [HBASE-18137] - Replication gets stuck for empty WALs
    * [HBASE-18141] - Regionserver fails to shutdown when abort triggered in RegionScannerImpl during RPC call
    * [HBASE-18142] - Deletion of a cell deletes the previous versions too
    * [HBASE-18145] - The flush may cause the corrupt data for reading
    * [HBASE-18159] - Use OpenJDK7 instead of Oracle JDK7 in pre commit docker file
    * [HBASE-18167] - OfflineMetaRepair tool may cause HMaster abort always
    * [HBASE-18180] - Possible connection leak while closing BufferedMutator in TableOutputFormat
    * [HBASE-18185] - IntegrationTestTimeBoundedRequestsWithRegionReplicas unbalanced tests fails with AssertionError
    * [HBASE-18192] - Replication drops recovered queues on region server shutdown
    * [HBASE-18197] - Avoided to call job.waitForCompletion(true) two times
    * [HBASE-18212] - In Standalone mode with local filesystem HBase logs Warning message:Failed to invoke 'unbuffer' method in class class org.apache.hadoop.fs.FSDataInputStream
    * [HBASE-18230] - Generated LICENSE file includes unsubstituted Velocity variables
    * [HBASE-18233] - We shouldn't wait for readlock in doMiniBatchMutation in case of deadlock
    * [HBASE-18247] - Hbck to fix the case that replica region shows as key in the meta table
    * [HBASE-18255] - Time-Delayed HBase Performance Degradation with Java 7
    * [HBASE-18282] - ReplicationLogCleaner can delete WALs not yet replicated in case of a KeeperException
    * [HBASE-18330] - NPE in ReplicationZKLockCleanerChore
    * [HBASE-18358] - Backport HBASE-18099 'FlushSnapshotSubprocedure should wait for concurrent Region#flush() to finish' to branch-1.3
    * [HBASE-18362] - hbck should not report split replica parent region from meta as errors 
    * [HBASE-18390] - Sleep too long when finding region location failed
    * [HBASE-18437] - Revoke access permissions of a user from a table does not work as expected
    * [HBASE-18438] - Precommit doesn't warn about unused imports
    * [HBASE-18461] - Build broken If the username contains a backslash
    * [HBASE-18470] - Remove the redundant comma from RetriesExhaustedWithDetailsException#getDesc
    * [HBASE-18471] - The DeleteFamily cell is skipped when StoreScanner seeks to next column
    * [HBASE-18473] - VC.listLabels() erroneously closes any connection
    * [HBASE-18479] - should apply HBASE-18255 to HBASE_MASTER_OPTS too
    * [HBASE-18480] - The cost of BaseLoadBalancer.cluster is changed even if the rollback is done
    * [HBASE-18481] - The autoFlush flag was not used in PE tool
    * [HBASE-18487] - Minor fixes in row lock implementation
    * [HBASE-18505] - Our build/yetus personality will run tests on individual modules and then on all (i.e. 'root'). Should do one or other
    * [HBASE-18572] - Delete can't remove the cells which have no visibility label
    * [HBASE-18577] - shaded client includes several non-relocated third party dependencies
    * [HBASE-18587] - Fix Flaky TestFileIOEngine
    * [HBASE-18607] - fix submit-patch.py to support utf8
    * [HBASE-18625] - Splitting of region with replica, doesn't update region list in serverHolding. A server crash leads to overlap.
    * [HBASE-18644] - Duplicate "compactionQueueLength" metric in Region Server metrics
    * [HBASE-18665] - ReversedScannerCallable invokes getRegionLocations incorrectly
    * [HBASE-18679] - YARN may null Counters object and cause an NPE in ITBLL
    * [HBASE-18743] - HFiles in use by a table which has the same name and namespace with a default table cloned from snapshot may be deleted when that snapshot and default table are deleted
    * [HBASE-18757] - Fix Improper bitwise & in BucketCache offset calculation
    * [HBASE-18771] - Incorrect StoreFileRefresh leading to split and compaction failures
    * [HBASE-18796] - Admin#isTableAvailable returns incorrect result before daughter regions are opened
    * [HBASE-18818] - TestConnectionImplemenation fails
    * [HBASE-18864] - NullPointerException thrown when adding rows to a table from peer cluster, table with replication factor other than 0 or 1
    * [HBASE-18885] - HFileOutputFormat2 hardcodes default FileOutputCommitter
    * [HBASE-18890] - Backport HBASE-14499 (Master coprocessors shutdown will not happen on master abort) to branch-1
    * [HBASE-18891] - Upgrade netty-all jar
    * [HBASE-18921] - Result.current() throws ArrayIndexOutOfBoundsException after calling advance()
    * [HBASE-18923] - TestTableResource flaky on branch-1
    * [HBASE-18924] - Backport HBASE-18568 (Correct metric of numRegions) to branch-1.2 and branch-1.3
    * [HBASE-18934] - precommit on branch-1 isn't supposed to run against hadoop 3
    * [HBASE-18940] - branch-2 (and probably others) fail check of generated source artifact
    * [HBASE-18959] - Backport HBASE-18874 (HMaster abort message will be skipped if Throwable is passed null) to branch-1
    * [HBASE-18985] - Fix the building warning of missing version in hbase-shaded-check-invariants module
    * [HBASE-18998] - processor.getRowsToLock() always assumes there is some row being locked
    * [HBASE-19014] - surefire fails; When writing xml report stdout/stderr ... No such file or directory
    * [HBASE-19020] - TestXmlParsing exception checking relies on a particular xml implementation without declaring it.
    * [HBASE-19030] - nightly runs should attempt to log test results after archiving
    * [HBASE-19032] - Set Content-Type header for patches uploaded by submit-patch.py
    * [HBASE-19038] - precommit mvn install should run from root on patch
    * [HBASE-19039] - refactor shadedjars test to only run on java changes.
    * [HBASE-19042] - Oracle Java 8u144 downloader broken in precommit check
    * [HBASE-19055] - Backport HBASE-19042 to other active branches
    * [HBASE-19058] - The wget isn't installed in building docker image
    * [HBASE-19060] - "Hadoop check" test is running all the time instead of just when changes to java
    * [HBASE-19061] - enforcer NPE on hbase-shaded-invariants
    * [HBASE-19065] - HRegion#bulkLoadHFiles() should wait for concurrent Region#flush() to finish
    * [HBASE-19066] - Correct the directory of openjdk-8 for jenkins
    * [HBASE-19072] - Missing break in catch block of InterruptedException in HRegion#waitForFlushes() 
    * [HBASE-19098] - Python based compatiblity checker fails if git repo does not have a remote named 'origin'
    * [HBASE-19102] - TestZooKeeperMainServer fails with KeeperException$ConnectionLossException
    * [HBASE-19118] - Use SaslUtil to set Sasl.QOP in 'Thrift'
    * [HBASE-19124] - Move HBase-Nightly source artifact creation test from JenkinsFile to a script in dev-support
    * [HBASE-19137] - Nightly test should make junit reports optional rather than attempt archive after reporting.
    * [HBASE-19156] - Duplicative regions_per_server options on LoadTestTool
    * [HBASE-19184] - clean up nightly source artifact test to match expectations from switch to git-archive
    * [HBASE-19188] - Build fails on branch-1 using maven-3.5.2
    * [HBASE-19198] - TestIPv6NIOServerSocketChannel fails; unable to bind
    * [HBASE-19215] - Incorrect exception handling on the client causes incorrect call timeouts and byte buffer allocations on the server
    * [HBASE-19223] - Remove references to Date Tiered compaction from branch-1.2 and branch-1.1 ref guide
    * [HBASE-19229] - Nightly script to check source artifact should not do a destructive git operation without opt-in
    * [HBASE-19245] - MultiTableInputFormatBase#getSplits creates a Connection per Table
    * [HBASE-19249] - test for "hbase antipatterns" should check _count_ of occurance rather than text of
    * [HBASE-19260] - Add lock back to avoid parallel accessing meta to locate region
    * [HBASE-19285] - Add per-table latency histograms
    * [HBASE-19332] - DumpReplicationQueues misreports total WAL size
    * [HBASE-19340] - Backport missing options in shell
    * [HBASE-19350] - TestMetaWithReplicas is flaky
    * [HBASE-19383] - [1.2] java.lang.AssertionError: expected:<2> but was:<1>     at org.apache.hadoop.hbase.TestChoreService.testTriggerNowFailsWhenNotScheduled(TestChoreService.java:707)
    * [HBASE-19385] - [1.3] TestReplicator failed 1.3 nightly
    * [HBASE-19388] - Incorrect value is being set for Compaction Pressure in RegionLoadStats object inside HRegion class
    * [HBASE-19393] - HTTP 413 FULL head while accessing HBase UI using SSL. 
    * [HBASE-19396] - Fix flaky test TestHTableMultiplexerFlushCache
    * [HBASE-19422] - using hadoop-profile property leads to confusing failures
    * [HBASE-19424] - Metrics servlet throws NPE
    * [HBASE-19442] - Backport HBASE-19065 to branch-1 (HRegion#bulkLoadHFiles() should wait for concurrent Region#flush() to finish)
    * [HBASE-19490] - Rare failure in TestRateLimiter
    * [HBASE-19546] - TestMasterReplication.testCyclicReplication2 uses wrong assertion
    * [HBASE-19685] - Fix TestFSErrorsExposed#testFullSystemBubblesFSErrors
    * [HBASE-19708] - Avoid NPE when the RPC listener's accept channel is closed
    * [HBASE-19728] - Add lock to filesCompacting in all place.
    * [HBASE-19756] - Master NPE during completed failed proc eviction
    * [HBASE-19790] - Fix compatibility break in 1.3.2-SNAPSHOT
    * [HBASE-19796] - ReplicationSynUp tool is not replicating the data if the WAL is moved to splitting directory
    * [HBASE-19802] - Wrong usage messages on shell commands (grant/revoke namespace syntax)
    * [HBASE-19871] - delete.rb should require user to provide the column
    * [HBASE-19876] - The exception happening in converting pb mutation to hbase.mutation messes up the CellScanner
    * [HBASE-19900] - Region-level exception destroy the result of batch
    * [HBASE-19901] - Up yetus proclimit on nightlies
    * [HBASE-19979] - ReplicationSyncUp tool may leak Zookeeper connection
    * [HBASE-19981] - Boolean#getBoolean is used to parse value
    * [HBASE-19989] - READY_TO_MERGE and READY_TO_SPLIT do not update region state correctly
    * [HBASE-19996] - Some nonce procs might not be cleaned up (follow up HBASE-19756)
    * [HBASE-20001] - cleanIfNoMetaEntry() uses encoded instead of region name to lookup region
    * [HBASE-20016] - TestCatalogJanitorInMemoryStates#testInMemoryForReplicaParentCleanup is flaky
    * [HBASE-20051] - Correct usage statement of endtime for VerifyReplication
    * [HBASE-20061] - HStore synchronized member variable filesCompacting should be private
    * [HBASE-20062] - findbugs is not running on precommit checks
    * [HBASE-20106] - API Compliance checker should fall back to specifying origin as remote repo
    * [HBASE-20134] - support scripts use hard-coded /tmp
    * [HBASE-20139] - NPE in RSRpcServices.get() when getRegion throws an exception
    * [HBASE-20146] - Regions are stuck while opening when WAL is disabled
    * [HBASE-20162] - [nightly] depending on pipeline execution we sometimes refer to the wrong workspace
    * [HBASE-20164] - failed hadoopcheck should add footer link
    * [HBASE-20174] - Fix TestZKLessMergeOnCluster flakiness
    * [HBASE-20189] - Typo in Required Java Version error message while building HBase.

** New Feature
    * [HBASE-19189] - Ad-hoc test job for running a subset of tests lots of times

** Improvement
    * [HBASE-14220] - nightly tests should verify src tgz generates and builds correctly
    * [HBASE-16116] - Remove redundant pattern *.iml
    * [HBASE-16351] - do dependency license check via enforcer plugin
    * [HBASE-17514] - Warn when Thrift Server 1 is configured for proxy users but not the HTTP transport
    * [HBASE-17817] - Make Regionservers log which tables it removed coprocessors from when aborting
    * [HBASE-17877] - Improve HBase's byte[] comparator
    * [HBASE-17916] - Error message not clear when the permission of staging dir is not as expected
    * [HBASE-17944] - Removed unused JDK version parsing from ClassSize.
    * [HBASE-18020] - Update API Compliance Checker to Incorporate Improvements Done in Hadoop
    * [HBASE-18023] - Log multi-* requests for more than threshold number of rows
    * [HBASE-18041] - Add pylintrc file to HBase
    * [HBASE-18090] - Improve TableSnapshotInputFormat to allow more multiple mappers per region
    * [HBASE-18387] - [Thrift] Make principal configurable in DemoClient.java
    * [HBASE-18426] - nightly job should use independent stages to check supported jdks
    * [HBASE-18467] - nightly job needs to run all stages and then comment on jira
    * [HBASE-18631] - Allow configuration of ChaosMonkey properties via hbase-site
    * [HBASE-18675] - Making {max,min}SessionTimeout configurable for MiniZooKeeperCluster
    * [HBASE-18746] - Throw exception with job.getStatus().getFailureInfo() when ExportSnapshot fails
    * [HBASE-19052] - FixedFileTrailer should recognize CellComparatorImpl class in branch-1.x
    * [HBASE-19091] - Code annotation wrote "BinaryComparator" instead of "LongComparator"
    * [HBASE-19140] - hbase-cleanup.sh uses deprecated call to remove files in hdfs
    * [HBASE-19228] - nightly job should gather machine stats.
    * [HBASE-19262] - Revisit checkstyle rules
    * [HBASE-19489] - Check against only the latest maintenance release in pre-commit hadoopcheck.
    * [HBASE-19491] - Exclude flaky tests from nightly master run
    * [HBASE-19570] - Add hadoop3 tests to Nightly master/branch-2 runs
    * [HBASE-19571] - Minor refactor of Nightly run scripts
    * [HBASE-19684] - BlockCacheKey toString Performance
    * [HBASE-19789] - Not exclude flaky tests from nightly builds

** Test
    * [HBASE-17703] - TestThriftServerCmdLine is flaky in master branch
    * [HBASE-18147] - nightly job to check health of active branches
    * [HBASE-18979] - TestInterfaceAudienceAnnotations fails on branch-1.3
    * [HBASE-19414] - enable TestMasterOperationsForRegionReplicas#testIncompleteMetaTableReplicaInformation in branch-1.3 and branch-1.2
    * [HBASE-19514] - Use random port for TestJMXListener

** Task
    * [HBASE-15151] - Rely on nightly tests for findbugs compliance on existing branch
    * [HBASE-16459] - Remove unused hbase shell --format option
    * [HBASE-17954] - Switch findbugs implementation to spotbugs
    * [HBASE-17968] - Update copyright year in NOTICE file
    * [HBASE-18096] - Limit HFileUtil visibility and add missing annotations
    * [HBASE-18527] - update nightly builds to compensate for jenkins plugin upgrades
    * [HBASE-18582] - Correct the docs for Mutation#setCellVisibility
    * [HBASE-18670] - Add .DS_Store to .gitignore
    * [HBASE-18676] - Update branch 1.3 pom version
    * [HBASE-18690] - Replace o.a.h.c.InterfaceAudience by o.a.h.h.c.InterfaceAudience
    * [HBASE-18833] - Ensure precommit personality is up to date on all active branches
    * [HBASE-18996] - Backport HBASE-17703 (TestThriftServerCmdLine is flaky in master branch) to branch-1
    * [HBASE-19097] - update testing to use Apache Yetus Test Patch version 0.6.0
    * [HBASE-19637] - Add .checkstyle to gitignore
    * [HBASE-20075] - remove logic for branch-1.1 nightly testing
    * [HBASE-20088] - Update copyright notices to year 2018
    * [HBASE-20089] - make_rc.sh should name SHA-512 checksum files with the extension .sha512

** Umbrella
    * [HBASE-18266] - Eliminate the warnings from the spotbugs
    * [HBASE-18935] - Backport bug fixes which were fixed in 1.2.x and 1.4.x versions but not in 1.3.x version


Release Notes - HBase - Version 1.3.1 04/30/2017

** Sub-task
    * [HBASE-15386] - PREFETCH_BLOCKS_ON_OPEN in HColumnDescriptor is ignored
    * [HBASE-17060] - backport HBASE-16570 to 1.3.1
    * [HBASE-17561] - table status page should escape values that may contain arbitrary characters.

** Bug
    * [HBASE-14753] - TestShell is not invoked anymore
    * [HBASE-15328] - Unvalidated Redirect in HMaster
    * [HBASE-15635] - Mean age of Blocks in cache (seconds) on webUI should be greater than zero
    * [HBASE-16630] - Fragmentation in long running Bucket Cache
    * [HBASE-16886] - hbase-client: scanner with reversed=true and small=true gets no result
    * [HBASE-16939] - ExportSnapshot: set owner and permission on right directory
    * [HBASE-16948] - Fix inconsistency between HRegion and Region javadoc on getRowLock
    * [HBASE-17059] - backport HBASE-17039 to 1.3.1
    * [HBASE-17069] - RegionServer writes invalid META entries for split daughters in some circumstances
    * [HBASE-17070] - backport HBASE-17020 to 1.3.1
    * [HBASE-17112] - Prevent setting timestamp of delta operations the same as previous value's
    * [HBASE-17175] - backport HBASE-17127 to 1.3.1
    * [HBASE-17187] - DoNotRetryExceptions from coprocessors should bubble up to the application
    * [HBASE-17227] - Backport HBASE-17206 to branch-1.3
    * [HBASE-17264] - Processing RIT with offline state will always fail to open the first time
    * [HBASE-17265] - Region left unassigned in master failover when region failed to open
    * [HBASE-17275] - Assign timeout may cause region to be unassigned forever
    * [HBASE-17287] - Master becomes a zombie if filesystem object closes
    * [HBASE-17289] - Avoid adding a replication peer named "lock"
    * [HBASE-17357] - PerformanceEvaluation parameters parsing triggers NPE.
    * [HBASE-17381] - ReplicationSourceWorkerThread can die due to unhandled exceptions
    * [HBASE-17387] - Reduce the overhead of exception report in RegionActionResult for multi()
    * [HBASE-17445] - Count size of serialized exceptions in checking max result size quota
    * [HBASE-17475] - Stack overflow in AsyncProcess if retry too much
    * [HBASE-17489] - ClientScanner may send a next request to a RegionScanner which has been exhausted
    * [HBASE-17501] - NullPointerException after Datanodes Decommissioned and Terminated
    * [HBASE-17522] - RuntimeExceptions from MemoryMXBean should not take down server process
    * [HBASE-17540] - Change SASL server GSSAPI callback log line from DEBUG to TRACE in RegionServer to reduce log volumes in DEBUG mode
    * [HBASE-17558] - ZK dumping jsp should escape html 
    * [HBASE-17572] - HMaster: Caught throwable while processing event C_M_MERGE_REGION
    * [HBASE-17578] - Thrift per-method metrics should still update in the case of exceptions
    * [HBASE-17587] - Do not Rethrow DoNotRetryIOException as UnknownScannerException
    * [HBASE-17590] - Drop cache hint should work for StoreFile write path
    * [HBASE-17597] - TestMetaWithReplicas.testMetaTableReplicaAssignment is flaky
    * [HBASE-17601] - close() in TableRecordReaderImpl assumes the split has started
    * [HBASE-17604] - Backport HBASE-15437 (fix request and response size metrics) to branch-1
    * [HBASE-17611] - Thrift 2 per-call latency metrics are capped at ~ 2 seconds
    * [HBASE-17616] - Incorrect actions performed by CM
    * [HBASE-17649] - REST API for scan should return 410 when table is disabled
    * [HBASE-17675] - ReplicationEndpoint should choose new sinks if a SaslException occurs 
    * [HBASE-17677] - ServerName parsing from directory name should be more robust to errors from guava's HostAndPort
    * [HBASE-17682] - Region stuck in merging_new state indefinitely
    * [HBASE-17688] - MultiRowRangeFilter not working correctly if given same start and stop RowKey
    * [HBASE-17698] - ReplicationEndpoint choosing sinks
    * [HBASE-17716] - Formalize Scan Metric names
    * [HBASE-17717] - Incorrect ZK ACL set for HBase superuser
    * [HBASE-17722] - Metrics subsystem stop/start messages add a lot of useless bulk to operational logging
    * [HBASE-17780] - BoundedByteBufferPool "At capacity" messages are not actionable
    * [HBASE-17813] - backport HBASE-16983 to branch-1.3
    * [HBASE-17868] - Backport HBASE-10205 to branch-1.3
    * [HBASE-17886] - Fix compatibility of ServerSideScanMetrics

** Improvement
    * [HBASE-12770] - Don't transfer all the queued hlogs of a dead server to the same alive server
    * [HBASE-15429] - Add a split policy for busy regions
    * [HBASE-15941] - HBCK repair should not unsplit healthy splitted region
    * [HBASE-16562] - ITBLL should fail to start if misconfigured
    * [HBASE-16755] - Honor flush policy under global memstore pressure
    * [HBASE-16773] - AccessController should access local region if possible
    * [HBASE-16947] - Some improvements for DumpReplicationQueues tool
    * [HBASE-16977] - VerifyReplication should log a printable representation of the row keys
    * [HBASE-17057] - Minor compactions should also drop page cache behind reads
    * [HBASE-17579] - Backport HBASE-16302 to 1.3.1
    * [HBASE-17627] - Active workers metric for thrift
    * [HBASE-17637] - Update progress more frequently in IntegrationTestBigLinkedList.Generator.persist
    * [HBASE-17837] - Backport HBASE-15314 to branch-1.3

** Task
    * [HBASE-17609] - Allow for region merging in the UI 


Release Notes - HBase - Version 1.3.0 10/24/2016

** Sub-task
    * [HBASE-13212] - Procedure V2 - master Create/Modify/Delete namespace
    * [HBASE-13819] - Make RPC layer CellBlock buffer a DirectByteBuffer
    * [HBASE-13909] - create 1.2 branch
    * [HBASE-14051] - Undo workarounds in IntegrationTestDDLMasterFailover for client double submit
    * [HBASE-14212] - Add IT test for procedure-v2-based namespace DDL
    * [HBASE-14423] - TestStochasticBalancerJmxMetrics.testJmxMetrics_PerTableMode:183 NullPointer
    * [HBASE-14464] - Removed unused fs code
    * [HBASE-14575] - Relax region read lock for compactions
    * [HBASE-14662] - Fix NPE in HFileOutputFormat2
    * [HBASE-14734] - BindException when setting up MiniKdc
    * [HBASE-14786] - TestProcedureAdmin hangs
    * [HBASE-14877] - maven archetype: client application
    * [HBASE-14878] - maven archetype: client application with shaded jars
    * [HBASE-14949] - Resolve name conflict when splitting if there are duplicated WAL entries
    * [HBASE-14955] - OOME: cannot create native thread is back
    * [HBASE-15105] - Procedure V2 - Procedure Queue with Namespaces
    * [HBASE-15113] - Procedure v2 - Speedup eviction of sys operation results
    * [HBASE-15142] - Procedure v2 - Basic WebUI listing the procedures
    * [HBASE-15144] - Procedure v2 - Web UI displaying Store state
    * [HBASE-15163] - Add sampling code and metrics for get/scan/multi/mutate count separately
    * [HBASE-15171] - Avoid counting duplicate kv and generating lots of small hfiles in PutSortReducer
    * [HBASE-15194] - TestStochasticLoadBalancer.testRegionReplicationOnMidClusterSameHosts flaky on trunk
    * [HBASE-15202] - Reduce garbage while setting response
    * [HBASE-15203] - Reduce garbage created by path.toString() during Checksum verification
    * [HBASE-15204] - Try to estimate the cell count for adding into WALEdit
    * [HBASE-15232] - Exceptions returned over multi RPC don't automatically trigger region location reloads
    * [HBASE-15311] - Prevent NPE in BlockCacheViewTmpl
    * [HBASE-15347] - Update CHANGES.txt for 1.3
    * [HBASE-15351] - Fix description of hbase.bucketcache.size in hbase-default.xml
    * [HBASE-15354] - Use same criteria for clearing meta cache for all operations
    * [HBASE-15365] - Do not write to '/tmp' in TestHBaseConfiguration
    * [HBASE-15366] - Add doc, trace-level logging, and test around hfileblock
    * [HBASE-15368] - Add pluggable window support
    * [HBASE-15371] - Procedure V2 - Completed support parent-child procedure
    * [HBASE-15373] - DEPRECATED_NAME_OF_NO_LIMIT_THROUGHPUT_CONTROLLER_CLASS value is wrong in CompactionThroughputControllerFactory
    * [HBASE-15376] - ScanNext metric is size-based while every other per-operation metric is time based
    * [HBASE-15377] - Per-RS Get metric is time based, per-region metric is size-based
    * [HBASE-15384] - Avoid using '/tmp' directory in TestBulkLoad
    * [HBASE-15389] - Write out multiple files when compaction
    * [HBASE-15390] - Unnecessary MetaCache evictions cause elevated number of requests to meta
    * [HBASE-15392] - Single Cell Get reads two HFileBlocks
    * [HBASE-15400] - Use DateTieredCompactor for Date Tiered Compaction
    * [HBASE-15412] - Add average region size metric
    * [HBASE-15422] - Procedure v2 - Avoid double yield
    * [HBASE-15435] - Add WAL (in bytes) written metric
    * [HBASE-15460] - Fix infer issues in hbase-common
    * [HBASE-15464] - Flush / Compaction metrics revisited
    * [HBASE-15477] - Do not save 'next block header' when we cache hfileblocks
    * [HBASE-15479] - No more garbage or beware of autoboxing
    * [HBASE-15488] - Add ACL for setting split merge switch
    * [HBASE-15518] - Add Per-Table metrics back
    * [HBASE-15524] - Fix NPE in client-side metrics
    * [HBASE-15527] - Refactor Compactor related classes
    * [HBASE-15537] - Make multi WAL work with WALs other than FSHLog
    * [HBASE-15640] - L1 cache doesn't give fair warning that it is showing partial stats only when it hits limit
    * [HBASE-15658] - RegionServerCallable / RpcRetryingCaller clear meta cache on retries
    * [HBASE-15665] - Support using different StoreFileComparators for different CompactionPolicies
    * [HBASE-15671] - Add per-table metrics on memstore, storefile and regionsize
    * [HBASE-15683] - Min latency in latency histograms are emitted as Long.MAX_VALUE
    * [HBASE-15713] - Backport "HBASE-15477 Do not save 'next block header' when we cache hfileblocks"
    * [HBASE-15740] - Replication source.shippedKBs metric is undercounting because it is in KB
    * [HBASE-15865] - Move TestTableDeleteFamilyHandler and TestTableDescriptorModification handler tests to procedure
    * [HBASE-15872] - Split TestWALProcedureStore
    * [HBASE-15878] - Deprecate doBulkLoad(Path hfofDir, final HTable table)  in branch-1 (even though its 'late')
    * [HBASE-15935] - Have a separate Walker task running concurrently with Generator
    * [HBASE-15971] - Regression: Random Read/WorkloadC slower in 1.x than 0.98
    * [HBASE-15984] - Given failure to parse a given WAL that was closed cleanly, replay the WAL.
    * [HBASE-16023] - Fastpath for the FIFO rpcscheduler
    * [HBASE-16034] - Fix ProcedureTestingUtility#LoadCounter.setMaxProcId()
    * [HBASE-16056] - Procedure v2 - fix master crash for FileNotFound
    * [HBASE-16068] - Procedure v2 - use consts for conf properties in test
    * [HBASE-16101] - Procedure v2 - Perf Tool for WAL
    * [HBASE-16146] - Counters are expensive...
    * [HBASE-16176] - Bug fixes/improvements on HBASE-15650 Remove TimeRangeTracker as point of contention when many threads reading a StoreFile
    * [HBASE-16180] - Fix ST_WRITE_TO_STATIC_FROM_INSTANCE_METHOD findbugs introduced by parent
    * [HBASE-16189] - [Rolling Upgrade] 2.0 hfiles cannot be opened by 1.x servers
    * [HBASE-16194] - Should count in MSLAB chunk allocation into heap size change when adding duplicate cells
    * [HBASE-16195] - Should not add chunk into chunkQueue if not using chunk pool in HeapMemStoreLAB
    * [HBASE-16285] - Drop RPC requests if it must be considered as timeout at client
    * [HBASE-16317] - revert all ESAPI changes
    * [HBASE-16318] - fail build if license isn't in whitelist
    * [HBASE-16321] - Ensure findbugs jsr305 jar isn't present
    * [HBASE-16452] - Procedure v2 - Make ProcedureWALPrettyPrinter extend Tool
    * [HBASE-16485] - Procedure V2 - Add support to addChildProcedure() as last "step" in StateMachineProcedure
    * [HBASE-16522] - Procedure v2 - Cache system user and avoid IOException
    * [HBASE-16970] - Clarify misleading Scan.java comment about caching
    * [HBASE-17017] - Remove the current per-region latency histogram metrics
    * [HBASE-17149] - Procedure V2 - Fix nonce submission to avoid unnecessary calling coprocessor multiple times

** Bug
    * [HBASE-11625] - Reading datablock throws "Invalid HFile block magic" and can not switch to hdfs checksum
    * [HBASE-12865] - WALs may be deleted before they are replicated to peers
    * [HBASE-13082] - Coarsen StoreScanner locks to RegionScanner
    * [HBASE-13897] - OOM may occur when Import imports a row with too many KeyValues
    * [HBASE-14077] - Add package to hbase-protocol protobuf files.
    * [HBASE-14094] - Procedure.proto can't be compiled to C++
    * [HBASE-14143] - remove obsolete maven repositories
    * [HBASE-14162] - Fixing maven target for regenerating thrift classes fails against 0.9.2
    * [HBASE-14252] - RegionServers fail to start when setting hbase.ipc.server.callqueue.scan.ratio to 0
    * [HBASE-14256] - Flush task message may be confusing when region is recovered
    * [HBASE-14349] - pre-commit zombie finder is overly broad
    * [HBASE-14370] - Use separate thread for calling ZKPermissionWatcher#refreshNodes()
    * [HBASE-14411] - Fix unit test failures when using multiwal as default WAL provider
    * [HBASE-14485] - ConnectionImplementation leaks on construction failure
    * [HBASE-14497] - Reverse Scan threw StackOverflow caused by readPt checking
    * [HBASE-14525] - Append and increment operation throws NullPointerException on non-existing column families.
    * [HBASE-14536] - Balancer & SSH interfering with each other leading to unavailability
    * [HBASE-14604] - Improve MoveCostFunction in StochasticLoadBalancer
    * [HBASE-14644] - Region in transition metric is broken
    * [HBASE-14818] - user_permission does not list namespace permissions
    * [HBASE-14970] - Backport HBASE-13082 and its sub-jira to branch-1
    * [HBASE-14975] - Don't color the total RIT line yellow if it's zero
    * [HBASE-15000] - Fix javadoc warn in LoadIncrementalHFiles
    * [HBASE-15026] - The default value of "hbase.regions.slop" in hbase-default.xml is obsolete
    * [HBASE-15028] - Minor fix on RegionGroupingProvider
    * [HBASE-15030] - Deadlock in master TableNamespaceManager while running IntegrationTestDDLMasterFailover
    * [HBASE-15034] - IntegrationTestDDLMasterFailover does not clean created namespaces
    * [HBASE-15093] - Replication can report incorrect size of log queue for the global source when multiwal is enabled
    * [HBASE-15125] - HBaseFsck's adoptHdfsOrphan function creates region with wrong end key boundary
    * [HBASE-15128] - Disable region splits and merges switch in master
    * [HBASE-15132] - Master region merge RPC should authorize user request
    * [HBASE-15137] - CallTimeoutException and CallQueueTooBigException should trigger PFFE
    * [HBASE-15173] - Execute mergeRegions RPC call as the request user
    * [HBASE-15234] - ReplicationLogCleaner can abort due to transient ZK issues
    * [HBASE-15247] - InclusiveStopFilter does not respect reverse Filter property
    * [HBASE-15287] - mapreduce.RowCounter returns incorrect result with binary row key inputs
    * [HBASE-15290] - Hbase Rest CheckAndAPI should save other cells along with compared cell
    * [HBASE-15292] - Refined ZooKeeperWatcher to prevent ZooKeeper's callback while construction
    * [HBASE-15295] - MutateTableAccess.multiMutate() does not get high priority causing a deadlock
    * [HBASE-15297] - error message is wrong when a wrong namspace is specified in grant in hbase shell
    * [HBASE-15319] - clearJmxCache does not take effect actually
    * [HBASE-15322] - Operations using Unsafe path broken for platforms not having sun.misc.Unsafe
    * [HBASE-15323] - Hbase Rest CheckAndDeleteAPi should be able to delete more cells
    * [HBASE-15324] - Jitter may cause desiredMaxFileSize overflow in ConstantSizeRegionSplitPolicy and trigger unexpected split
    * [HBASE-15325] - ResultScanner allowing partial result will miss the rest of the row if the region is moved between two rpc requests
    * [HBASE-15327] - Canary will always invoke admin.balancer() in each sniffing period when writeSniffing is enabled
    * [HBASE-15348] - Fix tests broken by recent metrics re-work
    * [HBASE-15357] - TableInputFormatBase getSplitKey does not handle signed bytes correctly
    * [HBASE-15358] - canEnforceTimeLimitFromScope should use timeScope instead of sizeScope
    * [HBASE-15360] - Fix flaky TestSimpleRpcScheduler
    * [HBASE-15378] - Scanner cannot handle heartbeat message with no results
    * [HBASE-15393] - Enable table replication command will fail when parent znode is not default in peer cluster
    * [HBASE-15397] - Create bulk load replication znode(hfile-refs) in ZK replication queue by default
    * [HBASE-15405] - Synchronize final results logging single thread in PE, fix wrong defaults in help message
    * [HBASE-15406] - Split / merge switch left disabled after early termination of hbck
    * [HBASE-15424] - Add bulk load hfile-refs for replication in ZK after the event is appended in the WAL
    * [HBASE-15425] - Failing to write bulk load event marker in the WAL is ignored
    * [HBASE-15430] - Failed taking snapshot - Manifest proto-message too large
    * [HBASE-15433] - SnapshotManager#restoreSnapshot not update table and region count quota correctly when encountering exception
    * [HBASE-15439] - getMaximumAllowedTimeBetweenRuns in ScheduledChore ignores the TimeUnit
    * [HBASE-15441] - Fix WAL splitting when region has moved multiple times
    * [HBASE-15463] - Region normalizer should check whether split/merge is enabled
    * [HBASE-15465] - userPermission returned by getUserPermission() for the selected namespace does not have namespace set
    * [HBASE-15485] - Filter.reset() should not be called between batches
    * [HBASE-15490] - Remove duplicated CompactionThroughputControllerFactory in branch-1
    * [HBASE-15504] - Fix Balancer in 1.3 not moving regions off overloaded regionserver
    * [HBASE-15515] - Improve LocalityBasedCandidateGenerator in Balancer
    * [HBASE-15520] - Fix broken TestAsyncIPC
    * [HBASE-15559] - BaseMasterAndRegionObserver doesn't implement all the methods
    * [HBASE-15563] - 'counter' may overflow in BoundedGroupingStrategy
    * [HBASE-15574] - Minor typo on HRegionServerCommandLine.java
    * [HBASE-15578] - Handle HBASE-15234 for ReplicationHFileCleaner
    * [HBASE-15582] - SnapshotManifestV1 too verbose when there are no regions
    * [HBASE-15587] - FSTableDescriptors.getDescriptor() logs stack trace erronously
    * [HBASE-15591] - ServerCrashProcedure not yielding
    * [HBASE-15593] - Time limit of scanning should be offered by client
    * [HBASE-15613] - TestNamespaceCommand times out
    * [HBASE-15615] - Wrong sleep time when RegionServerCallable need retry
    * [HBASE-15617] - Canary in regionserver mode might not enumerate all regionservers
    * [HBASE-15621] - Suppress Hbase SnapshotHFile cleaner error  messages when a snaphot is going on
    * [HBASE-15622] - Superusers does not consider the keytab credentials
    * [HBASE-15627] -  Miss space and closing quote in AccessController#checkSystemOrSuperUser
    * [HBASE-15634] - TestDateTieredCompactionPolicy#negativeForMajor is flaky
    * [HBASE-15636] - hard coded wait time out value in HBaseTestingUtility#waitUntilAllRegionsAssigned might cause test failure
    * [HBASE-15637] - TSHA Thrift-2 server should allow limiting call queue size
    * [HBASE-15639] - Unguarded access to stackIndexes in Procedure#toStringDetails()
    * [HBASE-15645] - hbase.rpc.timeout is not used in operations of HTable
    * [HBASE-15650] - Remove TimeRangeTracker as point of contention when many threads reading a StoreFile
    * [HBASE-15664] - Use Long.MAX_VALUE instead of HConstants.FOREVER in CompactionPolicy
    * [HBASE-15668] - HFileReplicator$Copier fails to replicate other hfiles in the request when a hfile in not found in FS anywhere
    * [HBASE-15669] - HFile size is not considered correctly in a replication request
    * [HBASE-15670] - Add missing Snapshot.proto to the maven profile for compiling protobuf
    * [HBASE-15672] - hadoop.hbase.security.visibility.TestVisibilityLabelsWithDeletes fails
    * [HBASE-15673] - [PE tool] Fix latency metrics for multiGet
    * [HBASE-15674] - HRegionLocator#getAllRegionLocations should put the results in cache
    * [HBASE-15676] - FuzzyRowFilter fails and matches all the rows in the table if the mask consists of all 0s
    * [HBASE-15693] - Reconsider the ImportOrder rule of checkstyle
    * [HBASE-15697] - Excessive TestHRegion running time on branch-1
    * [HBASE-15698] - Increment TimeRange not serialized to server
    * [HBASE-15703] - Deadline scheduler needs to return to the client info about skipped calls, not just drop them
    * [HBASE-15707] - ImportTSV bulk output does not support tags with hfile.format.version=3
    * [HBASE-15710] - Include issue servers information in RetriesExhaustedWithDetailsException message
    * [HBASE-15714] - We are calling checkRow() twice in doMiniBatchMutation()
    * [HBASE-15738] - Ensure artifacts in project dist area include required md5 file
    * [HBASE-15741] - Provide backward compatibility for HBase coprocessor service names
    * [HBASE-15742] - Reduce allocation of objects in metrics
    * [HBASE-15746] - Remove extra RegionCoprocessor preClose() in RSRpcServices#closeRegion
    * [HBASE-15752] - ClassNotFoundException is encountered when custom WAL codec is not found in WALPlayer job
    * [HBASE-15755] - SnapshotDescriptionUtils and SnapshotTestingUtils do not have any Interface audience marked
    * [HBASE-15775] - Canary launches two AuthUtil Chores
    * [HBASE-15801] - Upgrade checkstyle for all branches
    * [HBASE-15811] - Batch Get after batch Put does not fetch all Cells
    * [HBASE-15824] - LocalHBaseCluster gets bind exception in master info port
    * [HBASE-15840] - WAL.proto compilation broken for cpp
    * [HBASE-15841] - Performance Evaluation tool total rows may not be set correctly
    * [HBASE-15850] - Localize the configuration change in testCheckTableLocks to reduce flakiness of TestHBaseFsck test suite
    * [HBASE-15856] - Cached Connection instances can wind up with addresses never resolved
    * [HBASE-15873] - ACL for snapshot restore / clone is not enforced
    * [HBASE-15876] - Remove doBulkLoad(Path hfofDir, final HTable table) though it has not been through a full deprecation cycle
    * [HBASE-15880] - RpcClientImpl#tracedWriteRequest incorrectly closes HTrace span
    * [HBASE-15884] - NPE in StoreFileScanner#skipKVsNewerThanReadpoint during reverse scan
    * [HBASE-15908] - Checksum verification is broken due to incorrect passing of ByteBuffers in DataChecksum
    * [HBASE-15913] - Sasl encryption doesn't work with AsyncRpcChannel
    * [HBASE-15920] - Backport submit-patch.py to branch-1 and earlier branches.
    * [HBASE-15925] - compat-module maven variable not evaluated
    * [HBASE-15946] - Eliminate possible security concerns in RS web UI's store file metrics
    * [HBASE-15952] - Bulk load data replication is not working when RS user does not have permission on hfile-refs node
    * [HBASE-15954] - REST server should log requests with TRACE instead of DEBUG
    * [HBASE-15955] - Disable action in CatalogJanitor#setEnabled should wait for active cleanup scan to finish
    * [HBASE-15957] - RpcClientImpl.close never ends in some circumstances
    * [HBASE-15975] - logic in TestHTableDescriptor#testAddCoprocessorWithSpecStr is wrong
    * [HBASE-15976] - RegionServerMetricsWrapperRunnable will be failure  when disable blockcache.
    * [HBASE-16007] - Job's Configuration should be passed to TableMapReduceUtil#addDependencyJars() in WALPlayer
    * [HBASE-16012] - Major compaction can't work due to obsolete scanner read point in RegionServer
    * [HBASE-16016] - AssignmentManager#waitForAssignment could have unexpected negative deadline
    * [HBASE-16017] - HBase TableOutputFormat has connection leak in getRecordWriter
    * [HBASE-16024] - Revert HBASE-15406 from branch-1.3
    * [HBASE-16032] - Possible memory leak in StoreScanner
    * [HBASE-16033] - Add more details in logging of responseTooSlow/TooLarge
    * [HBASE-16047] - TestFastFail is broken again
    * [HBASE-16061] - Allow logging to a buffered console
    * [HBASE-16062] - Improper error handling in WAL Reader/Writer creation
    * [HBASE-16074] - ITBLL fails, reports lost big or tiny families
    * [HBASE-16081] - Replication remove_peer gets stuck and blocks WAL rolling
    * [HBASE-16093] - Splits failed before creating daughter regions leave meta inconsistent
    * [HBASE-16095] - Add priority to TableDescriptor and priority region open thread pool
    * [HBASE-16096] - Replication keeps accumulating znodes
    * [HBASE-16129] - check_compatibility.sh is broken when using Java API Compliance Checker v1.7
    * [HBASE-16132] - Scan does not return all the result when regionserver is busy
    * [HBASE-16135] - PeerClusterZnode under rs of removed peer may never be deleted
    * [HBASE-16144] - Replication queue's lock will live forever if RS acquiring the lock has died prematurely
    * [HBASE-16150] - Remove ConcurrentIndex
    * [HBASE-16160] - Get the UnsupportedOperationException when using delegation token with encryption
    * [HBASE-16165] - Decrease RpcServer.callQueueSize before writeResponse causes OOM
    * [HBASE-16177] - In dev mode thrift server can't be run
    * [HBASE-16190] - IntegrationTestDDLMasterFailover failed with IllegalArgumentException: n must be positive
    * [HBASE-16201] - NPE in RpcServer causing intermittent UT failure of TestMasterReplication#testHFileCyclicReplication
    * [HBASE-16207] - can't restore snapshot without "Admin" permission
    * [HBASE-16211] - JMXCacheBuster restarting the metrics system might cause tests to hang
    * [HBASE-16221] - Thrift server drops connection on long scans
    * [HBASE-16227] - [Shell] Column value formatter not working in scans
    * [HBASE-16237] - Blocks for hbase:meta table are not cached in L1 cache
    * [HBASE-16238] - It's useless to catch SESSIONEXPIRED exception and retry in RecoverableZooKeeper
    * [HBASE-16270] - Handle duplicate clearing of snapshot in region replicas
    * [HBASE-16271] - Fix logging and re-run the test in IntegrationTestBulkLoad
    * [HBASE-16272] - Overflow in ServerName's compareTo method
    * [HBASE-16281] - TestMasterReplication is flaky
    * [HBASE-16284] - Unauthorized client can shutdown the cluster
    * [HBASE-16288] - HFile intermediate block level indexes might recurse forever creating multi TB files
    * [HBASE-16289] - AsyncProcess stuck messages need to print region/server
    * [HBASE-16294] - hbck reporting "No HDFS region dir found" for replicas
    * [HBASE-16296] - Reverse scan performance degrades when using filter lists
    * [HBASE-16300] - LruBlockCache.CACHE_FIXED_OVERHEAD should calculate LruBlockCache size correctly
    * [HBASE-16301] - Trigger flush without waiting when compaction is disabled on a table
    * [HBASE-16303] - FilterList with MUST_PASS_ONE optimization
    * [HBASE-16304] - HRegion#RegionScannerImpl#handleFileNotFoundException may lead to deadlock when trying to obtain write lock on updatesLock
    * [HBASE-16315] - RegionSizeCalculator prints region names as binary without escapes
    * [HBASE-16319] - Fix TestCacheOnWrite after HBASE-16288
    * [HBASE-16341] - Missing bit on "Regression: Random Read/WorkloadC slower in 1.x than 0.98"
    * [HBASE-16350] - Undo server abort from HBASE-14968
    * [HBASE-16355] - hbase-client dependency on hbase-common test-jar should be test scope
    * [HBASE-16360] - TableMapReduceUtil addHBaseDependencyJars has the wrong class name for PrefixTreeCodec
    * [HBASE-16363] - Correct javadoc for qualifier length and value length in Cell interface
    * [HBASE-16368] - test*WhenRegionMove in TestPartialResultsFromClientSide is flaky
    * [HBASE-16373] - precommit needs a dockerfile with hbase prereqs
    * [HBASE-16375] - Mapreduce mini cluster using HBaseTestingUtility not setting correct resourcemanager and jobhistory webapp address of MapReduceTestingShim
    * [HBASE-16429] - FSHLog: deadlock if rollWriter called when ring buffer filled with appends
    * [HBASE-16460] - Can't rebuild the BucketAllocator's data structures when BucketCache uses FileIOEngine
    * [HBASE-16464] - archive folder grows bigger and bigger due to corrupt snapshot under tmp dir
    * [HBASE-16471] - Region Server metrics context will be wrong when machine hostname contain "master" word
    * [HBASE-16527] - IOExceptions from DFS client still can cause CatalogJanitor to delete referenced files
    * [HBASE-16528] - Procedure-V2: ServerCrashProcedure misses owner information
    * [HBASE-16535] - Use regex to exclude generated classes for findbugs
    * [HBASE-16547] - hbase-archetype-builder shell scripts assume bash is installed in /bin
    * [HBASE-16552] - MiniHBaseCluster#getServerWith() does not ignore stopped RSs
    * [HBASE-16589] - Adjust log level for FATAL messages from HBaseReplicationEndpoint that are not fatal
    * [HBASE-16604] - Scanner retries on IOException can cause the scans to miss data
    * [HBASE-16613] - Return the unused ByteBuffer to BoundedByteBufferPool when no cell is retrieved from the CellScanner
    * [HBASE-16644] - Errors when reading legit HFile Trailer of old (v2.0) format file
    * [HBASE-16649] - Truncate table with splits preserved can cause both data loss and truncated data appeared again
    * [HBASE-16660] - ArrayIndexOutOfBounds during the majorCompactionCheck in DateTieredCompaction
    * [HBASE-16662] - Fix open POODLE vulnerabilities
    * [HBASE-16663] - JMX ConnectorServer stopped when unauthorized user try to stop HM/RS/cluster
    * [HBASE-16664] - Timeout logic in AsyncProcess is broken
    * [HBASE-16678] - MapReduce jobs do not update counters from ScanMetrics
    * [HBASE-16679] - Flush throughput controller: Minor perf change and fix flaky TestFlushWithThroughputController
    * [HBASE-16681] - Fix flaky TestReplicationSourceManagerZkImpl
    * [HBASE-16682] - Fix Shell tests failure. NoClassDefFoundError for MiniKdc
    * [HBASE-16699] - Overflows in AverageIntervalRateLimiter's refill() and getWaitInterval()
    * [HBASE-16701] - TestHRegion and TestHRegionWithInMemoryFlush timing out
    * [HBASE-16721] - Concurrency issue in WAL unflushed seqId tracking
    * [HBASE-16723] - RMI registry is not destroyed after stopping JMX Connector Server
    * [HBASE-16732] - Avoid possible NPE in MetaTableLocator
    * [HBASE-16743] - TestSimpleRpcScheduler#testCoDelScheduling is broke
    * [HBASE-16752] - Upgrading from 1.2 to 1.3 can lead to replication failures due to difference in RPC size limit
    * [HBASE-16754] - Regions failing compaction due to referencing non-existent store file
    * [HBASE-16765] - New SteppingRegionSplitPolicy, avoid too aggressive spread of regions for small tables.
    * [HBASE-16788] - Race in compacted file deletion between HStore close() and closeAndArchiveCompactedFiles()
    * [HBASE-16807] - RegionServer will fail to report new active Hmaster until HMaster/RegionServer failover
    * [HBASE-16810] - HBase Balancer throws ArrayIndexOutOfBoundsException when regionservers are in /hbase/draining znode and unloaded
    * [HBASE-16824] - Writer.flush() can be called on already closed streams in WAL roll
    * [HBASE-16830] - RSRpcServices#openRegion() should handle the case where table descriptor is null
    * [HBASE-16852] - TestDefaultCompactSelection failed on branch-1.3
    * [HBASE-16853] - Regions are assigned to Region Servers in /hbase/draining after HBase Master failover
    * [HBASE-16889] - Proc-V2: verifyTables in the IntegrationTestDDLMasterFailover test after each table DDL is incorrect
    * [HBASE-16931] - Setting cell's seqId to zero in compaction flow might cause RS down.
    * [HBASE-16960] - RegionServer hang when aborting
    * [HBASE-16964] - Successfully archived files are not cleared from compacted store file list if archiving of any file fails
    * [HBASE-16980] - TestRowProcessorEndpoint failing consistently
    * [HBASE-17023] - Region left unassigned due to AM and SSH each thinking others would do the assignment work
    * [HBASE-17032] - CallQueueTooBigException and CallDroppedException should not be triggering PFFE
    * [HBASE-17042] - Remove 'public' keyword from MasterObserver interface
    * [HBASE-17044] - Fix merge failed before creating merged region leaves meta inconsistent
    * [HBASE-17058] - Lower epsilon used for jitter verification from HBASE-15324
    * [HBASE-17074] - PreCommit job always fails because of OOM
    * [HBASE-17091] - IntegrationTestZKAndFSPermissions failed with 'KeeperException'
    * [HBASE-17224] - Fix lots of spelling errors in HBase logging and exception messages
    * [HBASE-17238] - Wrong in-memory hbase:meta location causing SSH failure
    * [HBASE-17328] - Properly dispose of looped replication peers
    * [HBASE-17341] - Add a timeout during replication endpoint termination

** Improvement
    * [HBASE-7972] - Add a configuration for the TCP backlog in the Thrift server
    * [HBASE-8386] - deprecate TableMapReduce.addDependencyJars(Configuration, class<?> ...)
    * [HBASE-8642] - [Snapshot] List and delete snapshot by table
    * [HBASE-9899] - for idempotent operation dups, return the result instead of throwing conflict exception
    * [HBASE-12596] - bulkload needs to follow locality
    * [HBASE-12769] - Replication fails to delete all corresponding zk nodes when peer is removed
    * [HBASE-12940] - Expose listPeerConfigs and getPeerConfig to the HBase shell
    * [HBASE-13158] - When client supports CellBlock, return the result Cells as controller payload for get(Get) API also
    * [HBASE-13347] - Deprecate FirstKeyValueMatchingQualifiersFilter
    * [HBASE-13532] - Make UnknownScannerException logging less scary
    * [HBASE-13965] - Stochastic Load Balancer JMX Metrics
    * [HBASE-14045] - Bumping thrift version to 0.9.2.
    * [HBASE-14058] - Stabilizing default heap memory tuner
    * [HBASE-14078] - improve error message when HMaster can't bind to port
    * [HBASE-14164] - Display primary region replicas distribution on table.jsp
    * [HBASE-14165] - The initial size of RWQueueRpcExecutor.queues should be (numWriteQueues + numReadQueues + numScanQueues)
    * [HBASE-14306] - Refine RegionGroupingProvider: fix issues and make it more scalable
    * [HBASE-14309] - Allow load balancer to operate when there is region in transition by adding force flag
    * [HBASE-14345] - Consolidate printUsage in IntegrationTestLoadAndVerify
    * [HBASE-14397] - PrefixFilter doesn't filter all remaining rows if the prefix is longer than rowkey being compared
    * [HBASE-14448] - Refine RegionGroupingProvider Phase-2: remove provider nesting and formalize wal group name
    * [HBASE-14565] - Make ZK connection timeout configurable in MiniZooKeeperCluster
    * [HBASE-14703] - HTable.mutateRow does not collect stats
    * [HBASE-14719] - Add metric for number of MasterProcWALs
    * [HBASE-14800] - Expose checkAndMutate via Thrift2
    * [HBASE-14963] - Remove use of Guava Stopwatch from HBase client code
    * [HBASE-14969] - Add throughput controller for flush
    * [HBASE-14983] - Create metrics for per block type hit/miss ratios
    * [HBASE-15066] - Small improvements to Canary tool
    * [HBASE-15068] - Add metrics for region normalization plans
    * [HBASE-15119] - Include git SHA in check_compatibility reports
    * [HBASE-15123] - Remove duplicate code in LocalHBaseCluster and minor formatting
    * [HBASE-15177] - Reduce garbage created under high load
    * [HBASE-15212] - RRCServer should enforce max request size
    * [HBASE-15222] - Use less contended classes for metrics
    * [HBASE-15223] - Make convertScanToString public for Spark
    * [HBASE-15306] - Make RPC call queue length dynamically configurable
    * [HBASE-15315] - Remove always set super user call as high priority
    * [HBASE-15353] - Add metric for number of CallQueueTooBigException's
    * [HBASE-15396] - Enhance mapreduce.TableSplit to add encoded region name
    * [HBASE-15413] - Procedure-V2: print out ProcedureInfo during trace
    * [HBASE-15415] - Improve Master WebUI snapshot information
    * [HBASE-15456] - CreateTableProcedure/ModifyTableProcedure needs to fail when there is no family in table descriptor
    * [HBASE-15470] - Add a setting for Priority queue length
    * [HBASE-15471] - Add num calls in priority and general queue to RS UI
    * [HBASE-15475] - Allow TimestampsFilter to provide a seek hint
    * [HBASE-15478] - add comments to FSHLog explaining why syncRunnerIndex won't overflow
    * [HBASE-15508] - Add command for exporting snapshot in hbase command script
    * [HBASE-15526] - Make SnapshotManager accessible through MasterServices
    * [HBASE-15551] - Make call queue too big exception use servername
    * [HBASE-15569] - Make Bytes.toStringBinary faster
    * [HBASE-15586] - Unify human readable numbers in the web UI
    * [HBASE-15600] - Add provision for adding mutations to memstore or able to write to same region in batchMutate coprocessor hooks
    * [HBASE-15605] - Remove PB references from HCD and HTD for 2.0
    * [HBASE-15607] - Remove PB references from Admin for 2.0
    * [HBASE-15608] - Remove PB references from SnapShot related Exceptions
    * [HBASE-15609] - Remove PB references from Result, DoubleColumnInterpreter and any such public facing class for 2.0
    * [HBASE-15632] - Undo the checking of lastStoreFlushTimeMap.isEmpty() introduced in HBASE-13145
    * [HBASE-15641] - Shell "alter" should do a single modifyTable operation
    * [HBASE-15720] - Print row locks at the debug dump page
    * [HBASE-15773] - CellCounter improvements
    * [HBASE-15791] - Improve javadoc in ScheduledChore
    * [HBASE-15808] - Reduce potential bulk load intermediate space usage and waste
    * [HBASE-15837] - Memstore size accounting is wrong if postBatchMutate() throws exception
    * [HBASE-15854] - Log the cause of SASL connection failures
    * [HBASE-15864] - Reuse the testing helper to wait regions in transition
    * [HBASE-15870] - Specify columns in REST multi gets
    * [HBASE-15890] - Allow thrift to set/unset "cacheBlocks" for Scans
    * [HBASE-15931] - Add log for long-running tasks in AsyncProcess
    * [HBASE-16026] - Master UI should display status of additional ZK switches
    * [HBASE-16048] - Tag InternalScanner with LimitedPrivate(HBaseInterfaceAudience.COPROC)
    * [HBASE-16085] - Add on metric for failed compactions
    * [HBASE-16086] - TableCfWALEntryFilter and ScopeWALEntryFilter should not redundantly iterate over cells.
    * [HBASE-16087] - Replication shouldn't start on a master if if only hosts system tables
    * [HBASE-16089] - Add on FastPath for CoDel
    * [HBASE-16124] - Make check_compatibility.sh less verbose when building HBase
    * [HBASE-16140] - bump owasp.esapi from 2.1.0 to 2.1.0.1
    * [HBASE-16149] - Log the underlying RPC exception in RpcRetryingCallerImpl
    * [HBASE-16231] - Integration tests should support client keytab login for secure clusters
    * [HBASE-16241] - Allow specification of annotations to use when running check_compatibility.sh
    * [HBASE-16256] - Purpose of EnvironmentEdge, EnvironmentEdgeManager
    * [HBASE-16266] - Do not throw ScannerTimeoutException when catch UnknownScannerException
    * [HBASE-16287] - LruBlockCache size should not exceed acceptableSize too many
    * [HBASE-16379] - [replication] Minor improvement to replication/copy_tables_desc.rb
    * [HBASE-16385] - Have hbase-rest pull hbase.rest.port from Constants.java
    * [HBASE-16450] - Shell tool to dump replication queues
    * [HBASE-16486] - Unify system table creation using the same createSystemTable API.
    * [HBASE-16657] - Expose per-region last major compaction timestamp in RegionServer UI
    * [HBASE-16661] - Add last major compaction age to per-region metrics
    * [HBASE-16667] - Building with JDK 8: ignoring option MaxPermSize=256m
    * [HBASE-16972] - Log more details for Scan#next request when responseTooSlow
    * [HBASE-17006] - Add names to threads for better debugability of thread dumps
    * [HBASE-17004] - Refactor IntegrationTestManyRegions to use @ClassRule for timing out

** New Feature
    * [HBASE-10358] - Shell changes for setting consistency per request
    * [HBASE-11262] - Avoid empty columns while doing bulk-load
    * [HBASE-12133] - Add FastLongHistogram for metric computation
    * [HBASE-13153] - Bulk Loaded HFile Replication
    * [HBASE-13702] - ImportTsv: Add dry-run functionality and log bad rows
    * [HBASE-14456] - Implement a namespace-based region grouping strategy for RegionGroupingProvider
    * [HBASE-15135] - Add metrics for storefile age
    * [HBASE-15136] - Explore different queuing behaviors while busy
    * [HBASE-15181] - A simple implementation of date based tiered compaction
    * [HBASE-15281] - Allow the FileSystem inside HFileSystem to be wrapped
    * [HBASE-15481] - Add pre/post roll to WALObserver
    * [HBASE-15592] - Print Procedure WAL content
    * [HBASE-15780] - Expose AuthUtil as IA.Public
    * [HBASE-15881] - Allow BZIP2 compression

** Task
    * [HBASE-14057] - HBase shell user_permission should list super users defined on hbase-site.xml
    * [HBASE-15729] - Remove old JDiff wrapper scripts in dev-support
    * [HBASE-15888] - Extend HBASE-12769 for bulk load data replication
    * [HBASE-15895] - remove unmaintained jenkins build analysis tool.
    * [HBASE-16073] - update compatibility_checker for jacc dropping comma sep args
    * [HBASE-16154] - bring non-master branches up to date wrt check_compatibility script
    * [HBASE-16260] - Audit dependencies for Category-X
    * [HBASE-16340] - ensure no Xerces jars included
    * [HBASE-16376] - Document implicit side-effects on partial results when calling Scan#setBatch(int)
    * [HBASE-16467] - Move AbstractHBaseTool to hbase-common
    * [HBASE-16518] - Remove old .arcconfig file

** Test
    * [HBASE-13372] - Unit tests for SplitTransaction and RegionMergeTransaction listeners
    * [HBASE-14293] - TestStochasticBalancerJmxMetrics intermittently fails due to port conflict
    * [HBASE-15679] - Assertion on wrong variable in TestReplicationThrottler#testThrottling
    * [HBASE-15923] - Shell rows counter test fails
    * [HBASE-16049] - TestRowProcessorEndpoint is failing on Apache Builds
    * [HBASE-16051] - TestScannerHeartbeatMessages fails on some machines

** Umbrella
    * [HBASE-14457] - Umbrella: Improve Multiple WAL for production usage

Release Notes - HBase - Version 1.2.0 02/22/2016

** Sub-task
    * [HBASE-12748] - RegionCoprocessorHost.execOperation creates too many iterator objects
    * [HBASE-13393] - Optimize memstore flushing to avoid writing tag information to hfiles when no tags are present.
    * [HBASE-13415] - Procedure V2 - Use nonces for double submits from client
    * [HBASE-13470] - High level Integration test for master DDL operations
    * [HBASE-13476] - Procedure V2 - Add Replay Order logic for child procedures
    * [HBASE-13497] - Remove MVCC stamps from HFile when that is safe
    * [HBASE-13536] - Cleanup the handlers that are no longer being used.
    * [HBASE-13563] - Add missing table owner to AC tests.
    * [HBASE-13569] - correct errors reported with mvn site
    * [HBASE-13579] - Avoid isCellTTLExpired() for NO-TAG cases
    * [HBASE-13593] - Quota support for namespace should take snapshot restore and clone into account
    * [HBASE-13616] - Move ServerShutdownHandler to Pv2
    * [HBASE-13658] - Improve the test run time for TestAccessController class
    * [HBASE-13748] - ensure post-commit builds for branch-1 include both java 7 and java 8
    * [HBASE-13750] - set up jenkins builds that run branch-1 ITs with java 8
    * [HBASE-13759] - Improve procedure yielding
    * [HBASE-13832] - Procedure V2: master fail to start due to WALProcedureStore sync failures when HDFS data nodes count is low
    * [HBASE-13898] - correct additional javadoc failures under java 8
    * [HBASE-13899] - Jacoco instrumentation fails under jdk8
    * [HBASE-13912] - add branch-1.2 post-commit builds
    * [HBASE-13920] - Exclude Java files generated from protobuf from javadoc
    * [HBASE-13937] - Partially revert HBASE-13172
    * [HBASE-13950] - Add a NoopProcedureStore for testing
    * [HBASE-13963] - avoid leaking jdk.tools
    * [HBASE-13967] - add jdk profiles for jdk.tools dependency
    * [HBASE-13973] - Update documentation for 10070 Phase 2 changes
    * [HBASE-13983] - Doc how the oddball HTable methods getStartKey, getEndKey, etc. will be removed in 2.0.0
    * [HBASE-13990] - clean up remaining errors for maven site goal
    * [HBASE-13993] - WALProcedureStore fencing is not effective if new WAL rolls
    * [HBASE-14003] - work around jdk8 spec bug in WALPerfEval
    * [HBASE-14013] - Retry when RegionServerNotYetRunningException rather than go ahead with assign so for sure we don't skip WAL replay
    * [HBASE-14017] - Procedure v2 - MasterProcedureQueue fix concurrency issue on table queue deletion
    * [HBASE-14025] - Update CHANGES.txt for 1.2
    * [HBASE-14086] - remove unused bundled dependencies
    * [HBASE-14087] - ensure correct ASF policy compliant headers on source/docs
    * [HBASE-14104] - Add vectorportal.com to NOTICES.txt as src of our logo
    * [HBASE-14105] - Add shell tests for Snapshot
    * [HBASE-14107] - Procedure V2 - Administrative Task: Provide an API to List all procedures
    * [HBASE-14108] - Procedure V2 - Administrative Task: provide an API to abort a procedure
    * [HBASE-14147] - REST Support for Namespaces
    * [HBASE-14176] - Add missing headers to META-INF files
    * [HBASE-14221] - Reduce the number of time row comparison is done in a Scan
    * [HBASE-14239] - Branch-1.2 AM can get stuck when meta moves
    * [HBASE-14274] - Deadlock in region metrics on shutdown: MetricsRegionSourceImpl vs MetricsRegionAggregateSourceImpl
    * [HBASE-14278] - Fix NPE that is showing up since HBASE-14274 went in
    * [HBASE-14322] - Master still not using more than it's priority threads
    * [HBASE-14378] - Get TestAccessController* passing again on branch-1
    * [HBASE-14401] - Stamp failed appends with sequenceid too.... Cleans up latches
    * [HBASE-14421] - TestFastFail* are flakey
    * [HBASE-14428] - Upgrade our surefire-plugin from 2.18 to 2.18.1
    * [HBASE-14430] - TestHttpServerLifecycle#testStartedServerIsAlive times out
    * [HBASE-14432] - Procedure V2 - enforce ACL on procedure admin tasks
    * [HBASE-14433] - Set down the client executor core thread count from 256 in tests
    * [HBASE-14435] - thrift tests don't have test-specific hbase-site.xml so 'BindException: Address already in use' because info port is not turned off
    * [HBASE-14447] - Spark tests failing: bind exception when putting up info server
    * [HBASE-14465] - Backport 'Allow rowlock to be reader/write' to branch-1
    * [HBASE-14472] - TestHCM and TestRegionServerNoMaster fixes
    * [HBASE-14484] - Follow-on from HBASE-14421, just disable TestFastFail* until someone digs in and fixes it
    * [HBASE-14487] - Procedure V2 - shell command to list all procedures
    * [HBASE-14488] - Procedure V2 - shell command to abort a procedure
    * [HBASE-14513] - TestBucketCache runs obnoxious 1k threads in a unit test
    * [HBASE-14519] - Purge TestFavoredNodeAssignmentHelper, a test for an abandoned feature that can hang
    * [HBASE-14535] - Integration test for rpc connection concurrency / deadlock testing
    * [HBASE-14539] - Slight improvement of StoreScanner.optimize
    * [HBASE-14559] - branch-1 test tweeks; disable assert explicit region lands post-restart and up a few handlers
    * [HBASE-14561] - Disable zombie TestReplicationShell
    * [HBASE-14563] - Disable zombie TestHFileOutputFormat2
    * [HBASE-14571] - Purge TestProcessBasedCluster; it does nothing and then fails
    * [HBASE-14572] - TestImportExport#testImport94Table can't find its src data file
    * [HBASE-14585] - Clean up TestSnapshotCloneIndependence
    * [HBASE-14596] - TestCellACLs failing... on1.2 builds
    * [HBASE-14600] - Make #testWalRollOnLowReplication looser still
    * [HBASE-14605] - Split fails due to 'No valid credentials' error when SecureBulkLoadEndpoint#start tries to access hdfs
    * [HBASE-14622] - Purge TestZkLess* tests from branch-1
    * [HBASE-14631] - Region merge request should be audited with request user through proper scope of doAs() calls to region observer notifications
    * [HBASE-14637] - Loosen TestChoreService assert AND have TestDataBlockEncoders do less work (and add timeouts)
    * [HBASE-14646] - Move TestCellACLs from medium to large category
    * [HBASE-14647] - Disable TestWALProcedureStoreOnHDFS#testWalRollOnLowReplication
    * [HBASE-14648] - Reenable TestWALProcedureStoreOnHDFS#testWalRollOnLowReplication
    * [HBASE-14655] - Narrow the scope of doAs() calls to region observer notifications for compaction
    * [HBASE-14656] - Move TestAssignmentManager from medium to large category
    * [HBASE-14657] - Remove unneeded API from EncodedSeeker
    * [HBASE-14698] - Set category timeouts on TestScanner and TestNamespaceAuditor
    * [HBASE-14702] - TestZKProcedureControllers.testZKCoordinatorControllerWithSingleMemberCohort is a flakey
    * [HBASE-14709] - Parent change breaks graceful_stop.sh on a cluster
    * [HBASE-14710] - Add category-based timeouts to MR tests
    * [HBASE-14720] - Make TestHCM and TestMetaWithReplicas large tests rather than mediums
    * [HBASE-14794] - Cleanup TestAtomicOperation, TestImportExport, and TestMetaWithReplicas
    * [HBASE-14798] - NPE reporting server load causes regionserver abort; causes TestAcidGuarantee to fail
    * [HBASE-14819] - hbase-it tests failing with OOME; permgen
    * [HBASE-14837] - Procedure V2 - Procedure Queue Improvement
    * [HBASE-14863] - Add missing test/resources/log4j files in hbase modules
    * [HBASE-14883] - TestSplitTransactionOnCluster#testFailedSplit flakey
    * [HBASE-14908] - TestRowCounter flakey especially on branch-1
    * [HBASE-14909] - NPE testing for RIT
    * [HBASE-14915] - Hanging test : org.apache.hadoop.hbase.mapreduce.TestImportExport
    * [HBASE-14947] - Procedure V2 - WALProcedureStore improvements
    * [HBASE-14962] - TestSplitWalDataLoss fails on all branches
    * [HBASE-15023] - Reenable TestShell and TestStochasticLoadBalancer
    * [HBASE-15087] - Fix hbase-common findbugs complaints
    * [HBASE-15091] - Forward-port to 1.2+ HBASE-15031 "Fix merge of MVCC and SequenceID performance regression in branch-1.0 for Increments"
    * [HBASE-15106] - Procedure V2 - Procedure Queue pass Procedure for better debuggability
    * [HBASE-15114] - NPE when IPC server ByteBuffer reservoir is turned off
    * [HBASE-15115] - Fix findbugs complaints in hbase-client
    * [HBASE-15118] - Fix findbugs complaint in hbase-server
    * [HBASE-15157] - Add *PerformanceTest for Append, CheckAnd*
    * [HBASE-15210] - Undo aggressive load balancer logging at tens of lines per millisecond
    * [HBASE-15224] - Undo  "hbase.increment.fast.but.narrow.consistency" option; it is not necessary since HBASE-15213
    * [HBASE-15238] - HFileReaderV2 prefetch overreaches; runs off the end of the data
    * [HBASE-15263] - TestIPv6NIOServerSocketChannel.testServerSocketFromLocalhostResolution can hang indefinetly
    * [HBASE-15270] - Use appropriate encoding for "filter" field in TaskMonitorTmpl.jamon

** Bug
    * [HBASE-5878] - Use getVisibleLength public api from HdfsDataInputStream from Hadoop-2.
    * [HBASE-10844] - Coprocessor failure during batchmutation leaves the memstore datastructs in an inconsistent state
    * [HBASE-11658] - Piped commands to hbase shell should return non-zero if shell command failed.
    * [HBASE-11830] - TestReplicationThrottler.testThrottling failed on virtual boxes
    * [HBASE-12413] - Mismatch in the equals and hashcode methods of KeyValue
    * [HBASE-12865] - WALs may be deleted before they are replicated to peers
    * [HBASE-13143] - TestCacheOnWrite is flaky and needs a diet
    * [HBASE-13200] - Improper configuration can leads to endless lease recovery during failover
    * [HBASE-13217] - Procedure fails due to ZK issue
    * [HBASE-13250] - chown of ExportSnapshot does not cover all path and files
    * [HBASE-13312] - SmallScannerCallable does not increment scan metrics
    * [HBASE-13318] - RpcServer.getListenerAddress should handle when the accept channel is closed
    * [HBASE-13324] - o.a.h.h.Coprocessor should be LimitedPrivate("Coprocessor")
    * [HBASE-13325] - Protocol Buffers 2.5 no longer available for download on code.google.com
    * [HBASE-13329] - ArrayIndexOutOfBoundsException in CellComparator#getMinimumMidpointArray
    * [HBASE-13330] - Region left unassigned due to AM & SSH each thinking the assignment would be done by the other
    * [HBASE-13333] - Renew Scanner Lease without advancing the RegionScanner
    * [HBASE-13337] - Table regions are not assigning back, after restarting all regionservers at once.
    * [HBASE-13352] - Add hbase.import.version to Import usage.
    * [HBASE-13377] - Canary may generate false alarm on the first region when there are many delete markers
    * [HBASE-13411] - Misleading error message when request size quota limit exceeds
    * [HBASE-13480] - ShortCircuitConnection doesn't short-circuit all calls as expected
    * [HBASE-13560] - Large compaction queue should steal from small compaction queue when idle
    * [HBASE-13561] - ITBLL.Verify doesn't actually evaluate counters after job completes
    * [HBASE-13564] - Master MBeans are not published
    * [HBASE-13576] - HBCK enhancement: Failure in checking one region should not fail the entire HBCK operation.
    * [HBASE-13600] - check_compatibility.sh should ignore shaded jars
    * [HBASE-13601] - Connection leak during log splitting
    * [HBASE-13604] - bin/hbase mapredcp does not include yammer-metrics jar
    * [HBASE-13606] - AssignmentManager.assign() is not sync in both path
    * [HBASE-13607] - TestSplitLogManager.testGetPreviousRecoveryMode consistently failing
    * [HBASE-13608] - 413 Error with Stargate through Knox, using AD, SPNEGO, and Pre-Auth
    * [HBASE-13611] - update clover to work for current versions
    * [HBASE-13612] - TestRegionFavoredNodes doesn't guard against setup failure
    * [HBASE-13617] - TestReplicaWithCluster.testChangeTable timeout
    * [HBASE-13618] - ReplicationSource is too eager to remove sinks
    * [HBASE-13625] - Use HDFS for HFileOutputFormat2 partitioner's path
    * [HBASE-13626] - ZKTableStateManager logs table state changes at WARN
    * [HBASE-13632] - Backport HBASE-13368 to branch-1 and 0.98
    * [HBASE-13635] - Regions stuck in transition because master is incorrectly assumed dead
    * [HBASE-13638] - Put copy constructor is shallow
    * [HBASE-13646] - HRegion#execService should not try to build incomplete messages
    * [HBASE-13647] - Default value for hbase.client.operation.timeout is too high
    * [HBASE-13649] - CellComparator.compareTimestamps javadoc inconsistent and wrong
    * [HBASE-13651] - Handle StoreFileScanner FileNotFoundException
    * [HBASE-13653] - Uninitialized HRegionServer#walFactory may result in NullPointerException at region server startup​
    * [HBASE-13662] - RSRpcService.scan() throws an OutOfOrderScannerNext if the scan has a retriable failure
    * [HBASE-13663] - HMaster fails to restart 'HMaster: Failed to become active master'
    * [HBASE-13664] - Use HBase 1.0 interfaces in ConnectionCache
    * [HBASE-13668] - TestFlushRegionEntry is flaky
    * [HBASE-13686] - Fail to limit rate in RateLimiter
    * [HBASE-13694] - CallQueueSize is incorrectly decremented until the response is sent
    * [HBASE-13700] - Allow Thrift2 HSHA server to have configurable threads
    * [HBASE-13703] - ReplicateContext should not be a member of ReplicationSource
    * [HBASE-13704] - Hbase throws OutOfOrderScannerNextException when MultiRowRangeFilter is used
    * [HBASE-13706] - CoprocessorClassLoader should not exempt Hive classes
    * [HBASE-13709] - Updates to meta table server columns may be eclipsed
    * [HBASE-13711] - Provide an API to set min and max versions in HColumnDescriptor
    * [HBASE-13712] - Backport HBASE-13199 to branch-1
    * [HBASE-13717] - TestBoundedRegionGroupingProvider#setMembershipDedups need to set HDFS diretory for WAL
    * [HBASE-13721] - Improve shell scan performances when using LIMIT
    * [HBASE-13723] - In table.rb scanners are never closed.
    * [HBASE-13727] - Codehaus repository is out of service
    * [HBASE-13729] - Old hbase.regionserver.global.memstore.upperLimit and lowerLimit properties are ignored if present
    * [HBASE-13731] - TestReplicationAdmin should clean up MiniZKCluster resource
    * [HBASE-13732] - TestHBaseFsck#testParallelWithRetriesHbck fails intermittently
    * [HBASE-13733] - Failed MiniZooKeeperCluster startup did not shutdown ZK servers
    * [HBASE-13734] - Improper timestamp checking with VisibilityScanDeleteTracker
    * [HBASE-13741] - Disable TestRegionObserverInterface#testRecovery and testLegacyRecovery
    * [HBASE-13744] - TestCorruptedRegionStoreFile is flaky
    * [HBASE-13746] - list_replicated_tables command is not listing table in hbase shell.
    * [HBASE-13767] - Allow ZKAclReset to set and not just clear ZK ACLs
    * [HBASE-13768] - ZooKeeper znodes are bootstrapped with insecure ACLs in a secure configuration
    * [HBASE-13770] - Programmatic JAAS configuration option for secure zookeeper may be broken
    * [HBASE-13776] - Setting illegal versions for HColumnDescriptor does not throw IllegalArgumentException
    * [HBASE-13777] - Table fragmentation display triggers NPE on master status page
    * [HBASE-13778] - BoundedByteBufferPool incorrectly increasing runningAverage buffer length
    * [HBASE-13779] - Calling table.exists() before table.get() end up with an empty Result
    * [HBASE-13789] - ForeignException should not be sent to the client
    * [HBASE-13796] - ZKUtil doesn't clean quorum setting properly
    * [HBASE-13797] - Fix resource leak in HBaseFsck
    * [HBASE-13800] - TestStore#testDeleteExpiredStoreFiles should create unique data/log directory for each call
    * [HBASE-13801] - Hadoop src checksum is shown instead of HBase src checksum in master / RS UI
    * [HBASE-13802] - Procedure V2: Master fails to come up due to rollback of create namespace table
    * [HBASE-13809] - TestRowTooBig should use HDFS directory for its region directory
    * [HBASE-13810] - Table is left unclosed in VerifyReplication#Verifier
    * [HBASE-13811] - Splitting WALs, we are filtering out too many edits -> DATALOSS
    * [HBASE-13812] - Deleting of last Column Family of a table should not be allowed
    * [HBASE-13813] - Fix Javadoc warnings in Procedure.java
    * [HBASE-13821] - WARN if hbase.bucketcache.percentage.in.combinedcache is set
    * [HBASE-13824] - TestGenerateDelegationToken: Master fails to start in Windows environment
    * [HBASE-13825] - Use ProtobufUtil#mergeFrom and ProtobufUtil#mergeDelimitedFrom in place of builder methods of same name
    * [HBASE-13826] - Unable to create table when group acls are appropriately set.
    * [HBASE-13831] - TestHBaseFsck#testParallelHbck is flaky against hadoop 2.6+
    * [HBASE-13833] - LoadIncrementalHFile.doBulkLoad(Path,HTable) doesn't handle unmanaged connections when using SecureBulkLoad
    * [HBASE-13834] - Evict count not properly passed to HeapMemoryTuner.
    * [HBASE-13835] - KeyValueHeap.current might be in heap when exception happens in pollRealKV
    * [HBASE-13845] - Expire of one region server carrying meta can bring down the master
    * [HBASE-13847] - getWriteRequestCount function in HRegionServer uses int variable to return the count.
    * [HBASE-13849] - Remove restore and clone snapshot from the WebUI
    * [HBASE-13851] - RpcClientImpl.close() can hang with cancelled replica RPCs
    * [HBASE-13853] - ITBLL improvements after HBASE-13811
    * [HBASE-13858] - RS/MasterDumpServlet dumps threads before its “Stacks” header
    * [HBASE-13861] - BucketCacheTmpl.jamon has wrong bucket free and used labels
    * [HBASE-13863] - Multi-wal feature breaks reported number and size of HLogs
    * [HBASE-13865] - Increase the default value for hbase.hregion.memstore.block.multipler from 2 to 4 (part 2)
    * [HBASE-13873] - LoadTestTool addAuthInfoToConf throws UnsupportedOperationException
    * [HBASE-13875] - Clock skew between master and region server may render restored region without server address
    * [HBASE-13877] - Interrupt to flush from TableFlushProcedure causes dataloss in ITBLL
    * [HBASE-13878] - Set hbase.fs.tmp.dir config in HBaseTestingUtility.java for Phoenix UT to use
    * [HBASE-13881] - Bug in HTable#incrementColumnValue implementation
    * [HBASE-13885] - ZK watches leaks during snapshots
    * [HBASE-13888] - Fix refill bug from HBASE-13686
    * [HBASE-13889] - Fix hbase-shaded-client artifact so it works on hbase-downstreamer
    * [HBASE-13892] - Scanner with all results filtered out results in NPE
    * [HBASE-13895] - DATALOSS: Region assigned before WAL replay when abort
    * [HBASE-13901] - Error while calling watcher on creating and deleting an HBase table
    * [HBASE-13904] - TestAssignmentManager.testBalanceOnMasterFailoverScenarioWithOfflineNode failing consistently on branch-1.1
    * [HBASE-13905] - TestRecoveredEdits.testReplayWorksThoughLotsOfFlushing failing consistently on branch-1.1
    * [HBASE-13906] - Improve handling of NeedUnmanagedConnectionException
    * [HBASE-13918] - Fix hbase:namespace description in webUI
    * [HBASE-13923] - Loaded region coprocessors are not reported in shell status command
    * [HBASE-13930] - Exclude Findbugs packages from shaded jars
    * [HBASE-13933] - DBE's seekBefore with tags corrupts the tag's offset information thus leading to incorrect results
    * [HBASE-13935] - Orphaned namespace table ZK node should not prevent master to start
    * [HBASE-13938] - Deletes done during the region merge transaction may get eclipsed
    * [HBASE-13945] - Prefix_Tree seekBefore() does not work correctly
    * [HBASE-13958] - RESTApiClusterManager calls kill() instead of suspend() and resume()
    * [HBASE-13959] - Region splitting uses a single thread in most common cases
    * [HBASE-13966] - Limit column width in table.jsp
    * [HBASE-13969] - AuthenticationTokenSecretManager is never stopped in RPCServer
    * [HBASE-13970] - NPE during compaction in trunk
    * [HBASE-13971] - Flushes stuck since 6 hours on a regionserver.
    * [HBASE-13974] - TestRateLimiter#testFixedIntervalResourceAvailability may fail
    * [HBASE-13978] - Variable never assigned in SimpleTotalOrderPartitioner.getPartition()
    * [HBASE-13982] - Add info for visibility labels/cell TTLs to ImportTsv
    * [HBASE-13988] - Add exception handler for lease thread
    * [HBASE-13989] - Threshold for combined MemStore and BlockCache percentages is not checked
    * [HBASE-13995] - ServerName is not fully case insensitive
    * [HBASE-13997] - ScannerCallableWithReplicas cause Infinitely blocking
    * [HBASE-14000] - Region server failed to report to Master and was stuck in reportForDuty retry loop
    * [HBASE-14005] - Set permission to .top hfile in LoadIncrementalHFiles
    * [HBASE-14010] - TestRegionRebalancing.testRebalanceOnRegionServerNumberChange fails; cluster not balanced
    * [HBASE-14012] - Double Assignment and Dataloss when ServerCrashProcedure runs during Master failover
    * [HBASE-14021] - Quota table has a wrong description on the UI
    * [HBASE-14041] - Client MetaCache is cleared if a ThrottlingException is thrown
    * [HBASE-14042] - Fix FATAL level logging in FSHLog where logged for non fatal exceptions
    * [HBASE-14050] - NPE in org.apache.hadoop.hbase.ipc.RpcServer$Connection.readAndProcess
    * [HBASE-14054] - Acknowledged writes may get lost if regionserver clock is set backwards
    * [HBASE-14089] - Remove unnecessary draw of system entropy from RecoverableZooKeeper
    * [HBASE-14092] - hbck should run without locks by default and only disable the balancer when necessary
    * [HBASE-14098] - Allow dropping caches behind compactions
    * [HBASE-14100] - Fix high priority findbugs warnings
    * [HBASE-14106] - TestProcedureRecovery is flaky
    * [HBASE-14109] - NPE if we don't load fully before we are shutdown
    * [HBASE-14115] - Fix resource leak in HMasterCommandLine
    * [HBASE-14119] - Show meaningful error messages instead of stack traces in hbase shell commands. Fixing few commands in this jira.
    * [HBASE-14145] - Allow the Canary in regionserver mode to try all regions on the server, not just one
    * [HBASE-14146] - Once replication sees an error it slows down forever
    * [HBASE-14153] - Typo in ProcedureManagerHost.MASTER_PROCEUDRE_CONF_KEY
    * [HBASE-14155] - StackOverflowError in reverse scan
    * [HBASE-14157] - Interfaces implemented by subclasses should be checked when registering CoprocessorService
    * [HBASE-14166] - Per-Region metrics can be stale
    * [HBASE-14168] - Avoid useless retry for DoNotRetryIOException in TableRecordReaderImpl
    * [HBASE-14178] - regionserver blocks because of waiting for offsetLock
    * [HBASE-14185] - Incorrect region names logged by MemStoreFlusher
    * [HBASE-14192] - Fix REST Cluster constructor with String List
    * [HBASE-14196] - Thrift server idle connection timeout issue
    * [HBASE-14201] - hbck should not take a lock unless fixing errors
    * [HBASE-14205] - RegionCoprocessorHost System.nanoTime() performance bottleneck
    * [HBASE-14206] - MultiRowRangeFilter returns records whose rowKeys are out of allowed ranges
    * [HBASE-14209] - TestShell visibility tests failing
    * [HBASE-14211] - Add more rigorous integration tests of splits
    * [HBASE-14214] - list_labels shouldn't raise ArgumentError if no labels are defined
    * [HBASE-14219] - src tgz no longer builds after HBASE-14085
    * [HBASE-14224] - Fix coprocessor handling of duplicate classes
    * [HBASE-14228] - Close BufferedMutator and connection in MultiTableOutputFormat
    * [HBASE-14229] - Flushing canceled by coprocessor still leads to memstoreSize set down
    * [HBASE-14234] - Procedure-V2: Exception encountered in WALProcedureStore#rollWriter() should be properly handled
    * [HBASE-14238] - Branch-1.2 AM issues
    * [HBASE-14241] - Fix deadlock during cluster shutdown due to concurrent connection close
    * [HBASE-14243] - Incorrect NOTICE file in hbase-it test-jar
    * [HBASE-14249] - shaded jar modules create spurious source and test jars with incorrect LICENSE/NOTICE info
    * [HBASE-14250] - branch-1.1 hbase-server test-jar has incorrect LICENSE
    * [HBASE-14251] - javadoc jars use LICENSE/NOTICE from primary artifact
    * [HBASE-14257] - Periodic flusher only handles hbase:meta, not other system tables
    * [HBASE-14258] - Make region_mover.rb script case insensitive with regard to hostname
    * [HBASE-14269] - FuzzyRowFilter omits certain rows when multiple fuzzy keys exist
    * [HBASE-14273] - Rename MVCC to MVCC: From MultiVersionConsistencyControl to MultiVersionConcurrencyControl
    * [HBASE-14280] - Bulk Upload from HA cluster to remote HA hbase cluster fails
    * [HBASE-14283] - Reverse scan doesn’t work with HFile inline index/bloom blocks
    * [HBASE-14287] - Bootstrapping a cluster leaves temporary WAL directory laying around
    * [HBASE-14291] - NPE On StochasticLoadBalancer Balance Involving RS With No Regions
    * [HBASE-14302] - TableSnapshotInputFormat should not create back references when restoring snapshot
    * [HBASE-14307] - Incorrect use of positional read api in HFileBlock
    * [HBASE-14313] - After a Connection sees ConnectionClosingException it never recovers
    * [HBASE-14315] - Save one call to KeyValueHeap.peek per row
    * [HBASE-14317] - Stuck FSHLog: bad disk (HDFS-8960) and can't roll WAL
    * [HBASE-14327] - TestIOFencing#testFencingAroundCompactionAfterWALSync is flaky
    * [HBASE-14338] - License notification misspells 'Asciidoctor'
    * [HBASE-14342] - Recursive call in RegionMergeTransactionImpl.getJournal()
    * [HBASE-14343] - Fix debug message in SimpleRegionNormalizer for small regions
    * [HBASE-14347] - Add a switch to DynamicClassLoader to disable it
    * [HBASE-14354] - Minor improvements for usage of the mlock agent
    * [HBASE-14359] - HTable#close will hang forever if unchecked error/exception thrown in AsyncProcess#sendMultiAction
    * [HBASE-14362] - org.apache.hadoop.hbase.master.procedure.TestWALProcedureStoreOnHDFS is super duper flaky
    * [HBASE-14366] - NPE in case visibility expression is not present in labels table during importtsv run
    * [HBASE-14367] - Add normalization support to shell
    * [HBASE-14380] - Correct data gets skipped along with bad data in importTsv bulk load thru TsvImporterTextMapper
    * [HBASE-14382] - TestInterfaceAudienceAnnotations should hadoop-compt module resources
    * [HBASE-14384] - Trying to run canary locally with -regionserver option causes exception
    * [HBASE-14385] - Close the sockets that is missing in connection closure.
    * [HBASE-14392] - [tests] TestLogRollingNoCluster fails on master from time to time
    * [HBASE-14393] - Have TestHFileEncryption clean up after itself so it don't go all zombie on us
    * [HBASE-14394] - Properly close the connection after reading records from table.
    * [HBASE-14400] - Fix HBase RPC protection documentation
    * [HBASE-14407] - NotServingRegion: hbase region closed forever
    * [HBASE-14425] - In Secure Zookeeper cluster superuser will not have sufficient permission if multiple values are configured in "hbase.superuser"
    * [HBASE-14431] - AsyncRpcClient#removeConnection() never removes connection from connections pool if server fails
    * [HBASE-14437] - ArithmeticException in ReplicationInterClusterEndpoint
    * [HBASE-14445] - ExportSnapshot does not honor -chmod option
    * [HBASE-14449] - Rewrite deadlock prevention for concurrent connection close
    * [HBASE-14460] - [Perf Regression] Merge of MVCC and SequenceId (HBASE-8763) slowed Increments, CheckAndPuts, batch operations
    * [HBASE-14463] - Severe performance downgrade when parallel reading a single key from BucketCache
    * [HBASE-14469] - Fix some comment, validation and logging around memstore lower limit configuration
    * [HBASE-14471] - Thrift -  HTTP Error 413 full HEAD if using kerberos authentication
    * [HBASE-14473] - Compute region locality in parallel
    * [HBASE-14474] - DeadLock in RpcClientImpl.Connection.close()
    * [HBASE-14475] - Region split requests are always audited with "hbase" user rather than request user
    * [HBASE-14486] - Disable TestRegionPlacement, a flakey test for an unfinished feature
    * [HBASE-14489] - postScannerFilterRow consumes a lot of CPU
    * [HBASE-14492] - Increase REST server header buffer size from 8k to 64k
    * [HBASE-14494] - Wrong usage messages on shell commands
    * [HBASE-14501] - NPE in replication when HDFS transparent encryption is enabled.
    * [HBASE-14510] - Can not set coprocessor from Shell after HBASE-14224
    * [HBASE-14512] - Cache UGI groups
    * [HBASE-14518] - Give TestScanEarlyTermination the same treatment as 'HBASE-14378 Get TestAccessController* passing again...' -- up priority handlers
    * [HBASE-14531] - graceful_stop.sh "if [ "$local" ]" condition unexpected behaviour
    * [HBASE-14536] - Balancer & SSH interfering with each other leading to unavailability
    * [HBASE-14541] - TestHFileOutputFormat.testMRIncrementalLoadWithSplit failed due to too many splits and few retries
    * [HBASE-14544] - Allow HConnectionImpl to not refresh the dns on errors
    * [HBASE-14545] - TestMasterFailover often times out
    * [HBASE-14555] - Deadlock in MVCC branch-1.2 toString()
    * [HBASE-14557] - MapReduce WALPlayer issue with NoTagsKeyValue
    * [HBASE-14577] - HBase shell help for scan and returning a column family has a typo
    * [HBASE-14578] - URISyntaxException during snapshot restore for table with user defined namespace
    * [HBASE-14581] - Znode cleanup throws auth exception in secure mode
    * [HBASE-14591] - Region with reference hfile may split after a forced split in IncreasingToUpperBoundRegionSplitPolicy
    * [HBASE-14592] - BatchRestartRsAction always restarts 0 RS when running SlowDeterministicMonkey
    * [HBASE-14594] - Use new DNS API introduced in HADOOP-12437
    * [HBASE-14597] - Fix Groups cache in multi-threaded env
    * [HBASE-14598] - ByteBufferOutputStream grows its HeapByteBuffer beyond JVM limitations
    * [HBASE-14606] - TestSecureLoadIncrementalHFiles tests timed out in trunk build on apache
    * [HBASE-14608] - testWalRollOnLowReplication has some risk to assert failed after HBASE-14600
    * [HBASE-14621] - ReplicationLogCleaner gets stuck when a regionserver crashes
    * [HBASE-14624] - BucketCache.freeBlock is too expensive
    * [HBASE-14625] - Chaos Monkey should shut down faster
    * [HBASE-14632] - Region server aborts due to unguarded dereference of Reader
    * [HBASE-14633] - Try fluid width UI
    * [HBASE-14634] - Disable flakey TestSnapshotCloneIndependence.testOnlineSnapshotDeleteIndependent
    * [HBASE-14658] - Allow loading a MonkeyFactory by class name
    * [HBASE-14661] - RegionServer link is not opening, in HBase Table page.
    * [HBASE-14663] - HStore::close does not honor config hbase.rs.evictblocksonclose
    * [HBASE-14667] - HBaseFsck constructors have diverged
    * [HBASE-14674] - Rpc handler / task monitoring seems to be broken after 0.98
    * [HBASE-14680] - Two configs for snapshot timeout and better defaults
    * [HBASE-14682] - CM restore functionality for regionservers is broken
    * [HBASE-14689] - Addendum and unit test for HBASE-13471
    * [HBASE-14690] - Fix css so there's no left/right scroll bar
    * [HBASE-14694] - Scan copy constructor doesn't handle allowPartialResults
    * [HBASE-14705] - Javadoc for KeyValue constructor is not correct.
    * [HBASE-14706] - RegionLocationFinder should return multiple servernames by top host
    * [HBASE-14712] - MasterProcWALs never clean up
    * [HBASE-14717] - enable_table_replication command should only create specified table for a peer cluster
    * [HBASE-14723] - Fix IT tests split too many times
    * [HBASE-14733] - Minor typo in alter_namespace.rb
    * [HBASE-14737] - Clear cachedMaxVersions when HColumnDescriptor#setValue(VERSIONS, value) is called
    * [HBASE-14742] - TestHeapMemoryManager is flakey
    * [HBASE-14745] - Shade the last few dependencies in hbase-shaded-client
    * [HBASE-14754] - TestFastFailWithoutTestUtil failing on trunk now in #testPreemptiveFastFailException50Times
    * [HBASE-14759] - Avoid using Math.abs when selecting SyncRunner in FSHLog
    * [HBASE-14761] - Deletes with and without visibility expression do not delete the matching mutation
    * [HBASE-14768] - bin/graceful_stop.sh logs nothing as a balancer state to be stored
    * [HBASE-14771] - RpcServer#getRemoteAddress always returns null
    * [HBASE-14773] - Fix HBase shell tests are skipped when skipping server tests.
    * [HBASE-14777] - Fix Inter Cluster Replication Future ordering issues
    * [HBASE-14778] - Make block cache hit percentages not integer in the metrics system
    * [HBASE-14781] - Turn per cf flushing on for ITBLL by default
    * [HBASE-14782] - FuzzyRowFilter skips valid rows
    * [HBASE-14784] - Port conflict is not resolved in HBaseTestingUtility.randomFreePort()
    * [HBASE-14788] - Splitting a region does not support the hbase.rs.evictblocksonclose config when closing source region
    * [HBASE-14793] - Allow limiting size of block into L1 block cache.
    * [HBASE-14799] - Commons-collections object deserialization remote command execution vulnerability
    * [HBASE-14802] - Replaying server crash recovery procedure after a failover causes incorrect handling of deadservers
    * [HBASE-14804] - HBase shell's create table command ignores 'NORMALIZATION_ENABLED' attribute
    * [HBASE-14806] - Missing sources.jar for several modules when building HBase
    * [HBASE-14807] - TestWALLockup is flakey
    * [HBASE-14809] - Grant / revoke Namespace admin permission to group
    * [HBASE-14812] - Fix ResultBoundedCompletionService deadlock
    * [HBASE-14822] - Renewing leases of scanners doesn't work
    * [HBASE-14824] - HBaseAdmin.mergeRegions should recognize both full region names and encoded region names
    * [HBASE-14838] - Clarify that SimpleRegionNormalizer does not merge empty (<1MB) regions
    * [HBASE-14840] - Sink cluster reports data replication request as success though the data is not replicated
    * [HBASE-14843] - TestWALProcedureStore.testLoad is flakey
    * [HBASE-14867] - SimpleRegionNormalizer needs to have better heuristics to trigger merge operation
    * [HBASE-14872] - Scan different timeRange per column family doesn't percolate down to the memstore
    * [HBASE-14875] - Forward port HBASE-14207 'Region was hijacked and remained in transition when RS failed to open a region and later regionplan changed to new RS on retry'
    * [HBASE-14885] - NullPointerException in HMaster#normalizeRegions() due to missing TableDescriptor
    * [HBASE-14893] - Race between mutation on region and region closing operation leads to NotServingRegionException
    * [HBASE-14894] - Fix misspellings of threshold in log4j.properties files for tests
    * [HBASE-14904] - Mark Base[En|De]coder LimitedPrivate and fix binary compat issue
    * [HBASE-14905] - VerifyReplication does not honour versions option
    * [HBASE-14922] - Delayed flush doesn't work causing flush storms.
    * [HBASE-14923] - VerifyReplication should not mask the exception during result comparison
    * [HBASE-14926] - Hung ThriftServer; no timeout on read from client; if client crashes, worker thread gets stuck reading
    * [HBASE-14928] - Start row should be set for query through HBase REST gateway involving globbing option
    * [HBASE-14929] - There is a space missing from Table "foo" is not currently available.
    * [HBASE-14930] - check_compatibility.sh needs smarter exit codes
    * [HBASE-14936] - CombinedBlockCache should overwrite CacheStats#rollMetricsPeriod()
    * [HBASE-14940] - Make our unsafe based ops more safe
    * [HBASE-14941] - locate_region shell command
    * [HBASE-14942] - Allow turning off BoundedByteBufferPool
    * [HBASE-14952] - hbase-assembly source artifact has some incorrect modules
    * [HBASE-14953] - HBaseInterClusterReplicationEndpoint: Do not retry the whole batch of edits in case of RejectedExecutionException
    * [HBASE-14954] - IllegalArgumentException was thrown when doing online configuration change in CompactSplitThread
    * [HBASE-14960] - Fallback to using default RPCControllerFactory if class cannot be loaded
    * [HBASE-14965] - Remove un-used hbase-spark in branch-1 +
    * [HBASE-14968] - ConcurrentModificationException in region close resulting in the region staying in closing state
    * [HBASE-14974] - Total number of Regions in Transition number on UI incorrect
    * [HBASE-14977] - ChoreService.shutdown may result in ConcurrentModificationException
    * [HBASE-14987] - Compaction marker whose region name doesn't match current region's needs to be handled
    * [HBASE-14989] - Implementation of Mutation.getWriteToWAL() is backwards
    * [HBASE-14999] - Remove ref to org.mortbay.log.Log
    * [HBASE-15001] - Thread Safety issues in ReplicationSinkManager and HBaseInterClusterReplicationEndpoint
    * [HBASE-15009] - Update test-patch.sh on branches; to fix curtailed build report
    * [HBASE-15011] - turn off the jdk8 javadoc linter. :(
    * [HBASE-15014] - Fix filterCellByStore in WALsplitter is awful for performance
    * [HBASE-15015] - Checktyle plugin shouldn't check Jamon-generated Java classes
    * [HBASE-15018] - Inconsistent way of handling TimeoutException in the rpc client implementations
    * [HBASE-15019] - Replication stuck when HDFS is restarted
    * [HBASE-15021] - hadoopqa doing false positives
    * [HBASE-15022] - undefined method `getZooKeeperClusterKey' for Java::OrgApacheHadoopHbaseZookeeper::ZKUtil:Class
    * [HBASE-15032] - hbase shell scan filter string assumes UTF-8 encoding
    * [HBASE-15035] - bulkloading hfiles with tags that require splits do not preserve tags
    * [HBASE-15039] - HMaster and RegionServers should try to refresh token keys from zk when facing InvalidToken
    * [HBASE-15052] - Use EnvironmentEdgeManager in ReplicationSource
    * [HBASE-15057] - local-master-backup.sh doesn't start HMaster correctly
    * [HBASE-15058] - AssignmentManager should account for unsuccessful split correctly which initially passes quota check
    * [HBASE-15065] - SimpleRegionNormalizer should return multiple normalization plans in one run
    * [HBASE-15079] - TestMultiParallel.validateLoadedData AssertionError: null
    * [HBASE-15083] - Gets from Multiactions are not counted in metrics for gets.
    * [HBASE-15085] - IllegalStateException was thrown when scanning on bulkloaded HFiles
    * [HBASE-15098] - Normalizer switch in configuration is not used
    * [HBASE-15100] - Master WALProcs still never clean up
    * [HBASE-15102] - HeapMemoryTuner can "overtune" memstore size and suddenly drop it into blocking zone
    * [HBASE-15104] - Occasional failures due to NotServingRegionException in IT tests
    * [HBASE-15122] - Servlets generate XSS_REQUEST_PARAMETER_TO_SERVLET_WRITER findbugs warnings
    * [HBASE-15133] - Data loss after compaction when a row has more than Integer.MAX_VALUE columns
    * [HBASE-15139] - Connection manager doesn't pass client metrics to RpcClient
    * [HBASE-15145] - HBCK and Replication should authenticate to zookepeer using server principal
    * [HBASE-15146] - Don't block on Reader threads queueing to a scheduler queue
    * [HBASE-15147] - Shell should use Admin.listTableNames() instead of Admin.listTables()
    * [HBASE-15148] - Resolve IS2_INCONSISTENT_SYNC findbugs warning in AuthenticationTokenSecretManager
    * [HBASE-15152] - Automatically include prefix-tree module in MR jobs if present
    * [HBASE-15190] - Monkey dies when running on shared cluster (gives up when can't kill the other fellows processes)
    * [HBASE-15198] - RPC client not using Codec and CellBlock for puts by default
    * [HBASE-15200] - ZooKeeper znode ACL checks should only compare the shortname
    * [HBASE-15206] - Flakey testSplitDaughtersNotInMeta test
    * [HBASE-15209] - disable table in HBaseTestingUtility.truncateTable
    * [HBASE-15214] - Valid mutate Ops fail with RPC Codec in use and region moves across
    * [HBASE-15216] - Canary does not accept config params from command line
    * [HBASE-15218] - On RS crash and replay of WAL, loosing all Tags in Cells
    * [HBASE-15221] - HTableMultiplexer improvements (stale region locations and resource leaks)
    * [HBASE-15252] - Data loss when replaying wal if HDFS timeout
    * [HBASE-15279] - OrderedBytes.isEncodedValue does not check for int8 and int16 types
    * [HBASE-15283] - Revert to IOException in TimeRange constructor to maintain API compat in 1.x line
    * [HBASE-15285] - Forward-port respect for isReturnResult from HBASE-15095

** Improvement
    * [HBASE-6617] - ReplicationSourceManager should be able to track multiple WAL paths
    * [HBASE-7171] - Initial web UI for region/memstore/storefiles details
    * [HBASE-11927] - Use Native Hadoop Library for HFile checksum (And flip default from CRC32 to CRC32C)
    * [HBASE-12415] - Add add(byte[][] arrays) to Bytes.
    * [HBASE-12986] - Compaction pressure based client pushback
    * [HBASE-12988] - [Replication]Parallel apply edits across regions
    * [HBASE-13103] - [ergonomics] add region size balancing as a feature of master
    * [HBASE-13127] - Add timeouts on all tests so less zombie sightings
    * [HBASE-13247] - Change BufferedMutatorExample to use addColumn() since add() is deprecated
    * [HBASE-13344] - Add enforcer rule that matches our JDK support statement
    * [HBASE-13358] - Upgrade VisibilityClient API to accept Connection object.
    * [HBASE-13366] - Throw DoNotRetryIOException instead of read only IOException
    * [HBASE-13375] - Provide HBase superuser higher priority over other users in the RPC handling
    * [HBASE-13376] - Improvements to Stochastic load balancer
    * [HBASE-13420] - RegionEnvironment.offerExecutionLatency Blocks Threads under Heavy Load
    * [HBASE-13534] - Change HBase master WebUI to explicitly mention if it is a backup master
    * [HBASE-13598] - Make hbase assembly 'attach' to the project
    * [HBASE-13671] - More classes to add to the invoking repository of org.apache.hadoop.hbase.mapreduce.driver
    * [HBASE-13673] - WALProcedureStore procedure is chatty
    * [HBASE-13675] - ProcedureExecutor completion report should be at DEBUG log level
    * [HBASE-13677] - RecoverableZookeeper WARNs on expected events
    * [HBASE-13684] - Allow mlockagent to be used when not starting as root
    * [HBASE-13710] - Remove use of Hadoop's ReflectionUtil in favor of our own.
    * [HBASE-13745] - Say why a flush was requested in log message
    * [HBASE-13755] - Provide single super user check implementation
    * [HBASE-13761] - Optimize FuzzyRowFilter
    * [HBASE-13780] - Default to 700 for HDFS root dir permissions for secure deployments
    * [HBASE-13816] - Build shaded modules only in release profile
    * [HBASE-13828] - Add group permissions testing coverage to AC.
    * [HBASE-13829] - Add more ThrottleType
    * [HBASE-13846] - Run MiniCluster on top of other MiniDfsCluster
    * [HBASE-13848] - Access InfoServer SSL passwords through Credential Provder API
    * [HBASE-13876] - Improving performance of HeapMemoryManager
    * [HBASE-13894] - Avoid visitor alloc each call of ByteBufferArray get/putMultiple()
    * [HBASE-13917] - Remove string comparison to identify request priority
    * [HBASE-13925] - Use zookeeper multi to clear znodes in ZKProcedureUtil
    * [HBASE-13927] - Allow hbase-daemon.sh to conditionally redirect the log or not
    * [HBASE-13947] - Use MasterServices instead of Server in AssignmentManager
    * [HBASE-13980] - Distinguish blockedFlushCount vs unblockedFlushCount when tuning heap memory
    * [HBASE-13985] - Add configuration to skip validating HFile format when bulk loading
    * [HBASE-13996] - Add write sniffing in canary
    * [HBASE-14002] - Add --noReplicationSetup option to IntegrationTestReplication
    * [HBASE-14015] - Allow setting a richer state value when toString a pv2
    * [HBASE-14027] - Clean up netty dependencies
    * [HBASE-14078] - improve error message when HMaster can't bind to port
    * [HBASE-14082] - Add replica id to JMX metrics names
    * [HBASE-14097] - Log link to client scan troubleshooting section when scanner exceptions happen.
    * [HBASE-14110] - Add CostFunction for balancing primary region replicas
    * [HBASE-14122] - Client API for determining if server side supports cell level security
    * [HBASE-14148] - Web UI Framable Page
    * [HBASE-14172] - Upgrade existing thrift binding using thrift 0.9.3 compiler.
    * [HBASE-14194] - Undeprecate methods in ThriftServerRunner.HBaseHandler
    * [HBASE-14203] - remove duplicate code getTableDescriptor in HTable
    * [HBASE-14230] - replace reflection in FSHlog with HdfsDataOutputStream#getCurrentBlockReplication()
    * [HBASE-14260] - don't build javadocs for hbase-protocol module
    * [HBASE-14261] - Enhance Chaos Monkey framework by adding zookeeper and datanode fault injections.
    * [HBASE-14266] - RegionServers have a lock contention of Configuration.getProps
    * [HBASE-14268] - Improve KeyLocker
    * [HBASE-14314] - Metrics for block cache should take region replicas into account
    * [HBASE-14325] - Add snapshotinfo command to hbase script
    * [HBASE-14334] - Move Memcached block cache in to it's own optional module.
    * [HBASE-14387] - Compaction improvements: Maximum off-peak compaction size
    * [HBASE-14436] - HTableDescriptor#addCoprocessor will always make RegionCoprocessorHost create new Configuration
    * [HBASE-14461] - Cleanup IncreasingToUpperBoundRegionSplitPolicy
    * [HBASE-14468] - Compaction improvements: FIFO compaction policy
    * [HBASE-14517] - Show regionserver's version in master status page
    * [HBASE-14547] - Add more debug/trace to zk-procedure
    * [HBASE-14580] - Make the HBaseMiniCluster compliant with Kerberos
    * [HBASE-14582] - Regionserver status webpage bucketcache list can become huge
    * [HBASE-14586] - Use a maven profile to run Jacoco analysis
    * [HBASE-14587] - Attach a test-sources.jar for hbase-server
    * [HBASE-14588] - Stop accessing test resources from within src folder
    * [HBASE-14643] - Avoid Splits from once again opening a closed reader for fetching the first and last key
    * [HBASE-14683] - Batching in buffered mutator is awful when adding lists of mutations.
    * [HBASE-14684] - Try to remove all MiniMapReduceCluster in unit tests
    * [HBASE-14687] - Un-synchronize BufferedMutator
    * [HBASE-14693] - Add client-side metrics for received pushback signals
    * [HBASE-14696] - Support setting allowPartialResults in mapreduce Mappers
    * [HBASE-14700] - Support a "permissive" mode for secure clusters to allow "simple" auth clients
    * [HBASE-14708] - Use copy on write Map for region location cache
    * [HBASE-14714] - some cleanup to snapshot code
    * [HBASE-14715] - Add javadocs to DelegatingRetryingCallable
    * [HBASE-14721] - Memstore add cells - Avoid many garbage
    * [HBASE-14730] - region server needs to log warnings when there are attributes configured for cells with hfile v2
    * [HBASE-14752] - Add example of using the HBase client in a multi-threaded environment
    * [HBASE-14765] - Remove snappy profile
    * [HBASE-14780] - Integration Tests that run with ChaosMonkey need to specify CFs
    * [HBASE-14805] - status should show the master in shell
    * [HBASE-14821] - CopyTable should allow overriding more config properties for peer cluster
    * [HBASE-14862] - Add support for reporting p90 for histogram metrics
    * [HBASE-14866] - VerifyReplication should use peer configuration in peer connection
    * [HBASE-14891] - Add log for uncaught exception in RegionServerMetricsWrapperRunnable
    * [HBASE-14946] - Don't allow multi's to over run the max result size.
    * [HBASE-14951] - Make hbase.regionserver.maxlogs obsolete
    * [HBASE-14976] - Add RPC call queues to the web ui
    * [HBASE-14978] - Don't allow Multi to retain too many blocks
    * [HBASE-14984] - Allow memcached block cache to set optimze to false
    * [HBASE-15005] - Use value array in computing block length for 1.2 and 1.3
    * [HBASE-15038] - ExportSnapshot should support separate configurations for source and destination clusters
    * [HBASE-15076] - Add getScanner(Scan scan, List<KeyValueScanner> additionalScanners) API into Region interface
    * [HBASE-15111] - "hbase version" should write to stdout
    * [HBASE-15129] - Set default value for hbase.fs.tmp.dir rather than fully depend on hbase-default.xml
    * [HBASE-15211] - Don't run the CatalogJanitor if there are regions in transition
    * [HBASE-15229] - Canary Tools should not call System.Exit on error

** New Feature
    * [HBASE-5980] - Scanner responses from RS should include metrics on rows/KVs filtered
    * [HBASE-10070] - HBase read high-availability using timeline-consistent region replicas
    * [HBASE-12911] - Client-side metrics
    * [HBASE-13356] - HBase should provide an InputFormat supporting multiple scans in mapreduce jobs over snapshots
    * [HBASE-13639] - SyncTable - rsync for HBase tables
    * [HBASE-13698] - Add RegionLocator methods to Thrift2 proxy.
    * [HBASE-14154] - DFS Replication should be configurable at column family level
    * [HBASE-14355] - Scan different TimeRange for each column family
    * [HBASE-14459] - Add request and response sizes metrics
    * [HBASE-14529] - Respond to SIGHUP to reload config

** Task
    * [HBASE-11276] - Add back support for running ChaosMonkey as standalone tool
    * [HBASE-11677] - Make Logger instance modifiers consistent
    * [HBASE-13089] - Fix test compilation error on building against htrace-3.2.0-incubating
    * [HBASE-13666] - book.pdf is not renamed during site build
    * [HBASE-13716] - Stop using Hadoop's FSConstants
    * [HBASE-13726] - stop using Hadoop's IOUtils
    * [HBASE-13764] - Backport HBASE-7782 (HBaseTestingUtility.truncateTable() not acting like CLI) to branch-1.x
    * [HBASE-13799] - javadoc how Scan gets polluted when used; if you set attributes or ask for scan metrics
    * [HBASE-13929] - make_rc.sh publishes empty shaded artifacts
    * [HBASE-13964] - Skip region normalization for tables under namespace quota
    * [HBASE-14052] - Mark a few methods in CellUtil audience private since only make sense internally to hbase
    * [HBASE-14053] - Disable DLR in branch-1+
    * [HBASE-14066] - clean out old docbook docs from branch-1
    * [HBASE-14085] - Correct LICENSE and NOTICE files in artifacts
    * [HBASE-14288] - Upgrade asciidoctor plugin to v1.5.2.1
    * [HBASE-14290] - Spin up less threads in tests
    * [HBASE-14308] - HTableDescriptor WARN is not actionable
    * [HBASE-14318] - make_rc.sh should purge/re-resolve dependencies from local repository
    * [HBASE-14361] - ReplicationSink should create Connection instances lazily
    * [HBASE-14493] - Upgrade the jamon-runtime dependency
    * [HBASE-14502] - Purge use of jmock and remove as dependency
    * [HBASE-14516] - categorize hadoop-compat tests
    * [HBASE-14526] - Remove delayed rpc
    * [HBASE-14851] - Add test showing how to use TTL from thrift
    * [HBASE-15003] - Remove BoundedConcurrentLinkedQueue and associated test
    * [HBASE-15099] - Move RegionStateListener class out of quotas package
    * [HBASE-15220] - Change two logs in SimpleRegionNormalizer to INFO level

** Test
    * [HBASE-13590] - TestEnableTableHandler.testEnableTableWithNoRegionServers is flakey
    * [HBASE-13591] - TestHBaseFsck is flakey
    * [HBASE-13609] - TestFastFail is still failing
    * [HBASE-13940] - IntegrationTestBulkLoad needs option to specify output folders used by test
    * [HBASE-14197] - TestRegionServerHostname#testInvalidRegionServerHostnameAbortsServer fails in Jenkins
    * [HBASE-14210] - Create test for cell level ACLs involving user group
    * [HBASE-14277] - TestRegionServerHostname.testRegionServerHostname may fail at host with a case sensitive name
    * [HBASE-14344] - Add timeouts to TestHttpServerLifecycle
    * [HBASE-14584] - TestNamespacesInstanceModel fails on jdk8
    * [HBASE-14758] - Add UT case for unchecked error/exception thrown in AsyncProcess#sendMultiAction
    * [HBASE-14839] - [branch-1] Backport test categories so that patch backport is easier

** Umbrella
    * [HBASE-13747] - Promote Java 8 to "yes" in support matrix
    * [HBASE-13908] - 1.2 release umbrella
    * [HBASE-14420] - Zombie Stomping Session

Release Notes - HBase - Version 1.1.0 05/11/2015

** Sub-task
    * [HBASE-7847] - Use zookeeper multi to clear znodes
    * [HBASE-10674] - HBCK should be updated to do replica related checks
    * [HBASE-10942] - support parallel request cancellation for multi-get
    * [HBASE-11261] - Handle splitting/merging of regions that have region_replication greater than one
    * [HBASE-11567] - Write bulk load COMMIT events to WAL
    * [HBASE-11568] - Async WAL replication for region replicas
    * [HBASE-11569] - Flush / Compaction handling from secondary region replicas
    * [HBASE-11571] - Bulk load handling from secondary region replicas
    * [HBASE-11574] - hbase:meta's regions can be replicated
    * [HBASE-11580] - Failover handling for secondary region replicas
    * [HBASE-11598] - Add simple rpc throttling
    * [HBASE-11842] - Integration test for async wal replication to secondary regions
    * [HBASE-11903] - Directly invoking split & merge of replica regions should be disallowed
    * [HBASE-11908] - Region replicas should be added to the meta table at the time of table creation
    * [HBASE-12012] - Improve cancellation for the scan RPCs
    * [HBASE-12511] - namespace permissions - add support from table creation privilege in a namespace 'C'
    * [HBASE-12561] - Replicas of regions can be cached from different instances of the table in MetaCache
    * [HBASE-12562] - Handling memory pressure for secondary region replicas
    * [HBASE-12708] - Document newly introduced params for using Thrift-over-HTTPS.
    * [HBASE-12714] - RegionReplicaReplicationEndpoint should not set the RPC Codec
    * [HBASE-12730] - Backport HBASE-5162 (Basic client pushback mechanism) to branch-1
    * [HBASE-12735] - Refactor TAG so it can live as unit test and as an integration test
    * [HBASE-12763] - Make it so there must be WALs for a server to be marked dead
    * [HBASE-12776] - SpliTransaction: Log number of files to be split
    * [HBASE-12779] - SplitTransaction: Add metrics
    * [HBASE-12793] - [hbck] closeRegionSilentlyAndWait() should log cause of IOException and retry until  hbase.hbck.close.timeout expires
    * [HBASE-12802] - Remove unnecessary Table.flushCommits()
    * [HBASE-12848] - Utilize Flash storage for WAL
    * [HBASE-12926] - Backport HBASE-12688 (Update site with a bootstrap-based UI) for HBASE-12918
    * [HBASE-12980] - Delete of a table may not clean all rows from hbase:meta
    * [HBASE-13006] - Document visibility label support for groups
    * [HBASE-13067] - Fix caching of stubs to allow IP address changes of restarted remote servers
    * [HBASE-13108] - Reduce Connection creations in TestAcidGuarantees
    * [HBASE-13121] - Async wal replication for region replicas and dist log replay does not work together
    * [HBASE-13130] - Add timeouts on TestMasterObserver, a frequent zombie show
    * [HBASE-13164] - Update TestUsersOperationsWithSecureHadoop to use MiniKdc
    * [HBASE-13169] - ModifyTable increasing the region replica count should also auto-setup RRRE
    * [HBASE-13201] - Remove HTablePool from thrift-server
    * [HBASE-13202] - Procedure v2 - core framework
    * [HBASE-13203] - Procedure v2 - master create/delete table
    * [HBASE-13204] - Procedure v2 - client create/delete table sync
    * [HBASE-13209] - Procedure V2 - master Add/Modify/Delete Column Family
    * [HBASE-13210] - Procedure V2 - master Modify table
    * [HBASE-13211] - Procedure V2 - master Enable/Disable table
    * [HBASE-13213] - Split out locality metrics among primary and secondary region
    * [HBASE-13244] - Test delegation token generation with kerberos enabled
    * [HBASE-13290] - Procedure v2 - client enable/disable table sync
    * [HBASE-13303] - Fix size calculation of results on the region server
    * [HBASE-13307] - Making methods under ScannerV2#next inlineable, faster
    * [HBASE-13327] - Use Admin in ConnectionCache
    * [HBASE-13332] - Fix the usage of doAs/runAs in Visibility Controller tests.
    * [HBASE-13335] - Update ClientSmallScanner and ClientSmallReversedScanner
    * [HBASE-13386] - Backport HBASE-12601 to all active branches other than master
    * [HBASE-13421] - Reduce the number of object creations introduced by HBASE-11544 in scan RPC hot code paths
    * [HBASE-13447] - Bypass logic in TimeRange.compare
    * [HBASE-13455] - Procedure V2 - master truncate table
    * [HBASE-13466] - Document deprecations in 1.x - Part 1
    * [HBASE-13469] - [branch-1.1] Procedure V2 - Make procedure v2 configurable in branch-1.1
    * [HBASE-13481] - Master should respect master (old) DNS/bind related configurations
    * [HBASE-13496] - Make Bytes$LexicographicalComparerHolder$UnsafeComparer::compareTo inlineable
    * [HBASE-13498] - Add more docs and a basic check for storage policy handling
    * [HBASE-13502] - Deprecate/remove getRowComparator() in TableName
    * [HBASE-13514] - Fix test failures in TestScannerHeartbeatMessages caused by incorrect setting of hbase.rpc.timeout
    * [HBASE-13515] - Handle FileNotFoundException in region replica replay for flush/compaction events
    * [HBASE-13529] - Procedure v2 - WAL Improvements
    * [HBASE-13551] - Procedure V2 - Procedure classes should not be InterfaceAudience.Public

** Brainstorming
    * [HBASE-12859] - New master API to track major compaction completion

** Bug
    * [HBASE-6778] - Deprecate Chore; its a thread per task when we should have one thread to do all tasks
    * [HBASE-7332] - [webui] HMaster webui should display the number of regions a table has.
    * [HBASE-8026] - HBase Shell docs for scan command does not reference VERSIONS
    * [HBASE-8725] - Add total time RPC call metrics
    * [HBASE-9738] - Delete table and loadbalancer interference
    * [HBASE-9910] - TestHFilePerformance and HFilePerformanceEvaluation should be merged in a single HFile performance test class.
    * [HBASE-10499] - In write heavy scenario one of the regions does not get flushed causing RegionTooBusyException
    * [HBASE-10528] - DefaultBalancer selects plans to move regions onto draining nodes
    * [HBASE-10728] - get_counter value is never used.
    * [HBASE-11542] - Unit Test  KeyStoreTestUtil.java compilation failure in IBM JDK
    * [HBASE-11544] - [Ergonomics] hbase.client.scanner.caching is dogged and will try to return batch even if it means OOME
    * [HBASE-12006] - [JDK 8] KeyStoreTestUtil#generateCertificate fails due to "subject class type invalid"
    * [HBASE-12028] - Abort the RegionServer, when it's handler threads die
    * [HBASE-12070] - Add an option to hbck to fix ZK inconsistencies
    * [HBASE-12102] - Duplicate keys in HBase.RegionServer metrics JSON
    * [HBASE-12108] - HBaseConfiguration: set classloader before loading xml files
    * [HBASE-12270] - A bug in the bucket cache, with cache blocks on write enabled
    * [HBASE-12339] - WAL performance evaluation tool doesn't roll logs
    * [HBASE-12393] - The regionserver web will throw exception if we disable block cache
    * [HBASE-12480] - Regions in FAILED_OPEN/FAILED_CLOSE should be processed on master failover
    * [HBASE-12548] - Improve debuggability of IntegrationTestTimeBoundedRequestsWithRegionReplicas
    * [HBASE-12574] - Update replication metrics to not do so many map look ups.
    * [HBASE-12585] - Fix refguide so it does hbase 1.0 style API everywhere with callout on how we used to do it in pre-1.0
    * [HBASE-12607] - TestHBaseFsck#testParallelHbck fails running against hadoop 2.6.0
    * [HBASE-12644] - Visibility Labels: issue with storing super users in labels table
    * [HBASE-12694] - testTableExistsIfTheSpecifiedTableRegionIsSplitParent in TestSplitTransactionOnCluster class leaves regions in transition
    * [HBASE-12697] - Don't use RegionLocationFinder if localityCost == 0
    * [HBASE-12711] - Fix new findbugs warnings in hbase-thrift module
    * [HBASE-12715] - getLastSequenceId always returns -1
    * [HBASE-12716] - A bug in RegionSplitter.UniformSplit algorithm
    * [HBASE-12717] - Pre-split algorithm in HBaseAdmin.create() can not find the split point
    * [HBASE-12718] - Convert TestAcidGuarantees from a unit test to an integration test
    * [HBASE-12728] - buffered writes substantially less useful after removal of HTablePool
    * [HBASE-12732] - Log messages in FileLink$FileLinkInputStream#tryOpen are reversed
    * [HBASE-12734] - TestPerColumnFamilyFlush.testCompareStoreFileCount is flakey
    * [HBASE-12739] - Avoid too large identifier of ZooKeeperWatcher
    * [HBASE-12740] - Improve performance of TestHBaseFsck
    * [HBASE-12741] - AccessController contains a javadoc issue
    * [HBASE-12742] - ClusterStatusPublisher crashes with a IPv6 network interface.
    * [HBASE-12743] - [ITBLL] Master fails rejoining cluster stuck splitting logs; Distributed log replay=true
    * [HBASE-12744] - hbase-default.xml lists hbase.regionserver.global.memstore.size twice
    * [HBASE-12747] - IntegrationTestMTTR will OOME if launched with mvn verify
    * [HBASE-12749] - Tighten HFileLink api to enable non-snapshot uses
    * [HBASE-12750] - getRequestsCount() in ClusterStatus returns total number of request
    * [HBASE-12767] - Fix a StoreFileScanner NPE in reverse scan flow
    * [HBASE-12771] - TestFailFast#testFastFail failing
    * [HBASE-12772] - TestPerColumnFamilyFlush failing
    * [HBASE-12774] - Fix the inconsistent permission checks for bulkloading.
    * [HBASE-12781] - thrift2 listen port will bind always to the passed command line address
    * [HBASE-12782] - ITBLL fails for me if generator does anything but 5M per maptask
    * [HBASE-12791] - HBase does not attempt to clean up an aborted split when the regionserver shutting down
    * [HBASE-12798] - Map Reduce jobs should not create Tables in setConf()
    * [HBASE-12801] - Failed to truncate a table while maintaing binary region boundaries
    * [HBASE-12804] - ImportTsv fails to delete partition files created by it
    * [HBASE-12810] - Update to htrace-incubating
    * [HBASE-12811] - [AccessController] NPE while scanning a table with user not having READ permission on the namespace
    * [HBASE-12817] - Data missing while scanning using PREFIX_TREE data block encoding
    * [HBASE-12819] - ExportSnapshot doesn't close FileSystem instances
    * [HBASE-12824] - CompressionTest fails with org.apache.hadoop.hbase.io.hfile.AbstractHFileReader$NotSeekedException: Not seeked to a key/value
    * [HBASE-12831] - Changing the set of vis labels a user has access to doesn't generate an audit log event
    * [HBASE-12832] - Describe table from shell no longer shows Table's attributes, only CF attributes
    * [HBASE-12833] - [shell] table.rb leaks connections
    * [HBASE-12835] - HBASE-12422 changed new HTable(Configuration) to not use managed Connections anymore
    * [HBASE-12837] - ReplicationAdmin leaks zk connections
    * [HBASE-12844] - ServerManager.isServerReacable() should sleep between retries
    * [HBASE-12845] - ByteBufferOutputStream should grow as direct buffer if the initial buffer is also direct BB
    * [HBASE-12847] - TestZKLessSplitOnCluster frequently times out in 0.98 builds
    * [HBASE-12849] - LoadIncrementalHFiles should use unmanaged connection in branch-1
    * [HBASE-12862] - Uppercase "wals" in RegionServer webUI
    * [HBASE-12863] - Master info port on RS UI is always 0
    * [HBASE-12864] - IntegrationTestTableSnapshotInputFormat fails
    * [HBASE-12867] - Shell does not support custom replication endpoint specification
    * [HBASE-12878] - Incorrect HFile path in TestHFilePerformance print output (fix for easier debugging)
    * [HBASE-12881] - TestFastFail is not compatible with surefire.rerunFailingTestsCount
    * [HBASE-12886] - Correct tag option name in PerformanceEvaluation
    * [HBASE-12892] - Add a class to allow taking a snapshot from the command line
    * [HBASE-12897] - Minimum memstore size is a percentage
    * [HBASE-12898] - Add in used undeclared dependencies
    * [HBASE-12901] - Possible deadlock while onlining a region and get region plan for other region run parallel
    * [HBASE-12904] - Threading issues in region_mover.rb
    * [HBASE-12908] - Typos in MemStoreFlusher javadocs
    * [HBASE-12915] - Disallow small scan with batching
    * [HBASE-12916] - No access control for replicating WAL entries
    * [HBASE-12917] - HFilePerformanceEvaluation Scan tests fail with StackOverflowError due to recursive call in createCell function
    * [HBASE-12918] - Backport asciidoc changes
    * [HBASE-12919] - Compilation with Hadoop-2.4- is broken again
    * [HBASE-12924] - HRegionServer#MovedRegionsCleaner Chore does not start
    * [HBASE-12927] - TestFromClientSide#testScanMetrics() failing due to duplicate createTable commands
    * [HBASE-12931] - The existing KeyValues in memstore are not removed completely after inserting cell into memStore
    * [HBASE-12948] - Calling Increment#addColumn on the same column multiple times produces wrong result
    * [HBASE-12951] - TestHCM.testConnectionClose is flakey when using AsyncRpcClient as client implementation
    * [HBASE-12953] - RegionServer is not functionally working with AysncRpcClient in secure mode
    * [HBASE-12954] - Ability impaired using HBase on multihomed hosts
    * [HBASE-12956] - Binding to 0.0.0.0 is broken after HBASE-10569
    * [HBASE-12958] - SSH doing hbase:meta get but hbase:meta not assigned
    * [HBASE-12961] - Negative values in read and write region server metrics
    * [HBASE-12962] - TestHFileBlockIndex.testBlockIndex() commented out during HBASE-10531
    * [HBASE-12964] - Add the ability for hbase-daemon.sh to start in the foreground
    * [HBASE-12966] - NPE in HMaster while recovering tables in Enabling state
    * [HBASE-12969] - Parameter Validation is not there for shell script, local-master-backup.sh and local-regionservers.sh
    * [HBASE-12971] - Replication stuck due to large default value for replication.source.maxretriesmultiplier
    * [HBASE-12976] - Set default value for hbase.client.scanner.max.result.size
    * [HBASE-12978] - Region goes permanently offline (WAS: hbase:meta has a row missing hregioninfo and it causes my long-running job to fail)
    * [HBASE-12984] - SSL cannot be used by the InfoPort after removing deprecated code in HBASE-10336
    * [HBASE-12985] - Javadoc warning and findbugs fixes to get us green again
    * [HBASE-12989] - region_mover.rb unloadRegions method uses ArrayList concurrently resulting in errors
    * [HBASE-12991] - Use HBase 1.0 interfaces in hbase-rest
    * [HBASE-12993] - Use HBase 1.0 interfaces in hbase-thrift
    * [HBASE-12996] - Reversed field on Filter should be transient
    * [HBASE-12998] - Compilation with Hdfs-2.7.0-SNAPSHOT is broken after HDFS-7647
    * [HBASE-12999] - Make foreground_start return the correct exit code
    * [HBASE-13001] - NullPointer in master logs for table.jsp
    * [HBASE-13003] - Get tests in TestHFileBlockIndex back
    * [HBASE-13004] - Make possible to explain why HBaseTestingUtility.waitFor fails
    * [HBASE-13007] - Fix the test timeouts being caused by ChoreService
    * [HBASE-13009] - HBase REST UI inaccessible
    * [HBASE-13010] - HFileOutputFormat2 partitioner's path is hard-coded as '/tmp'
    * [HBASE-13011] - TestLoadIncrementalHFiles is flakey when using AsyncRpcClient as client implementation
    * [HBASE-13027] - mapreduce.TableInputFormatBase should create its own Connection if needed
    * [HBASE-13030] - [1.0.0 polish] Make ScanMetrics public again and align Put 'add' with Get, Delete, etc., addColumn
    * [HBASE-13032] - Migration of states should be performed once META is assigned and onlined.
    * [HBASE-13036] - Meta scanner should use its own threadpool
    * [HBASE-13038] - Fix the java doc warning continuously reported by Hadoop QA
    * [HBASE-13039] - Add patchprocess/* to .gitignore to fix builds of branches
    * [HBASE-13040] - Possible failure of TestHMasterRPCException
    * [HBASE-13047] - Add "HBase Configuration" link missing on the table details pages
    * [HBASE-13048] - Use hbase.crypto.wal.algorithm in SecureProtobufLogReader while decrypting the data
    * [HBASE-13049] - wal_roll ruby command doesn't work.
    * [HBASE-13050] - Hbase shell create_namespace command throws ArrayIndexOutOfBoundException for (invalid) empty text input.
    * [HBASE-13055] - HRegion FIXED_OVERHEAD missed one boolean
    * [HBASE-13058] - Hbase shell command 'scan' for non existent table shows unnecessary info for one unrelated existent table.
    * [HBASE-13061] - RegionStates can remove wrong region from server holdings
    * [HBASE-13065] - Increasing -Xmx when running TestDistributedLogSplitting
    * [HBASE-13066] - Fix typo in AsyncRpcChannel
    * [HBASE-13069] - Thrift Http Server returns an error code of 500 instead of 401 when authentication fails
    * [HBASE-13070] - Fix TestCacheOnWrite
    * [HBASE-13072] - BucketCache.evictBlock returns true if block does not exist
    * [HBASE-13075] - TableInputFormatBase spuriously warning about multiple initializeTable calls
    * [HBASE-13077] - BoundedCompletionService doesn't pass trace info to server
    * [HBASE-13083] - Master can be dead-locked while assigning META.
    * [HBASE-13084] - Add labels to VisibilityLabelsCache asynchronously causes TestShell flakey
    * [HBASE-13085] - Security issue in the implementation of Rest gataway 'doAs' proxy user support
    * [HBASE-13091] - Split ZK Quorum on Master WebUI
    * [HBASE-13093] - Local mode HBase instance doesn't shut down.
    * [HBASE-13097] - Use same EventLoopGroup for different AsyncRpcClients if possible
    * [HBASE-13102] - Fix Pseudo-distributed Mode which was broken in 1.0.0
    * [HBASE-13111] - truncate_preserve command is failing with undefined method error
    * [HBASE-13112] - quota.rb, security.rb and visibility_labels.rb leak connection
    * [HBASE-13114] - [UNITTEST] TestEnableTableHandler.testDeleteForSureClearsAllTableRowsFromMeta
    * [HBASE-13115] - Fix the usage of remote user in thrift doAs implementation.
    * [HBASE-13119] - FileLink should implement equals
    * [HBASE-13123] - Minor bug in ROW bloom filter
    * [HBASE-13131] - ReplicationAdmin leaks connections if there's an error in the constructor
    * [HBASE-13133] - NPE when running TestSplitLogManager
    * [HBASE-13134] - mutateRow and checkAndMutate apis don't throw region level exceptions
    * [HBASE-13136] - TestSplitLogManager.testGetPreviousRecoveryMode is flakey
    * [HBASE-13139] - Clean up missing JAVA_HOME message in bin/hbase-config.sh
    * [HBASE-13141] - IntegrationTestAcidGuarantees returns incorrect values for getColumnFamilies
    * [HBASE-13145] - TestNamespaceAuditor.testRegionMerge is flaky
    * [HBASE-13146] - Race Condition in ScheduledChore and ChoreService
    * [HBASE-13149] - HBase MR is broken on Hadoop 2.5+ Yarn
    * [HBASE-13155] - Fix TestPrefixTree
    * [HBASE-13156] - Fix minor rat violation recently introduced (asciidoctor.css).
    * [HBASE-13165] - Fix docs and scripts for default max heaps size after HBASE-11804
    * [HBASE-13172] - TestDistributedLogSplitting.testThreeRSAbort fails several times on branch-1
    * [HBASE-13174] - Apply HBASE-11804 to Windows scripts
    * [HBASE-13176] - Flakey TestZooKeeper test.
    * [HBASE-13181] - TestHRegionReplayEvents.testReplayBulkLoadEvent fails frequently.
    * [HBASE-13188] - java.lang.ArithmeticException issue in BoundedByteBufferPool.putBuffer
    * [HBASE-13193] - RegionScannerImpl filters should not be reset if a partial Result is returned
    * [HBASE-13206] - Fix TableLock tableName log format
    * [HBASE-13224] - Minor formatting issue when logging a namespace scope in AuthResult#toContextString
    * [HBASE-13227] - LoadIncrementalHFile should skip non-files inside a possible family-dir
    * [HBASE-13229] - Specify bash for local-regionservers.sh and local-master-backup.sh
    * [HBASE-13232] - ConnectionManger : Batch pool threads and metaLookup pool threads should use different name pattern
    * [HBASE-13239] - HBase grant at specific column level does not work for Groups
    * [HBASE-13242] - TestPerColumnFamilyFlush.testFlushingWhenLogRolling hung
    * [HBASE-13246] - Correct the assertion for namespace permissions in tearDown method of TestAccessController
    * [HBASE-13253] - LoadIncrementalHFiles unify hfiles discovery
    * [HBASE-13262] - ResultScanner doesn't return all rows in Scan
    * [HBASE-13265] - Make thrift2 usable from c++
    * [HBASE-13273] - Make Result.EMPTY_RESULT read-only; currently it can be modified
    * [HBASE-13274] - Fix misplaced deprecation in Delete#addXYZ
    * [HBASE-13275] - Setting hbase.security.authorization to false does not disable authorization
    * [HBASE-13282] - Fix the minor issues of running Canary on kerberized environment
    * [HBASE-13285] - Fix flaky getRegions() in TestAccessController.setUp()
    * [HBASE-13289] - typo in splitSuccessCount  metric
    * [HBASE-13294] - Fix the critical ancient loopholes in security testing infrastructure.
    * [HBASE-13295] - TestInfoServers hang
    * [HBASE-13296] - Fix the deletion of acl notify nodes for namespace.
    * [HBASE-13298] - Clarify if Table.{set|get}WriteBufferSize() is deprecated or not
    * [HBASE-13299] - Add setReturnResults() to Increment, like Append has
    * [HBASE-13301] - Possible memory leak in BucketCache
    * [HBASE-13305] - Get(Get get) is not copying the row key
    * [HBASE-13308] - Fix flaky TestEndToEndSplitTransaction
    * [HBASE-13309] - Some tests do not reset EnvironmentEdgeManager
    * [HBASE-13314] - Fix NPE in HMaster.getClusterStatus()
    * [HBASE-13315] - BufferedMutator should be @InterfaceAudience.Public
    * [HBASE-13317] - Region server reportForDuty stuck looping if there is a master change
    * [HBASE-13321] - Fix flaky TestHBaseFsck
    * [HBASE-13326] - Disabled table can't be enabled after HBase is restarted
    * [HBASE-13328] - LoadIncrementalHFile.doBulkLoad(Path,HTable) should handle managed connections
    * [HBASE-13331] - Exceptions from DFS client can cause CatalogJanitor to delete referenced files
    * [HBASE-13371] - Fix typo in TestAsyncIPC
    * [HBASE-13374] - Small scanners (with particular configurations) do not return all rows
    * [HBASE-13382] - IntegrationTestBigLinkedList should use SecureRandom
    * [HBASE-13384] - Fix Javadoc warnings introduced by HBASE-12972
    * [HBASE-13385] - TestGenerateDelegationToken is broken with hadoop 2.8.0
    * [HBASE-13388] - Handling NullPointer in ZKProcedureMemberRpcs while getting ZNode data
    * [HBASE-13394] - Failed to recreate a table when quota is enabled
    * [HBASE-13397] - Purge duplicate rpc request thread local
    * [HBASE-13402] - [Backport 1.1] HBASE-12552: listSnapshots should list only owned snapshots for non-super user
    * [HBASE-13406] - TestAccessController is flaky when create is slow
    * [HBASE-13409] - Add categories to uncategorized tests
    * [HBASE-13410] - Bug in KeyValueUtil.oswrite() for non Keyvalue cases
    * [HBASE-13414] - TestHCM no longer needs to test for JRE 6.
    * [HBASE-13417] - batchCoprocessorService() does not handle NULL keys
    * [HBASE-13423] - Remove duplicate entry for hbase.regionserver.regionSplitLimit in hbase-default.xml
    * [HBASE-13430] - HFiles that are in use by a table cloned from a snapshot may be deleted when that snapshot is deleted
    * [HBASE-13437] - ThriftServer leaks ZooKeeper connections
    * [HBASE-13457] - SnapshotExistsException doesn't honor the DoNotRetry
    * [HBASE-13460] - Revise the MetaLookupPool executor-related defaults (introduced in HBASE-13036)
    * [HBASE-13463] - Quota needs to be updated only in case of successful region merge
    * [HBASE-13471] - Fix a possible infinite loop in doMiniBatchMutation
    * [HBASE-13473] - deleted cells come back alive after the stripe compaction
    * [HBASE-13475] - Small spelling mistake in region_mover#isSuccessfulScan causes NoMethodError
    * [HBASE-13477] - Create metrics on failed requests
    * [HBASE-13482] - Phoenix is failing to scan tables on secure environments.
    * [HBASE-13490] - foreground daemon start re-executes ulimit output
    * [HBASE-13491] - Issue in FuzzyRowFilter#getNextForFuzzyRule
    * [HBASE-13499] - AsyncRpcClient test cases failure in powerpc
    * [HBASE-13517] - Publish a client artifact with shaded dependencies
    * [HBASE-13520] - NullPointerException in TagRewriteCell
    * [HBASE-13524] - TestReplicationAdmin fails on JDK 1.8
    * [HBASE-13526] - TestRegionServerReportForDuty can be flaky: hang or timeout
    * [HBASE-13527] - The default value for hbase.client.scanner.max.result.size is never actually set on Scans
    * [HBASE-13528] - A bug on selecting compaction pool
    * [HBASE-13546] - NPE on region server status page if all masters are down
    * [HBASE-13555] - StackServlet produces 500 error
    * [HBASE-13575] - TestChoreService has to make sure that the opened ChoreService is closed for each unit test
    * [HBASE-13577] - Documentation is pointing to wrong port for Master Web UI
    * [HBASE-13585] - HRegionFileSystem#splitStoreFile() finishes without closing the file handle in some situation
    * [HBASE-13589] - [WINDOWS] hbase.cmd script is broken
    * [HBASE-13594] - MultiRowRangeFilter shouldn't call HBaseZeroCopyByteString.wrap() directly
    * [HBASE-13596] - src assembly does not build
    * [HBASE-13637] - branch-1.1 does not build against hadoop-2.2.
    * [HBASE-13661] - Correct binary compatibility issues discovered in 1.1.0RC0

** Improvement
    * [HBASE-5699] - Run with > 1 WAL in HRegionServer
    * [HBASE-6919] - Remove unnecessary throws IOException from Bytes.readVLong
    * [HBASE-7541] - Convert all tests that use HBaseTestingUtility.createMultiRegions to HBA.createTable
    * [HBASE-8329] - Limit compaction speed
    * [HBASE-10201] - Port 'Make flush decisions per column family' to trunk
    * [HBASE-11144] - Filter to support scanning multiple row key ranges
    * [HBASE-11864] - Enhance HLogPrettyPrinter to print information from WAL Header
    * [HBASE-11869] - Support snapshot owner
    * [HBASE-12071] - Separate out thread pool for Master <-> RegionServer communication
    * [HBASE-12223] - MultiTableInputFormatBase.getSplits is too slow
    * [HBASE-12405] - WAL accounting by Store
    * [HBASE-12429] - Add port to ClusterManager's actions.
    * [HBASE-12608] - region_mover.rb does not log moving region count correctly when loading regions
    * [HBASE-12620] - Add HBASE-11639 related items to Ref Guide
    * [HBASE-12627] - Add back snapshot batching facility from HBASE-11360 dropped by HBASE-11742
    * [HBASE-12641] - Grant all permissions of hbase zookeeper node to hbase superuser in a secure cluster
    * [HBASE-12684] - Add new AsyncRpcClient
    * [HBASE-12706] - Support multiple port numbers in ZK quorum string
    * [HBASE-12719] - Add test WAL provider to quantify FSHLog overhead in the absence of HDFS.
    * [HBASE-12720] - Make InternalScan LimitedPrivate
    * [HBASE-12736] - Let MetaScanner recycle a given Connection
    * [HBASE-12745] - Visibility Labels:  support visibility labels for user groups.
    * [HBASE-12761] - On region jump ClientScanners should get next row start key instead of a skip.
    * [HBASE-12762] - Region with no hfiles will have the highest locality cost in LocalityCostFunction
    * [HBASE-12768] - Support enable cache_data_on_write in Shell while creating table
    * [HBASE-12825] - CallRunner exception messages should include destination host:port
    * [HBASE-12891] - Parallel execution for Hbck checkRegionConsistency
    * [HBASE-12893] - IntegrationTestBigLinkedListWithVisibility should use buffered writes
    * [HBASE-12899] - HBase should prefix htrace configuration keys with "hbase.htrace" rather than just "hbase."
    * [HBASE-12929] - TableMapReduceUtil.initTableMapperJob unnecessarily limits the types of outputKeyClass and outputValueClass
    * [HBASE-12957] - region_mover#isSuccessfulScan may be extremely slow on region with lots of expired data
    * [HBASE-12973] - RegionCoprocessorEnvironment should provide HRegionInfo directly
    * [HBASE-12975] - Supportable SplitTransaction and RegionMergeTransaction interfaces
    * [HBASE-12979] - Use setters instead of return values for handing back statistics from HRegion methods
    * [HBASE-12982] - Adding timeouts to TestChoreService
    * [HBASE-12987] - HBCK should print status while scanning over many regions
    * [HBASE-12997] - FSHLog should print pipeline on low replication
    * [HBASE-13002] - Make encryption cipher configurable
    * [HBASE-13008] - Better default for hbase.regionserver.regionSplitLimit parameter.
    * [HBASE-13044] - Configuration option for disabling coprocessor loading
    * [HBASE-13054] - Provide more tracing information for locking/latching events.
    * [HBASE-13056] - Refactor table.jsp code to remove repeated code and make it easier to add new checks
    * [HBASE-13059] - Set executable bit for scripts in dev-support
    * [HBASE-13080] - Hbase shell message containing extra quote at the end of error message.
    * [HBASE-13086] - Show ZK root node on Master WebUI
    * [HBASE-13100] - Shell command to retrieve table splits
    * [HBASE-13109] - Make better SEEK vs SKIP decisions during scanning
    * [HBASE-13118] - [PE] Add being able to write many columns
    * [HBASE-13120] - Allow disabling hadoop classpath and native library lookup
    * [HBASE-13122] - Improve efficiency for return codes of some filters
    * [HBASE-13128] - Make HBCK's lock file retry creation and deletion
    * [HBASE-13132] - Improve RemoveColumn action debug message
    * [HBASE-13138] - Clean up TestMasterObserver (debug, trying to figure why fails)
    * [HBASE-13142] - [PERF] Reuse the IPCUtil#buildCellBlock buffer
    * [HBASE-13162] - Add capability for cleaning hbase acls to hbase cleanup script.
    * [HBASE-13168] - Backport HBASE-12590 "A solution for data skew in HBase-Mapreduce Job"
    * [HBASE-13171] - Change AccessControlClient methods to accept connection object to reduce setup time.
    * [HBASE-13183] - Make ZK tickTime configurable in standalone HBase
    * [HBASE-13189] - PrefixTreecell should implement HeapSize
    * [HBASE-13216] - Add version info in RPC connection header
    * [HBASE-13222] - Provide means of non-destructive balancer inspection
    * [HBASE-13223] - Add testMoveMeta to IntegrationTestMTTR
    * [HBASE-13235] - Revisit the security auditing semantics.
    * [HBASE-13236] - Clean up m2e-related warnings/errors from poms
    * [HBASE-13241] - Add tests for group level grants
    * [HBASE-13255] - Bad grammar in RegionServer status page
    * [HBASE-13256] - HBaseConfiguration#checkDefaultsVersion(Configuration) has spelling error
    * [HBASE-13270] - Setter for Result#getStats is #addResults; confusing!
    * [HBASE-13316] - Reduce the downtime on planned moves of regions
    * [HBASE-13342] - Fix incorrect interface annotations
    * [HBASE-13345] - Fix LocalHBaseCluster so that different region server impl can be used for different slaves
    * [HBASE-13350] - Add a debug-warn if we fail HTD checks even if table.sanity.checks is false
    * [HBASE-13351] - Annotate internal MasterRpcServices methods with admin priority
    * [HBASE-13362] - Set max result size from client only (like scanner caching).
    * [HBASE-13369] - Expose scanNext stats to region server level
    * [HBASE-13370] - PE tool could give option for using Explicit Column Tracker which leads to seeks
    * [HBASE-13381] - Expand TestSizeFailures to include small scans
    * [HBASE-13419] - Thrift gateway should propagate text from exception causes.
    * [HBASE-13431] - Allow to skip store file range check based on column family while creating reference files in HRegionFileSystem#splitStoreFile
    * [HBASE-13436] - Include user name in ADE for scans
    * [HBASE-13453] - Master should not bind to region server ports
    * [HBASE-13456] - Improve HFilePrettyPrinter first hbase:meta region processing
    * [HBASE-13516] - Increase PermSize to 128MB
    * [HBASE-13518] - Typo in hbase.hconnection.meta.lookup.threads.core parameter
    * [HBASE-13550] - [Shell] Support unset of a list of table attributes
    * [HBASE-13552] - ChoreService shutdown message could be more informative
    * [HBASE-13578] - Remove Arrays.asList().subList() from FSHLog.offer()

** New Feature
    * [HBASE-9531] - a command line (hbase shell) interface to retreive the replication metrics and show replication lag
    * [HBASE-12268] - Add support for Scan.setRowPrefixFilter to shell
    * [HBASE-12709] - [mvn] Add unit test excludes command line flag to the build.
    * [HBASE-12731] - Heap occupancy based client pushback
    * [HBASE-12869] - Add a REST API implementation of the ClusterManager interface
    * [HBASE-12972] - Region, a supportable public/evolving subset of HRegion
    * [HBASE-13057] - Provide client utility to easily enable and disable table replication
    * [HBASE-13063] - Allow to turn off memstore replication for region replicas
    * [HBASE-13090] - Progress heartbeats for long running scanners
    * [HBASE-13170] - Allow block cache to be external
    * [HBASE-13412] - Region split decisions should have jitter

** Task
    * [HBASE-9604] - Add metric on short-circuit reads
    * [HBASE-12180] - Fix and reenable TestRegionReplicaReplicationEndpoint
    * [HBASE-12700] - Backport 'Make flush decisions per column family' from master
    * [HBASE-12783] - Create efficient RegionLocator implementation
    * [HBASE-12785] - Use FutureTask to timeout the attempt to get the lock for hbck
    * [HBASE-12788] - Promote Abortable to LimitedPrivate
    * [HBASE-12834] - Promote ScanType to LimitedPrivate
    * [HBASE-12995] - Document that HConnection#getTable methods do not check table existence since 0.98.1
    * [HBASE-13187] - Add ITBLL that exercises per CF flush
    * [HBASE-13205] - [branch-1] Backport HBASE-11598 Add simple rpc throttling
    * [HBASE-13380] - Cherry pick the HBASE-12808 compatibility checker tool back to 0.98+
    * [HBASE-13438] - [branch-1] Backport Basic quota support for namespaces
    * [HBASE-13584] - Disable distributed log replay by default for 1.1
    * [HBASE-13665] - Fix docs and site building on branch-1

** Test
    * [HBASE-7781] - Update security unit tests to use a KDC if available
    * [HBASE-12764] - TestPerColumnFamilyFlush#testCompareStoreFileCount may fail due to new table not available
    * [HBASE-12799] - ITAG fails with java.lang.RuntimeException if table does not exist
    * [HBASE-12876] - TestScannerWithBulkload should pass Table with unmanaged connection to LoadIncrementalHFiles#doBulkLoad()
    * [HBASE-12885] - Unit test for RAW / VERSIONS scanner specifications
    * [HBASE-12992] - TestChoreService doesn't close services, that can break test on slow virtual hosts.
    * [HBASE-13106] - Ensure endpoint-only table coprocessors can be dynamically loaded
    * [HBASE-13179] - TestMasterObserver deleteTable is flaky
    * [HBASE-13182] - Test NamespaceAuditor/AccessController create/delete table is flaky
    * [HBASE-13280] - TestSecureRPC failed
    * [HBASE-13413] - Create an integration test for Replication

Release Notes - HBase - Version 1.0.0 02/20/2015

** Sub-task
    * [HBASE-11852] - Still see "UnsupportedOperationException: CollectionUsage threshold is not supported"
    * [HBASE-12485] - Maintain SeqId monotonically increasing
    * [HBASE-12511] - namespace permissions - add support from table creation privilege in a namespace 'C'
    * [HBASE-12568] - Adopt Semantic Versioning and document it in the book
    * [HBASE-12575] - Sanity check table coprocessor classes are loadable
    * [HBASE-12606] - Sanity check encryption configuration before opening WAL or onlining regions
    * [HBASE-12679] - Add HBaseInterfaceAudience.TOOLS and move some of the Public classes to LimitedPrivate
    * [HBASE-12704] - Add demo client which uses doAs functionality on Thrift-over-HTTPS.
    * [HBASE-12730] - Backport HBASE-5162 (Basic client pushback mechanism) to branch-1
    * [HBASE-12735] - Refactor TAG so it can live as unit test and as an integration test
    * [HBASE-12763] - Make it so there must be WALs for a server to be marked dead
    * [HBASE-12776] - SpliTransaction: Log number of files to be split
    * [HBASE-12779] - SplitTransaction: Add metrics
    * [HBASE-12793] - [hbck] closeRegionSilentlyAndWait() should log cause of IOException and retry until  hbase.hbck.close.timeout expires
    * [HBASE-12802] - Remove unnecessary Table.flushCommits()
    * [HBASE-12926] - Backport HBASE-12688 (Update site with a bootstrap-based UI) for HBASE-12918
    * [HBASE-12980] - Delete of a table may not clean all rows from hbase:meta

** Bug
    * [HBASE-8026] - HBase Shell docs for scan command does not reference VERSIONS
    * [HBASE-9431] - Set  'hbase.bulkload.retries.number' to 10 as HBASE-8450 claims
    * [HBASE-9910] - TestHFilePerformance and HFilePerformanceEvaluation should be merged in a single HFile performance test class.
    * [HBASE-10499] - In write heavy scenario one of the regions does not get flushed causing RegionTooBusyException
    * [HBASE-10528] - DefaultBalancer selects plans to move regions onto draining nodes
    * [HBASE-11979] - Compaction progress reporting is wrong
    * [HBASE-12028] - Abort the RegionServer, when it's handler threads die
    * [HBASE-12070] - Add an option to hbck to fix ZK inconsistencies
    * [HBASE-12108] - HBaseConfiguration: set classloader before loading xml files
    * [HBASE-12267] - Replace HTable constructor in mapreduce.* classes with ConnectionFactory
    * [HBASE-12270] - A bug in the bucket cache, with cache blocks on write enabled
    * [HBASE-12339] - WAL performance evaluation tool doesn't roll logs
    * [HBASE-12348] - preModifyColumn and preDeleteColumn in AC denies user to perform its operation though it has required rights
    * [HBASE-12393] - The regionserver web will throw exception if we disable block cache
    * [HBASE-12422] - Use ConnectionFactory in HTable constructors
    * [HBASE-12431] - Use of getColumnLatestCell(byte[], int, int, byte[], int, int) is Not Thread Safe
    * [HBASE-12454] - Setting didPerformCompaction early in HRegion#compact
    * [HBASE-12467] - Master joins cluster but never completes initialization
    * [HBASE-12480] - Regions in FAILED_OPEN/FAILED_CLOSE should be processed on master failover
    * [HBASE-12564] - consolidate the getTableDescriptors() semantic
    * [HBASE-12565] - Race condition in HRegion.batchMutate()  causes partial data to be written when region closes
    * [HBASE-12574] - Update replication metrics to not do so many map look ups.
    * [HBASE-12585] - Fix refguide so it does hbase 1.0 style API everywhere with callout on how we used to do it in pre-1.0
    * [HBASE-12607] - TestHBaseFsck#testParallelHbck fails running against hadoop 2.6.0
    * [HBASE-12611] - Create autoCommit() method and remove clearBufferOnFail
    * [HBASE-12617] - Running IntegrationTestBigLinkedList against cluster getting not an instance of org.apache.hadoop.hbase.MiniHBaseCluster
    * [HBASE-12618] - Add 'Namespace' to headers while displaying user permissions.
    * [HBASE-12622] - user_permission should require global admin to display global and ns permissions
    * [HBASE-12632] - ThrottledInputStream/ExportSnapshot does not throttle
    * [HBASE-12634] -  Fix the AccessController#requireGlobalPermission(ns) with NS
    * [HBASE-12635] - Delete acl notify znode of table after the table is deleted
    * [HBASE-12637] - Compilation with Hadoop-2.4- is broken
    * [HBASE-12642] - LoadIncrementalHFiles does not throw exception after hitting hbase.bulkload.retries.number setting
    * [HBASE-12644] - Visibility Labels: issue with storing super users in labels table
    * [HBASE-12647] - Truncate table should work with C as well
    * [HBASE-12652] - Allow unmanaged connections in MetaTableAccessor
    * [HBASE-12655] - WALPerformanceEvaluation miscalculates append/sync statistics for multiple regions
    * [HBASE-12661] - rat check fails for several files
    * [HBASE-12662] - region_status.rb is failing with NoMethodError
    * [HBASE-12663] - unify getTableDescriptors() and listTableDescriptorsByNamespace()
    * [HBASE-12664] - TestDefaultLoadBalancer.testBalanceCluster fails in CachedDNSToSwitchMapping
    * [HBASE-12665] - When aborting, dump metrics
    * [HBASE-12666] - TestAssignmentManager hanging; add timeouts
    * [HBASE-12671] - HBASE-12652 broke branch-1 builds (TestAssignmentManager fails)
    * [HBASE-12674] - Add permission check to getNamespaceDescriptor()
    * [HBASE-12675] - Use interface methods in shell scripts
    * [HBASE-12681] - truncate_preserve command fails with undefined method `getTable' error
    * [HBASE-12683] - Compilation with hadoop-2.7.0-SNAPSHOT is broken
    * [HBASE-12686] - Failures in split before PONR not clearing the daughter regions from regions in transition during rollback
    * [HBASE-12692] - NPE from SnapshotManager#stop
    * [HBASE-12694] - testTableExistsIfTheSpecifiedTableRegionIsSplitParent in TestSplitTransactionOnCluster class leaves regions in transition
    * [HBASE-12696] - Possible NPE in HRegionFileSystem#splitStoreFile when skipStoreFileRangeCheck in splitPolicy return true
    * [HBASE-12697] - Don't use RegionLocationFinder if localityCost == 0
    * [HBASE-12699] - undefined method `setAsyncLogFlush' exception thrown when setting DEFERRED_LOG_FLUSH=>true
    * [HBASE-12711] - Fix new findbugs warnings in hbase-thrift module
    * [HBASE-12715] - getLastSequenceId always returns -1
    * [HBASE-12716] - A bug in RegionSplitter.UniformSplit algorithm
    * [HBASE-12718] - Convert TestAcidGuarantees from a unit test to an integration test
    * [HBASE-12728] - buffered writes substantially less useful after removal of HTablePool
    * [HBASE-12732] - Log messages in FileLink$FileLinkInputStream#tryOpen are reversed
    * [HBASE-12739] - Avoid too large identifier of ZooKeeperWatcher
    * [HBASE-12740] - Improve performance of TestHBaseFsck
    * [HBASE-12741] - AccessController contains a javadoc issue
    * [HBASE-12742] - ClusterStatusPublisher crashes with a IPv6 network interface.
    * [HBASE-12744] - hbase-default.xml lists hbase.regionserver.global.memstore.size twice
    * [HBASE-12746] - [1.0.0RC0] Distributed Log Replay is on (HBASE-12577 was insufficient)
    * [HBASE-12747] - IntegrationTestMTTR will OOME if launched with mvn verify
    * [HBASE-12750] - getRequestsCount() in ClusterStatus returns total number of request
    * [HBASE-12767] - Fix a StoreFileScanner NPE in reverse scan flow
    * [HBASE-12771] - TestFailFast#testFastFail failing
    * [HBASE-12774] - Fix the inconsistent permission checks for bulkloading.
    * [HBASE-12781] - thrift2 listen port will bind always to the passed command line address
    * [HBASE-12782] - ITBLL fails for me if generator does anything but 5M per maptask
    * [HBASE-12791] - HBase does not attempt to clean up an aborted split when the regionserver shutting down
    * [HBASE-12798] - Map Reduce jobs should not create Tables in setConf()
    * [HBASE-12801] - Failed to truncate a table while maintaing binary region boundaries
    * [HBASE-12804] - ImportTsv fails to delete partition files created by it
    * [HBASE-12810] - Update to htrace-incubating
    * [HBASE-12811] - [AccessController] NPE while scanning a table with user not having READ permission on the namespace
    * [HBASE-12817] - Data missing while scanning using PREFIX_TREE data block encoding
    * [HBASE-12819] - ExportSnapshot doesn't close FileSystem instances
    * [HBASE-12824] - CompressionTest fails with org.apache.hadoop.hbase.io.hfile.AbstractHFileReader$NotSeekedException: Not seeked to a key/value
    * [HBASE-12831] - Changing the set of vis labels a user has access to doesn't generate an audit log event
    * [HBASE-12832] - Describe table from shell no longer shows Table's attributes, only CF attributes
    * [HBASE-12833] - [shell] table.rb leaks connections
    * [HBASE-12835] - HBASE-12422 changed new HTable(Configuration) to not use managed Connections anymore
    * [HBASE-12837] - ReplicationAdmin leaks zk connections
    * [HBASE-12844] - ServerManager.isServerReacable() should sleep between retries
    * [HBASE-12847] - TestZKLessSplitOnCluster frequently times out in 0.98 builds
    * [HBASE-12862] - Uppercase "wals" in RegionServer webUI
    * [HBASE-12863] - Master info port on RS UI is always 0
    * [HBASE-12864] - IntegrationTestTableSnapshotInputFormat fails
    * [HBASE-12874] - LoadIncrementalHFiles should use unmanaged connection
    * [HBASE-12878] - Incorrect HFile path in TestHFilePerformance print output (fix for easier debugging)
    * [HBASE-12881] - TestFastFail is not compatible with surefire.rerunFailingTestsCount
    * [HBASE-12886] - Correct tag option name in PerformanceEvaluation
    * [HBASE-12892] - Add a class to allow taking a snapshot from the command line
    * [HBASE-12897] - Minimum memstore size is a percentage
    * [HBASE-12898] - Add in used undeclared dependencies
    * [HBASE-12901] - Possible deadlock while onlining a region and get region plan for other region run parallel
    * [HBASE-12904] - Threading issues in region_mover.rb
    * [HBASE-12915] - Disallow small scan with batching
    * [HBASE-12916] - No access control for replicating WAL entries
    * [HBASE-12917] - HFilePerformanceEvaluation Scan tests fail with StackOverflowError due to recursive call in createCell function
    * [HBASE-12918] - Backport asciidoc changes
    * [HBASE-12919] - Compilation with Hadoop-2.4- is broken again
    * [HBASE-12925] - Use acl cache for doing access control checks in prepare and clean phases of Bulkloading.
    * [HBASE-12942] - After disabling the hfile block cache, Regionserver UI is throwing java.lang.NullPointerException
    * [HBASE-12956] - Binding to 0.0.0.0 is broken after HBASE-10569
    * [HBASE-12958] - SSH doing hbase:meta get but hbase:meta not assigned
    * [HBASE-12962] - TestHFileBlockIndex.testBlockIndex() commented out during HBASE-10531
    * [HBASE-12966] - NPE in HMaster while recovering tables in Enabling state
    * [HBASE-12971] - Replication stuck due to large default value for replication.source.maxretriesmultiplier
    * [HBASE-12976] - Set default value for hbase.client.scanner.max.result.size
    * [HBASE-12978] - Region goes permanently offline (WAS: hbase:meta has a row missing hregioninfo and it causes my long-running job to fail)
    * [HBASE-12984] - SSL cannot be used by the InfoPort after removing deprecated code in HBASE-10336
    * [HBASE-12985] - Javadoc warning and findbugs fixes to get us green again
    * [HBASE-12989] - region_mover.rb unloadRegions method uses ArrayList concurrently resulting in errors
    * [HBASE-12991] - Use HBase 1.0 interfaces in hbase-rest
    * [HBASE-12996] - Reversed field on Filter should be transient
    * [HBASE-12998] - Compilation with Hdfs-2.7.0-SNAPSHOT is broken after HDFS-7647
    * [HBASE-13003] - Get tests in TestHFileBlockIndex back
    * [HBASE-13009] - HBase REST UI inaccessible
    * [HBASE-13010] - HFileOutputFormat2 partitioner's path is hard-coded as '/tmp'
    * [HBASE-13026] - Wrong error message in case incorrect snapshot name OR Incorrect table name
    * [HBASE-13027] - mapreduce.TableInputFormatBase should create its own Connection if needed
    * [HBASE-13028] - Cleanup mapreduce API changes
    * [HBASE-13030] - [1.0.0 polish] Make ScanMetrics public again and align Put 'add' with Get, Delete, etc., addColumn
    * [HBASE-13037] - LoadIncrementalHFile should try to verify the content of unmatched families
    * [HBASE-13038] - Fix the java doc warning continuously reported by Hadoop QA
    * [HBASE-13039] - Add patchprocess/* to .gitignore to fix builds of branches

** Improvement
    * [HBASE-5699] - Run with > 1 WAL in HRegionServer
    * [HBASE-11195] - Potentially improve block locality during major compaction for old regions
    * [HBASE-11412] - Minimize a number of hbase-client transitive dependencies
    * [HBASE-11639] - [Visibility controller] Replicate the visibility of Cells as strings
    * [HBASE-12071] - Separate out thread pool for Master <-> RegionServer communication
    * [HBASE-12121] - maven release plugin does not allow for customized goals
    * [HBASE-12204] - Backport HBASE-12016 'Reduce number of versions in Meta table. Make it configurable' to branch-1
    * [HBASE-12373] - Provide a command to list visibility labels
    * [HBASE-12583] - Allow creating reference files even the split row not lies in the storefile range if required
    * [HBASE-12597] - Add RpcClient interface and enable changing of RpcClient implementation
    * [HBASE-12608] - region_mover.rb does not log moving region count correctly when loading regions
    * [HBASE-12630] - Provide capability for dropping malfunctioning ConfigurationObserver automatically
    * [HBASE-12640] - Add Thrift-over-HTTPS and doAs support for Thrift Server
    * [HBASE-12641] - Grant all permissions of hbase zookeeper node to hbase superuser in a secure cluster
    * [HBASE-12651] - Backport HBASE-12559 'Provide LoadBalancer with online configuration capability' to branch-1
    * [HBASE-12653] - Move TestRegionServerOnlineConfigChange & TestConfigurationManager to Junit4 tests
    * [HBASE-12659] - Replace the method calls to grant and revoke in shell scripts with AccessControlClient
    * [HBASE-12668] - Adapt PayloadCarryingRpcController so it can also be used in async way
    * [HBASE-12676] - Fix the misleading ASCII art in IntegrationTestBigLinkedList
    * [HBASE-12678] - HBCK should print command line arguments
    * [HBASE-12680] - Refactor base ClusterManager in HBase to not have the notion of sending a signal.
    * [HBASE-12719] - Add test WAL provider to quantify FSHLog overhead in the absence of HDFS.
    * [HBASE-12720] - Make InternalScan LimitedPrivate
    * [HBASE-12736] - Let MetaScanner recycle a given Connection
    * [HBASE-12745] - Visibility Labels:  support visibility labels for user groups.
    * [HBASE-12762] - Region with no hfiles will have the highest locality cost in LocalityCostFunction
    * [HBASE-12768] - Support enable cache_data_on_write in Shell while creating table
    * [HBASE-12773] - Add warning message when user is trying to bulkload a large HFile.
    * [HBASE-12825] - CallRunner exception messages should include destination host:port
    * [HBASE-12893] - IntegrationTestBigLinkedListWithVisibility should use buffered writes
    * [HBASE-12899] - HBase should prefix htrace configuration keys with "hbase.htrace" rather than just "hbase."
    * [HBASE-12929] - TableMapReduceUtil.initTableMapperJob unnecessarily limits the types of outputKeyClass and outputValueClass
    * [HBASE-12973] - RegionCoprocessorEnvironment should provide HRegionInfo directly
    * [HBASE-12979] - Use setters instead of return values for handing back statistics from HRegion methods
    * [HBASE-12997] - FSHLog should print pipeline on low replication
    * [HBASE-13008] - Better default for hbase.regionserver.regionSplitLimit parameter.

** New Feature
    * [HBASE-9531] - a command line (hbase shell) interface to retreive the replication metrics and show replication lag
    * [HBASE-10560] - Per cell TTLs
    * [HBASE-12709] - [mvn] Add unit test excludes command line flag to the build.
    * [HBASE-12731] - Heap occupancy based client pushback

** Task
    * [HBASE-12493] - User class should provide a way to re-use existing token
    * [HBASE-12567] - Track remaining issues for HBase-1.0
    * [HBASE-12624] - Remove rename_snapshot.rb from code as there is no equivalent renameSnapshot api in Admin class
    * [HBASE-12625] - Deprecate certain methods in classes annotated with InterfaceAudience.Public in branch-1
    * [HBASE-12689] - Move version on from 0.99.2 to HBASE-1.0.0-SNAPSHOT
    * [HBASE-12724] - Upgrade the interface audience of RegionScanner from Private to LimitedPrivate
    * [HBASE-12726] - Backport to branch-1.0 addendum for "Minimize a number of hbase-client transitive dependencies"
    * [HBASE-12788] - Promote Abortable to LimitedPrivate
    * [HBASE-12834] - Promote ScanType to LimitedPrivate

** Test
    * [HBASE-12163] - Move test annotation classes to the same package as in master
    * [HBASE-12645] - HBaseTestingUtility is using ${$HOME} for rootDir
    * [HBASE-12685] - TestSplitLogManager#testLogFilesAreArchived sometimes times out due to race condition
    * [HBASE-12799] - ITAG fails with java.lang.RuntimeException if table does not exist
    * [HBASE-12885] - Unit test for RAW / VERSIONS scanner specifications

