HBase Change Log

Release Notes - HBase - Version 1.4.11

** 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-23101] - Backport HBASE-22380 to branch-1
    * [HBASE-23110] - Backport HBASE-23054 "Remove synchronization block from MetaTableMetrics and fix LossyCounting algorithm" to branch-1

** Bug
    * [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-22559] - [RPC] set guard against CALL_QUEUE_HANDLER_FACTOR_CONF_KEY
    * [HBASE-22562] - PressureAwareThroughputController#skipControl never invoked
    * [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-22629] - Remove TestReplicationDroppedTables from branch-1
    * [HBASE-22637] - fix flaky TestMetaTableMetrics test
    * [HBASE-22649] - Encode StoreFile path URLs in the UI to handle scenarios where CF contains special characters (like # etc.)
    * [HBASE-22653] - Do not run errorProne on JDK7
    * [HBASE-22654] - apache-rat complains on branch-1
    * [HBASE-22656] - [Metrics]  Tabe metrics 'BatchPut' and 'BatchDelete' are never updated
    * [HBASE-22658] - region_mover.rb  should choose same rsgroup servers as target servers
    * [HBASE-22686] - ZkSplitLogWorkerCoordination doesn't allow a regionserver to pick up all of the split work it is capable of
    * [HBASE-22715] - All scan requests should be handled by scan handler threads in RWQueueRpcExecutor
    * [HBASE-22720] - Incorrect link for hbase.unittests
    * [HBASE-22730] - XML Parsing error on branch-1
    * [HBASE-22735] - list_regions may throw an error if a region is RIT
    * [HBASE-22773] - when set blockSize option in Performance Evaluation tool, error occurs:ERROR: Unrecognized option/command: --blockSize=131072
    * [HBASE-22774] - [WAL] RegionGroupingStrategy loses its function after split
    * [HBASE-22784] - OldWALs not cleared in a replication slave cluster (cyclic replication bw 2 clusters)
    * [HBASE-22801] - Maven build issue on Github PRs
    * [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-23007] - UnsatisfiedLinkError when using hbase-shaded packages under linux
    * [HBASE-23015] - Replace Jackson with relocated gson everywhere but hbase-rest
    * [HBASE-23019] - Handle --skip-errorprone on branch-1
    * [HBASE-23056] - Block count is 0 when BucketCache using persistent IOEngine and retrieve from file
    * [HBASE-23086] - TestShell failing on branch-1 and branch-1.4
    * [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
    * [HBASE-23153] - PrimaryRegionCountSkewCostFunction SLB function should implement CostFunction#isNeeded

** New Feature
    * [HBASE-15666] - shaded dependencies for hbase-testing-util

** 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-22596] - [Chore] Separate the execution period between CompactionChecker and PeriodicMemStoreFlusher
    * [HBASE-22604] - fix the link in the docs to "Understanding HBase and BigTable" by Jim R. Wilson
    * [HBASE-22610] - [BucketCache] Rename "hbase.offheapcache.minblocksize"
    * [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-22702] - [Log] 'Group not found for table' is chatty
    * [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-22880] - [Backport] HBASE-22871 to branch-1
    * [HBASE-22890] - Verify the files when RegionServer is starting and BucketCache is in file mode
    * [HBASE-22912] - [Backport] HBASE-22867 to branch-1 to avoid ForkJoinPool to spawn thousands of threads
    * [HBASE-22930] - Set unique name to longCompactions/shortCompactions threads
    * [HBASE-22975] - Add read and write QPS metrics at server level and table level
    * [HBASE-23058] - Should be "Column Family Name" in table.jsp
    * [HBASE-23114] - Use archiveArtifacts in Jenkinsfiles
    * [HBASE-23116] - LoadBalancer should log table name when balancing per table
    * [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

** Wish
    * [HBASE-22833] - MultiRowRangeFilter should provide a method for creating a filter which is functionally equivalent to multiple prefix filters

** Task
    * [HBASE-19230] - Write up fixVersion policy from dev discussion in refguide
    * [HBASE-21606] - Document use of the meta table load metrics added in HBASE-19722
    * [HBASE-22911] - fewer concurrent github PR builds
    * [HBASE-22913] - Use Hadoop label for nightly builds
    * [HBASE-22991] - Release 1.4.11
    * [HBASE-23023] - upgrade shellcheck used to test in nightly and precommit
    * [HBASE-23053] - Disable concurrent nightly builds


Release Notes - HBase - Version 1.4.10 6/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-21632] - Backport to branch-1 HBASE-21620 Problem in scan query when using more than one column prefix filter in some cases.
    * [HBASE-21711] - Remove references to git.apache.org/hbase.git
    * [HBASE-21734] - Some optimization in FilterListWithOR
    * [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
    * [HBASE-22215] - Backport MultiRowRangeFilter does not work with reverse scans
    * [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
    * [HBASE-22507] - Backport the pre commit changes in HBASE-22500 to all active branches

** Bug
    * [HBASE-20851] - Change rubocop config for max line length of 100
    * [HBASE-20911] - correct Swtich/case indentation in formatter template for eclipse
    * [HBASE-20912] - Add import order config in dev support for eclipse
    * [HBASE-21048] - Get LogLevel is not working from console in secure environment
    * [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-21553] - schedLock not released in MasterProcedureScheduler
    * [HBASE-21582] - If call HBaseAdmin#snapshotAsync but forget call isSnapshotFinished, then SnapshotHFileCleaner will skip to run every time
    * [HBASE-21592] - quota.addGetResult(r)  throw  NPE
    * [HBASE-21618] - Scan with the same startRow(inclusive=true) and stopRow(inclusive=false) returns one result
    * [HBASE-21766] - TestSimpleRpcScheduler is flaky (branch-1)
    * [HBASE-21781] - list_deadservers elapsed time is incorrect
    * [HBASE-21800] - RegionServer aborted due to NPE from MetaTableMetrics coprocessor
    * [HBASE-21915] - FileLink$FileLinkInputStream doesn't implement CanUnbuffer
    * [HBASE-21920] - Ignoring 'empty' end_key while calculating end_key for new region in HBCK -fixHdfsOverlaps command can cause data loss
    * [HBASE-21959] - CompactionTool should close the store it uses for compacting files, in order to properly archive compacted files.
    * [HBASE-21991] - Fix MetaMetrics issues - [Race condition, Faulty remove logic], few improvements
    * [HBASE-22045] - Mutable range histogram reports incorrect outliers
    * [HBASE-22058] - upgrade thrift dependency to 0.9.3.1 on  branches 1.4, 1.3 and 1.2
    * [HBASE-22062] - Backport HBASE-20917 addendum to branch-1 & branch-1.4
    * [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
    * [HBASE-22212] - [1.x] Backport missing filter improvements
    * [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-22274] - Cell size limit check on append should consider cell's previous size.
    * [HBASE-22310] - checkAndMutate used an incorrect row to check the condition
    * [HBASE-22389] - Revert HBASE-19275 TestSnapshotFileCache never worked properly on branch-1
    * [HBASE-22390] - backport HBASE-22190 to branch-1
    * [HBASE-22391] - Fix flaky tests from TestFromClientSide
    * [HBASE-22421] - branch-1 docker mode for yetus fails
    * [HBASE-22448] - Scan is slow for Multiple Column prefixes
    * [HBASE-22451] - TestLoadIncrementalHFiles and TestSecureLoadIncrementalHFiles are flaky
    * [HBASE-22462] - Should run a 'mvn install' at the end of hadoop check in pre commit job
    * [HBASE-22487] - getMostLoadedRegions is unused
    * [HBASE-22509] - Address findbugs/spotbugs complaints (branch-1.4) 
    * [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
    * [HBASE-21926] - Profiler servlet
    * [HBASE-22184] - [security] Support get|set LogLevel in HTTPS mode

** Improvement
    * [HBASE-20047] - AuthenticationTokenIdentifier should provide a toString
    * [HBASE-20305] - Add option to SyncTable that skip deletes on target cluster
    * [HBASE-20586] - SyncTable tool: Add support for cross-realm remote clusters
    * [HBASE-20672] - New metrics ReadRequestRate and WriteRequestRate
    * [HBASE-20858] - port HBASE-20695 to branch-1
    * [HBASE-21520] - TestMultiColumnScanner cost long time when using ROWCOL bloom type
    * [HBASE-21567] - Allow overriding configs starting up the shell
    * [HBASE-21590] - Optimize trySkipToNextColumn in StoreScanner a bit
    * [HBASE-21645] - Perform sanity check and disallow table creation/modification with region replication < 1
    * [HBASE-21784] - Dump replication queue should show list of wal files ordered chronologically
    * [HBASE-21818] - Incorrect list item in javadoc
    * [HBASE-22219] - Backport HBASE-19049 to branch-1 to prevent DIRKRB-613 
    * [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

** 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
    * [HBASE-21884] - Fix box/unbox findbugs warning in secure bulk load
    * [HBASE-22020] - upgrade to yetus 0.9.0
    * [HBASE-22375] - Promote AccessChecker to LimitedPrivate(Coprocessor)
    * [HBASE-22449] - https everywhere in Maven metadata


Release Notes - HBase - Version 1.4.9 12/7/2018

** Sub-task
    * [HBASE-21347] - Backport HBASE-21200 "Memstore flush doesn't finish because of seekToPreviousRow() in memstore scanner." to branch-1
    * [HBASE-21473] - RowIndexSeekerV1 may return cell with extra two \x00\x00 bytes which has no tags

** Bug
    * [HBASE-20604] - ProtobufLogReader#readNext can incorrectly loop to the same position in the stream until the the WAL is rolled
    * [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-21424] - Change flakies and nightlies so scheduled less often
    * [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-21464] - Splitting blocked with meta NSRE during split transaction
    * [HBASE-21504] - If enable FIFOCompactionPolicy, a compaction may write a "empty" hfile whose maxTimeStamp is long max. This kind of hfile will never be archived.
    * [HBASE-21546] - ConnectException in TestThriftHttpServer

** Improvement
    * [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

** Task
    * [HBASE-21265] - Split up TestRSGroups


Release Notes - HBase - Version 1.4.8 10/8/2018

** Sub-task
    * [HBASE-19275] - TestSnapshotFileCache never worked properly
    * [HBASE-20317] - Backport HBASE-20261 "Table page (table.jsp) in Master UI does not show replicaIds for hbase meta table" to branch-1
    * [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

** Bug
    * [HBASE-18451] - PeriodicMemstoreFlusher should inspect the queue before adding a delayed flush request
    * [HBASE-18549] - Unclaimed replication queues can go undetected
    * [HBASE-19418] - RANGE_OF_DELAY in PeriodicMemstoreFlusher should be configurable.
    * [HBASE-20307] - LoadTestTool prints too much zookeeper logging
    * [HBASE-20704] - Sometimes some compacted storefiles are not archived on region close
    * [HBASE-20766] - Verify Replication Tool Has Typo "remove cluster"
    * [HBASE-21030] - Correct javadoc for append operation
    * [HBASE-21088] - HStoreFile should be closed in HStore#hasReferences
    * [HBASE-21117] - Backport HBASE-18350  (fix RSGroups)  to branch-1 (Only port the part fixing table locking issue.)
    * [HBASE-21127] - TableRecordReader need to handle cursor result too
    * [HBASE-21158] - Empty qualifier cell is always returned when using QualifierFilter
    * [HBASE-21162] - Revert suspicious change to BoundedByteBufferPool and disable use of direct buffers for IPC reservoir by default
    * [HBASE-21166] - Creating a CoprocessorHConnection re-retrieves the cluster id from ZK
    * [HBASE-21173] - Remove the duplicate HRegion#close in TestHRegion
    * [HBASE-21174] - [REST] Failed to parse empty qualifier in TableResource#getScanResource
    * [HBASE-21179] - Fix the number of actions in responseTooSlow log
    * [HBASE-21203] - TestZKMainServer#testCommandLineWorks won't pass with default 4lw whitelist
    * [HBASE-21206] - Scan with batch size may return incomplete cells
    * [HBASE-21212] - Wrong flush time when update flush metric
    * [HBASE-21228] - Memory leak since AbstractFSWAL caches Thread object and never clean later

** Improvement
    * [HBASE-20734] - Colocate recovered edits directory with hbase.wal.dir
    * [HBASE-20857] - JMX - add Balancer status = enabled / disabled
    * [HBASE-21147] - (1.4) Add ability for HBase Canary to ignore a configurable number of ZooKeeper down nodes
    * [HBASE-21207] - Add client side sorting functionality in master web UI for table and region server details.

** Test
    * [HBASE-21138] - Close HRegion instance at the end of every test in TestHRegion
    * [HBASE-21258] - Add resetting of flags for RS Group pre/post hooks in TestRSGroups
    * [HBASE-21261] - Add log4j.properties for hbase-rsgroup tests

** Task
    * [HBASE-21168] - BloomFilterUtil uses hardcoded randomness


Release Notes - HBase - Version 1.4.7 9/3/2018

** Sub-task
    * [HBASE-20896] - Port HBASE-20866 to branch-1 and branch-1.4 
    * [HBASE-20974] - Backport HBASE-20583 (SplitLogWorker should handle FileNotFoundException when split a wal) to branch-1

** Bug
    * [HBASE-20890] - PE filterScan seems to be stuck forever
    * [HBASE-20895] - NPE in RpcServer#readAndProcess
    * [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-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-21069] - NPE in StoreScanner.updateReaders causes RS to crash 
    * [HBASE-21074] - JDK7 branches need to pass "-Dhttps.protocols=TLSv1.2" to maven when building

** Improvement
    * [HBASE-20387] - flaky infrastructure should work for all branches
    * [HBASE-20469] - Directory used for sidelining old recovered edits files should be made configurable
    * [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

** Test
    * [HBASE-21076] - TestTableResource fails with NPE

** Task
    * [HBASE-20942] - Improve RpcServer TRACE logging


Release Notes - HBase - Version 1.4.6 7/30/2018

** Sub-task
    * [HBASE-19722] - Meta query statistics metrics source
    * [HBASE-20556] - Backport HBASE-16490 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

** Bug
    * [HBASE-17885] - Backport HBASE-15871 to branch-1
    * [HBASE-19377] - Compatibility checker complaining about hash collisions 
    * [HBASE-20230] - Incorrrect log message in RSRpcService
    * [HBASE-20565] - ColumnRangeFilter combined with ColumnPaginationFilter can produce incorrect result since 1.4
    * [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-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-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-20789] - TestBucketCache#testCacheBlockNextBlockMetadataMissing is flaky
    * [HBASE-20808] - Wrong shutdown order between Chores and ChoreService
    * [HBASE-20840] - Backport HBASE-20791 'RSGroupBasedLoadBalancer#setClusterMetrics should pass ClusterMetrics to its internalBalancer' to branch-1
    * [HBASE-20855] - PeerConfigTracker only supporting one listener will cause problem when there is a recovered replication queue
    * [HBASE-20889] - PE scan is failing with NullPointerException
    * [HBASE-20908] - Infinite loop on regionserver if region replica are reduced 
    * [HBASE-20917] - MetaTableMetrics#stop references uninitialized requestsMap for non-meta region

** Improvement
    * [HBASE-20401] - Make `MAX_WAIT` and `waitIfNotFinished` in CleanerContext configurable
    * [HBASE-20651] - Master, prevents hbck or shell command to reassign the split parent region
    * [HBASE-20701] - too much logging when balancer runs from BaseLoadBalancer
    * [HBASE-20733] - QABot should run checkstyle tests if the checkstyle configs change
    * [HBASE-20806] - Split style journal for flushes and compactions
    * [HBASE-20826] - Truncate responseInfo attributes on RpcServer WARN messages

** Task
    * [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

** Umbrella
    * [HBASE-20555] - Backport HBASE-18083 and related changes in branch-1


Release Notes - HBase - Version 1.4.5 6/20/2018

** Sub-task
    * [HBASE-20316] - Backport HBASE-20229 "ConnectionImplementation.locateRegions() returns duplicated entries when region replication is on" to branch-1
    * [HBASE-20647] - Backport HBASE-20616 "TruncateTableProcedure is stuck in retry loop in TRUNCATE_TABLE_CREATE_FS_LAYOUT state" to branch-1

** Bug
    * [HBASE-18842] - The hbase shell clone_snaphost command returns bad error message
    * [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-20204] - Add locking to RefreshFileConnections in BucketCache
    * [HBASE-20447] - Only fail cacheBlock if block collisions aren't related to next block metadata
    * [HBASE-20500] - [rsgroup] should keep at least one server in default group
    * [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-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-20627] - Relocate RS Group pre/post hooks from RSGroupAdminServer to RSGroupAdminEndpoint
    * [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-20670] - NPE in HMaster#isInMaintenanceMode

** Improvement
    * [HBASE-20523] - PE tool should support configuring client side buffering sizes
    * [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

** Test
    * [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-20646] - TestWALProcedureStoreOnHDFS failing on branch-1

** Task
    * [HBASE-19475] - Extend backporting strategy in documentation
    * [HBASE-20595] - Remove the concept of 'special tables' from rsgroups
    * [HBASE-20608] - Remove build option of error prone profile for branch-1 after HBASE-12350


Release Notes - HBase - Version 1.4.4 4/30/2018

** Sub-task
    * [HBASE-20276] - [shell] Revert shell REPL change and document

** Bug
    * [HBASE-15291] - FileSystem not closed in secure bulkLoad
    * [HBASE-17631] - Canary interval too low
    * [HBASE-19343] - Restore snapshot makes split parent region online 
    * [HBASE-20068] - Hadoopcheck project health check uses default maven repo instead of yetus managed ones
    * [HBASE-20231] - Not able to delete column family from a row using RemoteHTable
    * [HBASE-20280] - Fix possibility of deadlocking in refreshFileConnections when prefetch is enabled
    * [HBASE-20292] - Wrong URLs in the descriptions for update_all_config and update_config commands in shell
    * [HBASE-20293] - get_splits returns duplicate split points when region replication is on
    * [HBASE-20301] - Remove the meaningless plus sign from table.jsp
    * [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-20463] - Fix breakage introduced on branch-1 by HBASE-20276 "[shell] Revert shell REPL change and document"

** Improvement
    * [HBASE-15466] - precommit should not run all java goals when given a docs-only patch
    * [HBASE-20352] - [Chore] Backport HBASE-18309 to branch-1
    * [HBASE-20379] - shadedjars yetus plugin should add a footer link
    * [HBASE-20459] - Majority of scan CPU time in HBase-1 spent in size estimation

** Task
    * [HBASE-20112] - Include test results from nightly hadoop3 tests in jenkins test results


Release Notes - HBase - Version 1.4.3 3/30/2018

** Sub-task
    * [HBASE-18731] - [compat 1-2] Mark protected methods of QuotaSettings that touch Protobuf internals as IA.Private

** Bug
    * [HBASE-14897] - TestTableLockManager.testReapAllTableLocks is flakey
    * [HBASE-18864] - NullPointerException thrown when adding rows to a table from peer cluster, table with replication factor other than 0 or 1
    * [HBASE-18985] - Fix the building warning of missing version in hbase-shaded-check-invariants module
    * [HBASE-19364] - Truncate_preserve fails with table when replica region > 1
    * [HBASE-19391] - Calling HRegion#initializeRegionInternals from a region replica can still re-create a region directory
    * [HBASE-19553] - Old replica regions should be cleared from AM memory after primary region split or merge
    * [HBASE-19769] - IllegalAccessError on package-private Hadoop metrics2 classes in MapReduce jobs
    * [HBASE-19802] - Wrong usage messages on shell commands (grant/revoke namespace syntax)
    * [HBASE-19863] - java.lang.IllegalStateException: isDelete failed when SingleColumnValueFilter is used
    * [HBASE-19985] - Redundant instanceof check in ProtobufUtil#getServiceException
    * [HBASE-19989] - READY_TO_MERGE and READY_TO_SPLIT do not update region state correctly
    * [HBASE-20001] - cleanIfNoMetaEntry() uses encoded instead of region name to lookup region
    * [HBASE-20016] - TestCatalogJanitorInMemoryStates#testInMemoryForReplicaParentCleanup is flaky
    * [HBASE-20025] - TestZKPermissionWatcher is flakey in branch-1
    * [HBASE-20061] - HStore synchronized member variable filesCompacting should be private
    * [HBASE-20062] - findbugs is not running on precommit checks
    * [HBASE-20091] - Fix for 'build.plugins.plugin.version' for org.codehaus.mojo: is missing.
    * [HBASE-20102] - AssignmentManager#shutdown doesn't shut down scheduled executor
    * [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-20141] - Fix TooManyFiles exception when RefreshingChannels in FileIOEngine
    * [HBASE-20146] - Regions are stuck while opening when WAL is disabled
    * [HBASE-20153] - enable error-prone analysis in precommit
    * [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.

** Improvement
    * [HBASE-18467] - nightly job needs to run all stages and then comment on jira
    * [HBASE-20186] - Improve RSGroupBasedLoadBalancer#balanceCluster() to be more efficient when calculating cluster state for each rsgroup

** Test
    * [HBASE-20052] - TestRegionOpen#testNonExistentRegionReplica fails due to NPE

** Task
    * [HBASE-15151] - Rely on nightly tests for findbugs compliance on existing branch
    * [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


Release Notes - HBase - Version 1.4.2 2/28/2018

** Sub-task
    * [HBASE-19877] - hbase-common and hbase-zookeeper don't add the log4j.properties to the resource path for testing
    * [HBASE-20008] - [backport] NullPointerException when restoring a snapshot after splitting a region

** Bug
    * [HBASE-18282] - ReplicationLogCleaner can delete WALs not yet replicated in case of a KeeperException
    * [HBASE-19728] - Add lock to filesCompacting in all place.
    * [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-19892] - Checking 'patch attach' and yetus 0.7.0 and move to Yetus 0.7.0
    * [HBASE-19900] - Region-level exception destroy the result of batch
    * [HBASE-19901] - Up yetus proclimit on nightlies
    * [HBASE-19905] - ReplicationSyncUp tool will not exit if a peer replication is disabled
    * [HBASE-19934] - HBaseSnapshotException when read replicas is enabled and online snapshot is taken after region splitting
    * [HBASE-19937] - Ensure createRSGroupTable be called after ProcedureExecutor and LoadBalancer are initialized 
    * [HBASE-19972] - Should rethrow  the RetriesExhaustedWithDetailsException when failed to apply the batch in ReplicationSink
    * [HBASE-19979] - ReplicationSyncUp tool may leak Zookeeper connection
    * [HBASE-19981] - Boolean#getBoolean is used to parse value
    * [HBASE-19996] - Some nonce procs might not be cleaned up (follow up HBASE-19756)
    * [HBASE-20017] - BufferedMutatorImpl submit the same mutation repeatedly
    * [HBASE-20027] - Add test TestClusterPortAssignment

** New Feature
    * [HBASE-19886] - Display maintenance mode in shell, web UI

** Improvement
    * [HBASE-19770] - Add '--return-values' option to Shell to print return values of commands in interactive mode
    * [HBASE-19917] - Improve RSGroupBasedLoadBalancer#filterServers() to be more efficient

** Test
    * [HBASE-19949] - TestRSGroupsWithACL fails with ExceptionInInitializerError


Release Notes - HBase - Version 1.4.1 2/2/2018

** Sub-task
    * [HBASE-19378] - Backport HBASE-19252 "Move the transform logic of FilterList into transformCell() method to avoid extra ref to question cell"
    * [HBASE-19468] - FNFE during scans and flushes
    * [HBASE-19481] - Enable Checkstyle in hbase-error-prone
    * [HBASE-19502] - Make sure we have closed all StoreFileScanners if we fail to open any StoreFileScanners

** Bug
    * [HBASE-11409] - Add more flexibility for input directory structure to LoadIncrementalHFiles
    * [HBASE-17079] - HBase build fails on windows, hbase-archetype-builder is reason for failure
    * [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-18625] - Splitting of region with replica, doesn't update region list in serverHolding. A server crash leads to overlap.
    * [HBASE-19125] - TestReplicator is flaky
    * [HBASE-19163] - "Maximum lock count exceeded" from region server's batch processing
    * [HBASE-19383] - [1.2] java.lang.AssertionError: expected:<2> but was:<1> 	at org.apache.hadoop.hbase.TestChoreService.testTriggerNowFailsWhenNotScheduled(TestChoreService.java:707)
    * [HBASE-19424] - Metrics servlet throws NPE
    * [HBASE-19483] - Add proper privilege check for rsgroup commands
    * [HBASE-19490] - Rare failure in TestRateLimiter
    * [HBASE-19509] - RSGroupAdminEndpoint#preCreateTable triggers TableNotFoundException
    * [HBASE-19546] - TestMasterReplication.testCyclicReplication2 uses wrong assertion
    * [HBASE-19551] - hbck -boundaries doesn't work correctly
    * [HBASE-19588] - Additional jar dependencies needed for mapreduce PerformanceEvaluation
    * [HBASE-19685] - Fix TestFSErrorsExposed#testFullSystemBubblesFSErrors
    * [HBASE-19691] - Do not require ADMIN permission for obtaining ClusterStatus
    * [HBASE-19708] - Avoid NPE when the RPC listener's accept channel is closed
    * [HBASE-19752] - RSGroupBasedLoadBalancer#getMisplacedRegions() should handle the case where rs group cannot be determined
    * [HBASE-19756] - Master NPE during completed failed proc eviction
    * [HBASE-19757] - System table gets stuck after enabling region server group feature in secure cluster
    * [HBASE-19816] - Replication sink list is not updated on UnknownHostException

** New Feature
    * [HBASE-15321] - Ability to open a HRegion from hdfs snapshot.

** Improvement
    * [HBASE-15580] - Tag coprocessor limitedprivate scope to StoreFile.Reader
    * [HBASE-19358] - Improve the stability of splitting log when do fail over
    * [HBASE-19489] - Check against only the latest maintenance release in pre-commit hadoopcheck.
    * [HBASE-19491] - Exclude flaky tests from nightly master run
    * [HBASE-19545] - Replace getBytes(StandardCharsets.UTF_8) with Bytes.toBytes
    * [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-19514] - Use random port for TestJMXListener

** Task
    * [HBASE-19485] - Minor improvement to TestCompactedHFilesDischarger
    * [HBASE-19637] - Add .checkstyle to gitignore


Release Notes - HBase - Version 1.4.0 12/18/2017

** Sub-task
    * [HBASE-12148] - Remove TimeRangeTracker as point of contention when many threads writing a Store
    * [HBASE-15160] - Put back HFile's HDFS op latency sampling code and add metrics for monitoring
    * [HBASE-15342] - create branch-1.3 and update branch-1 poms to 1.4.0-SNAPSHOT
    * [HBASE-15386] - PREFETCH_BLOCKS_ON_OPEN in HColumnDescriptor is ignored
    * [HBASE-15484] - Correct the semantic of batch and partial
    * [HBASE-15662] - Hook up JvmPauseMonitor to REST server
    * [HBASE-15663] - Hook up JvmPauseMonitor to ThriftServer
    * [HBASE-15675] - Add more details about region on table.jsp
    * [HBASE-15691] - Port HBASE-10205 (ConcurrentModificationException in BucketAllocator) to branch-1
    * [HBASE-15927] - Remove HMaster.assignRegion()
    * [HBASE-15994] - Allow selection of RpcSchedulers
    * [HBASE-15995] - Separate replication WAL reading from shipping
    * [HBASE-16092] - Procedure v2 - complete child procedure support
    * [HBASE-16236] - Typo in javadoc of InstancePending
    * [HBASE-16242] - Upgrade Avro to 1.7.7
    * [HBASE-16280] - Use hash based map in SequenceIdAccounting
    * [HBASE-16311] - Audit log for delete snapshot operation is missing in case of snapshot owner deleting the same
    * [HBASE-16336] - Removing peers seems to be leaving spare queues
    * [HBASE-16398] - optimize HRegion computeHDFSBlocksDistribution
    * [HBASE-16451] - Procedure v2 - Test WAL protobuf entry size limit
    * [HBASE-16505] - Save deadline in RpcCallContext according to request's timeout
    * [HBASE-16530] - Reduce DBE code duplication
    * [HBASE-16533] - Procedure v2 - Extract chore from the executor
    * [HBASE-16570] - Compute region locality in parallel at startup
    * [HBASE-17167] - Pass mvcc to client when scan
    * [HBASE-17210] - Set timeout on trying rowlock according to client's RPC timeout
    * [HBASE-17508] - Unify the implementation of small scan and regular scan for sync client
    * [HBASE-17561] - table status page should escape values that may contain arbitrary characters.
    * [HBASE-17583] - Add inclusive/exclusive support for startRow and endRow of scan for sync client
    * [HBASE-17584] - Expose ScanMetrics with ResultScanner rather than Scan
    * [HBASE-17595] - Add partial result support for small/limited scan
    * [HBASE-17599] - Use mayHaveMoreCellsInRow instead of isPartial
    * [HBASE-17793] - Backport ScanResultCache related code 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-18448] - EndPoint example  for refreshing HFiles for stores
    * [HBASE-18458] - Refactor TestRegionServerHostname to make it robust (Port HBASE-17922 to branch-1)
    * [HBASE-18552] - Backport the server side change in HBASE-18489 to branch-1
    * [HBASE-18656] - Address issues found by error-prone in hbase-common
    * [HBASE-18786] - FileNotFoundException should not be silently handled for primary region replicas
    * [HBASE-18867] - maven enforcer plugin needs update to work with jdk9
    * [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-18980] - Address issues found by error-prone in hbase-hadoop2-compat
    * [HBASE-19070] - temporarily make the mvnsite nightly test non-voting.
    * [HBASE-19113] - Restore dropped constants from TableInputFormatBase for compatibility
    * [HBASE-19131] - Add the ClusterStatus hook and cleanup other hooks which can be replaced by ClusterStatus hook
    * [HBASE-19182] - Add deprecation in branch-1 for hbase-prefix-tree so some heads up it removed in hbase2
    * [HBASE-19203] - Update Hadoop version used for build to 2.7.4
    * [HBASE-19205] - Backport HBASE-18441 ZookeeperWatcher#interruptedException should throw exception
    * [HBASE-19243] - Start mini cluster once before class for TestFIFOCompactionPolicy
    * [HBASE-19276] - RegionPlan should correctly implement equals and hashCode
    * [HBASE-19348] - Fix error-prone errors for branch-1
    * [HBASE-19354] - [branch-1] Build using a jdk that is beyond ubuntu trusty's openjdk-151
    * [HBASE-19366] - Backport to branch-1 HBASE-19035 Miss metrics when coprocessor use region scanner to read data
    * [HBASE-19368] - [nightly] Make xml test non-voting in branch-1.2
    * [HBASE-19373] - Fix Checkstyle error in hbase-annotations

** Bug
    * [HBASE-7621] - REST client (RemoteHTable) doesn't support binary row keys
    * [HBASE-8758] - Error in RegionCoprocessorHost class preScanner method documentation.
    * [HBASE-9393] - Hbase does not closing a closed socket resulting in many CLOSE_WAIT 
    * [HBASE-12088] - Remove un-used profiles in non-root poms
    * [HBASE-12091] - Optionally ignore edits for dropped tables for replication.
    * [HBASE-12949] - Scanner can be stuck in infinite loop if the HFile is corrupted
    * [HBASE-13860] - Remove units from ServerMetricsTmpl.jamon since values are formatted human readable
    * [HBASE-14129] - If any regionserver gets shutdown uncleanly during full cluster restart, locality looks to be lost
    * [HBASE-14329] - Report region in transition only ever operates on one region
    * [HBASE-14753] - TestShell is not invoked anymore
    * [HBASE-15109] - HM/RS failed to start when "fs.hdfs.impl.disable.cache" is set to true
    * [HBASE-15187] - Integrate CSRF prevention filter to REST gateway
    * [HBASE-15236] - Inconsistent cell reads over multiple bulk-loaded HFiles
    * [HBASE-15302] - Reenable the other tests disabled by HBASE-14678
    * [HBASE-15328] - Unvalidated Redirect in HMaster
    * [HBASE-15497] - Incorrect javadoc for atomicity guarantee of Increment and Append
    * [HBASE-15528] - Clean up outdated entries in hbase-default.xml
    * [HBASE-15548] - SyncTable: sourceHashDir is supposed to be optional but won't work without 
    * [HBASE-15635] - Mean age of Blocks in cache (seconds) on webUI should be greater than zero
    * [HBASE-15711] - Add client side property to allow logging details for batch errors
    * [HBASE-15725] - make_patch.sh should add the branch name when -b is passed.
    * [HBASE-15769] - Perform validation on cluster key for add_peer
    * [HBASE-15783] - AccessControlConstants#OP_ATTRIBUTE_ACL_STRATEGY_CELL_FIRST not used any more.
    * [HBASE-15803] - ZooKeeperWatcher's constructor can leak a ZooKeeper instance with throwing ZooKeeperConnectionException when canCreateBaseZNode is true
    * [HBASE-15815] - Region mover script sometimes reports stuck region where only one server was involved
    * [HBASE-15844] - We should respect hfile.block.index.cacheonwrite when write intermediate index Block
    * [HBASE-15845] - Shell Cleanup : move formatter to commands.rb; move one of the two hbase.rb to hbase_constants.rb
    * [HBASE-15866] - Split hbase.rpc.timeout into *.read.timeout and *.write.timeout
    * [HBASE-15889] - String case conversions are locale-sensitive, used without locale
    * [HBASE-15933] - NullPointerException may be thrown from SimpleRegionNormalizer#getRegionSize()
    * [HBASE-15947] - Classes used only for tests included in main code base
    * [HBASE-15950] - Fix memstore size estimates to be more tighter
    * [HBASE-15965] - Shell test changes. Use @shell.command instead directly calling functions in admin.rb and other libraries.
    * [HBASE-15990] - The priority value of subsequent coprocessors in the Coprocessor.Priority.SYSTEM list are not incremented by one
    * [HBASE-16011] - TableSnapshotScanner and TableSnapshotInputFormat can produce duplicate rows
    * [HBASE-16045] - endtime argument for VerifyReplication was incorrectly specified in usage
    * [HBASE-16054] - OutOfMemory exception when using AsyncRpcClient with encryption
    * [HBASE-16055] - PutSortReducer loses any Visibility/acl attribute set on the Puts 
    * [HBASE-16058] - TestHRegion fails on 1.4 builds
    * [HBASE-16059] - Region normalizer fails to trigger merge action where one of the regions is empty
    * [HBASE-16070] - Mapreduce Serialization classes do not have Interface audience
    * [HBASE-16090] - ResultScanner is not closed in SyncTable#finishRemainingHashRanges()
    * [HBASE-16091] - Canary takes lot more time when there are delete markers in the table
    * [HBASE-16118] - TestHFileOutputFormat2 is broken
    * [HBASE-16122] - PerformanceEvaluation should provide user friendly hint when client threads argument is missing
    * [HBASE-16125] - RegionMover uses hardcoded, Unix-style tmp folder - breaks Windows
    * [HBASE-16157] - The incorrect block cache count and size are caused by removing duplicate block key in the LruBlockCache
    * [HBASE-16159] - OutOfMemory exception when using AsyncRpcClient with encryption to read rpc response
    * [HBASE-16172] - Unify the retry logic in ScannerCallableWithReplicas and RpcRetryingCallerWithReadReplicas
    * [HBASE-16182] - Increase IntegrationTestRpcClient timeout 
    * [HBASE-16209] - Provide an ExponentialBackOffPolicy sleep between failed region open requests
    * [HBASE-16235] - TestSnapshotFromMaster#testSnapshotHFileArchiving will fail if there are too many hfiles
    * [HBASE-16244] - LocalHBaseCluster start timeout should be configurable
    * [HBASE-16293] - TestSnapshotFromMaster#testSnapshotHFileArchiving flakey
    * [HBASE-16309] - TestDefaultCompactSelection.testCompactionRatio is flaky
    * [HBASE-16345] - RpcRetryingCallerWithReadReplicas#call() should catch some RegionServer Exceptions
    * [HBASE-16353] - Deprecate / Remove Get.isClosestRowBefore() 
    * [HBASE-16356] - REST API scanner: row prefix filter and custom filter parameters are mutually exclusive
    * [HBASE-16359] - NullPointerException in RSRpcServices.openRegion()
    * [HBASE-16367] - Race between master and region server initialization may lead to premature server abort
    * [HBASE-16377] - ServerName check is ineffective in region_mover.rb
    * [HBASE-16409] - Row key for bad row should be properly delimited in VerifyReplication
    * [HBASE-16444] - CellUtil#estimatedSerializedSizeOfKey() should consider KEY_INFRASTRUCTURE_SIZE
    * [HBASE-16495] - When accessed via Thrift, all column families have timeToLive equal to -1
    * [HBASE-16515] - AsyncProcess has incorrent count of tasks if the backoff policy is enabled
    * [HBASE-16538] - Version mismatch in HBaseConfiguration.checkDefaultsVersion
    * [HBASE-16540] - Scan should do additional validation on start and stop row
    * [HBASE-16556] - The read/write timeout are not used in HTable.delete(List), HTable.get(List), and HTable.existsAll(List)
    * [HBASE-16572] - Sync method in RecoverableZooKeeper failed to pass callback function in
    * [HBASE-16576] - Shell add_peer doesn't allow setting cluster_key for custom endpoints
    * [HBASE-16611] - Flakey org.apache.hadoop.hbase.client.TestReplicasClient.testCancelOfMultiGet
    * [HBASE-16612] - Use array to cache Types for KeyValue.Type.codeToType
    * [HBASE-16615] - Fix flaky TestScannerHeartbeatMessages
    * [HBASE-16621] - HBCK should have -fixHFileLinks
    * [HBASE-16630] - Fragmentation in long running Bucket Cache
    * [HBASE-16647] - hbck should do offline reference repair before online repair
    * [HBASE-16653] - Backport HBASE-11393 to all branches which support namespace
    * [HBASE-16670] - Make RpcServer#processRequest logic more robust
    * [HBASE-16675] - Average region size may be incorrect when there is region whose RegionLoad cannot be retrieved
    * [HBASE-16716] - OfflineMetaRepair leaves empty directory inside /hbase/WALs which remains forever
    * [HBASE-16724] - Snapshot owner can't clone
    * [HBASE-16739] - Timed out exception message should include encoded region name
    * [HBASE-16762] - NullPointerException is thrown when constructing sourceTable in verifyrep
    * [HBASE-16768] - Inconsistent results from the Append/Increment
    * [HBASE-16771] - VerifyReplication should increase GOODROWS counter if re-comparison passes
    * [HBASE-16801] - The Append/Increment may return the data from future
    * [HBASE-16815] - Low scan ratio in RPC queue tuning triggers divide by zero exception
    * [HBASE-16816] - HMaster.move() should throw exception if region to move is not online
    * [HBASE-16829] - DemoClient should detect secure mode
    * [HBASE-16855] - Avoid NPE in MetricsConnection’s construction
    * [HBASE-16856] - Exception message in SyncRunner.run() should print currentSequence
    * [HBASE-16870] - Add the metrics of replication sources which were transformed from other dead rs to ReplicationLoad
    * [HBASE-16886] - hbase-client: scanner with reversed=true and small=true gets no result
    * [HBASE-16910] - Avoid NPE when starting StochasticLoadBalancer
    * [HBASE-16938] - TableCFsUpdater maybe failed due to no write permission on peerNode
    * [HBASE-16939] - ExportSnapshot: set owner and permission on right directory
    * [HBASE-16948] - Fix inconsistency between HRegion and Region javadoc on getRowLock
    * [HBASE-16962] - Add readPoint to preCompactScannerOpen() and preFlushScannerOpen() API
    * [HBASE-16983] - TestMultiTableSnapshotInputFormat failing with  Unable to create region directory: /tmp/...
    * [HBASE-16985] - TestClusterId failed due to wrong hbase rootdir
    * [HBASE-16992] - The usage of mutation from CP is weird.
    * [HBASE-16993] - BucketCache throw java.io.IOException: Invalid HFile block magic when configuring hbase.bucketcache.bucket.sizes
    * [HBASE-17010] - Serial replication should handle daughter regions being assigned to another RS
    * [HBASE-17020] - keylen in midkey() dont computed correctly
    * [HBASE-17033] - LogRoller makes a lot of allocations unnecessarily
    * [HBASE-17039] - SimpleLoadBalancer schedules large amount of invalid region moves
    * [HBASE-17054] - Compactor#preCreateCoprocScanner should be passed user
    * [HBASE-17062] - RegionSplitter throws ClassCastException
    * [HBASE-17069] - RegionServer writes invalid META entries for split daughters in some circumstances
    * [HBASE-17072] - CPU usage starts to climb up to 90-100% when using G1GC; purge ThreadLocal usage
    * [HBASE-17095] - The ClientSimpleScanner keeps retrying if the hfile is corrupt or cannot found
    * [HBASE-17105] - Annotate RegionServerObserver
    * [HBASE-17112] - Prevent setting timestamp of delta operations the same as previous value's
    * [HBASE-17116] - [PerformanceEvaluation] Add option to configure block size
    * [HBASE-17118] - StoreScanner leaked in KeyValueHeap
    * [HBASE-17127] - Locate region should fail fast if underlying Connection already closed
    * [HBASE-17131] - Avoid livelock caused by HRegion#processRowsWithLocks
    * [HBASE-17170] - HBase is also retrying DoNotRetryIOException because of class loader differences.
    * [HBASE-17171] - IntegrationTestTimeBoundedRequestsWithRegionReplicas fails with obtuse error when readers have no time to run
    * [HBASE-17187] - DoNotRetryExceptions from coprocessors should bubble up to the application
    * [HBASE-17206] - FSHLog may roll a new writer successfully with unflushed entries
    * [HBASE-17256] - Rpc handler monitoring will be removed when the task queue is full
    * [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-17286] - LICENSE.txt in binary tarball contains only ASL text
    * [HBASE-17287] - Master becomes a zombie if filesystem object closes
    * [HBASE-17289] - Avoid adding a replication peer named "lock"
    * [HBASE-17290] - Potential loss of data for replication of bulk loaded hfiles
    * [HBASE-17297] - Single Filter in parenthesis cannot be parsed correctly
    * [HBASE-17302] - The region flush request disappeared from flushQueue
    * [HBASE-17330] - SnapshotFileCache will always refresh the file cache
    * [HBASE-17344] - The regionserver web UIs miss the coprocessors of RegionServerCoprocessorHost.
    * [HBASE-17347] - ExportSnapshot may write snapshot info file to wrong directory when specifying target name
    * [HBASE-17351] - Enforcer plugin fails with NullPointerException
    * [HBASE-17352] - Fix hbase-assembly build with bash 4
    * [HBASE-17357] - PerformanceEvaluation parameters parsing triggers NPE.
    * [HBASE-17374] - ZKPermissionWatcher crashed when grant after region close
    * [HBASE-17381] - ReplicationSourceWorkerThread can die due to unhandled exceptions
    * [HBASE-17387] - Reduce the overhead of exception report in RegionActionResult for multi()
    * [HBASE-17390] - Online update of configuration for all servers leaves out masters
    * [HBASE-17426] - Inconsistent environment variable names for enabling JMX
    * [HBASE-17427] - region_mover.rb may move region onto the same server
    * [HBASE-17429] - HBase bulkload cannot support HDFS viewFs
    * [HBASE-17435] - Call to preCommitStoreFile() hook encounters SaslException in secure deployment
    * [HBASE-17445] - Count size of serialized exceptions in checking max result size quota
    * [HBASE-17450] - TablePermission#equals throws NPE after namespace support was added
    * [HBASE-17452] - Failed taking snapshot - region Manifest proto-message too large
    * [HBASE-17460] - enable_table_replication can not perform cyclic replication of a table
    * [HBASE-17464] - Fix HBaseTestingUtility.getNewDataTestDirOnTestFS to always return a unique path
    * [HBASE-17469] - Properly handle empty TableName in TablePermission#readFields and #write
    * [HBASE-17471] - Region Seqid will be out of order in WAL if using mvccPreAssign
    * [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-17504] - The passed durability of Increment is ignored when syncing WAL
    * [HBASE-17510] - DefaultMemStore gets the wrong heap size after rollback
    * [HBASE-17519] - Rollback the removed cells
    * [HBASE-17522] - RuntimeExceptions from MemoryMXBean should not take down server process
    * [HBASE-17534] - SecureBulkLoadClient squashes DoNotRetryIOExceptions from the server
    * [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-17565] - StochasticLoadBalancer may incorrectly skip balancing due to skewed multiplier sum
    * [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-17603] - REST API for scan should return 404 when table does not exist
    * [HBASE-17607] - Rest api for scan should return 404 when table not exists
    * [HBASE-17611] - Thrift 2 per-call latency metrics are capped at ~ 2 seconds
    * [HBASE-17616] - Incorrect actions performed by CM
    * [HBASE-17617] - Backport HBASE-16731 (Inconsistent results from the Get/Scan if we use the empty FilterList) to branch-1
    * [HBASE-17639] - Do not stop server if ReplicationSourceManager's waitUntilCanBePushed throws InterruptedException
    * [HBASE-17648] - HBase Table-level synchronization fails between two secured(kerberized) clusters
    * [HBASE-17649] - REST API for scan should return 410 when table is disabled
    * [HBASE-17658] - Fix bookkeeping error with max regions for a table
    * [HBASE-17661] - fix the queue length passed to FastPathBalancedQueueRpcExecutor
    * [HBASE-17673] - Monitored RPC Handler not shown in the WebUI
    * [HBASE-17674] - Major compaction may be cancelled in CompactionChecker
    * [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-17710] - HBase in standalone mode creates directories with 777 permission
    * [HBASE-17712] - Remove/Simplify the logic of RegionScannerImpl.handleFileNotFound
    * [HBASE-17713] - the interface '/version/cluster' with header 'Accept: application/json' return is not JSON but plain text
    * [HBASE-17717] - Incorrect ZK ACL set for HBase superuser
    * [HBASE-17718] - Difference between RS's servername and its ephemeral node cause SSH stop working
    * [HBASE-17722] - Metrics subsystem stop/start messages add a lot of useless bulk to operational logging
    * [HBASE-17729] - Missing shortcuts for some useful HCD options
    * [HBASE-17736] - Some options can't be configured by the shell
    * [HBASE-17746] - TestSimpleRpcScheduler.testCoDelScheduling is broken
    * [HBASE-17761] - Test TestRemoveRegionMetrics.testMoveRegion fails intermittently because of race condition
    * [HBASE-17764] - Solve TestMultiSlaveReplication flakiness 
    * [HBASE-17773] - VerifyReplication tool wrongly emits warning "ERROR: Invalid argument '--recomparesleep=xx'"
    * [HBASE-17779] - disable_table_replication returns misleading message and does not turn off replication
    * [HBASE-17780] - BoundedByteBufferPool "At capacity" messages are not actionable
    * [HBASE-17798] - RpcServer.Listener.Reader can abort due to CancelledKeyException
    * [HBASE-17803] - PE always re-creates table when we specify the split policy
    * [HBASE-17816] - HRegion#mutateRowWithLocks should update writeRequestCount metric
    * [HBASE-17821] - The CompoundConfiguration#toString is wrong
    * [HBASE-17861] - Regionserver down when checking the permission of staging dir if hbase.rootdir is on S3
    * [HBASE-17862] - Condition that always returns true
    * [HBASE-17869] - UnsafeAvailChecker wrongly returns false on ppc
    * [HBASE-17871] - scan#setBatch(int) call leads wrong result of VerifyReplication
    * [HBASE-17886] - Fix compatibility of ServerSideScanMetrics
    * [HBASE-17893] - Allow HBase to build against Hadoop 2.8.0
    * [HBASE-17904] - Get runs into NoSuchElementException when using Read Replica, with hbase. ipc.client.specificThreadForWriting to be true and hbase.rpc.client.impl to be org.apache.hadoop.hbase.ipc.RpcClientImpl
    * [HBASE-17930] - Avoid using Canary.sniff in HBaseTestingUtility
    * [HBASE-17931] - Assign system tables to servers with highest version
    * [HBASE-17937] - Memstore size becomes negative in case of expensive postPut/Delete Coprocessor call
    * [HBASE-17958] - Avoid passing unexpected cell to ScanQueryMatcher when optimize SEEK to SKIP
    * [HBASE-17985] - Inline package manage updates with package installation in Yetus Dockerfile
    * [HBASE-17991] - Add more details about compaction queue on /dump
    * [HBASE-17993] - Delete useless info log in RpcServer.processResponse
    * [HBASE-18000] - Make sure we always return the scanner id with ScanResponse
    * [HBASE-18005] - read replica: handle the case that region server hosting both primary replica and meta region is down
    * [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-18035] - Meta replica does not give any primaryOperationTimeout to primary meta region
    * [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-18054] - log when we add/remove failed servers in client
    * [HBASE-18058] - Zookeeper retry sleep time should have an upper limit
    * [HBASE-18066] - Get with closest_row_before on "hbase:meta" can return empty Cell during region merge/split
    * [HBASE-18069] - Fix flaky test TestReplicationAdminWithClusters#testDisableAndEnableReplication
    * [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-18099] - FlushSnapshotSubprocedure should wait for concurrent Region#flush() to finish
    * [HBASE-18111] - Replication stuck when cluster connection is closed
    * [HBASE-18113] - Handle old client without include_stop_row flag when startRow equals endRow
    * [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-18129] - truncate_preserve fails when the truncate method doesn't exists on the master
    * [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-18149] - The setting rules for table-scope attributes and family-scope attributes should keep consistent
    * [HBASE-18150] - hbase.version file is created under both hbase.rootdir and hbase.wal.dir
    * [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-18184] - Add hbase-hadoop2-compat jar as MapReduce job dependency
    * [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-18199] - Race in NettyRpcConnection may cause call stuck in BufferCallBeforeInitHandler forever
    * [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-18219] - Fix typo in constant HConstants.HBASE_CLIENT_MEAT_REPLICA_SCAN_TIMEOUT
    * [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-18267] - The result from the postAppend is ignored
    * [HBASE-18323] - Remove multiple ACLs for the same user in kerberos
    * [HBASE-18330] - NPE in ReplicationZKLockCleanerChore
    * [HBASE-18340] - TestXXXProcedure tests hanging or failing on branch-1 (branch-1.4)
    * [HBASE-18346] - TestRSKilledWhenInitializing failing on branch-1 (branch-1.4)
    * [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-18377] - Error handling for FileNotFoundException should consider RemoteException in openReader()
    * [HBASE-18390] - Sleep too long when finding region location failed
    * [HBASE-18401] - Region Replica shows up in meta table after split
    * [HBASE-18431] - Mitigate compatibility concerns between branch-1.3 and branch-1.4
    * [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-18441] - ZookeeperWatcher#interruptedException should throw exception
    * [HBASE-18447] - MetricRegistryInfo#hashCode uses hashCode instead of toHashCode
    * [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-18476] - HTable#put should call RS#mutate rather than RS#multi
    * [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-18512] - Region Server will abort with IllegalStateException if HDFS umask has limited scope
    * [HBASE-18526] - FIFOCompactionPolicy pre-check uses wrong scope
    * [HBASE-18568] - Correct  metric of  numRegions
    * [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-18589] - branch-1.4 build compile is broken
    * [HBASE-18607] - fix submit-patch.py to support utf8
    * [HBASE-18614] - Setting BUCKET_CACHE_COMBINED_KEY to false disables stats on RS UI
    * [HBASE-18616] - Shell warns about already initialized constants at startup
    * [HBASE-18617] - FuzzyRowKeyFilter should not modify the filter pairs
    * [HBASE-18626] - Handle the incompatible change about the replication TableCFs' config
    * [HBASE-18628] - ZKPermissionWatcher blocks all ZK notifications
    * [HBASE-18633] - Add more info to understand the source/scenario of large batch requests exceeding threshold
    * [HBASE-18641] - Include block content verification logic used in lruCache in bucketCache
    * [HBASE-18644] - Duplicate "compactionQueueLength" metric in Region Server metrics
    * [HBASE-18647] - Parameter cacheBlocks does not take effect in REST API for scan
    * [HBASE-18665] - ReversedScannerCallable invokes getRegionLocations incorrectly
    * [HBASE-18671] - Support Append/Increment in rest api
    * [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-18762] - Canary sink type cast error
    * [HBASE-18771] - Incorrect StoreFileRefresh leading to split and compaction failures
    * [HBASE-18789] - Displays the reporting interval of each RS on the Master page
    * [HBASE-18796] - Admin#isTableAvailable returns incorrect result before daughter regions are opened
    * [HBASE-18801] - Bulk load cleanup may falsely deem file deletion successful
    * [HBASE-18810] - TestClientScannerRPCTimeout failing in branch-1 / branch-1.4
    * [HBASE-18813] - TestCanaryTool fails on branch-1 / branch-1.4 
    * [HBASE-18818] - TestConnectionImplemenation fails
    * [HBASE-18830] - TestCanaryTool does not check Canary monitor's error code
    * [HBASE-18885] - HFileOutputFormat2 hardcodes default FileOutputCommitter
    * [HBASE-18890] - Backport HBASE-14499 (Master coprocessors shutdown will not happen on master abort) to branch-1
    * [HBASE-18921] - Result.current() throws ArrayIndexOutOfBoundsException after calling advance()
    * [HBASE-18923] - TestTableResource flaky on branch-1
    * [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-18942] - hbase-hadoop2-compat module ignores hadoop-3 profile
    * [HBASE-18959] - Backport HBASE-18874 (HMaster abort message will be skipped if Throwable is passed null) to branch-1
    * [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-19035] - Miss metrics when coprocessor use region scanner to read data
    * [HBASE-19038] - precommit mvn install should run from root on patch
    * [HBASE-19039] - refactor shadedjars test to only run on java changes.
    * [HBASE-19055] - Backport HBASE-19042 to other active branches
    * [HBASE-19056] -  TestCompactionInDeadRegionServer is top of the flakies charts!
    * [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-19066] - Correct the directory of openjdk-8 for jenkins
    * [HBASE-19072] - Missing break in catch block of InterruptedException in HRegion#waitForFlushes() 
    * [HBASE-19088] - move_tables_rsgroup will throw an exception when the table is disabled
    * [HBASE-19094] - NPE in RSGroupStartupWorker.waitForGroupTableOnline during master startup
    * [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-19124] - Move HBase-Nightly source artifact creation test from JenkinsFile to a script in dev-support
    * [HBASE-19129] - TestChoreService is flaky (branch-1 / branch-1.4)
    * [HBASE-19137] - Nightly test should make junit reports optional rather than attempt archive after reporting.
    * [HBASE-19138] - Rare failure in TestLruBlockCache
    * [HBASE-19144] - [RSgroups] Retry assignments in FAILED_OPEN state when servers (re)join the cluster
    * [HBASE-19150] - TestSnapshotWithAcl is flaky
    * [HBASE-19156] - Duplicative regions_per_server options on LoadTestTool
    * [HBASE-19173] - Configure IntegrationTestRSGroup automatically for minicluster mode
    * [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-19194] - TestRSGroupsBase has some always false checks
    * [HBASE-19195] - More error-prone fixes
    * [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-19250] - TestClientClusterStatus is flaky
    * [HBASE-19260] - Add lock back to avoid parallel accessing meta to locate region
    * [HBASE-19285] - Add per-table latency histograms
    * [HBASE-19300] - TestMultithreadedTableMapper fails in branch-1.4
    * [HBASE-19325] - Pass a list of server name to postClearDeadServers
    * [HBASE-19350] - TestMetaWithReplicas is flaky
    * [HBASE-19376] - Fix more binary compatibility problems with branch-1.4 / branch-1
    * [HBASE-19379] - TestEndToEndSplitTransaction fails with NPE
    * [HBASE-19381] - TestGlobalThrottler doesn't make progress (branch-1.4)
    * [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-19395] - [branch-1] TestEndToEndSplitTransaction.testMasterOpsWhileSplitting fails with NPE
    * [HBASE-19396] - Fix flaky test TestHTableMultiplexerFlushCache
    * [HBASE-19406] - Fix CompactionRequest equals and hashCode
    * [HBASE-19421] - branch-1 does not compile against Hadoop 3.0.0
    * [HBASE-19422] - using hadoop-profile property leads to confusing failures
    * [HBASE-19423] - Replication entries are not filtered correctly when replication scope is set through WAL Co-processor
    * [HBASE-19429] - Release build fails in checkstyle phase of site target (branch-1)
    * [HBASE-19435] - Reopen Files for ClosedChannelException in BucketCache
    * [HBASE-19440] - Not able to enable balancer with RSGroups once disabled
    * [HBASE-19442] - Backport HBASE-19065 to branch-1 (HRegion#bulkLoadHFiles() should wait for concurrent Region#flush() to finish)
    * [HBASE-19445] - PerformanceEvaluation NPE processing split policy option
    * [HBASE-19446] - Misspelled 'default' in SimpleRpcScheduler
    * [HBASE-19447] - INFO level logging of GetClusterStatus from HMaster is too chatty
    * [HBASE-19465] - Required httpcore and httpclient jars not included in binary distribution
    * [HBASE-19467] - rsgroups shell commands don't properly display elapsed time

** Improvement
    * [HBASE-11013] - Clone Snapshots on Secure Cluster Should provide option to apply Retained User Permissions
    * [HBASE-12350] - Backport error-prone build support to branch-1 and branch-2
    * [HBASE-12770] - Don't transfer all the queued hlogs of a dead server to the same alive server
    * [HBASE-12870] - "Major compaction triggered" and "Skipping major compaction" messages lack the region information
    * [HBASE-13718] - Add a pretty printed table description to the table detail page of HBase's master
    * [HBASE-14007] - Writing to table through MR should fail upfront if table does not exist/is disabled
    * [HBASE-14220] - nightly tests should verify src tgz generates and builds correctly
    * [HBASE-14548] - Expand how table coprocessor jar and dependency path can be specified
    * [HBASE-14574] - TableOutputFormat#getRecordWriter javadoc misleads
    * [HBASE-14871] - Allow specifying the base branch for make_patch
    * [HBASE-14925] - Develop HBase shell command/tool to list table's region info through command line
    * [HBASE-14985] - TimeRange constructors should set allTime when appropriate
    * [HBASE-15191] - CopyTable and VerifyReplication - Option to specify batch size, versions
    * [HBASE-15243] - Utilize the lowest seek value when all Filters in MUST_PASS_ONE FilterList return SEEK_NEXT_USING_HINT
    * [HBASE-15429] - Add a split policy for busy regions
    * [HBASE-15451] - Remove unnecessary wait in MVCC
    * [HBASE-15496] - Throw RowTooBigException only for user scan/get
    * [HBASE-15529] - Override needBalance in StochasticLoadBalancer
    * [HBASE-15571] - Make MasterProcedureManagerHost accessible through MasterServices
    * [HBASE-15614] - Report metrics from JvmPauseMonitor
    * [HBASE-15686] - Add override mechanism for the exempt classes when dynamically loading table coprocessor
    * [HBASE-15727] - Canary Tool for Zookeeper
    * [HBASE-15802] -  ConnectionUtils should use ThreadLocalRandom instead of Random
    * [HBASE-15816] - Provide client with ability to set priority on Operations 
    * [HBASE-15842] - SnapshotInfo should display ownership information
    * [HBASE-15843] - Replace RegionState.getRegionInTransition() Map with a Set
    * [HBASE-15849] - Shell Cleanup: Simplify handling of commands' runtime
    * [HBASE-15924] - Enhance hbase services autorestart capability to hbase-daemon.sh 
    * [HBASE-15941] - HBCK repair should not unsplit healthy splitted region
    * [HBASE-16008] - A robust way deal with early termination of HBCK
    * [HBASE-16052] - Improve HBaseFsck Scalability
    * [HBASE-16108] - RowCounter should support multiple key ranges
    * [HBASE-16114] - Get regionLocation of required regions only for MR jobs
    * [HBASE-16116] - Remove redundant pattern *.iml
    * [HBASE-16147] - Add ruby wrapper for getting compaction state
    * [HBASE-16188] - Add EventCounter information to log4j properties file
    * [HBASE-16220] - Demote log level for "HRegionFileSystem - No StoreFiles for" messages to TRACE
    * [HBASE-16224] - Reduce the number of RPCs for the large PUTs
    * [HBASE-16225] - Refactor ScanQueryMatcher
    * [HBASE-16262] - Update RegionsInTransition UI for branch-1
    * [HBASE-16275] - Change ServerManager#onlineServers from ConcurrentHashMap to ConcurrentSkipListMap
    * [HBASE-16299] - Update REST API scanner with ability to do reverse scan
    * [HBASE-16302] - age of last shipped op and age of last applied op should be histograms
    * [HBASE-16351] - do dependency license check via enforcer plugin
    * [HBASE-16399] - Provide an API to get list of failed regions and servername in Canary
    * [HBASE-16419] - check REPLICATION_SCOPE's value more stringently
    * [HBASE-16423] - Add re-compare option to VerifyReplication to avoid occasional inconsistent rows
    * [HBASE-16448] - Custom metrics for custom replication endpoints
    * [HBASE-16455] - Provide API for obtaining all the WAL files
    * [HBASE-16469] - Several log refactoring/improvement suggestions
    * [HBASE-16502] - Reduce garbage in BufferedDataBlockEncoder
    * [HBASE-16508] - Move UnexpectedStateException to common
    * [HBASE-16541] - Avoid unnecessary cell copy in Result#compareResults
    * [HBASE-16561] - Add metrics about read/write/scan queue length and active read/write/scan handler count
    * [HBASE-16562] - ITBLL should fail to start if misconfigured
    * [HBASE-16585] - Rewrite the delegation token tests with Parameterized pattern
    * [HBASE-16616] - Rpc handlers stuck on ThreadLocalMap.expungeStaleEntry
    * [HBASE-16640] - TimeoutBlockingQueue#remove() should return whether the entry is removed
    * [HBASE-16672] - Add option for bulk load to always copy hfile(s) instead of renaming
    * [HBASE-16694] - Reduce garbage for onDiskChecksum in HFileBlock
    * [HBASE-16698] - Performance issue: handlers stuck waiting for CountDownLatch inside WALKey#getWriteEntry under high writing workload
    * [HBASE-16705] - Eliminate long to Long auto boxing in LongComparator
    * [HBASE-16708] - Expose endpoint Coprocessor name in "responseTooSlow" log messages
    * [HBASE-16755] - Honor flush policy under global memstore pressure
    * [HBASE-16772] - Add verbose option to VerifyReplication for logging good rows
    * [HBASE-16773] - AccessController should access local region if possible
    * [HBASE-16832] - Reduce the default number of versions in Meta table for branch-1
    * [HBASE-16840] - Reuse cell's timestamp and type in ScanQueryMatcher
    * [HBASE-16894] - Create more than 1 split per region, generalize HBASE-12590
    * [HBASE-16946] - Provide Raw scan as an option in VerifyReplication 
    * [HBASE-16947] - Some improvements for DumpReplicationQueues tool
    * [HBASE-16969] - RegionCoprocessorServiceExec should override the toString() for debugging
    * [HBASE-16977] - VerifyReplication should log a printable representation of the row keys
    * [HBASE-17026] - VerifyReplication log should distinguish whether good row key is result of revalidation
    * [HBASE-17057] - Minor compactions should also drop page cache behind reads
    * [HBASE-17077] - Don't copy the replication queue belonging to the peer which has been deleted
    * [HBASE-17088] - Refactor RWQueueRpcExecutor/BalancedQueueRpcExecutor/RpcExecutor
    * [HBASE-17178] - Add region balance throttling
    * [HBASE-17205] - Add a metric for the duration of region in transition
    * [HBASE-17211] - Add more details in log when UnknownScannerException thrown in ScannerCallable
    * [HBASE-17212] - Should add null checker on table name in HTable constructor and RegionServerCallable
    * [HBASE-17276] - Reduce log spam from WrongRegionException in large multi()'s
    * [HBASE-17280] - Add mechanism to control hbase cleaner behavior
    * [HBASE-17292] - Add observer notification before bulk loaded hfile is moved to region directory
    * [HBASE-17296] - Provide per peer throttling for replication
    * [HBASE-17318] - Increment does not add new column if the increment amount is zero at first time writing
    * [HBASE-17332] - Replace HashMap to Array for DataBlockEncoding.idToEncoding
    * [HBASE-17437] - Support specifying a WAL directory outside of the root directory
    * [HBASE-17448] - Export metrics from RecoverableZooKeeper
    * [HBASE-17462] - Use sliding window for read/write request costs in StochasticLoadBalancer
    * [HBASE-17472] - Correct the semantic of  permission grant
    * [HBASE-17488] - WALEdit should be lazily instantiated
    * [HBASE-17494] - Guard against cloning family of all cells if no data need be replicated
    * [HBASE-17505] - Do not issue close scanner request if RS tells us there is no more results for this region
    * [HBASE-17514] - Warn when Thrift Server 1 is configured for proxy users but not the HTTP transport
    * [HBASE-17543] - Create additional ReplicationEndpoint WALEntryFilters by configuration
    * [HBASE-17623] - Reuse the bytes array when building the hfile block
    * [HBASE-17627] - Active workers metric for thrift
    * [HBASE-17634] - Clean up the usage of Result.isPartial
    * [HBASE-17637] - Update progress more frequently in IntegrationTestBigLinkedList.Generator.persist
    * [HBASE-17689] - Add support for table.existsAll in thrift2 THBaseservice
    * [HBASE-17716] - Formalize Scan Metric names
    * [HBASE-17731] - Fractional latency reporting in MultiThreadedAction
    * [HBASE-17778] - Remove the testing code in the AsyncRequestFutureImpl
    * [HBASE-17817] - Make Regionservers log which tables it removed coprocessors from when aborting
    * [HBASE-17831] - Support small scan in thrift2
    * [HBASE-17835] - Spelling mistakes in the Java source
    * [HBASE-17877] - Improve HBase's byte[] comparator
    * [HBASE-17912] - Avoid major compactions on region server startup
    * [HBASE-17916] - Error message not clear when the permission of staging dir is not as expected
    * [HBASE-17924] - Consider sorting the row order when processing multi() ops before taking rowlocks
    * [HBASE-17944] - Removed unused JDK version parsing from ClassSize.
    * [HBASE-17956] - Raw scan should ignore TTL
    * [HBASE-17959] - Canary timeout should be configurable on a per-table basis
    * [HBASE-17962] - Improve documentation on Rest interface
    * [HBASE-17973] - Create shell command to identify regions with poor locality
    * [HBASE-17979] - HBase Shell 'list' Command Help Doc Improvements
    * [HBASE-17995] - improve log messages during snapshot related tests
    * [HBASE-18021] - Add more info in timed out RetriesExhaustedException for read replica client get processing, 
    * [HBASE-18023] - Log multi-* requests for more than threshold number of rows
    * [HBASE-18041] - Add pylintrc file to HBase
    * [HBASE-18043] - Institute a hard limit for individual cell size that cannot be overridden by clients
    * [HBASE-18090] - Improve TableSnapshotInputFormat to allow more multiple mappers per region
    * [HBASE-18094] - Display the return value of the command append
    * [HBASE-18164] - Much faster locality cost function and candidate generator
    * [HBASE-18248] - Warn if monitored RPC task has been tied up beyond a configurable threshold
    * [HBASE-18251] - Remove unnecessary traversing to the first and last keys in the CellSet
    * [HBASE-18252] - Resolve BaseLoadBalancer bad practice warnings
    * [HBASE-18286] - Create static empty byte array to save memory
    * [HBASE-18374] - RegionServer Metrics improvements
    * [HBASE-18387] - [Thrift] Make principal configurable in DemoClient.java
    * [HBASE-18426] - nightly job should use independent stages to check supported jdks
    * [HBASE-18436] - Add client-side hedged read metrics
    * [HBASE-18469] - Correct  RegionServer metric of  totalRequestCount
    * [HBASE-18478] - Allow users to remove RegionFinder from LoadBalancer calculations if no locality possible
    * [HBASE-18520] - Add jmx value to determine true Master Start time
    * [HBASE-18522] - Add RowMutations support to Batch
    * [HBASE-18532] - Improve cache related stats rendered on RS UI
    * [HBASE-18533] - Expose BucketCache values to be configured
    * [HBASE-18555] - Remove redundant familyMap.put() from addxxx() of sub-classes of Mutation and Query
    * [HBASE-18559] - Add histogram to MetricsConnection to track concurrent calls per server
    * [HBASE-18573] - Update Append and Delete to use Mutation#getCellList(family)
    * [HBASE-18602] - rsgroup cleanup unassign code
    * [HBASE-18631] - Allow configuration of ChaosMonkey properties via hbase-site
    * [HBASE-18652] - Expose individual cache stats in a CombinedCache through JMX
    * [HBASE-18675] - Making {max,min}SessionTimeout configurable for MiniZooKeeperCluster
    * [HBASE-18737] - Display configured max size of memstore and cache on RS UI
    * [HBASE-18740] - Upgrade Zookeeper version to 3.4.10
    * [HBASE-18746] - Throw exception with job.getStatus().getFailureInfo() when ExportSnapshot fails
    * [HBASE-18814] - Make ScanMetrics enabled and add counter <HBase Counters, ROWS_SCANNED> into the MapReduce Job over snapshot
    * [HBASE-18993] - Backport patches in HBASE-18410 to branch-1.x branches.
    * [HBASE-19051] - Add new split algorithm for num string
    * [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-19180] - Remove unused imports from AlwaysPasses
    * [HBASE-19228] - nightly job should gather machine stats.
    * [HBASE-19239] - Fix findbugs and error-prone warnings (branch-1)
    * [HBASE-19262] - Revisit checkstyle rules

** New Feature
    * [HBASE-15134] - Add visibility into Flush and Compaction queues
    * [HBASE-15576] - Scanning cursor to prevent blocking long time on ResultScanner.next()
    * [HBASE-15631] - Backport Regionserver Groups (HBASE-6721) to branch-1 
    * [HBASE-15633] - Backport HBASE-15507 to branch-1
    * [HBASE-15847] - VerifyReplication prefix filtering
    * [HBASE-16213] - A new HFileBlock structure for fast random get
    * [HBASE-16388] - Prevent client threads being blocked by only one slow region server
    * [HBASE-16677] - Add table size (total store file size) to table page
    * [HBASE-17181] - Let HBase thrift2 support TThreadedSelectorServer
    * [HBASE-17737] - Thrift2 proxy should support scan timeRange per column family
    * [HBASE-17757] - Unify blocksize after encoding to decrease memory fragment 
    * [HBASE-18060] - Backport to branch-1 HBASE-9774 HBase native metrics and metric collection for coprocessors
    * [HBASE-18131] - Add an hbase shell command to clear deadserver list in ServerManager
    * [HBASE-18226] - Disable reverse DNS lookup at HMaster and use the hostname provided by RegionServer
    * [HBASE-18875] - Thrift server supports read-only mode
    * [HBASE-19189] - Ad-hoc test job for running a subset of tests lots of times
    * [HBASE-19326] - Remove decommissioned servers from rsgroup

** Task
    * [HBASE-4368] - Expose processlist in shell (per regionserver and perhaps by cluster)
    * [HBASE-14635] - Fix flaky test TestSnapshotCloneIndependence
    * [HBASE-16335] - update to latest apache parent pom
    * [HBASE-16459] - Remove unused hbase shell --format option
    * [HBASE-16584] - Backport the new ipc implementation in HBASE-16432 to branch-1
    * [HBASE-17609] - Allow for region merging in the UI 
    * [HBASE-17954] - Switch findbugs implementation to spotbugs
    * [HBASE-17965] - Canary tool should print the regionserver name on failure
    * [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-18623] - Frequent failed to parse at EOF warnings from WALEntryStream
    * [HBASE-18670] - Add .DS_Store to .gitignore
    * [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-19099] - Evaluate the remaining API compatibility concerns between branch-1.3 and branch-1.4 / branch-1
    * [HBASE-19217] - Update supplemental-models.xml for jetty-sslengine
    * [HBASE-19232] - Fix shaded-check-invariants (check-jar-contents) failure on branch-1
    * [HBASE-19419] - Remove hbase-native-client from branch-1
    * [HBASE-19420] - Backport HBASE-19152 (Update refguide 'how to build an RC' and the make_rc.sh script) to branch-1

** Test
    * [HBASE-16349] - TestClusterId may hang during cluster shutdown
    * [HBASE-16418] - Reduce duration of sleep waiting for region reopen in IntegrationTestBulkLoad#installSlowingCoproc()
    * [HBASE-16639] - TestProcedureInMemoryChore#testChoreAddAndRemove occasionally fails
    * [HBASE-16725] - Don't let flushThread hang in TestHRegion
    * [HBASE-17189] - TestMasterObserver#wasModifyTableActionCalled uses wrong variables
    * [HBASE-18147] - nightly job to check health of active branches
    * [HBASE-18979] - TestInterfaceAudienceAnnotations fails on branch-1.3

** Umbrella
    * [HBASE-18266] - Eliminate the warnings from the spotbugs


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

