HBase Change Log

Release Notes - HBase - Version 1.0.2 - 08/31/2015

** Sub-task
    * [HBASE-7847] - Use zookeeper multi to clear znodes
    * [HBASE-13035] - [0.98] Backport HBASE-12867 - Shell does not support custom replication endpoint specification
    * [HBASE-13201] - Remove HTablePool from thrift-server
    * [HBASE-13496] - Make Bytes$LexicographicalComparerHolder$UnsafeComparer::compareTo inlineable
    * [HBASE-13497] - Remove MVCC stamps from HFile when that is safe
    * [HBASE-13563] - Add missing table owner to AC tests.
    * [HBASE-13579] - Avoid isCellTTLExpired() for NO-TAG cases
    * [HBASE-13658] - Improve the test run time for TestAccessController class
    * [HBASE-13937] - Partially revert HBASE-13172 
    * [HBASE-13983] - Doc how the oddball HTable methods getStartKey, getEndKey, etc. will be removed in 2.0.0
    * [HBASE-14003] - work around jdk8 spec bug in WALPerfEval
    * [HBASE-14080] - Cherry-pick addendums to HBASE-13084 
    * [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-11830] - TestReplicationThrottler.testThrottling failed on virtual boxes
    * [HBASE-12413] - Mismatch in the equals and hashcode methods of KeyValue
    * [HBASE-12743] - [ITBLL] Master fails rejoining cluster stuck splitting logs; Distributed log replay=true
    * [HBASE-12865] - WALs may be deleted before they are replicated to peers
    * [HBASE-12967] - Invalid FQCNs in alter table command leaves the table unusable
    * [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-13329] - ArrayIndexOutOfBoundsException in CellComparator#getMinimumMidpointArray
    * [HBASE-13333] - Renew Scanner Lease without advancing the RegionScanner
    * [HBASE-13352] - Add hbase.import.version to Import usage.
    * [HBASE-13377] - Canary may generate false alarm on the first region when there are many delete markers
    * [HBASE-13417] - batchCoprocessorService() does not handle NULL keys
    * [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-13471] - Fix a possible infinite loop in doMiniBatchMutation
    * [HBASE-13480] - ShortCircuitConnection doesn't short-circuit all calls as expected
    * [HBASE-13520] - NullPointerException in TagRewriteCell
    * [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-13561] - ITBLL.Verify doesn't actually evaluate counters after job completes
    * [HBASE-13564] - Master MBeans are not published
    * [HBASE-13585] - HRegionFileSystem#splitStoreFile() finishes without closing the file handle in some situation
    * [HBASE-13589] - [WINDOWS] hbase.cmd script is broken
    * [HBASE-13600] - check_compatibility.sh should ignore shaded jars
    * [HBASE-13601] - Connection leak during log splitting
    * [HBASE-13604] - bin/hbase mapredcp does not include yammer-metrics jar
    * [HBASE-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-13618] - ReplicationSource is too eager to remove sinks
    * [HBASE-13625] - Use HDFS for HFileOutputFormat2 partitioner's path
    * [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-13662] - RSRpcService.scan() throws an OutOfOrderScannerNext if the scan has a retriable failure
    * [HBASE-13664] - Use HBase 1.0 interfaces in ConnectionCache
    * [HBASE-13668] - TestFlushRegionEntry is flaky
    * [HBASE-13703] - ReplicateContext should not be a member of ReplicationSource
    * [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-13734] - Improper timestamp checking with VisibilityScanDeleteTracker
    * [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-13779] - Calling table.exists() before table.get() end up with an empty Result
    * [HBASE-13789] - ForeignException should not be sent to the client
    * [HBASE-13801] - Hadoop src checksum is shown instead of HBase src checksum in master / RS UI
    * [HBASE-13809] - TestRowTooBig should use HDFS directory for its region directory
    * [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-13825] - Use ProtobufUtil#mergeFrom and ProtobufUtil#mergeDelimitedFrom in place of builder methods of same name
    * [HBASE-13826] - Unable to create table when group acls are appropriately set.
    * [HBASE-13833] - LoadIncrementalHFile.doBulkLoad(Path,HTable) doesn't handle unmanaged connections when using SecureBulkLoad
    * [HBASE-13834] - Evict count not properly passed to HeapMemoryTuner.
    * [HBASE-13835] - KeyValueHeap.current might be in heap when exception happens in pollRealKV
    * [HBASE-13851] - RpcClientImpl.close() can hang with cancelled replica RPCs
    * [HBASE-13853] - ITBLL improvements after HBASE-13811
    * [HBASE-13861] - BucketCacheTmpl.jamon has wrong bucket free and used labels
    * [HBASE-13863] - Multi-wal feature breaks reported number and size of HLogs
    * [HBASE-13865] - Increase the default value for hbase.hregion.memstore.block.multipler from 2 to 4 (part 2)
    * [HBASE-13873] - LoadTestTool addAuthInfoToConf throws UnsupportedOperationException
    * [HBASE-13875] - Clock skew between master and region server may render restored region without server address
    * [HBASE-13877] - Interrupt to flush from TableFlushProcedure causes dataloss in ITBLL
    * [HBASE-13878] - Set hbase.fs.tmp.dir config in HBaseTestingUtility.java for Phoenix UT to use
    * [HBASE-13881] - Bug in HTable#incrementColumnValue implementation
    * [HBASE-13885] - ZK watches leaks during snapshots
    * [HBASE-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-13923] - Loaded region coprocessors are not reported in shell status command
    * [HBASE-13933] - DBE's seekBefore with tags corrupts the tag's offset information thus leading to incorrect results
    * [HBASE-13935] - Orphaned namespace table ZK node should not prevent master to start
    * [HBASE-13938] - Deletes done during the region merge transaction may get eclipsed
    * [HBASE-13945] - Prefix_Tree seekBefore() does not work correctly
    * [HBASE-13958] - RESTApiClusterManager calls kill() instead of suspend() and resume()
    * [HBASE-13959] - Region splitting uses a single thread in most common cases
    * [HBASE-13969] - AuthenticationTokenSecretManager is never stopped in RPCServer
    * [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-14005] - Set permission to .top hfile in LoadIncrementalHFiles
    * [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-14146] - Once replication sees an error it slows down forever
    * [HBASE-14155] - StackOverflowError in reverse scan
    * [HBASE-14178] - regionserver blocks because of waiting for offsetLock
    * [HBASE-14195] - Closed connections are not removed from ConnectionCache (Thrift, REST)
    * [HBASE-14196] - Thrift server idle connection timeout issue
    * [HBASE-14209] - TestShell visibility tests failing
    * [HBASE-14214] - list_labels shouldn't raise ArgumentError if no labels are defined 
    * [HBASE-14224] - Fix coprocessor handling of duplicate classes
    * [HBASE-14228] - Close BufferedMutator and connection in MultiTableOutputFormat
    * [HBASE-14241] - Fix deadlock during cluster shutdown due to concurrent connection close
    * [HBASE-14243] - Incorrect NOTICE file in hbase-it test-jar
    * [HBASE-14250] - branch-1.1 hbase-server test-jar has incorrect LICENSE
    * [HBASE-14251] - javadoc jars use LICENSE/NOTICE from primary artifact
    * [HBASE-14302] - TableSnapshotInputFormat should not create back references when restoring snapshot

** Improvement
    * [HBASE-12415] - Add add(byte[][] arrays) to Bytes.
    * [HBASE-12957] - region_mover#isSuccessfulScan may be extremely slow on region with lots of expired data
    * [HBASE-13127] - Add timeouts on all tests so less zombie sightings
    * [HBASE-13247] - Change BufferedMutatorExample to use addColumn() since add() is deprecated
    * [HBASE-13344] - Add enforcer rule that matches our JDK support statement
    * [HBASE-13366] - Throw DoNotRetryIOException instead of read only IOException
    * [HBASE-13420] - RegionEnvironment.offerExecutionLatency Blocks Threads under Heavy Load
    * [HBASE-13431] - Allow to skip store file range check based on column family while creating reference files in HRegionFileSystem#splitStoreFile
    * [HBASE-13550] - [Shell] Support unset of a list of table attributes
    * [HBASE-13761] - Optimize FuzzyRowFilter
    * [HBASE-13780] - Default to 700 for HDFS root dir permissions for secure deployments
    * [HBASE-13828] - Add group permissions testing coverage to AC.
    * [HBASE-13846] - Run MiniCluster on top of other MiniDfsCluster
    * [HBASE-13925] - Use zookeeper multi to clear znodes in ZKProcedureUtil
    * [HBASE-14097] - Log link to client scan troubleshooting section when scanner exceptions happen.
    * [HBASE-14260] - don't build javadocs for hbase-protocol module

** New Feature
    * [HBASE-13057] - Provide client utility to easily enable and disable table replication

** 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-13665] - Fix docs and site building on branch-1
    * [HBASE-13666] - book.pdf is not renamed during site build
    * [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-13941] - Backport HBASE-13917 (Remove string comparison to identify request priority) to release branches
    * [HBASE-14085] - Correct LICENSE and NOTICE files in artifacts
    * [HBASE-14288] - Upgrade asciidoctor plugin to v1.5.2.1

** Test
    * [HBASE-13609] - TestFastFail is still failing
    * [HBASE-13854] - TestTableLockManager#testLockTimeoutException fails in 0.98 and 1.0 branches
    * [HBASE-13940] - IntegrationTestBulkLoad needs option to specify output folders used by test
    * [HBASE-14210] - Create test for cell level ACLs involving user group


Release Notes - HBase - Version 1.0.1 04/25/2015

** Sub-task
    * [HBASE-13006] - Document visibility label support for groups
    * [HBASE-13292] - Undo parent from 0.98 and 1.0: setting hbase.client.scanner.max.result.size is considered harmful
    * [HBASE-13303] - Fix size calculation of results on the region server
    * [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-13479] - [branch-1.0] Master should not bind to region server ports
    * [HBASE-13481] - Master should respect master (old) DNS/bind related configurations

** Bug
    * [HBASE-10728] - get_counter value is never used.
    * [HBASE-11542] - Unit Test  KeyStoreTestUtil.java compilation failure in IBM JDK 
    * [HBASE-12006] - [JDK 8] KeyStoreTestUtil#generateCertificate fails due to "subject class type invalid"
    * [HBASE-12102] - Duplicate keys in HBase.RegionServer metrics JSON
    * [HBASE-12908] - Typos in MemStoreFlusher javadocs
    * [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-12969] - Parameter Validation is not there for shell script, local-master-backup.sh and local-regionservers.sh
    * [HBASE-12993] - Use HBase 1.0 interfaces in hbase-thrift
    * [HBASE-13001] - NullPointer in master logs for table.jsp
    * [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-13061] - RegionStates can remove wrong region from server holdings
    * [HBASE-13065] - Increasing -Xmx when running TestDistributedLogSplitting
    * [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-13085] - Security issue in the implementation of Rest gataway 'doAs' proxy user support
    * [HBASE-13091] - Split ZK Quorum on Master WebUI
    * [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-13115] - Fix the usage of remote user in thrift doAs implementation.
    * [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-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-13192] - IntegrationTestBulkLoad doesn't wait for table modification sometimes leading to spurious test failures
    * [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-13239] - HBase grant at specific column level does not work for Groups 
    * [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-13269] - Limit result array preallocation to avoid OOME with large scan caching values
    * [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-13296] - Fix the deletion of acl notify nodes for namespace.
    * [HBASE-13298] - Clarify if Table.{set|get}WriteBufferSize() is deprecated or not
    * [HBASE-13301] - Possible memory leak in BucketCache
    * [HBASE-13305] - Get(Get get) is not copying the row key
    * [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-13326] - Disabled table can't be enabled after HBase is restarted
    * [HBASE-13331] - Exceptions from DFS client can cause CatalogJanitor to delete referenced files
    * [HBASE-13374] - Small scanners (with particular configurations) do not return all rows
    * [HBASE-13382] - IntegrationTestBigLinkedList should use SecureRandom
    * [HBASE-13388] - Handling NullPointer in ZKProcedureMemberRpcs while getting ZNode data
    * [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-13423] - Remove duplicate entry for hbase.regionserver.regionSplitLimit in hbase-default.xml
    * [HBASE-13433] - Backward compatibility in 1.0.z for shell broken for get_counter
    * [HBASE-13457] - SnapshotExistsException doesn't honor the DoNotRetry
    * [HBASE-13473] - deleted cells come back alive after the stripe compaction
    * [HBASE-13491] - Issue in FuzzyRowFilter#getNextForFuzzyRule

** Improvement
    * [HBASE-13002] - Make encryption cipher configurable
    * [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-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-13132] - Improve RemoveColumn action debug message 
    * [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-13183] - Make ZK tickTime configurable in standalone HBase
    * [HBASE-13189] - PrefixTreecell should implement HeapSize
    * [HBASE-13223] - Add testMoveMeta to IntegrationTestMTTR
    * [HBASE-13236] - Clean up m2e-related warnings/errors from poms
    * [HBASE-13241] - Add tests for group level grants
    * [HBASE-13342] - Fix incorrect interface annotations
    * [HBASE-13345] - Fix LocalHBaseCluster so that different region server impl can be used for different slaves
    * [HBASE-13362] - Set max result size from client only (like scanner caching).
    * [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-13436] - Include user name in ADE for scans

** New Feature
    * [HBASE-12869] - Add a REST API implementation of the ClusterManager interface

** Task
    * [HBASE-12995] - Document that HConnection#getTable methods do not check table existence since 0.98.1
    * [HBASE-13380] - Cherry pick the HBASE-12808 compatibility checker tool back to 0.98+

** Test
    * [HBASE-13106] - Ensure endpoint-only table coprocessors can be dynamically loaded


Release Notes - HBase - Version 1.0.0 02/20/2015

** Sub-task
    * [HBASE-11852] - Still see "UnsupportedOperationException: CollectionUsage threshold is not supported"
    * [HBASE-12485] - Maintain SeqId monotonically increasing
    * [HBASE-12511] - namespace permissions - add support from table creation privilege in a namespace 'C'
    * [HBASE-12568] - Adopt Semantic Versioning and document it in the book
    * [HBASE-12575] - Sanity check table coprocessor classes are loadable
    * [HBASE-12606] - Sanity check encryption configuration before opening WAL or onlining regions
    * [HBASE-12679] - Add HBaseInterfaceAudience.TOOLS and move some of the Public classes to LimitedPrivate
    * [HBASE-12704] - Add demo client which uses doAs functionality on Thrift-over-HTTPS.
    * [HBASE-12730] - Backport HBASE-5162 (Basic client pushback mechanism) to branch-1
    * [HBASE-12735] - Refactor TAG so it can live as unit test and as an integration test
    * [HBASE-12763] - Make it so there must be WALs for a server to be marked dead
    * [HBASE-12776] - SpliTransaction: Log number of files to be split
    * [HBASE-12779] - SplitTransaction: Add metrics
    * [HBASE-12793] - [hbck] closeRegionSilentlyAndWait() should log cause of IOException and retry until  hbase.hbck.close.timeout expires
    * [HBASE-12802] - Remove unnecessary Table.flushCommits()
    * [HBASE-12926] - Backport HBASE-12688 (Update site with a bootstrap-based UI) for HBASE-12918
    * [HBASE-12980] - Delete of a table may not clean all rows from hbase:meta

** Bug
    * [HBASE-8026] - HBase Shell docs for scan command does not reference VERSIONS
    * [HBASE-9431] - Set  'hbase.bulkload.retries.number' to 10 as HBASE-8450 claims
    * [HBASE-9910] - TestHFilePerformance and HFilePerformanceEvaluation should be merged in a single HFile performance test class.
    * [HBASE-10499] - In write heavy scenario one of the regions does not get flushed causing RegionTooBusyException
    * [HBASE-10528] - DefaultBalancer selects plans to move regions onto draining nodes
    * [HBASE-11979] - Compaction progress reporting is wrong
    * [HBASE-12028] - Abort the RegionServer, when it's handler threads die
    * [HBASE-12070] - Add an option to hbck to fix ZK inconsistencies
    * [HBASE-12108] - HBaseConfiguration: set classloader before loading xml files
    * [HBASE-12267] - Replace HTable constructor in mapreduce.* classes with ConnectionFactory 
    * [HBASE-12270] - A bug in the bucket cache, with cache blocks on write enabled
    * [HBASE-12339] - WAL performance evaluation tool doesn't roll logs
    * [HBASE-12348] - preModifyColumn and preDeleteColumn in AC denies user to perform its operation though it has required rights
    * [HBASE-12393] - The regionserver web will throw exception if we disable block cache
    * [HBASE-12422] - Use ConnectionFactory in HTable constructors
    * [HBASE-12431] - Use of getColumnLatestCell(byte[], int, int, byte[], int, int) is Not Thread Safe
    * [HBASE-12454] - Setting didPerformCompaction early in HRegion#compact
    * [HBASE-12467] - Master joins cluster but never completes initialization
    * [HBASE-12480] - Regions in FAILED_OPEN/FAILED_CLOSE should be processed on master failover 
    * [HBASE-12564] - consolidate the getTableDescriptors() semantic
    * [HBASE-12565] - Race condition in HRegion.batchMutate()  causes partial data to be written when region closes
    * [HBASE-12574] - Update replication metrics to not do so many map look ups.
    * [HBASE-12585] - Fix refguide so it does hbase 1.0 style API everywhere with callout on how we used to do it in pre-1.0
    * [HBASE-12607] - TestHBaseFsck#testParallelHbck fails running against hadoop 2.6.0
    * [HBASE-12611] - Create autoCommit() method and remove clearBufferOnFail
    * [HBASE-12617] - Running IntegrationTestBigLinkedList against cluster getting not an instance of org.apache.hadoop.hbase.MiniHBaseCluster
    * [HBASE-12618] - Add 'Namespace' to headers while displaying user permissions.
    * [HBASE-12622] - user_permission should require global admin to display global and ns permissions
    * [HBASE-12632] - ThrottledInputStream/ExportSnapshot does not throttle
    * [HBASE-12634] -  Fix the AccessController#requireGlobalPermission(ns) with NS
    * [HBASE-12635] - Delete acl notify znode of table after the table is deleted
    * [HBASE-12637] - Compilation with Hadoop-2.4- is broken 
    * [HBASE-12642] - LoadIncrementalHFiles does not throw exception after hitting hbase.bulkload.retries.number setting
    * [HBASE-12644] - Visibility Labels: issue with storing super users in labels table
    * [HBASE-12647] - Truncate table should work with C as well
    * [HBASE-12652] - Allow unmanaged connections in MetaTableAccessor
    * [HBASE-12655] - WALPerformanceEvaluation miscalculates append/sync statistics for multiple regions
    * [HBASE-12661] - rat check fails for several files
    * [HBASE-12662] - region_status.rb is failing with NoMethodError
    * [HBASE-12663] - unify getTableDescriptors() and listTableDescriptorsByNamespace()
    * [HBASE-12664] - TestDefaultLoadBalancer.testBalanceCluster fails in CachedDNSToSwitchMapping
    * [HBASE-12665] - When aborting, dump metrics
    * [HBASE-12666] - TestAssignmentManager hanging; add timeouts
    * [HBASE-12671] - HBASE-12652 broke branch-1 builds (TestAssignmentManager fails)
    * [HBASE-12674] - Add permission check to getNamespaceDescriptor()
    * [HBASE-12675] - Use interface methods in shell scripts
    * [HBASE-12681] - truncate_preserve command fails with undefined method `getTable' error
    * [HBASE-12683] - Compilation with hadoop-2.7.0-SNAPSHOT is broken
    * [HBASE-12686] - Failures in split before PONR not clearing the daughter regions from regions in transition during rollback
    * [HBASE-12692] - NPE from SnapshotManager#stop
    * [HBASE-12694] - testTableExistsIfTheSpecifiedTableRegionIsSplitParent in TestSplitTransactionOnCluster class leaves regions in transition
    * [HBASE-12696] - Possible NPE in HRegionFileSystem#splitStoreFile when skipStoreFileRangeCheck in splitPolicy return true
    * [HBASE-12697] - Don't use RegionLocationFinder if localityCost == 0
    * [HBASE-12699] - undefined method `setAsyncLogFlush' exception thrown when setting DEFERRED_LOG_FLUSH=>true
    * [HBASE-12711] - Fix new findbugs warnings in hbase-thrift module
    * [HBASE-12715] - getLastSequenceId always returns -1
    * [HBASE-12716] - A bug in RegionSplitter.UniformSplit algorithm
    * [HBASE-12718] - Convert TestAcidGuarantees from a unit test to an integration test
    * [HBASE-12728] - buffered writes substantially less useful after removal of HTablePool
    * [HBASE-12732] - Log messages in FileLink$FileLinkInputStream#tryOpen are reversed
    * [HBASE-12739] - Avoid too large identifier of ZooKeeperWatcher
    * [HBASE-12740] - Improve performance of TestHBaseFsck
    * [HBASE-12741] - AccessController contains a javadoc issue
    * [HBASE-12742] - ClusterStatusPublisher crashes with a IPv6 network interface.
    * [HBASE-12744] - hbase-default.xml lists hbase.regionserver.global.memstore.size twice
    * [HBASE-12746] - [1.0.0RC0] Distributed Log Replay is on (HBASE-12577 was insufficient)
    * [HBASE-12747] - IntegrationTestMTTR will OOME if launched with mvn verify
    * [HBASE-12750] - getRequestsCount() in ClusterStatus returns total number of request
    * [HBASE-12767] - Fix a StoreFileScanner NPE in reverse scan flow
    * [HBASE-12771] - TestFailFast#testFastFail failing
    * [HBASE-12774] - Fix the inconsistent permission checks for bulkloading.
    * [HBASE-12781] - thrift2 listen port will bind always to the passed command line address
    * [HBASE-12782] - ITBLL fails for me if generator does anything but 5M per maptask
    * [HBASE-12791] - HBase does not attempt to clean up an aborted split when the regionserver shutting down
    * [HBASE-12798] - Map Reduce jobs should not create Tables in setConf()
    * [HBASE-12801] - Failed to truncate a table while maintaing binary region boundaries
    * [HBASE-12804] - ImportTsv fails to delete partition files created by it
    * [HBASE-12810] - Update to htrace-incubating
    * [HBASE-12811] - [AccessController] NPE while scanning a table with user not having READ permission on the namespace
    * [HBASE-12817] - Data missing while scanning using PREFIX_TREE data block encoding
    * [HBASE-12819] - ExportSnapshot doesn't close FileSystem instances
    * [HBASE-12824] - CompressionTest fails with org.apache.hadoop.hbase.io.hfile.AbstractHFileReader$NotSeekedException: Not seeked to a key/value
    * [HBASE-12831] - Changing the set of vis labels a user has access to doesn't generate an audit log event
    * [HBASE-12832] - Describe table from shell no longer shows Table's attributes, only CF attributes
    * [HBASE-12833] - [shell] table.rb leaks connections
    * [HBASE-12835] - HBASE-12422 changed new HTable(Configuration) to not use managed Connections anymore
    * [HBASE-12837] - ReplicationAdmin leaks zk connections
    * [HBASE-12844] - ServerManager.isServerReacable() should sleep between retries
    * [HBASE-12847] - TestZKLessSplitOnCluster frequently times out in 0.98 builds
    * [HBASE-12862] - Uppercase "wals" in RegionServer webUI
    * [HBASE-12863] - Master info port on RS UI is always 0 
    * [HBASE-12864] - IntegrationTestTableSnapshotInputFormat fails
    * [HBASE-12874] - LoadIncrementalHFiles should use unmanaged connection
    * [HBASE-12878] - Incorrect HFile path in TestHFilePerformance print output (fix for easier debugging)
    * [HBASE-12881] - TestFastFail is not compatible with surefire.rerunFailingTestsCount
    * [HBASE-12886] - Correct tag option name in PerformanceEvaluation
    * [HBASE-12892] - Add a class to allow taking a snapshot from the command line
    * [HBASE-12897] - Minimum memstore size is a percentage
    * [HBASE-12898] - Add in used undeclared dependencies
    * [HBASE-12901] - Possible deadlock while onlining a region and get region plan for other region run parallel
    * [HBASE-12904] - Threading issues in region_mover.rb
    * [HBASE-12915] - Disallow small scan with batching
    * [HBASE-12916] - No access control for replicating WAL entries
    * [HBASE-12917] - HFilePerformanceEvaluation Scan tests fail with StackOverflowError due to recursive call in createCell function
    * [HBASE-12918] - Backport asciidoc changes
    * [HBASE-12919] - Compilation with Hadoop-2.4- is broken again
    * [HBASE-12925] - Use acl cache for doing access control checks in prepare and clean phases of Bulkloading.
    * [HBASE-12942] - After disabling the hfile block cache, Regionserver UI is throwing java.lang.NullPointerException
    * [HBASE-12956] - Binding to 0.0.0.0 is broken after HBASE-10569
    * [HBASE-12958] - SSH doing hbase:meta get but hbase:meta not assigned
    * [HBASE-12962] - TestHFileBlockIndex.testBlockIndex() commented out during HBASE-10531
    * [HBASE-12966] - NPE in HMaster while recovering tables in Enabling state
    * [HBASE-12971] - Replication stuck due to large default value for replication.source.maxretriesmultiplier
    * [HBASE-12976] - Set default value for hbase.client.scanner.max.result.size
    * [HBASE-12978] - Region goes permanently offline (WAS: hbase:meta has a row missing hregioninfo and it causes my long-running job to fail)
    * [HBASE-12984] - SSL cannot be used by the InfoPort after removing deprecated code in HBASE-10336
    * [HBASE-12985] - Javadoc warning and findbugs fixes to get us green again
    * [HBASE-12989] - region_mover.rb unloadRegions method uses ArrayList concurrently resulting in errors
    * [HBASE-12991] - Use HBase 1.0 interfaces in hbase-rest
    * [HBASE-12996] - Reversed field on Filter should be transient
    * [HBASE-12998] - Compilation with Hdfs-2.7.0-SNAPSHOT is broken after HDFS-7647
    * [HBASE-13003] - Get tests in TestHFileBlockIndex back
    * [HBASE-13009] - HBase REST UI inaccessible
    * [HBASE-13010] - HFileOutputFormat2 partitioner's path is hard-coded as '/tmp'
    * [HBASE-13026] - Wrong error message in case incorrect snapshot name OR Incorrect table name
    * [HBASE-13027] - mapreduce.TableInputFormatBase should create its own Connection if needed
    * [HBASE-13028] - Cleanup mapreduce API changes
    * [HBASE-13030] - [1.0.0 polish] Make ScanMetrics public again and align Put 'add' with Get, Delete, etc., addColumn
    * [HBASE-13037] - LoadIncrementalHFile should try to verify the content of unmatched families
    * [HBASE-13038] - Fix the java doc warning continuously reported by Hadoop QA
    * [HBASE-13039] - Add patchprocess/* to .gitignore to fix builds of branches

** Improvement
    * [HBASE-5699] - Run with > 1 WAL in HRegionServer
    * [HBASE-11195] - Potentially improve block locality during major compaction for old regions
    * [HBASE-11412] - Minimize a number of hbase-client transitive dependencies
    * [HBASE-11639] - [Visibility controller] Replicate the visibility of Cells as strings
    * [HBASE-12071] - Separate out thread pool for Master <-> RegionServer communication
    * [HBASE-12121] - maven release plugin does not allow for customized goals
    * [HBASE-12204] - Backport HBASE-12016 'Reduce number of versions in Meta table. Make it configurable' to branch-1
    * [HBASE-12373] - Provide a command to list visibility labels
    * [HBASE-12583] - Allow creating reference files even the split row not lies in the storefile range if required
    * [HBASE-12597] - Add RpcClient interface and enable changing of RpcClient implementation
    * [HBASE-12608] - region_mover.rb does not log moving region count correctly when loading regions
    * [HBASE-12630] - Provide capability for dropping malfunctioning ConfigurationObserver automatically
    * [HBASE-12640] - Add Thrift-over-HTTPS and doAs support for Thrift Server
    * [HBASE-12641] - Grant all permissions of hbase zookeeper node to hbase superuser in a secure cluster
    * [HBASE-12651] - Backport HBASE-12559 'Provide LoadBalancer with online configuration capability' to branch-1
    * [HBASE-12653] - Move TestRegionServerOnlineConfigChange & TestConfigurationManager to Junit4 tests
    * [HBASE-12659] - Replace the method calls to grant and revoke in shell scripts with AccessControlClient 
    * [HBASE-12668] - Adapt PayloadCarryingRpcController so it can also be used in async way
    * [HBASE-12676] - Fix the misleading ASCII art in IntegrationTestBigLinkedList
    * [HBASE-12678] - HBCK should print command line arguments
    * [HBASE-12680] - Refactor base ClusterManager in HBase to not have the notion of sending a signal.
    * [HBASE-12719] - Add test WAL provider to quantify FSHLog overhead in the absence of HDFS.
    * [HBASE-12720] - Make InternalScan LimitedPrivate
    * [HBASE-12736] - Let MetaScanner recycle a given Connection
    * [HBASE-12745] - Visibility Labels:  support visibility labels for user groups.
    * [HBASE-12762] - Region with no hfiles will have the highest locality cost in LocalityCostFunction
    * [HBASE-12768] - Support enable cache_data_on_write in Shell while creating table
    * [HBASE-12773] - Add warning message when user is trying to bulkload a large HFile.
    * [HBASE-12825] - CallRunner exception messages should include destination host:port
    * [HBASE-12893] - IntegrationTestBigLinkedListWithVisibility should use buffered writes
    * [HBASE-12899] - HBase should prefix htrace configuration keys with "hbase.htrace" rather than just "hbase."
    * [HBASE-12929] - TableMapReduceUtil.initTableMapperJob unnecessarily limits the types of outputKeyClass and outputValueClass
    * [HBASE-12973] - RegionCoprocessorEnvironment should provide HRegionInfo directly
    * [HBASE-12979] - Use setters instead of return values for handing back statistics from HRegion methods
    * [HBASE-12997] - FSHLog should print pipeline on low replication
    * [HBASE-13008] - Better default for hbase.regionserver.regionSplitLimit parameter.

** New Feature
    * [HBASE-9531] - a command line (hbase shell) interface to retreive the replication metrics and show replication lag
    * [HBASE-10560] - Per cell TTLs
    * [HBASE-12709] - [mvn] Add unit test excludes command line flag to the build. 
    * [HBASE-12731] - Heap occupancy based client pushback

** Task
    * [HBASE-12493] - User class should provide a way to re-use existing token
    * [HBASE-12567] - Track remaining issues for HBase-1.0
    * [HBASE-12624] - Remove rename_snapshot.rb from code as there is no equivalent renameSnapshot api in Admin class
    * [HBASE-12625] - Deprecate certain methods in classes annotated with InterfaceAudience.Public in branch-1
    * [HBASE-12689] - Move version on from 0.99.2 to HBASE-1.0.0-SNAPSHOT
    * [HBASE-12724] - Upgrade the interface audience of RegionScanner from Private to LimitedPrivate
    * [HBASE-12726] - Backport to branch-1.0 addendum for "Minimize a number of hbase-client transitive dependencies"
    * [HBASE-12788] - Promote Abortable to LimitedPrivate
    * [HBASE-12834] - Promote ScanType to LimitedPrivate

** Test
    * [HBASE-12163] - Move test annotation classes to the same package as in master
    * [HBASE-12645] - HBaseTestingUtility is using ${$HOME} for rootDir
    * [HBASE-12685] - TestSplitLogManager#testLogFilesAreArchived sometimes times out due to race condition 
    * [HBASE-12799] - ITAG fails with java.lang.RuntimeException if table does not exist
    * [HBASE-12885] - Unit test for RAW / VERSIONS scanner specifications

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
