HBase Change Log

Release Notes - HBase - Version 1.7.0 07/04/2021

** Sub-task
    * [HBASE-25712] Port failure to close InputStream to 1.x
    * [HBASE-25670] Backport HBASE-25665 to branch-1
    * [HBASE-25687] Backport "HBASE-25681 Add a switch for server/table queryMeter" to branch-2 and branch-1
    * [HBASE-25677] Server+table counters on each scan #nextRaw invocation becomes a bottleneck when heavy load
    * [HBASE-25672] Backport HBASE-25608 to branch-1
    * [HBASE-25258] Backport HBASE-24776 "[hbtop] Support Batch mode" to branch-1
    * [HBASE-24395] ServerName#getHostname() is case sensitive
    * [HBASE-25405] Backport HBASE-25287 to branch-1
    * [HBASE-25203] Change the reference url to flaky list in our jenkins jobs
    * [HBASE-25194] Do not publish workspace in flaky find job
    * [HBASE-23935] Backport HBASE-22978(with sub-tasks), HBASE-24718, HBASE-24528 to branch-1
    * [HBASE-25162] Make flaky tests run more aggressively
    * [HBASE-25163] Increase the timeout value for nightly jobs
    * [HBASE-25154] Set java.io.tmpdir to project build directory to avoid writing std*deferred files to /tmp
    * [HBASE-25133] Migrate HBase Nightly jenkins job from Hadoop to hbase
    * [HBASE-25132] Migrate flaky test jenkins job from Hadoop to hbase
    * [HBASE-25107] Migrate flaky reporting jenkins job from Hadoop to hbase
    * [HBASE-23330] Expose cluster ID for clients using it for delegation token based auth
    * [HBASE-24765] Dynamic master discovery
    * [HBASE-23305] Master based registry implementation
    * [HBASE-7767] Get rid of ZKTable, and table enable/disable state in ZK
    * [HBASE-23304] Implement RPCs needed for master based registry
    * [HBASE-23281] Track meta region changes on masters
    * [HBASE-23275] Track active master server name in ActiveMasterManager
    * [HBASE-23257] Track ClusterID in stand by masters
    * [HBASE-24876] Fix the flaky job url in hbase-personality.sh
    * [HBASE-24841] Change the jenkins job urls in our jenkinsfile
    * [HBASE-24846] Address compaction races in TestFIFOCompactionPolicy
    * [HBASE-22982] Send SIGSTOP to hang or SIGCONT to resume rs and add graceful rolling restart
    * [HBASE-24218] Add hadoop 3.2.x in hadoop check
    * [HBASE-24045] Support setting `-Dhadoop.profile` in adhoc_run_tests.sh
    * [HBASE-24009] Backport the personality changes in HBASE-23989 to all active branches
    * [HBASE-23631] Backport HBASE-23350 (Make compaction files cacheonWrite configurable based on threshold) to branch-1
    * [HBASE-23631] Backport HBASE-23588 Cache index & bloom blocks on write if CacheCompactedBlocksOnWrite is enabled

** Bug
    * [HBASE-25898] RS getting aborted due to NPE in Replication WALEntryStream
    * [HBASE-25848] Add flexibility to backup replication in case replication filter throws an exception
    * [HBASE-25774] ServerManager.getOnlineServer may miss some region servers when refreshing state in some procedure implementations
    * [HBASE-25741] Deadlock during peer cleanup with NoNodeException
    * [HBASE-25809] [branch-1] TestAtomicOperation.testMultiRowMutationMultiThreads deadlock
    * [HBASE-25726] MoveCostFunction is not included in the list of cost functions for StochasticLoadBalancer
    * [HBASE-25699] [branch-1] UnsupportedOperationException in DumpClusterStatusAction
    * [HBASE-25648] Fix normalizer and TestSimpleRegionNormalizerOnCluster in branch-1 after HBASE-25592 HBASE-23932
    * [HBASE-25626] Possible Resource Leak in HeterogeneousRegionCountCostFunction
    * [HBASE-25596] Fix NPE in ReplicationSourceManager as well as avoid permanently unreplicated data due to EOFException from WAL
    * [HBASE-25583] Handle the NoNode exception in remove log replication and avoid RS crash
    * [HBASE-25543] When configuration "hadoop.security.authorization" is set to false, the system will still try to authorize an RPC and raise AccessDeniedException
    * [HBASE-25533] The metadata of the table and family should not be an empty string
    * [HBASE-25523] Region normalizer chore thread is getting killed
    * [HBASE-25525] WALKey Extended Attributes don't serialize to ReplicationSink
    * [HBASE-25463] Fix comment error of append.rb
    * [HBASE-25441] add security check for some APIs in RSRpcServices
    * [HBASE-25432] we should add security checks for setTableStateInMeta and fixMeta
    * [HBASE-25292] Improve InetSocketAddress usage discipline
    * [HBASE-25230] Embedded zookeeper server not clean up the old data
    * [HBASE-25321] The sort icons not shown after Upgrade JQuery to 3.5.1
    * [HBASE-25313] [branch-1] Fix the broken pre-commit
    * [HBASE-25090] CompactionConfiguration logs unrealistic store file sizes
    * [HBASE-25227] [branch-1] Fix Java 11 runtime issue in UnsafeAccess
    * [HBASE-24768] Clear cached service kerberos ticket in case of SASL failures thrown from server side
    * [HBASE-25204] Nightly job failed as the name of jdk and maven changed
    * [HBASE-24849] Branch-1 Backport : HBASE-24665 MultiWAL : Avoid rolling of ALL WALs when one of the WAL needs a roll
    * [HBASE-25105] Fix log line in SimpleRegionNormalizer
    * [HBASE-25096] WAL size in RegionServer UI is wrong
    * [HBASE-24481] HBase Rest: Request for region detail of a table which doesn't exits is success(200 success code) instead of 404
    * [HBASE-24956] ConnectionManager#locateRegionInMeta waits for user region lock indefinitely.
    * [HBASE-24988] Donot merge regions if they are non adjacent in MergeNormalizationPlan.execute
    * [HBASE-24893] TestLogLevel failing on hadoop-ci (branch-1)
    * [HBASE-24971] Upgrade JQuery to 3.5.1
    * [HBASE-24957] ZKTableStateClientSideReader#isDisabledTable doesn't check if table exists or not.
    * [HBASE-24844] RecoverableZookeeper#close followed by ExecutorService shutdown
    * [HBASE-24807] Backport HBASE-20417 to branch-1
    * [HBASE-24816] Remove unused credential hbaseqa-at-asf-jira
    * [HBASE-24805] HBaseTestingUtility.getConnection should be threadsafe
    * [HBASE-24794] hbase.rowlock.wait.duration should not be <= 0
    * [HBASE-24788] Fix the connection leaks on getting hbase admin from unclosed connection
    * [HBASE-24775] [hbtop] StoreFile size should be rounded off
    * [HBASE-24675] On Master restart all servers are assigned to default rsgroup.
    * [HBASE-24742] Improve performance of SKIP vs SEEK logic
    * [HBASE-24739] [Build] branch-1's build seems broken because of pylint
    * [HBASE-24721] rename_rsgroup overwriting the existing rsgroup.
    * [HBASE-24615] MutableRangeHistogram#updateSnapshotRangeMetrics doesn't calculate the distribution for last bucket.
    * [HBASE-24693] regioninfo#isLast() has a logic error
    * [HBASE-23744] FastPathBalancedQueueRpcExecutor should enforce queue length of 0
    * [HBASE-24657] JsonBean representation of metrics at /jmx endpoint now quotes all numbers
    * [HBASE-24618] Backport HBASE-21204 (NPE when scan raw DELETE_FAMILY_VERSION and codec is not set) to branch-1
    * [HBASE-24550] Passing '-h' or '--help' to bin/hbase doesn't do as expected
    * [HBASE-19365] FSTableDescriptors#get() can return null reference, in some cases, it is not checked
    * [HBASE-24564] Make RS abort call idempotent
    * [HBASE-22870] reflection fails to access a private nested class
    * [HBASE-24189] WALSplit recreates region dirs for deleted table with recovered edits data
    * [HBASE-24184] Backport HBASE-23896 to branch-1: Snapshot owner cannot delete snapshot when ACL is enabled and Kerberos is not enabled
    * [HBASE-24499] Use a client property for SaslConnection MAX_ATTEMPTS (currently hardcoded to 5)
    * [HBASE-24446] Use EnvironmentEdgeManager to compute clock skew in Master
    * [HBASE-24480] Deflake TestRSGroupsBasics#testClearDeadServers
    * [HBASE-24479] Deflake TestCompaction#testStopStartCompaction
    * [HBASE-24454] BucketCache disabled instantly before error duration toleration is reached due to timing issue
    * [HBASE-24453] BackPort HBASE-20220 to branch-1
    * [HBASE-24434] fix building cpp-example DemoClient
    * [HBASE-24190] Make kerberos value of hbase.security.authentication property case insensitive
    * [HBASE-24336] [Metrics] FSDataInputStream's localBytesRead is wrong
    * [HBASE-24322] UnsafeAvailChecker should also check that required methods are available
    * [HBASE-24282] 'scandetail' log message is missing when responseTooSlow happens on the first scan rpc call
    * [HBASE-24211] Create table is slow in large cluster when AccessController is enabled.
    * [HBASE-24213] Backport the pre commit changes for HBASE-24169 to all branches
    * [HBASE-24174] Fix findbugs warning on ServiceAuthorizationManager
    * [HBASE-24191] HRegion#processRowsWithLocks count memstore size wrong when sync failed
    * [HBASE-24121] [Authorization] ServiceAuthorizationManager isn't dynamically updatable. And it should be.
    * [HBASE-24130] rat plugin complains about having an unlicensed file.
    * [HBASE-24040] WALFactory.Providers.multiwal causes StackOverflowError
    * [HBASE-24016] Change nightly poll from cron @daily to pollSCM @daily; i.e. run nightly if a change ONLY
    * [HBASE-23909] list_regions fails if table is under split

** New Feature
    * [HBASE-25460] Expose drainingServers as cluster metric
    * [HBASE-25569] Adding region count and average region size in a table at regionserver level
    * [HBASE-24620] Add a ClusterManager which submits command to ZooKeeper and its Agent which picks and execute those Commands.
    * [HBASE-24260] Add a ClusterManager that issues commands via coprocessor

** Improvement
    * [HBASE-25887] Corrupt wal while region server is aborting.
    * [HBASE-25860] Add metric for successful wal roll requests
    * [HBASE-25612] HMaster should abort if ReplicationLogCleaner is not able to delete oldWALs
    * [HBASE-25846] Backport 'HBASE-25825 RSGroupBasedLoadBalancer.onConfigurationChange should chain the request to internal balancer' to branch-1
    * [HBASE-25808] [branch-1] Backport improvements to FSHLog from branch-2
    * [HBASE-25805] [branch-1] Upgrade com.lmax.disruptor to 3.4.2
    * [HBASE-25686] [hbtop] Add some javadoc
    * [HBASE-25593] Backport changes from HBASE-24418 to branch-1
    * [HBASE-25627] HBase replication should have a metric to represent if the source is stuck getting initialized
    * [HBASE-25679] Size of log queue metric is incorrect in branch-1/branch-2
    * [HBASE-25622] Result#compareResults should compare tags.
    * [HBASE-25592] Improve normalizer code in line with HBASE-23932
    * [HBASE-25539] Add metric for age of oldest wal.
    * [HBASE-25541] In WALEntryStream, set the current path to null while dequeing the log
    * [HBASE-25528] Dedicated merge dispatch threadpool on master
    * [HBASE-25536] Remove 0 length wal file from logQueue if it belongs to old sources.
    * [HBASE-25329] Dump region hashes in logs for the regions that are stuck in transition for more than a configured amount of time
    * [HBASE-25084] RegexStringComparator in ParseFilter should support case-insensitive regexes
    * [HBASE-25246] Backup/Restore hbase cell tags.
    * [HBASE-25237] 'hbase master stop' shuts down the cluster, not the master only
    * [HBASE-25285] [branch-1] Fix two methods removed problems reported by compat-check
    * [HBASE-25261] Upgrade Bootstrap to 3.4.1
    * [HBASE-25240] gson format of RpcServer.logResponse is abnormal
    * [HBASE-25212] Optionally abort requests in progress after deciding a region should close
    * [HBASE-24859] Optimize in-memory representation of mapreduce TableSplit objects
    * [HBASE-25189] [Metrics] Add checkAndPut and checkAndDelete latency metrics at table level
    * [HBASE-25193] Add support for row prefix and type in the WAL Pretty Printer and some minor fixes
    * [HBASE-25195] [branch-1] getNumOpenConnections is not effective
    * [HBASE-25179] Assert format is incorrect in HFilePerformanceEvaluation class.
    * [HBASE-25119] Fix property name added as part of HBASE-24764 in branch-1
    * [HBASE-25082] Per table WAL metrics: appendCount and appendSize
    * [HBASE-25079] Upgrade Bootstrap to 3.3.7
    * [HBASE-24764] Add support of adding base peer configs via hbase-site.xml for all replication peers.
    * [HBASE-25006] Make the cost functions optional for StochastoicBalancer
    * [HBASE-24974] Provide a flexibility to print only row key and filter for multiple tables in the WALPrettyPrinter
    * [HBASE-24994] Add hedgedReadOpsInCurThread metric
    * [HBASE-24940] runCatalogJanitor() API should return -1 to indicate already running status
    * [HBASE-24970] Backport HBASE-20985 to branch-1
    * [HBASE-24569] Get hostAndWeights in addition using localhost if it is null in local mode
    * [HBASE-24898] Use EnvironmentEdge.currentTime() instead of System.currentTimeMillis() in CurrentHourProvider
    * [HBASE-21721] FSHLog : reduce write#syncs() times
    * [HBASE-24704] Make the Table Schema easier to view even there are multiple families
    * [HBASE-20226] Parallelize region manifest deletes
    * [HBASE-24757] ReplicationSink should limit the batch rowcount for batch mutations based on hbase.rpc.rows.warning.threshold
    * [HBASE-24777] InfoServer support ipv6 host and port
    * [HBASE-24696] Include JVM information on Web UI under "Software Attributes"
    * [HBASE-24709] Support MoveCostFunction use a lower multiplier in offpeak hours
    * [HBASE-24740] Enable journal logging for HBase snapshot operation
    * [HBASE-24578] [WAL] Add a parameter to config RingBufferEventHandler's SyncFuture count
    * [HBASE-24603] Zookeeper sync() call is async
    * [HBASE-24380] Improve WAL splitting log lines to enable sessionization
    * [HBASE-24525] [branch-1] Support ZooKeeper 3.6.0+
    * [HBASE-24483] Add repeated prefix logging for MultipleColumnPrefixFilter
    * [HBASE-24485] Backport to branch-1 HBASE-17738 BucketCache startup is slow
    * [HBASE-24501] Backport to branch-1 HBASE-15785 Unnecessary lock in ByteBufferArray
    * [HBASE-24455] Correct the doc of "On the number of column families"
    * [HBASE-24069] Extend HBASE-16209 strategy (Provide an ExponentialBackOffPolicy sleep between failed region open requests) to region close and split requests
    * [HBASE-24470] Add store file info when log meessages in HStore.
    * [HBASE-24435] Bring back hedged reads metrics to branch-1
    * [HBASE-24428] Priority compaction for recently split daughter regions
    * [HBASE-24423] No need to get lock in canSplit because hasReferences will get lock too
    * [HBASE-24386] TableSnapshotScanner support scan limit
    * [HBASE-24350] HBase table level replication metrics for shippedBytes are always 0
    * [HBASE-24355] Fix typos in the HStore#compact annotation
    * [HBASE-24351] Backport HBASE-24302 to branch-1
    * [HBASE-24345] [ACL] renameRSGroup should require Admin level permission
    * [HBASE-24311] Add more details in MultiVersionConcurrencyControl STUCK log message
    * [HBASE-23264] Resolve a TODO of BucketAllocator: "Why we add the extra 1024 bytes? Slop?"
    * [HBASE-24024] Optionally reject multi() requests with very high no of rows
    * [HBASE-24196] [Shell] Add rename rsgroup command in hbase shell
    * [HBASE-24139] Balancer should avoid leaving idle region servers
    * [HBASE-24229] [Build] Pin rubocop version <= 0.81
    * [HBASE-24148] Upgrade Thrift to 0.13.0: 0.12.0 has outstanding CVEs.
    * [HBASE-24193] BackPort HBASE-18651 to branch-1
    * [HBASE-24112] [RSGroup] Support renaming rsgroup
    * [HBASE-8868]  add metric to report client shortcircuit reads
    * [HBASE-24077] When encounter RowTooBigException, log the row info.
    * [HBASE-24099] Use a fair ReentrantReadWriteLock for the region close lock
    * [HBASE-23678] Literate builder API for version management in schema
    * [HBASE-24032] [RSGroup] Assign created tables to respective rsgroup automatically instead of manual operations
    * [HBASE-23967] Improve the accuracy of the method sizeToString
    * [HBASE-23066] Allow cache on write during compactions when prefetching is enabled

** Test
    * [HBASE-25753] [Flake Test][branch-1] TestSnapshotCloneIndependence's teardown() is always timeout
    * [HBASE-25748] [Flake Test][branch-1] TestAdmin2
    * [HBASE-25740] Backport HBASE-25629 to branch-1
    * [HBASE-25731] TestConnectionImplementation BadHostname tests fail in branch-1
    * [HBASE-25156] TestMasterFailover.testSimpleMasterFailover is flaky
    * [HBASE-25122] [Flake Test][branch-1] TestExportSnapshotWithTemporaryDirectory
    * [HBASE-25114] [Flake Test][branch-1] TestFromClientSide#testCacheOnWriteEvictOnClose
    * [HBASE-25025] [Flaky Test][branch-1] TestFromClientSide#testCheckAndDeleteWithCompareOp
    * [HBASE-25030] [Flaky Test] TestRestartCluster#testClusterRestart
    * [HBASE-25031] [Flaky Test] TestReplicationDisableInactivePeer#testDisableInactivePeer
    * [HBASE-24894] [Flakey Test] TestStochasticLoadBalancer.testMoveCostMultiplier
    * [HBASE-24360] RollingBatchRestartRsAction loses track of dead servers
    * [HBASE-21905] TestFIFOCompactionPolicy is flaky
    * [HBASE-24115] Relocate test-only REST "client" from src/ to test/ and mark Private
    * [HBASE-23957] [flakey test] client.TestMultiParallel fails to read hbase-site.xml
    * [HBASE-23943] Rubocop configuration needs updated

** Task
    * [HBASE-25890] [branch-1] add -U for maven build to force a check for updated releases and snapshots on remote repositories
    * [HBASE-25858] [branch-1] make hbase-thrift optional in hbase-assembly module
    * [HBASE-25831] [branch-1] remove thrift examples out of hbase-examples module for bypassing the thrift version check
    * [HBASE-25845] [branch-1] Precommit fails to build docker due to python-dateutil
    * [HBASE-25804] [branch-1] Make hbase-thrift module build with jdk8
    * [HBASE-25601] Remove search hadoop references in book
    * [HBASE-24640] Purge use of VisibleForTesting
    * [HBASE-25228] Delete dev-support/jenkins_precommit_jira_yetus.sh
    * [HBASE-24200] Upgrade to Yetus 0.12.0
    * [HBASE-23604] Clarify AsyncRegistry usage in the code
    * [HBASE-25004] Log RegionTooBusyException details
    * [HBASE-14847] Add FIFO compaction section to HBase book
    * [HBASE-24662] Update DumpClusterStatusAction to notice changes in region server count
    * [HBASE-24295] [Chaos Monkey] abstract logging through the class hierarchy
    * [HBASE-24658] Update PolicyBasedChaosMonkey to handle uncaught exceptions
    * [HBASE-24492] ProtobufLogReader.readNext does not need looping
    * [HBASE-24477] Move ConfigurationObserver and related classes to hbase-common
    * [HBASE-24271] Set values in `conf/hbase-site.xml` that enable running on `LocalFileSystem` out of the box
    * [HBASE-24301] Update Apache POM to version 23
    * [HBASE-24194] Refactor BufferedEncodedSeeker anonymous classes to named inner class
    * [HBASE-24138] Ensure StochasticLoadBalancer can log details of decision to not run balancer
    * [HBASE-24081] Provide documentation for running Yetus with HBase
    * [HBASE-23980] Use enforcer plugin to print JVM info in maven output
    * [HBASE-23874] Move Jira-attached file precommit definition from script in Jenkins config to dev-support
    * [HBASE-23862] Fix flaky TestSnapshotFromMaster in 1.x versions


Release Notes - HBase - Version 1.6.0 02/21/2020

** Sub-task
    * [HBASE-23151] - Backport HBASE-23083 (Collect Executor status info periodically and report to metrics system) to branch-1
    * [HBASE-23246] - Fix error prone warning in TestMetricsUserSourceImpl
    * [HBASE-23288] - Backport HBASE-23251 (Add Column Family and Table Names to HFileContext) to branch-1
    * [HBASE-23707] - Add IntelliJ check style plugin configuration

** Bug
    * [HBASE-18439] - Subclasses of o.a.h.h.chaos.actions.Action all use the same logger
    * [HBASE-19663] - javadoc creation needs jsr305
    * [HBASE-21776] - Duplicate "Set storagePolicy" debug logging
    * [HBASE-22096] - /storeFile.jsp shows CorruptHFileException when the storeFile is a reference file
    * [HBASE-22441] - BucketCache NullPointerException in cacheBlock
    * [HBASE-23045] -  currentPath may be stitched in a loop in replication source code.
    * [HBASE-23056] - Block count is 0 when BucketCache using persistent IOEngine and retrieve from file 
    * [HBASE-23149] - hbase shouldPerformMajorCompaction logic is not correct
    * [HBASE-23153] - PrimaryRegionCountSkewCostFunction SLB function should implement CostFunction#isNeeded
    * [HBASE-23177] - If fail to open reference because FNFE, make it plain it is a Reference
    * [HBASE-23185] - High cpu usage because getTable()#put() gets config value every time
    * [HBASE-23237] - Negative 'Requests per Second' counts in UI
    * [HBASE-23254] - Release replication buffer quota correctly, when batch includes bulk loaded hfiles
    * [HBASE-23261] - Region stuck in transition while splitting
    * [HBASE-23273] - Table header is not correct on table.jsp when table name is hbase:meta
    * [HBASE-23287] - WALs not aged off of HDFS because LogCleaner is not added to choreService
    * [HBASE-23337] - Several modules missing in nexus for Apache HBase 2.2.2
    * [HBASE-23359] - RS going down with NPE when splitting a region with compaction disabled in branch-1
    * [HBASE-23360] - [CLI] Fix help command "set_quota" to explain removing quota
    * [HBASE-23364] - HRegionServer sometimes does not shut down.
    * [HBASE-23375] - Backport HBASE-22441 to branch-1
    * [HBASE-23590] - Update maxStoreFileRefCount to maxCompactedStoreFileRefCount
    * [HBASE-23698] - Switch central repo to https on branch-1
    * [HBASE-23825] - Increment proto conversion is broken

** New Feature
    * [HBASE-23073] - Add an optional costFunction to balance regions according to a capacity rule
    * [HBASE-23210] - Backport HBASE-15519 (Add per-user metrics) to branch-1
    * [HBASE-23710] - Priority configuration for system coprocessors

** Improvement
    * [HBASE-20626] - Change the value of "Requests Per Second" on WEBUI
    * [HBASE-22701] - Better handle invalid local directory for DynamicClassLoader
    * [HBASE-23114] - Use archiveArtifacts in Jenkinsfiles
    * [HBASE-23172] - HBase Canary region success count metrics reflect column family successes, not region successes
    * [HBASE-23174] - Upgrade jackson and jackson-databind to 2.9.10 (branch-1)
    * [HBASE-23207] - Log a region open journal
    * [HBASE-23208] - Unit formatting in Master & RS UI
    * [HBASE-23212] - Provide config reload for Auto Region Reopen based on storeFile ref count
    * [HBASE-23228] - Allow for jdk8 specific modules on branch-1 in precommit/nightly testing
    * [HBASE-23238] - Additional test and checks for null references on ScannerCallableWithReplicas
    * [HBASE-23245] - All MutableHistogram implementations should remove maxExpected
    * [HBASE-23278] -  Add a table-level compaction progress display on the UI
    * [HBASE-23283] - Provide clear and consistent logging about the period of enabled chores
    * [HBASE-23335] - Improve cost functions array copy in StochasticLoadBalancer
    * [HBASE-23362] - WalPrettyPrinter should include the table name
    * [HBASE-23621] - Reduce number of Checkstyle violations in tests of hbase-common
    * [HBASE-23622] - Reduce number of Checkstyle violations in hbase-common
    * [HBASE-23623] - Reduce number of Checkstyle violations in hbase-rest
    * [HBASE-23625] - Reduce number of Checkstyle violations in hbase-common
    * [HBASE-23626] - Reduce number of Checkstyle violations in tests of hbase-common
    * [HBASE-23627] - Resolve remaining Checkstyle violations in hbase-thrift
    * [HBASE-23645] - Fix remaining Checkstyle violations in tests of hbase-common
    * [HBASE-23646] - Fix remaining Checkstyle violations in tests of hbase-rest
    * [HBASE-23661] - Reduce number of Checkstyle violations in hbase-rest
    * [HBASE-23675] - Move to Apache parent POM version 22
    * [HBASE-23802] - Remove unnecessary Configuration instantiation in LossyAccounting

** Test
    * [HBASE-23259] - Ability to run mini cluster using pre-determined available random ports
    * [HBASE-23552] - Format Javadocs on ITBLL
    * [HBASE-23569] - Validate that the log cleaner actually cleans oldWALs as expected
    * [HBASE-23665] - Split unit tests from TestTableName into a separate test only class
    * [HBASE-23711] - Add test for MinVersions and KeepDeletedCells TTL
    * [HBASE-23749] - TestHFileWriterV3 should have tests for all data block encodings
    * [HBASE-23793] - Increase maven heap allocation to 4G in Yetus personality


** Task
    * [HBASE-23053] - Disable concurrent nightly builds
    * [HBASE-23213] - Backport HBASE-22460 to branch-1
    * [HBASE-23219] - Re-enable ZKLess tests for branch-1 (Revert HBASE-14622)
    * [HBASE-23227] - Upgrade jackson-databind to 2.9.10.1 to avoid recent CVEs
    * [HBASE-23229] - Update branch-1 to 1.6.0-SNAPSHOT
    * [HBASE-23234] - Provide .editorconfig based on checkstyle configuration
    * [HBASE-23236] - Upgrade to yetus 0.11.1
    * [HBASE-23250] - Log message about CleanerChore delegate initialization should be at INFO
    * [HBASE-23774] - Announce user-zh list


Release Notes - HBase - Version 1.5.0 10/14/2019

** Sub-task
    * [HBASE-17884] - Backport HBASE-16217 to branch-1
    * [HBASE-19631] - Allow building HBase 1.5.x against Hadoop 3.0.0
    * [HBASE-19932] - TestSecureIPC in branch-1 fails with NoSuchMethodError against hadoop 3
    * [HBASE-20048] - Revert serial replication feature
    * [HBASE-20716] - Unsafe access cleanup
    * [HBASE-21616] - Port HBASE-21034 (Add new throttle type: read/write capacity unit) to branch-1
    * [HBASE-21675] - Port HBASE-21642 (CopyTable by reading snapshot and bulkloading will save a lot of time) to branch-1
    * [HBASE-21679] - Port HBASE-6028 (Start/Stop compactions at region server level) to branch-1
    * [HBASE-21680] - Port HBASE-20194 (Basic Replication WebUI - Master) and HBASE-20193 (Basic Replication Web UI - Regionserver) to branch-1
    * [HBASE-21727] - Simplify documentation around client timeout
    * [HBASE-21735] - Port HBASE-18784 (Use of filesystem that requires hflush / hsync / append / etc should query outputstream capabilities) to branch-1
    * [HBASE-21838] - Create a special ReplicationEndpoint just for verifying the WAL entries are fine
    * [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-22413] - Backport 'HBASE-22399 Change default hadoop-two.version to 2.8.x and remove the 2.7.x hadoop checks' to branch-1
    * [HBASE-22458] - TestClassFinder fails when run on JDK11
    * [HBASE-22506] - Backport HBASE-22500 'Modify pom and jenkins jobs for hadoop versions' to branch-1
    * [HBASE-22535] - TestShellRSGroups fails when run on JDK11
    * [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-16499] - slow replication for small HBase clusters
    * [HBASE-18116] - Replication source in-memory accounting should not include bulk transfer hfiles
    * [HBASE-18312] - Ineffective handling of FileNotFoundException in FileLink$FileLinkInputStream.tryOpen()
    * [HBASE-18517] - limit max log message width in log4j
    * [HBASE-19240] - Fix error-prone errors, part four?
    * [HBASE-19850] - The number of Offline Regions is wrong after restoring a snapshot
    * [HBASE-20006] - TestRestoreSnapshotFromClientWithRegionReplicas is flakey
    * [HBASE-20691] - Storage policy should allow deferring to HDFS
    * [HBASE-20744] - Address FindBugs warnings in branch-1
    * [HBASE-20764] - build broken when latest commit is gpg signed
    * [HBASE-20870] - Wrong HBase root dir in ITBLL's Search Tool
    * [HBASE-20928] - Rewrite calculation of midpoint in binarySearch functions to prevent overflow
    * [HBASE-21021] - Result returned by Append operation should be ordered
    * [HBASE-21070] - SnapshotFileCache won't update for snapshots stored in S3
    * [HBASE-21132] - return wrong result in rest multiget
    * [HBASE-21208] - Bytes#toShort doesn't work without unsafe
    * [HBASE-21575] - memstore above high watermark message is logged too much
    * [HBASE-21740] - NPE happens while shutdown the RS
    * [HBASE-21749] - RS UI may throw NPE and make rs-status page inaccessible with multiwal and replication
    * [HBASE-21777] - "Tune compaction throughput" debug messages even when nothing has changed 
    * [HBASE-21796] - RecoverableZooKeeper indefinitely retries a client stuck in AUTH_FAILED
    * [HBASE-21866] - Do not move the table to null rsgroup when creating an existing table
    * [HBASE-22047] - LeaseException in Scan should be retired
    * [HBASE-22057] - Impose upper-bound on size of ZK ops sent in a single multi()
    * [HBASE-22145] - windows hbase-env causes hbase cli/etc to ignore HBASE_OPTS
    * [HBASE-22185] - RAMQueueEntry#writeToCache should freeBlock if any exception encountered instead of the IOException catch block 
    * [HBASE-22194] - Snapshot unittests fail on Windows due to invalid file path uri
    * [HBASE-22230] - REST Server drops connection on long scans
    * [HBASE-22396] - Backport HBASE-21536 to branch-1
    * [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-22495] - Update SyncTable section, explaining from which specific minor versions "doDeletes/doPuts" is available
    * [HBASE-22510] - Address findbugs/spotbugs complaints (branch-1) 
    * [HBASE-22519] - New Hadoop 2.8 dependencies fail shaded invariants check
    * [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-22545] - TestLogLevel broken
    * [HBASE-22556] - [DOCS] Backport HBASE-15557 to branch-1 and branch-2 
    * [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-22666] - Add missing @Test annotation to TestQuotaThrottle
    * [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-22902] - At regionserver start there's a request to roll the WAL
    * [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-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

** New Feature
    * [HBASE-15666] - shaded dependencies for hbase-testing-util
    * [HBASE-19528] - Major Compaction Tool 
    * [HBASE-22313] - Add a method to FsDelegationToken to accept token kind
    * [HBASE-22622] - WALKey Extended Attributes
    * [HBASE-22623] - Add RegionObserver coprocessor hook for preWALAppend
    * [HBASE-22648] - Snapshot TTL

** Improvement
    * [HBASE-17314] - Limit total buffered size for all replication sources
    * [HBASE-19024] - Configurable default durability for synchronous WAL
    * [HBASE-19036] - Add action in Chaos Monkey to restart Active Namenode
    * [HBASE-19290] - Reduce zk request when doing split log
    * [HBASE-19673] - Backport " Periodically ensure records are not buffered too long by BufferedMutator" to branch-1
    * [HBASE-20087] - Periodically attempt redeploy of regions in FAILED_OPEN state
    * [HBASE-20109] - Add Admin#getMaster API to branch-1
    * [HBASE-20209] - Do Not Use Both Map containsKey and get Methods in Replication Sink
    * [HBASE-20286] - Improving shell command compaction_state
    * [HBASE-20406] - HBase Thrift HTTP - Shouldn't handle TRACE/OPTIONS methods
    * [HBASE-20444] - Improve version comparison logic for HBase specific version string and add unit tests
    * [HBASE-20446] - Allow building HBase 1.x against Hadoop 3.1.x
    * [HBASE-20450] - Provide metrics for number of total active, priority and replication rpc handlers
    * [HBASE-20845] - Support set the consistency for Gets and Scans in thrift2
    * [HBASE-21000] - Default limits for PressureAwareCompactionThroughputController are too low
    * [HBASE-21126] - Add ability for HBase Canary to ignore a configurable number of ZooKeeper down nodes
    * [HBASE-21164] - reportForDuty to spew less log if master is initializing
    * [HBASE-21256] - Improve IntegrationTestBigLinkedList for testing huge data
    * [HBASE-21283] - Add new shell command 'rit' for listing regions in transition
    * [HBASE-21318] - Make RefreshHFilesClient runnable
    * [HBASE-21325] - Force to terminate regionserver when abort hang in somewhere
    * [HBASE-21328] - add HBASE_DISABLE_HADOOP_CLASSPATH_LOOKUP switch to hbase-env.sh
    * [HBASE-21595] - Print thread's information and stack traces when RS is aborting forcibly
    * [HBASE-21659] - Avoid to load duplicate coprocessors in system config and table descriptor
    * [HBASE-21810] - bulkload  support set hfile compression on client 
    * [HBASE-21883] - Enhancements to Major Compaction tool
    * [HBASE-21932] - Use Runtime.getRuntime().halt to terminate regionserver when abort timeout 
    * [HBASE-21952] - Test Failure: TestClientOperationInterrupt.testInterrupt50Percent
    * [HBASE-21969] - Improve the update of destination rsgroup of RSGroupInfoManagerImpl#moveTables() 
    * [HBASE-21987] - Simplify RSGroupInfoManagerImpl#flushConfig() for offline mode
    * [HBASE-21996] - Set locale for javadoc
    * [HBASE-22009] - Improve RSGroupInfoManagerImpl#getDefaultServers()
    * [HBASE-22034] - Backport HBASE-21401 and HBASE-22032 to branch-1
    * [HBASE-22051] - Expect values are hard-coded in the verifications of TestRSGroupsBasics
    * [HBASE-22283] - Print row and table information when failed to get region location
    * [HBASE-22301] - Consider rolling the WAL if the HDFS write pipeline is slow
    * [HBASE-22344] - Document deprecated public APIs
    * [HBASE-22363] - Remove hardcoded number of read cache block buckets 
    * [HBASE-22377] - Provide API to check the existence of a namespace which does not require ADMIN permissions
    * [HBASE-22459] - Expose store reader reference count
    * [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-22618] - Provide a way to have Heterogeneous deployment
    * [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-22760] - Stop/Resume Snapshot Auto-Cleanup activity with shell command
    * [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-23024] - Replace Exception.initCause() with Constructor args
    * [HBASE-23038] - Provide consistent and clear logging about disabling chores
    * [HBASE-23058] - Should be "Column Family Name" in table.jsp
    * [HBASE-23116] - LoadBalancer should log table name when balancing per table

** Test
    * [HBASE-20667] - Rename TestGlobalThrottler to TestReplicationGlobalThrottler
    * [HBASE-21272] - Re-add assertions for RS Group admin tests
    * [HBASE-22450] - Port TestStoreScannerClosure from HBASE-22072
    * [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-19858] - Backport HBASE-14061 (Support CF-level Storage Policy) to branch-1
    * [HBASE-20486] - Change default throughput controller to PressureAwareThroughputController in branch-1
    * [HBASE-20493] - Port HBASE-19994 (Create a new class for RPC throttling exception, make it retryable) to branch-1
    * [HBASE-20501] - Change the Hadoop minimum version to 2.7.1
    * [HBASE-21606] - Document use of the meta table load metrics added in HBASE-19722
    * [HBASE-21791] - Upgrade thrift dependency to 0.12.0
    * [HBASE-21826] - Rebase 1.5.0 CHANGES on branch-1.4 at release 1.4.9
    * [HBASE-22044] - ByteBufferUtils should not be IA.Public API
    * [HBASE-22321] - Add 1.5 release line to the Hadoop supported versions table
    * [HBASE-22409] - update branch-1 ref guide section on prereqs
    * [HBASE-22444] - Backport HBASE-19954 to branch-1
    * [HBASE-22911] - fewer concurrent github PR builds
    * [HBASE-22913] - Use Hadoop label for nightly builds
    * [HBASE-23023] - upgrade shellcheck used to test in nightly and precommit


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

