HBase Change Log

Release 0.98.16 - 11/16/2015

** Sub-task
    * [HBASE-14519] - Purge TestFavoredNodeAssignmentHelper, a test for an abandoned feature that can hang
    * [HBASE-14535] - Integration test for rpc connection concurrency / deadlock testing 
    * [HBASE-14538] - Remove TestVisibilityLabelsWithDistributedLogReplay, a test for an unsupported feature
    * [HBASE-14571] - Purge TestProcessBasedCluster; it does nothing and then fails
    * [HBASE-14605] - Split fails due to 'No valid credentials' error when SecureBulkLoadEndpoint#start tries to access hdfs
    * [HBASE-14622] - Purge TestZkLess* tests from branch-1
    * [HBASE-14631] - Region merge request should be audited with request user through proper scope of doAs() calls to region observer notifications
    * [HBASE-14655] - Narrow the scope of doAs() calls to region observer notifications for compaction
    * [HBASE-14709] - Parent change breaks graceful_stop.sh on a cluster

** Bug
    * [HBASE-13318] - RpcServer.getListenerAddress should handle when the accept channel is closed
    * [HBASE-13330] - Region left unassigned due to AM & SSH each thinking the assignment would be done by the other
    * [HBASE-14283] - Reverse scan doesn’t work with HFile inline index/bloom blocks
    * [HBASE-14347] - Add a switch to DynamicClassLoader to disable it
    * [HBASE-14366] - NPE in case visibility expression is not present in labels table during importtsv run
    * [HBASE-14491] - ReplicationSource#countDistinctRowKeys code logic is not correct
    * [HBASE-14497] - Reverse Scan threw StackOverflow caused by readPt checking
    * [HBASE-14501] - NPE in replication with TDE
    * [HBASE-14545] - TestMasterFailover often times out
    * [HBASE-14553] - [0.98] Per column family DFS Replication doesn't work against hadoop-1
    * [HBASE-14577] - HBase shell help for scan and returning a column family has a typo
    * [HBASE-14578] - URISyntaxException during snapshot restore for table with user defined namespace
    * [HBASE-14581] - Znode cleanup throws auth exception in secure mode
    * [HBASE-14591] - Region with reference hfile may split after a forced split in IncreasingToUpperBoundRegionSplitPolicy
    * [HBASE-14594] - Use new DNS API introduced in HADOOP-12437
    * [HBASE-14598] - ByteBufferOutputStream grows its HeapByteBuffer beyond JVM limitations
    * [HBASE-14604] - Improve MoveCostFunction in StochasticLoadBalancer
    * [HBASE-14621] - ReplicationLogCleaner gets stuck when a regionserver crashes
    * [HBASE-14624] - BucketCache.freeBlock is too expensive
    * [HBASE-14628] - [0.98] Save object creation for scanning with block encodings
    * [HBASE-14658] - Allow loading a MonkeyFactory by class name
    * [HBASE-14663] - HStore::close does not honor config hbase.rs.evictblocksonclose
    * [HBASE-14680] - Two configs for snapshot timeout and better defaults
    * [HBASE-14689] - Addendum and unit test for HBASE-13471
    * [HBASE-14705] - Javadoc for KeyValue constructor is not correct.
    * [HBASE-14733] - Minor typo in alter_namespace.rb
    * [HBASE-14768] - bin/graceful_stop.sh logs nothing as a balancer state to be stored

** Improvement
    * [HBASE-12986] - Compaction pressure based client pushback
    * [HBASE-14436] - HTableDescriptor#addCoprocessor will always make RegionCoprocessorHost create new Configuration
    * [HBASE-14580] - Make the HBaseMiniCluster compliant with Kerberos
    * [HBASE-14586] - Use a maven profile to run Jacoco analysis
    * [HBASE-14588] - Stop accessing test resources from within src folder
    * [HBASE-14693] - Add client-side metrics for received pushback signals
    * [HBASE-14700] - Support a "permissive" mode for secure clusters to allow "simple" auth clients
    * [HBASE-14715] - Add javadocs to DelegatingRetryingCallable

** New Feature
    * [HBASE-12911] - Client-side metrics

** Task
    * [HBASE-14493] - Upgrade the jamon-runtime dependency
    * [HBASE-14611] - Backport HBASE-14473 (Compute region locality in parallel) to 0.98


Release 0.98.15 - 10/9/2015

** Sub-task
    * [HBASE-12748] - RegionCoprocessorHost.execOperation creates too many iterator objects
    * [HBASE-14147] - REST Support for Namespaces
    * [HBASE-14428] - Upgrade our surefire-plugin from 2.18 to 2.18.1
    * [HBASE-14513] - TestBucketCache runs obnoxious 1k threads in a unit test
    * [HBASE-14539] - Slight improvement of StoreScanner.optimize

** Bug
    * [HBASE-13143] - TestCacheOnWrite is flaky and needs a diet
    * [HBASE-13250] - chown of ExportSnapshot does not cover all path and files
    * [HBASE-13324] - o.a.h.h.Coprocessor should be LimitedPrivate("Coprocessor")
    * [HBASE-13744] - TestCorruptedRegionStoreFile is flaky
    * [HBASE-13770] - Programmatic JAAS configuration option for secure zookeeper may be broken
    * [HBASE-14207] - Region was hijacked and remained in transition when RS failed to open a region and later regionplan changed to new RS on retry
    * [HBASE-14224] - Fix coprocessor handling of duplicate classes
    * [HBASE-14229] - Flushing canceled by coprocessor still leads to memstoreSize set down
    * [HBASE-14258] - Make region_mover.rb script case insensitive with regard to hostname
    * [HBASE-14269] - FuzzyRowFilter omits certain rows when multiple fuzzy keys exist
    * [HBASE-14307] - Incorrect use of positional read api in HFileBlock
    * [HBASE-14315] - Save one call to KeyValueHeap.peek per row
    * [HBASE-14327] - TestIOFencing#testFencingAroundCompactionAfterWALSync is flaky
    * [HBASE-14354] - Minor improvements for usage of the mlock agent
    * [HBASE-14359] - HTable#close will hang forever if unchecked error/exception thrown in AsyncProcess#sendMultiAction
    * [HBASE-14364] - hlog_roll and compact_rs broken in shell
    * [HBASE-14370] - Use separate thread for calling ZKPermissionWatcher#refreshNodes()
    * [HBASE-14382] - TestInterfaceAudienceAnnotations should hadoop-compt module resources
    * [HBASE-14400] - Fix HBase RPC protection documentation
    * [HBASE-14407] - NotServingRegion: hbase region closed forever
    * [HBASE-14434] - Merge of HBASE-7332 to 0.98 dropped a hunk
    * [HBASE-14453] - HBaseAdmin#deleteTable should relocate META when cached location is stale
    * [HBASE-14475] - Region split requests are always audited with "hbase" user rather than request user
    * [HBASE-14489] - postScannerFilterRow consumes a lot of CPU
    * [HBASE-14492] - Increase REST server header buffer size from 8k to 64k
    * [HBASE-14494] - Wrong usage messages on shell commands
    * [HBASE-14510] - Can not set coprocessor from Shell after HBASE-14224

** Improvement
    * [HBASE-14261] - Enhance Chaos Monkey framework by adding zookeeper and datanode fault injections.
    * [HBASE-14325] - Add snapshotinfo command to hbase script
    * [HBASE-14371] - Backport the MasterKillingMonkeyFactory from HBASE-13470 to 0.98 

** New Feature
    * [HBASE-14459] - Add request and response sizes metrics

** Task
    * [HBASE-14308] - HTableDescriptor WARN is not actionable
    * [HBASE-14403] - [0.98] Fix TestInterfaceAudienceAnnotations failures
    * [HBASE-14404] - Backport HBASE-14098 (Allow dropping caches behind compactions) to 0.98


Release 0.98.14 - 8/29/2015

** Sub-task
    * [HBASE-7847] - Use zookeeper multi to clear znodes
    * [HBASE-13730] - Backport HBASE-13576 (Failure in checking one region should not fail the entire HBCK operation) to 0.98
    * [HBASE-13743] - Backport HBASE-13709 (Updates to meta table server columns may be eclipsed) to 0.98
    * [HBASE-13899] - Jacoco instrumentation fails under jdk8
    * [HBASE-13937] - Partially revert HBASE-13172 
    * [HBASE-13963] - avoid leaking jdk.tools
    * [HBASE-14086] - remove unused bundled dependencies
    * [HBASE-14105] - Add shell tests for Snapshot
    * [HBASE-14176] - Add missing headers to META-INF files

** Bug
    * [HBASE-5878] - Use getVisibleLength public api from HdfsDataInputStream from Hadoop-2.
    * [HBASE-10844] - Coprocessor failure during batchmutation leaves the memstore datastructs in an inconsistent state
    * [HBASE-12865] - WALs may be deleted before they are replicated to peers
    * [HBASE-12967] - Invalid FQCNs in alter table command leaves the table unusable
    * [HBASE-13561] - ITBLL.Verify doesn't actually evaluate counters after job completes
    * [HBASE-13646] - HRegion#execService should not try to build incomplete messages
    * [HBASE-13706] - CoprocessorClassLoader should not exempt Hive classes
    * [HBASE-13825] - Use ProtobufUtil#mergeFrom and ProtobufUtil#mergeDelimitedFrom in place of builder methods of same name
    * [HBASE-13835] - KeyValueHeap.current might be in heap when exception happens in pollRealKV
    * [HBASE-13849] - Remove restore and clone snapshot from the WebUI
    * [HBASE-13861] - BucketCacheTmpl.jamon has wrong bucket free and used labels
    * [HBASE-13865] - Increase the default value for hbase.hregion.memstore.block.multipler from 2 to 4 (part 2)
    * [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-13897] - OOM may occur when Import imports a row with too many KeyValues
    * [HBASE-13901] - Error while calling watcher on creating and deleting an HBase table
    * [HBASE-13918] - Fix hbase:namespace description in webUI
    * [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-13970] - NPE during compaction in trunk
    * [HBASE-13978] - Variable never assigned in SimpleTotalOrderPartitioner.getPartition() 
    * [HBASE-13988] - Add exception handler for lease thread
    * [HBASE-13995] - ServerName is not fully case insensitive
    * [HBASE-14005] - Set permission to .top hfile in LoadIncrementalHFiles
    * [HBASE-14022] - TestMultiTableSnapshotInputFormatImpl uses a class only available in JRE 1.7+
    * [HBASE-14042] - Fix FATAL level logging in FSHLog where logged for non fatal exceptions
    * [HBASE-14048] - isPBMagicPrefix should always check for null data
    * [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-14157] - Interfaces implemented by subclasses should be checked when registering CoprocessorService
    * [HBASE-14168] - Avoid useless retry for DoNotRetryIOException in TableRecordReaderImpl
    * [HBASE-14178] - regionserver blocks because of waiting for offsetLock
    * [HBASE-14195] - Closed connections are not removed from ConnectionCache (Thrift, REST)
    * [HBASE-14196] - Thrift server idle connection timeout issue
    * [HBASE-14199] - maven-remote-resources-plugin failure processing NOTICE.vm in hbase-assembly
    * [HBASE-14209] - TestShell visibility tests failing
    * [HBASE-14214] - list_labels shouldn't raise ArgumentError if no labels are defined 
    * [HBASE-14225] - Exclude **/target/** from RAT checks
    * [HBASE-14243] - Incorrect NOTICE file in hbase-it test-jar
    * [HBASE-14246] - branch 0.98 and earlier has incorrect LICENSE/NOTICE for several dependencies
    * [HBASE-14250] - branch-1.1 hbase-server test-jar has incorrect LICENSE
    * [HBASE-14251] - javadoc jars use LICENSE/NOTICE from primary artifact
    * [HBASE-14297] - Fix a long standing nit with 0.98 source assemblies
    * [HBASE-14303] - LICENSE and NOTICE files missing in root dir of Hadoop 1 binary convenience artifact

** Improvement
    * [HBASE-8642] - [Snapshot] List and delete snapshot by table
    * [HBASE-12596] - bulkload needs to follow locality
    * [HBASE-13755] - Provide single super user check implementation
    * [HBASE-13925] - Use zookeeper multi to clear znodes in ZKProcedureUtil
    * [HBASE-13961] - SnapshotManager#initialize should set snapshotLayoutVersion if it allows to create snapshot with old layout format
    * [HBASE-13985] - Add configuration to skip validating HFile format when bulk loading
    * [HBASE-13996] - Add write sniffing in canary
    * [HBASE-14002] - Add --noReplicationSetup option to IntegrationTestReplication
    * [HBASE-14097] - Log link to client scan troubleshooting section when scanner exceptions happen.
    * [HBASE-14122] - Client API for determining if server side supports cell level security
    * [HBASE-14260] - don't build javadocs for hbase-protocol module
    * [HBASE-14275] - Backport to 0.98 HBASE-10785 Metas own location should be cached

** New Feature
    * [HBASE-13356] - HBase should provide an InputFormat supporting multiple scans in mapreduce jobs over snapshots
    * [HBASE-13639] - SyncTable - rsync for HBase tables
    * [HBASE-14154] - DFS Replication should be configurable at column family level

** Task
    * [HBASE-11276] - Add back support for running ChaosMonkey as standalone tool
    * [HBASE-13666] - book.pdf is not renamed during site build
    * [HBASE-13994] - Backport HBASE-13917 (Remove string comparison to identify request priority) to 0.98
    * [HBASE-14057] - HBase shell user_permission should list super users defined on hbase-site.xml
    * [HBASE-14085] - Correct LICENSE and NOTICE files in artifacts
    * [HBASE-14264] - Update RAT plugin version in 0.98 branch
    * [HBASE-14288] - Upgrade asciidoctor plugin to v1.5.2.1

** Test
    * [HBASE-11819] - Unit test for CoprocessorHConnection 
    * [HBASE-13940] - IntegrationTestBulkLoad needs option to specify output folders used by test
    * [HBASE-14210] - Create test for cell level ACLs involving user group


Release 0.98.13 - 6/18/2015

** Sub-task
    * [HBASE-13035] - [0.98] Backport HBASE-12867 - Shell does not support custom replication endpoint specification
    * [HBASE-13494] - 0.98: Remove remove(K, V) from type PoolMap<K,V>
    * [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-13752] - Temporarily disable TestCorruptedRegionStoreFile on 0.98

** Bug
    * [HBASE-8725] - Add total time RPC call metrics
    * [HBASE-11658] - Piped commands to hbase shell should return non-zero if shell command failed.
    * [HBASE-12413] - Mismatch in the equals and hashcode methods of KeyValue
    * [HBASE-13084] - Add labels to VisibilityLabelsCache asynchronously causes TestShell flakey
    * [HBASE-13200] - Improper configuration can leads to endless lease recovery during failover
    * [HBASE-13217] - Procedure fails due to ZK issue
    * [HBASE-13301] - Possible memory leak in BucketCache
    * [HBASE-13312] - SmallScannerCallable does not increment scan metrics
    * [HBASE-13325] - Protocol Buffers 2.5 no longer available for download on code.google.com
    * [HBASE-13333] - Renew Scanner Lease without advancing the RegionScanner
    * [HBASE-13377] - Canary may generate false alarm on the first region when there are many delete markers
    * [HBASE-13382] - IntegrationTestBigLinkedList should use SecureRandom
    * [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-13457] - SnapshotExistsException doesn't honor the DoNotRetry
    * [HBASE-13471] - Fix a possible infinite loop in doMiniBatchMutation
    * [HBASE-13473] - deleted cells come back alive after the stripe compaction
    * [HBASE-13475] - Small spelling mistake in region_mover#isSuccessfulScan causes NoMethodError
    * [HBASE-13477] - Create metrics on failed requests
    * [HBASE-13482] - Phoenix is failing to scan tables on secure environments. 
    * [HBASE-13490] - foreground daemon start re-executes ulimit output
    * [HBASE-13491] - Issue in FuzzyRowFilter#getNextForFuzzyRule
    * [HBASE-13526] - TestRegionServerReportForDuty can be flaky: hang or timeout
    * [HBASE-13528] - A bug on selecting compaction pool
    * [HBASE-13546] - NPE on region server status page if all masters are down
    * [HBASE-13564] - Master MBeans are not published
    * [HBASE-13585] - HRegionFileSystem#splitStoreFile() finishes without closing the file handle in some situation
    * [HBASE-13592] - RegionServer sometimes gets stuck during shutdown in case of cache flush failures
    * [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-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-13647] - Default value for hbase.client.operation.timeout is too high
    * [HBASE-13651] - Handle StoreFileScanner FileNotFoundException
    * [HBASE-13662] - RSRpcService.scan() throws an OutOfOrderScannerNext if the scan has a retriable failure
    * [HBASE-13668] - TestFlushRegionEntry is flaky
    * [HBASE-13703] - ReplicateContext should not be a member of ReplicationSource
    * [HBASE-13711] - Provide an API to set min and max versions in HColumnDescriptor
    * [HBASE-13712] - Backport HBASE-13199 to branch-1
    * [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-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-13757] - TestMultiParallel (and others) failing on 0.98 since HBASE-13712
    * [HBASE-13767] - Allow ZKAclReset to set and not just clear ZK ACLs
    * [HBASE-13768] - ZooKeeper znodes are bootstrapped with insecure ACLs in a secure configuration
    * [HBASE-13776] - Setting illegal versions for HColumnDescriptor does not throw IllegalArgumentException 
    * [HBASE-13777] - Table fragmentation display triggers NPE on master status page
    * [HBASE-13778] - BoundedByteBufferPool incorrectly increasing runningAverage buffer length
    * [HBASE-13779] - Calling table.exists() before table.get() end up with an empty Result
    * [HBASE-13789] - ForeignException should not be sent to the client
    * [HBASE-13801] - Hadoop src checksum is shown instead of HBase src checksum in master / RS UI
    * [HBASE-13807] - [0.98] NoTagsKeyValue optimization is not proper
    * [HBASE-13812] - Deleting of last Column Family of a table should not be allowed
    * [HBASE-13826] - Unable to create table when group acls are appropriately set.
    * [HBASE-13837] - [0.98] TestBoundedByteBufferPool does not compile with JDK 1.6
    * [HBASE-13873] - LoadTestTool addAuthInfoToConf throws UnsupportedOperationException
    * [HBASE-13875] - Clock skew between master and region server may render restored region without server address

** Improvement
    * [HBASE-12415] - Add add(byte[][] arrays) to Bytes.
    * [HBASE-12987] - HBCK should print status while scanning over many regions
    * [HBASE-13122] - Improve efficiency for return codes of some filters
    * [HBASE-13132] - Improve RemoveColumn action debug message 
    * [HBASE-13216] - Add version info in RPC connection header
    * [HBASE-13344] - Add enforcer rule that matches our JDK support statement
    * [HBASE-13350] - Add a debug-warn if we fail HTD checks even if table.sanity.checks is false
    * [HBASE-13366] - Throw DoNotRetryIOException instead of read only IOException
    * [HBASE-13369] - Expose scanNext stats to region server level
    * [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-13436] - Include user name in ADE for scans
    * [HBASE-13534] - Change HBase master WebUI to explicitly mention if it is a backup master
    * [HBASE-13550] - [Shell] Support unset of a list of table attributes
    * [HBASE-13671] - More classes to add to the invoking repository of org.apache.hadoop.hbase.mapreduce.driver
    * [HBASE-13677] - RecoverableZookeeper WARNs on expected events
    * [HBASE-13684] - Allow mlockagent to be used when not starting as root
    * [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

** New Feature
    * [HBASE-13412] - Region split decisions should have jitter

** Task
    * [HBASE-13610] - Backport HBASE-13222 (Provide means of non-destructive balancer inspection) to 0.98
    * [HBASE-13799] - javadoc how Scan gets polluted when used; if you set attributes or ask for scan metrics

** Test
    * [HBASE-13413] - Create an integration test for Replication
    * [HBASE-13854] - TestTableLockManager#testLockTimeoutException fails in 0.98 and 1.0 branches


Release 0.98.12 - 4/17/2015

** Sub-task
    * [HBASE-13006] - Document visibility label support for groups
    * [HBASE-13207] - Backport to 0.98 "[PERF] Reuse the IPC buffers..."
    * [HBASE-13276] - Fix incorrect condition for minimum block locality in 0.98
    * [HBASE-13283] - Document the steps for rolling back the security on hbase.
    * [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-13335] - Update ClientSmallScanner and ClientSmallReversedScanner
    * [HBASE-13386] - Backport HBASE-12601 to all active branches other than master

** Bug
    * [HBASE-10728] - get_counter value is never used.
    * [HBASE-12908] - Typos in MemStoreFlusher javadocs
    * [HBASE-12931] - The existing KeyValues in memstore are not removed completely after inserting cell into memStore 
    * [HBASE-12969] - Parameter Validation is not there for shell script, local-master-backup.sh and local-regionservers.sh
    * [HBASE-13091] - Split ZK Quorum on Master WebUI
    * [HBASE-13136] - TestSplitLogManager.testGetPreviousRecoveryMode is flakey
    * [HBASE-13139] - Clean up missing JAVA_HOME message in bin/hbase-config.sh
    * [HBASE-13172] - TestDistributedLogSplitting.testThreeRSAbort fails several times on branch-1
    * [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-13253] - LoadIncrementalHFiles unify hfiles discovery
    * [HBASE-13262] - ResultScanner doesn't return all rows in Scan
    * [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-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-13305] - Get(Get get) is not copying the row key
    * [HBASE-13309] - Some tests do not reset EnvironmentEdgeManager
    * [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-13388] - Handling NullPointer in ZKProcedureMemberRpcs while getting ZNode data
    * [HBASE-13397] - Purge duplicate rpc request thread local
    * [HBASE-13409] - Add categories to uncategorized tests
    * [HBASE-13422] - remove use of StandardCharsets in 0.98
    * [HBASE-13433] - Backward compatibility in 1.0.z for shell broken for get_counter
    * [HBASE-13445] - RpcServer.Call change in backport of HBASE-13397 not sufficiently backwards compatible

** Improvement
    * [HBASE-6919] - Remove unnecessary throws IOException from Bytes.readVLong
    * [HBASE-12891] - Parallel execution for Hbck checkRegionConsistency
    * [HBASE-13100] - Shell command to retrieve table splits
    * [HBASE-13109] - Make better SEEK vs SKIP decisions during scanning
    * [HBASE-13120] - Allow disabling hadoop classpath and native library lookup
    * [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-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

** Task
    * [HBASE-13380] - Cherry pick the HBASE-12808 compatibility checker tool back to 0.98+


Release 0.98.11 - 3/9/2015

** Sub-task
    * [HBASE-12980] - Delete of a table may not clean all rows from hbase:meta
    * [HBASE-13137] - [0.98] Backport HBASE-13057 - Provide client utility to easily enable and disable table replication

** Bug
    * [HBASE-7332] - [webui] HMaster webui should display the number of regions a table has.
    * [HBASE-9910] - TestHFilePerformance and HFilePerformanceEvaluation should be merged in a single HFile performance test class.
    * [HBASE-12070] - Add an option to hbck to fix ZK inconsistencies
    * [HBASE-12102] - Duplicate keys in HBase.RegionServer metrics JSON
    * [HBASE-12108] - HBaseConfiguration: set classloader before loading xml files
    * [HBASE-12747] - IntegrationTestMTTR will OOME if launched with mvn verify
    * [HBASE-12897] - Minimum memstore size is a percentage
    * [HBASE-12914] - Mark public features that require HFilev3 Unstable in 0.98, warn in upgrade section
    * [HBASE-12948] - Calling Increment#addColumn on the same column multiple times produces wrong result 
    * [HBASE-12958] - SSH doing hbase:meta get but hbase:meta not assigned
    * [HBASE-12961] - Negative values in read and write region server metrics 
    * [HBASE-12964] - Add the ability for hbase-daemon.sh to start in the foreground
    * [HBASE-12976] - Set default value for hbase.client.scanner.max.result.size
    * [HBASE-12989] - region_mover.rb unloadRegions method uses ArrayList concurrently resulting in errors
    * [HBASE-12996] - Reversed field on Filter should be transient
    * [HBASE-12998] - Compilation with Hdfs-2.7.0-SNAPSHOT is broken after HDFS-7647
    * [HBASE-12999] - Make foreground_start return the correct exit code
    * [HBASE-13001] - NullPointer in master logs for table.jsp
    * [HBASE-13005] - TestDeleteTableHandler failing in 0.98 hadoop 1 builds
    * [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-13037] - LoadIncrementalHFile should try to verify the content of unmatched families
    * [HBASE-13039] - Add patchprocess/* to .gitignore to fix builds of branches
    * [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-13065] - Increasing -Xmx when running TestDistributedLogSplitting
    * [HBASE-13070] - Fix TestCacheOnWrite
    * [HBASE-13072] - BucketCache.evictBlock returns true if block does not exist
    * [HBASE-13085] - Security issue in the implementation of Rest gataway 'doAs' proxy user support
    * [HBASE-13104] - ZooKeeper session timeout cannot be changed for standalone HBase
    * [HBASE-13111] - truncate_preserve command is failing with undefined method error
    * [HBASE-13123] - Minor bug in ROW bloom filter
    * [HBASE-13131] - ReplicationAdmin leaks connections if there's an error in the constructor
    * [HBASE-13134] - mutateRow and checkAndMutate apis don't throw region level exceptions

** Improvement
    * [HBASE-8329] - Limit compaction speed
    * [HBASE-12957] - region_mover#isSuccessfulScan may be extremely slow on region with lots of expired data
    * [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-13002] - Make encryption cipher configurable
    * [HBASE-13008] - Better default for hbase.regionserver.regionSplitLimit parameter.
    * [HBASE-13044] - Configuration option for disabling coprocessor loading
    * [HBASE-13045] - Ensure MapReduce javadoc example works
    * [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

** New Feature
    * [HBASE-9531] - a command line (hbase shell) interface to retreive the replication metrics and show replication lag
    * [HBASE-12869] - Add a REST API implementation of the ClusterManager interface

** Task
    * [HBASE-12795] - Backport HBASE-12429 (Add port to ClusterManager's actions) to 0.98
    * [HBASE-12995] - Document that HConnection#getTable methods do not check table existence since 0.98.1
    * [HBASE-13000] - Backport HBASE-11240 (Print hdfs pipeline when hlog's sync is slow) to 0.98
    * [HBASE-13020] - Add 'patchprocess/*' to RAT excludes on all branches

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


Release 0.98.10 - 2/5/2015

** Sub-task
    * [HBASE-12729] - Backport HBASE-5162 (Basic client pushback mechanism) to 0.98
    * [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-12842] - Fix the incompatibility introduced by AccessControlClient in 0.98
    * [HBASE-12854] - Fix the CopyTable incompatibility introduced in HBASE-11997 in 0.98
    * [HBASE-12926] - Backport HBASE-12688 (Update site with a bootstrap-based UI) for HBASE-12918
    * [HBASE-12933] - [0.98] Fold StatisticsHConnection into HConnection

** Bug
    * [HBASE-8026] - HBase Shell docs for scan command does not reference VERSIONS
    * [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-12270] - A bug in the bucket cache, with cache blocks on write enabled
    * [HBASE-12393] - The regionserver web will throw exception if we disable block cache
    * [HBASE-12480] - Regions in FAILED_OPEN/FAILED_CLOSE should be processed on master failover 
    * [HBASE-12607] - TestHBaseFsck#testParallelHbck fails running against hadoop 2.6.0
    * [HBASE-12644] - Visibility Labels: issue with storing super users in labels table
    * [HBASE-12694] - testTableExistsIfTheSpecifiedTableRegionIsSplitParent in TestSplitTransactionOnCluster class leaves regions in transition
    * [HBASE-12697] - Don't use RegionLocationFinder if localityCost == 0
    * [HBASE-12699] - undefined method `setAsyncLogFlush' exception thrown when setting DEFERRED_LOG_FLUSH=>true
    * [HBASE-12715] - getLastSequenceId always returns -1
    * [HBASE-12716] - A bug in RegionSplitter.UniformSplit algorithm
    * [HBASE-12732] - Log messages in FileLink$FileLinkInputStream#tryOpen are reversed
    * [HBASE-12739] - Avoid too large identifier of ZooKeeperWatcher
    * [HBASE-12750] - getRequestsCount() in ClusterStatus returns total number of request
    * [HBASE-12767] - Fix a StoreFileScanner NPE in reverse scan flow
    * [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-12801] - Failed to truncate a table while maintaing binary region boundaries
    * [HBASE-12804] - ImportTsv fails to delete partition files created by it
    * [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-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-12837] - ReplicationAdmin leaks zk connections
    * [HBASE-12844] - ServerManager.isServerReacable() should sleep between retries
    * [HBASE-12845] - ByteBufferOutputStream should grow as direct buffer if the initial buffer is also direct BB
    * [HBASE-12847] - TestZKLessSplitOnCluster frequently times out in 0.98 builds
    * [HBASE-12864] - IntegrationTestTableSnapshotInputFormat fails
    * [HBASE-12878] - Incorrect HFile path in TestHFilePerformance print output (fix for easier debugging)
    * [HBASE-12886] - Correct tag option name in PerformanceEvaluation
    * [HBASE-12892] - Add a class to allow taking a snapshot from the command line
    * [HBASE-12898] - Add in used undeclared dependencies
    * [HBASE-12904] - Threading issues in region_mover.rb
    * [HBASE-12905] - Clean up presence of hadoop annotations in 0.98
    * [HBASE-12910] - describe in the shell is broken
    * [HBASE-12915] - Disallow small scan with batching
    * [HBASE-12916] - No access control for replicating WAL entries
    * [HBASE-12918] - Backport asciidoc changes
    * [HBASE-12925] - Use acl cache for doing access control checks in prepare and clean phases of Bulkloading.

** Improvement
    * [HBASE-11195] - Potentially improve block locality during major compaction for old regions
    * [HBASE-12121] - maven release plugin does not allow for customized goals
    * [HBASE-12223] - MultiTableInputFormatBase.getSplits is too slow
    * [HBASE-12608] - region_mover.rb does not log moving region count correctly when loading regions
    * [HBASE-12627] - Add back snapshot batching facility from HBASE-11360 dropped by HBASE-11742
    * [HBASE-12641] - Grant all permissions of hbase zookeeper node to hbase superuser in a secure cluster
    * [HBASE-12720] - Make InternalScan LimitedPrivate
    * [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

** New Feature
    * [HBASE-12709] - [mvn] Add unit test excludes command line flag to the build. 
    * [HBASE-12731] - Heap occupancy based client pushback

** Task
    * [HBASE-12658] - Backport HBASE-12574 (Update replication metrics to not do so many map look ups) to 0.98
    * [HBASE-12724] - Upgrade the interface audience of RegionScanner from Private to LimitedPrivate
    * [HBASE-12787] - Backport HBASE-12028 (Abort the RegionServer when it's handler threads die) to 0.98
    * [HBASE-12788] - Promote Abortable to LimitedPrivate
    * [HBASE-12834] - Promote ScanType to LimitedPrivate
    * [HBASE-12932] - [0.98] Change the interface annotation of HConnection from Public/Stable to Public/Evolving

** Test
    * [HBASE-12722] - Backport TestMultiTableInputFormat to 0.98 branch
    * [HBASE-12885] - Unit test for RAW / VERSIONS scanner specifications


Release 0.98.9 - 12/22/2014

** Sub-task
    * [HBASE-12517] - Several HConstant members are assignable
    * [HBASE-12573] - Backport HBASE-10591 Sanity check table configuration in createTable
    * [HBASE-12575] - Sanity check table coprocessor classes are loadable
    * [HBASE-12604] - Backport HBASE-12128 (Cache configuration and RpcController selection for Table in Connection) to 0.98
    * [HBASE-12606] - Sanity check encryption configuration before opening WAL or onlining regions

** Bug
    * [HBASE-11099] - Two situations where we could open a region with smaller sequence number
    * [HBASE-11979] - Compaction progress reporting is wrong
    * [HBASE-12053] - SecurityBulkLoadEndPoint set 777 permission on input data files 
    * [HBASE-12277] - Refactor bulkLoad methods in AccessController to its own interface
    * [HBASE-12337] - Import tool fails with NullPointerException if clusterIds is not initialized
    * [HBASE-12346] - Scan's default auths behavior under Visibility labels
    * [HBASE-12348] - preModifyColumn and preDeleteColumn in AC denies user to perform its operation though it has required rights
    * [HBASE-12398] - Region isn't assigned in an extreme race condition
    * [HBASE-12431] - Use of getColumnLatestCell(byte[], int, int, byte[], int, int) is Not Thread Safe
    * [HBASE-12449] - Use the max timestamp of current or old cell's timestamp in HRegion.append()
    * [HBASE-12454] - Setting didPerformCompaction early in HRegion#compact
    * [HBASE-12464] - meta table region assignment stuck in the FAILED_OPEN state due to region server not fully ready to serve
    * [HBASE-12467] - Master joins cluster but never completes initialization
    * [HBASE-12479] - Backport HBASE-11689 (Track meta in transition) to 0.98 and branch-1
    * [HBASE-12491] - TableMapReduceUtil.findContainingJar() NPE
    * [HBASE-12513] - Graceful stop script does not restore the balancer state
    * [HBASE-12533] - staging directories are not deleted after secure bulk load
    * [HBASE-12537] - HBase should log the remote host on replication error
    * [HBASE-12539] - HFileLinkCleaner logs are uselessly noisy
    * [HBASE-12550] - Check all storefiles are referenced before splitting
    * [HBASE-12551] - Backport HBASE-10955 'HBCK leaves the region in masters in-memory RegionStates if region hdfs dir is lost' to 0.98
    * [HBASE-12560] - [WINDOWS] Append the classpath from Hadoop to HBase classpath in bin/hbase.cmd
    * [HBASE-12580] - Zookeeper instantiated even though we might not need it in the shell
    * [HBASE-12614] - Potentially unclosed StoreFile(s) in DefaultCompactor#compact()
    * [HBASE-12616] - We lost the IntegrationTestBigLinkedList COMMANDS in recent usage refactoring
    * [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-12639] - Backport HBASE-12565 Race condition in HRegion.batchMutate() causes partial data to be written when region closes
    * [HBASE-12642] - LoadIncrementalHFiles does not throw exception after hitting hbase.bulkload.retries.number setting
    * [HBASE-12647] - Truncate table should work with C as well
    * [HBASE-12666] - TestAssignmentManager hanging; add timeouts
    * [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-12696] - Possible NPE in HRegionFileSystem#splitStoreFile when skipStoreFileRangeCheck in splitPolicy return true

** Improvement
    * [HBASE-8572] - Enhance delete_snapshot.rb to call snapshot deletion API with regex
    * [HBASE-12373] - Provide a command to list visibility labels
    * [HBASE-12411] - Optionally enable p-reads and private readers for compactions
    * [HBASE-12529] - Use ThreadLocalRandom for RandomQueueBalancer
    * [HBASE-12582] - Backport HBASE-10881 'Support reverse scan in thrift2' to 0.98
    * [HBASE-12583] - Allow creating reference files even the split row not lies in the storefile range if required
    * [HBASE-12619] - Backport HBASE-11639 (Replicate the visibility of Cells as strings) to 0.98
    * [HBASE-12659] - Replace the method calls to grant and revoke in shell scripts with AccessControlClient 
    * [HBASE-12676] - Fix the misleading ASCII art in IntegrationTestBigLinkedList
    * [HBASE-12678] - HBCK should print command line arguments

** New Feature
    * [HBASE-10560] - Per cell TTLs
    * [HBASE-12496] - A blockedRequestsCount metric

** Task
    * [HBASE-11992] - Backport HBASE-11367 (Pluggable replication endpoint) to 0.98
    * [HBASE-12383] - Move 0.98 build to surefire 2.18
    * [HBASE-12493] - User class should provide a way to re-use existing token
    * [HBASE-12624] - Remove rename_snapshot.rb from code as there is no equivalent renameSnapshot api in Admin class
    * [HBASE-12631] - Backport HBASE-12576 (Add metrics for rolling the HLog if there are too few DN's in the write pipeline) to 0.98

** Test
    * [HBASE-12163] - Move test annotation classes to the same package as in master
    * [HBASE-12472] - Improve debuggability of IntegrationTestBulkLoad
    * [HBASE-12549] - Fix TestAssignmentManagerOnCluster#testAssignRacingWithSSH() flaky test
    * [HBASE-12685] - TestSplitLogManager#testLogFilesAreArchived sometimes times out due to race condition 


Release 0.98.8 - 11/18/2014

** Sub-task
    * [HBASE-11997] - CopyTable with bulkload
    * [HBASE-12353] - Turn down logging on some spewing unit tests
    * [HBASE-12363] - Improve how KEEP_DELETED_CELLS works with MIN_VERSIONS
    * [HBASE-12370] - Backport IT changes from HBASE-10572 to 0.98

** Bug
    * [HBASE-9157] - ZKUtil.blockUntilAvailable loops forever with non-recoverable errors
    * [HBASE-10780] - HFilePrettyPrinter#processFile should return immediately if file does not exist
    * [HBASE-11394] - Replication can have data loss if peer id contains hyphen "-"
    * [HBASE-11698] - TestFullLogReconstruction has duplicate config setting
    * [HBASE-12109] - user_permission command for namespace does not return correct result
    * [HBASE-12126] - Region server coprocessor endpoint
    * [HBASE-12142] - Truncate command does not preserve ACLs table
    * [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-12197] - Move REST
    * [HBASE-12198] - Fix the bug of not updating location cache
    * [HBASE-12200] - When an RPC server handler thread dies, throw exception 
    * [HBASE-12218] - Make HBaseCommonTestingUtil#deleteDir try harder
    * [HBASE-12219] - Cache more efficiently getAll() and get() in FSTableDescriptors
    * [HBASE-12226] - TestAccessController#testPermissionList failing on master
    * [HBASE-12228] - Backport HBASE-11373 (hbase-protocol compile failed for name conflict of RegionTransition) to 0.98
    * [HBASE-12229] - NullPointerException in SnapshotTestingUtils
    * [HBASE-12237] - HBaseZeroCopyByteString#wrap() should not be called in hbase-client code
    * [HBASE-12240] - hbase-daemon.sh should remove pid file if process not found running
    * [HBASE-12242] - Fix new javadoc warnings in Admin, etc.
    * [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-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-12278] - Race condition in TestSecureLoadIncrementalHFilesSplitRecovery
    * [HBASE-12279] - Generated thrift files were generated with the wrong parameters
    * [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-12334] - Handling of DeserializationException causes needless retry on failure
    * [HBASE-12336] - RegionServer failed to shutdown for NodeFailoverWorker thread
    * [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-12376] - HBaseAdmin leaks ZK connections if failure starting watchers (ConnectionLossException)
    * [HBASE-12384] - TestTags can hang on fast test hosts
    * [HBASE-12386] - Replication gets stuck following a transient zookeeper error to remote peer cluster
    * [HBASE-12397] - CopyTable fails to compile with the Hadoop 1 profile
    * [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-12406] - Bulk load fails in 0.98 against hadoop-1 due to unmatched family name
    * [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-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-12450] - Unbalance chaos monkey might kill all region servers without starting them back
    * [HBASE-12460] - Moving Chore to hbase-common module.
    * [HBASE-12461] - FSVisitor logging is excessive
    * [HBASE-12478] - HBASE-10141 and MIN_VERSIONS are not compatible

** Improvement
    * [HBASE-8361] - Bulk load and other utilities should not create tables for user
    * [HBASE-10082] - Describe 'table' output is all on one line, could use better formatting
    * [HBASE-12161] - Add support for grant/revoke on namespaces in AccessControlClient
    * [HBASE-12212] - HBaseTestingUtility#waitUntilAllRegionsAssigned should wait for RegionStates
    * [HBASE-12243] - HBaseFsck should auto set ignorePreCheckPermission to true if no fix option is set.
    * [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-12389] - Reduce the number of versions configured for the ACL table
    * [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

** New Feature
    * [HBASE-12361] - Show data locality of region in table page

** Task
    * [HBASE-12205] - Backport HBASE-12016 'Reduce number of versions in Meta table. Make it configurable' to 0.98
    * [HBASE-12344] - Split up TestAdmin
    * [HBASE-12381] - Add maven enforcer rules for build assumptions

** Test
    * [HBASE-12367] - Integration tests should not restore the cluster if the CM is not destructive
    * [HBASE-12401] - Add some timestamp signposts in IntegrationTestMTTR
    * [HBASE-12403] - IntegrationTestMTTR flaky due to aggressive RS restart timeout

** Umbrella
    * [HBASE-12371] - Backport IT improvements to 0.98


Release 0.98.7 - 10/16/2014

** Sub-task
    * [HBASE-11923] - Potential race condition in RecoverableZookeeper.checkZk()
    * [HBASE-11963] - Synchronize peer cluster replication connection attempts
    * [HBASE-12023] - HRegion.applyFamilyMapToMemstore creates too many iterator objects.
    * [HBASE-12059] - Create hbase-annotations module
    * [HBASE-12062] - Fix usage of Collections.toArray
    * [HBASE-12076] - Move InterfaceAudience imports to hbase-annotations
    * [HBASE-12077] - FilterLists create many ArrayList$Itr objects per row.
    * [HBASE-12104] - Some optimization and bugfix for HTableMultiplexer
    * [HBASE-12110] - Fix .arcconfig
    * [HBASE-12115] - Fix NumberFormat Exception in TableInputFormatBase.

** Bug
    * [HBASE-8808] - Use Jacoco to generate Unit Test coverage reports
    * [HBASE-8936] - Fixing TestSplitLogWorker while running Jacoco tests.
    * [HBASE-9473] - Change UI to list 'system tables' rather than 'catalog tables'.
    * [HBASE-10748] - hbase-daemon.sh fails to execute with 'sh' command
    * [HBASE-11405] - Multiple invocations of hbck in parallel disables balancer permanently 
    * [HBASE-11445] - TestZKProcedure#testMultiCohortWithMemberTimeoutDuringPrepare is flaky
    * [HBASE-11772] - Bulk load mvcc and seqId issues with native hfiles
    * [HBASE-11815] - Flush and compaction could just close the tmp writer if there is an exception
    * [HBASE-11839] - TestRegionRebalance is flakey
    * [HBASE-11890] - HBase REST Client is hard coded to http protocol
    * [HBASE-11896] - LoadIncrementalHFiles fails in secure mode if the namespace is specified
    * [HBASE-11898] - CoprocessorHost.Environment should cache class loader instance
    * [HBASE-11936] - IsolationLevel must be attribute of a Query not a Scan
    * [HBASE-11972] - The "doAs user" used in the update to hbase:acl table RPC is incorrect
    * [HBASE-11982] - Bootstraping hbase:meta table creates a WAL file in region dir
    * [HBASE-11984] - TestClassFinder failing on occasion
    * [HBASE-11988] - AC/VC system table create on postStartMaster fails too often in test
    * [HBASE-11989] - IntegrationTestLoadAndVerify cannot be configured anymore on distributed mode
    * [HBASE-11994] - PutCombiner floods the M/R log with repeated log messages.
    * [HBASE-12019] - hbase-daemon.sh overwrite HBASE_ROOT_LOGGER and HBASE_SECURITY_LOGGER variables
    * [HBASE-12033] - SecurityUtil#doAsLoginUser is absent in hadoop-1, making AccessController#postCreateTableHandler() ineffective
    * [HBASE-12039] - Lower log level for TableNotFoundException log message when throwing
    * [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-12064] - hbase.master.balancer.stochastic.numRegionLoadsToRemember is not used
    * [HBASE-12065] -  Import tool is not restoring multiple DeleteFamily markers of a row
    * [HBASE-12078] - Missing Data when scanning using PREFIX_TREE DATA-BLOCK-ENCODING
    * [HBASE-12087] - [0.98] Changing the default setting of hbase.security.access.early_out to true
    * [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-12120] - HBase shell doesn't allow deleting of a cell by user with W-only permissions to it
    * [HBASE-12123] - Failed assertion in BucketCache after 11331
    * [HBASE-12124] - Closed region could stay closed if master stops at bad time
    * [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-12146] - RegionServerTracker should escape data in log messages
    * [HBASE-12156] - TableName cache isn't used for one of valueOf methods.
    * [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-12184] - ServerShutdownHandler throws NPE
    * [HBASE-12191] - Make TestCacheOnWrite faster.
    * [HBASE-12199] - Make TestAtomicOperation and TestEncodedSeekers faster

** Improvement
    * [HBASE-10153] - improve VerifyReplication to compute BADROWS more accurately
    * [HBASE-11136] - Add permission check to roll WAL writer 
    * [HBASE-11331] - [blockcache] lazy block decompression
    * [HBASE-11796] - Add client support for atomic checkAndMutate
    * [HBASE-11845] - HFile tool should implement Tool, disable blockcache by default
    * [HBASE-11847] - HFile tool should be able to print block headers
    * [HBASE-11877] - Make TableSplit more readable
    * [HBASE-11891] - Introduce HBaseInterfaceAudience level to denote class names that appear in configs.
    * [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-11971] - [0.98] Deprecate KeyValue based APIs in WALEdit
    * [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-12090] - Bytes: more Unsafe, more Faster 
    * [HBASE-12118] - Explain how to grant permission to a namespace in grant command usage
    * [HBASE-12144] - Backport HBASE-10141 'instead of putting expired store files thru compaction, just archive them' to 0.98

** New Feature
    * [HBASE-11885] - Provide a Dockerfile to easily build and run HBase from source

** Task
    * [HBASE-11858] - Audit regionserver classes that are missing InterfaceAudience
    * [HBASE-12150] - Backport replication changes from HBASE-12145

** Test
    * [HBASE-11798] - TestBucketWriterThread may hang due to WriterThread stopping prematurely
    * [HBASE-11838] - Enable PREFIX_TREE in integration tests
    * [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()
    * [HBASE-12008] - Remove IntegrationTestImportTsv#testRunFromOutputCommitter
    * [HBASE-12055] - TestBucketWriterThread hangs flakily based on timing


Release 0.98.6 - 9/10/2014

** Sub-task
    * [HBASE-11059] - ZK-less region assignment
    * [HBASE-11546] - Backport ZK-less region assignment to 0.98
    * [HBASE-11610] - Enhance remote meta updates
    * [HBASE-11740] - RegionStates.getRegionAssignments() gets stuck on clone

** Bug
    * [HBASE-9746] - RegionServer can't start when replication tries to replicate to an unknown host
    * [HBASE-10205] - ConcurrentModificationException in BucketAllocator
    * [HBASE-11531] - RegionStates for regions under region-in-transition znode are not updated on startup
    * [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-11550] - Custom value for BUCKET_CACHE_BUCKETS_KEY should be sorted
    * [HBASE-11589] - AccessControlException should be a not retriable exception
    * [HBASE-11617] - incorrect AgeOfLastAppliedOp and AgeOfLastShippedOp in replication Metrics when no new replication OP 
    * [HBASE-11627] - RegionSplitter's rollingSplit terminated with "/ by zero", and the _balancedSplit file was not deleted properly
    * [HBASE-11659] - Region state RPC call is not idempotent
    * [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-11705] - callQueueSize should be decremented in a fail-fast scenario
    * [HBASE-11708] - RegionSplitter incorrectly calculates splitcount
    * [HBASE-11716] - LoadTestDataGeneratorWithVisibilityLabels should handle Delete mutations
    * [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-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-11773] - Wrong field used for protobuf construction in RegionStates.
    * [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-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-11823] - Cleanup javadoc warnings.
    * [HBASE-11837] - Scanner from RegionCoprocessorEnvironment.getTable(TableName) returns no local data
    * [HBASE-11844] - region_mover.rb load enters an infinite loop if region already present on target server
    * [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-11863] - WAL files are not archived and stays in the WAL directory after splitting 
    * [HBASE-11868] - Data loss in hlog when the hdfs is unavailable
    * [HBASE-11876] - RegionScanner.nextRaw(...) should not update metrics
    * [HBASE-11878] - TestVisibilityLabelsWithDistributedLogReplay#testAddVisibilityLabelsOnRSRestart sometimes fails due to VisibilityController not yet initialized
    * [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

** Improvement
    * [HBASE-8298] - In shell, provide alias of 'desc' for 'describe'
    * [HBASE-11326] - Use an InputFormat for ExportSnapshot
    * [HBASE-11438] - [Visibility Controller] Support UTF8 character as Visibility Labels
    * [HBASE-11553] - Abstract visibility label related services into an interface
    * [HBASE-11667] - Comment ClientScanner logic for NSREs.
    * [HBASE-11674] - LoadIncrementalHFiles should be more verbose after unrecoverable error
    * [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-11742] - Backport HBASE-7987 and HBASE-11185 to 0.98
    * [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-11790] - Bulk load should use HFileOutputFormat2 in all cases
    * [HBASE-11810] - Access SSL Passwords through Credential Provider API
    * [HBASE-11821] - [ImportTSV] Abstract labels tags creation into pluggable Interface
    * [HBASE-11828] - callers of SeverName.valueOf should use equals and not ==
    * [HBASE-11841] - [0.98] Option for disabling location prefetch
    * [HBASE-11846] - HStore#assertBulkLoadHFileOk should log if a full HFile verification will be performed during a bulkload
    * [HBASE-11865] - Result implements CellScannable; rather it should BE a CellScanner

** Task
    * [HBASE-9875] - NamespaceJanitor chore is not used
    * [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

** Test
    * [HBASE-11615] - TestZKLessAMOnCluster.testForceAssignWhileClosing failed on Jenkins
    * [HBASE-11713] - Adding hbase shell unit test coverage for visibility labels.


Release 0.98.5 - 8/11/2014

** Sub-task
    * [HBASE-11318] - Classes in security subpackages missing @InterfaceAudience annotations.
    * [HBASE-11384] - [Visibility Controller]Check for users covering authorizations for every mutation
    * [HBASE-11559] - Add dumping of DATA block usage to the BlockCache JSON report.
    * [HBASE-11651] - Add conf which disables MetaMigrationConvertingToPB check (for experts only)

** Bug
    * [HBASE-11064] - Odd behaviors of TableName for empty namespace
    * [HBASE-11360] - SnapshotFileCache causes too many cache refreshes
    * [HBASE-11388] - The order parameter is wrong when invoking the constructor of the ReplicationPeer In the method "getPeer" of the class ReplicationPeersZKImpl
    * [HBASE-11518] - doc update for how to create non-shared HConnection
    * [HBASE-11534] - Remove broken JAVA_HOME autodetection in hbase-config.sh
    * [HBASE-11537] - Avoid synchronization on instances of ConcurrentMap
    * [HBASE-11541] - Wrong result when scaning meta with startRow
    * [HBASE-11545] - mapred.TableSnapshotInputFormat is missing InterfaceAudience annotation
    * [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-11565] - Stale connection could stay for a while
    * [HBASE-11579] - CopyTable should check endtime value only if != 0
    * [HBASE-11586] - HFile's HDFS op latency sampling code is not used
    * [HBASE-11588] - RegionServerMetricsWrapperRunnable misused the 'period' parameter
    * [HBASE-11594] - Unhandled NoNodeException in distributed log replay mode 
    * [HBASE-11609] - LoadIncrementalHFiles fails if the namespace is specified
    * [HBASE-11620] - Record the class name of Writer in WAL header so that only proper Reader can open the WAL file
    * [HBASE-11632] - Region split needs to clear force split flag at the end of SplitRequest run
    * [HBASE-11654] - WAL Splitting dirs are not deleted after replay.
    * [HBASE-11662] - Launching shell with long-form --debug fails
    * [HBASE-11668] - Re-add HBASE_LIBRARY_PATH to bin/hbase

** 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-7910] - Dont use reflection for security
    * [HBASE-11480] - ClientScanner might not close the HConnection created in construction
    * [HBASE-11516] - Track time spent in executing coprocessors in each region.
    * [HBASE-11557] - Counter.class should always be added as dependencyJar
    * [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-11649] - Add shortcut commands to bin/hbase for test tools
    * [HBASE-11650] - Write hbase.id to a temporary location and move into place

** Task
    * [HBASE-11621] - Make MiniDFSCluster run faster


Release 0.98.4 - 7/21/2014

** Sub-task
    * [HBASE-11088] - Support Visibility Expression Deletes in Shell
    * [HBASE-11094] - Distributed log replay is incompatible for rolling restarts
    * [HBASE-11307] - Deprecate SlabCache
    * [HBASE-11395] - Add logging for HBase table operations

** Bug
    * [HBASE-10330] - TableInputFormat/TableRecordReaderImpl leaks HTable
    * [HBASE-10922] - Log splitting status should always be closed
    * [HBASE-11052] - Sending random data crashes thrift service
    * [HBASE-11118] - non environment variable solution for "IllegalAccessError: class com.google.protobuf.ZeroCopyLiteralByteString cannot access its superclass com.google.protobuf.LiteralByteString"
    * [HBASE-11162] - RegionServer webui uses the default master info port irrespective of the user configuration.
    * [HBASE-11194] - [AccessController] issue with covering permission check in case of concurrent op on same row
    * [HBASE-11294] - IntegrationTestIngestWithACL should automatically set the superuser when running on local minicluster
    * [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-11327] - ExportSnapshot hit stackoverflow error when target snapshotDir doesn't contain uri
    * [HBASE-11335] - Fix the TABLE_DIR param in TableSnapshotInputFormat
    * [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-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-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-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-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-11465] - [VisibilityController] Reserved tags check not happening for Append/Increment
    * [HBASE-11475] - Distributed log replay should also replay compaction events
    * [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-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-11505] - 'snapshot' shell command shadows 'snapshot' shell when 'help' is invoked
    * [HBASE-11506] - IntegrationTestWithCellVisibilityLoadAndVerify allow User to be passed as arg
    * [HBASE-11510] - Visibility serialization format tag gets duplicated in Append/Increment'ed cells

** Improvement
    * [HBASE-8495] - Change ownership of the directory to bulk load
    * [HBASE-10289] - Avoid random port usage by default JMX Server. Create Custome JMX server
    * [HBASE-10641] - Configurable Bucket Sizes in bucketCache
    * [HBASE-10871] - Indefinite OPEN/CLOSE wait on busy RegionServers
    * [HBASE-10885] - Support visibility expressions on Deletes
    * [HBASE-11126] - Add RegionObserver pre hooks that operate under row lock
    * [HBASE-11349] - [Thrift] support authentication/impersonation
    * [HBASE-11355] - a couple of callQueue related improvements
    * [HBASE-11362] - Minor improvements to LoadTestTool and PerformanceEvaluation
    * [HBASE-11376] - Presplit table in IntegrationTestBigLinkedList's Generator tool
    * [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-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-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-11497] - Expose RpcScheduling implementations as LimitedPrivate interfaces
    * [HBASE-11513] - Combine SingleMultiple Queue RpcExecutor into a single class

** New Feature
    * [HBASE-10935] - support snapshot policy where flush memstore can be skipped to prevent production cluster freeze

** Task
    * [HBASE-11366] - Backport HBASE-4089 (block cache contents report UI) to 0.98

** Test
    * [HBASE-11039] - [VisibilityController] Integration test for labeled data set mixing and filtered excise
    * [HBASE-11057] - Improve TestShell coverage of grant and revoke comamnds


Release 0.98.3 - 6/1/2014

** Sub-task
    * [HBASE-10561] - Forward port: HBASE-10212 New rpc metric: number of active handler
    * [HBASE-11161] - Provide example of POJO encoding with protobuf

** Brainstorming
    * [HBASE-11209] - Increase the default value for hbase.hregion.memstore.block.multipler from 2 to 4

** Bug
    * [HBASE-9445] - Snapshots should create column family dirs for empty regions
    * [HBASE-10251] - Restore API Compat for PerformanceEvaluation.generateValue()
    * [HBASE-10417] - index is not incremented in PutSortReducer#reduce()
    * [HBASE-10831] - IntegrationTestIngestWithACL is not setting up LoadTestTool correctly
    * [HBASE-11096] - stop method of Master and RegionServer coprocessor  is not invoked
    * [HBASE-11117] - [AccessController] checkAndPut/Delete hook should check only Read permission
    * [HBASE-11133] - Add an option to skip snapshot verification after Export
    * [HBASE-11143] - Improve replication metrics
    * [HBASE-11149] - Wire encryption is broken
    * [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-11189] - Subprocedure should be marked as complete upon failure
    * [HBASE-11200] - AsyncWriter of FSHLog might throw ArrayIndexOutOfBoundsException
    * [HBASE-11212] - Fix increment index in KeyValueSortReducer
    * [HBASE-11217] - Race between SplitLogManager task creation + TimeoutMonitor
    * [HBASE-11226] - Document and increase the default value for hbase.hstore.flusher.count
    * [HBASE-11237] - Bulk load initiated by user other than hbase fails
    * [HBASE-11251] - LoadTestTool should grant READ permission for the users that are given READ access for specific cells
    * [HBASE-11253] - IntegrationTestWithCellVisibilityLoadAndVerify failing since HBASE-10326

** Improvement
    * [HBASE-6990] - Pretty print TTL
    * [HBASE-9857] - Blockcache prefetch option
    * [HBASE-11048] - Support setting custom priority per client RPC
    * [HBASE-11119] - Update ExportSnapShot to optionally not use a tmp file on external file system
    * [HBASE-11128] - Add -target option to ExportSnapshot to export with a different name
    * [HBASE-11134] - Add a -list-snapshots option to SnapshotInfo
    * [HBASE-11137] - Add mapred.TableSnapshotInputFormat
    * [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

** Task
    * [HBASE-11090] - Backport HBASE-11083 ExportSnapshot should provide capability to limit bandwidth consumption
    * [HBASE-11227] - Mention 8- and 16-bit fixed-with encodings in OrderedBytes docstring

** Test
    * [HBASE-11104] - IntegrationTestImportTsv#testRunFromOutputCommitter misses credential initialization
    * [HBASE-11166] - Categorize tests in hbase-prefix-tree module


Release 0.98.2 - 5/7/2014

** Sub-task
    * [HBASE-10918] - [VisibilityController] System table backed ScanLabelGenerator 
    * [HBASE-10963] - Refactor cell ACL tests
    * [HBASE-10972] - OOBE in prefix key encoding
    * [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-11077] - [AccessController] Restore compatible early-out access denial

** Bug
    * [HBASE-10118] - Major compact keeps deletes with future timestamps
    * [HBASE-10312] - Flooding the cluster with administrative actions leads to collapse
    * [HBASE-10533] - commands.rb is giving wrong error messages on exceptions
    * [HBASE-10611] - Description for hbase:acl table is wrong on master-status#catalogTables
    * [HBASE-10705] - CompactionRequest#toString() may throw NullPointerException
    * [HBASE-10830] - Integration test MR jobs attempt to load htrace jars from the wrong location
    * [HBASE-10845] - Memstore snapshot size isn't updated in DefaultMemStore#rollback()
    * [HBASE-10848] - Filter SingleColumnValueFilter combined with NullComparator does not work
    * [HBASE-10850] - essential column family optimization is broken
    * [HBASE-10854] - [VisibilityController] Apply MAX_VERSIONS from schema or request when scanning
    * [HBASE-10860] - Insufficient AccessController covering permission check
    * [HBASE-10879] - user_permission shell command on namespace doesn't work
    * [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-10899] - [AccessController] Apply MAX_VERSIONS from schema or request when scanning
    * [HBASE-10903] - HBASE-10740 regression; cannot pass commands for zk to run
    * [HBASE-10949] - Reversed scan could hang
    * [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-10970] - [AccessController] Issues with covering cell permission checks
    * [HBASE-10979] - Fix AnnotationReadingPriorityFunction "scan" handling
    * [HBASE-11011] - Avoid extra getFileStatus() calls on Region startup
    * [HBASE-11030] - HBaseTestingUtility.getMiniHBaseCluster should be able to return null
    * [HBASE-11038] - Filtered scans can bypass metrics collection
    * [HBASE-11049] - HBase WALPlayer needs to add credentials to job to play to table
    * [HBASE-11061] - Port HBASE-10948 Fix hbase table file 'x' mode to 0.96 / 0.98

** Improvement
    * [HBASE-10823] - Resolve LATEST_TIMESTAMP to current server time before scanning for ACLs
    * [HBASE-10883] - Restrict the universe of labels and authorizations
    * [HBASE-10884] - [REST] Do not disable block caching when scanning
    * [HBASE-10892] - [Shell] Add support for globs in user_permission
    * [HBASE-10902] - Make Secure Bulk Load work across remote secure clusters
    * [HBASE-10916] - [VisibilityController] Stackable ScanLabelGenerators
    * [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-11001] - Shell support for granting cell permissions for testing
    * [HBASE-11002] - Shell support for changing cell visibility for testing
    * [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

** Task
    * [HBASE-10906] - Change error log for NamingException in TableInputFormatBase to WARN level
    * [HBASE-10912] - setUp / tearDown in TestSCVFWithMiniCluster should be done once per run

** Test
    * [HBASE-10988] - Properly wait for server in TestThriftServerCmdLine
    * [HBASE-11010] - TestChangingEncoding is unnecessarily slow
    * [HBASE-11023] - Port HBASE-10488 "'mvn site' is broken due to org.apache.jasper.JspC not found" to 0.98
    * [HBASE-11037] - Race condition in TestZKBasedOpenCloseRegion


Release 0.98.1 - 4/6/2014

** Sub-task
    * [HBASE-5175] - Add DoubleColumnInterpreter
    * [HBASE-9966] - Create IntegrationTest for Online Bloom Filter Change
    * [HBASE-10169] - Batch coprocessor
    * [HBASE-10526] - Using Cell instead of KeyValue in HFileOutputFormat
    * [HBASE-10651] - Fix incorrect handling of IE that restores current thread's interrupt status within while/for loops in Replication
    * [HBASE-10697] - Convert TestSimpleTotalOrderPartitioner to junit4 test
    * [HBASE-10717] - TestFSHDFSUtils#testIsSameHdfs fails with IllegalArgumentException running against hadoop 2.3
    * [HBASE-10723] - Convert TestExplicitColumnTracker to junit4 test
    * [HBASE-10741] - Deprecate HTablePool and HTableFactory

** Bug
    * [HBASE-6642] - enable_all,disable_all,drop_all can call "list" command with regex directly.
    * [HBASE-8304] - Bulkload fails to remove files if fs.default.name / fs.defaultFS is configured without default port
    * [HBASE-8803] - region_mover.rb should move multiple regions at a time
    * [HBASE-9294] - NPE in /rs-status during RS shutdown
    * [HBASE-9708] - Improve Snapshot Name Error Message
    * [HBASE-9721] - RegionServer should not accept regionOpen RPC intended for another(previous) server
    * [HBASE-9778] - Add hint to ExplicitColumnTracker to avoid seeking
    * [HBASE-9990] - HTable uses the conf for each "newCaller"
    * [HBASE-10080] - Unnecessary call to locateRegion when creating an HTable instance
    * [HBASE-10097] - Remove a region name string creation in HRegion#nextInternal
    * [HBASE-10117] - Avoid synchronization in HRegionScannerImpl.isFilterDone
    * [HBASE-10313] - Duplicate servlet-api jars in hbase 0.96.0
    * [HBASE-10413] - Tablesplit.getLength returns 0
    * [HBASE-10432] - Rpc retries non-recoverable error
    * [HBASE-10436] - restore regionserver lists removed from hbase 0.96+ jmx
    * [HBASE-10451] - Enable back Tag compression on HFiles
    * [HBASE-10452] - Fix potential bugs in exception handlers
    * [HBASE-10453] - PrefixTree encoding for tags can honor HCD#shouldCompressTags()
    * [HBASE-10476] - HBase Master log grows very fast after stopped hadoop (due to connection exception)
    * [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-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-10514] - Forward port HBASE-10466, possible data loss when failed flushes
    * [HBASE-10527] - TestTokenAuthentication fails with the IBM JDK
    * [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-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-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-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-10608] - Acquire the FS Delegation Token for Secure ExportSnapshot
    * [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-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-10694] - TableSkewCostFunction#cost() casts integral division result to double
    * [HBASE-10706] - Disable writeToWal in tests where possible
    * [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-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-10760] - Wrong methods' names in ClusterLoadState class
    * [HBASE-10762] - clone_snapshot doesn't check for missing namespace
    * [HBASE-10763] - Backport HBASE-10549(When there is a hole, LoadIncrementalHFiles will hang in an infinite loop.) to 0.98
    * [HBASE-10766] - SnapshotCleaner allows to delete referenced files
    * [HBASE-10770] - Don't exit from the Canary daemon mode if no regions are present
    * [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-10825] - Add copy-from option to ExportSnapshot
    * [HBASE-10829] - Flush is skipped after log replay if the last recovered edits file is skipped
    * [HBASE-10833] - Region assignment may fail during cluster start up
    * [HBASE-10838] - Insufficient AccessController covering permission check
    * [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

** Improvement
    * [HBASE-7849] - Provide administrative limits around bulkloads of files into a single region
    * [HBASE-8076] - add better doc for HBaseAdmin#offline API.
    * [HBASE-8604] - improve reporting of incorrect peer address in replication
    * [HBASE-9501] - Provide throttling for replication
    * [HBASE-9999] - Add support for small reverse scan
    * [HBASE-10389] - Add namespace help info in table related shell commands
    * [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-10570] - Allow overrides of Surefire secondPartForkMode and testFailureIgnore
    * [HBASE-10589] - Reduce unnecessary TestRowProcessorEndpoint resource usage
    * [HBASE-10592] - Refactor PerformanceEvaluation tool
    * [HBASE-10597] - IOEngine#read() should return the number of bytes transferred
    * [HBASE-10638] - Improve error message when there is no region server available for move
    * [HBASE-10678] - Make verifyrep tool implement toolrunner
    * [HBASE-10693] - Correct declarations of Atomic* fields from 'volatile' to 'final'
    * [HBASE-10744] - AM#CloseRegion no need to retry on FailedServerException
    * [HBASE-10769] - hbase/bin/hbase-cleanup.sh has wrong usage string
    * [HBASE-10797] - Add support for -h and --help to rolling_restart.sh and fix the usage string output
    * [HBASE-10812] - Backport HBASE-9426(Make custom distributed barrier procedure pluggable)  to 0.98.x

** New Feature
    * [HBASE-8751] - Enable peer cluster to choose/change the ColumnFamilies/Tables it really want to replicate from a source cluster

** Task
    * [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

** Test
    * [HBASE-10543] - Two rare test failures with TestLogsCleaner and TestSplitLogWorker
    * [HBASE-10649] - TestMasterMetrics fails occasionally
    * [HBASE-10764] - TestLoadIncrementalHFilesSplitRecovery#testBulkLoadPhaseFailure takes too long
    * [HBASE-10767] - Load balancer may interfere with tests in TestHBaseFsck
    * [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-10868] - TestAtomicOperation should close HRegion instance after each subtest


Release 0.98.0 - 2/16/2014

** Sub-task
    * [HBASE-4285] - partitions file created in user's home directory by importtsv
    * [HBASE-5050] - [rest] SPNEGO-based authentication
    * [HBASE-5995] - Fix and reenable TestLogRolling.testLogRollOnPipelineRestart
    * [HBASE-6330] - TestImportExport has been failing against hadoop 0.23/2.0 profile
    * [HBASE-6873] - Clean up Coprocessor loading failure handling
    * [HBASE-6945] - Compilation errors when using non-Sun JDKs to build HBase-0.94
    * [HBASE-7533] - Write an RPC Specification for 0.96
    * [HBASE-7605] - TestMiniClusterLoadSequential fails in trunk build on hadoop 2
    * [HBASE-7606] - TestJoinedScanners fails in trunk build on hadoop 2.0
    * [HBASE-7615] - Add metrics for snapshots
    * [HBASE-7636] - TestDistributedLogSplitting#testThreeRSAbort fails against hadoop 2.0
    * [HBASE-7662] - [Per-KV security] Per cell ACLs stored in tags
    * [HBASE-7663] - [Per-KV security] Visibility labels
    * [HBASE-7679] - implement store file management for stripe compactions
    * [HBASE-7680] - implement compaction policy for stripe compactions
    * [HBASE-7747] - Import tools should use a combiner to merge Puts
    * [HBASE-7801] - Allow a deferred sync option per Mutation.
    * [HBASE-7807] - Introduce HRegionFileSystem and move region fs related code
    * [HBASE-7808] - Refactor Store to use HRegionFileSystem
    * [HBASE-7809] - Refactor Split/Merge to use HRegionFileSystem
    * [HBASE-7841] - Parallelize offline snapshot in DisabledTableSnapshotHandler
    * [HBASE-7905] - Add passing of optional cell blocks over rpc
    * [HBASE-7934] - TableMapReduceUtil doesn't include all dependency jars in new modular build
    * [HBASE-7938] - Add integration test for ImportTsv/LoadIncrementalHFiles workflow
    * [HBASE-7944] - Replication leaks file reader resource & not reset currentNbOperations
    * [HBASE-7967] - implement compactor for stripe compactions
    * [HBASE-7975] - ImportTsv documentation update for table creation
    * [HBASE-7995] - Export$Exporter could be replaced with IdentityTableMapper
    * [HBASE-7996] - Clean up resource leak in MultiTableInputFormat
    * [HBASE-8000] - create integration/perf tests for stripe compactions
    * [HBASE-8006] - use FSUtils to get/set hbase.rootdir
    * [HBASE-8008] - Fix DirFilter usage to be consistent
    * [HBASE-8011] - Refactor ImportTsv
    * [HBASE-8094] - TestTableInputFormatScan doesn't assert anything
    * [HBASE-8101] - Cleanup: findbugs and javadoc warning fixes as well as making it illegal passing null row to Put/Delete, etc.
    * [HBASE-8156] - Support for Namenode HA for non-idempotent operations
    * [HBASE-8189] - Shell commands of online region merge
    * [HBASE-8190] - Add documentation of region merges to the book
    * [HBASE-8201] - OrderedBytes: an ordered encoding strategy
    * [HBASE-8316] - JoinedHeap for non essential column families should reseek instead of seek
    * [HBASE-8324] - TestHFileOutputFormat.testMRIncremental* fails against hadoop2 profile
    * [HBASE-8342] - TestTableInputFormatScan#testScanFromConfiguration fails on hadoop2 profile
    * [HBASE-8349] - TestLogRolling#TestLogRollOnDatanodeDeath hangs under hadoop2 profile
    * [HBASE-8375] - Durability setting per table
    * [HBASE-8392] - TestMetricMBeanBase#testGetAttribute is flakey under hadoop2 profile
    * [HBASE-8408] - Implement namespace
    * [HBASE-8409] - Security support for namespaces
    * [HBASE-8424] - IntegrationTestImportTsv missing Apache License
    * [HBASE-8429] - TestMetricsWALSourceImpl from hbase-hadoop2-compat module missing Apache license.
    * [HBASE-8453] - TestImportExport failing again due to configuration issues
    * [HBASE-8469] - [hadoop2] Several tests break because of HDFS-4305
    * [HBASE-8477] - [hadoop2] TestTableInputFormatScan* fails intermittently with PrivilegedActionException
    * [HBASE-8478] - HBASE-2231 breaks TestHRegion#testRecoveredEditsReplayCompaction under hadoop2 profile
    * [HBASE-8497] - Protobuf WAL also needs a trailer 
    * [HBASE-8528] - [hadoop2] TestMultiTableInputFormat always fails on hadoop with YARN-129 applied
    * [HBASE-8583] - Create a new IntegrationTestBigLinkedListWithChaosMonkey
    * [HBASE-8633] - Document namespaces in HBase book
    * [HBASE-8643] - Do not log full classnames in logs, just the last two levels
    * [HBASE-8657] - Miscellaneous log fixups for hbase-it; tidier logging, fix a few NPEs
    * [HBASE-8661] - [rest] support REST over https
    * [HBASE-8662] - [rest] support impersonation
    * [HBASE-8693] - DataType: provide extensible type API
    * [HBASE-8703] - [WINDOWS] Timed-out processes exit with non-zero code causing HealthChecker to report incorrectly
    * [HBASE-8766] - [WINDOWS] bin/hbase.cmd zkcli is broken
    * [HBASE-8774] - Add BatchSize and Filter to Thrift2
    * [HBASE-8779] - Add mutateRow method support to Thrift2
    * [HBASE-8819] - Port HBASE-5428 to Thrift 2
    * [HBASE-8826] - Ensure HBASE-8695 is covered in Thrift 2
    * [HBASE-8832] - Ensure HBASE-4658  is supported by Thrift 2
    * [HBASE-8838] - [WINDOWS] FileLink assumptions are broken under NTFS
    * [HBASE-8876] - Addendum to HBASE-8774 Add BatchSize and Filter to Thrift2 - Add BatchSize Test
    * [HBASE-8890] - Fix Thrift 2 example class location
    * [HBASE-8938] - Thrift2 does not close scanner instance
    * [HBASE-8946] - Add a new function to Thrift 2 to open scanner, get results and close scanner
    * [HBASE-8947] - Thrift 2 : Replace "bool writeToWAL" with "TDurability durability" 
    * [HBASE-8948] - Bound table pool size in Thrift 2 server
    * [HBASE-9045] - Support Dictionary based Tag compression in HFiles
    * [HBASE-9073] - Up retries on TestSnapshotFromMaster; retries only once
    * [HBASE-9078] - Downstream build including hbase-client fails because can't find com.sun.jdmk:jmxtools
    * [HBASE-9091] - Update ByteRange to maintain consumer's position
    * [HBASE-9110] - Meta region edits not recovered while migrating to 0.96.0
    * [HBASE-9118] - Optimization in HFile V3 when no tags are present in a file
    * [HBASE-9128] - Drop the '.' prefix from names under hbase.rootdir after namespaces goes in
    * [HBASE-9130] - Invert the name of namespace commands to match the snapshots and replication form
    * [HBASE-9136] - RPC side changes to have a different codec for server to client communication
    * [HBASE-9137] - Add Tag dictionary in WAL compression
    * [HBASE-9165] - Improvements to addDependencyJars
    * [HBASE-9179] - TestSecureLoadIncrementalHFilesSplitRecovery hangs
    * [HBASE-9187] - HBaseAdmin#testTableExists can go zombie
    * [HBASE-9191] - Update Loadbalancer method to throw HBaseIOException
    * [HBASE-9241] - Add cp hook before initialize variable set to true in master intialization
    * [HBASE-9244] - Add CP hooks around StoreFileReader creation
    * [HBASE-9246] - Remove ROOT_TABLEDESC, ROOT_REGIONINFO, and ROOT_TABLE_NAME
    * [HBASE-9247] - Cleanup Key/KV/Meta/MetaKey Comparators
    * [HBASE-9249] - Add cp hook before setting PONR in split
    * [HBASE-9259] - Update hadoop versions grid in refguide adding hadoop-2.1.x and a note on hadoop-2.0.x versions
    * [HBASE-9261] - Add cp hooks after {start|close}RegionOperation
    * [HBASE-9262] - Make KeyValue.KEY_COMPARATOR default for HFile WriterFactory
    * [HBASE-9263] - Add initialize method to load balancer interface
    * [HBASE-9276] - List tables API should filter with isSystemTable
    * [HBASE-9277] - REST should use listTableNames to list tables
    * [HBASE-9279] - Thrift should use listTableNames to list tables
    * [HBASE-9317] - Define timeout period for TestHBaseFsck#testSplitDaughtersNotInMeta
    * [HBASE-9359] - Convert KeyValue to Cell in hbase-client module - Result/Put/Delete, ColumnInterpreter
    * [HBASE-9379] - Doc that localfs is not durable
    * [HBASE-9477] - Add deprecation compat shim for Result#raw and Result#list for 0.96
    * [HBASE-9478] - Make Cell @interfaceAudience.public and evolving.
    * [HBASE-9487] - create_namespace with property value throws error
    * [HBASE-9489] - Add cp hooks in online merge before and after setting PONR
    * [HBASE-9493] - Rename CellUtil#get*Array to CellUtil#clone*
    * [HBASE-9516] - Mark hbase-common classes missing @InterfaceAudience annotation as Private
    * [HBASE-9517] - Include only InterfaceAudiencePublic elements in generated Javadoc
    * [HBASE-9523] - Audit of hbase-common @InterfaceAudience.Public apis.
    * [HBASE-9529] - Audit of hbase-client @InterfaceAudience.Public apis
    * [HBASE-9546] - HFileContext should adopt Builder pattern
    * [HBASE-9585] - Update javadoc builder in pom to exclude empty packages in user api javadoc
    * [HBASE-9586] - Deprecate remove o.a.h.h.util.Keying class.
    * [HBASE-9652] - Remove HServerLoad092
    * [HBASE-9677] - Remove MasterAdmin and MasterMonitor protos; have MasterService provide these functions
    * [HBASE-9684] - Remove MultiRowMutationProcessorMessages.proto
    * [HBASE-9711] - Improve HBASE-9428 - avoid copying bytes for RegexFilter unless necessary
    * [HBASE-9846] - Integration test and LoadTestTool support for cell ACLs
    * [HBASE-9854] - initial documentation for stripe compactions
    * [HBASE-9858] - Integration test and LoadTestTool support for cell Visibility
    * [HBASE-9907] - Rig to fake a cluster so can profile client behaviors
    * [HBASE-9917] - Fix it so Default Connection Pool does not spin up max threads even when not needed
    * [HBASE-9941] - The context ClassLoader isn't set while calling into a coprocessor
    * [HBASE-9997] - Add per KV security details to HBase book
    * [HBASE-10035] - Fix Potential Resource Leak in IPCUtils
    * [HBASE-10036] - Fix Potential Resource Leak in MetaReader
    * [HBASE-10037] - Fix potential Resource Leak in EncodedDataBlock
    * [HBASE-10038] - Fix potential Resource Leak in ZNodeCleaner
    * [HBASE-10039] - Fix potential Resource Leak in RpcServer
    * [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-10297] - LoadAndVerify Integration Test for cell visibility
    * [HBASE-10391] - Deprecate KeyValue#getBuffer
    * [HBASE-10550] - Register HBase tokens with ServiceLoader

** Bug
    * [HBASE-3787] - Increment is non-idempotent but client retries RPC
    * [HBASE-5356] - region_mover.rb can hang if table region it belongs to is deleted.
    * [HBASE-5472] - LoadIncrementalHFiles loops forever if the target table misses a CF
    * [HBASE-5946] - Thrift Filter Language documentation is inconsistent
    * [HBASE-6031] - RegionServer does not go down while aborting
    * [HBASE-6347] - -ROOT- and .META. are stale in table.jsp if they moved
    * [HBASE-6915] - String and ConcurrentHashMap sizes change on jdk7; makes TestHeapSize fail
    * [HBASE-7111] - hbase zkcli will not start if the zookeeper server chosen to connect to is unavailable
    * [HBASE-7114] - Increment does not extend Mutation but probably should
    * [HBASE-7122] - Proper warning message when opening a log file with no entries (idle cluster)
    * [HBASE-7153] - print gc option in hbase-env.sh affects hbase zkcli
    * [HBASE-7192] - Move TestHBase7051.java into TestAtomicOperation.java
    * [HBASE-7226] - HRegion.checkAndMutate uses incorrect comparison result for <, <=, > and >=
    * [HBASE-7255] - KV size metric went missing from StoreScanner.
    * [HBASE-7296] - Add hbase.master.loadbalancer.class in the documentation
    * [HBASE-7325] - Replication reacts slowly on a lightly-loaded cluster
    * [HBASE-7380] - [replication] When transferring queues, check if the peer still exists before copying the znodes
    * [HBASE-7391] - Review/improve HLog compression's memory consumption
    * [HBASE-7401] - Remove warning message about running 'hbase migrate'
    * [HBASE-7458] - TestReplicationWithCompression fails intermittently in both PreCommit and trunk builds
    * [HBASE-7481] - Allow IOExceptions to be thrown from Filter methods
    * [HBASE-7482] - Port HBASE-7442 HBase remote CopyTable not working when security enabled to trunk
    * [HBASE-7488] - Implement HConnectionManager.locateRegions which is currently returning null
    * [HBASE-7501] - Introduce MetaEditor method that both adds and deletes rows in .META. table
    * [HBASE-7546] - Obtain a table read lock on region split operations
    * [HBASE-7590] - Add a costless notifications mechanism from master to regionservers & clients
    * [HBASE-7597] - TestHBaseFsck#testRegionShouldNotBeDeployed seems to be flaky
    * [HBASE-7600] - TestAdmin.testCreateBadTables is failing occasionally
    * [HBASE-7634] - Replication handling of changes to peer clusters is inefficient
    * [HBASE-7639] - Enable online schema update by default 
    * [HBASE-7700] - TestColumnSeeking is mathematically bound to fail
    * [HBASE-7709] - Infinite loop possible in Master/Master replication
    * [HBASE-7723] - Remove NameNode URI from ZK splitlogs
    * [HBASE-7726] - Family Dir is not removed using modifyTable()
    * [HBASE-7817] - Suggested JDWP debug options in hbase-env.sh are wrong
    * [HBASE-7869] - Provide way to not start LogSyncer thread
    * [HBASE-7871] - HBase can be stuck when closing regions concurrently 
    * [HBASE-7876] - Got exception when manually triggers a split on an empty region
    * [HBASE-7878] - recoverFileLease does not check return value of recoverLease
    * [HBASE-7921] - TestHFileBlock.testGzipCompression should ignore the block checksum
    * [HBASE-7933] - NPE in TableLockManager
    * [HBASE-7940] - Upgrade version to 0.97-SNAPSHOT in pom.xml files
    * [HBASE-7945] - Remove flaky TestCatalogTrackerOnCluster
    * [HBASE-7947] - Custom compaction requests should have test for adding to wrong list
    * [HBASE-7951] - TestNodeHealthCheckChore.testHealthChecker failed 0.95 build #3
    * [HBASE-7953] - Some HFilePerformanceEvaluation tests might fail because of scanner.getValue when there is no more row
    * [HBASE-7954] - Fix the retrying logic of memstore flushes to avoid extra sleep
    * [HBASE-7955] - Remove log "ERROR snapshot.SnapshotFileCache: Snapshot directory doesn't exist"
    * [HBASE-7956] - RegionCoprocessorRpcChannel should log rpc requests at TRACE level rather than DEBUG
    * [HBASE-7957] - CloneSnapshotHandler.prepare() is not called by SnapshotManager
    * [HBASE-7961] - truncate on disabled table should throw TableNotEnabledException.
    * [HBASE-7963] - HBase VerifyReplication not working when security enabled
    * [HBASE-7966] - ACL tests fail on trunk (flaky)
    * [HBASE-7968] - Packaging of Trunk and 0.95 does not create the dependent jars in the lib folder
    * [HBASE-7969] - Rename HBaseAdmin#getCompletedSnapshots as HBaseAdmin#listSnapshots
    * [HBASE-7980] - TestZKInterProcessReadWriteLock fails occasionally in QA test run
    * [HBASE-7982] - TestReplicationQueueFailover* runs for a minute, spews 3/4million lines complaining 'Filesystem closed', has an NPE, and still passes?
    * [HBASE-7986] - [REST] Make HTablePool size configurable
    * [HBASE-7992] - provide pre/post region offline hooks for HMaster.offlineRegion()
    * [HBASE-8002] - Make TimeOut Management for Assignment optional in master and regionservers
    * [HBASE-8003] - Threads#getBoundedCachedThreadPool harcodes the time unit to seconds
    * [HBASE-8004] - Creating an existing table from Shell does not throw TableExistsException
    * [HBASE-8005] - DemoClient.cpp   can not be built correctly
    * [HBASE-8007] - Adopt TestLoadAndVerify from BigTop
    * [HBASE-8012] - Reseek should position to the beginning of file for the first time it is invoked with a KV smaller than the first KV in file
    * [HBASE-8017] - Upgrade hadoop 1 dependency to 1.1.2
    * [HBASE-8018] - Add "Flaky Testcase Detector" tool into dev-tools
    * [HBASE-8021] - TestSplitTransactionOnCluster.testShouldThrowIOExceptionIfStoreFileSizeIsEmptyAndShouldSuccessfullyExecuteRollback() fails consistently
    * [HBASE-8022] - Site target fails
    * [HBASE-8025] - zkcli fails when SERVER_GC_OPTS is enabled
    * [HBASE-8027] - hbase-7994 redux; shutdown hbase-example unit tests
    * [HBASE-8030] - znode  path of online region servers is hard coded in rolling_restart.sh
    * [HBASE-8032] - TestNodeHealthCheckChore.testHealthChecker failed 0.95 build #36
    * [HBASE-8033] - Break TestRestoreSnapshotFromClient into TestRestoreSnapshotFromClient and TestCloneSnapshotFromClient
    * [HBASE-8036] - ProtobufUtil.multi behavior is inconsistent in case of errors
    * [HBASE-8041] - WebUI doesn't display snapshots correctly
    * [HBASE-8042] - Offline Meta Repair no longer points to the correct location
    * [HBASE-8043] - Fix a few javadoc warnings...
    * [HBASE-8044] - split/flush/compact/major_compact from hbase shell does not work for region key with \x format
    * [HBASE-8050] - Small fix to book/hbase.tests.html
    * [HBASE-8051] - 0.95 build failing on site goal: 'failed to get report for org.apache.maven.plugins:maven-project-info-reports-plugin: Could not find goal 'dependency-info''
    * [HBASE-8052] - TestHBaseFsck#testQuarantineMissingFamdir fails sporadically
    * [HBASE-8055] - Null check missing in StoreFile.Reader.getMaxTimestamp()
    * [HBASE-8057] - RegionLoad needs a toString implementation
    * [HBASE-8058] - Upgrade site plugin; fix assembly doc up on jenkins builds
    * [HBASE-8060] - "Num compacting KVs" diverges from "num compacted KVs" over time
    * [HBASE-8062] - Replace HBaseFsck.debugLsr() in TestFlushSnapshotFromClient with FSUtils.logFileSystemState()
    * [HBASE-8067] - TestHFileArchiving.testArchiveOnTableDelete sometimes fails
    * [HBASE-8068] - TestMasterMetricsWrapper failed in 0.95 #60 jenkins
    * [HBASE-8069] - TestHLog is dependent on the execution order
    * [HBASE-8096] - [replication] NPE while replicating a log that is acquiring a new block from HDFS 
    * [HBASE-8097] - MetaServerShutdownHandler may potentially keep bumping up DeadServer.numProcessing
    * [HBASE-8099] - ReplicationZookeeper.copyQueuesFromRSUsingMulti should not return any queues if it failed to execute.
    * [HBASE-8108] - Add m2eclispe lifecycle mapping to hbase-common
    * [HBASE-8112] - Deprecate HTable#batch(final List<? extends Row>)
    * [HBASE-8116] - TestSnapshotCloneIndependence fails in trunk builds intermittently
    * [HBASE-8118] - TestTablePermission depends on the execution order
    * [HBASE-8119] - Optimize StochasticLoadBalancer
    * [HBASE-8122] - TestAccessController depends on the execution order
    * [HBASE-8123] - Replace HashMap/HashSet with TreeMap/TreeSet where byte[] is used as key
    * [HBASE-8130] - initialize TableLockManager before initializing AssignmentManager
    * [HBASE-8131] - Create table handler needs to handle failure cases.
    * [HBASE-8133] - avoid assign for disabling table regions(OPENING/PENDING_OPEN) in SSH
    * [HBASE-8135] - Mutation should implement HeapSize
    * [HBASE-8138] - Using [packed=true] for repeated field of primitive numeric types (types which use the varint, 32-bit, or 64-bit wire types)
    * [HBASE-8140] - TableMapReduceUtils#addDependencyJar fails when nested inside another MR job
    * [HBASE-8142] - Sporadic TestZKProcedureControllers failures on trunk
    * [HBASE-8143] - HBase on Hadoop 2 with local short circuit reads (ssr) causes OOM 
    * [HBASE-8144] - Limit number of attempts to assign a region
    * [HBASE-8146] - IntegrationTestBigLinkedList does not work on distributed setup
    * [HBASE-8151] - Decode memstoreTS in HFileReaderV2 only when necessary
    * [HBASE-8158] - Backport HBASE-8140 "TableMapReduceUtils#addDependencyJar fails when nested inside another MR job"
    * [HBASE-8160] - HMaster#move doesn't check if master initialized
    * [HBASE-8161] - setting blocking file count on table level doesn't work
    * [HBASE-8162] - Fix import of hbase-default.xml into refguide; broke
    * [HBASE-8164] - TestTableLockManager fails intermittently in trunk builds
    * [HBASE-8165] - Move to Hadoop 2.1.0-beta from 2.0.x-alpha (WAS: Update our protobuf to 2.5 from 2.4.1)
    * [HBASE-8166] - Avoid writing the memstoreTS into HFiles when possible
    * [HBASE-8169] - TestMasterFailover#testMasterFailoverWithMockedRITOnDeadRS may fail due to regions randomly assigned to a RS
    * [HBASE-8170] - HbaseAdmin.createTable cannot handle creating three regions
    * [HBASE-8173] - HMaster#move wraps IOException in UnknownRegionException
    * [HBASE-8175] - Include javadoc and book when site goal invoked
    * [HBASE-8178] - IPCUtil produces a LOT of WARN log spew
    * [HBASE-8179] - JSON formatting for cluster status is sort of broken
    * [HBASE-8187] - trunk/0.95 tarball packaging
    * [HBASE-8188] - Avoid unnecessary row compare in StoreScanner
    * [HBASE-8191] - Documentation is not giving the right class name for offline merges.
    * [HBASE-8192] - Logic errror causes infinite loop in HRegion.bulkLoadHFiles(List)
    * [HBASE-8195] - hbase.table.archive.directory reference should be removed from hbase-default.xml
    * [HBASE-8200] - Integration Test classes are not part of the default HBase classpath
    * [HBASE-8203] - master ui should display region servers with host, port plus startcode
    * [HBASE-8207] - Replication could have data loss when machine name contains hyphen "-"
    * [HBASE-8208] - In some situations data is not replicated to slaves when deferredLogSync is enabled
    * [HBASE-8213] - global authorization may lose efficacy 
    * [HBASE-8222] - User class should implement equals() and hashCode()
    * [HBASE-8229] - Replication code logs like crazy if a target table cannot be found.
    * [HBASE-8231] - delete tests in table_tests.rb(TestShell) always running on empty table.
    * [HBASE-8236] - Set finalName property in hbase-assembly else basename is hbase-assembly rather than hbase.
    * [HBASE-8238] - xref docs missing from site gen
    * [HBASE-8242] - Unable to start HBase 0.95.0RC0 out of the box because of ZK trying to access /var/folders/
    * [HBASE-8252] - Regions by Region Server table in Master's table view needs styling
    * [HBASE-8254] - Add lz4 to test compression util usage string
    * [HBASE-8262] - Add testcase to verify HBASE-7876's empty region split semantics change
    * [HBASE-8266] - Master cannot start if TableNotFoundException is thrown while partial table recovery
    * [HBASE-8278] - Log message after Memstore flush is always with sequence id -1
    * [HBASE-8279] - Performance Evaluation does not consider the args passed in case of more than one client
    * [HBASE-8282] - User triggered flushes does not allow compaction to get triggered even if compaction criteria is met
    * [HBASE-8285] - HBaseClient never recovers for single HTable.get() calls with no retries when regions move
    * [HBASE-8287] - TestRegionMergeTransactionOnCluster failed in trunk build #4010
    * [HBASE-8289] - TestThreads#testSleepWithoutInterrupt should not expect a bounded wait time
    * [HBASE-8290] - TestHTableMultiplexer is flaky
    * [HBASE-8293] - Move BigDecimalColumnInterpreter into hbase-client
    * [HBASE-8295] - TestMasterFailover.testMasterFailoverWithMockedRITOnDeadRS is flaky.
    * [HBASE-8299] - ExploringCompactionPolicy can get stuck in rare cases.
    * [HBASE-8300] - TestSplitTransaction fails to delete files due to open handles left when region is split
    * [HBASE-8303] - Increse the test timeout to 60s when they are less than 20s
    * [HBASE-8305] - Too much logs in the some tests
    * [HBASE-8312] - TestCompactionState - still timeouting
    * [HBASE-8314] - HLogSplitter can retry to open a 0-length hlog file
    * [HBASE-8317] - Seek returns wrong result with PREFIX_TREE Encoding
    * [HBASE-8321] - Log split worker should heartbeat to avoid timeout when the hlog is under recovery
    * [HBASE-8325] - ReplicationSource read a empty HLog throws EOFException
    * [HBASE-8326] - mapreduce.TestTableInputFormatScan times out frequently
    * [HBASE-8327] - Consolidate class loaders
    * [HBASE-8334] - Enable essential column family support by default
    * [HBASE-8336] - PooledHTable may be returned multiple times to the same pool
    * [HBASE-8341] - RestoreSnapshotHandler.prepare() is not called by SnapshotManager  and TakeSnapshotHandler should first acquire the table lock
    * [HBASE-8346] - Prefetching .META. rows in case only when useCache is set to true
    * [HBASE-8351] - Minor typo in Bytes IllegalArgumentException throw
    * [HBASE-8352] - Rename '.snapshot' directory
    * [HBASE-8355] - BaseRegionObserver#pre(Compact|Flush|Store)ScannerOpen returns null
    * [HBASE-8359] - Too much logs on HConnectionManager
    * [HBASE-8360] - In HBaseClient#cancelConnections we should close fully the connection
    * [HBASE-8366] - HBaseServer logs the full query.
    * [HBASE-8373] - Update Rolling Restart documentation
    * [HBASE-8374] - NullPointerException when launching the balancer due to unknown region location
    * [HBASE-8377] - IntegrationTestBigLinkedList calculates wrap for linked list size incorrectly
    * [HBASE-8379] - bin/graceful_stop.sh does not return the balancer to original state
    * [HBASE-8380] - NPE in HBaseClient$Connection.readResponse
    * [HBASE-8385] - [SNAPSHOTS]: Restore fails to restore snapshot of a deleted table
    * [HBASE-8390] - Trunk/0.95 cannot simply compile against Hadoop 1.0
    * [HBASE-8391] - StochasticLoadBalancer doesn't call needsBalance
    * [HBASE-8393] - Testcase TestHeapSize#testMutations is wrong
    * [HBASE-8396] - balancerSwitch making two zookeeper calls everytime.
    * [HBASE-8402] - ScanMetrics depends on number of rpc calls to the server.
    * [HBASE-8404] - Extra commas in LruBlockCache.logStats
    * [HBASE-8406] - Fix rat check and rat warning in trunk
    * [HBASE-8407] - Remove Async HBase from 0.95 and trunk.
    * [HBASE-8413] - Snapshot verify region will always fail if the HFile has been archived
    * [HBASE-8421] - hbase-0.95.0 tgz does not include lib/junit*.jar
    * [HBASE-8422] - Master won't go down.  Stuck waiting on .META. to come on line.
    * [HBASE-8425] - Per-region memstore size is missing in the new RS web UI
    * [HBASE-8426] - Opening a region failed on "Metrics source RegionServer,sub=Regions already exists!"
    * [HBASE-8427] - Apache Rat is incorrectly excluding test source files
    * [HBASE-8431] - Fix missing headers
    * [HBASE-8432] - a table with unbalanced regions will balance indefinitely with the 'org.apache.hadoop.hbase.master.DefaultLoadBalancer'
    * [HBASE-8433] - CellComparator#compare returns incorrect result for faked KeyValue
    * [HBASE-8436] - SeekBefore returns wrong result with PREFIX_TREE Encoding
    * [HBASE-8437] - Clean up tmp coprocessor jars
    * [HBASE-8449] - Refactor recoverLease retries and pauses informed by findings over in hbase-8389
    * [HBASE-8451] - MetricsMBeanBase has concurrency issues in init 
    * [HBASE-8456] - HBase Windows scripts fail when there's a blank space in JAVA_HOME
    * [HBASE-8462] - Custom timestamps should not be allowed to be negative
    * [HBASE-8464] - FastDiffEncoder - valueOffset calculation is incorrect
    * [HBASE-8466] - Netty messages in the logs
    * [HBASE-8468] - IntegrationTestImportTsv fails on a cluster
    * [HBASE-8472] - mvn -Dhadoop.profile=2.0 -Dhadoop-two.version=2.0.5-SNAPSHOT fails because of Undef Class error wrt o.a.h.IdGenerator
    * [HBASE-8483] - HConnectionManager can leak ZooKeeper connections when using deleteStaleConnection
    * [HBASE-8488] - HBase transitive dependencies not being pulled in when building apps like Flume which depend on HBase
    * [HBASE-8494] - TestRemoteAdmin#testClusterStatus should not assume 'requests' does not change
    * [HBASE-8505] - References to split daughters should not be deleted separately from parent META entry
    * [HBASE-8507] - HLog tool documentation should be updated to use FSHLog for trunk and 0.95.
    * [HBASE-8509] - ZKUtil#createWithParents won't set data during znode creation when parent folder doesn't exit
    * [HBASE-8510] - HBASE-8469 added a hdfs-site.xml file for tests but it gets included in the test jar
    * [HBASE-8516] - FSUtils.create() fail with ViewFS
    * [HBASE-8519] - Backup master will never come up if primary master dies during initialization
    * [HBASE-8522] - Archived hfiles and old hlogs may be deleted immediately by HFileCleaner, LogCleaner in HMaster
    * [HBASE-8525] - Use sleep multilier when choosing sinks in ReplicationSource
    * [HBASE-8529] - checkOpen is missing from multi, mutate, get and multiGet etc.
    * [HBASE-8530] - Refine error message from ExportSnapshot when there is leftover snapshot in target cluster
    * [HBASE-8531] - TestZooKeeper fails in trunk/0.95 builds
    * [HBASE-8532] - [Webui] Bootstrap based webui compatibility for IE and also fix some page format issues.
    * [HBASE-8536] - Possible NullPointerException in ZKInterProcessLockBase#reapExpiredLocks
    * [HBASE-8537] - Dead region server pulled in from ZK
    * [HBASE-8539] - Double(or tripple ...) ZooKeeper listeners of the same type when Master recovers from ZK SessionExpiredException
    * [HBASE-8540] - SnapshotFileCache logs too many times if snapshot dir doesn't exists
    * [HBASE-8545] - Meta stuck in transition when it is assigned to a just restarted dead region sever 
    * [HBASE-8547] - Fix java.lang.RuntimeException: Cached an already cached block
    * [HBASE-8548] - postOpen hook called twice
    * [HBASE-8555] - FilterList correctness may be affected by random ordering of sub-filter(list)
    * [HBASE-8560] - TestMasterShutdown failing in trunk 0.95/trunk -- "Unable to get data of znode /hbase/meta-region-server because node does not exist (not an error)"
    * [HBASE-8564] - TestMetricsRegionServer depends on test order
    * [HBASE-8565] - stop-hbase.sh clean up: backup master
    * [HBASE-8567] - TestDistributedLogSplitting#testLogReplayForDisablingTable fails on hadoop 2.0
    * [HBASE-8568] - Test case TestDistributedLogSplitting#testWorkerAbort failed intermittently 
    * [HBASE-8570] - CompactSplitThread logs a CompactSplitThread$CompactionRunner but it does not have a toString
    * [HBASE-8577] - TestZooKeeper#testLogSplittingAfterMasterRecoveryDueToZKExpiry failed intermittently
    * [HBASE-8579] - TestDelayedRpc falis from time to time
    * [HBASE-8581] - rpc refactor dropped passing the operation timeout through to the rpcclient
    * [HBASE-8582] - Possible NullPointerException in ZKInterProcessLockBase#visitLocks
    * [HBASE-8586] - Revisit of hbase-8483, "HConnectionManager can leak ZooKeeper connections when using deleteStaleConnection"
    * [HBASE-8592] - [documentation] some updates for the reference guide regarding recent questions on the ML
    * [HBASE-8596] - [docs] Add docs about Region server "draining" mode
    * [HBASE-8597] - compaction record (probably) can block WAL cleanup forever if region is closed without edits
    * [HBASE-8600] - Bunch of log lines from QosFunction: Marking normal priority after
    * [HBASE-8602] - Ugly stack trace just because regionserver comes up before master....
    * [HBASE-8606] - Meta scanner is not closed
    * [HBASE-8615] - HLog Compression may fail due to Hadoop fs input stream returning partial bytes
    * [HBASE-8621] - More log edits; we log too much
    * [HBASE-8622] - Remove ' You are currently running the HMaster without HDFS append support enabled. This may result in data loss. Please see the HBase wiki for details. ' from UI
    * [HBASE-8624] - bin/local-{master-backup|regionservers}.sh doesn't take --config arg
    * [HBASE-8627] - HBCK can not fix meta not assigned issue
    * [HBASE-8631] - Meta Region First Recovery
    * [HBASE-8634] - Fix potential null pointer dereference in HRegionServer and TableLockChecker
    * [HBASE-8637] - IntegrationTestBigLinkedListWithChaosMonkey uses the wrong table name
    * [HBASE-8639] - Poor performance of htable#getscanner in multithreaded environment due to DNS.getDefaultHost() being called in ScannerCallable#prepare()
    * [HBASE-8640] - ServerName in master may not initialize with the configured ipc address of hbase.master.ipc.address
    * [HBASE-8641] - IndexBuilder example : CF name of the src table is hard coded
    * [HBASE-8649] - Private method HStore#createWriterInTmp(long) is never called
    * [HBASE-8650] - HRegionServer#updateRecoveringRegionLastFlushedSequenceId(HRegion) makes inefficient use of keySet iterator instead of entrySet iterator
    * [HBASE-8651] - Result of integer multiplication cast to long in HRegionFileSystem#sleepBeforeRetry()
    * [HBASE-8652] - Number of compacting KVs is not reset at the end of compaction
    * [HBASE-8654] - src assembly does not include hbase-hadoop2-compat module
    * [HBASE-8658] - hbase clean is deaf to the --config DIR option
    * [HBASE-8664] - Small fix ups for memory size outputs in UI
    * [HBASE-8666] - META region isn't fully recovered during master initialization when META region recovery had chained failures
    * [HBASE-8667] - Master and Regionserver not able to communicate if both bound to different network interfaces on the same machine.
    * [HBASE-8672] - Create an Integration test for Bulk Loads
    * [HBASE-8678] - Wrongly delete cells in some case which can not be deleted
    * [HBASE-8680] - distributedLogReplay performance regression
    * [HBASE-8684] - Table Coprocessor can't access external HTable by default
    * [HBASE-8686] - Extra left brace in bin/hbase
    * [HBASE-8689] - Cover all mutations rather than only Put while reporting for mutations not writing to WAL
    * [HBASE-8695] - The HBase thrift service ignores XML configuration
    * [HBASE-8698] - potential thread creation in MetaScanner.metaScan
    * [HBASE-8699] - Parameter to DistributedFileSystem#isFileClosed should be of type Path
    * [HBASE-8701] - distributedLogReplay need to apply wal edits in the receiving order of those edits
    * [HBASE-8705] - RS holding META when restarted in a single node setup may hang infinitely without META assignment
    * [HBASE-8706] - Some improvement in snapshot
    * [HBASE-8710] - The balancer shouldn't try balancing one node
    * [HBASE-8711] - Requests count is completely off
    * [HBASE-8712] - HFileLinkCleaner (FSUtils.listStatus) logs too much if links do not exists
    * [HBASE-8719] - Fix responseTooSlow formatting
    * [HBASE-8723] - HBase Intgration tests are failing because of new defaults.
    * [HBASE-8729] - distributedLogReplay may hang during chained region server failure
    * [HBASE-8732] - HFileBlockDefaultEncodingContext isn't thread-safe but is used by all readers, breaks column encoding
    * [HBASE-8733] - Update our hadoop2 in trunk and 0.95 to 2.0.5-alpha (We are currently 2.0.2)
    * [HBASE-8741] - Scope sequenceid to the region rather than regionserver (WAS: Mutations on Regions in recovery mode might have same sequenceIDs)
    * [HBASE-8742] - HTableDescriptor Properties not preserved when cloning
    * [HBASE-8745] - Fix src assembly so includes top-level src dir
    * [HBASE-8749] - Potential race condition between FSUtils.renameAndSetModifyTime() and HFile/LogCleaner
    * [HBASE-8750] - MetaServerShutdownHandler stucks if .META. assignment fails in previous attempt
    * [HBASE-8757] - ZK throws IllegalStateException
    * [HBASE-8760] - possible loss of data in snapshot taken after region split
    * [HBASE-8762] - Performance/operational penalty when calling HTable.get with a list of one Get
    * [HBASE-8780] - A column Family can have VERSIONS less than zero 
    * [HBASE-8781] - ImmutableBytesWritable constructor with another IBW as param need to consider the offset of the passed IBW
    * [HBASE-8782] - Thrift2 can not parse values when using framed transport
    * [HBASE-8783] - RSSnapshotManager.ZKProcedureMemberRpcs may be initialized with the wrong server name
    * [HBASE-8786] - Creating a table with a Bloom filter on the shell is broken.
    * [HBASE-8787] - Merged region endkey is incorrect if one region has null endkey
    * [HBASE-8789] - Add max RPC version to meta-region-server zk node.
    * [HBASE-8790] - NullPointerException thrown when stopping regionserver
    * [HBASE-8791] - Precommit hadoopqa is broke since -r1491656
    * [HBASE-8794] - DependentColumnFilter.toString() throws NullPointerException
    * [HBASE-8795] - bin/hbase zkcli cannot take arguments anymore
    * [HBASE-8797] - Prevent merging regions from moving during online merge
    * [HBASE-8798] - Fix a minor bug in shell command with clone_snapshot table error
    * [HBASE-8799] - TestAccessController#testBulkLoad failing on trunk/0.95
    * [HBASE-8802] - totalCompactingKVs may overflow
    * [HBASE-8811] - REST service ignores misspelled "check=" parameter, causing unexpected mutations
    * [HBASE-8813] - Fix time b/w recoverLease invocations from HBASE 8449
    * [HBASE-8814] - Possible NPE in split if a region has empty store files.
    * [HBASE-8849] - CellCodec should write and read the memstoreTS/mvccVersion
    * [HBASE-8853] - The client connection is not cut when receiving the failure notification
    * [HBASE-8854] - TestScannersFromClientSide.testScanBatch failed with 'There should have room before prefetching is submitted'
    * [HBASE-8856] - Crash when attempting split with DelimitedKeyPrefixRegionSplitPolicy
    * [HBASE-8864] - Fix 2 javadoc warnings
    * [HBASE-8867] - HLogUtils#getServerNameFromHLogDirectoryName does not take into account the -splitting extension
    * [HBASE-8869] - incorrect javadoc for CompactionRequest.compareTo()
    * [HBASE-8870] - Store.needsCompaction() should include minFilesToCompact
    * [HBASE-8871] - The region server can crash at startup
    * [HBASE-8874] - PutCombiner is skipping KeyValues while combining puts of same row during bulkload
    * [HBASE-8875] - incorrect javadoc for EXCLUDE_FROM_MINOR_COMPACTION
    * [HBASE-8877] - Reentrant row locks
    * [HBASE-8879] - Client Scanner spams the logs if there are lots of scanners.
    * [HBASE-8880] - Integration Tests shouldn't set the number or reties.
    * [HBASE-8882] - Create an Integration Test to Test MTTR
    * [HBASE-8899] - Could not open a region on a server where it is being closed
    * [HBASE-8902] - IntegrationTestBulkLoad takes way too long
    * [HBASE-8904] - Clean up IntegrationTestMTTR and add small features.
    * [HBASE-8909] - HBASE-6170 broke "hbase.regionserver.lease.period" config, we should support it for BC
    * [HBASE-8910] - HMaster.abortNow shouldn't try to become a master again if it was stopped
    * [HBASE-8913] - Remove ".replogs" reference as we no longer use it
    * [HBASE-8917] - Minor cleanup and fixes for POM
    * [HBASE-8920] - TestZKBasedOpenCloseRegion.testReOpenRegion fails occasionally
    * [HBASE-8924] - Master Can fail to come up after chaos monkey if the sleep time is too short.
    * [HBASE-8930] - Filter evaluates KVs outside requested columns
    * [HBASE-8933] - TestSplitTransactionOnCluster fails because "Region not moved off .META. server"
    * [HBASE-8944] - Document workaround for MiniDFSCluster exceptions when running tests
    * [HBASE-8952] - Missing error handling can cause RegionServer RPC thread to busy loop forever
    * [HBASE-8955] - TestStochasticLoadBalancer timedout
    * [HBASE-8956] - A couple of small misspellings thoughout the codebase.
    * [HBASE-8957] - TestDrainingServer. testDrainingServerWithAbort fails
    * [HBASE-8967] - Duplicate call to snapshotManager.stop() in HRegionServer
    * [HBASE-8972] - TestCreateTableHandler.testMasterRestartAfterEnablingNodeIsCreated failed
    * [HBASE-8975] - NPE/HTTP 500 when opening the master's web UI too early
    * [HBASE-8981] - add a check on the ServerName parse
    * [HBASE-8982] - Useless logs in  ipc.RpcClient$Connection(584): Not able to close an output stream
    * [HBASE-8983] - HBaseConnection#deleteAllConnections does not always delete
    * [HBASE-8985] - Not enough logging in SplitLogManager
    * [HBASE-8987] - ProtobufUtil.toException doesn't handle plain RemoteException, gets a NoSuchMethodException
    * [HBASE-8988] - Reuse the thread pool in the shell to not run out of threads
    * [HBASE-8998] - TestSnapshotCloneIndependence.testOnlineSnapshotMetadataChangesIndependent fails
    * [HBASE-9006] - RPC code requires cellBlockCodecClass even though one is defined by default
    * [HBASE-9008] - Reenable TestReplicationKillSlaveRS.killOneSlaveRS
    * [HBASE-9016] - Cleanup of HRegion (javadoc, unnecessary inits, unnecessary unboxing)
    * [HBASE-9021] - Create a unit test for ReplicationHLogReaderManager
    * [HBASE-9023] - TestIOFencing.testFencingAroundCompactionAfterWALSync occasionally fails
    * [HBASE-9031] - ImmutableBytesWritable.toString() should downcast the bytes before converting to hex string
    * [HBASE-9034] - hbase-daemon.sh swallows start up errors
    * [HBASE-9035] - Incorrect example for using a scan stopRow in HBase book
    * [HBASE-9036] - Few small code cleanup
    * [HBASE-9038] - Compaction WALEdit gives NPEs with Replication enabled
    * [HBASE-9044] - Merging regions throws NPE
    * [HBASE-9048] - HCM throws NullPointerException under load
    * [HBASE-9052] - Prevent split/merged region from assigning again
    * [HBASE-9055] - HBaseAdmin#isTableEnabled() should return false for non-existent table 
    * [HBASE-9060] - ExportSnapshot job fails if target path contains percentage character
    * [HBASE-9079] - FilterList getNextKeyHint skips rows that should be included in the results
    * [HBASE-9085] - Integration Tests fails because of bug in teardown phase where the cluster state is not being restored properly.
    * [HBASE-9087] - Handlers being blocked during reads
    * [HBASE-9088] - TestSplitLogManager.testMultipleResubmits fails
    * [HBASE-9092] - OpenRegion could be ignored by mistake
    * [HBASE-9096] - Disable split during log replay
    * [HBASE-9097] - Set HBASE_CLASSPATH before rest of the classpath
    * [HBASE-9099] - logReplay could trigger double region assignment
    * [HBASE-9115] - HTableInterface.append operation may overwrites values
    * [HBASE-9119] - hbase.mapreduce.hfileoutputformat.blocksize should configure with blocksize of a table
    * [HBASE-9120] - ClassFinder logs errors that are not
    * [HBASE-9138] - getHaseIntegrationTestingUtility() is misspelled
    * [HBASE-9144] - Leases class has contention that's not needed
    * [HBASE-9146] - TestHTablePool hangs when run as part of runMediumTests profile
    * [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-9152] - Not able to find HMaster and HRegionServer processes with grep by process name on ps result because of large classpath as argument.
    * [HBASE-9156] - 2000ms timeout for some client calls
    * [HBASE-9158] - Serious bug in cyclic replication
    * [HBASE-9173] - replication_admin#get_peer_state(id) in ruby script pointing to undefined method `getPeerState'
    * [HBASE-9174] - javac hangs compiling hbase-example module since namespaces went in
    * [HBASE-9177] - Cluster UUID is not properly parsable after rewriting to PB.
    * [HBASE-9181] - Fix javadoc warnings introduce by namespaces
    * [HBASE-9182] - Allow non-admin users to list all table names
    * [HBASE-9184] - Ignore zk assign event if region is not known in transition
    * [HBASE-9185] - mvn site target fails when building with Maven 3.1
    * [HBASE-9189] - IncreasingToUpperBoundRegionSplitPolicy.shouldSplit() should check all the stores before returning.
    * [HBASE-9190] - Update scan.rb description to match the naming convention of META after namespace change
    * [HBASE-9192] - IntegrationTestBigLinkedListWithChaosMonkey never exits if there is an error
    * [HBASE-9195] - Fix TestFSHDFSUtils against java7 test re-ordering
    * [HBASE-9197] - TestAdmin#testShouldCloseTheRegionBasedOnTheEncodedRegionName shuts down the namespaces table and never starts it up again
    * [HBASE-9198] - RpcClient#call could hang
    * [HBASE-9199] - Call duration is not accurate
    * [HBASE-9200] - HFilePrettyPrinter finds incorrect largest row
    * [HBASE-9204] - An Offline SplitParent Region can be assigned breaking split references
    * [HBASE-9211] - "ERROR: undefined method `message' for nil:NilClass" in the shell on error
    * [HBASE-9224] - Print out name of the method we do not support rather than throw NPE
    * [HBASE-9226] - Thrift host and port are hardcoded in thrift2 DemoClient.java
    * [HBASE-9230] - Fix the server so it can take a pure pb request param and return a pure pb result
    * [HBASE-9232] - Fix javadoc warning and a few findbugs items.
    * [HBASE-9233] - isTableAvailable() may be stuck if an offline parent was never assigned
    * [HBASE-9234] - Rebuilding user regions should ignore system tables
    * [HBASE-9236] - region_mover#getTable() should use TableName.toString() instead of Bytes.toString()
    * [HBASE-9237] - Integration test cleanup after ChaosMonkey refactor
    * [HBASE-9250] - Lease sleep time can throw an exception
    * [HBASE-9251] - list_namespace_tables seems to fail
    * [HBASE-9253] - Clean up IT test code
    * [HBASE-9255] - TestAsyncProcess#testErrorsServers is flaky on suse linux
    * [HBASE-9257] - TestAsyncProcess#testFailAndSuccess fails sometime due to a race condition
    * [HBASE-9267] - StochasticLoadBalancer goes over its processing time limit
    * [HBASE-9268] - Client doesn't recover from a stalled region server
    * [HBASE-9269] - IntegrationTestBulkLoad fails because a public constructor is needed.
    * [HBASE-9271] - Doc the major differences between 0.94 and 0.96; a distillation of release notes for those w/ limited attention
    * [HBASE-9274] - After HBASE-8408 applied, temporary test files are being left in /tmp/hbase-<user>
    * [HBASE-9278] - Reading Pre-namespace meta table edits kills the reader
    * [HBASE-9281] - user_permission command encounters NullPointerException
    * [HBASE-9283] - Struct and StructIterator should properly handle trailing nulls
    * [HBASE-9285] - User who created table cannot scan the same table due to Insufficient permissions
    * [HBASE-9289] - hbase-assembly pom should use project.parent.basedir
    * [HBASE-9290] - Add logging in IntegrationTestBigLinkedList Verify reduce phase
    * [HBASE-9296] - Update to bootstrap 3.0
    * [HBASE-9298] - ns checker runs too frequently; too much mention in master logs
    * [HBASE-9301] - Default hbase.dynamic.jars.dir to hbase.rootdir/jars
    * [HBASE-9302] - Column family and qualifier should be allowed to be set as null in grant shell command
    * [HBASE-9303] - Snapshot restore of table which splits after snapshot was taken encounters 'Region is not online'
    * [HBASE-9307] - HalfStoreFileReader needs to handle the faked key else compactions go into infinite loops
    * [HBASE-9308] - Fix precommit javadoc warnings
    * [HBASE-9309] - The links in the backup masters template are bad
    * [HBASE-9310] - Remove slop for Stochastic load balancer
    * [HBASE-9312] - Lower StochasticLoadBalancer's default max run time 
    * [HBASE-9318] - Procedure#waitForLatch may not throw error even there is one
    * [HBASE-9319] - Apply 'HBASE-7685 Closing socket connection can't be removed from SecureClient' to trunk
    * [HBASE-9320] - Up timeouts on NamespaceUpgrades timeouts
    * [HBASE-9321] - Contention getting the current user in RpcClient$Connection.writeRequest
    * [HBASE-9322] - Contention on the SoftValueSortedMap with multiple clients
    * [HBASE-9323] - TestHRegionOnCluster fails
    * [HBASE-9326] - ServerName is created using getLocalSocketAddress, breaks binding to the wildcard address. Revert HBASE-8640
    * [HBASE-9327] - retryTime log is confusing
    * [HBASE-9328] - Table web UI is corrupted sometime
    * [HBASE-9329] - SnapshotManager should check for directory existance before throwing a warning.
    * [HBASE-9332] - OrderedBytes does not decode Strings correctly
    * [HBASE-9337] - shell 'user_permission' throws no method 'toStringBinary' for (o.a.h.h.TableName) 
    * [HBASE-9338] - Test Big Linked List fails on Hadoop 2.1.0
    * [HBASE-9340] - revoke 'user' throws ArrayIndexOutOfBoundsException
    * [HBASE-9344] - RegionServer not shutting down upon KeeperException in open region
    * [HBASE-9346] - HBCK should provide an option to check if regions boundaries are the same in META and in stores.
    * [HBASE-9348] - TerminatedWrapper error decoding, skipping skippable types
    * [HBASE-9350] - In ChaosMonkey, MoveRegionsOfTableAction throws UnknownRegionException
    * [HBASE-9353] - HTable returned by MetaReader#getMetaHTable() is not closed in MetaEditor#addRegionToMeta()
    * [HBASE-9364] - Get request with multiple columns returns partial results
    * [HBASE-9366] - TestHTraceHooks.testTraceCreateTable ConcurrentModificationException up in htrace lib
    * [HBASE-9372] - Restore HConstants.META_TABLE_NAME as deprecated
    * [HBASE-9375] - [REST] Querying row data gives all the available versions of a column
    * [HBASE-9380] - StoreFile.Reader is not being closed on memstore flush
    * [HBASE-9382] - replicateWALEntry doesn't use the replication handlers
    * [HBASE-9384] - [WINDOWS] Using file://{hbase.tmp.dir}/hbase for hbase.rootdir causes illegal argument exception on windows
    * [HBASE-9386] - [WINDOWS] Small improvements to .cmd scripts
    * [HBASE-9387] - Region could get lost during assignment
    * [HBASE-9388] - [replication] ZK Dump prints the raw PBUF for the HLog positions
    * [HBASE-9390] - coprocessors observers are not called during a recovery with the new log replay algorithm
    * [HBASE-9391] - Compilation problem in AccessController with JDK 6
    * [HBASE-9394] - [replication] size accounting is completely off in the source
    * [HBASE-9400] - [UI] Catalog tables section isn't aligned
    * [HBASE-9402] - initCause() uses wrong exception in ProtobufLogReader#readNext(HLog$Entry)
    * [HBASE-9411] - Increment / decrement of rpcCount in RpcServer#Connection is not protected by synchronization
    * [HBASE-9412] - Startup scripts create 2 .out files.
    * [HBASE-9413] - WebUI says ".META." table but table got renames to "hbase:meta". Meed to update the UI.
    * [HBASE-9414] - start-hbase.cmd doesn't need the execute flag.
    * [HBASE-9418] - REST server web UI has some dead links
    * [HBASE-9419] - Add more informative client column to Integration Test Linked List
    * [HBASE-9420] - Math.max() on syncedTillHere lacks synchronization
    * [HBASE-9421] - Provide better error message when dropping non-existent namespace
    * [HBASE-9423] - Log splitting should not start till HDFS out of safe mode
    * [HBASE-9425] - Starting a LocalHBaseCluster when 2181 is occupied results in "Too many open files"
    * [HBASE-9428] - Regex filters are at least an order of magnitude slower since 0.94.3
    * [HBASE-9430] - Memstore heapSize calculation - DEEP_OVERHEAD is incorrect
    * [HBASE-9433] - OpenRegionHandler uses different assignment timeout
    * [HBASE-9434] - hbck tries to sideline file to root dir
    * [HBASE-9435] - Fix jersey serialization/deserialization of json objects
    * [HBASE-9436] - hbase.regionserver.handler.count default: 5, 10, 25, 30? pick one
    * [HBASE-9437] - hbase.regionserver.checksum.verify default: true or false
    * [HBASE-9439] - shell command list shows something not meaningful
    * [HBASE-9442] - HLogKey(walKey) constructor needs to be either removed, deprecated or fixed
    * [HBASE-9446] - saveVersion.sh spit pushd: not found popd: not found
    * [HBASE-9449] - document how to use shell enhancements from HBASE-5548
    * [HBASE-9450] - TestDistributedLogSplitting fails
    * [HBASE-9451] - Meta remains unassigned when the meta server crashes with the ClusterStatusListener set
    * [HBASE-9452] - Simplify the configuration of the multicast notifier
    * [HBASE-9453] - make dev-support/generate-hadoopX-poms.sh have exec perms.
    * [HBASE-9454] - HBaseAdmin#unassign() has incorrect @param argument
    * [HBASE-9457] - Master could fail start if region server with system table is down
    * [HBASE-9460] - Fix HLogPerformanceEvaluation so runs against localfs
    * [HBASE-9461] - Some doc and cleanup in RPCServer
    * [HBASE-9462] - HBaseAdmin#isTableEnabled() should throw exception for non-existent table
    * [HBASE-9463] - Fix comments around alter tables
    * [HBASE-9468] - Previous active master can still serves RPC request when it is trying recovering expired zk session
    * [HBASE-9471] - htrace synchronized on getInstance
    * [HBASE-9474] - Cleanup of hbase script usage
    * [HBASE-9475] - Fix pom warnings found by new m2eclipse
    * [HBASE-9476] - Yet more master log cleanup
    * [HBASE-9480] - Regions are unexpectedly made offline in certain failure conditions
    * [HBASE-9482] - Do not enforce secure Hadoop for secure HBase
    * [HBASE-9485] - TableOutputCommitter should implement recovery if we don't want jobs to start from 0 on RM restart
    * [HBASE-9486] - NPE in HTable.close() with AsyncProcess
    * [HBASE-9492] - hdfs-site.xml is not excluded from the it-test jar
    * [HBASE-9497] - Old .META. .tableinfo file kills HMaster
    * [HBASE-9498] - NPE in HBaseAdmin if master not running
    * [HBASE-9502] - HStore.seekToScanner should handle magic value
    * [HBASE-9508] - Restore some API mistakenly removed in client, mapred*, and common
    * [HBASE-9509] - Fix HFile V1 Detector to handle AccessControlException for non-existant files
    * [HBASE-9510] - Namespace operations should throw clean exceptions
    * [HBASE-9511] - LZ4 codec retrieval executes redundant code
    * [HBASE-9512] - Regions can't get out InRecovery state sometimes when turn off distributeLogReplay and restart a cluster
    * [HBASE-9514] - Prevent region from assigning before log splitting is done
    * [HBASE-9519] - fix NPE in EncodedScannerV2.getFirstKeyInBlock()
    * [HBASE-9521] - clean clearBufferOnFail behavior and deprecate it
    * [HBASE-9525] - "Move" region right after a region split is dangerous
    * [HBASE-9533] - List of dependency jars for MR jobs is hard-coded and does not include netty, breaking MRv1 jobs
    * [HBASE-9534] - Short-Circuit Coprocessor HTable access when on the same server
    * [HBASE-9536] - Fix minor javadoc warnings
    * [HBASE-9539] - Handle post namespace snapshot files  when checking for HFile V1 
    * [HBASE-9547] - Surefire steals focus on mac osx
    * [HBASE-9548] - Cleanup SnapshotTestingUtils
    * [HBASE-9549] - KeyValue#parseColumn(byte[]) does not handle empty qualifier
    * [HBASE-9550] - IntegrationTestBigLinkedList used to be able to run on pseudo-distributed clusters
    * [HBASE-9551] - HBaseTestingUtility#createPreSplitLoadTestTable double close HBaseAdmin
    * [HBASE-9554] - TestOfflineMetaRebuildOverlap#testMetaRebuildOverlapFail fails due to NPE
    * [HBASE-9555] - Reset loadbalancer back to StochasticLoadBalancer
    * [HBASE-9557] - strange dependencies for hbase-client
    * [HBASE-9558] - PerformanceEvaluation is in hbase-server, and create a dependency to MiniDFSCluster
    * [HBASE-9561] - hbase-server-tests.jar contains a test mapred-site.xml
    * [HBASE-9563] - Autorestart doesn't work if zkcleaner fails
    * [HBASE-9565] - LocalityRegionPicker was mistakenly commented out
    * [HBASE-9569] - TestHLog is broken
    * [HBASE-9579] - Sanity check visiblity and audience for server-side modules.
    * [HBASE-9581] - Few tests broken since HBASE-9551
    * [HBASE-9590] - TableEventHandler#reOpenAllRegions() should close the HTable instance
    * [HBASE-9597] - Create hbase-thrift module
    * [HBASE-9598] - Non thread safe increment of task.unforcedResubmits in SplitLogManager#resubmit()
    * [HBASE-9600] - TestColumnSchemaModel and TestTableSchemaModel test cases are failing with IBM IBM Java 6
    * [HBASE-9602] - Cluster can't start when log splitting at startup time and the master's web UI is refreshed a few times
    * [HBASE-9603] - IsRestoreSnapshotDoneResponse has wrong default causing restoreSnapshot() to be async
    * [HBASE-9609] - AsyncProcess doesn't increase all the counters when trying to limit the per region flow.
    * [HBASE-9610] - TestThriftServer.testAll failing
    * [HBASE-9612] - Ability to batch edits destined to different regions
    * [HBASE-9632] - Put the shell in a maven sub module (hbase-shell) instead of hbase-server
    * [HBASE-9633] - Partial reverse of HBASE-9533
    * [HBASE-9639] - SecureBulkLoad dispatches file load requests to all Regions
    * [HBASE-9640] - Increment of loadSequence in CoprocessorHost#loadInstance() is thread-unsafe 
    * [HBASE-9642] - AM ZK Workers stuck doing 100% CPU on HashMap.put
    * [HBASE-9645] - Regionserver halt because of HLog's "Logic Error Snapshot seq id from earlier flush still present!"
    * [HBASE-9647] - Add a test in TestAsyncProcess to check the number of threads created
    * [HBASE-9649] - HFilePrettyPrinter should not throw a NPE if FirstKey or LastKey is null.
    * [HBASE-9650] - Per region metrics are not showing up for system tables.
    * [HBASE-9653] - Add compaction metrics to trunk
    * [HBASE-9659] - some integration tests can no longer be run using maven
    * [HBASE-9660] - Release source tarball should contain ./dev-support contents.
    * [HBASE-9662] - PerformanceEvaluation input do not handle tags properties
    * [HBASE-9663] - PerformanceEvaluation does not properly honor specified table name parameter
    * [HBASE-9670] - Client pause should be 100ms everywhere
    * [HBASE-9672] - LoadTestTool NPE's when -num_tables is given, but -tn is not
    * [HBASE-9676] - AsyncProcess can create more tasks than hbase.client.max.total.tasks
    * [HBASE-9685] - IntegrationTestMTTR should stop on RetriesExhaustedException
    * [HBASE-9687] - ClassNotFoundException is thrown when ExportSnapshot runs against hadoop cluster where HBase is not installed on the same node as resourcemanager
    * [HBASE-9688] - Fix javadoc warning in HConnectionManager class javadoc
    * [HBASE-9694] - HBaseTestingUtility.createTable infinite loop
    * [HBASE-9695] - Some never used local variables cleanup.
    * [HBASE-9696] - Master recovery ignores online merge znode
    * [HBASE-9697] - ZKDataMigrator should exit on table(s) null check.
    * [HBASE-9698] - HBCK does not handle tables with no regions left
    * [HBASE-9699] - For Downstreamers using HBaseTestingUtility is hard.
    * [HBASE-9700] - remove htrace-zipkin from the runtime dependencies
    * [HBASE-9706] - Improve detection of secure ZooKeeper
    * [HBASE-9709] - LogReplay throws NPE when no KVs to be replayed in a WALEdit
    * [HBASE-9710] - Use the region name, not the encoded name, when region is not on current server
    * [HBASE-9718] - Add a test scope dependency on org.slf4j:slf4j-api to hbase-client
    * [HBASE-9723] - TestAsyncProcess#testFailAndSuccess & testThreadCreation are flaky on SUSE
    * [HBASE-9724] - Failed region split is not handled correctly by AM
    * [HBASE-9727] - HBase Rest Server - DELETE scanner operation is a no-op
    * [HBASE-9728] - generate-hadoopX-poms.sh examples is wrong.
    * [HBASE-9730] - Exceptions in multi operations are not handled correctly
    * [HBASE-9732] - Static AtomicLong updated in StoreFileScanner every (re)seek
    * [HBASE-9735] - region_mover.rb uses the removed HConnection.getZooKeeperWatcher() method
    * [HBASE-9737] - Corrupt HFile cause resource leak leading to Region Server OOM
    * [HBASE-9743] - RollingBatchRestartRsAction aborts if timeout
    * [HBASE-9745] - Append HBASE_CLASSPATH to end of Java classpath and use another env var for prefix
    * [HBASE-9747] - PrefixFilter with OR condition gives wrong results
    * [HBASE-9748] - Address outstanding comments raised for HBASE-9696
    * [HBASE-9751] - Excessive  readpoints checks in StoreFileScanner
    * [HBASE-9753] - Excessive readpoint checks in MemstoreScanner
    * [HBASE-9754] - Eliminate threadlocal from MVCC code
    * [HBASE-9755] - Cannot run classes in hbase-server tests jar from command line 
    * [HBASE-9759] - Prevent random number collision in IntegrationTestBulkLoad
    * [HBASE-9761] - Put copy constructor should clone the operation attributes also
    * [HBASE-9765] - TestImportTsv.testBulkOutputWithTsvImporterTextMapper() may not be working correctly
    * [HBASE-9766] - HFileV3 - Optional tags write and read is not working as expected
    * [HBASE-9768] - Two issues in AsyncProcess
    * [HBASE-9770] - HFilePerformanceEvaluation is using the wrong Comparator
    * [HBASE-9773] - Master aborted when hbck asked the master to assign a region that was already online
    * [HBASE-9776] - Test Load And Verify Fails with TableNotEnabledException
    * [HBASE-9785] - Fix heap size reporting in HRegion
    * [HBASE-9786] - [hbck]: hbck -metaonly incorrectly reports inconsistent regions after HBASE-9698 fix
    * [HBASE-9788] - [WINDOWS] Update rest server class name
    * [HBASE-9791] - MR initializes scanner twice
    * [HBASE-9792] - Region states should update last assignments when a region is opened.
    * [HBASE-9793] - Offline a region before it's closed could cause double assignment
    * [HBASE-9796] - npe in RegionServerCallable
    * [HBASE-9798] - Include dependency hamcrest-core
    * [HBASE-9807] - block encoder unnecessarily copies the key for each reseek
    * [HBASE-9808] - org.apache.hadoop.hbase.rest.PerformanceEvaluation is out of sync with org.apache.hadoop.hbase.PerformanceEvaluation
    * [HBASE-9810] - Global memstore size will be calculated wrongly if replaying recovered edits throws exception
    * [HBASE-9813] - Log splitting doesn't prevent RS creating new hlog file
    * [HBASE-9816] - Address review comments in HBASE-8496
    * [HBASE-9821] - Scanner id could collide
    * [HBASE-9822] - IntegrationTestLazyCfLoading failed occasionally in a secure enviroment
    * [HBASE-9838] - Fix javadoc warning in ImportTsv#TsvParser ctor
    * [HBASE-9843] - Various fixes in client code
    * [HBASE-9848] - Make regionserver Canary exit with different exit codes
    * [HBASE-9849] - [REST] Forbidden schema delete in read only mode
    * [HBASE-9850] - Issues with UI for table compact/split operation completion. After split/compaction operation using UI, the page is not automatically redirecting back using IE8/Firefox.
    * [HBASE-9856] - Fix some findbugs Performance Warnings
    * [HBASE-9859] - Canary Shouldn't go off if the table being read from is disabled
    * [HBASE-9862] - manage error per server and per region in the protobuffed client
    * [HBASE-9863] - Intermittently TestZooKeeper#testRegionAssignmentAfterMasterRecoveryDueToZKExpiry hangs in admin#createTable() call
    * [HBASE-9865] - Reused WALEdits in replication may cause RegionServers to go OOM
    * [HBASE-9868] - Remove some array copy, especially around protobuf
    * [HBASE-9869] - Optimize HConnectionManager#getCachedLocation
    * [HBASE-9870] - HFileDataBlockEncoderImpl#diskToCacheFormat uses wrong format
    * [HBASE-9871] - PB issue : Increment attributes are not getting passed to server
    * [HBASE-9872] - ModifyTable does not  modify the attributes of a newly modified/changed ColumnDescriptor
    * [HBASE-9874] - Append and Increment operation drops Tags
    * [HBASE-9885] - Avoid some Result creation in protobuf conversions
    * [HBASE-9886] - Optimize ServerName#compareTo
    * [HBASE-9890] - MR jobs are not working if started by a delegated user
    * [HBASE-9893] - Incorrect assert condition in OrderedBytes decoding
    * [HBASE-9895] - 0.96 Import utility can't import an exported file from 0.94
    * [HBASE-9900] - Fix unintended byte[].toString in AccessController
    * [HBASE-9901] - Add a toString in HTable, fix a log in AssignmentManager
    * [HBASE-9902] - Region Server is starting normally even if clock skew is more than default 30 seconds(or any configured). -> Regionserver node time is greater than master node time
    * [HBASE-9903] - Remove the jamon generated classes from the findbugs analysis
    * [HBASE-9906] - Restore snapshot fails to restore the meta edits sporadically  
    * [HBASE-9908] - [WINDOWS] Fix filesystem / classloader related unit tests
    * [HBASE-9909] - TestHFilePerformance should not be a unit test, but a tool
    * [HBASE-9915] - Performance: isSeeked() in EncodedScannerV2 always returns false
    * [HBASE-9918] - MasterAddressTracker & ZKNamespaceManager ZK listeners are missed after master recovery
    * [HBASE-9926] - Scanner doesn't check if a region is available
    * [HBASE-9947] - Add CM action for online compression algorithm change
    * [HBASE-9949] - Fix the race condition between Compaction and StoreScanner.init
    * [HBASE-9952] - Snapshot restore may fail due to NullPointerException
    * [HBASE-9956] - Remove keyLength cache from KeyValue
    * [HBASE-9957] - [WINDOWS] TestNamespaceUpgrade fails on windows
    * [HBASE-9958] - Remove some array copy, change lock scope in locateRegion
    * [HBASE-9959] - Remove some array copy - server side
    * [HBASE-9960] - Fix javadoc for CellUtil#tagsIterator()
    * [HBASE-9961] - [WINDOWS] Multicast should bind to local address
    * [HBASE-9962] - Improve tag iteration
    * [HBASE-9970] - HBase BulkLoad, table is creating with the timestamp key also as a column to the table. 
    * [HBASE-9973] - [ACL]: Users with 'Admin' ACL permission will lose permissions after upgrade to 0.96.x from 0.94.x or 0.92.x
    * [HBASE-9975] - Not starting ReplicationSink when using custom implementation for the ReplicationSink.
    * [HBASE-9976] - Don't create duplicated TableName objects
    * [HBASE-9978] - The client retries even if the method is not present on the server
    * [HBASE-9982] - TestClientNoCluster should use random numbers
    * [HBASE-9983] - Lower the memory footprint of HRegionLocation
    * [HBASE-9987] - Remove some synchronisation points in HConnectionManager
    * [HBASE-9988] - DOn't use HRI#getEncodedName in the client
    * [HBASE-9989] - Add a test on get in TestClientNoCluster
    * [HBASE-9992] - [hbck] Refactor so that arbitrary -D cmdline options are included 
    * [HBASE-9995] - Not stopping ReplicationSink when using custom implementation for the ReplicationSink
    * [HBASE-10004] - Some fixes for scoping sequence Ids to region level
    * [HBASE-10005] - TestVisibilityLabels fails occasionally
    * [HBASE-10011] - Fix some findbugs in the client
    * [HBASE-10012] - Hide ServerName constructor
    * [HBASE-10013] - Enhance the message about ZK when there is an exception
    * [HBASE-10014] - HRegion#doMiniBatchMutation rollbacks the memstore even if there is nothing to rollback.
    * [HBASE-10015] - Replace intrinsic locking with explicit locks in StoreScanner
    * [HBASE-10026] - HBaseAdmin#createTable could fail if region splits too fast
    * [HBASE-10029] - Proxy created by HFileSystem#createReorderingProxy() should properly close when connecting to HA namenode
    * [HBASE-10030] - [JDK8] Erasure of PoolMap#remove(K,V) conflicts with superclass method
    * [HBASE-10032] - [JDK8] ConcurrentSkipListMap class size changed
    * [HBASE-10045] - HMaster's clear command could conflict with JMX ports
    * [HBASE-10046] - Unmonitored HBase service could accumulate Status objects and OOM
    * [HBASE-10050] - graceful_stop.sh syntax error
    * [HBASE-10051] - rolling-restart.sh have old value of "zookeeper.znode.unassiged" config causing infinite loop
    * [HBASE-10053] - ProtobufUtil#toMutationNoData interface change causes downstream project build break
    * [HBASE-10056] - region_status.rb not adopted to 0.96 api
    * [HBASE-10057] - TestRestoreFlushSnapshotFromClient and TestRestoreSnapshotFromClient fail to finish occasionally
    * [HBASE-10061] - TableMapReduceUtil.findOrCreateJar calls updateMap(null, ) resulting in thrown NPE
    * [HBASE-10069] - Potential duplicate calls to log#appendNoSync() in HRegion#doMiniBatchMutation()
    * [HBASE-10072] - Regenerate ClientProtos after HBASE-4811
    * [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-10084] - [WINDOWS] bin\hbase.cmd should allow whitespaces in java.library.path and classpath
    * [HBASE-10085] - Some regions aren't re-assigned after a cluster restarts
    * [HBASE-10087] - Store should be locked during a memstore snapshot
    * [HBASE-10090] - Master could hang in assigning meta
    * [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-10111] - Verify that a snapshot is not corrupted before restoring it
    * [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-10120] - start-hbase.sh doesn't respect --config in non-distributed mode
    * [HBASE-10125] - KeyValue(Cell c) copy constructor doesn't copy tags data
    * [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-10195] - "mvn site" build failed with OutOfMemoryError
    * [HBASE-10196] - Enhance HBCK to understand the case after online region merge
    * [HBASE-10198] - Add a note on how to Import 0.94 exported file to a 0.96 cluster or onwards
    * [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-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-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-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-10315] - Canary shouldn't exit with 3 if there is no master running.
    * [HBASE-10318] - generate-hadoopX-poms.sh expects the version to have one extra '-'
    * [HBASE-10319] - HLog should roll periodically to allow DN decommission to eventually complete.
    * [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-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-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-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-10366] - 0.94 filterRow() may be skipped in 0.96(or onwards) code
    * [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-10400] - [hbck] Continue if region dir missing on region merge attempt
    * [HBASE-10401] - [hbck] perform overlap group merges in parallel
    * [HBASE-10412] - Distributed log replay : Cell tags getting missed
    * [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-10429] - Make Visibility Controller to throw a better msg if it is of type RegionServerCoprocessor
    * [HBASE-10431] - Rename com.google.protobuf.ZeroCopyLiteralByteString
    * [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-10438] - NPE from LRUDictionary when size reaches the max init value
    * [HBASE-10442] - prepareDelete() isn't called before doPreMutationHook for a row deletion case
    * [HBASE-10443] - IndexOutOfBoundExceptions when processing compressed tags in HFile
    * [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-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-10460] - Return value of Scan#setSmall() should be void
    * [HBASE-10461] - table.close() in TableEventHandler#reOpenAllRegions() should be enclosed in finally block
    * [HBASE-10467] - Restore HTableDescriptor#isDeferredLogFlush()
    * [HBASE-10470] - Import generates huge log file while importing large amounts of data
    * [HBASE-10477] - Regression from HBASE-10337
    * [HBASE-10506] - Fail-fast if client connection is lost before the real call be executed in RPC layer

** Improvement
    * [HBASE-2231] - Compaction events should be written to HLog
    * [HBASE-3171] - Drop ROOT and instead store META location(s) directly in ZooKeeper
    * [HBASE-4284] - document permissions that need to be set on importtsv output before completebulkload
    * [HBASE-4360] - Maintain information on the time a RS went dead
    * [HBASE-4654] - [replication] Add a check to make sure we don't replicate to ourselves
    * [HBASE-5044] - Clarify solution for problem described on http://hbase.apache.org/book/trouble.mapreduce.html
    * [HBASE-5577] - improve 'patch submission' section in HBase book
    * [HBASE-5930] - Limits the amount of time an edit can live in the memstore.
    * [HBASE-5945] - Reduce buffer copies in IPC server response path
    * [HBASE-6295] - Possible performance improvement in client batch operations: presplit and send in background
    * [HBASE-6580] - Deprecate HTablePool in favor of HConnection.getTable(...)
    * [HBASE-6870] - HTable#coprocessorExec always scan the whole table 
    * [HBASE-7181] - Merge documentation improvement
    * [HBASE-7183] - print WARN message if hbase.replication.sizeOfLogQueue is too big
    * [HBASE-7247] - Assignment performances decreased by 50% because of regionserver.OpenRegionHandler#tickleOpening
    * [HBASE-7410] - [snapshots] add snapshot/clone/restore/export docs to ref guide
    * [HBASE-7567] - [replication] Create an interface for replication peers
    * [HBASE-7721] - Atomic multi-row mutations in META
    * [HBASE-7745] - Import uses System.out.println instead of logging
    * [HBASE-7790] - Refactor OpenRegionHandler so that the cleanup happens in one place - the finally block
    * [HBASE-7803] - [REST] Support caching on scan
    * [HBASE-7827] - Improve the speed of Hbase Thirft Batch mutation for deletes
    * [HBASE-7843] - enable encapsulating compaction policy/compactor/store file manager interaction shennanigans
    * [HBASE-7845] - optimize hfile index key
    * [HBASE-7848] - Use ZK-based read/write lock to make flush-type snapshot robust against table enable/disable/alter
    * [HBASE-7849] - Provide administrative limits around bulkloads of files into a single region
    * [HBASE-7902] - deletes may be removed during minor compaction,  in non-standard compaction schemes [rename enums]
    * [HBASE-7908] - Add jstack logs in hbase-common.sh when killing the server.
    * [HBASE-7917] - Documentation for secure bulk load
    * [HBASE-7930] - hbck should provide an option to fix .META. rows with empty REGIONINFO_QUALIFIER
    * [HBASE-7952] - Remove update() and Improve ExplicitColumnTracker performance.
    * [HBASE-7977] - Online merge should acquire table lock
    * [HBASE-7979] - Adding some utility methods in org.apache.hadoop.hbase.util.Bytes
    * [HBASE-8001] - Avoid unnecessary lazy seek
    * [HBASE-8031] - Adopt goraci as an Integration test
    * [HBASE-8059] - Enhance test-patch.sh so that patch can specify hadoop-2.0 as the default profile
    * [HBASE-8063] - Filter HFiles based on first/last key
    * [HBASE-8066] - Provide Admin.isTableAvailable() for a given table along with splitkeys
    * [HBASE-8077] - Configure the job name in ImportTsv
    * [HBASE-8080] - refactor default compactor to make its parts easier to reuse
    * [HBASE-8117] - Remove redundant byte conversion methods from HConstants
    * [HBASE-8137] - Add failed to open/close region state
    * [HBASE-8148] - Allow IPC to bind on a specific address
    * [HBASE-8152] - Avoid creating empty reference file when splitkey is outside the key range of a store file
    * [HBASE-8205] - HBCK support for table locks
    * [HBASE-8218] - Pass HTable as parameter to methods of AggregationClient
    * [HBASE-8235] - Adding inmemory CF attribute to LoadTest and PerformanceEvaluation tool
    * [HBASE-8240] - CompoundConfiguration should implement Iterable
    * [HBASE-8271] - Book updates for changes to GC options in shell scripts
    * [HBASE-8272] - make compaction checker frequency configurable per table/cf
    * [HBASE-8284] - Allow String Offset(s) in ColumnPaginationFilter for bookmark based pagination
    * [HBASE-8301] - Document for hbase.rpc.timeout
    * [HBASE-8322] - Re-enable hbase checksums by default
    * [HBASE-8339] - Make sure the StochasticLoadBalancer doesn't run a cost function when not needed
    * [HBASE-8345] - Add all available resources in o.a.h.h.rest.RootResource and VersionResource to o.a.h.h.rest.client.RemoteAdmin
    * [HBASE-8350] - enable ChaosMonkey to run commands as different users
    * [HBASE-8367] - LoadIncrementalHFiles does not return an error code nor throw Exception when failures occur due to timeouts
    * [HBASE-8383] - Support lib/*jar inside coprocessor jar
    * [HBASE-8420] - Port  HBASE-6874  Implement prefetching for scanners from 0.89-fb
    * [HBASE-8438] - Extend bin/hbase to print a "mapreduce classpath"
    * [HBASE-8439] - [replication] Remove ReplicationZookeeper class
    * [HBASE-8461] - Provide the ability to delete multiple snapshots through single command
    * [HBASE-8465] - Auto-drop rollback snapshot for snapshot restore
    * [HBASE-8470] - Data file used by TestReference should be excluded from Apache Rat check
    * [HBASE-8471] - Server-side, remove convertion from pb type to client type before we call method
    * [HBASE-8485] - Retry to open a HLog on more exceptions 
    * [HBASE-8573] - Store last flushed sequence id for each store of region for Distributed Log Replay
    * [HBASE-8599] - HLogs in ZK are not cleaned up when replication lag is minimal
    * [HBASE-8608] - Do an edit of logs.. we log too much.
    * [HBASE-8609] - Make the CopyTable support startRow, stopRow options
    * [HBASE-8613] - Improve logging when BindException is received at startup time.
    * [HBASE-8617] - Introducing a new config to disable writes during recovering 
    * [HBASE-8618] - Master is providing dead RegionServer ServerName's to the balancer
    * [HBASE-8625] - Dependency version upgrade
    * [HBASE-8685] - [REST] Minor fix to XMLSchema.xsd and ScannerModel
    * [HBASE-8690] - Reduce unnecessary getFileStatus hdfs calls in TTL hfile and hlog cleanners
    * [HBASE-8692] - [AccessController] Restrict HTableDescriptor enumeration
    * [HBASE-8702] - Make WALEditCodec pluggable
    * [HBASE-8704] - Log the table name in ServerCallable.prepare.
    * [HBASE-8737] - [replication] Change replication RPC to use cell blocks
    * [HBASE-8740] - Generate unique table names in TestAccessController
    * [HBASE-8754] - Log the client IP/port of the balancer invoker
    * [HBASE-8755] - A new write thread model for HLog to improve the overall HBase write throughput
    * [HBASE-8768] - Improve bulk load performance by moving key value construction from map phase to reduce phase.
    * [HBASE-8778] - Region assigments scan table directory making them slow for huge tables
    * [HBASE-8785] - revise zookeeper session timeout setting
    * [HBASE-8809] - Include deletes in the scan (setRaw) method does not respect the time range or the filter
    * [HBASE-8812] - Avoid a wide line on the HMaster webUI if we have many ZooKeeper servers
    * [HBASE-8847] - Filter.transform() always applies unconditionally, even when combined in a FilterList
    * [HBASE-8861] - Remove ReplicationState completely
    * [HBASE-8884] - Pluggable RpcScheduler
    * [HBASE-8915] - protobuf message style
    * [HBASE-8918] - Removes redundant identifiers from interfaces
    * [HBASE-8921] - [thrift2] Add GenericOptionsParser to Thrift 2 server
    * [HBASE-8961] - Make TestReplicationQueueFailover less integration-y by splitting it up
    * [HBASE-8986] - Replace hardcoded special file/dir names with the relative HConstant
    * [HBASE-9033] - Add tracing to ReplicationSource and enable it in tests
    * [HBASE-9077] - Make Web ui Fluid width
    * [HBASE-9101] - Addendum to pluggable RpcScheduler
    * [HBASE-9103] - Print lines that are longer than allowed in HadoopQA output.
    * [HBASE-9121] - Update HTrace to 2.00 and add new example usage.
    * [HBASE-9126] - Make HFile MIN VERSION as 2
    * [HBASE-9208] - ReplicationLogCleaner slow at large scale
    * [HBASE-9221] - Provide interface for getting a User in the client
    * [HBASE-9243] - Add more useful statistics in the HFile tool
    * [HBASE-9248] - Place holders for tags in 0.96 to accommodate tags in 0.98
    * [HBASE-9273] - Consolidate isSystemTable checking
    * [HBASE-9313] - NamespaceJanitor is spammy when the namespace table moves
    * [HBASE-9314] - Dropping a table always prints a TableInfoMissingException in the master log
    * [HBASE-9330] - Refactor PE to create HTable the correct way
    * [HBASE-9333] - hbase.hconnection.threads.max should not be configurable else you get RejectedExecutionException
    * [HBASE-9343] - Implement stateless scanner for Stargate
    * [HBASE-9347] - Support for enabling servlet filters for REST service
    * [HBASE-9369] - Add support for 1- and 2-byte integers in OrderedBytes and provide types
    * [HBASE-9371] - Eliminate log spam when tailing files
    * [HBASE-9373] - [replication] data loss because replication doesn't expect partial reads
    * [HBASE-9385] - Log HBase Master command line arguments on startup
    * [HBASE-9438] - Enhance hbase shell un/assign to take encoded region name
    * [HBASE-9443] - ReplicationProtbufUtil.toHLogEntries needs to be either removed or deprecated
    * [HBASE-9467] - write can be totally blocked temporarily by a write-heavy region
    * [HBASE-9488] - Improve performance for small scan
    * [HBASE-9494] - Cleanup inconsistencies in protobuf message and rpc names
    * [HBASE-9518] - getFakedKey() improvement
    * [HBASE-9520] - shortcut split asap while requested splitPoint equals with region's startKey
    * [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-9560] - bin/hbase clean --cleanAll should not skip data cleaning if in local mode
    * [HBASE-9570] - With AccessDeniedException, HBase shell would be better to just display the error message to be user friendly
    * [HBASE-9594] - Add reference documentation on changes made by HBASE-7634 (Replication handling of peer cluster changes)
    * [HBASE-9605] - Allow AggregationClient to skip specifying column family for row count aggregate
    * [HBASE-9606] - Apply small scan to meta scan where rowLimit is low
    * [HBASE-9654] - Optimize HStore#getRowKeyAtOrBefore() when exact match is found
    * [HBASE-9656] - Remove decimal places from Requests Per Second stats
    * [HBASE-9661] - Consistent log severity level guards and statements 
    * [HBASE-9667] - NullOutputStream removed from Guava 15
    * [HBASE-9686] - More temporary test files are being left in /tmp/hbase-<user>
    * [HBASE-9689] - Support using OperationAttributes through shell script
    * [HBASE-9701] - Make SLEEP_TIME in IntegrationTestMTTR configurable
    * [HBASE-9703] - DistributedHBaseCluster should not throw exceptions, but do a best effort restore
    * [HBASE-9714] - add scan logging to IntegrationTestLoadAndVerify
    * [HBASE-9716] - LoadTestTool should provide default min and max settings to the data generator
    * [HBASE-9744] - Set io.serializations correctly in HFileOutputFormat.configureIncrementalLoad
    * [HBASE-9749] - Custom threadpool for Coprocessor obtained HTables
    * [HBASE-9750] - Add retries around Action server stop/start
    * [HBASE-9771] - [WebUI] Humanize store and blockcache statistics on RS
    * [HBASE-9772] - Normalize new client default values
    * [HBASE-9784] - Switch to Hadoop-2.2 
    * [HBASE-9831] - 'hbasefsck.numthreads' property isn't passed to hbck via cmdline -D option
    * [HBASE-9832] - Add MR support for Visibility labels
    * [HBASE-9855] - evictBlocksByHfileName improvement for bucket cache
    * [HBASE-9866] - Support the mode where REST server authorizes proxy users
    * [HBASE-9867] - Save on array copies with a subclass of LiteralByteString
    * [HBASE-9882] - Support Append Operation with thrift
    * [HBASE-9884] - Add Thrift and REST support for Visibility Labels
    * [HBASE-9892] - Add info port to ServerName to support multi instances in a node
    * [HBASE-9924] - Avoid potential filename conflict in region_mover.rb
    * [HBASE-9931] - Optional setBatch for CopyTable to copy large rows in batches
    * [HBASE-9963] - Remove the ReentrantReadWriteLock in the MemStore
    * [HBASE-9998] - Fix javadoc warnings induced by commits
    * [HBASE-10001] - Add a coprocessor to help testing the performances without taking into account the i/o
    * [HBASE-10007] - PerformanceEvaluation: Add sampling and latency collection to randomRead test
    * [HBASE-10010] - eliminate the put latency spike on the new log file beginning
    * [HBASE-10020] - Add maven compile-protobuf profile
    * [HBASE-10021] - Fix the REC_CATCH_EXCEPTION warning under hbase-thrift
    * [HBASE-10022] - Fix the HE_EQUALS_USE_HASHCODE warning under hbase-hadoop1-compat
    * [HBASE-10023] - Fix/Suppress all the 10 findbug warnings under hbase-common
    * [HBASE-10024] - Add an interface to create put with immutable arrays
    * [HBASE-10048] - Add hlog number metric in regionserver
    * [HBASE-10049] - Small improvments in region_mover.rb
    * [HBASE-10062] - Reconsider storing plaintext length in the encrypted block header
    * [HBASE-10065] - Stronger validation of key unwrapping
    * [HBASE-10066] - Use ByteArrayOutputStream#writeTo where appropriate
    * [HBASE-10116] - SlabCache metrics improvements
    * [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-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-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-10395] - endTime won't be set in VerifyReplication if startTime is not set
    * [HBASE-10423] - Report back the message of split or rollback failure to the master
    * [HBASE-10430] - Support compressTags in shell for enabling tag encoding
    * [HBASE-10457] - Print corrupted file information in SnapshotInfo tool without -file option

** New Feature
    * [HBASE-1936] - ClassLoader that loads from hdfs; useful adding filters to classpath without having to restart services
    * [HBASE-4210] - Allow coprocessor to interact with batches per region sent from a client
    * [HBASE-4811] - Support reverse Scan
    * [HBASE-6104] - Require EXEC permission to call coprocessor endpoints
    * [HBASE-6222] - Add per-KeyValue Security
    * [HBASE-7006] - [MTTR] Improve Region Server Recovery Time - Distributed Log Replay
    * [HBASE-7244] - Provide a command or argument to startup, that formats znodes if provided
    * [HBASE-7403] - Online Merge
    * [HBASE-7415] - [snapshots] Add task information to snapshot operation
    * [HBASE-7525] - A canary monitoring program specifically for regionserver
    * [HBASE-7544] - Transparent table/CF encryption
    * [HBASE-7667] - Support stripe compaction
    * [HBASE-7826] - Improve Hbase Thrift v1 to return results in sorted order
    * [HBASE-7842] - Add compaction policy that explores more storefile groups
    * [HBASE-7875] - introduce a compaction switch in HBase Shell
    * [HBASE-8163] - MemStoreChunkPool: An improvement for JAVA GC when using MSLAB
    * [HBASE-8369] - MapReduce over snapshot files
    * [HBASE-8372] - Provide mutability to CompoundConfiguration
    * [HBASE-8415] - DisabledRegionSplitPolicy
    * [HBASE-8496] - Implement tags and the internals of how a tag should look like
    * [HBASE-8504] - HTable.getRegionsInRange() should provide a non-cached API
    * [HBASE-8663] - a HBase Shell command to list the tables replicated from current cluster
    * [HBASE-8753] - Provide new delete flag which can delete all cells under a column-family which have designated timestamp
    * [HBASE-9047] - Tool to handle finishing replication when the cluster is offline
    * [HBASE-9299] - Generate the protobuf classes with hadoop-maven-plugin
    * [HBASE-9630] - Add thread which detects JVM pauses like HADOOP's
    * [HBASE-9631] - add murmur3 hash
    * [HBASE-9985] - Add HBase shell command to start/stop tracing
    * [HBASE-10119] - Allow HBase coprocessors to clean up when they fail
    * [HBASE-10416] - Improvements to the import flow

** Task
    * [HBASE-7641] - Port HBASE-6669 'Add BigDecimalColumnInterpreter for doing aggregations using AggregationClient' to trunk
    * [HBASE-7898] - Serializing Cells over RPC
    * [HBASE-7994] - Disable unit tests under hbase-examples; they fail too often up on jenkins
    * [HBASE-8054] - HBASE-7797 Use consistent package name dregs
    * [HBASE-8090] - Versioning site; part two, publish 0.94 site and add link from main site
    * [HBASE-8172] - Fix ./bin/*.rb scripts or remove them
    * [HBASE-8219] - Align Offline Merge with Online Merge
    * [HBASE-8224] - Publish hbase build against h1 and h2 adding '-hadoop1' or '-hadoop2' to version string
    * [HBASE-8286] - Move site back up out of hbase-assembly; bad idea
    * [HBASE-8296] - Add svn ignores to hbase-assembly
    * [HBASE-8395] - Remove TestFromClientSide.testPoolBehavior
    * [HBASE-8444] - Acknowledge that 0.95+ requires 1.0.3 hadoop at least.
    * [HBASE-8574] - Add how to rename a table in the docbook 
    * [HBASE-8591] - Doc Improvement: Replication blog
    * [HBASE-8792] - Organize EventType Java Docs
    * [HBASE-8796] - Add mention of new builds mailing list to site
    * [HBASE-8829] - Improve failed TestMetaScanner assert message so can see where/why failure
    * [HBASE-8960] - TestDistributedLogSplitting.testLogReplayForDisablingTable fails sometimes
    * [HBASE-8962] - Clean up code and remove regular log splitting
    * [HBASE-8978] - Restore TestLogRollAbort upon review
    * [HBASE-9011] - Add timeouts to possibly silently failing tests
    * [HBASE-9111] - Put back TestReplicationKill* except for the MasterRSCompressed one
    * [HBASE-9135] - Upgrade hadoop 1 version to 1.2.1 which is stable
    * [HBASE-9153] - Introduce/update a script to generate jdiff reports
    * [HBASE-9193] - Make what Chaos monkey actions run configurable per test.
    * [HBASE-9194] - Break HMaster metrics into multiple contexts
    * [HBASE-9229] - Fix release warning
    * [HBASE-9258] - HConnectionManager#getKeepAliveZooKeeperWatcher() should be public
    * [HBASE-9295] - Allow test-patch.sh to detect TreeMap keyed by byte[] which doesn't use proper comparator
    * [HBASE-9336] - Two css files raise release audit warning
    * [HBASE-9341] - Document hbase.hstore.compaction.kv.max
    * [HBASE-9342] - WebUI fixes after bootstrap 3.0 update
    * [HBASE-9370] - Add logging to Schema change Chaos actions.
    * [HBASE-9401] - Add getQualifierBufferShallowCopy to Cell Utility.
    * [HBASE-9495] - Sanity check visiblity and audience for hbase-client and hbase-common apis.
    * [HBASE-9505] - Enable replication by default
    * [HBASE-9575] - Add script to automate much of the rc-making process
    * [HBASE-9583] - add document for getShortMidpointKey
    * [HBASE-9693] - Fix javadoc warnings
    * [HBASE-9757] - Reenable fast region move in SlowDeterministicMonkey
    * [HBASE-9758] - Log missing rows and their regions if ITBLL fails
    * [HBASE-9837] - Forward port HBASE-9080 'Retain assignment should be used when re-enabling table(s)'
    * [HBASE-9920] - Lower OK_FINDBUGS_WARNINGS in test-patch.properties
    * [HBASE-9921] - stripe compaction - findbugs and javadoc issues, some improvements
    * [HBASE-9954] - Incorporate HTTPS support for HBase
    * [HBASE-9955] - Make hadoop2 the default and deprecate hadoop1
    * [HBASE-9991] - Enhance test-patch.sh with post back of snippet of compilation error if any is detected
    * [HBASE-9994] - ZeroCopyLiteralByteString.wrap() should be used in place of ByteString.copyFrom()
    * [HBASE-10031] - Add a section on the transparent CF encryption feature to the manual
    * [HBASE-10134] - Fix findbug warning in VisibilityController
    * [HBASE-10159] - Replaced deprecated interface Closeable
    * [HBASE-10183] - Need enforce a reserved range of system tag types
    * [HBASE-10364] - Allow configuration option for parent znode in LoadTestTool
    * [HBASE-10473] - Add utility for adorning http Context

** Test
    * [HBASE-6715] - TestFromClientSide.testCacheOnWriteEvictOnClose is flaky
    * [HBASE-7718] - TestClassLoading needs to consider runtime classpath in buildCoprocessorJar
    * [HBASE-7770] - minor integration test framework fixes
    * [HBASE-7960] - cleanup TestDir in TestHalfStoreFileReader
    * [HBASE-8106] - Test to check replication log znodes move is done correctly
    * [HBASE-8260] - create generic integration test for trunk and 94 that is more deterministic, can be run for longer and is less aggressive
    * [HBASE-8306] - Enhance TestJoinedScanners with ability to specify various parameters
    * [HBASE-8308] - Lower the number of expected regions in TestTableLockManager#testTableReadLock
    * [HBASE-8320] - test-patch.sh should post back compilation error against hadoop 2.0
    * [HBASE-8333] - TestTableLockManager#testDelete may occasionally fail due to lack of synchronization between test and handler thread
    * [HBASE-8520] - TestIOFencing fails intermittently due to compaction kicking in too soon
    * [HBASE-8534] - Fix coverage for org.apache.hadoop.hbase.mapreduce
    * [HBASE-8535] - Test for zk leak does not account for unsynchronized access to zk watcher
    * [HBASE-8543] - fix coverage org.apache.hadoop.hbase.rest.client
    * [HBASE-8552] - fix coverage org.apache.hadoop.hbase.rest.filter 
    * [HBASE-8556] - fix coverage  org.apache.hadoop.hbase.metrics.histogram
    * [HBASE-8559] - increase unit-test coverage of package org.apache.hadoop.hbase.coprocessor
    * [HBASE-8569] - Improve coverage in package org.apache.hadoop.hbase.security
    * [HBASE-8575] - TestDistributedLogSplitting#testMarkRegionsRecoveringInZK fails intermittently due to lack of online region
    * [HBASE-8611] - Improve test coverage in pkg org.apache.hadoop.hbase.mapred
    * [HBASE-8646] - Intermittent TestIOFencing#testFencingAroundCompaction failure due to region getting stuck in compaction
    * [HBASE-8668] - TestHLogSplit.generateHLog() does not use local variables for entries
    * [HBASE-8816] - Add support of loading multiple tables into LoadTestTool
    * [HBASE-8845] - Add integration test for split, online merge, and compaction
    * [HBASE-8857] - TestGet#testDynamicFilter fails sometimes
    * [HBASE-8860] - TestTableLockManager#testTableReadLock times out sometimes
    * [HBASE-8907] - TestIOFencing.testFencingAroundCompaction fails sometimes
    * [HBASE-8928] - Make ChaosMonkey & LoadTest tools extensible, to allow addition of more actions and policies.
    * [HBASE-8934] - Fix bunch of flaky tests
    * [HBASE-8941] - TestAccessController.testGlobalPermissionList failed with IndexOutOfBoundsException
    * [HBASE-8954] - TestSplitLogWorker#testPreemptTask failed
    * [HBASE-8984] - Test online snapshots with online merge
    * [HBASE-8994] - Adding log to chaos monkey actions to show what're performed
    * [HBASE-9017] - Consolidate ChaosMonkey's random objects
    * [HBASE-9020] - Make hbase-it HBASE_HOME configurable
    * [HBASE-9068] - Make hadoop 2 the default precommit for trunk
    * [HBASE-9090] - cleanup snapshot tests setup/teardown code 
    * [HBASE-9106] - Do not fail TestAcidGuarantees for exceptions on table flush
    * [HBASE-9123] - Filter protobuf generated code from long line warning
    * [HBASE-9155] - Enhance LoadTestTool to support updates
    * [HBASE-9160] - TestNamespaceUpgrade fails on hadoop 2.1 due to existence of .snapshot directory in tar ball
    * [HBASE-9161] - TestAssignmentManagerOnCluster.testSSHWhenDisablingTableRegionsInOpeningOrPendingOpenState could hang
    * [HBASE-9217] - TestReplicationSmallTests#testDisableEnable fails intermittently
    * [HBASE-9225] - Enable TRACE logging in TestReplicationBase
    * [HBASE-9239] - TestStoreFileBlockCacheSummary#testBlockCacheSummary occasionally fails
    * [HBASE-9287] - TestCatalogTracker depends on the execution order
    * [HBASE-9315] - TestLruBlockCache.testBackgroundEvictionThread fails on suse
    * [HBASE-9376] - TestDistributedLogSplitting creates a MiniCluster rooted at ~/hbase
    * [HBASE-9441] - Intermittent TestRegionPlacement#testRegionPlacement failure
    * [HBASE-9447] - TestHBaseFsck could hang sometime
    * [HBASE-9458] - Intermittent TestFlushSnapshotFromClient#testTakeSnapshotAfterMerge failure
    * [HBASE-9515] - Intermittent TestZKSecretWatcher#testKeyUpdate failure
    * [HBASE-9544] - Remove TestAdmin#testIsEnabledOnNonexistentTable()
    * [HBASE-9655] - IntegrationTestMTTR can loop forever on improperly configured clusters
    * [HBASE-9664] - ArrayIndexOutOfBoundsException may be thrown in TestZKSecretWatcher
    * [HBASE-9692] - TestOrderedBytes doesn't display the arrays correctly
    * [HBASE-9720] - TestSplitTransactionOnCluster#testShutdownFixupWhenDaughterHasSplit occasionally times out
    * [HBASE-9814] - TestRegionServerCoprocessorExceptionWithRemove mentions master in javadoc
    * [HBASE-9827] - Intermittent TestLogRollingNoCluster#testContendedLogRolling failure
    * [HBASE-9836] - Intermittent TestRegionObserverScannerOpenHook#testRegionObserverCompactionTimeStacking failure
    * [HBASE-9851] - TestHBaseFsck.testQuarantineMissingHFile is flaky
    * [HBASE-9860] - Intermittent TestHBaseFsck#testMissingRegionInfoQualifier failure due to NullPointerException
    * [HBASE-9928] - TestHRegion should clean up test-data directory upon completion
    * [HBASE-10008] - TestNamespaceCommands is flakey on jenkins
    * [HBASE-10058] - Test for HBASE-9915 (avoid reading index blocks)
    * [HBASE-10059] - TestSplitLogWorker#testMultipleTasks fails occasionally
    * [HBASE-10130] - TestSplitLogManager#testTaskResigned fails sometimes
    * [HBASE-10180] - TestByteBufferIOEngine#testByteBufferIOEngine occasionally fails
    * [HBASE-10189] - Intermittent TestReplicationSyncUpTool failure
    * [HBASE-10301] - TestAssignmentManagerOnCluster#testOpenCloseRacing fails intermittently
    * [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

** Umbrella
    * [HBASE-8629] - More log edits: we log too much
    * [HBASE-9945] - Coprocessor loading and execution improvements

** Wish
    * [HBASE-7462] - TestDrainingServer is an integration test. It should be a unit test instead
