HBase Change Log

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
