Title:     BookKeeper Documentation
Notice:    Licensed to the Apache Software Foundation (ASF) under one
           or more contributor license agreements.  See the NOTICE file
           distributed with this work for additional information
           regarding copyright ownership.  The ASF licenses this file
           to you under the Apache License, Version 2.0 (the
           "License"); you may not use this file except in compliance
           with the License.  You may obtain a copy of the License at
           .
             http://www.apache.org/licenses/LICENSE-2.0
           .
           Unless required by applicable law or agreed to in writing,
           software distributed under the License is distributed on an
           "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
           KIND, either express or implied.  See the License for the
           specific language governing permissions and limitations
           under the License.

<h1>Release Notes - Bookkeeper - Version 4.3.0</h1>

<p>
NOTE: After support protobuf in [<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-582'>BOOKKEEPER-582</a>] in 4.3.0, a 4.3.0 client will not work with a 4.2.3 server, while a 4.3.0 server still keeps backward compatability with 4.2.3 clients. Please upgrade servers in prior to clients.
</p>

<h2>        Sub-task
</h2>
<ul>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-312'>BOOKKEEPER-312</a>] -         Implementation of JMS provider
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-506'>BOOKKEEPER-506</a>] -         Provide better topic release algorithm
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-555'>BOOKKEEPER-555</a>] -         Make BookieServer use Netty rather than a custom IO server
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-565'>BOOKKEEPER-565</a>] -         Make an option to separate storing entry log files from index files.
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-574'>BOOKKEEPER-574</a>] -         Extend the bookkeeper shell to get a list of available bookies
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-576'>BOOKKEEPER-576</a>] -         Bookie client should use netty Decoder/Encoder
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-582'>BOOKKEEPER-582</a>] -         Make bookie and client use protobuf for requests (non-wire part)
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-595'>BOOKKEEPER-595</a>] -         Crash of inprocess autorecovery daemon should not take down the bookie
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-608'>BOOKKEEPER-608</a>] -         Make SyncThread a reusable component
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-615'>BOOKKEEPER-615</a>] -         Twitter stats implementation of stats interface
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-629'>BOOKKEEPER-629</a>] -         Support hostname based ledger metadata to help users to change IP with existing installation
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-643'>BOOKKEEPER-643</a>] -         Improve concurrency of entry logger
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-644'>BOOKKEEPER-644</a>] -         Provide a bookie address wrapper
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-657'>BOOKKEEPER-657</a>] -         Journal Improvement
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-658'>BOOKKEEPER-658</a>] -         ledger cache refactor
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-659'>BOOKKEEPER-659</a>] -         LRU page management in ledger cache.
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-696'>BOOKKEEPER-696</a>] -         stats collection on bookkeeper client
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-697'>BOOKKEEPER-697</a>] -         stats collection on bookkeeper server
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-703'>BOOKKEEPER-703</a>] -         Document all the settings added in BOOKKEEPER-656
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-704'>BOOKKEEPER-704</a>] -         reconnectable zookeeper client wrapper
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-715'>BOOKKEEPER-715</a>] -         bookie: delay dropping journal cached pages
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-716'>BOOKKEEPER-716</a>] -         padding writes for bookie journal
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-717'>BOOKKEEPER-717</a>] -         journal should look forward to group time-out entries
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-773'>BOOKKEEPER-773</a>] -         Provide admin tool to rename bookie identifier in Cookies
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-782'>BOOKKEEPER-782</a>] -         Use builder pattern for Cookie
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-787'>BOOKKEEPER-787</a>] -         Modify Cookie by removing &#39;znodeVersion&#39; state/field
</li>
</ul>
            
<h2>        Bug
</h2>
<ul>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-313'>BOOKKEEPER-313</a>] -         Bookkeeper shutdown call from Bookie thread is not shutting down server
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-363'>BOOKKEEPER-363</a>] -         Re-distributing topics among newly added hubs.
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-446'>BOOKKEEPER-446</a>] -         BookKeeper.createLedger(..) should not mask the error with ZKException
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-544'>BOOKKEEPER-544</a>] -         Modify hedwig server tests to allow client testcases to start/stop them as part of their tests
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-548'>BOOKKEEPER-548</a>] -         Document about periodic ledger checker configuration
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-549'>BOOKKEEPER-549</a>] -         Documentation missed for readOnlyMode support
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-554'>BOOKKEEPER-554</a>] -         fd leaking when move ledger index file
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-556'>BOOKKEEPER-556</a>] -         BookieServerMXBean#getServerState makes no sense
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-557'>BOOKKEEPER-557</a>] -         Compiler error showing up badly with jdk 7
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-559'>BOOKKEEPER-559</a>] -         Fix occasional failure in AuditorBookieTest
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-561'>BOOKKEEPER-561</a>] -         Findbugs reports errors with openjdk
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-567'>BOOKKEEPER-567</a>] -         ReadOnlyBookieTest hangs on shutdown
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-568'>BOOKKEEPER-568</a>] -         NPE during GC with HierarchicalLedgerManager
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-569'>BOOKKEEPER-569</a>] -         Critical performance bug in InterleavedLedgerStorage
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-577'>BOOKKEEPER-577</a>] -         BookieFailureTest uses sync/wait()/notify() incorrectly
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-579'>BOOKKEEPER-579</a>] -         TestSubAfterCloseSub was put in a wrong package
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-580'>BOOKKEEPER-580</a>] -         improve close logic
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-581'>BOOKKEEPER-581</a>] -         Ledger recovery doesn&#39;t work correctly when recovery adds force changing ensembles.
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-583'>BOOKKEEPER-583</a>] -         Read from a ReadOnlyBookie fails if index fileinfo is not in ledger cache
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-584'>BOOKKEEPER-584</a>] -         Data loss when ledger metadata is overwritten
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-585'>BOOKKEEPER-585</a>] -         Auditor logs noisily when a ledger has been deleted
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-586'>BOOKKEEPER-586</a>] -         Remove recursive call in delivery manager
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-596'>BOOKKEEPER-596</a>] -         Ledgers are gc&#39;ed by mistake in MSLedgerManagerFactory.
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-597'>BOOKKEEPER-597</a>] -         Add flag to output test logs to stdout
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-598'>BOOKKEEPER-598</a>] -         Fails to compile - RESUBSCRIBE_EXCEPTION conflict
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-599'>BOOKKEEPER-599</a>] -         NPE in PerChannelBookieClient
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-600'>BOOKKEEPER-600</a>] -         shouldClaim flag isn&#39;t cleared for hedwig multiplex java client
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-601'>BOOKKEEPER-601</a>] -         readahead cache size isn&#39;t updated correctly 
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-602'>BOOKKEEPER-602</a>] -         we should have request timeouts rather than channel timeout in PerChannelBookieClient
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-603'>BOOKKEEPER-603</a>] -         Support Boost 1.53 for Hedwig Cpp Client
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-604'>BOOKKEEPER-604</a>] -         Ledger storage can log an exception if GC happens concurrently.
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-607'>BOOKKEEPER-607</a>] -         Filtered Messages Require ACK from Client Causes User Being Throttled Incorrectly Forever
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-610'>BOOKKEEPER-610</a>] -         Make SyncThread use an executor
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-617'>BOOKKEEPER-617</a>] -         BOOKKEEPER-544 breaks hedwig-server/bin/hedwig script
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-619'>BOOKKEEPER-619</a>] -         Bookie should not create local cookie files if zookeeper is uninitialized
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-620'>BOOKKEEPER-620</a>] -         PerChannelBookieClient race during channel disconnect
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-623'>BOOKKEEPER-623</a>] -         LedgerChecker should avoid segments of closed ledger with higher start entryId than closed entry.
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-624'>BOOKKEEPER-624</a>] -         Reduce logs generated by ReplicationWorker
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-626'>BOOKKEEPER-626</a>] -         BOOKIE_EXTRA_OPTS are added twice
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-632'>BOOKKEEPER-632</a>] -         AutoRecovery should consider read only bookies
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-633'>BOOKKEEPER-633</a>] -         ConcurrentModificationException in RackawareEnsemblePlacementPolicy when a bookie is removed from available list
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-635'>BOOKKEEPER-635</a>] -         jenkins build should highlight which lines of the patch cause raw analysis errors
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-636'>BOOKKEEPER-636</a>] -         Latest txn logs might be deleted in a race condition which is not recoverable if BK goes down before next txn log created.
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-638'>BOOKKEEPER-638</a>] -         Two bookies could start at the same time to access bookie data.
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-641'>BOOKKEEPER-641</a>] -         DeathWatcher thread is unnecessarily running even after bookie shutdown
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-642'>BOOKKEEPER-642</a>] -         Bookie returns incorrect exitcode, ExitCode.ZK_REG_FAIL is getting overridden
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-646'>BOOKKEEPER-646</a>] -         BookieShell readjournal command is throwing BufferUnderflowException
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-649'>BOOKKEEPER-649</a>] -         Race condition in sync ZKUtils.createFullPathOptimistic()
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-652'>BOOKKEEPER-652</a>] -         Logger class name is wrong in LedgerCacheImpl.java
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-654'>BOOKKEEPER-654</a>] -         Bookkeeper client operations are allowed even after its closure, bk#close()
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-663'>BOOKKEEPER-663</a>] -         HierarchicalLedgerManager iterator is missing some ranges and the last ledger in the range
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-664'>BOOKKEEPER-664</a>] -         Compaction increases latency on journal writes
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-667'>BOOKKEEPER-667</a>] -         Client write will fail with BadMetadataVersion in case of multiple Bookie failures with AutoRecovery enabled
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-668'>BOOKKEEPER-668</a>] -         Race between PerChannelBookieClient#channelDisconnected() and disconnect() calls can make clients hang while add/reading entries in case of multiple bookie failures
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-673'>BOOKKEEPER-673</a>] -         Ledger length can be inaccurate in failure case
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-676'>BOOKKEEPER-676</a>] -         Make add asynchrounous in ledger recovery
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-678'>BOOKKEEPER-678</a>] -         BookieServer shutdown hangs indefinitely at NioServerSocketChannelFactory.releaseExternalResources
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-683'>BOOKKEEPER-683</a>] -         TestSubAfterCloseSub fails on 4.2
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-686'>BOOKKEEPER-686</a>] -         Bookie startup will fail if one of the configured ledgerDir is full and the same is used for replaying the journal
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-688'>BOOKKEEPER-688</a>] -         NPE exception in PerChannelBookieClient
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-698'>BOOKKEEPER-698</a>] -         Bookie client closure is not considering timeoutExecutor
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-700'>BOOKKEEPER-700</a>] -         GarbageCollectorThread exsiting with ArrayIndexOutOfBoundsException
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-708'>BOOKKEEPER-708</a>] -         Shade protobuf library to avoid incompatible versions
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-709'>BOOKKEEPER-709</a>] -         SlowBookieTest#testSlowBookie fails intermittently
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-710'>BOOKKEEPER-710</a>] -         OpenLedgerNoRecovery should watch ensemble change.
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-711'>BOOKKEEPER-711</a>] -         bookkeeper-daemon.sh will not remove the pid file on successful stop
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-712'>BOOKKEEPER-712</a>] -         bookkeeper script should use &#39;java&#39; from JAVA_HOME
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-714'>BOOKKEEPER-714</a>] -         Logging channel exceptions in PerChannelBookieClient
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-718'>BOOKKEEPER-718</a>] -         AuditorLedgerCheckerTest is flakey
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-719'>BOOKKEEPER-719</a>] -         Inconsistent synchronization of org.apache.bookkeeper.stats.CodahaleMetricsProvider.metrics
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-720'>BOOKKEEPER-720</a>] -         CheckpointSource.MIN#compareTo does exactly the opposite of what it should
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-724'>BOOKKEEPER-724</a>] -         Shade introduces RAT error
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-725'>BOOKKEEPER-725</a>] -         AutoRecoveryMain should exit with error code if deathwatcher finds dead thread
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-726'>BOOKKEEPER-726</a>] -         PerChannelBookieClient should print address that it failed to connect to when it fails to correct
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-727'>BOOKKEEPER-727</a>] -         Names of bookie write/read threads are backwards
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-728'>BOOKKEEPER-728</a>] -         Bookkeeper#Builder is not public, so can&#39;t be used outside of client package
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-729'>BOOKKEEPER-729</a>] -         Bookie shouldn&#39;t exit with 0, if exiting from deathwatcher and thread death was caused by OOM
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-730'>BOOKKEEPER-730</a>] -         Shade pom file missing apache license header
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-731'>BOOKKEEPER-731</a>] -         Missing BOOKIE_PID_DIR and BOOKIE_STOP_TIMEOUT in env variables list
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-739'>BOOKKEEPER-739</a>] -         Test timeouts mostly ignored
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-740'>BOOKKEEPER-740</a>] -         AutoRecoveryMainTest#testAutoRecoverySessionLoss is failing
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-742'>BOOKKEEPER-742</a>] -         Fix for empty ledgers losing quorum.
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-743'>BOOKKEEPER-743</a>] -         Periodic ledger check running too often as doc doesn&#39;t match implementation.
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-744'>BOOKKEEPER-744</a>] -         Run the auditor bookie check periodically
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-745'>BOOKKEEPER-745</a>] -         Fix for false reports of ledger unreplication during rolling restarts.
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-746'>BOOKKEEPER-746</a>] -         5 new shell commands. List ledgers, list metadata, list underreplicated, show auditor and simpletest
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-750'>BOOKKEEPER-750</a>] -         Flake in BookieAutoRecoveryTest#testEmptyLedgerLosesQuorumEventually
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-751'>BOOKKEEPER-751</a>] -         Ensure all the bookkeeper callbacks not run under ledger handle lock
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-755'>BOOKKEEPER-755</a>] -         Incorrect number of seconds specified in a day
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-763'>BOOKKEEPER-763</a>] -         findbugs fails to run on jenkins
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-765'>BOOKKEEPER-765</a>] -         bookkeeper script should fall back to java in path if JAVA_HOME is not set
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-766'>BOOKKEEPER-766</a>] -         Update notice.txt files to include 2014
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-767'>BOOKKEEPER-767</a>] -         Allow loopback in tests
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-768'>BOOKKEEPER-768</a>] -         fix typo &#39;seconds&#39; to milliseconds in benchmark output
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-774'>BOOKKEEPER-774</a>] -         Flaky test org.apache.bookkeeper.test.ReadOnlyBookieTest.testBookieShouldTurnWritableFromReadOnly
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-777'>BOOKKEEPER-777</a>] -         Flake in LedgerCloseTest
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-778'>BOOKKEEPER-778</a>] -         Flake in TestTryReadLastConfirmed
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-779'>BOOKKEEPER-779</a>] -         jmx reporter for codahale metrics provider
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-780'>BOOKKEEPER-780</a>] -         Findbug issue in trunk
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-783'>BOOKKEEPER-783</a>] -         Avoid running out of fds in MutlipleThreadReadTest
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-784'>BOOKKEEPER-784</a>] -         BookKeeperCloseTest#testLedgerCheck is failing intermittently
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-785'>BOOKKEEPER-785</a>] -         Fix javadoc warnings in trunk
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-786'>BOOKKEEPER-786</a>] -         Fix Findbugs Error In Codahale Stats Provider
</li>
</ul>
                
<h2>        Improvement
</h2>
<ul>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-429'>BOOKKEEPER-429</a>] -         Provide separate read and write threads in the bookkeeper server
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-432'>BOOKKEEPER-432</a>] -         Improve performance of entry log range read per ledger entries 
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-526'>BOOKKEEPER-526</a>] -         multiple threads for delivery manager
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-563'>BOOKKEEPER-563</a>] -         Avoid Journal polluting page cache
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-564'>BOOKKEEPER-564</a>] -         Better checkpoint mechanism
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-573'>BOOKKEEPER-573</a>] -         Script to start a bookkeeper cluster
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-592'>BOOKKEEPER-592</a>] -         allow application to recommend ledger data locality
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-605'>BOOKKEEPER-605</a>] -         Use static Logger objects everywhere for bookkeeper
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-611'>BOOKKEEPER-611</a>] -         Speed up bookkeeper tests
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-614'>BOOKKEEPER-614</a>] -         Generic stats interface, which multiple providers can be plugged into
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-618'>BOOKKEEPER-618</a>] -         Better resolution of bookie address
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-627'>BOOKKEEPER-627</a>] -         LedgerDirsMonitor is missing thread name
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-630'>BOOKKEEPER-630</a>] -         Add tag to o.a.b.net.* to indict which release of hadoop they came from, move DNS to o.a.b.net.* and indent
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-637'>BOOKKEEPER-637</a>] -         NoSuchEntry exception when reading an entry from a bookie should not print ERROR level message
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-640'>BOOKKEEPER-640</a>] -         Log improvement - add shutdown/exit log message for the bookie services
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-645'>BOOKKEEPER-645</a>] -         Bookkeeper shell command to get a list of readonly bookies 
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-661'>BOOKKEEPER-661</a>] -         Turn readonly back to writable if spaces are reclaimed.
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-662'>BOOKKEEPER-662</a>] -         Major GC should kick in immediately if remaining space reaches a warning threshold
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-666'>BOOKKEEPER-666</a>] -         Naming threads of ExecutorService
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-699'>BOOKKEEPER-699</a>] -         Codahale metrics implementation of stats API
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-701'>BOOKKEEPER-701</a>] -         Improve exception handling of Bookkeeper threads
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-732'>BOOKKEEPER-732</a>] -         Add env variable ENTRY_FORMATTER_CLASS to the bkenv.sh
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-747'>BOOKKEEPER-747</a>] -         Implement register/unregister LedgerMetadataListener in MSLedgerManagerFactory
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-756'>BOOKKEEPER-756</a>] -         Use HashedwheelTimer for request timeouts for PCBC
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-758'>BOOKKEEPER-758</a>] -         Add TryReadLastAddConfirmed API
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-781'>BOOKKEEPER-781</a>] -         Fix OOM on Hedwig Tests
</li>
</ul>
    
<h2>        New Feature
</h2>
<ul>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-257'>BOOKKEEPER-257</a>] -         Ability to list all ledgers
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-562'>BOOKKEEPER-562</a>] -         Ability to tell if a ledger is closed or not
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-736'>BOOKKEEPER-736</a>] -         Stats for AutoRecovery
</li>
</ul>
                                
<h2>        Task
</h2>
<ul>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-789'>BOOKKEEPER-789</a>] -         Update README to reflect bookkeeper modules
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-790'>BOOKKEEPER-790</a>] -         Add JNA license in NOTICE files
</li>
</ul>
        
<h2>        Test
</h2>
<ul>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-653'>BOOKKEEPER-653</a>] -         Timeout option is missing in few testcases
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-775'>BOOKKEEPER-775</a>] -         Improve MultipleThreadReadTest to reduce flakiness
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-776'>BOOKKEEPER-776</a>] -         Flaky test BookieRecoveryTest
</li>
</ul>
        
<h2>        Wish
</h2>
<ul>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-675'>BOOKKEEPER-675</a>] -         Log noise fixup before cutting 4.2.2
</li>
</ul>
