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.4.0</h1>        
    
<h2>        Sub-task
</h2>
<ul>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-438'>BOOKKEEPER-438</a>] -         Move ledger id generation out of LedgerManager
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-634'>BOOKKEEPER-634</a>] -         Provide admin tool to rename bookie identifier in ledger metadata
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-796'>BOOKKEEPER-796</a>] -         Make bookkeeper client use reconnectable zookeeper wrapper
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-837'>BOOKKEEPER-837</a>] -         UpdateLedgerOp - Replace AbstractFuture with SettableFuture
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-855'>BOOKKEEPER-855</a>] -         handle session expire event in bookie
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-867'>BOOKKEEPER-867</a>] -         New Client API to allow applications pass-in EntryId.
</li>
</ul>
                            
<h2>        Bug
</h2>
<ul>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-578'>BOOKKEEPER-578</a>] -         LedgerCacheImpl is reserving 1/3 of Heap size but allocates NonHeap memory
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-594'>BOOKKEEPER-594</a>] -         AutoRecovery shutting down on SyncDisconnected
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-665'>BOOKKEEPER-665</a>] -         BK client should not try to read entries from non-available bookies
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-695'>BOOKKEEPER-695</a>] -         Some entry logs are not removed from the bookie storage
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-769'>BOOKKEEPER-769</a>] -         Remove hedwig from source tree
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-793'>BOOKKEEPER-793</a>] -         Move to java 7
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-794'>BOOKKEEPER-794</a>] -         BookkeeperProtocol.Response.status is completely ignored
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-795'>BOOKKEEPER-795</a>] -         Race condition causes writes to hang if ledger is fenced
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-797'>BOOKKEEPER-797</a>] -         IllegalArgumentException when calling CodahaleOpStatsLogger#toOpStatsData()
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-799'>BOOKKEEPER-799</a>] -         Distribution schedule coverage sets don&#39;t take gaps in response lists into account when writequorum &gt; ackquorum
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-800'>BOOKKEEPER-800</a>] -         Expose whether a ledger is closed or not
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-801'>BOOKKEEPER-801</a>] -         Bookkeeper client tutorial
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-802'>BOOKKEEPER-802</a>] -         Bookkeeper protocol documentation
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-803'>BOOKKEEPER-803</a>] -         Guide for making a replicated log out of ledgers
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-804'>BOOKKEEPER-804</a>] -         Client program is not terminated when using openLedgerNoRecovery
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-805'>BOOKKEEPER-805</a>] -         NullPointException in bookie server when using twitter-ostrich-provider
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-809'>BOOKKEEPER-809</a>] -         Wrong metric on LedgerDeleteOp and LedgerOpenOp
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-813'>BOOKKEEPER-813</a>] -         BookieShell doesn&#39;t find index directory 
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-814'>BOOKKEEPER-814</a>] -         clean up temp files that generated by test cases.
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-815'>BOOKKEEPER-815</a>] -         Ledger fence state is lost when the ledger file is evicted
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-821'>BOOKKEEPER-821</a>] -         Failing to write lastId to ledger directories should not fail startup of bookies
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-823'>BOOKKEEPER-823</a>] -         Clean up temp files created by hedwig tests
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-828'>BOOKKEEPER-828</a>] -         Script for updating docs on website from master branch
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-831'>BOOKKEEPER-831</a>] -         Outdated links in tutorial
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-833'>BOOKKEEPER-833</a>] -         EntryLogId and EntryLogLimit should not be larger than Integer.MAX_VALUE
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-834'>BOOKKEEPER-834</a>] -         test case error in test class TestDiskChecker
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-835'>BOOKKEEPER-835</a>] -         Update copyright for 2015 on all active branches
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-838'>BOOKKEEPER-838</a>] -         ForceWriteThread::run() leaks “logFile.close()” when interrupt comes
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-839'>BOOKKEEPER-839</a>] -         AuditorPeriodicCheckTest timeout
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-840'>BOOKKEEPER-840</a>] -         Deadlock on flushLock on compaction
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-848'>BOOKKEEPER-848</a>] -         Use volatile for lastAddConfirmed
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-854'>BOOKKEEPER-854</a>] -         NPE on InterleavedLedgerStorage.onRotateEntryLog
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-858'>BOOKKEEPER-858</a>] -         Fix broken links and typos in bookkeeper documents
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-863'>BOOKKEEPER-863</a>] -         Potential resource leak with unclosed LedgerManager in BookieShell
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-883'>BOOKKEEPER-883</a>] -         Test timeout in bookkeeper-benchmark
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-890'>BOOKKEEPER-890</a>] -         Concurrent modification exception when removing listener in Bookkeeper ZK ledger manager
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-891'>BOOKKEEPER-891</a>] -         Read entries failure should trigger callback only once
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-893'>BOOKKEEPER-893</a>] -         bookie exited with status 0 on journal I/O exception
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-897'>BOOKKEEPER-897</a>] -         Fix findbugs warnings and missing apache license header
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-898'>BOOKKEEPER-898</a>] -         Underreplication doesn&#39;t get triggered when a read only bookie is shut down
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-899'>BOOKKEEPER-899</a>] -         Bookie should return to read-write mode once the disk usage drops before the threshold
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-900'>BOOKKEEPER-900</a>] -         read only bookie runs replicator and does not release the under replicated lock after failing
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-902'>BOOKKEEPER-902</a>] -         Test failures in EntryLogTest
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-904'>BOOKKEEPER-904</a>] -         test BookieInitializationTest.testDuplicateBookieServerStartup fails on non-english machines
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-909'>BOOKKEEPER-909</a>] -         ZooKeeper of LocalBookkeeper should use the correct tickTime
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-910'>BOOKKEEPER-910</a>] -         In LocalBookkeeper, Zookeeper server and client use different host addresses
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-911'>BOOKKEEPER-911</a>] -         Fix TestReplicationWorker test failures
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-913'>BOOKKEEPER-913</a>] -         Fix flakiness in TestBackwardCompat
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-914'>BOOKKEEPER-914</a>] -         ReadOnlyBookieTest.testBookieShouldTurnWritableFromReadOnly is intermettently failing
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-917'>BOOKKEEPER-917</a>] -         LocalBookKeeperTest seems to be silently failing
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-919'>BOOKKEEPER-919</a>] -         Auditor is sometimes marking as failed a bookie switching from available to read-only mode
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-921'>BOOKKEEPER-921</a>] -         Typo in LocalBookkeeper: Use InetAddress.getHostAddress instead of InetAddress
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-925'>BOOKKEEPER-925</a>] -         Fix FindBugs discovered issues in master
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-926'>BOOKKEEPER-926</a>] -         Compacted entries are not properly synced before updating index
</li>
</ul>
        
<h2>        Documentation
</h2>
<ul>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-870'>BOOKKEEPER-870</a>] -         Change the default value for bookie settings.
</li>
</ul>
                
<h2>        Improvement
</h2>
<ul>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-537'>BOOKKEEPER-537</a>] -         Handling session expire event
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-687'>BOOKKEEPER-687</a>] -         Use static final Logger for hedwig related modules
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-760'>BOOKKEEPER-760</a>] -         Don&#39;t close PCBC proactively if bookies disappeared from zookeeper znodes.
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-810'>BOOKKEEPER-810</a>] -         Allow to configure TCP connect timeout
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-811'>BOOKKEEPER-811</a>] -         Recovery tool doesn&#39;t remove cookie after recovering one bookie
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-820'>BOOKKEEPER-820</a>] -         print out fi.isFenced() in BookieShell
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-827'>BOOKKEEPER-827</a>] -         change throttle in GarbageCollector to use either &quot;by entry&quot; or &quot;by byte&quot;
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-830'>BOOKKEEPER-830</a>] -         Documentation has no structure
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-832'>BOOKKEEPER-832</a>] -          Allow starting bookie in ReadOnly mode
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-836'>BOOKKEEPER-836</a>] -         disable compaction when disk becomes full, otherwise compaction will fill up disk quickly
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-841'>BOOKKEEPER-841</a>] -         Bookie should calculate ledgers map writing a new entry log file
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-844'>BOOKKEEPER-844</a>] -         Add more metrics about latency and bytes characteristics on bookie operations 
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-849'>BOOKKEEPER-849</a>] -         Collect stats with sub-milliseconds precision
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-850'>BOOKKEEPER-850</a>] -         Use nanoseconds to calculate poll timeout when doing group commit
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-851'>BOOKKEEPER-851</a>] -         Configurable LedgerStorageImplementation
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-862'>BOOKKEEPER-862</a>] -         Add tracing and stats to OrderedSafeExecutor for debugging slow tasks
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-866'>BOOKKEEPER-866</a>] -         Fix compile issue when Updating junit to latest release version( 4.12) in the test of  Bookkeeper-server.
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-877'>BOOKKEEPER-877</a>] -         Script for generating patch for reviews
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-880'>BOOKKEEPER-880</a>] -         Make LedgerHandle implement AutoCloseable
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-885'>BOOKKEEPER-885</a>] -         Script to merge github pull request
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-886'>BOOKKEEPER-886</a>] -         Allow to disable ledgers operation throttling
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-888'>BOOKKEEPER-888</a>] -         Dispatch individual callbacks from journal in different threads
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-889'>BOOKKEEPER-889</a>] -         BookKeeper client should try not to use bookies with errors/timeouts when forming a new ensemble
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-894'>BOOKKEEPER-894</a>] -         Read ledger entries from the bookie shell
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-895'>BOOKKEEPER-895</a>] -         bookies should not retain ledgers which no longer belong to them
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-920'>BOOKKEEPER-920</a>] -         Extend bk-merge-pr.py to add more info to Jira ticket when merging
</li>
</ul>
            
<h2>        New Feature
</h2>
<ul>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-879'>BOOKKEEPER-879</a>] -         Record ledger creation time
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-901'>BOOKKEEPER-901</a>] -         Add an authentication framework
</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>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-868'>BOOKKEEPER-868</a>] -         Add ADD_ENTRY quorum timeout
</li>
</ul>
        
<h2>        Test
</h2>
<ul>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-846'>BOOKKEEPER-846</a>] -         TestLedgerChecker times out
</li>
<li>[<a href='https://issues.apache.org/jira/browse/BOOKKEEPER-892'>BOOKKEEPER-892</a>] -         Add a sanity test to help identify bookie nodes with problems that prevent writes but is still registered in ZK
</li>
</ul>
        