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-19663] - javadoc creation needs jsr305
    * [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

