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.2.0</h1>
    
<h2>        Sub-task
</h2>
<ul>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-2'>BOOKKEEPER-2</a>] -         bookkeeper does not put enough meta-data in to do recovery properly
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-203'>BOOKKEEPER-203</a>] -         improve ledger manager interface to remove zookeeper dependency on metadata operations.
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-204'>BOOKKEEPER-204</a>] -         Provide a MetaStore interface, and a mock implementation.
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-205'>BOOKKEEPER-205</a>] -         implement a MetaStore based ledger manager for bookkeeper client.
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-246'>BOOKKEEPER-246</a>] -         Recording of underreplication of ledger entries
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-247'>BOOKKEEPER-247</a>] -         Detection of under replication
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-248'>BOOKKEEPER-248</a>] -         Rereplicating of under replicated data
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-250'>BOOKKEEPER-250</a>] -         Need a ledger manager like interface to manage metadata operations in Hedwig
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-259'>BOOKKEEPER-259</a>] -         Create a topic manager using versioned write for leader election
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-262'>BOOKKEEPER-262</a>] -         Implement a meta store based hedwig metadata manager.
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-272'>BOOKKEEPER-272</a>] -         Provide automatic mechanism to know bookie failures
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-278'>BOOKKEEPER-278</a>] -         Ability to disable auto recovery temporarily
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-283'>BOOKKEEPER-283</a>] -         Improve Hedwig Console to use Hedwig Metadata Manager.
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-293'>BOOKKEEPER-293</a>] -         Periodic checking of ledger replication status
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-299'>BOOKKEEPER-299</a>] -         Provide LedgerFragmentReplicator which should replicate the fragments found from LedgerChecker
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-304'>BOOKKEEPER-304</a>] -         Prepare bookie vs ledgers cache and will be used by the Auditor
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-310'>BOOKKEEPER-310</a>] -         Changes in hedwig server to support JMS spec
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-315'>BOOKKEEPER-315</a>] -         Ledger entries should be replicated sequentially instead of parallel.
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-317'>BOOKKEEPER-317</a>] -         Exceptions for replication
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-319'>BOOKKEEPER-319</a>] -         Manage auditing and replication processes
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-325'>BOOKKEEPER-325</a>] -         Delay the replication of a ledger if RW found that its last fragment is in underReplication.
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-331'>BOOKKEEPER-331</a>] -         Let hedwig support returning message seq id for publish requests.
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-332'>BOOKKEEPER-332</a>] -         Add SubscriptionPreferences to record all preferences for a subscription
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-333'>BOOKKEEPER-333</a>] -         server-side message filter
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-334'>BOOKKEEPER-334</a>] -         client-side message filter for java client.
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-335'>BOOKKEEPER-335</a>] -         client-side message filter for cpp client.
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-341'>BOOKKEEPER-341</a>] -         add documentation for bookkeeper ledger manager interface.
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-342'>BOOKKEEPER-342</a>] -         add documentation for hedwig metadata manager interface.
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-345'>BOOKKEEPER-345</a>] -         Detect IOExceptions on entrylogger and bookie should consider next ledger dir(if any)
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-346'>BOOKKEEPER-346</a>] -         Detect IOExceptions in LedgerCache and bookie should look at next ledger dir(if any)
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-347'>BOOKKEEPER-347</a>] -          Provide mechanism to detect r-o bookie by the bookie clients
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-364'>BOOKKEEPER-364</a>] -         re-factor hedwig java client to support both one-subscription-per-channel and multiplex-subscriptions-per-channel.
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-367'>BOOKKEEPER-367</a>] -         Server-Side Message Delivery Flow Control
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-368'>BOOKKEEPER-368</a>] -         Implementing multiplexing java client.
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-369'>BOOKKEEPER-369</a>] -         re-factor hedwig cpp client to provide better interface to support both one-subscription-per-channel and multiple-subscriptions-per-channel.
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-370'>BOOKKEEPER-370</a>] -         implement multiplexing cpp client.
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-375'>BOOKKEEPER-375</a>] -         Document about Auto replication service in BK
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-376'>BOOKKEEPER-376</a>] -         LedgerManagers should consider &#39;underreplication&#39; node as a special Znode
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-378'>BOOKKEEPER-378</a>] -         ReplicationWorker may not get ZK watcher notification on UnderReplication ledger lock deletion.
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-380'>BOOKKEEPER-380</a>] -         ZkLedgerUnderreplicationManager.markLedgerUnderreplicated() is adding duplicate missingReplicas while multiple bk failed for the same ledger
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-384'>BOOKKEEPER-384</a>] -         Clean up LedgerManagerFactory and LedgerManager usage in tests
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-385'>BOOKKEEPER-385</a>] -         replicateLedgerFragment should throw Exceptions in error conditions
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-386'>BOOKKEEPER-386</a>] -         It should not be possible to replicate a ledger fragment which is at the end of an open ledger
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-389'>BOOKKEEPER-389</a>] -         add documentation for message filter.
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-405'>BOOKKEEPER-405</a>] -         Let&#39;s add Thread name for ReplicationWorker thread.
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-409'>BOOKKEEPER-409</a>] -         Integration Test - Perform bookie rereplication cycle by Auditor-RW processes
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-411'>BOOKKEEPER-411</a>] -         Add CloseSubscription Request for multiplexing support
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-416'>BOOKKEEPER-416</a>] -         LedgerChecker returns underreplicated fragments for an closed ledger with no entries
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-417'>BOOKKEEPER-417</a>] -         Hierarchical zk underreplication manager should clean up its hierarchy when done to allow for fast acquisition of underreplicated entries
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-418'>BOOKKEEPER-418</a>] -         Store hostname of locker in replication lock
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-426'>BOOKKEEPER-426</a>] -         Make auditor Vote znode store a protobuf containing the host that voted
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-428'>BOOKKEEPER-428</a>] -         Expose command options in bookie scripts to disable/enable auto recovery temporarily
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-435'>BOOKKEEPER-435</a>] -         Create SubscriptionChannelManager to manage all subscription channel
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-440'>BOOKKEEPER-440</a>] -         Make Write/Delete SubscriptionData Restricted to Version
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-444'>BOOKKEEPER-444</a>] -         Refactor pending read op to make speculative reads possible
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-452'>BOOKKEEPER-452</a>] -         Rename ClientConfiguration multiplexing_enabled to subscription_connection_sharing_enabled
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-453'>BOOKKEEPER-453</a>] -         Extract commonality from MultiplexSubscribeResponseHandler and SimpleSubscribeResponseHandler and put into an abstract class
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-459'>BOOKKEEPER-459</a>] -         Rename metastore mock implementation to InMemory implementation
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-463'>BOOKKEEPER-463</a>] -         Refactor garbage collection code for ease to plugin different GC algorithm.
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-472'>BOOKKEEPER-472</a>] -         Provide an option to start Autorecovery along with Bookie Servers
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-490'>BOOKKEEPER-490</a>] -         add documentation for MetaStore interface
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-496'>BOOKKEEPER-496</a>] -         Ensure that the auditor and replication worker will shutdown if they lose their ZK session
</li>
</ul>
            
<h2>        Bug
</h2>
<ul>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-55'>BOOKKEEPER-55</a>] -         SubscribeReconnectRetryTask might retry subscription endlessly when another subscription is already successfully created previously
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-274'>BOOKKEEPER-274</a>] -         Hedwig cpp client library should not link to cppunit which is just used for test.
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-280'>BOOKKEEPER-280</a>] -         LedgerHandle.addEntry() should return an entryId
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-291'>BOOKKEEPER-291</a>] -         BKMBeanRegistry uses log4j directly
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-292'>BOOKKEEPER-292</a>] -         Test backward compatibility automatically between versions.
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-294'>BOOKKEEPER-294</a>] -         Not able to start the bookkeeper before the ZK session timeout.
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-296'>BOOKKEEPER-296</a>] -         It&#39;s better provide stop script for bookie
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-298'>BOOKKEEPER-298</a>] -         We run with preferIPv4Stack in the scripts but not in the tests
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-302'>BOOKKEEPER-302</a>] -         No more messages delivered when hub server scans messages over two ledgers.
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-303'>BOOKKEEPER-303</a>] -         LedgerMetadata should serialized using protobufs
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-306'>BOOKKEEPER-306</a>] -         Change C++ client to use gtest for testing
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-307'>BOOKKEEPER-307</a>] -         BookieShell introduces 4 findbugs warnings
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-322'>BOOKKEEPER-322</a>] -         New protobufs generates findbugs errors
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-324'>BOOKKEEPER-324</a>] -         Flakeyness in LedgerCreateDeleteTest
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-326'>BOOKKEEPER-326</a>] -         DeadLock during ledger recovery 
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-327'>BOOKKEEPER-327</a>] -         System.currentTimeMillis usage in BookKeeper
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-329'>BOOKKEEPER-329</a>] -         provide stop scripts for hub server
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-330'>BOOKKEEPER-330</a>] -         System.currentTimeMillis usage in Hedwig
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-336'>BOOKKEEPER-336</a>] -         bookie readEntries is taking more time if the ensemble has failed bookie(s)
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-337'>BOOKKEEPER-337</a>] -         Add entry fails with MetadataVersionException when last ensemble has morethan one bookie failures
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-338'>BOOKKEEPER-338</a>] -         Create Version.NEW and Version.ANY static instances of Version so that were not passing around nulls
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-343'>BOOKKEEPER-343</a>] -         Failed to register hedwig JMX beans in test cases
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-349'>BOOKKEEPER-349</a>] -         Entry logger should close all the chennels which are there in Map, instead of closing only current channel.
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-351'>BOOKKEEPER-351</a>] -         asyncAddEntry should not throw an exception
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-352'>BOOKKEEPER-352</a>] -         Should not use static ServerStats/BKStats instance in TestServerStats/TestBKStats
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-354'>BOOKKEEPER-354</a>] -         [BOOKKEEPER-296] [Documentation] Modify the bookkeeper start script and document the bookkeeper stop command in bookkeeperConfig.xml
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-355'>BOOKKEEPER-355</a>] -         Ledger recovery will mark ledger as closed with -1, in case of slow bookie is added to ensemble during  recovery add
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-365'>BOOKKEEPER-365</a>] -         Ledger will never recover if one of the quorum bookie is down forever and others dont have entry
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-371'>BOOKKEEPER-371</a>] -         NPE in hedwig hub client causes hedwig hub to shut down.
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-372'>BOOKKEEPER-372</a>] -         Check service name in bookie start/stop script.
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-381'>BOOKKEEPER-381</a>] -         ReadLastConfirmedOp&#39;s Logger class name is wrong
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-382'>BOOKKEEPER-382</a>] -         space missed at concatenations in GarbageCollectorThread logging
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-383'>BOOKKEEPER-383</a>] -         NPE in BookieJournalTest
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-387'>BOOKKEEPER-387</a>] -         BookKeeper Upgrade is not working.
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-392'>BOOKKEEPER-392</a>] -         Racey ConcurrentMap usage in java hedwig-client
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-395'>BOOKKEEPER-395</a>] -         HDFS dep transitively depends on a busted pom
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-396'>BOOKKEEPER-396</a>] -         Compilation issue in TestClient.java of BenchMark ( showing this in eclipse)
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-397'>BOOKKEEPER-397</a>] -         Make the hedwig client in RegionManager configurable.
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-403'>BOOKKEEPER-403</a>] -         ReReadMetadataCb is not executed in the thread responsible for that ledger
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-404'>BOOKKEEPER-404</a>] -         Deprecate non-SubscriptionOptions Subscriber Apis
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-408'>BOOKKEEPER-408</a>] -         BookieReadWriteTest will enter the endless loop and will not leave out
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-413'>BOOKKEEPER-413</a>] -         Hedwig C++ client: Rename RUN_AS_SSL_MODE to SSL_ENABLED
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-415'>BOOKKEEPER-415</a>] -         Rename DeliveryThrottle to MessageWindowSize
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-424'>BOOKKEEPER-424</a>] -         Bookie start is failing intermittently when zkclient connection delays
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-425'>BOOKKEEPER-425</a>] -         Cleanup Bookie id generation
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-427'>BOOKKEEPER-427</a>] -         TestConcurrentTopicAcquisition hangs every so often
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-434'>BOOKKEEPER-434</a>] -         [Hedwig CPP Client] Delay resolving default host until necessary.
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-436'>BOOKKEEPER-436</a>] -         Journal#rollLog may leak file handler
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-439'>BOOKKEEPER-439</a>] -         No more messages delivered after deleted consumed ledgers.
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-441'>BOOKKEEPER-441</a>] -         InMemorySubscriptionManager should back up top2sub2seq before change it
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-442'>BOOKKEEPER-442</a>] -         Failed to deliver messages due to inconsistency between SubscriptionState and LedgerRanges.
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-447'>BOOKKEEPER-447</a>] -         Bookie can fail to recover if index pages flushed before ledger flush acknowledged
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-454'>BOOKKEEPER-454</a>] -         hedwig c++ tester script assumes sh is bash
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-457'>BOOKKEEPER-457</a>] -         Create a format command for Hedwig to cleanup its metadata.
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-458'>BOOKKEEPER-458</a>] -         Annoy BKReadException error when changing ledger.
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-461'>BOOKKEEPER-461</a>] -         Delivery throughput degrades when there are lots of publishers w/ high traffic.
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-465'>BOOKKEEPER-465</a>] -         CreateNewLog may overwrite lastLogId with smaller value 
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-466'>BOOKKEEPER-466</a>] -         ZooKeeper test utility sets the port number as the tickTime
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-467'>BOOKKEEPER-467</a>] -         Allocate ports for testing dynamically
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-468'>BOOKKEEPER-468</a>] -         Remove &lt;echo&gt; from protobuf generation in hedwig
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-469'>BOOKKEEPER-469</a>] -         Remove System.out.println from TestLedgerManager
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-470'>BOOKKEEPER-470</a>] -         Possible infinite loop in simple.SubscribeReconnectCallback
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-471'>BOOKKEEPER-471</a>] -         Add scripts for preCommit testing
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-474'>BOOKKEEPER-474</a>] -         BookieReadWriteTest#testShutdown doesn&#39;t make sense
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-475'>BOOKKEEPER-475</a>] -         BookieRecoveryTest#testSyncBookieRecoveryToRandomBookiesCheckForDupes() iterates too much
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-477'>BOOKKEEPER-477</a>] -         In ReadOnlyBookieTest, we should wait for the bookie to die before asserting on it
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-479'>BOOKKEEPER-479</a>] -         Fix apache-rat issues in tree
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-480'>BOOKKEEPER-480</a>] -         Fix javac warnings
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-481'>BOOKKEEPER-481</a>] -         Fix javadoc warnings
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-482'>BOOKKEEPER-482</a>] -         Precommit is reporting findbugs errors in trunk
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-483'>BOOKKEEPER-483</a>] -         precommit tests only check toplevel rat file, not the one for submodules.
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-484'>BOOKKEEPER-484</a>] -         Misc fixes for test scripts
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-485'>BOOKKEEPER-485</a>] -         TestFencing hung
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-493'>BOOKKEEPER-493</a>] -         moveLedgerIndexFile might have chance pickup same directory
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-497'>BOOKKEEPER-497</a>] -         GcLedgersTest has a potential race
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-498'>BOOKKEEPER-498</a>] -         BookieRecoveryTest.tearDown NPE
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-500'>BOOKKEEPER-500</a>] -         Fencing doesn&#39;t work when restarting bookies.
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-503'>BOOKKEEPER-503</a>] -         The test case of TestThrottlingDelivery#testServerSideThrottle failed sometimes
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-504'>BOOKKEEPER-504</a>] -         Fix findbugs warning in PendingReadOp
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-507'>BOOKKEEPER-507</a>] -         Race condition happens if closeSubscription and subscribe happened at the same time (in multiplexed client).
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-509'>BOOKKEEPER-509</a>] -         TestBookKeeperPersistenceManager failed on latest trunk
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-511'>BOOKKEEPER-511</a>] -         BookieShell is very noisy
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-512'>BOOKKEEPER-512</a>] -         BookieZkExpireTest fails periodically
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-513'>BOOKKEEPER-513</a>] -         TestMessageFilter fails periodically
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-514'>BOOKKEEPER-514</a>] -         TestDeadLock hanging sometimes
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-520'>BOOKKEEPER-520</a>] -         BookieFailureTest hangs on precommit build
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-522'>BOOKKEEPER-522</a>] -         TestHedwigHub is failing silently on Jenkins
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-524'>BOOKKEEPER-524</a>] -         Bookie journal filesystem gets full after SyncThread is terminated with exception
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-530'>BOOKKEEPER-530</a>] -         data might be lost during compaction.
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-531'>BOOKKEEPER-531</a>] -         Cache thread should wait until old entries are collected
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-532'>BOOKKEEPER-532</a>] -         AbstractSubscriptionManager#AcquireOp read subscriptions every time even it already owned the topic
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-533'>BOOKKEEPER-533</a>] -         TestSubAfterCloseSub fails strangely in tests
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-534'>BOOKKEEPER-534</a>] -         Flakeyness in AuditorBookieTest
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-538'>BOOKKEEPER-538</a>] -         Race condition in BookKeeper#close
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-539'>BOOKKEEPER-539</a>] -         ClientNotSubscribedException &amp; doesn&#39;t receive enough messages in TestThrottlingDelivery#testServerSideThrottle
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-543'>BOOKKEEPER-543</a>] -         Read zk host list in a wrong way in hedwig server
</li>
</ul>
            
<h2>        Improvement
</h2>
<ul>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-32'>BOOKKEEPER-32</a>] -         Clean up LOG.debug statements
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-143'>BOOKKEEPER-143</a>] -         Add SSL support for hedwig cpp client
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-191'>BOOKKEEPER-191</a>] -         Hub server should change ledger to write, so consumed messages have chance to be garbage collected.
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-289'>BOOKKEEPER-289</a>] -         mvn clean doesn&#39;t remove test output files
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-318'>BOOKKEEPER-318</a>] -         Spelling mistake in MultiCallback log message.
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-320'>BOOKKEEPER-320</a>] -         Let hedwig cpp client could publish messages using Message object instead of string.
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-328'>BOOKKEEPER-328</a>] -         Bookie DeathWatcher is missing thread name
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-339'>BOOKKEEPER-339</a>] -         Let hedwig cpp client support returning message seq id for publish requests.
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-340'>BOOKKEEPER-340</a>] -         Test backward compatibility for hedwig between different versions.
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-388'>BOOKKEEPER-388</a>] -         Document bookie format command
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-394'>BOOKKEEPER-394</a>] -         CompositeException message is not useful
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-422'>BOOKKEEPER-422</a>] -         Simplify AbstractSubscriptionManager
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-430'>BOOKKEEPER-430</a>] -         Remove manual bookie registration from overview
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-431'>BOOKKEEPER-431</a>] -         Duplicate definition of COOKIES_NODE
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-476'>BOOKKEEPER-476</a>] -         Log to file during tests
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-491'>BOOKKEEPER-491</a>] -         Hedwig doc for configuration
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-495'>BOOKKEEPER-495</a>] -         Revise BK config doc
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-523'>BOOKKEEPER-523</a>] -         Every test should have a timeout
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-529'>BOOKKEEPER-529</a>] -         stopServingSubscriber in delivery manager should remove stub callbacks in ReadAheadCache
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-540'>BOOKKEEPER-540</a>] -         #stopServingSubscriber when channel is disconnected.
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-541'>BOOKKEEPER-541</a>] -         Add guava to notice file
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-542'>BOOKKEEPER-542</a>] -         Remove trailing spaces in IndexCorruptionTest
</li>
</ul>
    
<h2>        New Feature
</h2>
<ul>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-183'>BOOKKEEPER-183</a>] -         Provide tools to read/check data files in bookie server
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-208'>BOOKKEEPER-208</a>] -         Separate write quorum from ack quorum
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-252'>BOOKKEEPER-252</a>] -         Hedwig: provide a subscription mode to kill other subscription channel when hedwig client is used as a proxy-style server.
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-300'>BOOKKEEPER-300</a>] -         Create Bookie format command
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-399'>BOOKKEEPER-399</a>] -         Let hub server configure write quorum and ack quorum.
</li>
</ul>
                        
<h2>        Task
</h2>
<ul>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-487'>BOOKKEEPER-487</a>] -         Add existed hub server settings to configuration template file
</li>
</ul>
            
<h2>        Test
</h2>
<ul>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-460'>BOOKKEEPER-460</a>] -         LedgerDeleteTest checks wrong place for log file
</li>
</ul>
