HBase Change Log


Release Notes - HBase - Version 1.1.6 07/16/2016

** Sub-task
    * [HBASE-15878] - Deprecate doBulkLoad(Path hfofDir, final HTable table)  in branch-1 (even though its 'late')
    * [HBASE-16056] - Procedure v2 - fix master crash for FileNotFound
    * [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







** Bug
    * [HBASE-11625] - Reading datablock throws "Invalid HFile block magic" and can not switch to hdfs checksum 
    * [HBASE-15615] - Wrong sleep time when RegionServerCallable need retry
    * [HBASE-15698] - Increment TimeRange not serialized to server
    * [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-15850] - Localize the configuration change in testCheckTableLocks to reduce flakiness of TestHBaseFsck test suite 
    * [HBASE-15852] - Backport HBASE-15125 'HBaseFsck's adoptHdfsOrphan function creates region with wrong end key boundary' to Apache HBase 1.1
    * [HBASE-15856] - Cached Connection instances can wind up with addresses never resolved
    * [HBASE-15873] - ACL for snapshot restore / clone is not enforced
    * [HBASE-15880] - RpcClientImpl#tracedWriteRequest incorrectly closes HTrace span
    * [HBASE-15925] - compat-module maven variable not evaluated
    * [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-16012] - Major compaction can't work due to obsolete scanner read point in RegionServer
    * [HBASE-16016] - AssignmentManager#waitForAssignment could have unexpected negative deadline
    * [HBASE-16032] - Possible memory leak in StoreScanner
    * [HBASE-16093] - Splits failed before creating daughter regions leave meta inconsistent
    * [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-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






** Improvement
    * [HBASE-13532] - Make UnknownScannerException logging less scary
    * [HBASE-15119] - Include git SHA in check_compatibility reports
    * [HBASE-15837] - Memstore size accounting is wrong if postBatchMutate() throws exception
    * [HBASE-15854] - Log the cause of SASL connection failures
    * [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

















** Task
    * [HBASE-15729] - Remove old JDiff wrapper scripts in dev-support
    * [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





Release Notes - HBase - Version 1.1.5 05/08/2016

** Sub-task
    * [HBASE-15479] - No more garbage or beware of autoboxing







** Bug
    * [HBASE-13627] - Terminating RS results in redundant CLOSE RPC
    * [HBASE-15234] - ReplicationLogCleaner can abort due to transient ZK issues
    * [HBASE-15295] - MutateTableAccess.multiMutate() does not get high priority causing a deadlock
    * [HBASE-15325] - ResultScanner allowing partial result will miss the rest of the row if the region is moved between two rpc requests
    * [HBASE-15433] - SnapshotManager#restoreSnapshot not update table and region count quota correctly when encountering exception
    * [HBASE-15485] - Filter.reset() should not be called between batches
    * [HBASE-15582] - SnapshotManifestV1 too verbose when there are no regions
    * [HBASE-15587] - FSTableDescriptors.getDescriptor() logs stack trace erronously
    * [HBASE-15613] - TestNamespaceCommand times out
    * [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-15636] - hard coded wait time out value in HBaseTestingUtility#waitUntilAllRegionsAssigned might cause test failure
    * [HBASE-15645] - hbase.rpc.timeout is not used in operations of HTable
    * [HBASE-15670] - Add missing Snapshot.proto to the maven profile for compiling protobuf
    * [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-15738] - Ensure artifacts in project dist area include required md5 file
    * [HBASE-15742] - Reduce allocation of objects in metrics
    * [HBASE-15755] - SnapshotDescriptionUtils and SnapshotTestingUtils do not have any Interface audience marked






** Improvement
    * [HBASE-15478] - add comments to FSHLog explaining why syncRunnerIndex won't overflow
    * [HBASE-15720] - Print row locks at the debug dump page



** New Feature
    * [HBASE-15592] - Print Procedure WAL content














** Task
    * [HBASE-15183] - Correct discrepancies in CHANGES.txt on branch-1.1







Release Notes - HBase - Version 1.1.4 03/16/2016

** Sub-task
    * [HBASE-13963] - avoid leaking jdk.tools
    * [HBASE-14798] - NPE reporting server load causes regionserver abort; causes TestAcidGuarantee to fail
    * [HBASE-15153] - Apply checkFamilies addendum on increment to 1.1 and 1.0
    * [HBASE-15157] - Add *PerformanceTest for Append, CheckAnd*
    * [HBASE-15169] - Backport HBASE-14362 'TestWALProcedureStoreOnHDFS is super duper flaky' to branch-1.1
    * [HBASE-15170] - Backport HBASE-14807 'TestWALLockup is flakey' to branch-1.1
    * [HBASE-15213] - Fix increment performance regression caused by HBASE-8763 on branch-1.0
    * [HBASE-15224] - Undo  "hbase.increment.fast.but.narrow.consistency" option; it is not necessary since HBASE-15213 
    * [HBASE-15270] - Use appropriate encoding for "filter" field in TaskMonitorTmpl.jamon 
    * [HBASE-15288] - Flakey TestMasterMetrics.testClusterRequests on branch-1.1
    * [HBASE-15311] - Prevent NPE in BlockCacheViewTmpl
    * [HBASE-15351] - Fix description of hbase.bucketcache.size in hbase-default.xml
    * [HBASE-15365] - Do not write to '/tmp' in TestHBaseConfiguration







** Bug
    * [HBASE-14192] - Fix REST Cluster constructor with String List
    * [HBASE-14460] - [Perf Regression] Merge of MVCC and SequenceId (HBASE-8763) slowed Increments, CheckAndPuts, batch operations
    * [HBASE-14807] - TestWALLockup is flakey
    * [HBASE-14812] - Fix ResultBoundedCompletionService deadlock
    * [HBASE-15019] - Replication stuck when HDFS is restarted
    * [HBASE-15100] - Master WALProcs still never clean up
    * [HBASE-15120] - Backport HBASE-14883 to branch-1.1
    * [HBASE-15122] - Servlets generate XSS_REQUEST_PARAMETER_TO_SERVLET_WRITER findbugs warnings
    * [HBASE-15140] - Fix ResultBoundedCompletionService deadlock 
    * [HBASE-15145] - HBCK and Replication should authenticate to zookepeer using server principal
    * [HBASE-15147] - Shell should use Admin.listTableNames() instead of Admin.listTables() 
    * [HBASE-15150] - Fix TestDurablity in branch-1.1
    * [HBASE-15152] - Automatically include prefix-tree module in MR jobs if present
    * [HBASE-15167] - Deadlock in TestNamespaceAuditor.testRegionOperations on 1.1
    * [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-15214] - Valid mutate Ops fail with RPC Codec in use and region moves across
    * [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-15261] - Make Throwable t in DaughterOpener volatile
    * [HBASE-15279] - OrderedBytes.isEncodedValue does not check for int8 and int16 types
    * [HBASE-15290] - Hbase Rest CheckAndAPI should save other cells along with compared cell
    * [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-15325] - ResultScanner allowing partial result will miss the rest of the row if the region is moved between two rpc requests
    * [HBASE-15358] - canEnforceTimeLimitFromScope should use timeScope instead of sizeScope
    * [HBASE-15378] - Scanner cannot handle heartbeat message with no results
    * [HBASE-15430] - Failed taking snapshot - Manifest proto-message too large
    * [HBASE-15439] - getMaximumAllowedTimeBetweenRuns in ScheduledChore ignores the TimeUnit






** Improvement
    * [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-15413] - Procedure-V2: print out ProcedureInfo during trace



















** Test
    * [HBASE-13590] - TestEnableTableHandler.testEnableTableWithNoRegionServers is flakey




Release Notes - HBase - Version 1.1.3 01/16/2016

** Sub-task
    * [HBASE-13415] - Procedure V2 - Use nonces for double submits from client
    * [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-14374] - Backport parent 'HBASE-14317 Stuck FSHLog' issue to 1.1
    * [HBASE-14428] - Upgrade our surefire-plugin from 2.18 to 2.18.1
    * [HBASE-14432] - Procedure V2 - enforce ACL on procedure admin tasks
    * [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-14535] - Integration test for rpc connection concurrency / deadlock testing 
    * [HBASE-14538] - Remove TestVisibilityLabelsWithDistributedLogReplay, a test for an unsupported feature
    * [HBASE-14539] - Slight improvement of StoreScanner.optimize
    * [HBASE-14571] - Purge TestProcessBasedCluster; it does nothing and then fails
    * [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-14655] - Narrow the scope of doAs() calls to region observer notifications for compaction
    * [HBASE-14657] - Remove unneeded API from EncodedSeeker
    * [HBASE-14709] - Parent change breaks graceful_stop.sh on a cluster
    * [HBASE-14863] - Add missing test/resources/log4j files in hbase modules
    * [HBASE-14947] - Procedure V2 - WALProcedureStore improvements
    * [HBASE-15031] - Fix merge of MVCC and SequenceID performance regression in branch-1.0
    * [HBASE-15095] - isReturnResult=false  on fast path in branch-1.1 and branch-1.0 is not respected






** Brainstorming
    * [HBASE-14869] - Better request latency and size histograms

** Bug
    * [HBASE-13143] - TestCacheOnWrite is flaky and needs a diet
    * [HBASE-13250] - chown of ExportSnapshot does not cover all path and files
    * [HBASE-13318] - RpcServer.getListenerAddress should handle when the accept channel is closed
    * [HBASE-13324] - o.a.h.h.Coprocessor should be LimitedPrivate("Coprocessor")
    * [HBASE-13770] - Programmatic JAAS configuration option for secure zookeeper may be broken
    * [HBASE-13982] - Add info for visibility labels/cell TTLs to ImportTsv
    * [HBASE-14224] - Fix coprocessor handling of duplicate classes
    * [HBASE-14229] - Flushing canceled by coprocessor still leads to memstoreSize set down
    * [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-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-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-14327] - TestIOFencing#testFencingAroundCompactionAfterWALSync is flaky
    * [HBASE-14338] - License notification misspells 'Asciidoctor'
    * [HBASE-14342] - Recursive call in RegionMergeTransactionImpl.getJournal()
    * [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-14366] - NPE in case visibility expression is not present in labels table during importtsv run
    * [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-14385] - Close the sockets that is missing in connection closure.
    * [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-14431] - AsyncRpcClient#removeConnection() never removes connection from connections pool if server fails
    * [HBASE-14445] - ExportSnapshot does not honor -chmod option
    * [HBASE-14449] - Rewrite deadlock prevention for concurrent connection close
    * [HBASE-14471] - Thrift -  HTTP Error 413 full HEAD if using kerberos authentication
    * [HBASE-14474] - DeadLock in RpcClientImpl.Connection.close() 
    * [HBASE-14475] - Region split requests are always audited with "hbase" user rather than request user
    * [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-14531] - graceful_stop.sh "if [ "$local" ]" condition unexpected behaviour
    * [HBASE-14536] - Balancer & SSH interfering with each other leading to unavailability
    * [HBASE-14545] - TestMasterFailover often times out
    * [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-14594] - Use new DNS API introduced in HADOOP-12437
    * [HBASE-14598] - ByteBufferOutputStream grows its HeapByteBuffer beyond JVM limitations
    * [HBASE-14621] - ReplicationLogCleaner gets stuck when a regionserver crashes
    * [HBASE-14624] - BucketCache.freeBlock is too expensive
    * [HBASE-14632] - Region server aborts due to unguarded dereference of Reader
    * [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-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-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-14733] - Minor typo in alter_namespace.rb
    * [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-14782] - FuzzyRowFilter skips valid rows
    * [HBASE-14799] - Commons-collections object deserialization remote command execution vulnerability 
    * [HBASE-14806] - Missing sources.jar for several modules when building HBase
    * [HBASE-14809] - Grant / revoke Namespace admin permission to group 
    * [HBASE-14822] - Renewing leases of scanners doesn't work
    * [HBASE-14840] - Sink cluster reports data replication request as success though the data is not replicated
    * [HBASE-14843] - TestWALProcedureStore.testLoad is flakey
    * [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-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-14923] - VerifyReplication should not mask the exception during result comparison 
    * [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-14952] - hbase-assembly source artifact has some incorrect modules
    * [HBASE-14954] - IllegalArgumentException was thrown when doing online configuration change in CompactSplitThread
    * [HBASE-14968] - ConcurrentModificationException in region close resulting in the region staying in closing state
    * [HBASE-14977] - ChoreService.shutdown may result in ConcurrentModificationException
    * [HBASE-14989] - Implementation of Mutation.getWriteToWAL() is backwards
    * [HBASE-15018] - Inconsistent way of handling TimeoutException in the rpc client implementations
    * [HBASE-15035] - bulkloading hfiles with tags that require splits do not preserve tags
    * [HBASE-15052] - Use EnvironmentEdgeManager in ReplicationSource 
    * [HBASE-15083] - Gets from Multiactions are not counted in metrics for gets.
    * [HBASE-15085] - IllegalStateException was thrown when scanning on bulkloaded HFiles
    * [HBASE-15104] - Occasional failures due to NotServingRegionException in IT tests






** Improvement
    * [HBASE-14261] - Enhance Chaos Monkey framework by adding zookeeper and datanode fault injections.
    * [HBASE-14436] - HTableDescriptor#addCoprocessor will always make RegionCoprocessorHost create new Configuration
    * [HBASE-14461] - Cleanup IncreasingToUpperBoundRegionSplitPolicy
    * [HBASE-14582] - Regionserver status webpage bucketcache list can become huge
    * [HBASE-14586] - Use a maven profile to run Jacoco analysis
    * [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-14696] - Support setting allowPartialResults in mapreduce Mappers
    * [HBASE-14715] - Add javadocs to DelegatingRetryingCallable
    * [HBASE-14730] - region server needs to log warnings when there are attributes configured for cells with hfile v2
    * [HBASE-14780] - Integration Tests that run with ChaosMonkey need to specify CFs

















** Task
    * [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-14516] - categorize hadoop-compat tests
    * [HBASE-15033] - Backport test-patch.sh and zombie-detector.sh from master to branch-1.0/1.1


** Test
    * [HBASE-14344] - Add timeouts to TestHttpServerLifecycle
    * [HBASE-14839] - [branch-1] Backport test categories so that patch backport is easier


Release Nodes - HBase - Version 1.1.2 08/21/2015

** Sub-task
    * [HBASE-13832] - Procedure V2: master fail to start due to WALProcedureStore sync failures when HDFS data nodes count is low
    * [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-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-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-14176] - Add missing headers to META-INF files







** 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-12865] - WALs may be deleted before they are replicated to peers
    * [HBASE-13329] - ArrayIndexOutOfBoundsException in CellComparator#getMinimumMidpointArray
    * [HBASE-13337] - Table regions are not assigning back, after restarting all regionservers at once.
    * [HBASE-13352] - Add hbase.import.version to Import usage.
    * [HBASE-13561] - ITBLL.Verify doesn't actually evaluate counters after job completes
    * [HBASE-13825] - Use ProtobufUtil#mergeFrom and ProtobufUtil#mergeDelimitedFrom in place of builder methods of same name
    * [HBASE-13835] - KeyValueHeap.current might be in heap when exception happens in pollRealKV
    * [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-13881] - Bug in HTable#incrementColumnValue implementation
    * [HBASE-13888] - Fix refill bug from HBASE-13686
    * [HBASE-13889] - Fix hbase-shaded-client artifact so it works on hbase-downstreamer
    * [HBASE-13895] - DATALOSS: Region assigned before WAL replay when abort
    * [HBASE-13923] - Loaded region coprocessors are not reported in shell status command
    * [HBASE-13930] - Exclude Findbugs packages from shaded jars
    * [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-13974] - TestRateLimiter#testFixedIntervalResourceAvailability may fail
    * [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-14021] - Quota table has a wrong description on the UI
    * [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-14100] - Fix high priority findbugs warnings
    * [HBASE-14109] - NPE if we don't load fully before we are shutdown
    * [HBASE-14119] - Show meaningful error messages instead of stack traces in hbase shell commands. Fixing few commands in this jira.
    * [HBASE-14146] - Once replication sees an error it slows down forever
    * [HBASE-14155] - StackOverflowError in reverse scan
    * [HBASE-14157] - Interfaces implemented by subclasses should be checked when registering CoprocessorService
    * [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-14195] - Closed connections are not removed from ConnectionCache (Thrift, REST)
    * [HBASE-14196] - Thrift server idle connection timeout issue
    * [HBASE-14206] - MultiRowRangeFilter returns records whose rowKeys are out of allowed ranges
    * [HBASE-14209] - TestShell visibility tests failing
    * [HBASE-14214] - list_labels shouldn't raise ArgumentError if no labels are defined 
    * [HBASE-14219] - src tgz no longer builds after HBASE-14085
    * [HBASE-14228] - Close BufferedMutator and connection in MultiTableOutputFormat
    * [HBASE-14234] - Exception encountered in WALProcedureStore#rollWriter() should be properly handled
    * [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






** Improvement
    * [HBASE-13925] - Use zookeeper multi to clear znodes in ZKProcedureUtil
    * [HBASE-14002] - Add --noReplicationSetup option to IntegrationTestReplication
    * [HBASE-14097] - Log link to client scan troubleshooting section when scanner exceptions happen.
    * [HBASE-14260] - don't build javadocs for hbase-protocol module
















** Task
    * [HBASE-11276] - Add back support for running ChaosMonkey as standalone tool
    * [HBASE-13089] - Fix test compilation error on building against htrace-3.2.0-incubating
    * [HBASE-13941] - Backport HBASE-13917 (Remove string comparison to identify request priority) to release branches
    * [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


** Test
    * [HBASE-14197] - TestRegionServerHostname#testInvalidRegionServerHostnameAbortsServer fails in Jenkins
    * [HBASE-14210] - Create test for cell level ACLs involving user group




Release Notes - HBase - Version 1.1.1 06/23/2015

** Sub-task
    * [HBASE-13470] - High level Integration test for master DDL operations
    * [HBASE-13497] - Remove MVCC stamps from HFile when that is safe
    * [HBASE-13579] - Avoid isCellTTLExpired() for NO-TAG cases
    * [HBASE-13593] - Quota support for namespace should take snapshot restore and clone into account
    * [HBASE-13658] - Improve the test run time for TestAccessController class
    * [HBASE-13937] - Partially revert HBASE-13172






** Bug
    * [HBASE-11830] - TestReplicationThrottler.testThrottling failed on virtual boxes
    * [HBASE-12413] - Mismatch in the equals and hashcode methods of KeyValue
    * [HBASE-13200] - Improper configuration can leads to endless lease recovery during failover
    * [HBASE-13217] - Procedure fails due to ZK issue
    * [HBASE-13312] - SmallScannerCallable does not increment scan metrics
    * [HBASE-13325] - Protocol Buffers 2.5 no longer available for download on code.google.com
    * [HBASE-13333] - Renew Scanner Lease without advancing the RegionScanner
    * [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-13564] - Master MBeans are not published
    * [HBASE-13574] - Broken TestHBaseFsck in master with hadoop 2.6.0
    * [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-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-13628] - Use AtomicLong as size in BoundedConcurrentLinkedQueue
    * [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-13647] - Default value for hbase.client.operation.timeout is too high
    * [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-13703] - ReplicateContext should not be a member of ReplicationSource
    * [HBASE-13704] - Hbase throws OutOfOrderScannerNextException when MultiRowRangeFilter is used
    * [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-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-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-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-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-13821] - WARN if hbase.bucketcache.percentage.in.combinedcache is set
    * [HBASE-13822] - shell is broken with NoMethodError
    * [HBASE-13824] - TestGenerateDelegationToken: Master fails to start in Windows environment
    * [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-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-13851] - RpcClientImpl.close() can hang with cancelled replica RPCs
    * [HBASE-13853] - ITBLL improvements after HBASE-13811
    * [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-13885] - ZK watches leaks during snapshots
    * [HBASE-13892] - Scanner with all results filtered out results in NPE
    * [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-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





** Improvement
    * [HBASE-12415] - Add add(byte[][] arrays) to Bytes.
    * [HBASE-13247] - Change BufferedMutatorExample to use addColumn() since add() is deprecated
    * [HBASE-13344] - Add enforcer rule that matches our JDK support statement
    * [HBASE-13366] - Throw DoNotRetryIOException instead of read only IOException
    * [HBASE-13420] - RegionEnvironment.offerExecutionLatency Blocks Threads under Heavy Load
    * [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-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-13846] - Run MiniCluster on top of other MiniDfsCluster
    * [HBASE-13894] - Avoid visitor alloc each call of ByteBufferArray get/putMultiple()
















** Task
    * [HBASE-13666] - book.pdf is not renamed during site build
    * [HBASE-13697] - publish updated ref guide with prereq tables for 1.1 release train
    * [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


** Test
    * [HBASE-13591] - TestHBaseFsck is flakey
    * [HBASE-13609] - TestFastFail is still failing
    * [HBASE-13623] - TestSplitLogManager.testGetPreviousRecoveryMode is still flaky
    * [HBASE-13940] - IntegrationTestBulkLoad needs option to specify output folders used by test



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 0.99.2 12/07/2014

** Sub-task
    * [HBASE-10671] - Add missing InterfaceAudience annotations for classes in hbase-common and hbase-client modules
    * [HBASE-11164] - Document and test rolling updates from 0.98 -> 1.0
    * [HBASE-11915] - Document and test 0.94 -> 1.0.0 update
    * [HBASE-11964] - Improve spreading replication load from failed regionservers
    * [HBASE-12075] - Preemptive Fast Fail
    * [HBASE-12128] - Cache configuration and RpcController selection for Table in Connection
    * [HBASE-12147] - Porting Online Config Change from 89-fb
    * [HBASE-12202] - Support DirectByteBuffer usage in HFileBlock
    * [HBASE-12214] - Visibility Controller in the peer cluster should be able to extract visibility tags from the replicated cells
    * [HBASE-12288] - Support DirectByteBuffer usage in DataBlock Encoding area
    * [HBASE-12297] - Support DBB usage in Bloom and HFileIndex area
    * [HBASE-12313] - Redo the hfile index length optimization so cell-based rather than serialized KV key
    * [HBASE-12353] - Turn down logging on some spewing unit tests
    * [HBASE-12354] - Update dependencies in time for 1.0 release
    * [HBASE-12355] - Update maven plugins
    * [HBASE-12363] - Improve how KEEP_DELETED_CELLS works with MIN_VERSIONS
    * [HBASE-12379] - Try surefire 2.18-SNAPSHOT
    * [HBASE-12400] - Fix refguide so it does connection#getTable rather than new HTable everywhere: first cut!
    * [HBASE-12404] - Task 5 from parent: Replace internal HTable constructor use with HConnection#getTable (0.98, 0.99)
    * [HBASE-12471] - Task 4. replace internal ConnectionManager#{delete,get}Connection use with #close, #createConnection (0.98, 0.99) under src/main/java
    * [HBASE-12517] - Several HConstant members are assignable
    * [HBASE-12518] - Task 4 polish. Remove CM#{get,delete}Connection
    * [HBASE-12519] - Remove tabs used as whitespace
    * [HBASE-12526] - Remove unused imports
    * [HBASE-12577] - Disable distributed log replay by default



** Bug
    * [HBASE-7211] - Improve hbase ref guide for the testing part.
    * [HBASE-9003] - TableMapReduceUtil should not rely on org.apache.hadoop.util.JarFinder#getJar
    * [HBASE-9117] - Remove HTablePool and all HConnection pooling related APIs
    * [HBASE-9157] - ZKUtil.blockUntilAvailable loops forever with non-recoverable errors
    * [HBASE-9527] - Review all old api that takes a table name as a byte array and ensure none can pass ns + tablename
    * [HBASE-10536] - ImportTsv should fail fast if any of the column family passed to the job is not present in the table
    * [HBASE-10780] - HFilePrettyPrinter#processFile should return immediately if file does not exist
    * [HBASE-11099] - Two situations where we could open a region with smaller sequence number
    * [HBASE-11562] - CopyTable should provide an option to shuffle the mapper tasks
    * [HBASE-11835] - Wrong managenement of non expected calls in the client
    * [HBASE-12017] - Use Connection.createTable() instead of HTable constructors.
    * [HBASE-12029] - Use Table and RegionLocator in HTable.getRegionLocations() 
    * [HBASE-12053] - SecurityBulkLoadEndPoint set 777 permission on input data files 
    * [HBASE-12072] - Standardize retry handling for master operations
    * [HBASE-12083] - Deprecate new HBaseAdmin() in favor of Connection.getAdmin()
    * [HBASE-12142] - Truncate command does not preserve ACLs table
    * [HBASE-12194] - Make TestEncodedSeekers faster
    * [HBASE-12219] - Cache more efficiently getAll() and get() in FSTableDescriptors
    * [HBASE-12226] - TestAccessController#testPermissionList failing on master
    * [HBASE-12229] - NullPointerException in SnapshotTestingUtils
    * [HBASE-12234] - Make TestMultithreadedTableMapper a little more stable.
    * [HBASE-12237] - HBaseZeroCopyByteString#wrap() should not be called in hbase-client code
    * [HBASE-12238] - A few ugly exceptions on startup
    * [HBASE-12240] - hbase-daemon.sh should remove pid file if process not found running
    * [HBASE-12241] - The crash of regionServer when taking deadserver's replication queue breaks replication
    * [HBASE-12242] - Fix new javadoc warnings in Admin, etc.
    * [HBASE-12246] - Compilation with hadoop-2.3.x and 2.2.x is broken
    * [HBASE-12247] - Replace setHTable() with initializeTable() in TableInputFormat.
    * [HBASE-12248] - broken link in hbase shell help
    * [HBASE-12252] - IntegrationTestBulkLoad fails with illegal partition error
    * [HBASE-12257] - TestAssignmentManager unsynchronized access to regionPlans
    * [HBASE-12258] - Make TestHBaseFsck less flaky
    * [HBASE-12261] - Add checkstyle to HBase build process
    * [HBASE-12263] - RegionServer listens on localhost in distributed cluster when DNS is unavailable
    * [HBASE-12265] - HBase shell 'show_filters' points to internal Facebook URL
    * [HBASE-12274] - Race between RegionScannerImpl#nextInternal() and RegionScannerImpl#close() may produce null pointer exception
    * [HBASE-12277] - Refactor bulkLoad methods in AccessController to its own interface
    * [HBASE-12278] - Race condition in TestSecureLoadIncrementalHFilesSplitRecovery
    * [HBASE-12279] - Generated thrift files were generated with the wrong parameters
    * [HBASE-12281] - ClonedPrefixTreeCell should implement HeapSize
    * [HBASE-12285] - Builds are failing, possibly because of SUREFIRE-1091
    * [HBASE-12294] - Can't build the docs after the hbase-checkstyle module was added
    * [HBASE-12301] - user_permission command does not show global permissions
    * [HBASE-12302] - VisibilityClient getAuths does not propagate remote service exception correctly
    * [HBASE-12304] - CellCounter will throw AIOBE when output directory is not specified
    * [HBASE-12306] - CellCounter output's wrong value for Total Families Across all Rows in output file
    * [HBASE-12308] - Fix typo in hbase-rest profile name
    * [HBASE-12312] - Another couple of createTable race conditions
    * [HBASE-12314] - Add chaos monkey policy to execute two actions concurrently
    * [HBASE-12315] - Fix 0.98 Tests after checkstyle got parented
    * [HBASE-12316] - test-patch.sh (Hadoop-QA) outputs the wrong release audit warnings URL
    * [HBASE-12318] - Add license header to checkstyle xml files
    * [HBASE-12319] - Inconsistencies during region recovery due to close/open of a region during recovery
    * [HBASE-12322] - Add clean up command to ITBLL
    * [HBASE-12327] - MetricsHBaseServerSourceFactory#createContextName has wrong conditions
    * [HBASE-12329] - Table create with duplicate column family names quietly succeeds
    * [HBASE-12334] - Handling of DeserializationException causes needless retry on failure
    * [HBASE-12336] - RegionServer failed to shutdown for NodeFailoverWorker thread
    * [HBASE-12337] - Import tool fails with NullPointerException if clusterIds is not initialized
    * [HBASE-12346] - Scan's default auths behavior under Visibility labels
    * [HBASE-12352] - Add hbase-annotation-tests to runtime classpath so can run hbase it tests.
    * [HBASE-12356] - Rpc with region replica does not propagate tracing spans
    * [HBASE-12359] - MulticastPublisher should specify IPv4/v6 protocol family when creating multicast channel
    * [HBASE-12366] - Add login code to HBase Canary tool.
    * [HBASE-12372] - [WINDOWS] Enable log4j configuration in hbase.cmd 
    * [HBASE-12375] - LoadIncrementalHFiles fails to load data in table when CF name starts with '_'
    * [HBASE-12377] - HBaseAdmin#deleteTable fails when META region is moved around the same timeframe
    * [HBASE-12384] - TestTags can hang on fast test hosts
    * [HBASE-12386] - Replication gets stuck following a transient zookeeper error to remote peer cluster
    * [HBASE-12398] - Region isn't assigned in an extreme race condition
    * [HBASE-12399] - Master startup race between metrics and RpcServer
    * [HBASE-12402] - ZKPermissionWatcher race condition in refreshing the cache leaving stale ACLs and causing AccessDenied
    * [HBASE-12407] - HConnectionKey doesn't contain CUSTOM_CONTROLLER_CONF_KEY in CONNECTION_PROPERTIES 
    * [HBASE-12414] - Move HFileLink.exists() to base class
    * [HBASE-12417] - Scan copy constructor does not retain small attribute
    * [HBASE-12419] - "Partial cell read caused by EOF" ERRORs on replication source during replication
    * [HBASE-12420] - BucketCache logged startup message is egregiously large
    * [HBASE-12423] - Use a non-managed Table in TableOutputFormat
    * [HBASE-12428] - region_mover.rb script is broken if port is not specified
    * [HBASE-12440] - Region may remain offline on clean startup under certain race condition
    * [HBASE-12445] - hbase is removing all remaining cells immediately after the cell marked with marker = KeyValue.Type.DeleteColumn via PUT
    * [HBASE-12448] - Fix rate reporting in compaction progress DEBUG logging
    * [HBASE-12449] - Use the max timestamp of current or old cell's timestamp in HRegion.append()
    * [HBASE-12450] - Unbalance chaos monkey might kill all region servers without starting them back
    * [HBASE-12459] - Use a non-managed Table in mapred.TableOutputFormat
    * [HBASE-12460] - Moving Chore to hbase-common module.
    * [HBASE-12461] - FSVisitor logging is excessive
    * [HBASE-12464] - meta table region assignment stuck in the FAILED_OPEN state due to region server not fully ready to serve
    * [HBASE-12478] - HBASE-10141 and MIN_VERSIONS are not compatible
    * [HBASE-12479] - Backport HBASE-11689 (Track meta in transition) to 0.98 and branch-1
    * [HBASE-12490] - Replace uses of setAutoFlush(boolean, boolean)
    * [HBASE-12491] - TableMapReduceUtil.findContainingJar() NPE
    * [HBASE-12495] - Use interfaces in the shell scripts
    * [HBASE-12513] - Graceful stop script does not restore the balancer state
    * [HBASE-12514] - Cleanup HFileOutputFormat legacy code
    * [HBASE-12520] - Add protected getters on TableInputFormatBase
    * [HBASE-12533] - staging directories are not deleted after secure bulk load
    * [HBASE-12536] - Reduce the effective scope of GLOBAL CREATE and ADMIN permission
    * [HBASE-12537] - HBase should log the remote host on replication error
    * [HBASE-12539] - HFileLinkCleaner logs are uselessly noisy
    * [HBASE-12541] - Add misc debug logging to hanging tests in TestHCM and TestBaseLoadBalancer
    * [HBASE-12544] - ops_mgt.xml missing in branch-1
    * [HBASE-12550] - Check all storefiles are referenced before splitting
    * [HBASE-12560] - [WINDOWS] Append the classpath from Hadoop to HBase classpath in bin/hbase.cmd
    * [HBASE-12576] - Add metrics for rolling the HLog if there are too few DN's in the write pipeline
    * [HBASE-12580] - Zookeeper instantiated even though we might not need it in the shell
    * [HBASE-12581] - TestCellACLWithMultipleVersions failing since task 5 HBASE-12404 (HBASE-12404 addendum)
    * [HBASE-12584] - Fix branch-1 failing since task 5 HBASE-12404 (HBASE-12404 addendum)
    * [HBASE-12595] - Use Connection.getTable() in table.rb
    * [HBASE-12600] - Remove REPLAY tag dependency in Distributed Replay Mode
    * [HBASE-12610] - Close connection in TableInputFormatBase
    * [HBASE-12611] - Create autoCommit() method and remove clearBufferOnFail
    * [HBASE-12614] - Potentially unclosed StoreFile(s) in DefaultCompactor#compact()
    * [HBASE-12616] - We lost the IntegrationTestBigLinkedList COMMANDS in recent usage refactoring




** Improvement
    * [HBASE-2609] - Harmonize the Get and Delete operations
    * [HBASE-4955] - Use the official versions of surefire & junit
    * [HBASE-8361] - Bulk load and other utilities should not create tables for user
    * [HBASE-8572] - Enhance delete_snapshot.rb to call snapshot deletion API with regex
    * [HBASE-10082] - Describe 'table' output is all on one line, could use better formatting
    * [HBASE-10483] - Provide API for retrieving info port when hbase.master.info.port is set to 0
    * [HBASE-11639] - [Visibility controller] Replicate the visibility of Cells as strings
    * [HBASE-11870] - Optimization : Avoid copy of key and value for tags addition in AC and VC
    * [HBASE-12161] - Add support for grant/revoke on namespaces in AccessControlClient
    * [HBASE-12243] - HBaseFsck should auto set ignorePreCheckPermission to true if no fix option is set.
    * [HBASE-12249] - Script to help you adhere to the patch-naming guidelines
    * [HBASE-12264] - ImportTsv should fail fast if output is not specified and table does not exist
    * [HBASE-12271] - Add counters for files skipped during snapshot export
    * [HBASE-12272] - Generate Thrift code through maven
    * [HBASE-12328] - Need to separate JvmMetrics for Master and RegionServer
    * [HBASE-12389] - Reduce the number of versions configured for the ACL table
    * [HBASE-12390] - Change revision style from svn to git
    * [HBASE-12411] - Optionally enable p-reads and private readers for compactions
    * [HBASE-12416] - RegionServerCallable should report what host it was communicating with
    * [HBASE-12424] - Finer grained logging and metrics for split transactions
    * [HBASE-12432] - RpcRetryingCaller should log after fixed number of retries like AsyncProcess
    * [HBASE-12434] - Add a command to compact all the regions in a regionserver
    * [HBASE-12447] - Add support for setTimeRange for RowCounter and CellCounter
    * [HBASE-12455] - Add 'description' to bean and attribute output when you do /jmx?description=true
    * [HBASE-12529] - Use ThreadLocalRandom for RandomQueueBalancer
    * [HBASE-12569] - Control MaxDirectMemorySize in the same manner as heap size

** New Feature
    * [HBASE-8707] - Add LongComparator for filter
    * [HBASE-12286] - [shell] Add server/cluster online load of configuration changes
    * [HBASE-12361] - Show data locality of region in table page
    * [HBASE-12496] - A blockedRequestsCount metric








** Task
    * [HBASE-10200] - Better error message when HttpServer fails to start due to java.net.BindException
    * [HBASE-10870] - Deprecate and replace HCD methods that have a 'should' prefix with a 'get' instead
    * [HBASE-12250] - Adding an endpoint for updating the regionserver config
    * [HBASE-12344] - Split up TestAdmin
    * [HBASE-12381] - Add maven enforcer rules for build assumptions
    * [HBASE-12388] - Document that WALObservers don't get empty edits.
    * [HBASE-12427] - Change branch-1 version from 0.99.2-SNAPSHOT to 0.99.3-SNAPSHOT
    * [HBASE-12442] - Bring KeyValue#createFirstOnRow() back to branch-1 as deprecated methods
    * [HBASE-12456] - Update surefire from 2.18-SNAPSHOT to 2.18
    * [HBASE-12516] - Clean up master so QA Bot is in known good state
    * [HBASE-12522] - Backport WAL refactoring to branch-1


** Test
    * [HBASE-12317] - Run IntegrationTestRegionReplicaPerf w.o mapred
    * [HBASE-12335] - IntegrationTestRegionReplicaPerf is flaky
    * [HBASE-12367] - Integration tests should not restore the cluster if the CM is not destructive
    * [HBASE-12378] - Add a test to verify that the read-replica is able to read after a compaction
    * [HBASE-12401] - Add some timestamp signposts in IntegrationTestMTTR
    * [HBASE-12403] - IntegrationTestMTTR flaky due to aggressive RS restart timeout
    * [HBASE-12472] - Improve debuggability of IntegrationTestBulkLoad
    * [HBASE-12549] - Fix TestAssignmentManagerOnCluster#testAssignRacingWithSSH() flaky test
    * [HBASE-12554] - TestBaseLoadBalancer may timeout due to lengthy rack lookup

** Umbrella
    * [HBASE-10602] - Cleanup HTable public interface
    * [HBASE-10856] - Prep for 1.0



Release Notes - HBase - Version 0.99.1 10/15/2014

** Sub-task
    * [HBASE-11160] - Undo append waiting on region edit/sequence id update
    * [HBASE-11178] - Remove deprecation annotations from mapred namespace
    * [HBASE-11738] - Document improvements to LoadTestTool and PerformanceEvaluation
    * [HBASE-11872] - Avoid usage of KeyValueUtil#ensureKeyValue from Compactor
    * [HBASE-11874] - Support Cell to be passed to StoreFile.Writer rather than KeyValue
    * [HBASE-11917] - Deprecate / Remove HTableUtil
    * [HBASE-11920] - Add CP hooks for ReplicationEndPoint
    * [HBASE-11930] - Document new permission check to roll WAL writer
    * [HBASE-11980] - Change sync to hsync, remove unused InfoServer, and reference our httpserver instead of hadoops
    * [HBASE-11997] - CopyTable with bulkload
    * [HBASE-12023] - HRegion.applyFamilyMapToMemstore creates too many iterator objects.
    * [HBASE-12046] - HTD/HCD setters should be builder-style
    * [HBASE-12047] - Avoid usage of KeyValueUtil#ensureKeyValue in simple cases
    * [HBASE-12050] - Avoid KeyValueUtil#ensureKeyValue from DefaultMemStore
    * [HBASE-12051] - Avoid KeyValueUtil#ensureKeyValue from DefaultMemStore
    * [HBASE-12059] - Create hbase-annotations module
    * [HBASE-12062] - Fix usage of Collections.toArray
    * [HBASE-12068] - [Branch-1] Avoid need to always do KeyValueUtil#ensureKeyValue for Filter transformCell
    * [HBASE-12069] - Finish making HFile.Writer Cell-centric; undo APIs that expect KV serializations.
    * [HBASE-12076] - Move InterfaceAudience imports to hbase-annotations
    * [HBASE-12077] - FilterLists create many ArrayList$Itr objects per row.
    * [HBASE-12079] - Deprecate KeyValueUtil#ensureKeyValue(s)
    * [HBASE-12082] - Find a way to set timestamp on Cells on the server
    * [HBASE-12086] - Fix bugs in HTableMultiplexer
    * [HBASE-12096] - In ZKSplitLog Coordination and AggregateImplementation replace enhaced for statements with basic for statement to avoid unnecessary object allocation
    * [HBASE-12104] - Some optimization and bugfix for HTableMultiplexer
    * [HBASE-12110] - Fix .arcconfig
    * [HBASE-12112] - Avoid KeyValueUtil#ensureKeyValue some more simple cases
    * [HBASE-12115] - Fix NumberFormat Exception in TableInputFormatBase.
    * [HBASE-12189] - Fix new issues found by coverity static analysis
    * [HBASE-12210] - Avoid KeyValue in Prefix Tree

** Bug
    * [HBASE-6994] - minor doc update about DEFAULT_ACCEPTABLE_FACTOR
    * [HBASE-8808] - Use Jacoco to generate Unit Test coverage reports
    * [HBASE-8936] - Fixing TestSplitLogWorker while running Jacoco tests.
    * [HBASE-9005] - Improve documentation around KEEP_DELETED_CELLS, time range scans, and delete markers
    * [HBASE-9513] - Why is PE#RandomSeekScanTest way slower in 0.96 than in 0.94?
    * [HBASE-10314] - Add Chaos Monkey that doesn't touch the master
    * [HBASE-10748] - hbase-daemon.sh fails to execute with 'sh' command
    * [HBASE-10757] - Change HTable class doc so it sends people to HCM getting instances
    * [HBASE-11145] - UNEXPECTED!!! when HLog sync: Queue full
    * [HBASE-11266] - Remove shaded references to logger
    * [HBASE-11394] - Replication can have data loss if peer id contains hyphen "-"
    * [HBASE-11401] - Late-binding sequenceid presumes a particular KeyValue mvcc format hampering experiment
    * [HBASE-11405] - Multiple invocations of hbck in parallel disables balancer permanently 
    * [HBASE-11804] - Raise default heap size if unspecified
    * [HBASE-11815] - Flush and compaction could just close the tmp writer if there is an exception
    * [HBASE-11890] - HBase REST Client is hard coded to http protocol
    * [HBASE-11906] - Meta data loss with distributed log replay
    * [HBASE-11967] - HMaster in standalone won't go down if it gets 'Unhandled exception'
    * [HBASE-11974] - When a disabled table is scanned, NotServingRegionException is thrown instead of TableNotEnabledException
    * [HBASE-11982] - Bootstraping hbase:meta table creates a WAL file in region dir
    * [HBASE-11988] - AC/VC system table create on postStartMaster fails too often in test
    * [HBASE-11991] - Region states may be out of sync
    * [HBASE-11994] - PutCombiner floods the M/R log with repeated log messages.
    * [HBASE-12007] - StochasticBalancer should avoid putting user regions on master
    * [HBASE-12019] - hbase-daemon.sh overwrite HBASE_ROOT_LOGGER and HBASE_SECURITY_LOGGER variables
    * [HBASE-12024] - Fix javadoc warning
    * [HBASE-12025] - TestHttpServerLifecycle.testStartedServerWithRequestLog hangs frequently
    * [HBASE-12034] - If I kill single RS in branch-1, all regions end up on Master!
    * [HBASE-12038] - Replace internal uses of signatures with byte[] and String tableNames to use the TableName equivalents. 
    * [HBASE-12041] - AssertionError in HFilePerformanceEvaluation.UniformRandomReadBenchmark
    * [HBASE-12042] - Replace internal uses of HTable(Configuration, String) with HTable(Configuration, TableName)
    * [HBASE-12043] - REST server should respond with FORBIDDEN(403) code on AccessDeniedException
    * [HBASE-12044] - REST delete operation should not retry disableTable for DoNotRetryIOException
    * [HBASE-12045] - REST proxy users configuration in hbase-site.xml is ignored
    * [HBASE-12052] - BulkLoad Failed due to no write permission on input files
    * [HBASE-12054] - bad state after NamespaceUpgrade with reserved table names
    * [HBASE-12056] - RPC logging too much in DEBUG mode
    * [HBASE-12064] - hbase.master.balancer.stochastic.numRegionLoadsToRemember is not used
    * [HBASE-12065] -  Import tool is not restoring multiple DeleteFamily markers of a row
    * [HBASE-12067] - Remove deprecated metrics classes.
    * [HBASE-12078] - Missing Data when scanning using PREFIX_TREE DATA-BLOCK-ENCODING
    * [HBASE-12095] - SecureWALCellCodec should handle the case where encryption is disabled
    * [HBASE-12098] - User granted namespace table create permissions can't create a table
    * [HBASE-12099] - TestScannerModel fails if using jackson 1.9.13
    * [HBASE-12106] - Move test annotations to test artifact
    * [HBASE-12109] - user_permission command for namespace does not return correct result
    * [HBASE-12119] - Master regionserver web UI NOT_FOUND
    * [HBASE-12120] - HBase shell doesn't allow deleting of a cell by user with W-only permissions to it
    * [HBASE-12122] - Try not to assign user regions to master all the time
    * [HBASE-12123] - Failed assertion in BucketCache after 11331
    * [HBASE-12124] - Closed region could stay closed if master stops at bad time
    * [HBASE-12126] - Region server coprocessor endpoint
    * [HBASE-12130] - HBASE-11980 calls hflush and hsync doing near double the syncing work
    * [HBASE-12134] - publish_website.sh script is too optimistic
    * [HBASE-12135] - Website is broken
    * [HBASE-12136] - Race condition between client adding tableCF replication znode and  server triggering TableCFsTracker
    * [HBASE-12137] - Alter table add cf doesn't do compression test
    * [HBASE-12139] - StochasticLoadBalancer doesn't work on large lightly loaded clusters
    * [HBASE-12140] - Add ConnectionFactory.createConnection() to create using default HBaseConfiguration.
    * [HBASE-12145] - Fix javadoc and findbugs so new folks aren't freaked when they see them
    * [HBASE-12146] - RegionServerTracker should escape data in log messages
    * [HBASE-12149] - TestRegionPlacement is failing undeterministically
    * [HBASE-12151] - Make dev scripts executable
    * [HBASE-12153] - Fixing TestReplicaWithCluster
    * [HBASE-12156] - TableName cache isn't used for one of valueOf methods.
    * [HBASE-12158] - TestHttpServerLifecycle.testStartedServerWithRequestLog goes zombie on occasion
    * [HBASE-12160] - Make Surefire's argLine configurable in the command line
    * [HBASE-12164] - Check for presence of user Id in SecureBulkLoadEndpoint#secureBulkLoadHFiles() is inaccurate
    * [HBASE-12165] - TestEndToEndSplitTransaction.testFromClientSideWhileSplitting fails
    * [HBASE-12166] - TestDistributedLogSplitting.testMasterStartsUpWithLogReplayWork
    * [HBASE-12167] - NPE in AssignmentManager
    * [HBASE-12170] - TestReplicaWithCluster.testReplicaAndReplication timeouts
    * [HBASE-12181] - Some tests create a table and try to use it before regions get assigned
    * [HBASE-12183] - FuzzyRowFilter doesn't support reverse scans
    * [HBASE-12184] - ServerShutdownHandler throws NPE
    * [HBASE-12191] - Make TestCacheOnWrite faster.
    * [HBASE-12196] - SSH should retry in case failed to assign regions
    * [HBASE-12197] - Move REST
    * [HBASE-12198] - Fix the bug of not updating location cache
    * [HBASE-12199] - Make TestAtomicOperation and TestEncodedSeekers faster
    * [HBASE-12200] - When an RPC server handler thread dies, throw exception 
    * [HBASE-12206] - NPE in RSRpcServices
    * [HBASE-12209] - NPE in HRegionServer#getLastSequenceId
    * [HBASE-12218] - Make HBaseCommonTestingUtil#deleteDir try harder

** Improvement
    * [HBASE-10153] - improve VerifyReplication to compute BADROWS more accurately
    * [HBASE-10411] - [Book] Add a kerberos 'request is a replay (34)' issue at troubleshooting section
    * [HBASE-11796] - Add client support for atomic checkAndMutate
    * [HBASE-11879] - Change TableInputFormatBase to take interface arguments
    * [HBASE-11907] - Use the joni byte[] regex engine in place of j.u.regex in RegexStringComparator
    * [HBASE-11948] - graceful_stop.sh should use hbase-daemon.sh when executed on the decomissioned node
    * [HBASE-12010] - Use TableName.META_TABLE_NAME instead of indirectly from HTableDescriptor
    * [HBASE-12011] - Add namespace column during display of user tables
    * [HBASE-12013] - Make region_mover.rb support multiple regionservers per host
    * [HBASE-12021] - Hbase shell does not respect the HBASE_OPTS set by the user in console
    * [HBASE-12032] - Script to stop regionservers via RPC
    * [HBASE-12049] - Help for alter command is a bit confusing
    * [HBASE-12090] - Bytes: more Unsafe, more Faster 
    * [HBASE-12118] - Explain how to grant permission to a namespace in grant command usage
    * [HBASE-12176] - WALCellCodec Encoders support for non-KeyValue Cells
    * [HBASE-12212] - HBaseTestingUtility#waitUntilAllRegionsAssigned should wait for RegionStates
    * [HBASE-12220] - Add hedgedReads and hedgedReadWins metrics

** New Feature
    * [HBASE-11990] - Make setting the start and stop row for a specific prefix easier
    * [HBASE-11995] - Use Connection and ConnectionFactory where possible
    * [HBASE-12127] - Move the core Connection creation functionality into ConnectionFactory
    * [HBASE-12133] - Add FastLongHistogram for metric computation
    * [HBASE-12143] - Minor fix for Table code

** Task
    * [HBASE-9004] - Fix Documentation around Minor compaction and ttl
    * [HBASE-11692] - Document how and why to do a manual region split
    * [HBASE-11730] - Document release managers for non-deprecated branches
    * [HBASE-11761] - Add a FAQ item for updating a maven-managed application from 0.94 -> 0.96+
    * [HBASE-11960] - Provide a sample to show how to use Thrift client authentication
    * [HBASE-11978] - Backport 'HBASE-7767 Get rid of ZKTable, and table enable/disable state in ZK' to 1.0
    * [HBASE-11981] - Document how to find the units of measure for a given HBase metric

** Test
    * [HBASE-11798] - TestBucketWriterThread may hang due to WriterThread stopping prematurely
    * [HBASE-11838] - Enable PREFIX_TREE in integration tests
    * [HBASE-12008] - Remove IntegrationTestImportTsv#testRunFromOutputCommitter
    * [HBASE-12055] - TestBucketWriterThread hangs flakily based on timing


Release Notes - HBase - Version 0.99.0 9/22/2014

** Sub-task
    * [HBASE-2251] - PE defaults to 1k rows - uncommon use case, and easy to hit benchmarks
    * [HBASE-5175] - Add DoubleColumnInterpreter
    * [HBASE-6873] - Clean up Coprocessor loading failure handling
    * [HBASE-8541] - implement flush-into-stripes in stripe compactions
    * [HBASE-9149] - javadoc cleanup of to reflect .META. rename to hbase:meta
    * [HBASE-9261] - Add cp hooks after {start|close}RegionOperation
    * [HBASE-9489] - Add cp hooks in online merge before and after setting PONR
    * [HBASE-9846] - Integration test and LoadTestTool support for cell ACLs
    * [HBASE-9858] - Integration test and LoadTestTool support for cell Visibility
    * [HBASE-9889] - Make sure we clean up scannerReadPoints upon any exceptions
    * [HBASE-9941] - The context ClassLoader isn't set while calling into a coprocessor
    * [HBASE-9966] - Create IntegrationTest for Online Bloom Filter Change
    * [HBASE-9977] - Define C interface of HBase Client Asynchronous APIs
    * [HBASE-10043] - Fix Potential Resouce Leak in MultiTableInputFormatBase
    * [HBASE-10094] - Add batching to HLogPerformanceEvaluation
    * [HBASE-10110] - Fix Potential Resource Leak in StoreFlusher
    * [HBASE-10124] - Make Sub Classes Static When Possible
    * [HBASE-10143] - Clean up dead local stores in FSUtils
    * [HBASE-10150] - Write attachment Id of tested patch into JIRA comment
    * [HBASE-10156] - FSHLog Refactor (WAS -> Fix up the HBASE-8755 slowdown when low contention)
    * [HBASE-10158] - Add sync rate histogram to HLogPE
    * [HBASE-10169] - Batch coprocessor
    * [HBASE-10297] - LoadAndVerify Integration Test for cell visibility
    * [HBASE-10347] - HRegionInfo changes for adding replicaId and MetaEditor/MetaReader changes for region replicas
    * [HBASE-10348] - HTableDescriptor changes for region replicas
    * [HBASE-10350] - Master/AM/RegionStates changes to create and assign region replicas
    * [HBASE-10351] - LoadBalancer changes for supporting region replicas
    * [HBASE-10352] - Region and RegionServer changes for opening region replicas, and refreshing store files
    * [HBASE-10354] - Add an API for defining consistency per request
    * [HBASE-10355] - Failover RPC's from client using region replicas
    * [HBASE-10356] - Failover RPC's for multi-get 
    * [HBASE-10357] - Failover RPC's for scans
    * [HBASE-10359] - Master/RS WebUI changes for region replicas 
    * [HBASE-10361] - Enable/AlterTable support for region replicas
    * [HBASE-10362] - HBCK changes for supporting region replicas
    * [HBASE-10391] - Deprecate KeyValue#getBuffer
    * [HBASE-10420] - Replace KV.getBuffer with KV.get{Row|Family|Qualifier|Value|Tags}Array
    * [HBASE-10513] - Provide user documentation for region replicas
    * [HBASE-10517] - NPE in MetaCache.clearCache()
    * [HBASE-10519] - Add handling for swallowed InterruptedException thrown by Thread.sleep in rest related files
    * [HBASE-10520] - Add handling for swallowed InterruptedException thrown by Thread.sleep in MiniZooKeeperCluster
    * [HBASE-10521] - Add handling for swallowed InterruptedException thrown by Thread.sleep in RpcServer
    * [HBASE-10522] - Correct wrong handling and add proper handling for swallowed InterruptedException thrown by Thread.sleep in client
    * [HBASE-10523] - Correct wrong handling and add proper handling for swallowed InterruptedException thrown by Thread.sleep in util
    * [HBASE-10524] - Correct wrong handling and add proper handling for swallowed InterruptedException thrown by Thread.sleep in regionserver
    * [HBASE-10526] - Using Cell instead of KeyValue in HFileOutputFormat
    * [HBASE-10529] - Make Cell extend Cloneable
    * [HBASE-10530] - Add util methods in CellUtil
    * [HBASE-10531] - Revisit how the key byte[] is passed to HFileScanner.seekTo and reseekTo
    * [HBASE-10532] - Make KeyValueComparator in KeyValue to accept Cell instead of KeyValue.
    * [HBASE-10550] - Register HBase tokens with ServiceLoader
    * [HBASE-10561] - Forward port: HBASE-10212 New rpc metric: number of active handler
    * [HBASE-10572] - Create an IntegrationTest for region replicas
    * [HBASE-10573] - Use Netty 4
    * [HBASE-10616] - Integration test for multi-get calls
    * [HBASE-10620] - LoadBalancer.needsBalance() should check for co-located region replicas as well
    * [HBASE-10630] - NullPointerException in ConnectionManager$HConnectionImplementation.locateRegionInMeta() due to missing region info
    * [HBASE-10633] - StoreFileRefresherChore throws ConcurrentModificationException sometimes
    * [HBASE-10634] - Multiget doesn't fully work
    * [HBASE-10648] - Pluggable Memstore
    * [HBASE-10650] - Fix incorrect handling of IE that restores current thread's interrupt status within while/for loops in RegionServer
    * [HBASE-10651] - Fix incorrect handling of IE that restores current thread's interrupt status within while/for loops in Replication
    * [HBASE-10652] - Fix incorrect handling of IE that restores current thread's interrupt status within while/for loops in rpc
    * [HBASE-10661] - TestStochasticLoadBalancer.testRegionReplicationOnMidClusterWithRacks() is flaky
    * [HBASE-10672] - Table snapshot should handle tables whose REGION_REPLICATION is greater than one
    * [HBASE-10680] - Check if the block keys, index keys can be used as Cells instead of byte[]
    * [HBASE-10688] - Add a draining_node script to manage nodes in draining mode
    * [HBASE-10691] - test-patch.sh should continue even if compilation against hadoop 1.0 / 1.1 fails
    * [HBASE-10697] - Convert TestSimpleTotalOrderPartitioner to junit4 test
    * [HBASE-10701] - Cache invalidation improvements from client side
    * [HBASE-10704] - BaseLoadBalancer#roundRobinAssignment() may add same region to assignment plan multiple times
    * [HBASE-10717] - TestFSHDFSUtils#testIsSameHdfs fails with IllegalArgumentException running against hadoop 2.3
    * [HBASE-10723] - Convert TestExplicitColumnTracker to junit4 test
    * [HBASE-10729] - Enable table doesn't balance out replicas evenly if the replicas were unassigned earlier
    * [HBASE-10734] - Fix RegionStates.getRegionAssignments to not add duplicate regions
    * [HBASE-10741] - Deprecate HTablePool and HTableFactory
    * [HBASE-10743] - Replica map update is problematic in RegionStates
    * [HBASE-10750] - Pluggable MemStoreLAB
    * [HBASE-10778] - Unique keys accounting in MultiThreadedReader is incorrect
    * [HBASE-10779] - Doc hadoop1 deprecated in 0.98 and NOT supported in hbase 1.0
    * [HBASE-10781] - Remove hadoop-one-compat module and all references to hadoop1
    * [HBASE-10791] - Add integration test to demonstrate performance improvement
    * [HBASE-10794] - multi-get should handle replica location missing from cache
    * [HBASE-10796] - Set default log level as INFO
    * [HBASE-10801] - Ensure DBE interfaces can work with Cell
    * [HBASE-10810] - LoadTestTool should share the connection and connection pool
    * [HBASE-10815] - Master regionserver should be rolling-upgradable
    * [HBASE-10817] - Add some tests on a real cluster for replica: multi master, replication
    * [HBASE-10818] - Add integration test for bulkload with replicas
    * [HBASE-10822] - Thread local addendum to HBASE-10656 Counter
    * [HBASE-10841] - Scan,Get,Put,Delete,etc setters should consistently return this
    * [HBASE-10855] - Enable hfilev3 by default
    * [HBASE-10858] - TestRegionRebalancing is failing
    * [HBASE-10859] - Use HFileLink in opening region files from secondaries
    * [HBASE-10888] - Enable distributed log replay as default
    * [HBASE-10915] - Decouple region closing (HM and HRS) from ZK
    * [HBASE-10918] - [VisibilityController] System table backed ScanLabelGenerator 
    * [HBASE-10929] - Change ScanQueryMatcher to use Cells instead of KeyValue.
    * [HBASE-10930] - Change Filters and GetClosestRowBeforeTracker to work with Cells
    * [HBASE-10957] - HBASE-10070: HMaster can abort with NPE in #rebuildUserRegions 
    * [HBASE-10962] - Decouple region opening (HM and HRS) from ZK
    * [HBASE-10963] - Refactor cell ACL tests
    * [HBASE-10972] - OOBE in prefix key encoding
    * [HBASE-10985] - Decouple Split Transaction from Zookeeper
    * [HBASE-10993] - Deprioritize long-running scanners
    * [HBASE-11025] - Infrastructure for pluggable consensus service
    * [HBASE-11027] - Remove kv.isDeleteXX() and related methods and use CellUtil apis.
    * [HBASE-11053] - Change DeleteTracker APIs to work with Cell
    * [HBASE-11054] - Create new hook in StoreScanner to help user creating his own delete tracker
    * [HBASE-11059] - ZK-less region assignment
    * [HBASE-11069] - Decouple region merging from ZooKeeper
    * [HBASE-11072] - Abstract WAL splitting from ZK
    * [HBASE-11077] - [AccessController] Restore compatible early-out access denial
    * [HBASE-11088] - Support Visibility Expression Deletes in Shell
    * [HBASE-11092] - Server interface should have method getConsensusProvider()
    * [HBASE-11094] - Distributed log replay is incompatible for rolling restarts
    * [HBASE-11098] - Improve documentation around our blockcache options
    * [HBASE-11101] - Documentation review
    * [HBASE-11102] - Document JDK versions supported by each release
    * [HBASE-11108] - Split ZKTable into interface and implementation
    * [HBASE-11109] - flush region sequence id may not be larger than all edits flushed
    * [HBASE-11135] - Change region sequenceid generation so happens earlier in the append cycle rather than just before added to file
    * [HBASE-11140] - LocalHBaseCluster should create ConsensusProvider per each server
    * [HBASE-11161] - Provide example of POJO encoding with protobuf
    * [HBASE-11171] - More doc improvements on block cache options
    * [HBASE-11214] - Fixes for scans on a replicated table
    * [HBASE-11229] - Change block cache percentage metrics to be doubles rather than ints
    * [HBASE-11280] - Document distributed log replay and distributed log splitting
    * [HBASE-11307] - Deprecate SlabCache
    * [HBASE-11318] - Classes in security subpackages missing @InterfaceAudience annotations.
    * [HBASE-11332] - Fix for metas location cache from HBASE-10785 
    * [HBASE-11367] - Pluggable replication endpoint
    * [HBASE-11372] - Remove SlabCache
    * [HBASE-11384] - [Visibility Controller]Check for users covering authorizations for every mutation
    * [HBASE-11395] - Add logging for HBase table operations
    * [HBASE-11471] - Move TableStateManager and ZkTableStateManager and Server to hbase-server
    * [HBASE-11483] - Check the rest of the book for new XML validity errors and fix
    * [HBASE-11508] - Document changes to IPC config parameters from HBASE-11492
    * [HBASE-11511] - Write flush events to WAL
    * [HBASE-11512] - Write region open/close events to WAL
    * [HBASE-11520] - Simplify offheap cache config by removing the confusing "hbase.bucketcache.percentage.in.combinedcache"
    * [HBASE-11559] - Add dumping of DATA block usage to the BlockCache JSON report.
    * [HBASE-11572] - Add support for doing get/scans against a particular replica_id
    * [HBASE-11573] - Report age on eviction
    * [HBASE-11610] - Enhance remote meta updates
    * [HBASE-11651] - Add conf which disables MetaMigrationConvertingToPB check (for experts only)
    * [HBASE-11722] - Document new shortcut commands introduced by HBASE-11649
    * [HBASE-11734] - Document changed behavior of hbase.hstore.time.to.purge.deletes
    * [HBASE-11736] - Document SKIP_FLUSH snapshot option
    * [HBASE-11737] - Document callQueue improvements from HBASE-11355 and HBASE-11724
    * [HBASE-11739] - Document blockCache contents report in the UI
    * [HBASE-11740] - RegionStates.getRegionAssignments() gets stuck on clone
    * [HBASE-11752] - Document blockcache prefetch option
    * [HBASE-11753] - Document HBASE_SHELL_OPTS environment variable
    * [HBASE-11781] - Document new TableMapReduceUtil scanning options
    * [HBASE-11784] - Document global configuration for maxVersion
    * [HBASE-11822] - Convert EnvironmentEdge#getCurrentTimeMillis to getCurrentTime
    * [HBASE-11919] - Remove the deprecated pre/postGet CP hook
    * [HBASE-11923] - Potential race condition in RecoverableZookeeper.checkZk()
    * [HBASE-11934] - Support KeyValueCodec to encode non KeyValue cells.
    * [HBASE-11941] - Rebuild site because of major structural changes to HTML
    * [HBASE-11963] - Synchronize peer cluster replication connection attempts

** Brainstorming
    * [HBASE-9507] - Promote methods of WALActionsListener to WALObserver
    * [HBASE-11209] - Increase the default value for hbase.hregion.memstore.block.multipler from 2 to 4

** Bug
    * [HBASE-3787] - Increment is non-idempotent but client retries RPC
    * [HBASE-4931] - CopyTable instructions could be improved.
    * [HBASE-5356] - region_mover.rb can hang if table region it belongs to is deleted.
    * [HBASE-6506] - Setting CACHE_BLOCKS to false in an hbase shell scan doesn't work
    * [HBASE-6642] - enable_all,disable_all,drop_all can call "list" command with regex directly.
    * [HBASE-6701] - Revisit thrust of paragraph on splitting
    * [HBASE-7226] - HRegion.checkAndMutate uses incorrect comparison result for <, <=, > and >=
    * [HBASE-7963] - HBase VerifyReplication not working when security enabled
    * [HBASE-8112] - Deprecate HTable#batch(final List<? extends Row>)
    * [HBASE-8269] - Fix data locallity documentation.
    * [HBASE-8304] - Bulkload fails to remove files if fs.default.name / fs.defaultFS is configured without default port
    * [HBASE-8529] - checkOpen is missing from multi, mutate, get and multiGet etc.
    * [HBASE-8701] - distributedLogReplay need to apply wal edits in the receiving order of those edits
    * [HBASE-8713] - [hadoop1] Log spam each time the WAL is rolled
    * [HBASE-8803] - region_mover.rb should move multiple regions at a time
    * [HBASE-8817] - Enhance The Apache HBase Reference Guide
    * [HBASE-9151] - HBCK cannot fix when meta server znode deleted, this can happen if all region servers stopped and there are no logs to split.
    * [HBASE-9292] - Syncer fails but we won't go down
    * [HBASE-9294] - NPE in /rs-status during RS shutdown
    * [HBASE-9346] - HBCK should provide an option to check if regions boundaries are the same in META and in stores.
    * [HBASE-9445] - Snapshots should create column family dirs for empty regions
    * [HBASE-9473] - Change UI to list 'system tables' rather than 'catalog tables'.
    * [HBASE-9485] - TableOutputCommitter should implement recovery if we don't want jobs to start from 0 on RM restart
    * [HBASE-9708] - Improve Snapshot Name Error Message
    * [HBASE-9721] - RegionServer should not accept regionOpen RPC intended for another(previous) server
    * [HBASE-9745] - Append HBASE_CLASSPATH to end of Java classpath and use another env var for prefix
    * [HBASE-9746] - RegionServer can't start when replication tries to replicate to an unknown host
    * [HBASE-9754] - Eliminate threadlocal from MVCC code
    * [HBASE-9778] - Add hint to ExplicitColumnTracker to avoid seeking
    * [HBASE-9990] - HTable uses the conf for each "newCaller"
    * [HBASE-10018] - Remove region location prefetching
    * [HBASE-10061] - TableMapReduceUtil.findOrCreateJar calls updateMap(null, ) resulting in thrown NPE
    * [HBASE-10069] - Potential duplicate calls to log#appendNoSync() in HRegion#doMiniBatchMutation()
    * [HBASE-10073] - Revert HBASE-9718 (Add a test scope dependency on org.slf4j:slf4j-api to hbase-client)
    * [HBASE-10079] - Race in TableName cache
    * [HBASE-10080] - Unnecessary call to locateRegion when creating an HTable instance
    * [HBASE-10084] - [WINDOWS] bin\hbase.cmd should allow whitespaces in java.library.path and classpath
    * [HBASE-10087] - Store should be locked during a memstore snapshot
    * [HBASE-10090] - Master could hang in assigning meta
    * [HBASE-10097] - Remove a region name string creation in HRegion#nextInternal
    * [HBASE-10098] - [WINDOWS] pass in native library directory from hadoop for unit tests
    * [HBASE-10099] - javadoc warning introduced by LabelExpander 188: warning - @return tag has no arguments 
    * [HBASE-10101] - testOfflineRegionReAssginedAfterMasterRestart times out sometimes.
    * [HBASE-10103] - TestNodeHealthCheckChore#testRSHealthChore: Stoppable must have been stopped
    * [HBASE-10107] - [JDK7] TestHBaseSaslRpcClient.testHBaseSaslRpcClientCreation failing on Jenkins
    * [HBASE-10108] - NullPointerException thrown while use Canary with '-regionserver' option
    * [HBASE-10112] - Hbase rest query params for maxVersions and maxValues are not parsed
    * [HBASE-10114] - _scan_internal() in table.rb should accept argument that specifies reverse scan
    * [HBASE-10117] - Avoid synchronization in HRegionScannerImpl.isFilterDone
    * [HBASE-10118] - Major compact keeps deletes with future timestamps
    * [HBASE-10120] - start-hbase.sh doesn't respect --config in non-distributed mode
    * [HBASE-10123] - Change default ports; move them out of linux ephemeral port range
    * [HBASE-10132] - sun.security.pkcs11.wrapper.PKCS11Exception: CKR_ARGUMENTS_BAD
    * [HBASE-10135] - Remove ? extends from HLogSplitter#getOutputCounts
    * [HBASE-10137] - GeneralBulkAssigner with retain assignment plan can be used in EnableTableHandler to bulk assign the regions
    * [HBASE-10138] - incorrect or confusing test value is used in block caches
    * [HBASE-10142] - TestLogRolling#testLogRollOnDatanodeDeath test failure
    * [HBASE-10146] - Bump HTrace version to 2.04
    * [HBASE-10148] - [VisibilityController] Tolerate regions in recovery
    * [HBASE-10149] - TestZKPermissionsWatcher.testPermissionsWatcher test failure
    * [HBASE-10155] - HRegion isRecovering state is wrongly coming in postOpen hook
    * [HBASE-10161] - [AccessController] Tolerate regions in recovery
    * [HBASE-10163] - Example Thrift DemoClient is flaky
    * [HBASE-10176] - Canary#sniff() should close the HTable instance
    * [HBASE-10178] - Potential null object dereference in TablePermission#equals()
    * [HBASE-10179] - HRegionServer underreports readRequestCounts by 1 under certain conditions
    * [HBASE-10182] - Potential null object deference in AssignmentManager#handleRegion()
    * [HBASE-10186] - region_mover.rb broken because ServerName constructor is changed to private
    * [HBASE-10187] - AccessController#preOpen - Include 'labels' table also into special tables list.
    * [HBASE-10193] - Cleanup HRegion if one of the store fails to open at region initialization
    * [HBASE-10194] - [Usability]: Instructions in CompactionTool no longer accurate because of namespaces
    * [HBASE-10196] - Enhance HBCK to understand the case after online region merge
    * [HBASE-10205] - ConcurrentModificationException in BucketAllocator
    * [HBASE-10207] - ZKVisibilityLabelWatcher : Populate the labels cache on startup
    * [HBASE-10210] - during master startup, RS can be you-are-dead-ed by master in error
    * [HBASE-10215] - TableNotFoundException should be thrown after removing stale znode in ETH
    * [HBASE-10219] - HTTPS support for HBase in RegionServerListTmpl.jamon
    * [HBASE-10220] - Put all test service principals into the superusers list
    * [HBASE-10221] - Region from coprocessor invocations can be null on failure
    * [HBASE-10223] - [VisibilityController] cellVisibility presence check on Delete mutation is wrong
    * [HBASE-10225] - Bug in calls to RegionObsever.postScannerFilterRow
    * [HBASE-10226] - [AccessController] Namespace grants not always checked
    * [HBASE-10231] - Potential NPE in HBaseFsck#checkMetaRegion()
    * [HBASE-10232] - Remove native profile from hbase-shell
    * [HBASE-10233] - VisibilityController is too chatty at DEBUG level
    * [HBASE-10249] - TestReplicationSyncUpTool fails because failover takes too long
    * [HBASE-10251] - Restore API Compat for PerformanceEvaluation.generateValue()
    * [HBASE-10260] - Canary Doesn't pick up Configuration properly.
    * [HBASE-10264] - [MapReduce]: CompactionTool in mapred mode is missing classes in its classpath
    * [HBASE-10267] - TestNamespaceCommands occasionally fails
    * [HBASE-10268] - TestSplitLogWorker occasionally fails
    * [HBASE-10271] - [regression] Cannot use the wildcard address since HBASE-9593
    * [HBASE-10272] - Cluster becomes nonoperational if the node hosting the active Master AND ROOT/META table goes offline
    * [HBASE-10274] - MiniZookeeperCluster should close ZKDatabase when shutdown ZooKeeperServers
    * [HBASE-10284] - Build broken with svn 1.8
    * [HBASE-10292] - TestRegionServerCoprocessorExceptionWithAbort fails occasionally
    * [HBASE-10298] - TestIOFencing occasionally fails
    * [HBASE-10302] - Fix rat check issues in hbase-native-client.
    * [HBASE-10304] - Running an hbase job jar: IllegalAccessError: class com.google.protobuf.ZeroCopyLiteralByteString cannot access its superclass com.google.protobuf.LiteralByteString
    * [HBASE-10307] - IntegrationTestIngestWithEncryption assumes localhost cluster
    * [HBASE-10310] - ZNodeCleaner session expired for /hbase/master
    * [HBASE-10312] - Flooding the cluster with administrative actions leads to collapse
    * [HBASE-10313] - Duplicate servlet-api jars in hbase 0.96.0
    * [HBASE-10315] - Canary shouldn't exit with 3 if there is no master running.
    * [HBASE-10316] - Canary#RegionServerMonitor#monitorRegionServers() should close the scanner returned by table.getScanner()
    * [HBASE-10317] - getClientPort method of MiniZooKeeperCluster does not always return the correct value
    * [HBASE-10318] - generate-hadoopX-poms.sh expects the version to have one extra '-'
    * [HBASE-10320] - Avoid ArrayList.iterator() ExplicitColumnTracker
    * [HBASE-10321] - CellCodec has broken the 96 client to 98 server compatibility
    * [HBASE-10322] - Strip tags from KV while sending back to client on reads
    * [HBASE-10326] - Super user should be able scan all the cells irrespective of the visibility labels
    * [HBASE-10327] - Remove remove(K, V) from type PoolMap<K,V>
    * [HBASE-10329] - Fail the writes rather than proceeding silently to prevent data loss when AsyncSyncer encounters null writer and its writes aren't synced by other Asyncer
    * [HBASE-10330] - TableInputFormat/TableRecordReaderImpl leaks HTable
    * [HBASE-10332] - Missing .regioninfo file during daughter open processing
    * [HBASE-10333] - Assignments are not retained on a cluster start
    * [HBASE-10334] - RegionServer links in table.jsp is broken
    * [HBASE-10335] - AuthFailedException in zookeeper may block replication forever
    * [HBASE-10336] - Remove deprecated usage of Hadoop HttpServer in InfoServer
    * [HBASE-10337] - HTable.get() uninteruptible
    * [HBASE-10338] - Region server fails to start with AccessController coprocessor if installed into RegionServerCoprocessorHost
    * [HBASE-10339] - Mutation::getFamilyMap method was lost in 98
    * [HBASE-10349] - Table became unusable when master balanced its region after table was dropped
    * [HBASE-10365] - HBaseFsck should clean up connection properly when repair is completed
    * [HBASE-10370] - Compaction in out-of-date Store causes region split failure
    * [HBASE-10371] - Compaction creates empty hfile, then selects this file for compaction and creates empty hfile and over again
    * [HBASE-10375] - hbase-default.xml hbase.status.multicast.address.port does not match code
    * [HBASE-10384] - Failed to increment serveral columns in one Increment
    * [HBASE-10392] - Correct references to hbase.regionserver.global.memstore.upperLimit
    * [HBASE-10397] - Fix findbugs introduced from HBASE-9426
    * [HBASE-10400] - [hbck] Continue if region dir missing on region merge attempt
    * [HBASE-10401] - [hbck] perform overlap group merges in parallel
    * [HBASE-10407] - String Format Exception
    * [HBASE-10412] - Distributed log replay : Cell tags getting missed
    * [HBASE-10413] - Tablesplit.getLength returns 0
    * [HBASE-10417] - index is not incremented in PutSortReducer#reduce()
    * [HBASE-10422] - ZeroCopyLiteralByteString.zeroCopyGetBytes has an unusable prototype and conflicts with AsyncHBase
    * [HBASE-10426] - user_permission in security.rb calls non-existent UserPermission#getTable method
    * [HBASE-10428] - Test jars should have scope test
    * [HBASE-10429] - Make Visibility Controller to throw a better msg if it is of type RegionServerCoprocessor
    * [HBASE-10431] - Rename com.google.protobuf.ZeroCopyLiteralByteString
    * [HBASE-10432] - Rpc retries non-recoverable error
    * [HBASE-10433] - SecureProtobufWALReader does not handle unencrypted WALs if configured to encrypt
    * [HBASE-10434] - Store Tag compression information for a WAL in its header
    * [HBASE-10435] - Lower the log level of Canary region server match
    * [HBASE-10436] - restore regionserver lists removed from hbase 0.96+ jmx
    * [HBASE-10438] - NPE from LRUDictionary when size reaches the max init value
    * [HBASE-10441] - [docs] nit default max versions is now 1 instead of 3 after HBASE-8450 
    * [HBASE-10442] - prepareDelete() isn't called before doPreMutationHook for a row deletion case
    * [HBASE-10443] - IndexOutOfBoundExceptions when processing compressed tags in HFile
    * [HBASE-10446] - Backup master gives Error 500 for debug dump
    * [HBASE-10447] - Memstore flusher scans storefiles also when the scanner heap gets reset
    * [HBASE-10448] - ZKUtil create and watch methods don't set watch in some cases
    * [HBASE-10449] - Wrong execution pool configuration in HConnectionManager
    * [HBASE-10451] - Enable back Tag compression on HFiles
    * [HBASE-10452] - Fix potential bugs in exception handlers
    * [HBASE-10454] - Tags presence file info can be wrong in HFiles when PrefixTree encoding is used
    * [HBASE-10455] - cleanup InterruptedException management
    * [HBASE-10456] - Balancer should not run if it's just turned off.
    * [HBASE-10458] - Typo in book chapter 9 architecture.html
    * [HBASE-10459] - Broken link F.1. HBase Videos
    * [HBASE-10460] - Return value of Scan#setSmall() should be void
    * [HBASE-10461] - table.close() in TableEventHandler#reOpenAllRegions() should be enclosed in finally block
    * [HBASE-10469] - Hbase book client.html has a broken link
    * [HBASE-10470] - Import generates huge log file while importing large amounts of data
    * [HBASE-10472] - Manage the interruption in ZKUtil#getData
    * [HBASE-10476] - HBase Master log grows very fast after stopped hadoop (due to connection exception)
    * [HBASE-10477] - Regression from HBASE-10337
    * [HBASE-10478] - Hbase book presentations page has broken link
    * [HBASE-10481] - API Compatibility JDiff script does not properly handle arguments in reverse order
    * [HBASE-10482] - ReplicationSyncUp doesn't clean up its ZK, needed for tests
    * [HBASE-10485] - PrefixFilter#filterKeyValue() should perform filtering on row key
    * [HBASE-10486] - ProtobufUtil Append & Increment deserialization lost cell level timestamp
    * [HBASE-10488] - 'mvn site' is broken due to org.apache.jasper.JspC not found
    * [HBASE-10490] - Simplify RpcClient code
    * [HBASE-10493] - InclusiveStopFilter#filterKeyValue() should perform filtering on row key
    * [HBASE-10495] - upgrade script is printing usage two times with help option.
    * [HBASE-10500] - Some tools OOM when BucketCache is enabled
    * [HBASE-10501] - Improve IncreasingToUpperBoundRegionSplitPolicy to avoid too many regions
    * [HBASE-10506] - Fail-fast if client connection is lost before the real call be executed in RPC layer
    * [HBASE-10510] - HTable is not closed in LoadTestTool#loadTable()
    * [HBASE-10514] - Forward port HBASE-10466, possible data loss when failed flushes
    * [HBASE-10516] - Refactor code where Threads.sleep is called within a while/for loop
    * [HBASE-10525] - Allow the client to use a different thread for writing to ease interrupt
    * [HBASE-10533] - commands.rb is giving wrong error messages on exceptions
    * [HBASE-10534] - Rowkey in TsvImporterTextMapper initializing with wrong length
    * [HBASE-10537] - Let the ExportSnapshot mapper fail and retry on error
    * [HBASE-10539] - HRegion.addAndGetGlobalMemstoreSize returns previous size
    * [HBASE-10545] - RS Hangs waiting on region to close on shutdown; has to timeout before can go down
    * [HBASE-10546] - Two scanner objects are open for each hbase map task but only one scanner object is closed
    * [HBASE-10547] - TestFixedLengthWrapper#testReadWrite occasionally fails with the IBM JDK
    * [HBASE-10548] - Correct commons-math dependency version
    * [HBASE-10549] - When there is a hole, LoadIncrementalHFiles will hang in an infinite loop.
    * [HBASE-10552] - HFilePerformanceEvaluation.GaussianRandomReadBenchmark fails sometimes.
    * [HBASE-10556] - Possible data loss due to non-handled DroppedSnapshotException for user-triggered flush from client/shell
    * [HBASE-10563] - Set name for FlushHandler thread
    * [HBASE-10564] - HRegionServer.nextLong should be removed since it's not used anywhere, or should be used somewhere it meant to
    * [HBASE-10565] - FavoredNodesPlan accidentally uses an internal Netty type
    * [HBASE-10566] - cleanup rpcTimeout in the client
    * [HBASE-10567] - Add overwrite manifest option to ExportSnapshot
    * [HBASE-10575] - ReplicationSource thread can't be terminated if it runs into the loop to contact peer's zk ensemble and fails continuously
    * [HBASE-10579] - [Documentation]: ExportSnapshot tool package incorrectly documented
    * [HBASE-10580] - IntegrationTestingUtility#restoreCluster leak resource when running in a mini cluster mode
    * [HBASE-10581] - ACL znode are left without PBed during upgrading hbase0.94* to hbase0.96+
    * [HBASE-10582] - 0.94->0.96 Upgrade: ACL can't be repopulated when ACL table contains row for table '-ROOT' or '.META.'
    * [HBASE-10585] - Avoid early creation of Node objects in LRUDictionary.BidirectionalLRUMap
    * [HBASE-10586] - hadoop2-compat IPC metric registred twice
    * [HBASE-10587] - Master metrics clusterRequests is wrong
    * [HBASE-10593] - FileInputStream in JenkinsHash#main() is never closed
    * [HBASE-10594] - Speed up TestRestoreSnapshotFromClient
    * [HBASE-10598] - Written data can not be read out because MemStore#timeRangeTracker might be updated concurrently
    * [HBASE-10600] - HTable#batch() should perform validation on empty Put
    * [HBASE-10604] - Fix parseArgs javadoc
    * [HBASE-10606] - Bad timeout in RpcRetryingCaller#callWithRetries w/o parameters
    * [HBASE-10608] - Acquire the FS Delegation Token for Secure ExportSnapshot
    * [HBASE-10611] - Description for hbase:acl table is wrong on master-status#catalogTables
    * [HBASE-10614] - Master could not be stopped
    * [HBASE-10618] - User should not be allowed to disable/drop visibility labels table
    * [HBASE-10621] - Unable to grant user permission to namespace
    * [HBASE-10622] - Improve log and Exceptions in Export Snapshot 
    * [HBASE-10624] - Fix 2 new findbugs warnings introduced by HBASE-10598
    * [HBASE-10627] - A logic mistake in HRegionServer isHealthy
    * [HBASE-10631] - Avoid extra seek on FileLink open
    * [HBASE-10632] - Region lost in limbo after ArrayIndexOutOfBoundsException during assignment
    * [HBASE-10637] - rpcClient: Setup the iostreams when writing
    * [HBASE-10639] - Unload script displays wrong counts (off by one) when unloading regions 
    * [HBASE-10644] - TestSecureExportSnapshot#testExportFileSystemState fails on hadoop-1
    * [HBASE-10656] -  high-scale-lib's Counter depends on Oracle (Sun) JRE, and also has some bug
    * [HBASE-10660] - MR over snapshots can OOM when alternative blockcache is enabled
    * [HBASE-10662] - RegionScanner is never closed if the region has been moved-out or re-opened when performing scan request
    * [HBASE-10665] - TestCompaction and TestCompactionWithCoprocessor run too long
    * [HBASE-10666] - TestMasterCoprocessorExceptionWithAbort hangs at shutdown
    * [HBASE-10668] - TestExportSnapshot runs too long
    * [HBASE-10669] - [hbck tool] Usage is wrong for hbck tool for -sidelineCorruptHfiles option
    * [HBASE-10675] - IntegrationTestIngestWithACL should allow User to be passed as Parameter
    * [HBASE-10677] - boundaries check in hbck throwing IllegalArgumentException
    * [HBASE-10679] - Both clients get wrong scan results if the first scanner expires and the second scanner is created with the same scannerId on the same region
    * [HBASE-10682] - region_mover.rb throws "can't convert nil into String" for regions moved
    * [HBASE-10685] - [WINDOWS] TestKeyStoreKeyProvider fails on windows
    * [HBASE-10686] - [WINDOWS] TestStripeStoreFileManager fails on windows
    * [HBASE-10687] - Fix description about HBaseLocalFileSpanReceiver in reference manual
    * [HBASE-10692] - The Multi TableMap job don't support the security HBase cluster
    * [HBASE-10694] - TableSkewCostFunction#cost() casts integral division result to double
    * [HBASE-10705] - CompactionRequest#toString() may throw NullPointerException
    * [HBASE-10706] - Disable writeToWal in tests where possible
    * [HBASE-10714] - SyncFuture hangs when sequence is 0
    * [HBASE-10715] - TimeRange has a poorly formatted error message
    * [HBASE-10716] - [Configuration]: hbase.regionserver.region.split.policy should be part of hbase-default.xml
    * [HBASE-10718] - TestHLogSplit fails when it sets a KV size to be negative
    * [HBASE-10720] - rpcClient: Wrong log level when closing the connection
    * [HBASE-10726] - Fix java.lang.ArrayIndexOutOfBoundsException in StochasticLoadBalancer$LocalityBasedCandidateGenerator
    * [HBASE-10731] - Fix environment variables typos in scripts
    * [HBASE-10735] - [WINDOWS] Set -XX:MaxPermSize for unit tests
    * [HBASE-10736] - Fix Javadoc warnings introduced in HBASE-10169
    * [HBASE-10737] - HConnectionImplementation should stop RpcClient on close
    * [HBASE-10738] - AssignmentManager should shut down executors on stop
    * [HBASE-10739] - RS web UI NPE if master shuts down sooner
    * [HBASE-10745] - Access ShutdownHook#fsShutdownHooks should be synchronized
    * [HBASE-10749] - CellComparator.compareStatic() compares type wrongly
    * [HBASE-10751] - TestHRegion testWritesWhileScanning occasional fail since HBASE-10514 went in
    * [HBASE-10755] - MetricsRegionSourceImpl creates metrics that start with a lower case
    * [HBASE-10760] - Wrong methods' names in ClusterLoadState class
    * [HBASE-10762] - clone_snapshot doesn't check for missing namespace
    * [HBASE-10766] - SnapshotCleaner allows to delete referenced files
    * [HBASE-10770] - Don't exit from the Canary daemon mode if no regions are present
    * [HBASE-10792] - RingBufferTruck does not release its payload
    * [HBASE-10793] - AuthFailed as a valid zookeeper state 
    * [HBASE-10799] - [WINDOWS] TestImportTSVWithVisibilityLabels.testBulkOutputWithTsvImporterTextMapper  fails on windows
    * [HBASE-10802] - CellComparator.compareStaticIgnoreMvccVersion compares type wrongly
    * [HBASE-10804] - Add a validations step to ExportSnapshot
    * [HBASE-10805] - Speed up KeyValueHeap.next() a bit
    * [HBASE-10806] - Two protos missing in hbase-protocol/pom.xml
    * [HBASE-10809] - HBaseAdmin#deleteTable fails when META region happen to move around same time
    * [HBASE-10814] - RpcClient: some calls can get stuck when connection is closing
    * [HBASE-10825] - Add copy-from option to ExportSnapshot
    * [HBASE-10829] - Flush is skipped after log replay if the last recovered edits file is skipped
    * [HBASE-10830] - Integration test MR jobs attempt to load htrace jars from the wrong location
    * [HBASE-10831] - IntegrationTestIngestWithACL is not setting up LoadTestTool correctly
    * [HBASE-10833] - Region assignment may fail during cluster start up
    * [HBASE-10838] - Insufficient AccessController covering permission check
    * [HBASE-10839] - NullPointerException in construction of RegionServer in Security Cluster
    * [HBASE-10840] - Fix findbug warn induced by HBASE-10569
    * [HBASE-10845] - Memstore snapshot size isn't updated in DefaultMemStore#rollback()
    * [HBASE-10846] - Links between active and backup masters are broken
    * [HBASE-10848] - Filter SingleColumnValueFilter combined with NullComparator does not work
    * [HBASE-10849] - Fix increased javadoc warns 
    * [HBASE-10850] - essential column family optimization is broken
    * [HBASE-10851] - Wait for regionservers to join the cluster
    * [HBASE-10853] - NPE in RSRpcServices.get on trunk
    * [HBASE-10854] - [VisibilityController] Apply MAX_VERSIONS from schema or request when scanning
    * [HBASE-10860] - Insufficient AccessController covering permission check
    * [HBASE-10862] - Update config field names in hbase-default.xml description for hbase.hregion.memstore.block.multiplier
    * [HBASE-10863] - Scan doesn't return rows for user who has authorization by visibility label in secure deployment
    * [HBASE-10864] - Spelling nit
    * [HBASE-10890] - ExportSnapshot needs to add acquired token to job
    * [HBASE-10895] - unassign a region fails due to the hosting region server is in FailedServerList
    * [HBASE-10897] - On master start, deadlock if refresh UI
    * [HBASE-10899] - [AccessController] Apply MAX_VERSIONS from schema or request when scanning
    * [HBASE-10903] - HBASE-10740 regression; cannot pass commands for zk to run
    * [HBASE-10917] - Fix hbase book "Tests" page
    * [HBASE-10922] - Log splitting status should always be closed
    * [HBASE-10931] - Enhance logs
    * [HBASE-10941] - default for max version isn't updated in doc after change on 0.96
    * [HBASE-10948] - Fix hbase table file 'x' mode
    * [HBASE-10949] - Reversed scan could hang
    * [HBASE-10954] - Fix TestCloseRegionHandler.testFailedFlushAborts
    * [HBASE-10955] - HBCK leaves the region in masters in-memory RegionStates if region hdfs dir is lost
    * [HBASE-10958] - [dataloss] Bulk loading with seqids can prevent some log entries from being replayed
    * [HBASE-10964] - Delete mutation is not consistent with Put wrt timestamp
    * [HBASE-10966] - RowCounter misinterprets column names that have colons in their qualifier
    * [HBASE-10967] - CatalogTracker.waitForMeta should not wait indefinitely silently
    * [HBASE-10968] - Null check in TableSnapshotInputFormat#TableSnapshotRegionRecordReader#initialize() is redundant
    * [HBASE-10970] - [AccessController] Issues with covering cell permission checks
    * [HBASE-10976] - Start CatalogTracker after cluster ID is available
    * [HBASE-10979] - Fix AnnotationReadingPriorityFunction "scan" handling
    * [HBASE-10995] - Fix resource leak related to unclosed HBaseAdmin
    * [HBASE-11005] - Remove dead code in HalfStoreFileReader#getScanner#seekBefore()
    * [HBASE-11009] - We sync every hbase:meta table write twice
    * [HBASE-11011] - Avoid extra getFileStatus() calls on Region startup
    * [HBASE-11012] - InputStream is not properly closed in two methods of JarFinder
    * [HBASE-11018] - ZKUtil.getChildDataAndWatchForNewChildren() will not return null as indicated
    * [HBASE-11028] - FSLog: Avoid an extra sync if the current transaction is already sync'd
    * [HBASE-11030] - HBaseTestingUtility.getMiniHBaseCluster should be able to return null
    * [HBASE-11036] - Online schema change with region merge may cause data loss 
    * [HBASE-11038] - Filtered scans can bypass metrics collection
    * [HBASE-11049] - HBase WALPlayer needs to add credentials to job to play to table
    * [HBASE-11052] - Sending random data crashes thrift service
    * [HBASE-11055] - Extends the sampling size
    * [HBASE-11064] - Odd behaviors of TableName for empty namespace
    * [HBASE-11081] - Trunk Master won't start; looking for Constructor that takes conf only
    * [HBASE-11082] - Potential unclosed TraceScope in FSHLog#replaceWriter()
    * [HBASE-11096] - stop method of Master and RegionServer coprocessor  is not invoked
    * [HBASE-11112] - PerformanceEvaluation should document --multiGet option on its printUsage.
    * [HBASE-11117] - [AccessController] checkAndPut/Delete hook should check only Read permission
    * [HBASE-11118] - non environment variable solution for "IllegalAccessError: class com.google.protobuf.ZeroCopyLiteralByteString cannot access its superclass com.google.protobuf.LiteralByteString"
    * [HBASE-11120] - Update documentation about major compaction algorithm
    * [HBASE-11133] - Add an option to skip snapshot verification after Export
    * [HBASE-11139] - BoundedPriorityBlockingQueue#poll() should check the return value from awaitNanos()
    * [HBASE-11143] - Improve replication metrics
    * [HBASE-11149] - Wire encryption is broken
    * [HBASE-11150] - Images in website are broken
    * [HBASE-11155] - Fix Validation Errors in Ref Guide
    * [HBASE-11162] - RegionServer webui uses the default master info port irrespective of the user configuration.
    * [HBASE-11168] - [docs] Remove references to RowLocks in post 0.96 docs.
    * [HBASE-11169] - nit: fix incorrect javadoc in OrderedBytes about BlobVar and BlobCopy
    * [HBASE-11176] - Make /src/main/xslt/configuration_to_docbook_section.xsl produce better Docbook
    * [HBASE-11177] - 'hbase.rest.filter.classes' exists in hbase-default.xml twice
    * [HBASE-11185] - Parallelize Snapshot operations
    * [HBASE-11186] - Improve TestExportSnapshot verifications
    * [HBASE-11189] - Subprocedure should be marked as complete upon failure
    * [HBASE-11190] - Fix easy typos in documentation
    * [HBASE-11194] - [AccessController] issue with covering permission check in case of concurrent op on same row
    * [HBASE-11196] - Update description of -ROOT- in ref guide
    * [HBASE-11202] - Cleanup on HRegion class
    * [HBASE-11212] - Fix increment index in KeyValueSortReducer
    * [HBASE-11215] - Deprecate void setAutoFlush(boolean autoFlush, boolean clearBufferOnFail)
    * [HBASE-11217] - Race between SplitLogManager task creation + TimeoutMonitor
    * [HBASE-11218] - Data loss in HBase standalone mode
    * [HBASE-11226] - Document and increase the default value for hbase.hstore.flusher.count
    * [HBASE-11234] - FastDiffDeltaEncoder#getFirstKeyInBlock returns wrong result
    * [HBASE-11237] - Bulk load initiated by user other than hbase fails
    * [HBASE-11238] - Add info about SlabCache and BucketCache to Ref Guide
    * [HBASE-11239] - Forgot to svn add test that was part of HBASE-11171, TestCacheConfig
    * [HBASE-11248] - KeyOnlyKeyValue#toString() passes wrong offset to keyToString()
    * [HBASE-11251] - LoadTestTool should grant READ permission for the users that are given READ access for specific cells
    * [HBASE-11252] - Fixing new javadoc warnings in master branch
    * [HBASE-11253] - IntegrationTestWithCellVisibilityLoadAndVerify failing since HBASE-10326
    * [HBASE-11255] - Negative request num in region load
    * [HBASE-11260] - hbase-default.xml refers to hbase.regionserver.global.memstore.upperLimit which is deprecated
    * [HBASE-11267] - Dynamic metrics2 metrics may consume large amount of heap memory
    * [HBASE-11268] - HTablePool is now a deprecated class, should update docs to reflect this
    * [HBASE-11273] - Fix jersey and slf4j deps
    * [HBASE-11275] - [AccessController] postCreateTable hook fails when another CP creates table on their startup
    * [HBASE-11277] - RPCServer threads can wedge under high load
    * [HBASE-11279] - Block cache could be disabled by mistake
    * [HBASE-11285] - Expand coprocs info in Ref Guide
    * [HBASE-11297] - Remove some synchros in the rpcServer responder
    * [HBASE-11298] - Simplification in RpcServer code
    * [HBASE-11302] - ReplicationSourceManager#sources is not thread safe
    * [HBASE-11310] - Delete's copy constructor should copy the attributes also
    * [HBASE-11311] - Secure Bulk Load does not execute chmod 777 on the files
    * [HBASE-11312] - Minor refactoring of TestVisibilityLabels class
    * [HBASE-11320] - Reenable bucket cache logging
    * [HBASE-11324] - Update 2.5.2.8. Managed Compactions
    * [HBASE-11327] - ExportSnapshot hit stackoverflow error when target snapshotDir doesn't contain uri
    * [HBASE-11329] - Minor fixup of new blockcache tab number formatting
    * [HBASE-11335] - Fix the TABLE_DIR param in TableSnapshotInputFormat
    * [HBASE-11337] - Document how to create, modify, delete a table using Java
    * [HBASE-11338] - Expand documentation on bloom filters
    * [HBASE-11340] - Remove references to xcievers in documentation
    * [HBASE-11341] - ZKProcedureCoordinatorRpcs should respond only to members
    * [HBASE-11342] - The method isChildReadLock in class ZKInterProcessLockBase is wrong
    * [HBASE-11347] - For some errors, the client can retry infinitely
    * [HBASE-11353] - Wrong Write Request Count
    * [HBASE-11363] - Access checks in preCompact and preCompactSelection are out of sync
    * [HBASE-11371] - Typo in Thrift2 docs
    * [HBASE-11373] - hbase-protocol compile failed for name conflict of RegionTransition
    * [HBASE-11374] - RpcRetryingCaller#callWithoutRetries has a timeout of zero
    * [HBASE-11378] - TableMapReduceUtil overwrites user supplied options for multiple tables/scaners job
    * [HBASE-11380] - HRegion lock object is not being released properly, leading to snapshot failure
    * [HBASE-11382] - Adding unit test for HBASE-10964 (Delete mutation is not consistent with Put wrt timestamp)
    * [HBASE-11387] - metrics: wrong totalRequestCount
    * [HBASE-11391] - Thrift table creation will fail with default TTL with sanity checks
    * [HBASE-11396] - Invalid meta entries can lead to unstartable master
    * [HBASE-11397] - When merging expired stripes, we need to create an empty file to preserve metadata.
    * [HBASE-11399] - Improve Quickstart chapter and move Pseudo-distributed and distributed to it
    * [HBASE-11403] - Fix race conditions around Object#notify
    * [HBASE-11413] - [findbugs] RV: Negating the result of compareTo()/compare()
    * [HBASE-11418] - build target "site" doesn't respect hadoop-two.version property
    * [HBASE-11422] - Specification of scope is missing for certain Hadoop dependencies
    * [HBASE-11423] - Visibility label and per cell ACL feature not working with HTable#mutateRow() and MultiRowMutationEndpoint
    * [HBASE-11424] - Avoid usage of CellUtil#getTagArray(Cell cell) within server
    * [HBASE-11430] - lastFlushSeqId has been updated wrongly during region open
    * [HBASE-11432] - [AccessController] Remove cell first strategy
    * [HBASE-11433] - LruBlockCache does not respect its configurable parameters
    * [HBASE-11435] - Visibility labelled cells fail to getting replicated
    * [HBASE-11439] - StripeCompaction may not obey the OffPeak rule to compaction
    * [HBASE-11442] - ReplicationSourceManager doesn't cleanup the queues for recovered sources
    * [HBASE-11445] - TestZKProcedure#testMultiCohortWithMemberTimeoutDuringPrepare is flaky
    * [HBASE-11448] - Fix javadoc warnings
    * [HBASE-11449] - IntegrationTestIngestWithACL fails to use different users after HBASE-10810
    * [HBASE-11457] - Increment HFile block encoding IVs accounting for ciper's internal use
    * [HBASE-11458] - NPEs if RegionServer cannot initialize
    * [HBASE-11460] - Deadlock in HMaster on masterAndZKLock in HConnectionManager
    * [HBASE-11463] - (findbugs) HE: Class defines equals() and uses Object.hashCode()
    * [HBASE-11465] - [VisibilityController] Reserved tags check not happening for Append/Increment
    * [HBASE-11475] - Distributed log replay should also replay compaction events
    * [HBASE-11476] - Expand 'Conceptual View' section of Data Model chapter 
    * [HBASE-11477] - book.xml has Docbook validity issues (again)
    * [HBASE-11481] - TableSnapshotInputFormat javadoc wrongly claims HBase "enforces security"
    * [HBASE-11487] - ScanResponse carries non-zero cellblock for CloseScanRequest (ScanRequest with close_scanner = true)
    * [HBASE-11488] - cancelTasks in SubprocedurePool can hang during task error
    * [HBASE-11489] - ClassNotFoundException while running IT tests in trunk using 'mvn verify'
    * [HBASE-11492] - Hadoop configuration overrides some ipc parameters including tcpNoDelay
    * [HBASE-11493] - Autorestart option is not working because of stale znode  "shutdown"
    * [HBASE-11496] - HBASE-9745 broke cygwin CLASSPATH translation
    * [HBASE-11502] - Track down broken images in Ref Guide
    * [HBASE-11505] - 'snapshot' shell command shadows 'snapshot' shell when 'help' is invoked
    * [HBASE-11506] - IntegrationTestWithCellVisibilityLoadAndVerify allow User to be passed as arg
    * [HBASE-11509] - Forward port HBASE-11039 to trunk and branch-1 after HBASE-11489
    * [HBASE-11510] - Visibility serialization format tag gets duplicated in Append/Increment'ed cells
    * [HBASE-11514] - Fix findbugs warnings in blockcache
    * [HBASE-11517] - TestReplicaWithCluster turns zombie
    * [HBASE-11518] - doc update for how to create non-shared HConnection
    * [HBASE-11523] - JSON serialization of PE Options is broke
    * [HBASE-11525] - Region server holding in region states is out of sync with meta
    * [HBASE-11527] - Cluster free memory limit check should consider L2 block cache size also when L2 cache is onheap.
    * [HBASE-11530] - RegionStates adds regions to wrong servers
    * [HBASE-11531] - RegionStates for regions under region-in-transition znode are not updated on startup
    * [HBASE-11534] - Remove broken JAVA_HOME autodetection in hbase-config.sh
    * [HBASE-11535] - ReplicationPeer map is not thread safe
    * [HBASE-11536] - Puts of region location to Meta may be out of order which causes inconsistent of region location
    * [HBASE-11537] - Avoid synchronization on instances of ConcurrentMap
    * [HBASE-11540] - Document HBASE-11474
    * [HBASE-11541] - Wrong result when scaning meta with startRow
    * [HBASE-11545] - mapred.TableSnapshotInputFormat is missing InterfaceAudience annotation
    * [HBASE-11550] - Custom value for BUCKET_CACHE_BUCKETS_KEY should be sorted
    * [HBASE-11551] - BucketCache$WriterThread.run() doesn't handle exceptions correctly
    * [HBASE-11554] - Remove Reusable poolmap Rpc client type.
    * [HBASE-11555] - TableSnapshotRegionSplit should be public
    * [HBASE-11558] - Caching set on Scan object gets lost when using TableMapReduceUtil in 0.95+
    * [HBASE-11561] - deprecate ImmutableBytesWritable.getSize and replace with getLength
    * [HBASE-11564] - Improve cancellation management in the rpc layer
    * [HBASE-11565] - Stale connection could stay for a while
    * [HBASE-11575] - Pseudo distributed mode does not work as documented 
    * [HBASE-11579] - CopyTable should check endtime value only if != 0
    * [HBASE-11582] - Fix Javadoc warning in DataInputInputStream and CacheConfig
    * [HBASE-11586] - HFile's HDFS op latency sampling code is not used
    * [HBASE-11588] - RegionServerMetricsWrapperRunnable misused the 'period' parameter
    * [HBASE-11589] - AccessControlException should be a not retriable exception
    * [HBASE-11591] - Scanner fails to retrieve KV  from bulk loaded file with highest sequence id than the cell's mvcc in a non-bulk loaded file
    * [HBASE-11593] - TestCacheConfig failing consistently in precommit builds
    * [HBASE-11594] - Unhandled NoNodeException in distributed log replay mode 
    * [HBASE-11603] - Apply version of HADOOP-8027 to our JMXJsonServlet
    * [HBASE-11609] - LoadIncrementalHFiles fails if the namespace is specified
    * [HBASE-11617] - incorrect AgeOfLastAppliedOp and AgeOfLastShippedOp in replication Metrics when no new replication OP 
    * [HBASE-11620] - Record the class name of Writer in WAL header so that only proper Reader can open the WAL file
    * [HBASE-11627] - RegionSplitter's rollingSplit terminated with "/ by zero", and the _balancedSplit file was not deleted properly
    * [HBASE-11632] - Region split needs to clear force split flag at the end of SplitRequest run
    * [HBASE-11659] - Region state RPC call is not idempotent
    * [HBASE-11662] - Launching shell with long-form --debug fails
    * [HBASE-11668] - Re-add HBASE_LIBRARY_PATH to bin/hbase
    * [HBASE-11671] - TestEndToEndSplitTransaction fails on master
    * [HBASE-11678] - BucketCache ramCache fills heap after running a few hours
    * [HBASE-11687] - No need to abort on postOpenDeployTasks exception if region opening is cancelled
    * [HBASE-11703] - Meta region state could be corrupted
    * [HBASE-11705] - callQueueSize should be decremented in a fail-fast scenario
    * [HBASE-11708] - RegionSplitter incorrectly calculates splitcount
    * [HBASE-11709] - TestMasterShutdown can fail sometime 
    * [HBASE-11716] - LoadTestDataGeneratorWithVisibilityLabels should handle Delete mutations
    * [HBASE-11717] - Remove unused config 'hbase.offheapcache.percentage' from hbase-default.xml and book
    * [HBASE-11718] - Remove some logs in RpcClient.java
    * [HBASE-11719] - Remove some unused paths in AsyncClient
    * [HBASE-11725] - Backport failover checking change to 1.0
    * [HBASE-11726] - Master should fail-safe if starting with a pre 0.96 layout
    * [HBASE-11727] - Assignment wait time error in case of ServerNotRunningYetException
    * [HBASE-11728] - Data loss while scanning using PREFIX_TREE DATA-BLOCK-ENCODING
    * [HBASE-11733] - Avoid copy-paste in Master/Region CoprocessorHost
    * [HBASE-11744] - RpcServer code should not use a collection from netty internal
    * [HBASE-11745] - FilterAllFilter should return ReturnCode.SKIP
    * [HBASE-11755] - VisibilityController returns the wrong value for preBalanceSwitch()
    * [HBASE-11766] - Backdoor CoprocessorHConnection is no longer being used for local writes
    * [HBASE-11770] - TestBlockCacheReporting.testBucketCache is not stable 
    * [HBASE-11772] - Bulk load mvcc and seqId issues with native hfiles
    * [HBASE-11773] - Wrong field used for protobuf construction in RegionStates.
    * [HBASE-11782] - Document that hbase.MetaMigrationConvertingToPB needs to be set to true for migrations pre 0.96
    * [HBASE-11787] - TestRegionLocations is not categorized
    * [HBASE-11788] - hbase is not deleting the cell when a Put with a KeyValue, KeyValue.Type.Delete is submitted
    * [HBASE-11789] - LoadIncrementalHFiles is not picking up the -D option 
    * [HBASE-11794] - StripeStoreFlusher causes NullPointerException
    * [HBASE-11797] - Create Table interface to replace HTableInterface
    * [HBASE-11802] - Scan copy constructor doesn't copy reversed member variable
    * [HBASE-11813] - CellScanner#advance may overflow stack
    * [HBASE-11814] - TestAssignmentManager.testCloseFailed() and testOpenCloseRacing() is flaky
    * [HBASE-11816] - Initializing custom Metrics implementation failed in Mapper or Reducer
    * [HBASE-11820] - ReplicationSource : Set replication codec class as RPC codec class on a clonned Configuration
    * [HBASE-11823] - Cleanup javadoc warnings.
    * [HBASE-11832] - maven release plugin overrides command line arguments
    * [HBASE-11836] - IntegrationTestTimeBoundedMultiGetRequestsWithRegionReplicas tests simple get by default
    * [HBASE-11839] - TestRegionRebalance is flakey
    * [HBASE-11844] - region_mover.rb load enters an infinite loop if region already present on target server
    * [HBASE-11851] - RpcClient can try to close a connection not ready to close
    * [HBASE-11856] - hbase-common needs a log4j.properties resource for handling unit test logging output
    * [HBASE-11857] - Restore ReaderBase.initAfterCompression() and WALCellCodec.create(Configuration, CompressionContext)
    * [HBASE-11859] - 'hadoop jar' references in documentation should mention hbase-server.jar, not hbase.jar
    * [HBASE-11863] - WAL files are not archived and stays in the WAL directory after splitting 
    * [HBASE-11876] - RegionScanner.nextRaw(...) should not update metrics
    * [HBASE-11878] - TestVisibilityLabelsWithDistributedLogReplay#testAddVisibilityLabelsOnRSRestart sometimes fails due to VisibilityController not yet initialized
    * [HBASE-11880] - NPE in MasterStatusServlet
    * [HBASE-11882] - Row level consistency may not be maintained with bulk load and compaction
    * [HBASE-11886] - The creator of the table should have all permissions on the table
    * [HBASE-11887] - Memory retention in branch-1; millions of instances of LiteralByteString for column qualifier and value
    * [HBASE-11892] - configs contain stale entries
    * [HBASE-11893] - RowTooBigException should be in hbase-client module
    * [HBASE-11896] - LoadIncrementalHFiles fails in secure mode if the namespace is specified
    * [HBASE-11898] - CoprocessorHost.Environment should cache class loader instance
    * [HBASE-11905] - Add orca to server UIs and update logo.
    * [HBASE-11921] - Minor fixups that come of testing branch-1
    * [HBASE-11932] - Stop the html-single from building a html-single of every chapter and cluttering the docbkx directory
    * [HBASE-11936] - IsolationLevel must be attribute of a Query not a Scan
    * [HBASE-11946] - Get xref and API docs to build properly again
    * [HBASE-11947] - NoSuchElementException in balancer for master regions
    * [HBASE-11949] - Setting hfile.block.cache.size=0 doesn't actually disable blockcache
    * [HBASE-11959] - TestAssignmentManagerOnCluster is flaky
    * [HBASE-11972] - The "doAs user" used in the update to hbase:acl table RPC is incorrect
    * [HBASE-11976] - Server startcode is not checked for bulk region assignment
    * [HBASE-11984] - TestClassFinder failing on occasion
    * [HBASE-11989] - IntegrationTestLoadAndVerify cannot be configured anymore on distributed mode

** Improvement
    * [HBASE-2217] - VM OPTS for shell only
    * [HBASE-3270] - When we create the .version file, we should create it in a tmp location and then move it into place
    * [HBASE-4163] - Create Split Strategy for YCSB Benchmark
    * [HBASE-4495] - CatalogTracker has an identity crisis; needs to be cut-back in scope
    * [HBASE-5349] - Automagically tweak global memstore and block cache sizes based on workload
    * [HBASE-5923] - Cleanup checkAndXXX logic
    * [HBASE-6626] - Add a chapter on HDFS in the troubleshooting section of the HBase reference guide.
    * [HBASE-6990] - Pretty print TTL
    * [HBASE-7088] - Duplicate code in RowCounter
    * [HBASE-7849] - Provide administrative limits around bulkloads of files into a single region
    * [HBASE-7910] - Dont use reflection for security
    * [HBASE-7987] - Snapshot Manifest file instead of multiple empty files
    * [HBASE-8076] - add better doc for HBaseAdmin#offline API.
    * [HBASE-8298] - In shell, provide alias of 'desc' for 'describe'
    * [HBASE-8315] - Documentation should have more information of LRU Stats
    * [HBASE-8332] - Add truncate as HMaster method
    * [HBASE-8495] - Change ownership of the directory to bulk load
    * [HBASE-8604] - improve reporting of incorrect peer address in replication
    * [HBASE-8755] - A new write thread model for HLog to improve the overall HBase write throughput
    * [HBASE-8763] - Combine MVCC and SeqId
    * [HBASE-8807] - HBase MapReduce Job-Launch Documentation Misplaced
    * [HBASE-8970] - [book] Filter language documentation is hidden
    * [HBASE-9343] - Implement stateless scanner for Stargate
    * [HBASE-9345] - Add support for specifying filters in scan
    * [HBASE-9426] - Make custom distributed barrier procedure pluggable 
    * [HBASE-9501] - Provide throttling for replication
    * [HBASE-9524] - Multi row get does not return any results even if any one of the rows specified in the query is missing and improve exception handling
    * [HBASE-9542] - Have Get and MultiGet do cellblocks, currently they are pb all the time
    * [HBASE-9829] - make the compaction logging less confusing
    * [HBASE-9857] - Blockcache prefetch option
    * [HBASE-9866] - Support the mode where REST server authorizes proxy users
    * [HBASE-9892] - Add info port to ServerName to support multi instances in a node
    * [HBASE-9999] - Add support for small reverse scan
    * [HBASE-10010] - eliminate the put latency spike on the new log file beginning
    * [HBASE-10048] - Add hlog number metric in regionserver
    * [HBASE-10074] - consolidate and improve capacity/sizing documentation
    * [HBASE-10086] - [book] document the  HBase canary tool usage in the HBase Book
    * [HBASE-10116] - SlabCache metrics improvements
    * [HBASE-10128] - Improve the copy table doc to include information about versions 
    * [HBASE-10141] - instead of putting expired store files thru compaction, just archive them
    * [HBASE-10157] - Provide CP hook post log replay
    * [HBASE-10164] - Allow heapsize of different units to be passed as HBASE_HEAPSIZE
    * [HBASE-10173] - Need HFile version check in security coprocessors
    * [HBASE-10175] - 2-thread ChaosMonkey steps on its own toes
    * [HBASE-10202] - Documentation is lacking information about rolling-restart.sh script.
    * [HBASE-10211] - Improve AccessControl documentation in hbase book
    * [HBASE-10213] - Add read log size per second metrics for replication source
    * [HBASE-10228] - Support setCellVisibility and setAuthorizations in Shell
    * [HBASE-10229] - Support OperationAttributes in Increment and Append in Shell
    * [HBASE-10239] - Improve determinism and debugability of TestAccessController
    * [HBASE-10252] - Don't write back to WAL/memstore when Increment amount is zero (mostly for query rather than update intention)
    * [HBASE-10263] - make LruBlockCache single/multi/in-memory ratio user-configurable and provide preemptive mode for in-memory type block
    * [HBASE-10265] - Upgrade to commons-logging 1.1.3
    * [HBASE-10277] - refactor AsyncProcess
    * [HBASE-10289] - Avoid random port usage by default JMX Server. Create Custome JMX server
    * [HBASE-10323] - Auto detect data block encoding in HFileOutputFormat
    * [HBASE-10324] - refactor deferred-log-flush/Durability related interface/code/naming to align with changed semantic of the new write thread model
    * [HBASE-10331] - Insure security tests use SecureTestUtil methods for grants
    * [HBASE-10344] - Improve write performance by ignoring sync to hdfs when an asyncer's writes have been synced by other asyncer
    * [HBASE-10346] - Add Documentation for stateless scanner
    * [HBASE-10368] - Add Mutation.setWriteToWAL() back to 0.98
    * [HBASE-10373] - Add more details info for ACL group in HBase book
    * [HBASE-10389] - Add namespace help info in table related shell commands
    * [HBASE-10395] - endTime won't be set in VerifyReplication if startTime is not set
    * [HBASE-10419] - Add multiget support to PerformanceEvaluation
    * [HBASE-10423] - Report back the message of split or rollback failure to the master
    * [HBASE-10427] - clean up HRegionLocation/ServerName usage 
    * [HBASE-10430] - Support compressTags in shell for enabling tag encoding
    * [HBASE-10471] - Remove HTD.isAsyncLogFlush() from trunk
    * [HBASE-10479] - HConnection interface is public but is used internally, and contains a bunch of methods
    * [HBASE-10487] - Avoid allocating new KeyValue and according bytes-copying for appended kvs which don't have existing values
    * [HBASE-10498] - Add new APIs to load balancer interface
    * [HBASE-10511] - Add latency percentiles on PerformanceEvaluation
    * [HBASE-10518] - DirectMemoryUtils.getDirectMemoryUsage spams when none is configured
    * [HBASE-10569] - Co-locate meta and master
    * [HBASE-10570] - Allow overrides of Surefire secondPartForkMode and testFailureIgnore
    * [HBASE-10589] - Reduce unnecessary TestRowProcessorEndpoint resource usage
    * [HBASE-10590] - Update contents about tracing in the Reference Guide
    * [HBASE-10591] - Sanity check table configuration in createTable
    * [HBASE-10592] - Refactor PerformanceEvaluation tool
    * [HBASE-10597] - IOEngine#read() should return the number of bytes transferred
    * [HBASE-10599] - Replace System.currentMillis() with EnvironmentEdge.currentTimeMillis in memstore flusher and related places
    * [HBASE-10603] - Deprecate RegionSplitter CLI tool
    * [HBASE-10615] - Make LoadIncrementalHFiles skip reference files
    * [HBASE-10638] - Improve error message when there is no region server available for move
    * [HBASE-10641] - Configurable Bucket Sizes in bucketCache
    * [HBASE-10663] - Some code cleanup of class Leases and ScannerListener.leaseExpired
    * [HBASE-10678] - Make verifyrep tool implement toolrunner
    * [HBASE-10690] - Drop Hadoop-1 support
    * [HBASE-10693] - Correct declarations of Atomic* fields from 'volatile' to 'final'
    * [HBASE-10744] - AM#CloseRegion no need to retry on FailedServerException
    * [HBASE-10746] - Bump the version of HTrace to 3.0
    * [HBASE-10752] - Port HBASE-10270 'Remove DataBlockEncoding from BlockCacheKey' to trunk
    * [HBASE-10769] - hbase/bin/hbase-cleanup.sh has wrong usage string
    * [HBASE-10771] - Primitive type put/get APIs in ByteRange 
    * [HBASE-10785] - Metas own location should be cached
    * [HBASE-10788] - Add 99th percentile of latency in PE
    * [HBASE-10797] - Add support for -h and --help to rolling_restart.sh and fix the usage string output
    * [HBASE-10813] - Possible over-catch of exceptions
    * [HBASE-10823] - Resolve LATEST_TIMESTAMP to current server time before scanning for ACLs
    * [HBASE-10835] - DBE encode path improvements
    * [HBASE-10842] - Some loggers not declared static final
    * [HBASE-10861] - Extend ByteRange to create Mutable and Immutable ByteRange
    * [HBASE-10871] - Indefinite OPEN/CLOSE wait on busy RegionServers
    * [HBASE-10873] - Control number of regions assigned to backup masters
    * [HBASE-10883] - Restrict the universe of labels and authorizations
    * [HBASE-10884] - [REST] Do not disable block caching when scanning
    * [HBASE-10885] - Support visibility expressions on Deletes
    * [HBASE-10887] - tidy ThriftUtilities format
    * [HBASE-10892] - [Shell] Add support for globs in user_permission
    * [HBASE-10902] - Make Secure Bulk Load work across remote secure clusters
    * [HBASE-10911] - ServerShutdownHandler#toString shows meaningless message
    * [HBASE-10916] - [VisibilityController] Stackable ScanLabelGenerators
    * [HBASE-10923] - Control where to put meta region
    * [HBASE-10925] - Do not OOME, throw RowTooBigException instead
    * [HBASE-10926] - Use global procedure to flush table memstore cache
    * [HBASE-10934] - Provide Admin interface to abstract HBaseAdmin
    * [HBASE-10950] - Add  a configuration point for MaxVersion of Column Family
    * [HBASE-10951] - Use PBKDF2 to generate test encryption keys in the shell
    * [HBASE-10952] - [REST] Let the user turn off block caching if desired
    * [HBASE-10960] - Enhance HBase Thrift 1 to include "append" and "checkAndPut" operations
    * [HBASE-10984] - Add description about setting up htrace-zipkin to documentation
    * [HBASE-11000] - Add autoflush option to PerformanceEvaluation
    * [HBASE-11001] - Shell support for granting cell permissions for testing
    * [HBASE-11002] - Shell support for changing cell visibility for testing
    * [HBASE-11004] - Extend traces through FSHLog#sync
    * [HBASE-11007] - BLOCKCACHE in schema descriptor seems not aptly named
    * [HBASE-11008] - Align bulk load, flush, and compact to require Action.CREATE
    * [HBASE-11026] - Provide option to filter out all rows in PerformanceEvaluation tool
    * [HBASE-11044] - [Shell] Show groups for user in 'whoami' output
    * [HBASE-11047] - Remove TimeoutMontior
    * [HBASE-11048] - Support setting custom priority per client RPC
    * [HBASE-11068] - Update code to use Admin factory method instead of constructor
    * [HBASE-11074] - Have PE emit histogram stats as it runs rather than dump once at end of test
    * [HBASE-11083] - ExportSnapshot should provide capability to limit bandwidth consumption
    * [HBASE-11086] - Add htrace support for PerfEval
    * [HBASE-11119] - Update ExportSnapShot to optionally not use a tmp file on external file system
    * [HBASE-11123] - Upgrade instructions from 0.94 to 0.98
    * [HBASE-11126] - Add RegionObserver pre hooks that operate under row lock
    * [HBASE-11128] - Add -target option to ExportSnapshot to export with a different name
    * [HBASE-11134] - Add a -list-snapshots option to SnapshotInfo
    * [HBASE-11136] - Add permission check to roll WAL writer 
    * [HBASE-11137] - Add mapred.TableSnapshotInputFormat
    * [HBASE-11151] - move tracing modules from hbase-server to hbase-common
    * [HBASE-11167] - Avoid usage of java.rmi package Exception in MemStore
    * [HBASE-11201] - Enable global procedure members to return values to procedure master
    * [HBASE-11211] - LoadTestTool option for specifying number of regions per server
    * [HBASE-11219] - HRegionServer#createRegionLoad() should reuse RegionLoad.Builder instance when called in a loop
    * [HBASE-11220] - Add listeners to ServerManager and AssignmentManager
    * [HBASE-11240] - Print hdfs pipeline when hlog's sync is slow
    * [HBASE-11259] - Compression.java different compressions load system classpath differently causing errors
    * [HBASE-11304] - Enable HBaseAdmin.execProcedure to return data from procedure execution
    * [HBASE-11305] - Remove bunch of unused imports in HConnectionManager
    * [HBASE-11315] - Keeping MVCC for configurable longer time 
    * [HBASE-11319] - No need to use favored node mapping initialization to find all regions
    * [HBASE-11326] - Use an InputFormat for ExportSnapshot
    * [HBASE-11331] - [blockcache] lazy block decompression
    * [HBASE-11344] - Hide row keys and such from the web UIs
    * [HBASE-11348] - Make frequency and sleep times of  chaos monkeys configurable 
    * [HBASE-11349] - [Thrift] support authentication/impersonation
    * [HBASE-11350] - [PE] Allow random value size
    * [HBASE-11355] - a couple of callQueue related improvements
    * [HBASE-11362] - Minor improvements to LoadTestTool and PerformanceEvaluation
    * [HBASE-11370] - SSH doesn't need to scan meta if not using ZK for assignment
    * [HBASE-11376] - Presplit table in IntegrationTestBigLinkedList's Generator tool
    * [HBASE-11390] - PerformanceEvaluation: add an option to use a single connection
    * [HBASE-11398] - Print the stripes' state with file size info
    * [HBASE-11407] - hbase-client should not require Jackson for pure HBase queries be executed 
    * [HBASE-11415] - [PE] Dump config before running test
    * [HBASE-11421] - HTableInterface javadoc correction
    * [HBASE-11434] - [AccessController] Disallow inbound cells with reserved tags
    * [HBASE-11436] - Support start Row and stop Row in HBase Export
    * [HBASE-11437] - Modify cell tag handling code to treat the length as unsigned
    * [HBASE-11438] - [Visibility Controller] Support UTF8 character as Visibility Labels
    * [HBASE-11440] - Make KeyValueCodecWithTags as the default codec for replication in trunk
    * [HBASE-11444] - Remove use of reflection for User#getShortName
    * [HBASE-11446] - Reduce the frequency of RNG calls in SecureWALCellCodec#EncryptedKvEncoder
    * [HBASE-11450] - Improve file size info in SnapshotInfo tool
    * [HBASE-11452] - add getUserPermission feature in AccessControlClient as client API 
    * [HBASE-11473] - Add BaseWALObserver class
    * [HBASE-11474] - [Thrift2] support authentication/impersonation
    * [HBASE-11491] - Add an option to sleep randomly during the tests with the PE tool
    * [HBASE-11497] - Expose RpcScheduling implementations as LimitedPrivate interfaces
    * [HBASE-11513] - Combine SingleMultiple Queue RpcExecutor into a single class
    * [HBASE-11516] - Track time spent in executing coprocessors in each region.
    * [HBASE-11553] - Abstract visibility label related services into an interface
    * [HBASE-11566] - make ExportSnapshot extendable by removing 'final' 
    * [HBASE-11583] - Refactoring out the configuration changes for enabling VisibilityLabels in the unit tests.
    * [HBASE-11623] - mutateRowsWithLocks might require updatesLock.readLock with waitTime=0
    * [HBASE-11630] - Refactor TestAdmin to use Admin interface instead of HBaseAdmin
    * [HBASE-11631] - Wait a little till server is online in assigning meta
    * [HBASE-11649] - Add shortcut commands to bin/hbase for test tools
    * [HBASE-11650] - Write hbase.id to a temporary location and move into place
    * [HBASE-11657] - Put HTable region methods in an interface
    * [HBASE-11664] - Build broken - TestVisibilityWithCheckAuths
    * [HBASE-11667] - Comment ClientScanner logic for NSREs.
    * [HBASE-11674] - LoadIncrementalHFiles should be more verbose after unrecoverable error
    * [HBASE-11679] - Replace "HTable" with "HTableInterface" where backwards-compatible
    * [HBASE-11696] - Make CombinedBlockCache resizable.
    * [HBASE-11697] - Improve the 'Too many blocks' message on UI blockcache status page
    * [HBASE-11701] - Start and end of memstore flush log should be on the same level
    * [HBASE-11702] - Better introspection of long running compactions
    * [HBASE-11706] - Set versions for VerifyReplication
    * [HBASE-11731] - Add option to only run a subset of the shell tests
    * [HBASE-11748] - Cleanup and add pool usage tracing to Compression
    * [HBASE-11749] - Better error logging when coprocessors loading has failed.
    * [HBASE-11754] - [Shell] Record table property SPLITS_FILE in descriptor
    * [HBASE-11757] - Provide a common base abstract class for both RegionObserver and MasterObserver
    * [HBASE-11774] - Avoid allocating unnecessary tag iterators
    * [HBASE-11777] - Find a way to set sequenceId on Cells on the server
    * [HBASE-11790] - Bulk load should use HFileOutputFormat2 in all cases
    * [HBASE-11805] - KeyValue to Cell Convert in WALEdit APIs
    * [HBASE-11810] - Access SSL Passwords through Credential Provider API
    * [HBASE-11821] - [ImportTSV] Abstract labels tags creation into pluggable Interface
    * [HBASE-11825] - Create Connection and ConnectionManager
    * [HBASE-11826] - Split each tableOrRegionName admin methods into two targetted methods
    * [HBASE-11828] - callers of SeverName.valueOf should use equals and not ==
    * [HBASE-11845] - HFile tool should implement Tool, disable blockcache by default
    * [HBASE-11846] - HStore#assertBulkLoadHFileOk should log if a full HFile verification will be performed during a bulkload
    * [HBASE-11847] - HFile tool should be able to print block headers
    * [HBASE-11865] - Result implements CellScannable; rather it should BE a CellScanner
    * [HBASE-11873] - Hbase Version CLI enhancement
    * [HBASE-11877] - Make TableSplit more readable
    * [HBASE-11891] - Introduce HBaseInterfaceAudience level to denote class names that appear in configs.
    * [HBASE-11897] - Add append and remove peer table-cfs cmds for replication

** New Feature
    * [HBASE-4089] - blockCache contents report
    * [HBASE-6104] - Require EXEC permission to call coprocessor endpoints
    * [HBASE-7667] - Support stripe compaction
    * [HBASE-7840] - Enhance the java it framework to start & stop a distributed hbase & hadoop cluster 
    * [HBASE-8751] - Enable peer cluster to choose/change the ColumnFamilies/Tables it really want to replicate from a source cluster
    * [HBASE-9047] - Tool to handle finishing replication when the cluster is offline
    * [HBASE-10119] - Allow HBase coprocessors to clean up when they fail
    * [HBASE-10151] - No-op HeapMemoryTuner
    * [HBASE-10416] - Improvements to the import flow
    * [HBASE-10881] - Support reverse scan in thrift2
    * [HBASE-10935] - support snapshot policy where flush memstore can be skipped to prevent production cluster freeze
    * [HBASE-11724] - Add to RWQueueRpcExecutor the ability to split get and scan handlers
    * [HBASE-11885] - Provide a Dockerfile to easily build and run HBase from source
    * [HBASE-11909] - Region count listed by HMaster UI and hbck are different

** Task
    * [HBASE-4456] - [doc] Add a section about RS failover
    * [HBASE-4920] - We need a mascot, a totem
    * [HBASE-5697] - Audit HBase for usage of deprecated hadoop 0.20.x property names.
    * [HBASE-6139] - Add troubleshooting section for CentOS 6.2 page allocation failure issue
    * [HBASE-6192] - Document ACL matrix in the book
    * [HBASE-7394] - Document security config requirements from HBASE-7357
    * [HBASE-8035] - Add site target check to precommit tests
    * [HBASE-8844] - Document the removal of replication state AKA start/stop_replication
    * [HBASE-9580] - Document the meaning of @InterfaceAudience in hbase ref guide
    * [HBASE-9733] - Book should have individual Disqus comment per page
    * [HBASE-9875] - NamespaceJanitor chore is not used
    * [HBASE-10134] - Fix findbug warning in VisibilityController
    * [HBASE-10159] - Replaced deprecated interface Closeable
    * [HBASE-10206] - Explain tags in the hbase book
    * [HBASE-10246] - Wrap long lines in recently added source files
    * [HBASE-10364] - Allow configuration option for parent znode in LoadTestTool
    * [HBASE-10388] - Add export control notice in README
    * [HBASE-10439] - Document how to configure REST server impersonation
    * [HBASE-10473] - Add utility for adorning http Context
    * [HBASE-10601] - Upgrade hadoop dependency to 2.3.0 release
    * [HBASE-10609] - Remove filterKeyValue(Cell ignored) from FilterBase
    * [HBASE-10612] - Remove unnecessary dependency on org.eclipse.jdt:core
    * [HBASE-10670] - HBaseFsck#connect() should use new connection
    * [HBASE-10700] - IntegrationTestWithCellVisibilityLoadAndVerify should allow current user to be the admin
    * [HBASE-10740] - Upgrade zookeeper to 3.4.6 release
    * [HBASE-10786] - If snapshot verification fails with 'Regions moved', the message should contain the name of region causing the failure
    * [HBASE-10787] - TestHCM#testConnection* take too long
    * [HBASE-10821] - Make ColumnInterpreter#getValue() abstract
    * [HBASE-10824] - Enhance detection of protobuf generated code in line length check
    * [HBASE-10889] - test-patch.sh should exclude thrift generated code from long line detection
    * [HBASE-10906] - Change error log for NamingException in TableInputFormatBase to WARN level
    * [HBASE-10912] - setUp / tearDown in TestSCVFWithMiniCluster should be done once per run
    * [HBASE-10956] - Upgrade hadoop-2 dependency to 2.4.0
    * [HBASE-11016] - Remove Filter#filterRow(List)
    * [HBASE-11032] - Replace deprecated methods in FileSystem with their replacements
    * [HBASE-11050] - Replace empty catch block in TestHLog#testFailedToCreateHLogIfParentRenamed with @Test(expected=) 
    * [HBASE-11076] - Update refguide on getting 0.94.x to run on hadoop 2.2.0+
    * [HBASE-11090] - Backport HBASE-11083 ExportSnapshot should provide capability to limit bandwidth consumption
    * [HBASE-11107] - Provide utility method equivalent to 0.92's Result.getBytes().getSize()
    * [HBASE-11154] - Document how to use Reverse Scan API
    * [HBASE-11199] - One-time effort to pretty-print the Docbook XML, to make further patch review easier
    * [HBASE-11203] - Clean up javadoc and findbugs warnings in trunk
    * [HBASE-11204] - Document bandwidth consumption limit feature for ExportSnapshot
    * [HBASE-11227] - Mention 8- and 16-bit fixed-with encodings in OrderedBytes docstring
    * [HBASE-11230] - Remove getRowOrBefore from HTableInterface and HTable
    * [HBASE-11317] - Expand unit testing to cover Mockito and MRUnit and give more examples
    * [HBASE-11364] - [BlockCache] Add a flag to cache data blocks in L1 if multi-tier cache
    * [HBASE-11600] - DataInputputStream and DoubleOutputStream are no longer being used 
    * [HBASE-11604] - Disable co-locating meta/master by default
    * [HBASE-11621] - Make MiniDFSCluster run faster
    * [HBASE-11666] - Enforce JDK7 javac for builds on branch-1 and master
    * [HBASE-11682] - Explain hotspotting
    * [HBASE-11723] - Document all options of bin/hbase command
    * [HBASE-11735] - Document Configurable Bucket Sizes in bucketCache
    * [HBASE-11762] - Record the class name of Codec in WAL header
    * [HBASE-11800] - Coprocessor service methods in HTableInterface should be annotated public
    * [HBASE-11849] - Clean up orphaned private audience classes
    * [HBASE-11858] - Audit regionserver classes that are missing InterfaceAudience

** Test
    * [HBASE-8889] - TestIOFencing#testFencingAroundCompaction occasionally fails
    * [HBASE-9928] - TestHRegion should clean up test-data directory upon completion
    * [HBASE-9953] - PerformanceEvaluation: Decouple data size from client concurrency
    * [HBASE-10044] - test-patch.sh should accept documents by known file extensions
    * [HBASE-10130] - TestSplitLogManager#testTaskResigned fails sometimes
    * [HBASE-10180] - TestByteBufferIOEngine#testByteBufferIOEngine occasionally fails
    * [HBASE-10189] - Intermittent TestReplicationSyncUpTool failure
    * [HBASE-10301] - TestAssignmentManagerOnCluster#testOpenCloseRacing fails intermittently
    * [HBASE-10377] - Add test for HBASE-10370 Compaction in out-of-date Store causes region split failure
    * [HBASE-10394] - Test for Replication with tags
    * [HBASE-10406] - Column family option is not effective in IntegrationTestSendTraceRequests
    * [HBASE-10408] - Intermittent TestDistributedLogSplitting#testLogReplayForDisablingTable failure
    * [HBASE-10440] - integration tests fail due to nonce collisions
    * [HBASE-10465] - TestZKPermissionsWatcher.testPermissionsWatcher fails sometimes
    * [HBASE-10475] - TestRegionServerCoprocessorExceptionWithAbort may timeout due to concurrent lease removal
    * [HBASE-10480] - TestLogRollPeriod#testWithEdits may fail due to insufficient waiting
    * [HBASE-10543] - Two rare test failures with TestLogsCleaner and TestSplitLogWorker
    * [HBASE-10635] - thrift#TestThriftServer fails due to TTL validity check
    * [HBASE-10649] - TestMasterMetrics fails occasionally
    * [HBASE-10764] - TestLoadIncrementalHFilesSplitRecovery#testBulkLoadPhaseFailure takes too long
    * [HBASE-10767] - Load balancer may interfere with tests in TestHBaseFsck
    * [HBASE-10774] - Restore TestMultiTableInputFormat
    * [HBASE-10782] - Hadoop2 MR tests fail occasionally because of mapreduce.jobhistory.address is no set in job conf
    * [HBASE-10828] - TestRegionObserverInterface#testHBase3583 should wait for all regions to be assigned
    * [HBASE-10852] - TestDistributedLogSplitting#testDisallowWritesInRecovering occasionally fails
    * [HBASE-10867] - TestRegionPlacement#testRegionPlacement occasionally fails
    * [HBASE-10868] - TestAtomicOperation should close HRegion instance after each subtest
    * [HBASE-10988] - Properly wait for server in TestThriftServerCmdLine
    * [HBASE-11010] - TestChangingEncoding is unnecessarily slow
    * [HBASE-11019] - incCount() method should be properly stubbed in HConnectionTestingUtility#getMockedConnectionAndDecorate()
    * [HBASE-11037] - Race condition in TestZKBasedOpenCloseRegion
    * [HBASE-11051] - checkJavacWarnings in test-patch.sh should bail out early if there is compilation error
    * [HBASE-11057] - Improve TestShell coverage of grant and revoke comamnds
    * [HBASE-11104] - IntegrationTestImportTsv#testRunFromOutputCommitter misses credential initialization
    * [HBASE-11152] - test-patch.sh should be able to handle the case where $TERM is not defined
    * [HBASE-11166] - Categorize tests in hbase-prefix-tree module
    * [HBASE-11328] - testMoveRegion could fail
    * [HBASE-11345] - Add an option not to restore cluster after an IT test
    * [HBASE-11375] - Validate compile-protobuf profile in test-patch.sh
    * [HBASE-11404] - TestLogLevel should stop the server at the end
    * [HBASE-11443] - TestIOFencing#testFencingAroundCompactionAfterWALSync times out
    * [HBASE-11615] - TestZKLessAMOnCluster.testForceAssignWhileClosing failed on Jenkins
    * [HBASE-11713] - Adding hbase shell unit test coverage for visibility labels.
    * [HBASE-11918] - TestVisibilityLabelsWithDistributedLogReplay#testAddVisibilityLabelsOnRSRestart sometimes fails due to VisibilityController initialization not being recognized
    * [HBASE-11942] - Fix TestHRegionBusyWait
    * [HBASE-11966] - Minor error in TestHRegion.testCheckAndMutate_WithCorrectValue()

** Umbrella
    * [HBASE-7319] - Extend Cell usage through read path
    * [HBASE-9945] - Coprocessor loading and execution improvements
    * [HBASE-10909] - Abstract out ZooKeeper usage in HBase - phase 1
