Updated site at revision
diff --git a/content/404.html b/content/404.html
index 8443968..4baa9d3 100644
--- a/content/404.html
+++ b/content/404.html
@@ -4,12 +4,12 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">Page Not Found | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/404.html"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docusaurus_tag" content="default"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docsearch:docusaurus_tag" content="default"><meta data-rh="true" property="og:title" content="Page Not Found | Apache BookKeeper"><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/404.html"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/404.html" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/404.html" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
-<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navbar__brand" href="/"><div class="navbar__logo"><img src="/img/bk-logo.svg" alt="Apache Bookkeeper" class="themedImage_ToTc themedImage--light_HNdA"><img src="/img/bk-logo.svg" alt="Apache Bookkeeper" class="themedImage_ToTc themedImage--dark_i4oU"></div><b class="navbar__title text--truncate">Apache BookKeeper</b></a><a class="navbar__item navbar__link" href="/docs/overview/">Documentation</a><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Community</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/community/mailing-lists">Mailing lists</a></li><li><a class="dropdown__link" href="/community/slack">Slack</a></li><li><a href="https://github.com/apache/bookkeeper/issues" target="_blank" rel="noopener noreferrer" class="dropdown__link">Github issues<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a class="dropdown__link" href="/community/releases">Release management</a></li><li><a class="dropdown__link" href="/community/meeting">Community meetings</a></li><li><a class="dropdown__link" href="/community/contributing">Contribution guide</a></li><li><a class="dropdown__link" href="/community/coding-guide">Coding guide</a></li><li><a class="dropdown__link" href="/community/testing">Testing guide</a></li><li><a class="dropdown__link" href="/community/issue-report">Issue report guide</a></li><li><a class="dropdown__link" href="/community/release-guide">Release guide</a></li><li><a class="dropdown__link" href="/community/presentations">Presentations</a></li><li><a class="dropdown__link" href="/community/bookkeeper-proposals">BookKeeper proposals (BP)</a></li></ul></div><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Project</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/project/who">Who are we?</a></li><li><a class="dropdown__link" href="/project/bylaws">Bylaws</a></li><li><a href="https://apache.org/licenses" target="_blank" rel="noopener noreferrer" class="dropdown__link">License<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a class="dropdown__link" href="/project/privacy">Privacy policy</a></li><li><a href="https://www.apache.org/foundation/sponsorship.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Sponsorship<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a href="https://www.apache.org/foundation/thanks.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Thanks<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div></div><div class="navbar__items navbar__items--right"><div class="navbar__item dropdown dropdown--hoverable dropdown--right"><a class="navbar__link" aria-haspopup="true" aria-expanded="false" role="button" href="/docs/admin/autorecovery">4.17.0</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/docs/next/overview/">Next</a></li><li><a class="dropdown__link" href="/docs/admin/autorecovery">4.17.0</a></li><li><a class="dropdown__link" href="/docs/4.16.5/overview/">4.16.5</a></li><li><a class="dropdown__link" href="/docs/4.15.5/overview/">4.15.5</a></li><li><a class="dropdown__link" href="/docs/4.14.8/overview/">4.14.8</a></li><li><a class="dropdown__link" href="/docs/4.13.0/overview/">4.13.0</a></li><li><a class="dropdown__link" href="/docs/4.12.1/overview/">4.12.1</a></li><li><a class="dropdown__link" href="/docs/4.11.1/overview/">4.11.1</a></li><li><a class="dropdown__link" href="/docs/4.10.0/overview/">4.10.0</a></li><li><a class="dropdown__link" href="/docs/4.9.2/overview/">4.9.2</a></li><li><a class="dropdown__link" href="/docs/4.8.2/overview/">4.8.2</a></li><li><a class="dropdown__link" href="/docs/4.7.3/overview/">4.7.3</a></li><li><a class="dropdown__link" href="/docs/4.6.2/overview/">4.6.2</a></li><li><a class="dropdown__link" href="/docs/4.5.1/overview/">4.5.1</a></li></ul></div><a class="navbar__item navbar__link" href="/releases">Download</a><div class="toggle_vylO colorModeToggle_DEke"><button class="clean-btn toggleButton_gllP toggleButtonDisabled_aARS" type="button" disabled="" title="Switch between dark and light mode (currently light mode)" aria-label="Switch between dark and light mode (currently light mode)" aria-live="polite"><svg viewBox="0 0 24 24" width="24" height="24" class="lightToggleIcon_pyhR"><path fill="currentColor" d="M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"></path></svg><svg viewBox="0 0 24 24" width="24" height="24" class="darkToggleIcon_wfgR"><path fill="currentColor" d="M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"></path></svg></button></div><div class="searchBox_ZlJk"></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div></nav><div id="docusaurus_skipToContent_fallback" class="main-wrapper mainWrapper_z2l0"><main class="container margin-vert--xl"><div class="row"><div class="col col--6 col--offset-3"><h1 class="hero__title">Page Not Found</h1><p>We could not find what you were looking for.</p><p>Please contact the owner of the site that linked you to the original URL and let them know their link is broken.</p></div></div></main></div><footer class="footer footer--dark"><div class="container container-fluid"><div class="row footer__links"><div class="col footer__col"><div class="footer__title">Documentation</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/docs/overview">Overview</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/getting-started/installation">Getting started</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/deployment/manual">Deployment</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/admin/bookies">Administration</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/api/overview">API</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/security/overview">Security</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/development/protocol">Development</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/reference/config">Reference</a></li></ul></div><div class="col footer__col"><div class="footer__title">Community</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/community/mailing-lists">Mailing lists</a></li><li class="footer__item"><a class="footer__link-item" href="/community/slack">Slack</a></li><li class="footer__item"><a href="https://github.com/apache/bookkeeper" target="_blank" rel="noopener noreferrer" class="footer__link-item">Github<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a href="https://twitter.com/asfbookkeeper" target="_blank" rel="noopener noreferrer" class="footer__link-item">Twitter<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div><div class="col footer__col"><div class="footer__title">Project</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/project/who">Who are we?</a></li><li class="footer__item"><a class="footer__link-item" href="/project/bylaws">Bylaws</a></li><li class="footer__item"><a href="https://apache.org/licenses" target="_blank" rel="noopener noreferrer" class="footer__link-item">License<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a class="footer__link-item" href="/project/privacy">Privacy policy</a></li><li class="footer__item"><a href="https://www.apache.org/foundation/sponsorship.html" target="_blank" rel="noopener noreferrer" class="footer__link-item">Sponsorship<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a href="https://www.apache.org/foundation/thanks.html" target="_blank" rel="noopener noreferrer" class="footer__link-item">Thanks<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div></div><div class="footer__bottom text--center"><div class="footer__copyright"><footer class="footer">
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navbar__brand" href="/"><div class="navbar__logo"><img src="/img/bk-logo.svg" alt="Apache Bookkeeper" class="themedImage_ToTc themedImage--light_HNdA"><img src="/img/bk-logo.svg" alt="Apache Bookkeeper" class="themedImage_ToTc themedImage--dark_i4oU"></div><b class="navbar__title text--truncate">Apache BookKeeper</b></a><a class="navbar__item navbar__link" href="/docs/overview/">Documentation</a><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Community</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/community/mailing-lists">Mailing lists</a></li><li><a class="dropdown__link" href="/community/slack">Slack</a></li><li><a href="https://github.com/apache/bookkeeper/issues" target="_blank" rel="noopener noreferrer" class="dropdown__link">Github issues<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a class="dropdown__link" href="/community/releases">Release management</a></li><li><a class="dropdown__link" href="/community/meeting">Community meetings</a></li><li><a class="dropdown__link" href="/community/contributing">Contribution guide</a></li><li><a class="dropdown__link" href="/community/coding-guide">Coding guide</a></li><li><a class="dropdown__link" href="/community/testing">Testing guide</a></li><li><a class="dropdown__link" href="/community/issue-report">Issue report guide</a></li><li><a class="dropdown__link" href="/community/release-guide">Release guide</a></li><li><a class="dropdown__link" href="/community/presentations">Presentations</a></li><li><a class="dropdown__link" href="/community/bookkeeper-proposals">BookKeeper proposals (BP)</a></li></ul></div><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Project</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/project/who">Who are we?</a></li><li><a class="dropdown__link" href="/project/bylaws">Bylaws</a></li><li><a href="https://apache.org/licenses" target="_blank" rel="noopener noreferrer" class="dropdown__link">License<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a class="dropdown__link" href="/project/privacy">Privacy policy</a></li><li><a href="https://www.apache.org/foundation/sponsorship.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Sponsorship<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a href="https://www.apache.org/foundation/thanks.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Thanks<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div></div><div class="navbar__items navbar__items--right"><div class="navbar__item dropdown dropdown--hoverable dropdown--right"><a class="navbar__link" aria-haspopup="true" aria-expanded="false" role="button" href="/docs/overview/">4.17.0</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/docs/next/overview/">Next</a></li><li><a class="dropdown__link" href="/docs/overview/">4.17.0</a></li><li><a class="dropdown__link" href="/docs/4.16.5/overview/">4.16.5</a></li><li><a class="dropdown__link" href="/docs/4.15.5/overview/">4.15.5</a></li><li><a class="dropdown__link" href="/docs/4.14.8/overview/">4.14.8</a></li><li><a class="dropdown__link" href="/docs/4.13.0/overview/">4.13.0</a></li><li><a class="dropdown__link" href="/docs/4.12.1/overview/">4.12.1</a></li><li><a class="dropdown__link" href="/docs/4.11.1/overview/">4.11.1</a></li><li><a class="dropdown__link" href="/docs/4.10.0/overview/">4.10.0</a></li><li><a class="dropdown__link" href="/docs/4.9.2/overview/">4.9.2</a></li><li><a class="dropdown__link" href="/docs/4.8.2/overview/">4.8.2</a></li><li><a class="dropdown__link" href="/docs/4.7.3/overview/">4.7.3</a></li><li><a class="dropdown__link" href="/docs/4.6.2/overview/">4.6.2</a></li><li><a class="dropdown__link" href="/docs/4.5.1/overview/">4.5.1</a></li></ul></div><a class="navbar__item navbar__link" href="/releases">Download</a><div class="toggle_vylO colorModeToggle_DEke"><button class="clean-btn toggleButton_gllP toggleButtonDisabled_aARS" type="button" disabled="" title="Switch between dark and light mode (currently light mode)" aria-label="Switch between dark and light mode (currently light mode)" aria-live="polite"><svg viewBox="0 0 24 24" width="24" height="24" class="lightToggleIcon_pyhR"><path fill="currentColor" d="M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"></path></svg><svg viewBox="0 0 24 24" width="24" height="24" class="darkToggleIcon_wfgR"><path fill="currentColor" d="M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"></path></svg></button></div><div class="searchBox_ZlJk"></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div></nav><div id="docusaurus_skipToContent_fallback" class="main-wrapper mainWrapper_z2l0"><main class="container margin-vert--xl"><div class="row"><div class="col col--6 col--offset-3"><h1 class="hero__title">Page Not Found</h1><p>We could not find what you were looking for.</p><p>Please contact the owner of the site that linked you to the original URL and let them know their link is broken.</p></div></div></main></div><footer class="footer footer--dark"><div class="container container-fluid"><div class="row footer__links"><div class="col footer__col"><div class="footer__title">Documentation</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/docs/overview">Overview</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/getting-started/installation">Getting started</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/deployment/manual">Deployment</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/admin/bookies">Administration</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/api/overview">API</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/security/overview">Security</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/development/protocol">Development</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/reference/config">Reference</a></li></ul></div><div class="col footer__col"><div class="footer__title">Community</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/community/mailing-lists">Mailing lists</a></li><li class="footer__item"><a class="footer__link-item" href="/community/slack">Slack</a></li><li class="footer__item"><a href="https://github.com/apache/bookkeeper" target="_blank" rel="noopener noreferrer" class="footer__link-item">Github<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a href="https://twitter.com/asfbookkeeper" target="_blank" rel="noopener noreferrer" class="footer__link-item">Twitter<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div><div class="col footer__col"><div class="footer__title">Project</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/project/who">Who are we?</a></li><li class="footer__item"><a class="footer__link-item" href="/project/bylaws">Bylaws</a></li><li class="footer__item"><a href="https://apache.org/licenses" target="_blank" rel="noopener noreferrer" class="footer__link-item">License<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a class="footer__link-item" href="/project/privacy">Privacy policy</a></li><li class="footer__item"><a href="https://www.apache.org/foundation/sponsorship.html" target="_blank" rel="noopener noreferrer" class="footer__link-item">Sponsorship<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a href="https://www.apache.org/foundation/thanks.html" target="_blank" rel="noopener noreferrer" class="footer__link-item">Thanks<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div></div><div class="footer__bottom text--center"><div class="footer__copyright"><footer class="footer">
         <div class="container">
           <div class="content has-text-centered">
             <p>
@@ -22,7 +22,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/assets/js/0e2af38d.5b77f36e.js b/content/assets/js/0e2af38d.5b77f36e.js
new file mode 100644
index 0000000..8aa96b1
--- /dev/null
+++ b/content/assets/js/0e2af38d.5b77f36e.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunksite_3=self.webpackChunksite_3||[]).push([[9041],{3905:function(e,t,n){n.d(t,{Zo:function(){return c},kt:function(){return m}});var o=n(67294);function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function r(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,o)}return n}function i(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?r(Object(n),!0).forEach((function(t){a(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):r(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function s(e,t){if(null==e)return{};var n,o,a=function(e,t){if(null==e)return{};var n,o,a={},r=Object.keys(e);for(o=0;o<r.length;o++)n=r[o],t.indexOf(n)>=0||(a[n]=e[n]);return a}(e,t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(o=0;o<r.length;o++)n=r[o],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}var l=o.createContext({}),p=function(e){var t=o.useContext(l),n=t;return e&&(n="function"==typeof e?e(t):i(i({},t),e)),n},c=function(e){var t=p(e.components);return o.createElement(l.Provider,{value:t},e.children)},u="mdxType",k={inlineCode:"code",wrapper:function(e){var t=e.children;return o.createElement(o.Fragment,{},t)}},h=o.forwardRef((function(e,t){var n=e.components,a=e.mdxType,r=e.originalType,l=e.parentName,c=s(e,["components","mdxType","originalType","parentName"]),u=p(n),h=a,m=u["".concat(l,".").concat(h)]||u[h]||k[h]||r;return n?o.createElement(m,i(i({ref:t},c),{},{components:n})):o.createElement(m,i({ref:t},c))}));function m(e,t){var n=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var r=n.length,i=new Array(r);i[0]=h;var s={};for(var l in t)hasOwnProperty.call(t,l)&&(s[l]=t[l]);s.originalType=e,s[u]="string"==typeof e?e:a,i[1]=s;for(var p=2;p<r;p++)i[p]=n[p];return o.createElement.apply(null,i)}return o.createElement.apply(null,n)}h.displayName="MDXCreateElement"},80103:function(e,t,n){n.r(t),n.d(t,{assets:function(){return l},contentTitle:function(){return i},default:function(){return k},frontMatter:function(){return r},metadata:function(){return s},toc:function(){return p}});var o=n(83117),a=(n(67294),n(3905));const r={id:"sasl",title:"Authentication using SASL"},i=void 0,s={unversionedId:"security/sasl",id:"version-4.17.0/security/sasl",title:"Authentication using SASL",description:"Bookies support client authentication via SASL. Currently we only support GSSAPI (Kerberos). We will start",source:"@site/versioned_docs/version-4.17.0/security/sasl.md",sourceDirName:"security",slug:"/security/sasl",permalink:"/docs/security/sasl",draft:!1,tags:[],version:"4.17.0",frontMatter:{id:"sasl",title:"Authentication using SASL"},sidebar:"docsSidebar",previous:{title:"Encryption and Authentication using TLS",permalink:"/docs/security/tls"},next:{title:"ZooKeeper Authentication",permalink:"/docs/security/zookeeper"}},l={},p=[{value:"SASL configuration for Bookies",id:"sasl-configuration-for-bookies",level:2},{value:"Important Notes",id:"notes",level:4},{value:"SASL configuration for Clients",id:"sasl-configuration-for-clients",level:2},{value:"Authentication using SASL/Kerberos",id:"kerberos",level:2},{value:"Prerequisites",id:"prerequisites",level:3},{value:"Kerberos",id:"kerberos",level:4},{value:"Kerberos Principals",id:"kerberos-principals",level:4},{value:"All hosts must be reachable using hostnames",id:"all-hosts-must-be-reachable-using-hostnames",level:5},{value:"Configuring Bookies",id:"configuring-bookies",level:3},{value:"Configuring Clients",id:"configuring-clients",level:3},{value:"Enabling Logging for SASL",id:"enabling-logging-for-sasl",level:2}],c={toc:p},u="wrapper";function k(e){let{components:t,...n}=e;return(0,a.kt)(u,(0,o.Z)({},c,n,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("p",null,"Bookies support client authentication via SASL. Currently we only support GSSAPI (Kerberos). We will start\nwith a general description of how to configure ",(0,a.kt)("inlineCode",{parentName:"p"},"SASL")," for bookies, clients and autorecovery daemons, followed\nby mechanism-specific details and wrap up with some operational details."),(0,a.kt)("h2",{id:"sasl-configuration-for-bookies"},"SASL configuration for Bookies"),(0,a.kt)("ol",null,(0,a.kt)("li",{parentName:"ol"},(0,a.kt)("p",{parentName:"li"},"Select the mechanisms to enable in the bookies. ",(0,a.kt)("inlineCode",{parentName:"p"},"GSSAPI")," is the only mechanism currently supported by BookKeeper.")),(0,a.kt)("li",{parentName:"ol"},(0,a.kt)("p",{parentName:"li"},"Add a ",(0,a.kt)("inlineCode",{parentName:"p"},"JAAS")," config file for the selected mechanisms as described in the examples for setting up ",(0,a.kt)("a",{parentName:"p",href:"#kerberos"},"GSSAPI (Kerberos)"),".")),(0,a.kt)("li",{parentName:"ol"},(0,a.kt)("p",{parentName:"li"},"Pass the ",(0,a.kt)("inlineCode",{parentName:"p"},"JAAS")," config file location as JVM parameter to each Bookie. For example:"),(0,a.kt)("pre",{parentName:"li"},(0,a.kt)("code",{parentName:"pre",className:"language-shell"},"-Djava.security.auth.login.config=/etc/bookkeeper/bookie_jaas.conf \n"))),(0,a.kt)("li",{parentName:"ol"},(0,a.kt)("p",{parentName:"li"},"Enable SASL auth plugin in bookies, by setting ",(0,a.kt)("inlineCode",{parentName:"p"},"bookieAuthProviderFactoryClass")," to ",(0,a.kt)("inlineCode",{parentName:"p"},"org.apache.bookkeeper.sasl.SASLBookieAuthProviderFactory"),"."))),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre"},"```shell\nbookieAuthProviderFactoryClass=org.apache.bookkeeper.sasl.SASLBookieAuthProviderFactory\n```\n")),(0,a.kt)("ol",{start:5},(0,a.kt)("li",{parentName:"ol"},(0,a.kt)("p",{parentName:"li"},"If you are running ",(0,a.kt)("inlineCode",{parentName:"p"},"autorecovery")," along with bookies, then you want to enable SASL auth plugin for ",(0,a.kt)("inlineCode",{parentName:"p"},"autorecovery"),", by setting\n",(0,a.kt)("inlineCode",{parentName:"p"},"clientAuthProviderFactoryClass")," to ",(0,a.kt)("inlineCode",{parentName:"p"},"org.apache.bookkeeper.sasl.SASLClientProviderFactory"),"."),(0,a.kt)("pre",{parentName:"li"},(0,a.kt)("code",{parentName:"pre",className:"language-shell"},"clientAuthProviderFactoryClass=org.apache.bookkeeper.sasl.SASLClientProviderFactory\n"))),(0,a.kt)("li",{parentName:"ol"},(0,a.kt)("p",{parentName:"li"},"Follow the steps in ",(0,a.kt)("a",{parentName:"p",href:"#kerberos"},"GSSAPI (Kerberos)")," to configure SASL."))),(0,a.kt)("h4",{id:"notes"},"Important Notes"),(0,a.kt)("ol",null,(0,a.kt)("li",{parentName:"ol"},(0,a.kt)("inlineCode",{parentName:"li"},"Bookie")," is a section name in the JAAS file used by each bookie. This section tells the bookie which principal to use\nand the location of the keytab where the principal is stored. It allows the bookie to login using the keytab specified in this section."),(0,a.kt)("li",{parentName:"ol"},(0,a.kt)("inlineCode",{parentName:"li"},"Auditor")," is a section name in the JASS file used by ",(0,a.kt)("inlineCode",{parentName:"li"},"autorecovery")," daemon (it can be co-run with bookies). This section tells the\n",(0,a.kt)("inlineCode",{parentName:"li"},"autorecovery")," daemon which principal to use and the location of the keytab where the principal is stored. It allows the bookie to\nlogin using the keytab specified in this section."),(0,a.kt)("li",{parentName:"ol"},"The ",(0,a.kt)("inlineCode",{parentName:"li"},"Client")," section is used to authenticate a SASL connection with ZooKeeper. It also allows the bookies to set ACLs on ZooKeeper nodes\nwhich locks these nodes down so that only the bookies can modify it. It is necessary to have the same primary name across all bookies.\nIf you want to use a section name other than ",(0,a.kt)("inlineCode",{parentName:"li"},"Client"),", set the system property ",(0,a.kt)("inlineCode",{parentName:"li"},"zookeeper.sasl.client")," to the appropriate name\n(e.g ",(0,a.kt)("inlineCode",{parentName:"li"},"-Dzookeeper.sasl.client=ZKClient"),")."),(0,a.kt)("li",{parentName:"ol"},"ZooKeeper uses ",(0,a.kt)("inlineCode",{parentName:"li"},"zookeeper")," as the service name by default. If you want to change this, set the system property\n",(0,a.kt)("inlineCode",{parentName:"li"},"zookeeper.sasl.client.username")," to the appropriate name (e.g. ",(0,a.kt)("inlineCode",{parentName:"li"},"-Dzookeeper.sasl.client.username=zk"),").")),(0,a.kt)("h2",{id:"sasl-configuration-for-clients"},"SASL configuration for Clients"),(0,a.kt)("p",null,"To configure ",(0,a.kt)("inlineCode",{parentName:"p"},"SASL")," authentication on the clients:"),(0,a.kt)("ol",null,(0,a.kt)("li",{parentName:"ol"},(0,a.kt)("p",{parentName:"li"},"Select a ",(0,a.kt)("inlineCode",{parentName:"p"},"SASL")," mechanism for authentication and add a ",(0,a.kt)("inlineCode",{parentName:"p"},"JAAS")," config file for the selected mechanism as described in the examples for\nsetting up ",(0,a.kt)("a",{parentName:"p",href:"#kerberos"},"GSSAPI (Kerberos)"),".")),(0,a.kt)("li",{parentName:"ol"},(0,a.kt)("p",{parentName:"li"},"Pass the ",(0,a.kt)("inlineCode",{parentName:"p"},"JAAS")," config file location as JVM parameter to each client JVM. For example:"),(0,a.kt)("pre",{parentName:"li"},(0,a.kt)("code",{parentName:"pre",className:"language-shell"},"-Djava.security.auth.login.config=/etc/bookkeeper/bookkeeper_jaas.conf \n"))),(0,a.kt)("li",{parentName:"ol"},(0,a.kt)("p",{parentName:"li"},"Configure the following properties in bookkeeper ",(0,a.kt)("inlineCode",{parentName:"p"},"ClientConfiguration"),":"),(0,a.kt)("pre",{parentName:"li"},(0,a.kt)("code",{parentName:"pre",className:"language-shell"},"clientAuthProviderFactoryClass=org.apache.bookkeeper.sasl.SASLClientProviderFactory\n")))),(0,a.kt)("p",null,"Follow the steps in ",(0,a.kt)("a",{parentName:"p",href:"#kerberos"},"GSSAPI (Kerberos)")," to configure SASL for the selected mechanism."),(0,a.kt)("h2",{id:"kerberos"},"Authentication using SASL/Kerberos"),(0,a.kt)("h3",{id:"prerequisites"},"Prerequisites"),(0,a.kt)("h4",{id:"kerberos"},"Kerberos"),(0,a.kt)("p",null,"If your organization is already using a Kerberos server (for example, by using ",(0,a.kt)("inlineCode",{parentName:"p"},"Active Directory"),"), there is no need to\ninstall a new server just for BookKeeper. Otherwise you will need to install one, your Linux vendor likely has packages\nfor ",(0,a.kt)("inlineCode",{parentName:"p"},"Kerberos")," and a short guide on how to install and configure it (",(0,a.kt)("a",{parentName:"p",href:"https://help.ubuntu.com/community/Kerberos"},"Ubuntu"),",\n",(0,a.kt)("a",{parentName:"p",href:"https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/6/html/Managing_Smart_Cards/installing-kerberos.html"},"Redhat"),").\nNote that if you are using Oracle Java, you will need to download JCE policy files for your Java version and copy them to ",(0,a.kt)("inlineCode",{parentName:"p"},"$JAVA_HOME/jre/lib/security"),"."),(0,a.kt)("h4",{id:"kerberos-principals"},"Kerberos Principals"),(0,a.kt)("p",null,"If you are using the organization\u2019s Kerberos or Active Directory server, ask your Kerberos administrator for a principal\nfor each Bookie in your cluster and for every operating system user that will access BookKeeper with Kerberos authentication\n(via clients and tools)."),(0,a.kt)("p",null,"If you have installed your own Kerberos, you will need to create these principals yourself using the following commands:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-shell"},"sudo /usr/sbin/kadmin.local -q 'addprinc -randkey bookkeeper/{hostname}@{REALM}'\nsudo /usr/sbin/kadmin.local -q \"ktadd -k /etc/security/keytabs/{keytabname}.keytab bookkeeper/{hostname}@{REALM}\"\n")),(0,a.kt)("h5",{id:"all-hosts-must-be-reachable-using-hostnames"},"All hosts must be reachable using hostnames"),(0,a.kt)("p",null,"It is a ",(0,a.kt)("em",{parentName:"p"},"Kerberos")," requirement that all your hosts can be resolved with their FQDNs."),(0,a.kt)("h3",{id:"configuring-bookies"},"Configuring Bookies"),(0,a.kt)("ol",null,(0,a.kt)("li",{parentName:"ol"},(0,a.kt)("p",{parentName:"li"},"Add a suitably modified JAAS file similar to the one below to each Bookie\u2019s config directory, let\u2019s call it ",(0,a.kt)("inlineCode",{parentName:"p"},"bookie_jaas.conf"),"\nfor this example (note that each bookie should have its own keytab):"),(0,a.kt)("pre",{parentName:"li"},(0,a.kt)("code",{parentName:"pre"},'```\nBookie {\n    com.sun.security.auth.module.Krb5LoginModule required\n    useKeyTab=true\n    storeKey=true\n    keyTab="/etc/security/keytabs/bookie.keytab"\n    principal="bookkeeper/bk1.hostname.com@EXAMPLE.COM";\n};\n// ZooKeeper client authentication\nClient {\n    com.sun.security.auth.module.Krb5LoginModule required\n    useKeyTab=true\n    storeKey=true\n    keyTab="/etc/security/keytabs/bookie.keytab"\n    principal="bookkeeper/bk1.hostname.com@EXAMPLE.COM";\n};\n// If you are running `autorecovery` along with bookies\nAuditor {\n    com.sun.security.auth.module.Krb5LoginModule required\n    useKeyTab=true\n    storeKey=true\n    keyTab="/etc/security/keytabs/bookie.keytab"\n    principal="bookkeeper/bk1.hostname.com@EXAMPLE.COM";\n};\n```\n\nThe `Bookie` section in the JAAS file tells the bookie which principal to use and the location of the keytab where this principal is stored.\nIt allows the bookie to login using the keytab specified in this section. See [notes](#notes) for more details on Zookeeper\u2019s SASL configuration.\n'))),(0,a.kt)("li",{parentName:"ol"},(0,a.kt)("p",{parentName:"li"},"Pass the name of the JAAS file as a JVM parameter to each Bookie:"),(0,a.kt)("pre",{parentName:"li"},(0,a.kt)("code",{parentName:"pre",className:"language-shell"},"-Djava.security.auth.login.config=/etc/bookkeeper/bookie_jaas.conf\n")),(0,a.kt)("p",{parentName:"li"},"You may also wish to specify the path to the ",(0,a.kt)("inlineCode",{parentName:"p"},"krb5.conf")," file\n(see ",(0,a.kt)("a",{parentName:"p",href:"https://docs.oracle.com/javase/8/docs/technotes/guides/security/jgss/tutorials/KerberosReq.html"},"JDK\u2019s Kerberos Requirements")," for more details):"),(0,a.kt)("pre",{parentName:"li"},(0,a.kt)("code",{parentName:"pre",className:"language-shell"},"-Djava.security.krb5.conf=/etc/bookkeeper/krb5.conf\n"))),(0,a.kt)("li",{parentName:"ol"},(0,a.kt)("p",{parentName:"li"},"Make sure the keytabs configured in the JAAS file are readable by the operating system user who is starting the Bookies.")),(0,a.kt)("li",{parentName:"ol"},(0,a.kt)("p",{parentName:"li"},"Enable SASL authentication plugin in the bookies by setting following parameters."),(0,a.kt)("pre",{parentName:"li"},(0,a.kt)("code",{parentName:"pre",className:"language-shell"},"bookieAuthProviderFactoryClass=org.apache.bookkeeper.sasl.SASLBookieAuthProviderFactory\n# if you run `autorecovery` along with bookies\nclientAuthProviderFactoryClass=org.apache.bookkeeper.sasl.SASLClientProviderFactory\n")))),(0,a.kt)("h3",{id:"configuring-clients"},"Configuring Clients"),(0,a.kt)("p",null,"To configure SASL authentication on the clients:"),(0,a.kt)("ol",null,(0,a.kt)("li",{parentName:"ol"},(0,a.kt)("p",{parentName:"li"},"Clients will authenticate to the cluster with their own principal (usually with the same name as the user running the client),\nso obtain or create these principals as needed. Then create a ",(0,a.kt)("inlineCode",{parentName:"p"},"JAAS")," file for each principal. The ",(0,a.kt)("inlineCode",{parentName:"p"},"BookKeeper")," section describes\nhow the clients like writers and readers can connect to the Bookies. The following is an example configuration for a client using\na keytab (recommended for long-running processes):"),(0,a.kt)("pre",{parentName:"li"},(0,a.kt)("code",{parentName:"pre"},'BookKeeper {\n    com.sun.security.auth.module.Krb5LoginModule required\n    useKeyTab=true\n    storeKey=true\n    keyTab="/etc/security/keytabs/bookkeeper.keytab"\n    principal="bookkeeper-client-1@EXAMPLE.COM";\n};\n')))),(0,a.kt)("ol",{start:2},(0,a.kt)("li",{parentName:"ol"},(0,a.kt)("p",{parentName:"li"},"Pass the name of the JAAS file as a JVM parameter to the client JVM:"),(0,a.kt)("pre",{parentName:"li"},(0,a.kt)("code",{parentName:"pre",className:"language-shell"},"-Djava.security.auth.login.config=/etc/bookkeeper/bookkeeper_jaas.conf\n")),(0,a.kt)("p",{parentName:"li"},"You may also wish to specify the path to the ",(0,a.kt)("inlineCode",{parentName:"p"},"krb5.conf")," file (see\n",(0,a.kt)("a",{parentName:"p",href:"https://docs.oracle.com/javase/8/docs/technotes/guides/security/jgss/tutorials/KerberosReq.html"},"JDK\u2019s Kerberos Requirements")," for more details)."),(0,a.kt)("pre",{parentName:"li"},(0,a.kt)("code",{parentName:"pre",className:"language-shell"},"-Djava.security.krb5.conf=/etc/bookkeeper/krb5.conf\n")))),(0,a.kt)("ol",{start:3},(0,a.kt)("li",{parentName:"ol"},(0,a.kt)("p",{parentName:"li"},"Make sure the keytabs configured in the ",(0,a.kt)("inlineCode",{parentName:"p"},"bookkeeper_jaas.conf")," are readable by the operating system user who is starting bookkeeper client.")),(0,a.kt)("li",{parentName:"ol"},(0,a.kt)("p",{parentName:"li"},"Enable SASL authentication plugin in the client by setting following parameters."),(0,a.kt)("pre",{parentName:"li"},(0,a.kt)("code",{parentName:"pre",className:"language-shell"},"clientAuthProviderFactoryClass=org.apache.bookkeeper.sasl.SASLClientProviderFactory\n")))),(0,a.kt)("h2",{id:"enabling-logging-for-sasl"},"Enabling Logging for SASL"),(0,a.kt)("p",null,"To enable SASL debug output, you can set ",(0,a.kt)("inlineCode",{parentName:"p"},"sun.security.krb5.debug")," system property to ",(0,a.kt)("inlineCode",{parentName:"p"},"true"),"."))}k.isMDXComponent=!0}}]);
\ No newline at end of file
diff --git a/content/assets/js/1020a002.f31a5bac.js b/content/assets/js/1020a002.f31a5bac.js
new file mode 100644
index 0000000..3865bbc
--- /dev/null
+++ b/content/assets/js/1020a002.f31a5bac.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunksite_3=self.webpackChunksite_3||[]).push([[9694],{3905:function(e,o,n){n.d(o,{Zo:function(){return m},kt:function(){return k}});var t=n(67294);function i(e,o,n){return o in e?Object.defineProperty(e,o,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[o]=n,e}function r(e,o){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(e);o&&(t=t.filter((function(o){return Object.getOwnPropertyDescriptor(e,o).enumerable}))),n.push.apply(n,t)}return n}function s(e){for(var o=1;o<arguments.length;o++){var n=null!=arguments[o]?arguments[o]:{};o%2?r(Object(n),!0).forEach((function(o){i(e,o,n[o])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):r(Object(n)).forEach((function(o){Object.defineProperty(e,o,Object.getOwnPropertyDescriptor(n,o))}))}return e}function a(e,o){if(null==e)return{};var n,t,i=function(e,o){if(null==e)return{};var n,t,i={},r=Object.keys(e);for(t=0;t<r.length;t++)n=r[t],o.indexOf(n)>=0||(i[n]=e[n]);return i}(e,o);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(t=0;t<r.length;t++)n=r[t],o.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(i[n]=e[n])}return i}var l=t.createContext({}),c=function(e){var o=t.useContext(l),n=o;return e&&(n="function"==typeof e?e(o):s(s({},o),e)),n},m=function(e){var o=c(e.components);return t.createElement(l.Provider,{value:o},e.children)},p="mdxType",d={inlineCode:"code",wrapper:function(e){var o=e.children;return t.createElement(t.Fragment,{},o)}},u=t.forwardRef((function(e,o){var n=e.components,i=e.mdxType,r=e.originalType,l=e.parentName,m=a(e,["components","mdxType","originalType","parentName"]),p=c(n),u=i,k=p["".concat(l,".").concat(u)]||p[u]||d[u]||r;return n?t.createElement(k,s(s({ref:o},m),{},{components:n})):t.createElement(k,s({ref:o},m))}));function k(e,o){var n=arguments,i=o&&o.mdxType;if("string"==typeof e||i){var r=n.length,s=new Array(r);s[0]=u;var a={};for(var l in o)hasOwnProperty.call(o,l)&&(a[l]=o[l]);a.originalType=e,a[p]="string"==typeof e?e:i,s[1]=a;for(var c=2;c<r;c++)s[c]=n[c];return t.createElement.apply(null,s)}return t.createElement.apply(null,n)}u.displayName="MDXCreateElement"},41650:function(e,o,n){n.r(o),n.d(o,{assets:function(){return l},contentTitle:function(){return s},default:function(){return d},frontMatter:function(){return r},metadata:function(){return a},toc:function(){return c}});var t=n(83117),i=(n(67294),n(3905));const r={id:"decomission",title:"Decommission Bookies"},s=void 0,a={unversionedId:"admin/decomission",id:"version-4.17.0/admin/decomission",title:"Decommission Bookies",description:"In case the user wants to decommission a bookie, the following process is useful to follow in order to verify if the",source:"@site/versioned_docs/version-4.17.0/admin/decomission.md",sourceDirName:"admin",slug:"/admin/decomission",permalink:"/docs/admin/decomission",draft:!1,tags:[],version:"4.17.0",frontMatter:{id:"decomission",title:"Decommission Bookies"},sidebar:"docsSidebar",previous:{title:"BookKeeper Admin REST API",permalink:"/docs/admin/http"},next:{title:"BookKeeper API",permalink:"/docs/api/overview"}},l={},c=[{value:"Before we decommission",id:"before-we-decommission",level:3},{value:"Process of Decommissioning",id:"process-of-decommissioning",level:3}],m={toc:c},p="wrapper";function d(e){let{components:o,...n}=e;return(0,i.kt)(p,(0,t.Z)({},m,n,{components:o,mdxType:"MDXLayout"}),(0,i.kt)("p",null,"In case the user wants to decommission a bookie, the following process is useful to follow in order to verify if the\ndecommissioning was safely done."),(0,i.kt)("h3",{id:"before-we-decommission"},"Before we decommission"),(0,i.kt)("ol",null,(0,i.kt)("li",{parentName:"ol"},(0,i.kt)("p",{parentName:"li"},"Ensure state of your cluster can support the decommissioning of the target bookie.\nCheck if ",(0,i.kt)("inlineCode",{parentName:"p"},"EnsembleSize >= Write Quorum >= Ack Quorum")," stays true with one less bookie")),(0,i.kt)("li",{parentName:"ol"},(0,i.kt)("p",{parentName:"li"},"Ensure target bookie shows up in the listbookies command.")),(0,i.kt)("li",{parentName:"ol"},(0,i.kt)("p",{parentName:"li"},"Ensure that there is no other process ongoing (upgrade etc)."))),(0,i.kt)("h3",{id:"process-of-decommissioning"},"Process of Decommissioning"),(0,i.kt)("ol",null,(0,i.kt)("li",{parentName:"ol"},"Log on to the bookie node, check if there are underreplicated ledgers.")),(0,i.kt)("p",null,"If there are, the decommission command will force them to be replicated.\n",(0,i.kt)("inlineCode",{parentName:"p"},"$ bin/bookkeeper shell listunderreplicated")),(0,i.kt)("ol",{start:2},(0,i.kt)("li",{parentName:"ol"},(0,i.kt)("p",{parentName:"li"},"Stop the bookie\n",(0,i.kt)("inlineCode",{parentName:"p"},"$ bin/bookkeeper-daemon.sh stop bookie"))),(0,i.kt)("li",{parentName:"ol"},(0,i.kt)("p",{parentName:"li"},"Run the decommission command.\nIf you have logged onto the node you wish to decommission, you don't need to provide ",(0,i.kt)("inlineCode",{parentName:"p"},"-bookieid"),"\nIf you are running the decommission command for target bookie node from another bookie node you should mention\nthe target bookie id in the arguments for ",(0,i.kt)("inlineCode",{parentName:"p"},"-bookieid"),"\n",(0,i.kt)("inlineCode",{parentName:"p"},"$ bin/bookkeeper shell decommissionbookie"),"\nor\n",(0,i.kt)("inlineCode",{parentName:"p"},"$ bin/bookkeeper shell decommissionbookie -bookieid <target bookieid>"))),(0,i.kt)("li",{parentName:"ol"},(0,i.kt)("p",{parentName:"li"},"Validate that there are no ledgers on decommissioned bookie\n",(0,i.kt)("inlineCode",{parentName:"p"},"$ bin/bookkeeper shell listledgers -bookieid <target bookieid>")))),(0,i.kt)("p",null,"Last step to verify is you could run this command to check if the bookie you decommissioned doesn\u2019t show up in list bookies:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-bash"},"$ bin/bookkeeper shell listbookies -rw -h\n$ bin/bookkeeper shell listbookies -ro -h\n")))}d.isMDXComponent=!0}}]);
\ No newline at end of file
diff --git a/content/assets/js/196689c8.3b710a0b.js b/content/assets/js/196689c8.3b710a0b.js
new file mode 100644
index 0000000..d5db199
--- /dev/null
+++ b/content/assets/js/196689c8.3b710a0b.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunksite_3=self.webpackChunksite_3||[]).push([[534],{3905:function(e,t,n){n.d(t,{Zo:function(){return s},kt:function(){return d}});var r=n(67294);function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function a(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function l(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?a(Object(n),!0).forEach((function(t){o(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):a(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function i(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var u=r.createContext({}),p=function(e){var t=r.useContext(u),n=t;return e&&(n="function"==typeof e?e(t):l(l({},t),e)),n},s=function(e){var t=p(e.components);return r.createElement(u.Provider,{value:t},e.children)},c="mdxType",m={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},k=r.forwardRef((function(e,t){var n=e.components,o=e.mdxType,a=e.originalType,u=e.parentName,s=i(e,["components","mdxType","originalType","parentName"]),c=p(n),k=o,d=c["".concat(u,".").concat(k)]||c[k]||m[k]||a;return n?r.createElement(d,l(l({ref:t},s),{},{components:n})):r.createElement(d,l({ref:t},s))}));function d(e,t){var n=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=n.length,l=new Array(a);l[0]=k;var i={};for(var u in t)hasOwnProperty.call(t,u)&&(i[u]=t[u]);i.originalType=e,i[c]="string"==typeof e?e:o,l[1]=i;for(var p=2;p<a;p++)l[p]=n[p];return r.createElement.apply(null,l)}return r.createElement.apply(null,n)}k.displayName="MDXCreateElement"},36110:function(e,t,n){n.r(t),n.d(t,{assets:function(){return u},contentTitle:function(){return l},default:function(){return m},frontMatter:function(){return a},metadata:function(){return i},toc:function(){return p}});var r=n(83117),o=(n(67294),n(3905));const a={id:"manual",title:"Manual deployment"},l=void 0,i={unversionedId:"deployment/manual",id:"version-4.17.0/deployment/manual",title:"Manual deployment",description:"A BookKeeper cluster consists of two main components:",source:"@site/versioned_docs/version-4.17.0/deployment/manual.md",sourceDirName:"deployment",slug:"/deployment/manual",permalink:"/docs/deployment/manual",draft:!1,tags:[],version:"4.17.0",frontMatter:{id:"manual",title:"Manual deployment"},sidebar:"docsSidebar",previous:{title:"BookKeeper concepts and architecture",permalink:"/docs/getting-started/concepts"},next:{title:"Deploying Apache BookKeeper on Kubernetes",permalink:"/docs/deployment/kubernetes"}},u={},p=[{value:"ZooKeeper setup",id:"zookeeper-setup",level:2},{value:"Cluster metadata setup",id:"cluster-metadata-setup",level:2},{value:"Starting up bookies",id:"starting-up-bookies",level:2},{value:"System requirements",id:"system-requirements",level:3}],s={toc:p},c="wrapper";function m(e){let{components:t,...n}=e;return(0,o.kt)(c,(0,r.Z)({},s,n,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("p",null,"A BookKeeper cluster consists of two main components:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"A ",(0,o.kt)("a",{parentName:"li",href:"#zookeeper-setup"},"ZooKeeper")," cluster that is used for configuration- and coordination-related tasks"),(0,o.kt)("li",{parentName:"ul"},"An ",(0,o.kt)("a",{parentName:"li",href:"#starting-up-bookies"},"ensemble")," of bookies")),(0,o.kt)("h2",{id:"zookeeper-setup"},"ZooKeeper setup"),(0,o.kt)("p",null,"We won't provide a full guide to setting up a ZooKeeper cluster here. We recommend that you consult ",(0,o.kt)("a",{parentName:"p",href:"https://zookeeper.apache.org/doc/current/zookeeperAdmin.html"},"this guide")," in the official ZooKeeper documentation."),(0,o.kt)("h2",{id:"cluster-metadata-setup"},"Cluster metadata setup"),(0,o.kt)("p",null,"Once your ZooKeeper cluster is up and running, there is some metadata that needs to be written to ZooKeeper, so you need to modify the bookie's configuration to make sure that it points to the right ZooKeeper cluster."),(0,o.kt)("p",null,"On each bookie host, you need to ",(0,o.kt)("a",{parentName:"p",href:"../getting-started/installation#download"},"download")," the BookKeeper package as a tarball. Once you've done that, you need to configure the bookie by setting values in the ",(0,o.kt)("inlineCode",{parentName:"p"},"bookkeeper-server/conf/bk_server.conf")," config file. The one parameter that you will absolutely need to change is the ",(0,o.kt)("inlineCode",{parentName:"p"},"metadataServiceUri")," parameter, which you will need to set to the ZooKeeper connection string for your ZooKeeper cluster. Here's an example:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-properties"},"metadataServiceUri=zk+hierarchical://100.0.0.1:2181;100.0.0.2:2181;100.0.0.3:2181/ledgers\n")),(0,o.kt)("blockquote",null,(0,o.kt)("p",{parentName:"blockquote"},"A full listing of configurable parameters available in ",(0,o.kt)("inlineCode",{parentName:"p"},"bookkeeper-server/conf/bk_server.conf")," can be found in the ",(0,o.kt)("a",{parentName:"p",href:"../reference/config"},"Configuration")," reference manual.")),(0,o.kt)("p",null,"Once the bookie's configuration is set, you can set up cluster metadata for the cluster by running the following command from any bookie in the cluster:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-shell"},"$ bookkeeper-server/bin/bookkeeper shell metaformat\n")),(0,o.kt)("p",null,"You can run in the formatting "),(0,o.kt)("blockquote",null,(0,o.kt)("p",{parentName:"blockquote"},"The ",(0,o.kt)("inlineCode",{parentName:"p"},"metaformat")," command performs all the necessary ZooKeeper cluster metadata tasks and thus only needs to be run ",(0,o.kt)("em",{parentName:"p"},"once")," and from ",(0,o.kt)("em",{parentName:"p"},"any")," bookie in the BookKeeper cluster.")),(0,o.kt)("p",null,"Once cluster metadata formatting has been completed, your BookKeeper cluster is ready to go!"),(0,o.kt)("h2",{id:"starting-up-bookies"},"Starting up bookies"),(0,o.kt)("p",null,"Before you start up your bookies, you should make sure that all bookie hosts have the correct configuration, then you can start up as many bookies as you'd like to form a cluster by using the ",(0,o.kt)("a",{parentName:"p",href:"../reference/cli#bookkeeper-bookie"},(0,o.kt)("inlineCode",{parentName:"a"},"bookie"))," command of the ",(0,o.kt)("a",{parentName:"p",href:"../reference/cli#bookkeeper"},(0,o.kt)("inlineCode",{parentName:"a"},"bookkeeper"))," CLI tool:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-shell"},"$ bookkeeper-server/bin/bookkeeper bookie\n")),(0,o.kt)("h3",{id:"system-requirements"},"System requirements"),(0,o.kt)("p",null,"The number of bookies you should run in a BookKeeper cluster depends on the quorum mode that you've chosen, the desired throughput, and the number of clients using the cluster simultaneously."),(0,o.kt)("table",null,(0,o.kt)("thead",{parentName:"table"},(0,o.kt)("tr",{parentName:"thead"},(0,o.kt)("th",{parentName:"tr",align:"left"},"Quorum type"),(0,o.kt)("th",{parentName:"tr",align:"left"},"Number of bookies"))),(0,o.kt)("tbody",{parentName:"table"},(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:"left"},"Self-verifying quorum"),(0,o.kt)("td",{parentName:"tr",align:"left"},"3")),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:"left"},"Generic"),(0,o.kt)("td",{parentName:"tr",align:"left"},"4")))),(0,o.kt)("p",null,"Increasing the number of bookies will enable higher throughput, and there is ",(0,o.kt)("strong",{parentName:"p"},"no upper limit")," on the number of bookies. "))}m.isMDXComponent=!0}}]);
\ No newline at end of file
diff --git a/content/assets/js/213d6dd2.6c686d1e.js b/content/assets/js/213d6dd2.6c686d1e.js
new file mode 100644
index 0000000..32677fb
--- /dev/null
+++ b/content/assets/js/213d6dd2.6c686d1e.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunksite_3=self.webpackChunksite_3||[]).push([[1744],{3905:function(e,t,a){a.d(t,{Zo:function(){return m},kt:function(){return g}});var r=a(67294);function n(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function l(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,r)}return a}function i(e){for(var t=1;t<arguments.length;t++){var a=null!=arguments[t]?arguments[t]:{};t%2?l(Object(a),!0).forEach((function(t){n(e,t,a[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(a)):l(Object(a)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(a,t))}))}return e}function o(e,t){if(null==e)return{};var a,r,n=function(e,t){if(null==e)return{};var a,r,n={},l=Object.keys(e);for(r=0;r<l.length;r++)a=l[r],t.indexOf(a)>=0||(n[a]=e[a]);return n}(e,t);if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(e);for(r=0;r<l.length;r++)a=l[r],t.indexOf(a)>=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(n[a]=e[a])}return n}var d=r.createContext({}),s=function(e){var t=r.useContext(d),a=t;return e&&(a="function"==typeof e?e(t):i(i({},t),e)),a},m=function(e){var t=s(e.components);return r.createElement(d.Provider,{value:t},e.children)},u="mdxType",p={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},k=r.forwardRef((function(e,t){var a=e.components,n=e.mdxType,l=e.originalType,d=e.parentName,m=o(e,["components","mdxType","originalType","parentName"]),u=s(a),k=n,g=u["".concat(d,".").concat(k)]||u[k]||p[k]||l;return a?r.createElement(g,i(i({ref:t},m),{},{components:a})):r.createElement(g,i({ref:t},m))}));function g(e,t){var a=arguments,n=t&&t.mdxType;if("string"==typeof e||n){var l=a.length,i=new Array(l);i[0]=k;var o={};for(var d in t)hasOwnProperty.call(t,d)&&(o[d]=t[d]);o.originalType=e,o[u]="string"==typeof e?e:n,i[1]=o;for(var s=2;s<l;s++)i[s]=a[s];return r.createElement.apply(null,i)}return r.createElement.apply(null,a)}k.displayName="MDXCreateElement"},20702:function(e,t,a){a.r(t),a.d(t,{assets:function(){return d},contentTitle:function(){return i},default:function(){return p},frontMatter:function(){return l},metadata:function(){return o},toc:function(){return s}});var r=a(83117),n=(a(67294),a(3905));const l={id:"config",title:"BookKeeper configuration"},i=void 0,o={unversionedId:"reference/config",id:"version-4.17.0/reference/config",title:"BookKeeper configuration",description:"The table below lists parameters that you can set to configure bookies. All configuration takes place in the bk_server.conf file in the bookkeeper-server/conf directory of your BookKeeper installation.",source:"@site/versioned_docs/version-4.17.0/reference/config.md",sourceDirName:"reference",slug:"/reference/config",permalink:"/docs/reference/config",draft:!1,tags:[],version:"4.17.0",frontMatter:{id:"config",title:"BookKeeper configuration"},sidebar:"docsSidebar",previous:{title:"The BookKeeper protocol",permalink:"/docs/development/protocol"},next:{title:"BookKeeper CLI tool reference",permalink:"/docs/reference/cli"}},d={},s=[{value:"Server parameters",id:"server-parameters",level:2},{value:"Worker thread settings",id:"worker-thread-settings",level:2},{value:"Long poll settings",id:"long-poll-settings",level:2},{value:"Read-only mode support",id:"read-only-mode-support",level:2},{value:"Netty server settings",id:"netty-server-settings",level:2},{value:"Http server settings",id:"http-server-settings",level:2},{value:"Security settings",id:"security-settings",level:2},{value:"TLS settings",id:"tls-settings",level:2},{value:"Journal settings",id:"journal-settings",level:2},{value:"Ledger storage settings",id:"ledger-storage-settings",level:2},{value:"Default Entry log settings",id:"default-entry-log-settings",level:2},{value:"DirectIO Entry log settings (Only support DbLedgerStorage)",id:"directio-entry-log-settings-only-support-dbledgerstorage",level:2},{value:"Entry log compaction settings",id:"entry-log-compaction-settings",level:2},{value:"Garbage collection settings",id:"garbage-collection-settings",level:2},{value:"Disk utilization",id:"disk-utilization",level:2},{value:"Sorted Ledger Storage Settings",id:"sorted-ledger-storage-settings",level:2},{value:"DB Ledger Storage Settings",id:"db-ledger-storage-settings",level:2},{value:"Metadata Service Settings",id:"metadata-service-settings",level:2},{value:"ZooKeeper Metadata Service Settings",id:"zookeeper-metadata-service-settings",level:2},{value:"Statistics",id:"statistics",level:2},{value:"Prometheus Metrics Provider Settings",id:"prometheus-metrics-provider-settings",level:2},{value:"Codahale Metrics Provider Settings",id:"codahale-metrics-provider-settings",level:2},{value:"Twitter Ostrich Metrics Provider",id:"twitter-ostrich-metrics-provider",level:2},{value:"Twitter Science Metrics Provider",id:"twitter-science-metrics-provider",level:2},{value:"AutoRecovery general settings",id:"autorecovery-general-settings",level:2},{value:"AutoRecovery placement settings",id:"autorecovery-placement-settings",level:2},{value:"AutoRecovery auditor settings",id:"autorecovery-auditor-settings",level:2},{value:"AutoRecovery replication worker settings",id:"autorecovery-replication-worker-settings",level:2},{value:"Memory allocator settings",id:"memory-allocator-settings",level:2}],m={toc:s},u="wrapper";function p(e){let{components:t,...a}=e;return(0,n.kt)(u,(0,r.Z)({},m,a,{components:t,mdxType:"MDXLayout"}),(0,n.kt)("p",null,"The table below lists parameters that you can set to configure bookies. All configuration takes place in the ",(0,n.kt)("inlineCode",{parentName:"p"},"bk_server.conf")," file in the ",(0,n.kt)("inlineCode",{parentName:"p"},"bookkeeper-server/conf")," directory of your ",(0,n.kt)("a",{parentName:"p",href:"../getting-started/installation"},"BookKeeper installation"),"."),(0,n.kt)("h2",{id:"server-parameters"},"Server parameters"),(0,n.kt)("table",null,(0,n.kt)("thead",{parentName:"table"},(0,n.kt)("tr",{parentName:"thead"},(0,n.kt)("th",{parentName:"tr",align:null},"Parameter"),(0,n.kt)("th",{parentName:"tr",align:null},"Description"),(0,n.kt)("th",{parentName:"tr",align:null},"Default"))),(0,n.kt)("tbody",{parentName:"table"},(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"bookiePort"),(0,n.kt)("td",{parentName:"tr",align:null},"The port that the bookie server listens on."),(0,n.kt)("td",{parentName:"tr",align:null},"3181")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"allowMultipleDirsUnderSameDiskPartition"),(0,n.kt)("td",{parentName:"tr",align:null},"Configure the bookie to allow/disallow multiple ledger/index/journal directories in the same filesystem disk partition."),(0,n.kt)("td",{parentName:"tr",align:null},"true")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"listeningInterface"),(0,n.kt)("td",{parentName:"tr",align:null},"The network interface that the bookie should listen on. If not set, the bookie will listen on all interfaces."),(0,n.kt)("td",{parentName:"tr",align:null},"eth0")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"advertisedAddress"),(0,n.kt)("td",{parentName:"tr",align:null},"Configure a specific hostname or IP address that the bookie should use to advertise itself to",(0,n.kt)("br",null),"clients. If not set, bookie will advertised its own IP address or hostname, depending on the",(0,n.kt)("br",null),(0,n.kt)("inlineCode",{parentName:"td"},"listeningInterface")," and ",(0,n.kt)("inlineCode",{parentName:"td"},"useHostNameAsBookieID")," settings.",(0,n.kt)("br",null)),(0,n.kt)("td",{parentName:"tr",align:null},"eth0")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"allowLoopback"),(0,n.kt)("td",{parentName:"tr",align:null},"Whether the bookie is allowed to use a loopback interface as its primary",(0,n.kt)("br",null),"interface (the interface it uses to establish its identity). By default, loopback interfaces are ",(0,n.kt)("em",{parentName:"td"},"not")," allowed as the primary interface.",(0,n.kt)("br",null),(0,n.kt)("br",null),"Using a loopback interface as the primary interface usually indicates a configuration error. It's fairly common in some VPS setups, for example, to not configure a hostname or to have the hostname resolve to 127.0.0.1. If this is the case, then all bookies in the cluster will establish their identities as 127.0.0.1:3181, and only one will be able to join the cluster. For VPSs configured like this, you should explicitly set the listening interface.",(0,n.kt)("br",null)),(0,n.kt)("td",{parentName:"tr",align:null},"false")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"useHostNameAsBookieID"),(0,n.kt)("td",{parentName:"tr",align:null},"Whether the bookie should use its hostname to register with the ZooKeeper coordination service. When ",(0,n.kt)("inlineCode",{parentName:"td"},"false"),", the bookie will use its IP address for the registration."),(0,n.kt)("td",{parentName:"tr",align:null},"false")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"useShortHostName"),(0,n.kt)("td",{parentName:"tr",align:null},"Whether the bookie should use short hostname or ",(0,n.kt)("a",{parentName:"td",href:"https://en.wikipedia.org/wiki/Fully_qualified_domain_name"},"FQDN")," hostname for registration and ledger metadata when ",(0,n.kt)("inlineCode",{parentName:"td"},"useHostNameAsBookieID")," is enabled."),(0,n.kt)("td",{parentName:"tr",align:null},"false")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"allowEphemeralPorts"),(0,n.kt)("td",{parentName:"tr",align:null},"Whether the bookie is allowed to use an ephemeral port (port 0) as its server port. By default, an ephemeral port is not allowed. Using an ephemeral port as the service port usually indicates a configuration error. However, in unit tests, using an ephemeral port will address port conflict problems and allow running tests in parallel."),(0,n.kt)("td",{parentName:"tr",align:null},"false")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"enableLocalTransport"),(0,n.kt)("td",{parentName:"tr",align:null},"Whether allow the bookie to listen for BookKeeper clients executed on the local JVM."),(0,n.kt)("td",{parentName:"tr",align:null},"false")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"disableServerSocketBind"),(0,n.kt)("td",{parentName:"tr",align:null},"Whether allow the bookie to disable bind on network interfaces, this bookie will be available only to BookKeeper clients executed on the local JVM."),(0,n.kt)("td",{parentName:"tr",align:null},"false")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"bookieDeathWatchInterval"),(0,n.kt)("td",{parentName:"tr",align:null},"Interval to watch whether bookie is dead or not, in milliseconds."),(0,n.kt)("td",{parentName:"tr",align:null},"1000")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"extraServerComponents"),(0,n.kt)("td",{parentName:"tr",align:null},"Configure a list of extra server components to enable and load on a bookie server. This provides a plugin mechanism to run extra server components along with a bookie server."),(0,n.kt)("td",{parentName:"tr",align:null})),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"ignoreExtraServerComponentsStartupFailures"),(0,n.kt)("td",{parentName:"tr",align:null},"Whether the bookie should ignore startup failures on loading server components specified by ",(0,n.kt)("inlineCode",{parentName:"td"},"extraServerComponents"),"."),(0,n.kt)("td",{parentName:"tr",align:null},"false")))),(0,n.kt)("h2",{id:"worker-thread-settings"},"Worker thread settings"),(0,n.kt)("table",null,(0,n.kt)("thead",{parentName:"table"},(0,n.kt)("tr",{parentName:"thead"},(0,n.kt)("th",{parentName:"tr",align:null},"Parameter"),(0,n.kt)("th",{parentName:"tr",align:null},"Description"),(0,n.kt)("th",{parentName:"tr",align:null},"Default"))),(0,n.kt)("tbody",{parentName:"table"},(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"numAddWorkerThreads"),(0,n.kt)("td",{parentName:"tr",align:null},"The number of threads that handle write requests. if zero, writes are handled by ",(0,n.kt)("a",{parentName:"td",href:"//netty.io/wiki/thread-model.html"},"Netty threads")," directly."),(0,n.kt)("td",{parentName:"tr",align:null},"1")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"numReadWorkerThreads"),(0,n.kt)("td",{parentName:"tr",align:null},"The number of threads that handle read requests. If zero, reads are handled by ",(0,n.kt)("a",{parentName:"td",href:"//netty.io/wiki/thread-model.html"},"Netty threads")," directly."),(0,n.kt)("td",{parentName:"tr",align:null},"8")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"numLongPollWorkerThreads"),(0,n.kt)("td",{parentName:"tr",align:null},"The number of threads that handle long poll requests. If zero, long poll requests are handled by ",(0,n.kt)("a",{parentName:"td",href:"//netty.io/wiki/thread-model.html"},"Netty threads")," directly."),(0,n.kt)("td",{parentName:"tr",align:null})),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"numJournalCallbackThreads"),(0,n.kt)("td",{parentName:"tr",align:null},"The number of threads that handle journal callbacks. If zero, journal callbacks are executed directly on force write threads."),(0,n.kt)("td",{parentName:"tr",align:null},"1")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"numHighPriorityWorkerThreads"),(0,n.kt)("td",{parentName:"tr",align:null},"The number of threads that should be used for high priority requests (i.e. recovery reads and adds, and fencing). If zero, reads are handled by ",(0,n.kt)("a",{parentName:"td",href:"//netty.io/wiki/thread-model.html"},"Netty threads")," directly."),(0,n.kt)("td",{parentName:"tr",align:null},"8")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"maxPendingAddRequestsPerThread"),(0,n.kt)("td",{parentName:"tr",align:null},"If read worker threads are enabled, limit the number of pending requests, to avoid the executor queue to grow indefinitely. If zero or negative, the number of pending requests is unlimited."),(0,n.kt)("td",{parentName:"tr",align:null},"10000")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"maxPendingReadRequestsPerThread"),(0,n.kt)("td",{parentName:"tr",align:null},"If add worker threads are enabled, limit the number of pending requests, to avoid the executor queue to grow indefinitely. If zero or negative, the number of pending requests is unlimited."),(0,n.kt)("td",{parentName:"tr",align:null},"10000")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"enableBusyWait"),(0,n.kt)("td",{parentName:"tr",align:null},"Option to enable busy-wait settings. Default is false.",(0,n.kt)("br",null),"WARNING: This option will enable spin-waiting on executors and IO threads in order to reduce latency during",(0,n.kt)("br",null),"context switches. The spinning will consume 100% CPU even when bookie is not doing any work. It is recommended to",(0,n.kt)("br",null),"reduce the number of threads in the main workers pool and Netty event loop to only have few CPU cores busy.",(0,n.kt)("br",null)),(0,n.kt)("td",{parentName:"tr",align:null})))),(0,n.kt)("h2",{id:"long-poll-settings"},"Long poll settings"),(0,n.kt)("table",null,(0,n.kt)("thead",{parentName:"table"},(0,n.kt)("tr",{parentName:"thead"},(0,n.kt)("th",{parentName:"tr",align:null},"Parameter"),(0,n.kt)("th",{parentName:"tr",align:null},"Description"),(0,n.kt)("th",{parentName:"tr",align:null},"Default"))),(0,n.kt)("tbody",{parentName:"table"},(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"requestTimerTickDurationMs"),(0,n.kt)("td",{parentName:"tr",align:null},"The tick duration for long poll request timer, in milliseconds. See ",(0,n.kt)("a",{parentName:"td",href:"//netty.io/4.1/api/io/netty/util/HashedWheelTimer.html"},"HashedWheelTimer")," for more details."),(0,n.kt)("td",{parentName:"tr",align:null},"10")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"requestTimerNumTicks"),(0,n.kt)("td",{parentName:"tr",align:null},"The number of ticks per wheel for long poll request timer. See ",(0,n.kt)("a",{parentName:"td",href:"//netty.io/4.1/api/io/netty/util/HashedWheelTimer.html"},"HashedWheelTimer")," for more details."),(0,n.kt)("td",{parentName:"tr",align:null},"1024")))),(0,n.kt)("h2",{id:"read-only-mode-support"},"Read-only mode support"),(0,n.kt)("table",null,(0,n.kt)("thead",{parentName:"table"},(0,n.kt)("tr",{parentName:"thead"},(0,n.kt)("th",{parentName:"tr",align:null},"Parameter"),(0,n.kt)("th",{parentName:"tr",align:null},"Description"),(0,n.kt)("th",{parentName:"tr",align:null},"Default"))),(0,n.kt)("tbody",{parentName:"table"},(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"readOnlyModeEnabled"),(0,n.kt)("td",{parentName:"tr",align:null},'If all ledger directories configured are full, then support only read requests for clients. If "readOnlyModeEnabled=true" then on all ledger disks full, bookie will be converted to read-only mode and serve only read requests. Otherwise the bookie will be shutdown. By default, this will be enabled.'),(0,n.kt)("td",{parentName:"tr",align:null},"true")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"forceReadOnlyBookie"),(0,n.kt)("td",{parentName:"tr",align:null},"Whether the bookie is force started in read only mode or not."),(0,n.kt)("td",{parentName:"tr",align:null},"false")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"persistBookieStatusEnabled"),(0,n.kt)("td",{parentName:"tr",align:null},"Persist the bookie status locally on the disks. So the bookies can keep their status upon restarts."),(0,n.kt)("td",{parentName:"tr",align:null},"false")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"readOnlyModeOnAnyDiskFullEnabled"),(0,n.kt)("td",{parentName:"tr",align:null},'If any ledger directories configured are full, then support only read requests for clients. If "readOnlyModeOnAnyDiskFullEnabled=true" then on any ledger disks full, bookie will be converted to read-only mode and serve only read requests. When all disks recovered, the bookie will be converted to read-write mode.Otherwise it will obey the ',(0,n.kt)("inlineCode",{parentName:"td"},"readOnlyModeEnabled")," behavior. By default, this will be disabled."),(0,n.kt)("td",{parentName:"tr",align:null},"false")))),(0,n.kt)("h2",{id:"netty-server-settings"},"Netty server settings"),(0,n.kt)("table",null,(0,n.kt)("thead",{parentName:"table"},(0,n.kt)("tr",{parentName:"thead"},(0,n.kt)("th",{parentName:"tr",align:null},"Parameter"),(0,n.kt)("th",{parentName:"tr",align:null},"Description"),(0,n.kt)("th",{parentName:"tr",align:null},"Default"))),(0,n.kt)("tbody",{parentName:"table"},(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"serverTcpNoDelay"),(0,n.kt)("td",{parentName:"tr",align:null},"This settings is used to enabled/disabled Nagle's algorithm, which is a means of improving the efficiency of TCP/IP networks by reducing the number of packets that need to be sent over the network.",(0,n.kt)("br",null),(0,n.kt)("br",null),"If you are sending many small messages, such that more than one can fit in a single IP packet, setting server.tcpnodelay to false to enable Nagle algorithm can provide better performance.",(0,n.kt)("br",null)),(0,n.kt)("td",{parentName:"tr",align:null},"true")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"serverSockKeepalive"),(0,n.kt)("td",{parentName:"tr",align:null},"This setting is used to send keep-alive messages on connection-oriented sockets."),(0,n.kt)("td",{parentName:"tr",align:null},"true")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"serverTcpLinger"),(0,n.kt)("td",{parentName:"tr",align:null},"The socket linger timeout on close. When enabled, a close or shutdown will not return until all queued messages for the socket have been successfully sent or the linger timeout has been reached. Otherwise, the call returns immediately and the closing is done in the background."),(0,n.kt)("td",{parentName:"tr",align:null})),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"byteBufAllocatorSizeInitial"),(0,n.kt)("td",{parentName:"tr",align:null},"The Recv ByteBuf allocator initial buf size."),(0,n.kt)("td",{parentName:"tr",align:null},"65536")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"byteBufAllocatorSizeMin"),(0,n.kt)("td",{parentName:"tr",align:null},"The Recv ByteBuf allocator min buf size."),(0,n.kt)("td",{parentName:"tr",align:null},"65536")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"byteBufAllocatorSizeMax"),(0,n.kt)("td",{parentName:"tr",align:null},"The Recv ByteBuf allocator max buf size."),(0,n.kt)("td",{parentName:"tr",align:null},"1048576")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"nettyMaxFrameSizeBytes"),(0,n.kt)("td",{parentName:"tr",align:null},"The maximum netty frame size in bytes. Any message received larger than this will be rejected, so when the client-side attempt to send more than the default size bytes, it should set up the corresponding parameter ",(0,n.kt)("inlineCode",{parentName:"td"},"setNettyMaxFrameSizeBytes(int maxSize)"),", pay attention to the parameter should be less than the value of server-side."),(0,n.kt)("td",{parentName:"tr",align:null},"5242880")))),(0,n.kt)("h2",{id:"http-server-settings"},"Http server settings"),(0,n.kt)("table",null,(0,n.kt)("thead",{parentName:"table"},(0,n.kt)("tr",{parentName:"thead"},(0,n.kt)("th",{parentName:"tr",align:null},"Parameter"),(0,n.kt)("th",{parentName:"tr",align:null},"Description"),(0,n.kt)("th",{parentName:"tr",align:null},"Default"))),(0,n.kt)("tbody",{parentName:"table"},(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"httpServerEnabled"),(0,n.kt)("td",{parentName:"tr",align:null},"The flag enables/disables starting the admin http server."),(0,n.kt)("td",{parentName:"tr",align:null},"false")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"httpServerPort"),(0,n.kt)("td",{parentName:"tr",align:null},"The http server port to listen on if ",(0,n.kt)("inlineCode",{parentName:"td"},"httpServerEnabled")," is set to true."),(0,n.kt)("td",{parentName:"tr",align:null},"8080")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"httpServerHost"),(0,n.kt)("td",{parentName:"tr",align:null},"The http server host to listen on if ",(0,n.kt)("inlineCode",{parentName:"td"},"httpServerEnabled")," is set to true."),(0,n.kt)("td",{parentName:"tr",align:null},"0.0.0.0")))),(0,n.kt)("h2",{id:"security-settings"},"Security settings"),(0,n.kt)("table",null,(0,n.kt)("thead",{parentName:"table"},(0,n.kt)("tr",{parentName:"thead"},(0,n.kt)("th",{parentName:"tr",align:null},"Parameter"),(0,n.kt)("th",{parentName:"tr",align:null},"Description"),(0,n.kt)("th",{parentName:"tr",align:null},"Default"))),(0,n.kt)("tbody",{parentName:"table"},(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"bookieAuthProviderFactoryClass"),(0,n.kt)("td",{parentName:"tr",align:null},"The bookie authentication provider factory class name. If this is null, no authentication will take place."),(0,n.kt)("td",{parentName:"tr",align:null})),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"permittedStartupUsers"),(0,n.kt)("td",{parentName:"tr",align:null},"The list of users are permitted to run the bookie process. Any users can run the bookie process if it is not set.",(0,n.kt)("br",null),(0,n.kt)("br",null),'Example settings - "permittedStartupUsers=user1,user2,user3"',(0,n.kt)("br",null)),(0,n.kt)("td",{parentName:"tr",align:null})))),(0,n.kt)("h2",{id:"tls-settings"},"TLS settings"),(0,n.kt)("table",null,(0,n.kt)("thead",{parentName:"table"},(0,n.kt)("tr",{parentName:"thead"},(0,n.kt)("th",{parentName:"tr",align:null},"Parameter"),(0,n.kt)("th",{parentName:"tr",align:null},"Description"),(0,n.kt)("th",{parentName:"tr",align:null},"Default"))),(0,n.kt)("tbody",{parentName:"table"},(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"tlsProvider"),(0,n.kt)("td",{parentName:"tr",align:null},"TLS Provider (JDK or OpenSSL)"),(0,n.kt)("td",{parentName:"tr",align:null},"OpenSSL")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"tlsProviderFactoryClass"),(0,n.kt)("td",{parentName:"tr",align:null},"The path to the class that provides security."),(0,n.kt)("td",{parentName:"tr",align:null},"org.apache.bookkeeper.tls.TLSContextFactory")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"tlsClientAuthentication"),(0,n.kt)("td",{parentName:"tr",align:null},"Type of security used by server."),(0,n.kt)("td",{parentName:"tr",align:null},"true")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"tlsKeyStoreType"),(0,n.kt)("td",{parentName:"tr",align:null},"Bookie Keystore type."),(0,n.kt)("td",{parentName:"tr",align:null},"JKS")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"tlsKeyStore"),(0,n.kt)("td",{parentName:"tr",align:null},"Bookie Keystore location (path)."),(0,n.kt)("td",{parentName:"tr",align:null})),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"tlsKeyStore"),(0,n.kt)("td",{parentName:"tr",align:null},"Bookie Keystore location (path)."),(0,n.kt)("td",{parentName:"tr",align:null})),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"tlsKeyStorePasswordPath"),(0,n.kt)("td",{parentName:"tr",align:null},"Bookie Keystore password path, if the keystore is protected by a password."),(0,n.kt)("td",{parentName:"tr",align:null})),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"tlsTrustStoreType"),(0,n.kt)("td",{parentName:"tr",align:null},"Bookie Truststore type."),(0,n.kt)("td",{parentName:"tr",align:null})),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"tlsTrustStore"),(0,n.kt)("td",{parentName:"tr",align:null},"Bookie Truststore location (path)."),(0,n.kt)("td",{parentName:"tr",align:null})),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"tlsTrustStorePasswordPath"),(0,n.kt)("td",{parentName:"tr",align:null},"Bookie Truststore password path, if the truststore is protected by a password."),(0,n.kt)("td",{parentName:"tr",align:null})),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"tlsCertificatePath"),(0,n.kt)("td",{parentName:"tr",align:null},"Bookie TLS certificate path."),(0,n.kt)("td",{parentName:"tr",align:null})))),(0,n.kt)("h2",{id:"journal-settings"},"Journal settings"),(0,n.kt)("table",null,(0,n.kt)("thead",{parentName:"table"},(0,n.kt)("tr",{parentName:"thead"},(0,n.kt)("th",{parentName:"tr",align:null},"Parameter"),(0,n.kt)("th",{parentName:"tr",align:null},"Description"),(0,n.kt)("th",{parentName:"tr",align:null},"Default"))),(0,n.kt)("tbody",{parentName:"table"},(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"journalDirectories"),(0,n.kt)("td",{parentName:"tr",align:null},"The directories to which Bookkeeper outputs its write-ahead log (WAL). Could define multi directories to store write head logs, separated by ','.",(0,n.kt)("br",null),"For example:",(0,n.kt)("br",null)," journalDirectories=/tmp/bk-journal1,/tmp/bk-journal2",(0,n.kt)("br",null),"If journalDirectories is set, bookies will skip journalDirectory and use this setting directory.",(0,n.kt)("br",null)),(0,n.kt)("td",{parentName:"tr",align:null},"/tmp/bk-journal")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"journalDirectory"),(0,n.kt)("td",{parentName:"tr",align:null},"@Deprecated since 4.5.0, in favor of using ",(0,n.kt)("inlineCode",{parentName:"td"},"journalDirectories"),".",(0,n.kt)("br",null),(0,n.kt)("br",null),"The directory to which Bookkeeper outputs its write-ahead log (WAL).",(0,n.kt)("br",null)),(0,n.kt)("td",{parentName:"tr",align:null},"/tmp/bk-txn")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"journalFormatVersionToWrite"),(0,n.kt)("td",{parentName:"tr",align:null},"The journal format version to write.",(0,n.kt)("br",null),"Available formats are 1-5:",(0,n.kt)("br",null)," 1: no header",(0,n.kt)("br",null)," 2: a header section was added",(0,n.kt)("br",null)," 3: ledger key was introduced",(0,n.kt)("br",null)," 4: fencing key was introduced",(0,n.kt)("br",null)," 5: expanding header to 512 and padding writes to align sector size configured by ",(0,n.kt)("inlineCode",{parentName:"td"},"journalAlignmentSize"),(0,n.kt)("br",null)," 6: persisting explicitLac is introduced",(0,n.kt)("br",null),(0,n.kt)("br",null),"By default, it is ",(0,n.kt)("inlineCode",{parentName:"td"},"6"),".",(0,n.kt)("br",null),"If you'd like to disable persisting ExplicitLac, you can set this config to < ",(0,n.kt)("inlineCode",{parentName:"td"},"6")," and also fileInfoFormatVersionToWrite should be set to 0. If there is mismatch then the serverconfig is considered invalid.",(0,n.kt)("br",null),"You can disable ",(0,n.kt)("inlineCode",{parentName:"td"},"padding-writes")," by setting journal version back to ",(0,n.kt)("inlineCode",{parentName:"td"},"4"),". This feature is available in 4.5.0 and onward versions.",(0,n.kt)("br",null)),(0,n.kt)("td",{parentName:"tr",align:null},"6")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"journalMaxSizeMB"),(0,n.kt)("td",{parentName:"tr",align:null},"Max file size of journal file, in mega bytes. A new journal file will be created when the old one reaches the file size limitation."),(0,n.kt)("td",{parentName:"tr",align:null},"2048")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"journalMaxBackups"),(0,n.kt)("td",{parentName:"tr",align:null},"Max number of old journal file to kept. Keep a number of old journal files would help data recovery in specia case."),(0,n.kt)("td",{parentName:"tr",align:null},"5")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"journalPreAllocSizeMB"),(0,n.kt)("td",{parentName:"tr",align:null},"How much space should we pre-allocate at a time in the journal."),(0,n.kt)("td",{parentName:"tr",align:null},"16")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"journalWriteBufferSizeKB"),(0,n.kt)("td",{parentName:"tr",align:null},"Size of the write buffers used for the journal."),(0,n.kt)("td",{parentName:"tr",align:null},"64")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"journalRemoveFromPageCache"),(0,n.kt)("td",{parentName:"tr",align:null},"Should we remove pages from page cache after force write"),(0,n.kt)("td",{parentName:"tr",align:null},"true")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"journalSyncData"),(0,n.kt)("td",{parentName:"tr",align:null},"Should the data be fsynced on journal before acknowledgment.",(0,n.kt)("br",null),"By default, data sync is enabled to guarantee durability of writes. Beware - when disabling data sync in the bookie journal",(0,n.kt)("br",null),"might improve the bookie write performance, it will also introduce the possibility of data loss. With no fsync, the journal",(0,n.kt)("br",null),"entries are written in the OS page cache but not flushed to disk. In case of power failure, the affected bookie might lose",(0,n.kt)("br",null),"the unflushed data. If the ledger is replicated to multiple bookies, the chances of data loss are reduced though still present.",(0,n.kt)("br",null)),(0,n.kt)("td",{parentName:"tr",align:null},"true")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"journalAdaptiveGroupWrites"),(0,n.kt)("td",{parentName:"tr",align:null},"Should we group journal force writes, which optimize group commit for higher throughput."),(0,n.kt)("td",{parentName:"tr",align:null},"true")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"journalMaxGroupWaitMSec"),(0,n.kt)("td",{parentName:"tr",align:null},"Maximum latency to impose on a journal write to achieve grouping."),(0,n.kt)("td",{parentName:"tr",align:null},"2")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"journalBufferedWritesThreshold"),(0,n.kt)("td",{parentName:"tr",align:null},"Maximum writes to buffer to achieve grouping."),(0,n.kt)("td",{parentName:"tr",align:null},"524288")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"journalFlushWhenQueueEmpty"),(0,n.kt)("td",{parentName:"tr",align:null},"If we should flush the journal when journal queue is empty."),(0,n.kt)("td",{parentName:"tr",align:null},"false")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"journalAlignmentSize"),(0,n.kt)("td",{parentName:"tr",align:null},"All the journal writes and commits should be aligned to given size. If not, zeros will be padded to align to given size."),(0,n.kt)("td",{parentName:"tr",align:null},"512")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"journalBufferedEntriesThreshold"),(0,n.kt)("td",{parentName:"tr",align:null},"Maximum entries to buffer to impose on a journal write to achieve grouping."),(0,n.kt)("td",{parentName:"tr",align:null})),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"journalFlushWhenQueueEmpty"),(0,n.kt)("td",{parentName:"tr",align:null},"If we should flush the journal when journal queue is empty."),(0,n.kt)("td",{parentName:"tr",align:null},"false")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"journalQueueSize"),(0,n.kt)("td",{parentName:"tr",align:null},"Set the size of the journal queue."),(0,n.kt)("td",{parentName:"tr",align:null},"10000")))),(0,n.kt)("h2",{id:"ledger-storage-settings"},"Ledger storage settings"),(0,n.kt)("table",null,(0,n.kt)("thead",{parentName:"table"},(0,n.kt)("tr",{parentName:"thead"},(0,n.kt)("th",{parentName:"tr",align:null},"Parameter"),(0,n.kt)("th",{parentName:"tr",align:null},"Description"),(0,n.kt)("th",{parentName:"tr",align:null},"Default"))),(0,n.kt)("tbody",{parentName:"table"},(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"ledgerStorageClass"),(0,n.kt)("td",{parentName:"tr",align:null},"Ledger storage implementation class",(0,n.kt)("br",null),(0,n.kt)("br",null),"Options:",(0,n.kt)("br",null)," - org.apache.bookkeeper.bookie.InterleavedLedgerStorage",(0,n.kt)("br",null)," - org.apache.bookkeeper.bookie.SortedLedgerStorage",(0,n.kt)("br",null)," - org.apache.bookkeeper.bookie.storage.ldb.DbLedgerStorage",(0,n.kt)("br",null)),(0,n.kt)("td",{parentName:"tr",align:null},"org.apache.bookkeeper.bookie.SortedLedgerStorage")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"sortedLedgerStorageEnabled"),(0,n.kt)("td",{parentName:"tr",align:null},"@Deprecated in favor of using ",(0,n.kt)("inlineCode",{parentName:"td"},"ledgerStorageClass"),(0,n.kt)("br",null),(0,n.kt)("br",null),"Whether sorted-ledger storage enabled (default true)",(0,n.kt)("br",null)),(0,n.kt)("td",{parentName:"tr",align:null},"true")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"ledgerDirectories"),(0,n.kt)("td",{parentName:"tr",align:null},"The directory to which Bookkeeper outputs ledger snapshots. You can define multiple directories to store snapshots separated by a comma, for example ",(0,n.kt)("inlineCode",{parentName:"td"},"/tmp/data-dir1,/tmp/data-dir2"),"."),(0,n.kt)("td",{parentName:"tr",align:null},"/tmp/bk-data")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"indexDirectories"),(0,n.kt)("td",{parentName:"tr",align:null},"The directories in which index files are stored. If not specified, the value of ",(0,n.kt)("a",{parentName:"td",href:"#ledgerDirectories"},(0,n.kt)("inlineCode",{parentName:"a"},"ledgerDirectories"))," will be used."),(0,n.kt)("td",{parentName:"tr",align:null},"/tmp/bk-data")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"minUsableSizeForIndexFileCreation"),(0,n.kt)("td",{parentName:"tr",align:null},"Minimum safe usable size to be available in index directory for bookie to create index file while replaying journal at the time of bookie start in readonly mode (in bytes)"),(0,n.kt)("td",{parentName:"tr",align:null},"1073741824")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"minUsableSizeForEntryLogCreation"),(0,n.kt)("td",{parentName:"tr",align:null},"Minimum safe usable size to be available in ledger directory for bookie to create entry log files (in bytes).",(0,n.kt)("br",null),"This parameter allows creating entry log files when there are enough disk spaces, even when",(0,n.kt)("br",null),"the bookie is running at readonly mode because of the disk usage is exceeding ",(0,n.kt)("inlineCode",{parentName:"td"},"diskUsageThreshold"),".",(0,n.kt)("br",null),"Because compaction, journal replays can still write data to disks when a bookie is readonly.",(0,n.kt)("br",null)),(0,n.kt)("td",{parentName:"tr",align:null},"1.2 * ",(0,n.kt)("inlineCode",{parentName:"td"},"logSizeLimit"))),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"minUsableSizeForHighPriorityWrites"),(0,n.kt)("td",{parentName:"tr",align:null},"Minimum safe usable size to be available in ledger directory for bookie to accept high priority writes even it is in readonly mode.",(0,n.kt)("br",null)),(0,n.kt)("td",{parentName:"tr",align:null},"1.2 * ",(0,n.kt)("inlineCode",{parentName:"td"},"logSizeLimit"))),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"flushInterval"),(0,n.kt)("td",{parentName:"tr",align:null},"When entryLogPerLedgerEnabled is enabled, checkpoint doesn't happens when a new active entrylog is created / previous one is rolled over. Instead SyncThread checkpoints periodically with 'flushInterval' delay (in milliseconds) in between executions. Checkpoint flushes both ledger entryLogs and ledger index pages to disk. Flushing entrylog and index files will introduce much random disk I/O. If separating journal dir and ledger dirs each on different devices, flushing would not affect performance. But if putting journal dir and ledger dirs on same device, performance degrade significantly on too frequent flushing. You can consider increment flush interval to get better performance, but you need to pay more time on bookie server restart after failure. This config is used only when entryLogPerLedgerEnabled is enabled."),(0,n.kt)("td",{parentName:"tr",align:null},"10000")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"allowStorageExpansion"),(0,n.kt)("td",{parentName:"tr",align:null},"Allow the expansion of bookie storage capacity. Newly added ledger and index directories must be empty."),(0,n.kt)("td",{parentName:"tr",align:null},"false")))),(0,n.kt)("h2",{id:"default-entry-log-settings"},"Default Entry log settings"),(0,n.kt)("table",null,(0,n.kt)("thead",{parentName:"table"},(0,n.kt)("tr",{parentName:"thead"},(0,n.kt)("th",{parentName:"tr",align:null},"Parameter"),(0,n.kt)("th",{parentName:"tr",align:null},"Description"),(0,n.kt)("th",{parentName:"tr",align:null},"Default"))),(0,n.kt)("tbody",{parentName:"table"},(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"logSizeLimit"),(0,n.kt)("td",{parentName:"tr",align:null},"Max file size of entry logger, in bytes. A new entry log file will be created when the old one reaches the file size limitation."),(0,n.kt)("td",{parentName:"tr",align:null},"2147483648")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"entryLogFilePreallocationEnabled"),(0,n.kt)("td",{parentName:"tr",align:null},"Enable/Disable entry logger preallocation"),(0,n.kt)("td",{parentName:"tr",align:null},"true")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"flushEntrylogBytes"),(0,n.kt)("td",{parentName:"tr",align:null},"Entry log flush interval, in bytes. Setting this to 0 or less disables this feature and makes flush happen on log rotation. Flushing in smaller chunks but more frequently reduces spikes in disk I/O. Flushing too frequently may negatively affect performance."),(0,n.kt)("td",{parentName:"tr",align:null})),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"readBufferSizeBytes"),(0,n.kt)("td",{parentName:"tr",align:null},"The capacity allocated for ",(0,n.kt)("a",{parentName:"td",href:"https://bookkeeper.apache.org//docs/latest/api/javadoc/org/apache/bookkeeper/bookie/BufferedReadChannel"},(0,n.kt)("inlineCode",{parentName:"a"},"BufferedReadChannel")),"s, in bytes."),(0,n.kt)("td",{parentName:"tr",align:null},"512")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"writeBufferSizeBytes"),(0,n.kt)("td",{parentName:"tr",align:null},"The number of bytes used as capacity for the write buffer."),(0,n.kt)("td",{parentName:"tr",align:null},"65536")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"entryLogPerLedgerEnabled"),(0,n.kt)("td",{parentName:"tr",align:null},"Specifies if entryLog per ledger is enabled/disabled. If it is enabled, then there would be a active entrylog for each ledger. It would be ideal to enable this feature if the underlying storage device has multiple DiskPartitions or SSD and if in a given moment, entries of fewer number of active ledgers are written to the bookie."),(0,n.kt)("td",{parentName:"tr",align:null})),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"entrylogMapAccessExpiryTimeInSeconds"),(0,n.kt)("td",{parentName:"tr",align:null},"config specifying if the entrylog per ledger is enabled, then the amount of time EntryLogManagerForEntryLogPerLedger should wait for closing the entrylog file after the last addEntry call for that ledger, if explicit writeclose for that ledger is not received."),(0,n.kt)("td",{parentName:"tr",align:null},"300")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"maximumNumberOfActiveEntryLogs"),(0,n.kt)("td",{parentName:"tr",align:null},"in entryLogPerLedger feature, this specifies the maximum number of entrylogs that can be active at a given point in time. If there are more number of active entryLogs then the maximumNumberOfActiveEntryLogs then the entrylog will be evicted from the cache."),(0,n.kt)("td",{parentName:"tr",align:null},"500")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"entryLogPerLedgerCounterLimitsMultFactor"),(0,n.kt)("td",{parentName:"tr",align:null},"in EntryLogManagerForEntryLogPerLedger, this config value specifies the metrics cache size limits in multiples of entrylogMap cache size limits."),(0,n.kt)("td",{parentName:"tr",align:null},"10")))),(0,n.kt)("h2",{id:"directio-entry-log-settings-only-support-dbledgerstorage"},"DirectIO Entry log settings (Only support DbLedgerStorage)"),(0,n.kt)("table",null,(0,n.kt)("thead",{parentName:"table"},(0,n.kt)("tr",{parentName:"thead"},(0,n.kt)("th",{parentName:"tr",align:null},"Parameter"),(0,n.kt)("th",{parentName:"tr",align:null},"Description"),(0,n.kt)("th",{parentName:"tr",align:null},"Default"))),(0,n.kt)("tbody",{parentName:"table"},(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"dbStorage_directIOEntryLogger"),(0,n.kt)("td",{parentName:"tr",align:null},"Enable/Disable directIO entry logger."),(0,n.kt)("td",{parentName:"tr",align:null},"false")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"dbStorage_directIOEntryLoggerTotalWriteBufferSizeMB"),(0,n.kt)("td",{parentName:"tr",align:null},"Total write buffer size in megabytes for all the entry directories. The write buffer size of each entry directory needs to be divided by the number of entry directories."),(0,n.kt)("td",{parentName:"tr",align:null},"1/8 of max direct memory")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"dbStorage_directIOEntryLoggerTotalReadBufferSizeMB"),(0,n.kt)("td",{parentName:"tr",align:null},"Total read buffer size in megabytes for all the entry directories. The read buffer size of each entry directory needs to be divided by the number of entry directories."),(0,n.kt)("td",{parentName:"tr",align:null},"1/8 of max direct memory")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"dbStorage_directIOEntryLoggerReadBufferSizeMB"),(0,n.kt)("td",{parentName:"tr",align:null},"The buffer size, in megabytes, for each direct reader to read data from the entry log file. An entry log file will have only one direct reader."),(0,n.kt)("td",{parentName:"tr",align:null},"8")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"dbStorage_directIOEntryLoggerMaxFdCacheTimeSeconds"),(0,n.kt)("td",{parentName:"tr",align:null},"Maximum cache time after a direct reader is accessed."),(0,n.kt)("td",{parentName:"tr",align:null},"300")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"logSizeLimit"),(0,n.kt)("td",{parentName:"tr",align:null},"Max file size of entry logger, in bytes. A new entry log file will be created when the old one reaches the file size limitation."),(0,n.kt)("td",{parentName:"tr",align:null},"2147483648")))),(0,n.kt)("h2",{id:"entry-log-compaction-settings"},"Entry log compaction settings"),(0,n.kt)("table",null,(0,n.kt)("thead",{parentName:"table"},(0,n.kt)("tr",{parentName:"thead"},(0,n.kt)("th",{parentName:"tr",align:null},"Parameter"),(0,n.kt)("th",{parentName:"tr",align:null},"Description"),(0,n.kt)("th",{parentName:"tr",align:null},"Default"))),(0,n.kt)("tbody",{parentName:"table"},(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"isThrottleByBytes"),(0,n.kt)("td",{parentName:"tr",align:null},"Throttle compaction by bytes or by entries."),(0,n.kt)("td",{parentName:"tr",align:null},"false")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"compactionRate"),(0,n.kt)("td",{parentName:"tr",align:null},"The rate at which compaction will read entries. The unit is adds per second."),(0,n.kt)("td",{parentName:"tr",align:null},"1000")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"compactionRateByEntries"),(0,n.kt)("td",{parentName:"tr",align:null},"Set the rate at which compaction will read entries. The unit is adds per second."),(0,n.kt)("td",{parentName:"tr",align:null},"1000")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"compactionRateByBytes"),(0,n.kt)("td",{parentName:"tr",align:null},"Set the rate at which compaction will read entries. The unit is bytes added per second."),(0,n.kt)("td",{parentName:"tr",align:null},"1000000")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"compactionMaxOutstandingRequests"),(0,n.kt)("td",{parentName:"tr",align:null},"Set the maximum number of entries which can be compacted without flushing. When compacting, the entries are written to the entrylog and the new offsets are cached in memory. Once the entrylog is flushed the index is updated with the new offsets. This parameter controls the number of entries added to the entrylog before a flush is forced. A higher value for this parameter means more memory will be used for offsets. Each offset consists of 3 longs. This parameter should ",(0,n.kt)("em",{parentName:"td"},"not")," be modified unless you know what you're doing."),(0,n.kt)("td",{parentName:"tr",align:null},"100000")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"minorCompactionThreshold"),(0,n.kt)("td",{parentName:"tr",align:null},"Threshold of minor compaction. For those entry log files whose remaining size percentage reaches below this threshold will be compacted in a minor compaction. If it is set to less than zero, the minor compaction is disabled."),(0,n.kt)("td",{parentName:"tr",align:null},"0.2")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"majorCompactionThreshold"),(0,n.kt)("td",{parentName:"tr",align:null},"Threshold of major compaction. For those entry log files whose remaining size percentage reaches below this threshold will be compacted in a major compaction. Those entry log files whose remaining size percentage is still higher than the threshold will never be compacted. If it is set to less than zero, the minor compaction is disabled."),(0,n.kt)("td",{parentName:"tr",align:null},"0.8")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"minorCompactionInterval"),(0,n.kt)("td",{parentName:"tr",align:null},"Interval to run minor compaction, in seconds. If it is set to less than zero, the minor compaction is disabled."),(0,n.kt)("td",{parentName:"tr",align:null},"3600")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"majorCompactionInterval"),(0,n.kt)("td",{parentName:"tr",align:null},"Interval to run major compaction, in seconds. If it is set to less than zero, the major compaction is disabled."),(0,n.kt)("td",{parentName:"tr",align:null},"86400")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"minorCompactionMaxTimeMillis"),(0,n.kt)("td",{parentName:"tr",align:null},"Maximum milliseconds to run minor Compaction."),(0,n.kt)("td",{parentName:"tr",align:null},"-1 to run indefinitely.")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"majorCompactionMaxTimeMillis"),(0,n.kt)("td",{parentName:"tr",align:null},"Maximum milliseconds to run major Compaction."),(0,n.kt)("td",{parentName:"tr",align:null},"-1 to run indefinitely.")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"useTransactionalCompaction"),(0,n.kt)("td",{parentName:"tr",align:null},"Flag to enable/disable transactional compaction. If it is set to true, it will use transactional compaction, which uses",(0,n.kt)("br",null),"new entry log files to store entries after compaction; otherwise, it will use normal compaction, which shares same entry",(0,n.kt)("br",null),"log file with normal add operations.",(0,n.kt)("br",null)),(0,n.kt)("td",{parentName:"tr",align:null},"false")))),(0,n.kt)("h2",{id:"garbage-collection-settings"},"Garbage collection settings"),(0,n.kt)("table",null,(0,n.kt)("thead",{parentName:"table"},(0,n.kt)("tr",{parentName:"thead"},(0,n.kt)("th",{parentName:"tr",align:null},"Parameter"),(0,n.kt)("th",{parentName:"tr",align:null},"Description"),(0,n.kt)("th",{parentName:"tr",align:null},"Default"))),(0,n.kt)("tbody",{parentName:"table"},(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"gcWaitTime"),(0,n.kt)("td",{parentName:"tr",align:null},"How long the interval to trigger next garbage collection, in milliseconds. Since garbage collection is running in background, too frequent gc will heart performance. It is better to give a higher number of gc interval if there is enough disk capacity."),(0,n.kt)("td",{parentName:"tr",align:null},"1000")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"gcOverreplicatedLedgerWaitTime"),(0,n.kt)("td",{parentName:"tr",align:null},"How long the interval to trigger next garbage collection of overreplicated ledgers, in milliseconds. This should not be run very frequently since we read the metadata for all the ledgers on the bookie from zk."),(0,n.kt)("td",{parentName:"tr",align:null},"86400000")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"gcOverreplicatedLedgerMaxConcurrentRequests"),(0,n.kt)("td",{parentName:"tr",align:null},"Max number of concurrent requests in garbage collection of overreplicated ledgers."),(0,n.kt)("td",{parentName:"tr",align:null},"1000")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"isForceGCAllowWhenNoSpace"),(0,n.kt)("td",{parentName:"tr",align:null},"Whether force compaction is allowed when the disk is full or almost full. Forcing GC may get some space back, but may also fill up disk space more quickly. This is because new log files are created before GC, while old garbage log files are deleted after GC."),(0,n.kt)("td",{parentName:"tr",align:null},"false")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"verifyMetadataOnGC"),(0,n.kt)("td",{parentName:"tr",align:null},"Whether the bookie should double check if a ledger exists in metadata service prior to gc."),(0,n.kt)("td",{parentName:"tr",align:null},"false")))),(0,n.kt)("h2",{id:"disk-utilization"},"Disk utilization"),(0,n.kt)("table",null,(0,n.kt)("thead",{parentName:"table"},(0,n.kt)("tr",{parentName:"thead"},(0,n.kt)("th",{parentName:"tr",align:null},"Parameter"),(0,n.kt)("th",{parentName:"tr",align:null},"Description"),(0,n.kt)("th",{parentName:"tr",align:null},"Default"))),(0,n.kt)("tbody",{parentName:"table"},(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"diskUsageThreshold"),(0,n.kt)("td",{parentName:"tr",align:null},"For each ledger dir, maximum disk space which can be used. Default is 0.95f. i.e. 95% of disk can be used at most after which nothing will be written to that partition. If all ledger dir partions are full, then bookie will turn to readonly mode if 'readOnlyModeEnabled=true' is set, else it will shutdown. Valid values should be in between 0 and 1 (exclusive).",(0,n.kt)("br",null)),(0,n.kt)("td",{parentName:"tr",align:null},"0.95")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"diskUsageWarnThreshold"),(0,n.kt)("td",{parentName:"tr",align:null},"The disk free space low water mark threshold. Disk is considered full when usage threshold is exceeded. Disk returns back to non-full state when usage is below low water mark threshold. This prevents it from going back and forth between these states frequently when concurrent writes and compaction are happening. This also prevent bookie from switching frequently between read-only and read-writes states in the same cases."),(0,n.kt)("td",{parentName:"tr",align:null},"0.95")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"diskUsageLwmThreshold"),(0,n.kt)("td",{parentName:"tr",align:null},"Set the disk free space low water mark threshold. Disk is considered full when usage threshold is exceeded. Disk returns back to non-full state when usage is below low water mark threshold. This prevents it from going back and forth between these states frequently when concurrent writes and compaction are happening. This also prevent bookie from switching frequently between read-only and read-writes states in the same cases.",(0,n.kt)("br",null)),(0,n.kt)("td",{parentName:"tr",align:null},"0.9")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"diskCheckInterval"),(0,n.kt)("td",{parentName:"tr",align:null},"Disk check interval in milliseconds. Interval to check the ledger dirs usage."),(0,n.kt)("td",{parentName:"tr",align:null},"10000")))),(0,n.kt)("h2",{id:"sorted-ledger-storage-settings"},"Sorted Ledger Storage Settings"),(0,n.kt)("table",null,(0,n.kt)("thead",{parentName:"table"},(0,n.kt)("tr",{parentName:"thead"},(0,n.kt)("th",{parentName:"tr",align:null},"Parameter"),(0,n.kt)("th",{parentName:"tr",align:null},"Description"),(0,n.kt)("th",{parentName:"tr",align:null},"Default"))),(0,n.kt)("tbody",{parentName:"table"},(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"skipListSizeLimit"),(0,n.kt)("td",{parentName:"tr",align:null},"The skip list data size limitation (default 64MB) in EntryMemTable"),(0,n.kt)("td",{parentName:"tr",align:null},"67108864")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"skipListArenaChunkSize"),(0,n.kt)("td",{parentName:"tr",align:null},"The number of bytes we should use as chunk allocation for org.apache.bookkeeper.bookie.SkipListArena"),(0,n.kt)("td",{parentName:"tr",align:null},"4194304")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"skipListArenaMaxAllocSize"),(0,n.kt)("td",{parentName:"tr",align:null},"The max size we should allocate from the skiplist arena. Allocations larger than this should be allocated directly by the VM to avoid fragmentation."),(0,n.kt)("td",{parentName:"tr",align:null},"131072")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"openFileLimit"),(0,n.kt)("td",{parentName:"tr",align:null},"Max number of ledger index files could be opened in bookie server. If number of ledger index files reaches this limitation, bookie server started to swap some ledgers from memory to disk. Too frequent swap will affect performance. You can tune this number to gain performance according your requirements.",(0,n.kt)("br",null)),(0,n.kt)("td",{parentName:"tr",align:null},"20000")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"fileInfoCacheInitialCapacity"),(0,n.kt)("td",{parentName:"tr",align:null},"The minimum total size of the internal file info cache table. Providing a large enough estimate at construction time avoids the need for expensive resizing operations later,",(0,n.kt)("br",null),"but setting this value unnecessarily high wastes memory. The default value is ",(0,n.kt)("inlineCode",{parentName:"td"},"1/4")," of ",(0,n.kt)("inlineCode",{parentName:"td"},"openFileLimit")," if openFileLimit is positive, otherwise it is 64.",(0,n.kt)("br",null)),(0,n.kt)("td",{parentName:"tr",align:null})),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"fileInfoMaxIdleTime"),(0,n.kt)("td",{parentName:"tr",align:null},"The max idle time allowed for an open file info existed in the file info cache. If the file info is idle for a long time, exceed the given time period. The file info will be",(0,n.kt)("br",null),"evicted and closed. If the value is zero or negative, the file info is evicted only when opened files reached ",(0,n.kt)("inlineCode",{parentName:"td"},"openFileLimit"),".",(0,n.kt)("br",null)),(0,n.kt)("td",{parentName:"tr",align:null})),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"fileInfoFormatVersionToWrite"),(0,n.kt)("td",{parentName:"tr",align:null},"The fileinfo format version to write.",(0,n.kt)("br",null),"Available formats are 0-1:",(0,n.kt)("br",null)," 0: Initial version",(0,n.kt)("br",null)," 1: persisting explicitLac is introduced",(0,n.kt)("br",null),(0,n.kt)("br",null),"By default, it is ",(0,n.kt)("inlineCode",{parentName:"td"},"1"),". If you'd like to disable persisting ExplicitLac, you can set this config to 0 and also journalFormatVersionToWrite should be set to < 6. If there is mismatch then the serverconfig is considered invalid.",(0,n.kt)("br",null)),(0,n.kt)("td",{parentName:"tr",align:null},"1")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"pageSize"),(0,n.kt)("td",{parentName:"tr",align:null},"Size of a index page in ledger cache, in bytes. A larger index page can improve performance writing page to disk, which is efficent when you have small number of ledgers and these ledgers have similar number of entries. If you have large number of ledgers and each ledger has fewer entries, smaller index page would improve memory usage.",(0,n.kt)("br",null)),(0,n.kt)("td",{parentName:"tr",align:null},"8192")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"pageLimit"),(0,n.kt)("td",{parentName:"tr",align:null},"How many index pages provided in ledger cache. If number of index pages reaches this limitation, bookie server starts to swap some ledgers from memory to disk. You can increment this value when you found swap became more frequent. But make sure pageLimit*pageSize should not more than JVM max memory limitation, otherwise you would got OutOfMemoryException. In general, incrementing pageLimit, using smaller index page would gain bettern performance in lager number of ledgers with fewer entries case. If pageLimit is -1, bookie server will use 1/3 of JVM memory to compute the limitation of number of index pages.",(0,n.kt)("br",null)),(0,n.kt)("td",{parentName:"tr",align:null},"-1")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"numOfMemtableFlushThreads"),(0,n.kt)("td",{parentName:"tr",align:null},"When entryLogPerLedger is enabled SortedLedgerStorage flushes entries from memTable using OrderedExecutor having numOfMemtableFlushThreads number of threads.",(0,n.kt)("br",null)),(0,n.kt)("td",{parentName:"tr",align:null},"8")))),(0,n.kt)("h2",{id:"db-ledger-storage-settings"},"DB Ledger Storage Settings"),(0,n.kt)("table",null,(0,n.kt)("thead",{parentName:"table"},(0,n.kt)("tr",{parentName:"thead"},(0,n.kt)("th",{parentName:"tr",align:null},"Parameter"),(0,n.kt)("th",{parentName:"tr",align:null},"Description"),(0,n.kt)("th",{parentName:"tr",align:null},"Default"))),(0,n.kt)("tbody",{parentName:"table"},(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"dbStorage_writeCacheMaxSizeMb"),(0,n.kt)("td",{parentName:"tr",align:null},"Size of write cache. Memory is allocated from JVM direct memory. Write cache is used for buffer entries before flushing into the entry log. For good performance, it should be big enough to hold a substantial amount of entries in the flush interval."),(0,n.kt)("td",{parentName:"tr",align:null},"25% of the available direct memory")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"dbStorage_readAheadCacheMaxSizeMb"),(0,n.kt)("td",{parentName:"tr",align:null},"Size of read cache. Memory is allocated from JVM direct memory. The read cache is pre-filled doing read-ahead whenever a cache miss happens."),(0,n.kt)("td",{parentName:"tr",align:null},"25% of the available direct memroy")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"dbStorage_readAheadCacheBatchSize"),(0,n.kt)("td",{parentName:"tr",align:null},"How many entries to pre-fill in cache after a read cache miss"),(0,n.kt)("td",{parentName:"tr",align:null},"100")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"dbStorage_rocksDB_blockSize"),(0,n.kt)("td",{parentName:"tr",align:null},"Size of RocksDB block-cache. RocksDB is used for storing ledger indexes.",(0,n.kt)("br",null),"For best performance, this cache should be big enough to hold a significant portion of the index database which can reach ~2GB in some cases.",(0,n.kt)("br",null)),(0,n.kt)("td",{parentName:"tr",align:null},"268435456")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"dbStorage_rocksDB_writeBufferSizeMB"),(0,n.kt)("td",{parentName:"tr",align:null},"Size of RocksDB write buffer. RocksDB is used for storing ledger indexes.",(0,n.kt)("br",null)),(0,n.kt)("td",{parentName:"tr",align:null},"64")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"dbStorage_rocksDB_sstSizeInMB"),(0,n.kt)("td",{parentName:"tr",align:null},"Size of RocksDB sst file size in MB. RocksDB is used for storing ledger indexes.",(0,n.kt)("br",null)),(0,n.kt)("td",{parentName:"tr",align:null},"64")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"dbStorage_rocksDB_blockSize"),(0,n.kt)("td",{parentName:"tr",align:null}),(0,n.kt)("td",{parentName:"tr",align:null},"65536")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"dbStorage_rocksDB_bloomFilterBitsPerKey"),(0,n.kt)("td",{parentName:"tr",align:null}),(0,n.kt)("td",{parentName:"tr",align:null},"10")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"dbStorage_rocksDB_numLevels"),(0,n.kt)("td",{parentName:"tr",align:null}),(0,n.kt)("td",{parentName:"tr",align:null},"-1")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"dbStorage_rocksDB_numFilesInLevel0"),(0,n.kt)("td",{parentName:"tr",align:null}),(0,n.kt)("td",{parentName:"tr",align:null},"10")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"dbStorage_rocksDB_maxSizeInLevel1MB"),(0,n.kt)("td",{parentName:"tr",align:null}),(0,n.kt)("td",{parentName:"tr",align:null},"256")))),(0,n.kt)("blockquote",null,(0,n.kt)("p",{parentName:"blockquote"},"Note:\nThe RocksDB configuration is deprecated in the bk_server.conf since 4.15.0. It will use independent configuration file.\nThere have three configuration file ",(0,n.kt)("inlineCode",{parentName:"p"},"default_rocksdb.conf"),", ",(0,n.kt)("inlineCode",{parentName:"p"},"entry_location_rocksdb.conf")," and ",(0,n.kt)("inlineCode",{parentName:"p"},"ledger_metadata_rocksdb.conf"),".\n",(0,n.kt)("inlineCode",{parentName:"p"},"default_rocksdb.conf")," is used for default,command until or test case.\n",(0,n.kt)("inlineCode",{parentName:"p"},"entry_location_rocksdb.conf")," is used for location index, lots of writes and much bigger dataset.\n",(0,n.kt)("inlineCode",{parentName:"p"},"ledger_metadata_rocksdb.conf")," is used for ledgers db, doesn't need particular configuration."),(0,n.kt)("p",{parentName:"blockquote"},"By default, we are still getting rocksDB properties from the ",(0,n.kt)("inlineCode",{parentName:"p"},"bk_server.conf"),". If you want to use the independent\nconfiguration file for the rocksDB, you can rename the configuration files without the suffix ",(0,n.kt)("inlineCode",{parentName:"p"},".default"),", then the rocksDB\nused in the storage will load them.")),(0,n.kt)("h2",{id:"metadata-service-settings"},"Metadata Service Settings"),(0,n.kt)("table",null,(0,n.kt)("thead",{parentName:"table"},(0,n.kt)("tr",{parentName:"thead"},(0,n.kt)("th",{parentName:"tr",align:null},"Parameter"),(0,n.kt)("th",{parentName:"tr",align:null},"Description"),(0,n.kt)("th",{parentName:"tr",align:null},"Default"))),(0,n.kt)("tbody",{parentName:"table"},(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"metadataServiceUri"),(0,n.kt)("td",{parentName:"tr",align:null},"metadata service uri that bookkeeper is used for loading corresponding metadata driver and resolving its metadata service location."),(0,n.kt)("td",{parentName:"tr",align:null},"zk+hierarchical://localhost:2181/ledgers")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"ledgerManagerFactoryClass"),(0,n.kt)("td",{parentName:"tr",align:null},"@Deprecated in favor of using ",(0,n.kt)("inlineCode",{parentName:"td"},"metadataServiceUri"),(0,n.kt)("br",null),(0,n.kt)("br",null),"The ledger manager factory class, which defines how ledgers are stored, managed, and garbage collected. See the ",(0,n.kt)("a",{parentName:"td",href:"../getting-started/concepts#ledger-manager"},"Ledger Manager")," guide for more details.",(0,n.kt)("br",null)),(0,n.kt)("td",{parentName:"tr",align:null},"hierarchical")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"allowShadedLedgerManagerFactoryClass"),(0,n.kt)("td",{parentName:"tr",align:null},"Sometimes the bookkeeper server classes are shaded. The ledger manager factory classes might be relocated to be under other packages.",(0,n.kt)("br",null),"This would fail the clients using shaded factory classes since the factory classes are stored in cookies and used for verification.",(0,n.kt)("br",null),"Users can enable this flag to allow using shaded ledger manager factory classes to connect to a bookkeeper cluster.",(0,n.kt)("br",null)),(0,n.kt)("td",{parentName:"tr",align:null},"false")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"shadedLedgerManagerFactoryClassPrefix"),(0,n.kt)("td",{parentName:"tr",align:null},"The shaded ledger manager factory prefix. This is used when ",(0,n.kt)("inlineCode",{parentName:"td"},"allowShadedLedgerManagerFactoryClass")," is set to true."),(0,n.kt)("td",{parentName:"tr",align:null},"dlshade.")))),(0,n.kt)("h2",{id:"zookeeper-metadata-service-settings"},"ZooKeeper Metadata Service Settings"),(0,n.kt)("table",null,(0,n.kt)("thead",{parentName:"table"},(0,n.kt)("tr",{parentName:"thead"},(0,n.kt)("th",{parentName:"tr",align:null},"Parameter"),(0,n.kt)("th",{parentName:"tr",align:null},"Description"),(0,n.kt)("th",{parentName:"tr",align:null},"Default"))),(0,n.kt)("tbody",{parentName:"table"},(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"zkLedgersRootPath"),(0,n.kt)("td",{parentName:"tr",align:null},"@Deprecated in favor of using ",(0,n.kt)("inlineCode",{parentName:"td"},"metadataServiceUri"),(0,n.kt)("br",null),(0,n.kt)("br",null),"Root Zookeeper path to store ledger metadata. This parameter is used by zookeeper-based ledger manager as a root znode to store all ledgers.",(0,n.kt)("br",null)),(0,n.kt)("td",{parentName:"tr",align:null},"/ledgers")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"zkServers"),(0,n.kt)("td",{parentName:"tr",align:null},"@Deprecated in favor of using ",(0,n.kt)("inlineCode",{parentName:"td"},"metadataServiceUri"),(0,n.kt)("br",null),(0,n.kt)("br",null),"A list of one of more servers on which Zookeeper is running. The server list can be comma separated values, for example ",(0,n.kt)("inlineCode",{parentName:"td"},"zkServers=zk1:2181,zk2:2181,zk3:2181"),".",(0,n.kt)("br",null)),(0,n.kt)("td",{parentName:"tr",align:null},"localhost:2181")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"zkTimeout"),(0,n.kt)("td",{parentName:"tr",align:null},"ZooKeeper client session timeout in milliseconds. Bookie server will exit if it received SESSION_EXPIRED because it was partitioned off from ZooKeeper for more than the session timeout JVM garbage collection, disk I/O will cause SESSION_EXPIRED. Increment this value could help avoiding this issue."),(0,n.kt)("td",{parentName:"tr",align:null},"10000")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"zkRetryBackoffStartMs"),(0,n.kt)("td",{parentName:"tr",align:null},"The Zookeeper client backoff retry start time in millis."),(0,n.kt)("td",{parentName:"tr",align:null},"1000")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"zkRetryBackoffMaxMs"),(0,n.kt)("td",{parentName:"tr",align:null},"The Zookeeper client backoff retry max time in millis."),(0,n.kt)("td",{parentName:"tr",align:null},"10000")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"zkRequestRateLimit"),(0,n.kt)("td",{parentName:"tr",align:null},"The Zookeeper request limit. It is only enabled when setting a postivie value."),(0,n.kt)("td",{parentName:"tr",align:null})),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"zkEnableSecurity"),(0,n.kt)("td",{parentName:"tr",align:null},"Set ACLs on every node written on ZooKeeper, this way only allowed users will be able to read and write BookKeeper metadata stored on ZooKeeper. In order to make ACLs work you need to setup ZooKeeper JAAS authentication all the bookies and Client need to share the same user, and this is usually done using Kerberos authentication. See ZooKeeper documentation"),(0,n.kt)("td",{parentName:"tr",align:null},"false")))),(0,n.kt)("h2",{id:"statistics"},"Statistics"),(0,n.kt)("table",null,(0,n.kt)("thead",{parentName:"table"},(0,n.kt)("tr",{parentName:"thead"},(0,n.kt)("th",{parentName:"tr",align:null},"Parameter"),(0,n.kt)("th",{parentName:"tr",align:null},"Description"),(0,n.kt)("th",{parentName:"tr",align:null},"Default"))),(0,n.kt)("tbody",{parentName:"table"},(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"enableStatistics"),(0,n.kt)("td",{parentName:"tr",align:null},"Whether statistics are enabled for the bookie."),(0,n.kt)("td",{parentName:"tr",align:null},"true")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"sanityCheckMetricsEnabled"),(0,n.kt)("td",{parentName:"tr",align:null},"Flag to enable sanity check metrics in bookie stats."),(0,n.kt)("td",{parentName:"tr",align:null},"false")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"statsProviderClass"),(0,n.kt)("td",{parentName:"tr",align:null},"Stats provider class.",(0,n.kt)("br",null),"Options:",(0,n.kt)("br",null)," - Prometheus    : org.apache.bookkeeper.stats.prometheus.PrometheusMetricsProvider",(0,n.kt)("br",null)," - Codahale     : org.apache.bookkeeper.stats.codahale.CodahaleMetricsProvider",(0,n.kt)("br",null)," - Twitter Finagle  : org.apache.bookkeeper.stats.twitter.finagle.FinagleStatsProvider",(0,n.kt)("br",null)," - Twitter Ostrich  : org.apache.bookkeeper.stats.twitter.ostrich.OstrichProvider",(0,n.kt)("br",null)," - Twitter Science  : org.apache.bookkeeper.stats.twitter.science.TwitterStatsProvider",(0,n.kt)("br",null)),(0,n.kt)("td",{parentName:"tr",align:null},"org.apache.bookkeeper.stats.prometheus.PrometheusMetricsProvider")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"limitStatsLogging"),(0,n.kt)("td",{parentName:"tr",align:null},"option to limit stats logging"),(0,n.kt)("td",{parentName:"tr",align:null},"true")))),(0,n.kt)("h2",{id:"prometheus-metrics-provider-settings"},"Prometheus Metrics Provider Settings"),(0,n.kt)("table",null,(0,n.kt)("thead",{parentName:"table"},(0,n.kt)("tr",{parentName:"thead"},(0,n.kt)("th",{parentName:"tr",align:null},"Parameter"),(0,n.kt)("th",{parentName:"tr",align:null},"Description"),(0,n.kt)("th",{parentName:"tr",align:null},"Default"))),(0,n.kt)("tbody",{parentName:"table"},(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"prometheusStatsHttpAddress"),(0,n.kt)("td",{parentName:"tr",align:null},"default bind address for Prometheus metrics exporter"),(0,n.kt)("td",{parentName:"tr",align:null},"0.0.0.0")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"prometheusStatsHttpPort"),(0,n.kt)("td",{parentName:"tr",align:null},"default port for prometheus metrics exporter"),(0,n.kt)("td",{parentName:"tr",align:null},"8000")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"prometheusStatsLatencyRolloverSeconds"),(0,n.kt)("td",{parentName:"tr",align:null},"latency stats rollover interval, in seconds"),(0,n.kt)("td",{parentName:"tr",align:null},"60")))),(0,n.kt)("h2",{id:"codahale-metrics-provider-settings"},"Codahale Metrics Provider Settings"),(0,n.kt)("table",null,(0,n.kt)("thead",{parentName:"table"},(0,n.kt)("tr",{parentName:"thead"},(0,n.kt)("th",{parentName:"tr",align:null},"Parameter"),(0,n.kt)("th",{parentName:"tr",align:null},"Description"),(0,n.kt)("th",{parentName:"tr",align:null},"Default"))),(0,n.kt)("tbody",{parentName:"table"},(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"codahaleStatsPrefix"),(0,n.kt)("td",{parentName:"tr",align:null},"metric name prefix, default is empty."),(0,n.kt)("td",{parentName:"tr",align:null})),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"codahaleStatsOutputFrequencySeconds"),(0,n.kt)("td",{parentName:"tr",align:null},"the frequency that stats reporters report stats, in seconds."),(0,n.kt)("td",{parentName:"tr",align:null},"60")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"codahaleStatsGraphiteEndpoint"),(0,n.kt)("td",{parentName:"tr",align:null},"the graphite endpoint for reporting stats. see ",(0,n.kt)("a",{parentName:"td",href:"//metrics.dropwizard.io/3.1.0/manual/graphite/"},"graphite reporter")," for more details."),(0,n.kt)("td",{parentName:"tr",align:null},"null")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"codahaleStatsCSVEndpoint"),(0,n.kt)("td",{parentName:"tr",align:null},"the directory for reporting stats in csv format. see ",(0,n.kt)("a",{parentName:"td",href:"//metrics.dropwizard.io/3.1.0/manual/core/#csv"},"csv reporter")," for more details."),(0,n.kt)("td",{parentName:"tr",align:null},"null")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"codahaleStatsSlf4jEndpoint"),(0,n.kt)("td",{parentName:"tr",align:null},"the slf4j endpoint for reporting stats. see ",(0,n.kt)("a",{parentName:"td",href:"//metrics.dropwizard.io/3.1.0/manual/core/#slf4j"},"slf4j reporter")," for more details."),(0,n.kt)("td",{parentName:"tr",align:null},"null")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"codahaleStatsJmxEndpoint"),(0,n.kt)("td",{parentName:"tr",align:null},"the jmx endpoint for reporting stats. see ",(0,n.kt)("a",{parentName:"td",href:"//metrics.dropwizard.io/3.1.0/manual/core/#jmx"},"jmx reporter")," for more details."),(0,n.kt)("td",{parentName:"tr",align:null})))),(0,n.kt)("h2",{id:"twitter-ostrich-metrics-provider"},"Twitter Ostrich Metrics Provider"),(0,n.kt)("table",null,(0,n.kt)("thead",{parentName:"table"},(0,n.kt)("tr",{parentName:"thead"},(0,n.kt)("th",{parentName:"tr",align:null},"Parameter"),(0,n.kt)("th",{parentName:"tr",align:null},"Description"),(0,n.kt)("th",{parentName:"tr",align:null},"Default"))),(0,n.kt)("tbody",{parentName:"table"},(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"statsExport"),(0,n.kt)("td",{parentName:"tr",align:null},"Flag to control whether to expose ostrich metrics via a http endpoint configured by ",(0,n.kt)("inlineCode",{parentName:"td"},"statsHttpPort"),"."),(0,n.kt)("td",{parentName:"tr",align:null},"false")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"statsHttpPort"),(0,n.kt)("td",{parentName:"tr",align:null},"The http port of exposing ostrich stats if ",(0,n.kt)("inlineCode",{parentName:"td"},"statsExport")," is set to true"),(0,n.kt)("td",{parentName:"tr",align:null},"9002")))),(0,n.kt)("h2",{id:"twitter-science-metrics-provider"},"Twitter Science Metrics Provider"),(0,n.kt)("table",null,(0,n.kt)("thead",{parentName:"table"},(0,n.kt)("tr",{parentName:"thead"},(0,n.kt)("th",{parentName:"tr",align:null},"Parameter"),(0,n.kt)("th",{parentName:"tr",align:null},"Description"),(0,n.kt)("th",{parentName:"tr",align:null},"Default"))),(0,n.kt)("tbody",{parentName:"table"},(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"statsExport"),(0,n.kt)("td",{parentName:"tr",align:null},"Flag to control whether to expose metrics via a http endpoint configured by ",(0,n.kt)("inlineCode",{parentName:"td"},"statsHttpPort"),"."),(0,n.kt)("td",{parentName:"tr",align:null},"false")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"statsHttpPort"),(0,n.kt)("td",{parentName:"tr",align:null},"The http port of exposing stats if ",(0,n.kt)("inlineCode",{parentName:"td"},"statsExport")," is set to true"),(0,n.kt)("td",{parentName:"tr",align:null},"9002")))),(0,n.kt)("h2",{id:"autorecovery-general-settings"},"AutoRecovery general settings"),(0,n.kt)("table",null,(0,n.kt)("thead",{parentName:"table"},(0,n.kt)("tr",{parentName:"thead"},(0,n.kt)("th",{parentName:"tr",align:null},"Parameter"),(0,n.kt)("th",{parentName:"tr",align:null},"Description"),(0,n.kt)("th",{parentName:"tr",align:null},"Default"))),(0,n.kt)("tbody",{parentName:"table"},(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"autoRecoveryDaemonEnabled"),(0,n.kt)("td",{parentName:"tr",align:null},"Whether the bookie itself can start auto-recovery service also or not."),(0,n.kt)("td",{parentName:"tr",align:null})),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"digestType"),(0,n.kt)("td",{parentName:"tr",align:null},"The default digest type used for opening ledgers."),(0,n.kt)("td",{parentName:"tr",align:null},"CRC32")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"passwd"),(0,n.kt)("td",{parentName:"tr",align:null},"The default password used for opening ledgers. Default value is empty string."),(0,n.kt)("td",{parentName:"tr",align:null})),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"enableDigestTypeAutodetection"),(0,n.kt)("td",{parentName:"tr",align:null},"The flag to enable/disable digest type auto-detection. If it is enabled, the bookkeeper client will ignore the provided digest type provided at ",(0,n.kt)("inlineCode",{parentName:"td"},"digestType")," and the provided passwd provided at ",(0,n.kt)("inlineCode",{parentName:"td"},"passwd"),"."),(0,n.kt)("td",{parentName:"tr",align:null},"true")))),(0,n.kt)("h2",{id:"autorecovery-placement-settings"},"AutoRecovery placement settings"),(0,n.kt)("table",null,(0,n.kt)("thead",{parentName:"table"},(0,n.kt)("tr",{parentName:"thead"},(0,n.kt)("th",{parentName:"tr",align:null},"Parameter"),(0,n.kt)("th",{parentName:"tr",align:null},"Description"),(0,n.kt)("th",{parentName:"tr",align:null},"Default"))),(0,n.kt)("tbody",{parentName:"table"},(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"ensemblePlacementPolicy"),(0,n.kt)("td",{parentName:"tr",align:null},"The ensemble placement policy used for finding bookie for re-replicating entries.",(0,n.kt)("br",null),(0,n.kt)("br",null),"Options:",(0,n.kt)("br",null)," - org.apache.bookkeeper.client.RackawareEnsemblePlacementPolicy",(0,n.kt)("br",null)," - org.apache.bookkeeper.client.RegionAwareEnsemblePlacementPolicy",(0,n.kt)("br",null)),(0,n.kt)("td",{parentName:"tr",align:null},"org.apache.bookkeeper.client.RackawareEnsemblePlacementPolicy")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"reppDnsResolverClass"),(0,n.kt)("td",{parentName:"tr",align:null},"The DNS resolver class used for resolving network locations for bookies. The setting is used",(0,n.kt)("br",null),"when using either RackawareEnsemblePlacementPolicy and RegionAwareEnsemblePlacementPolicy.",(0,n.kt)("br",null)),(0,n.kt)("td",{parentName:"tr",align:null},"org.apache.bookkeeper.net.ScriptBasedMapping")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"networkTopologyScriptFileName"),(0,n.kt)("td",{parentName:"tr",align:null},"The bash script used by ",(0,n.kt)("inlineCode",{parentName:"td"},"ScriptBasedMapping")," DNS resolver for resolving bookies' network locations.",(0,n.kt)("br",null)),(0,n.kt)("td",{parentName:"tr",align:null})),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"networkTopologyScriptNumberArgs"),(0,n.kt)("td",{parentName:"tr",align:null},"The max number of args used in the script provided at ",(0,n.kt)("inlineCode",{parentName:"td"},"networkTopologyScriptFileName"),".",(0,n.kt)("br",null)),(0,n.kt)("td",{parentName:"tr",align:null})),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"minNumRacksPerWriteQuorum"),(0,n.kt)("td",{parentName:"tr",align:null},"minimum number of racks per write quorum. RackawareEnsemblePlacementPolicy will try to get bookies from atleast 'minNumRacksPerWriteQuorum' racks for a writeQuorum.",(0,n.kt)("br",null)),(0,n.kt)("td",{parentName:"tr",align:null})),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"enforceMinNumRacksPerWriteQuorum"),(0,n.kt)("td",{parentName:"tr",align:null},"'enforceMinNumRacksPerWriteQuorum' enforces RackawareEnsemblePlacementPolicy to pick bookies from 'minNumRacksPerWriteQuorum' racks for a writeQuorum. If it cann't find bookie then it would throw BKNotEnoughBookiesException instead of picking random one.",(0,n.kt)("br",null)),(0,n.kt)("td",{parentName:"tr",align:null})),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"ignoreLocalNodeInPlacementPolicy"),(0,n.kt)("td",{parentName:"tr",align:null},"'ignoreLocalNodeInPlacementPolicy' specifies whether to ignore localnode in the internal logic of placement policy. If it is not possible or useful to use Bookkeeper client node's (or AutoReplicator) rack/region info. for placement policy then it is better to ignore localnode instead of false alarming with log lines and metrics.",(0,n.kt)("br",null)),(0,n.kt)("td",{parentName:"tr",align:null})),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"enforceMinNumFaultDomainsForWrite"),(0,n.kt)("td",{parentName:"tr",align:null},"'enforceMinNumFaultDomainsForWrite' enforces EnsemblePlacementPolicy to check if a write has made it to bookies in 'minNumRacksPerWriteQuorum' number of fault domains, before acknowledging the write back.",(0,n.kt)("br",null)),(0,n.kt)("td",{parentName:"tr",align:null})),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"minNumZonesPerWriteQuorum"),(0,n.kt)("td",{parentName:"tr",align:null},"minimum number of zones per write quorum in ZoneawareEnsemblePlacementPolicy. ZoneawareEnsemblePlacementPolicy would get bookies from atleast 'minNumZonesPerWriteQuorum' racks for a writeQuorum.",(0,n.kt)("br",null)),(0,n.kt)("td",{parentName:"tr",align:null},"2")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"desiredNumZonesPerWriteQuorum"),(0,n.kt)("td",{parentName:"tr",align:null},"desired number of zones per write quorum in ZoneawareEnsemblePlacementPolicy. ZoneawareEnsemblePlacementPolicy will try to get bookies from 'desiredNumZonesPerWriteQuorum' zones for a writeQuorum.",(0,n.kt)("br",null)),(0,n.kt)("td",{parentName:"tr",align:null},"3")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"enforceStrictZoneawarePlacement"),(0,n.kt)("td",{parentName:"tr",align:null},"in ZoneawareEnsemblePlacementPolicy if strict placement is enabled then minZones/desiredZones in writeQuorum would be maintained otherwise it will pick nodes randomly.",(0,n.kt)("br",null)),(0,n.kt)("td",{parentName:"tr",align:null},"true")))),(0,n.kt)("h2",{id:"autorecovery-auditor-settings"},"AutoRecovery auditor settings"),(0,n.kt)("table",null,(0,n.kt)("thead",{parentName:"table"},(0,n.kt)("tr",{parentName:"thead"},(0,n.kt)("th",{parentName:"tr",align:null},"Parameter"),(0,n.kt)("th",{parentName:"tr",align:null},"Description"),(0,n.kt)("th",{parentName:"tr",align:null},"Default"))),(0,n.kt)("tbody",{parentName:"table"},(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"auditorPeriodicBookieCheckInterval"),(0,n.kt)("td",{parentName:"tr",align:null},"The time interval between auditor bookie checks, in seconds. The auditor bookie check checks ledger metadata to see which bookies should contain entries for each ledger. If a bookie that should contain entries is unavailable, then the ledger containing that entry is marked for recovery. Setting this to 0 disables the periodic check. Bookie checks will still run when a bookie fails. The default is once per day."),(0,n.kt)("td",{parentName:"tr",align:null},"86400")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"auditorPeriodicCheckInterval"),(0,n.kt)("td",{parentName:"tr",align:null},"The time interval, in seconds, at which the auditor will check all ledgers in the cluster. By default this runs once a week.",(0,n.kt)("br",null),(0,n.kt)("br",null),"Set this to 0 to disable the periodic check completely. Note that periodic checking will put extra load on the cluster, so it should not be run more frequently than once a day.",(0,n.kt)("br",null)),(0,n.kt)("td",{parentName:"tr",align:null},"604800")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"auditorPeriodicPlacementPolicyCheckInterval"),(0,n.kt)("td",{parentName:"tr",align:null},"The time interval between auditor placement policy checks, in seconds. The auditor placement policy check validates if the ensemble of segments of all the closed ledgers is adhering to the placement policy. It is just monitoring scrutiny but doesn't take any corrective measure other than logging error and reporting metrics. By default, it is disabled."),(0,n.kt)("td",{parentName:"tr",align:null},"0")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"repairedPlacementPolicyNotAdheringBookieEnabled"),(0,n.kt)("td",{parentName:"tr",align:null},"In Auditor, it combines with auditorPeriodicPlacementPolicyCheckInterval, to control is marked ledger id to under replication managed when found a ledger ensemble not adhere to placement policy. In ReplicationWorker, to control is to repair the ledger which the ensemble does not adhere to the placement policy. By default, it is disabled. If you want to enable this feature, consider two factors. 1:Must config RackawareEnsemblePlacementPolicy. 2:There maybe lots of ledger will be mark underreplicated. The replicationWorker will replicate lots of ledger, it will increase read request and write request in bookie server. You should set a suitable rereplicationEntryBatchSize to avoid bookie server pressure."),(0,n.kt)("td",{parentName:"tr",align:null},"false")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"auditorLedgerVerificationPercentage"),(0,n.kt)("td",{parentName:"tr",align:null},"The percentage of a ledger (fragment)'s entries will be verified before claiming a fragment as missing. If it is 0, it only verifies the first and last entries of a given fragment.",(0,n.kt)("br",null)),(0,n.kt)("td",{parentName:"tr",align:null})),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"lostBookieRecoveryDelay"),(0,n.kt)("td",{parentName:"tr",align:null},"How long to wait, in seconds, before starting autorecovery of a lost bookie."),(0,n.kt)("td",{parentName:"tr",align:null})),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"storeSystemTimeAsLedgerUnderreplicatedMarkTime"),(0,n.kt)("td",{parentName:"tr",align:null},"Enable the Auditor to use system time as underreplicated ledger mark time. If this is enabled, Auditor will write a ctime field into the underreplicated ledger znode."),(0,n.kt)("td",{parentName:"tr",align:null},"true")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"underreplicatedLedgerRecoveryGracePeriod"),(0,n.kt)("td",{parentName:"tr",align:null},"The grace period (in seconds) for underreplicated ledgers recovery. If ledger is marked underreplicated for more than this period then it will be reported by placementPolicyCheck in Auditor. Setting this to 0 will disable this check."),(0,n.kt)("td",{parentName:"tr",align:null})),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"auditorReplicasCheckInterval"),(0,n.kt)("td",{parentName:"tr",align:null},"Sets the regularity/interval at which the auditor will run a replicas check of all ledgers, which are closed. This should not be run very often since it validates availability of replicas of all ledgers by querying bookies. Setting this to 0 will completely disable the periodic replicas check. By default it is disabled."),(0,n.kt)("td",{parentName:"tr",align:null})))),(0,n.kt)("h2",{id:"autorecovery-replication-worker-settings"},"AutoRecovery replication worker settings"),(0,n.kt)("table",null,(0,n.kt)("thead",{parentName:"table"},(0,n.kt)("tr",{parentName:"thead"},(0,n.kt)("th",{parentName:"tr",align:null},"Parameter"),(0,n.kt)("th",{parentName:"tr",align:null},"Description"),(0,n.kt)("th",{parentName:"tr",align:null},"Default"))),(0,n.kt)("tbody",{parentName:"table"},(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"rereplicationEntryBatchSize"),(0,n.kt)("td",{parentName:"tr",align:null},"The number of entries that a replication will rereplicate in parallel."),(0,n.kt)("td",{parentName:"tr",align:null},"10")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"openLedgerRereplicationGracePeriod"),(0,n.kt)("td",{parentName:"tr",align:null},"The grace period, in milliseconds, that the replication worker waits before fencing and replicating a ledger fragment that's still being written to upon bookie failure."),(0,n.kt)("td",{parentName:"tr",align:null},"30000")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"lockReleaseOfFailedLedgerGracePeriod"),(0,n.kt)("td",{parentName:"tr",align:null},"Set the grace period, in milliseconds, which the replication worker has to wait before releasing the lock after it failed to replicate a ledger. For the first ReplicationWorker.NUM_OF_EXPONENTIAL_BACKOFF_RETRIALS failures it will do exponential backoff then it will bound at lockReleaseOfFailedLedgerGracePeriod."),(0,n.kt)("td",{parentName:"tr",align:null},"300000")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"rwRereplicateBackoffMs"),(0,n.kt)("td",{parentName:"tr",align:null},"The time to backoff when replication worker encounters exceptions on replicating a ledger, in milliseconds."),(0,n.kt)("td",{parentName:"tr",align:null},"5000")))),(0,n.kt)("h2",{id:"memory-allocator-settings"},"Memory allocator settings"),(0,n.kt)("table",null,(0,n.kt)("thead",{parentName:"table"},(0,n.kt)("tr",{parentName:"thead"},(0,n.kt)("th",{parentName:"tr",align:null},"Parameter"),(0,n.kt)("th",{parentName:"tr",align:null},"Description"),(0,n.kt)("th",{parentName:"tr",align:null},"Default"))),(0,n.kt)("tbody",{parentName:"table"},(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"allocatorPoolingPolicy"),(0,n.kt)("td",{parentName:"tr",align:null},"Define the memory pooling policy.",(0,n.kt)("br",null),(0,n.kt)("br",null),"Available options are:",(0,n.kt)("br",null)," - PooledDirect: Use Direct memory for all buffers and pool the memory.",(0,n.kt)("br",null),"         Direct memory will avoid the overhead of JVM GC and most",(0,n.kt)("br",null),"         memory copies when reading and writing to socket channel.",(0,n.kt)("br",null),"         Pooling will add memory space overhead due to the fact that",(0,n.kt)("br",null),"         there will be fragmentation in the allocator and that threads",(0,n.kt)("br",null),"         will keep a portion of memory as thread-local to avoid",(0,n.kt)("br",null),"         contention when possible.",(0,n.kt)("br",null)," - UnpooledHeap: Allocate memory from JVM heap without any pooling.",(0,n.kt)("br",null),"         This option has the least overhead in terms of memory usage",(0,n.kt)("br",null),"         since the memory will be automatically reclaimed by the",(0,n.kt)("br",null),"         JVM GC but might impose a performance penalty at high",(0,n.kt)("br",null),"         throughput.",(0,n.kt)("br",null)),(0,n.kt)("td",{parentName:"tr",align:null},"PooledDirect")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"allocatorPoolingConcurrency"),(0,n.kt)("td",{parentName:"tr",align:null},"Controls the amount of concurrency for the memory pool.",(0,n.kt)("br",null),"Default is to have a number of allocator arenas equals to 2 * CPUS.",(0,n.kt)("br",null),"Decreasing this number will reduce the amount of memory overhead, at the",(0,n.kt)("br",null),"expense of increased allocation contention.",(0,n.kt)("br",null)),(0,n.kt)("td",{parentName:"tr",align:null},"2 * CPUS")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"allocatorOutOfMemoryPolicy"),(0,n.kt)("td",{parentName:"tr",align:null},"Define the memory allocator out of memory policy.",(0,n.kt)("br",null),(0,n.kt)("br",null),"Available options are:",(0,n.kt)("br",null)," - FallbackToHeap: If it's not possible to allocate a buffer from direct memory,",(0,n.kt)("br",null),"          fallback to allocate an unpooled buffer from JVM heap.",(0,n.kt)("br",null),"          This will help absorb memory allocation spikes because the heap",(0,n.kt)("br",null),"          allocations will naturally slow down the process and will result",(0,n.kt)("br",null),"          if full GC cleanup if the Heap itself is full.",(0,n.kt)("br",null)," - ThrowException: Throw regular OOM exception without taking addition actions.",(0,n.kt)("br",null)),(0,n.kt)("td",{parentName:"tr",align:null},"FallbackToHeap")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"allocatorLeakDetectionPolicy"),(0,n.kt)("td",{parentName:"tr",align:null},"Define the memory allocator leak detection policy.",(0,n.kt)("br",null),(0,n.kt)("br",null),"Available options are:",(0,n.kt)("br",null)," - Disabled: No leak detection and no overhead.",(0,n.kt)("br",null)," - Simple: Instruments 1% of the allocated buffer to track for leaks.",(0,n.kt)("br",null)," - Advanced: Instruments 1% of the allocated buffer to track for leaks, reporting",(0,n.kt)("br",null),"       stack traces of places where the buffer was used.",(0,n.kt)("br",null)," - Paranoid: Instruments 100% of the allocated buffer to track for leaks, reporting",(0,n.kt)("br",null),"       stack traces of places where the buffer was used. Introduce very",(0,n.kt)("br",null),"       significant overhead.",(0,n.kt)("br",null)),(0,n.kt)("td",{parentName:"tr",align:null},"Disabled")))))}p.isMDXComponent=!0}}]);
\ No newline at end of file
diff --git a/content/assets/js/3044fa47.876a19ed.js b/content/assets/js/3044fa47.876a19ed.js
new file mode 100644
index 0000000..d265cef
--- /dev/null
+++ b/content/assets/js/3044fa47.876a19ed.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunksite_3=self.webpackChunksite_3||[]).push([[7322],{3905:function(e,t,a){a.d(t,{Zo:function(){return d},kt:function(){return u}});var n=a(67294);function r(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function o(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}return a}function l(e){for(var t=1;t<arguments.length;t++){var a=null!=arguments[t]?arguments[t]:{};t%2?o(Object(a),!0).forEach((function(t){r(e,t,a[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(a)):o(Object(a)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(a,t))}))}return e}function i(e,t){if(null==e)return{};var a,n,r=function(e,t){if(null==e)return{};var a,n,r={},o=Object.keys(e);for(n=0;n<o.length;n++)a=o[n],t.indexOf(a)>=0||(r[a]=e[a]);return r}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(n=0;n<o.length;n++)a=o[n],t.indexOf(a)>=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(r[a]=e[a])}return r}var p=n.createContext({}),m=function(e){var t=n.useContext(p),a=t;return e&&(a="function"==typeof e?e(t):l(l({},t),e)),a},d=function(e){var t=m(e.components);return n.createElement(p.Provider,{value:t},e.children)},s="mdxType",k={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},c=n.forwardRef((function(e,t){var a=e.components,r=e.mdxType,o=e.originalType,p=e.parentName,d=i(e,["components","mdxType","originalType","parentName"]),s=m(a),c=r,u=s["".concat(p,".").concat(c)]||s[c]||k[c]||o;return a?n.createElement(u,l(l({ref:t},d),{},{components:a})):n.createElement(u,l({ref:t},d))}));function u(e,t){var a=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var o=a.length,l=new Array(o);l[0]=c;var i={};for(var p in t)hasOwnProperty.call(t,p)&&(i[p]=t[p]);i.originalType=e,i[s]="string"==typeof e?e:r,l[1]=i;for(var m=2;m<o;m++)l[m]=a[m];return n.createElement.apply(null,l)}return n.createElement.apply(null,a)}c.displayName="MDXCreateElement"},88137:function(e,t,a){a.r(t),a.d(t,{assets:function(){return p},contentTitle:function(){return l},default:function(){return k},frontMatter:function(){return o},metadata:function(){return i},toc:function(){return m}});var n=a(83117),r=(a(67294),a(3905));const o={id:"installation",title:"BookKeeper installation"},l=void 0,i={unversionedId:"getting-started/installation",id:"version-4.17.0/getting-started/installation",title:"BookKeeper installation",description:"You can install BookKeeper either by downloading a GZipped tarball package, using the Docker image or cloning the BookKeeper repository.",source:"@site/versioned_docs/version-4.17.0/getting-started/installation.md",sourceDirName:"getting-started",slug:"/getting-started/installation",permalink:"/docs/getting-started/installation",draft:!1,tags:[],version:"4.17.0",frontMatter:{id:"installation",title:"BookKeeper installation"},sidebar:"docsSidebar",previous:{title:"Apache BookKeeper 4.16.4-SNAPSHOT",permalink:"/docs/overview/"},next:{title:"Run bookies locally",permalink:"/docs/getting-started/run-locally"}},p={},m=[{value:"Requirements",id:"requirements",level:2},{value:"Download",id:"download",level:2},{value:"Clone",id:"clone",level:2},{value:"Build using Maven",id:"build-using-maven",level:2},{value:"Useful Maven commands",id:"useful-maven-commands",level:3},{value:"Package directory",id:"package-directory",level:2}],d={toc:m},s="wrapper";function k(e){let{components:t,...a}=e;return(0,r.kt)(s,(0,n.Z)({},d,a,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("p",null,"You can install BookKeeper either by ",(0,r.kt)("a",{parentName:"p",href:"#download"},"downloading")," a ",(0,r.kt)("a",{parentName:"p",href:"http://www.gzip.org/"},"GZipped")," tarball package, using the ",(0,r.kt)("a",{parentName:"p",href:"https://hub.docker.com/r/apache/bookkeeper/tags"},"Docker image")," or ",(0,r.kt)("a",{parentName:"p",href:"#clone"},"cloning")," the BookKeeper repository."),(0,r.kt)("h2",{id:"requirements"},"Requirements"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://www.opengroup.org/membership/forums/platform/unix"},"Unix environment")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"http://www.oracle.com/technetwork/java/javase/downloads/index.html"},"Java Development Kit 1.8")," or later")),(0,r.kt)("h2",{id:"download"},"Download"),(0,r.kt)("p",null,"You can download Apache BookKeeper releases from the ",(0,r.kt)("a",{parentName:"p",href:"/releases"},"Download page"),"."),(0,r.kt)("h2",{id:"clone"},"Clone"),(0,r.kt)("p",null,"To build BookKeeper from source, clone the repository from the ",(0,r.kt)("a",{parentName:"p",href:"https://github.com/apache/bookkeeper"},"GitHub mirror"),":"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-shell"},"$ git clone https://github.com/apache/bookkeeper\n")),(0,r.kt)("h2",{id:"build-using-maven"},"Build using Maven"),(0,r.kt)("p",null,"Once you have the BookKeeper on your local machine, either by ",(0,r.kt)("a",{parentName:"p",href:"#download"},"downloading")," or ",(0,r.kt)("a",{parentName:"p",href:"#clone"},"cloning")," it, you can then build BookKeeper from source using Maven:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-shell"},"$ mvn package\n")),(0,r.kt)("p",null,"Since 4.8.0, bookkeeper introduces ",(0,r.kt)("inlineCode",{parentName:"p"},"table service"),". If you would like to build and tryout table service, you can build it with ",(0,r.kt)("inlineCode",{parentName:"p"},"stream")," profile."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-shell"},"$ mvn package -Dstream\n")),(0,r.kt)("blockquote",null,(0,r.kt)("p",{parentName:"blockquote"},"You can skip tests by adding the ",(0,r.kt)("inlineCode",{parentName:"p"},"-DskipTests")," flag when running ",(0,r.kt)("inlineCode",{parentName:"p"},"mvn package"),".")),(0,r.kt)("h3",{id:"useful-maven-commands"},"Useful Maven commands"),(0,r.kt)("p",null,"Some other useful Maven commands beyond ",(0,r.kt)("inlineCode",{parentName:"p"},"mvn package"),":"),(0,r.kt)("table",null,(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:"left"},"Command"),(0,r.kt)("th",{parentName:"tr",align:"left"},"Action"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"left"},(0,r.kt)("inlineCode",{parentName:"td"},"mvn clean")),(0,r.kt)("td",{parentName:"tr",align:"left"},"Removes build artifacts")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"left"},(0,r.kt)("inlineCode",{parentName:"td"},"mvn compile")),(0,r.kt)("td",{parentName:"tr",align:"left"},"Compiles JAR files from Java sources")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"left"},(0,r.kt)("inlineCode",{parentName:"td"},"mvn compile spotbugs:spotbugs")),(0,r.kt)("td",{parentName:"tr",align:"left"},"Compile using the Maven ",(0,r.kt)("a",{parentName:"td",href:"https://github.com/spotbugs/spotbugs-maven-plugin"},"SpotBugs")," plugin")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"left"},(0,r.kt)("inlineCode",{parentName:"td"},"mvn install")),(0,r.kt)("td",{parentName:"tr",align:"left"},"Install the BookKeeper JAR locally in your local Maven cache (usually in the ",(0,r.kt)("inlineCode",{parentName:"td"},"~/.m2")," directory)")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"left"},(0,r.kt)("inlineCode",{parentName:"td"},"mvn deploy")),(0,r.kt)("td",{parentName:"tr",align:"left"},"Deploy the BookKeeper JAR to the Maven repo (if you have the proper credentials)")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"left"},(0,r.kt)("inlineCode",{parentName:"td"},"mvn verify")),(0,r.kt)("td",{parentName:"tr",align:"left"},"Performs a wide variety of verification and validation tasks")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"left"},(0,r.kt)("inlineCode",{parentName:"td"},"mvn apache-rat:check")),(0,r.kt)("td",{parentName:"tr",align:"left"},"Run Maven using the ",(0,r.kt)("a",{parentName:"td",href:"http://creadur.apache.org/rat/apache-rat-plugin/"},"Apache Rat")," plugin")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"left"},(0,r.kt)("inlineCode",{parentName:"td"},"mvn compile javadoc:aggregate")),(0,r.kt)("td",{parentName:"tr",align:"left"},"Build Javadocs locally")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"left"},(0,r.kt)("inlineCode",{parentName:"td"},"mvn -am -pl bookkeeper-dist/server package")),(0,r.kt)("td",{parentName:"tr",align:"left"},"Build a server distribution using the Maven ",(0,r.kt)("a",{parentName:"td",href:"http://maven.apache.org/plugins/maven-assembly-plugin/"},"Assembly")," plugin")))),(0,r.kt)("blockquote",null,(0,r.kt)("p",{parentName:"blockquote"},"You can enable ",(0,r.kt)("inlineCode",{parentName:"p"},"table service")," by adding the ",(0,r.kt)("inlineCode",{parentName:"p"},"-Dstream")," flag when running above commands.")),(0,r.kt)("h2",{id:"package-directory"},"Package directory"),(0,r.kt)("p",null,"The BookKeeper project contains several subfolders that you should be aware of:"),(0,r.kt)("table",null,(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:"left"},"Subfolder"),(0,r.kt)("th",{parentName:"tr",align:"left"},"Contains"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"left"},(0,r.kt)("a",{parentName:"td",href:"https://github.com/apache/bookkeeper/tree/master/bookkeeper-server"},(0,r.kt)("inlineCode",{parentName:"a"},"bookkeeper-server"))),(0,r.kt)("td",{parentName:"tr",align:"left"},"The BookKeeper server and client")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"left"},(0,r.kt)("a",{parentName:"td",href:"https://github.com/apache/bookkeeper/tree/master/bookkeeper-benchmark"},(0,r.kt)("inlineCode",{parentName:"a"},"bookkeeper-benchmark"))),(0,r.kt)("td",{parentName:"tr",align:"left"},"A benchmarking suite for measuring BookKeeper performance")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"left"},(0,r.kt)("a",{parentName:"td",href:"https://github.com/apache/bookkeeper/tree/master/bookkeeper-stats"},(0,r.kt)("inlineCode",{parentName:"a"},"bookkeeper-stats"))),(0,r.kt)("td",{parentName:"tr",align:"left"},"A BookKeeper stats library")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"left"},(0,r.kt)("a",{parentName:"td",href:"https://github.com/apache/bookkeeper/tree/master/bookkeeper-stats-providers"},(0,r.kt)("inlineCode",{parentName:"a"},"bookkeeper-stats-providers"))),(0,r.kt)("td",{parentName:"tr",align:"left"},"BookKeeper stats providers")))))}k.isMDXComponent=!0}}]);
\ No newline at end of file
diff --git a/content/assets/js/34dce56b.39bbb192.js b/content/assets/js/34dce56b.39bbb192.js
new file mode 100644
index 0000000..ba8ba56
--- /dev/null
+++ b/content/assets/js/34dce56b.39bbb192.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunksite_3=self.webpackChunksite_3||[]).push([[6004],{3905:function(e,t,r){r.d(t,{Zo:function(){return p},kt:function(){return m}});var n=r(67294);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function i(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function a(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?i(Object(r),!0).forEach((function(t){o(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):i(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function l(e,t){if(null==e)return{};var r,n,o=function(e,t){if(null==e)return{};var r,n,o={},i=Object.keys(e);for(n=0;n<i.length;n++)r=i[n],t.indexOf(r)>=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(n=0;n<i.length;n++)r=i[n],t.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var s=n.createContext({}),c=function(e){var t=n.useContext(s),r=t;return e&&(r="function"==typeof e?e(t):a(a({},t),e)),r},p=function(e){var t=c(e.components);return n.createElement(s.Provider,{value:t},e.children)},u="mdxType",d={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},f=n.forwardRef((function(e,t){var r=e.components,o=e.mdxType,i=e.originalType,s=e.parentName,p=l(e,["components","mdxType","originalType","parentName"]),u=c(r),f=o,m=u["".concat(s,".").concat(f)]||u[f]||d[f]||i;return r?n.createElement(m,a(a({ref:t},p),{},{components:r})):n.createElement(m,a({ref:t},p))}));function m(e,t){var r=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var i=r.length,a=new Array(i);a[0]=f;var l={};for(var s in t)hasOwnProperty.call(t,s)&&(l[s]=t[s]);l.originalType=e,l[u]="string"==typeof e?e:o,a[1]=l;for(var c=2;c<i;c++)a[c]=r[c];return n.createElement.apply(null,a)}return n.createElement.apply(null,r)}f.displayName="MDXCreateElement"},10905:function(e,t,r){r.r(t),r.d(t,{assets:function(){return s},contentTitle:function(){return a},default:function(){return d},frontMatter:function(){return i},metadata:function(){return l},toc:function(){return c}});var n=r(83117),o=(r(67294),r(3905));const i={id:"overview",title:"BookKeeper API"},a=void 0,l={unversionedId:"api/overview",id:"version-4.17.0/api/overview",title:"BookKeeper API",description:"BookKeeper offers a few APIs that applications can use to interact with it:",source:"@site/versioned_docs/version-4.17.0/api/overview.md",sourceDirName:"api",slug:"/api/overview",permalink:"/docs/api/overview",draft:!1,tags:[],version:"4.17.0",frontMatter:{id:"overview",title:"BookKeeper API"},sidebar:"docsSidebar",previous:{title:"Decommission Bookies",permalink:"/docs/admin/decomission"},next:{title:"The Ledger API",permalink:"/docs/api/ledger-api"}},s={},c=[{value:"Trade-offs",id:"trade-offs",level:2}],p={toc:c},u="wrapper";function d(e){let{components:t,...r}=e;return(0,o.kt)(u,(0,n.Z)({},p,r,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("p",null,"BookKeeper offers a few APIs that applications can use to interact with it:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"The ",(0,o.kt)("a",{parentName:"li",href:"ledger-api"},"ledger API")," is a lower-level API that enables you to interact with ledgers directly"),(0,o.kt)("li",{parentName:"ul"},"The ",(0,o.kt)("a",{parentName:"li",href:"ledger-adv-api"},"Ledger Advanced API")," is an advanced extension to ",(0,o.kt)("a",{parentName:"li",href:"ledger-api"},"Ledger API")," to provide more flexibilities to applications."),(0,o.kt)("li",{parentName:"ul"},"The ",(0,o.kt)("a",{parentName:"li",href:"distributedlog-api"},"DistributedLog API")," is a higher-level API that provides convenient abstractions.")),(0,o.kt)("h2",{id:"trade-offs"},"Trade-offs"),(0,o.kt)("p",null,"The ",(0,o.kt)("inlineCode",{parentName:"p"},"Ledger API")," provides direct access to ledgers and thus enables you to use BookKeeper however you'd like."),(0,o.kt)("p",null,"However, in most of use cases, if you want a ",(0,o.kt)("inlineCode",{parentName:"p"},"log stream"),"-like abstraction, it requires you to manage things like tracking list of ledgers,\nmanaging rolling ledgers and data retention on your own. In such cases, you are recommended to use ",(0,o.kt)("a",{parentName:"p",href:"distributedlog-api"},"DistributedLog API"),",\nwith semantics resembling continous log streams from the standpoint of applications."))}d.isMDXComponent=!0}}]);
\ No newline at end of file
diff --git a/content/assets/js/46fd0908.15025e08.js b/content/assets/js/46fd0908.15025e08.js
new file mode 100644
index 0000000..adf04a0
--- /dev/null
+++ b/content/assets/js/46fd0908.15025e08.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunksite_3=self.webpackChunksite_3||[]).push([[3404],{3905:function(e,t,a){a.d(t,{Zo:function(){return p},kt:function(){return m}});var r=a(67294);function n(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function o(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,r)}return a}function l(e){for(var t=1;t<arguments.length;t++){var a=null!=arguments[t]?arguments[t]:{};t%2?o(Object(a),!0).forEach((function(t){n(e,t,a[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(a)):o(Object(a)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(a,t))}))}return e}function i(e,t){if(null==e)return{};var a,r,n=function(e,t){if(null==e)return{};var a,r,n={},o=Object.keys(e);for(r=0;r<o.length;r++)a=o[r],t.indexOf(a)>=0||(n[a]=e[a]);return n}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(r=0;r<o.length;r++)a=o[r],t.indexOf(a)>=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(n[a]=e[a])}return n}var s=r.createContext({}),d=function(e){var t=r.useContext(s),a=t;return e&&(a="function"==typeof e?e(t):l(l({},t),e)),a},p=function(e){var t=d(e.components);return r.createElement(s.Provider,{value:t},e.children)},h="mdxType",c={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},g=r.forwardRef((function(e,t){var a=e.components,n=e.mdxType,o=e.originalType,s=e.parentName,p=i(e,["components","mdxType","originalType","parentName"]),h=d(a),g=n,m=h["".concat(s,".").concat(g)]||h[g]||c[g]||o;return a?r.createElement(m,l(l({ref:t},p),{},{components:a})):r.createElement(m,l({ref:t},p))}));function m(e,t){var a=arguments,n=t&&t.mdxType;if("string"==typeof e||n){var o=a.length,l=new Array(o);l[0]=g;var i={};for(var s in t)hasOwnProperty.call(t,s)&&(i[s]=t[s]);i.originalType=e,i[h]="string"==typeof e?e:n,l[1]=i;for(var d=2;d<o;d++)l[d]=a[d];return r.createElement.apply(null,l)}return r.createElement.apply(null,a)}g.displayName="MDXCreateElement"},10847:function(e,t,a){a.r(t),a.d(t,{assets:function(){return s},contentTitle:function(){return l},default:function(){return c},frontMatter:function(){return o},metadata:function(){return i},toc:function(){return d}});var r=a(83117),n=(a(67294),a(3905));const o={id:"concepts",title:"BookKeeper concepts and architecture"},l=void 0,i={unversionedId:"getting-started/concepts",id:"version-4.17.0/getting-started/concepts",title:"BookKeeper concepts and architecture",description:"BookKeeper is a service that provides persistent storage of streams of log entries---aka records---in sequences called ledgers. BookKeeper replicates stored entries across multiple servers.",source:"@site/versioned_docs/version-4.17.0/getting-started/concepts.md",sourceDirName:"getting-started",slug:"/getting-started/concepts",permalink:"/docs/getting-started/concepts",draft:!1,tags:[],version:"4.17.0",frontMatter:{id:"concepts",title:"BookKeeper concepts and architecture"},sidebar:"docsSidebar",previous:{title:"Run bookies locally",permalink:"/docs/getting-started/run-locally"},next:{title:"Manual deployment",permalink:"/docs/deployment/manual"}},s={},d=[{value:"Basic terms",id:"basic-terms",level:2},{value:"Entries",id:"entries",level:2},{value:"Ledgers",id:"ledgers",level:2},{value:"Clients and APIs",id:"clients-and-apis",level:2},{value:"Bookies",id:"bookies",level:2},{value:"Motivation",id:"motivation",level:3},{value:"Metadata storage",id:"metadata-storage",level:2},{value:"Data management in bookies",id:"data-management-in-bookies",level:2},{value:"Journals",id:"journals",level:3},{value:"Entry logs",id:"entry-logs",level:3},{value:"Index files",id:"index-files",level:3},{value:"Ledger cache",id:"ledger-cache",level:3},{value:"Adding entries",id:"adding-entries",level:3},{value:"Data flush",id:"data-flush",level:3},{value:"Data compaction",id:"data-compaction",level:3},{value:"ZooKeeper metadata",id:"zookeeper-metadata",level:2},{value:"Ledger manager",id:"ledger-manager",level:2},{value:"Hierarchical ledger manager",id:"hierarchical-ledger-manager",level:3},{value:"Flat ledger manager",id:"flat-ledger-manager",level:3}],p={toc:d},h="wrapper";function c(e){let{components:t,...a}=e;return(0,n.kt)(h,(0,r.Z)({},p,a,{components:t,mdxType:"MDXLayout"}),(0,n.kt)("p",null,"BookKeeper is a service that provides persistent storage of streams of log ",(0,n.kt)("a",{parentName:"p",href:"#entries"},"entries"),"---aka ",(0,n.kt)("em",{parentName:"p"},"records"),"---in sequences called ",(0,n.kt)("a",{parentName:"p",href:"#ledgers"},"ledgers"),". BookKeeper replicates stored entries across multiple servers."),(0,n.kt)("h2",{id:"basic-terms"},"Basic terms"),(0,n.kt)("p",null,"In BookKeeper:"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"each unit of a log is an ",(0,n.kt)("a",{parentName:"li",href:"#entries"},(0,n.kt)("em",{parentName:"a"},"entry"))," (aka record)"),(0,n.kt)("li",{parentName:"ul"},"streams of log entries are called ",(0,n.kt)("a",{parentName:"li",href:"#ledgers"},(0,n.kt)("em",{parentName:"a"},"ledgers"))),(0,n.kt)("li",{parentName:"ul"},"individual servers storing ledgers of entries are called ",(0,n.kt)("a",{parentName:"li",href:"#bookies"},(0,n.kt)("em",{parentName:"a"},"bookies")))),(0,n.kt)("p",null,"BookKeeper is designed to be reliable and resilient to a wide variety of failures. Bookies can crash, corrupt data, or discard data, but as long as there are enough bookies behaving correctly in the ensemble the service as a whole will behave correctly."),(0,n.kt)("h2",{id:"entries"},"Entries"),(0,n.kt)("blockquote",null,(0,n.kt)("p",{parentName:"blockquote"},(0,n.kt)("strong",{parentName:"p"},"Entries")," contain the actual data written to ledgers, along with some important metadata.")),(0,n.kt)("p",null,"BookKeeper entries are sequences of bytes that are written to ",(0,n.kt)("a",{parentName:"p",href:"#ledgers"},"ledgers"),". Each entry has the following fields:"),(0,n.kt)("table",null,(0,n.kt)("thead",{parentName:"table"},(0,n.kt)("tr",{parentName:"thead"},(0,n.kt)("th",{parentName:"tr",align:"left"},"Field"),(0,n.kt)("th",{parentName:"tr",align:"left"},"Java type"),(0,n.kt)("th",{parentName:"tr",align:"left"},"Description"))),(0,n.kt)("tbody",{parentName:"table"},(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:"left"},"Ledger number"),(0,n.kt)("td",{parentName:"tr",align:"left"},(0,n.kt)("inlineCode",{parentName:"td"},"long")),(0,n.kt)("td",{parentName:"tr",align:"left"},"The ID of the ledger to which the entry has been written")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:"left"},"Entry number"),(0,n.kt)("td",{parentName:"tr",align:"left"},(0,n.kt)("inlineCode",{parentName:"td"},"long")),(0,n.kt)("td",{parentName:"tr",align:"left"},"The unique ID of the entry")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:"left"},"Last confirmed (LC)"),(0,n.kt)("td",{parentName:"tr",align:"left"},(0,n.kt)("inlineCode",{parentName:"td"},"long")),(0,n.kt)("td",{parentName:"tr",align:"left"},"The ID of the last recorded entry")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:"left"},"Data"),(0,n.kt)("td",{parentName:"tr",align:"left"},(0,n.kt)("inlineCode",{parentName:"td"},"byte[]")),(0,n.kt)("td",{parentName:"tr",align:"left"},"The entry's data (written by the client application)")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:"left"},"Authentication code"),(0,n.kt)("td",{parentName:"tr",align:"left"},(0,n.kt)("inlineCode",{parentName:"td"},"byte[]")),(0,n.kt)("td",{parentName:"tr",align:"left"},"The message auth code, which includes ",(0,n.kt)("em",{parentName:"td"},"all")," other fields in the entry")))),(0,n.kt)("h2",{id:"ledgers"},"Ledgers"),(0,n.kt)("blockquote",null,(0,n.kt)("p",{parentName:"blockquote"},(0,n.kt)("strong",{parentName:"p"},"Ledgers")," are the basic unit of storage in BookKeeper.")),(0,n.kt)("p",null,"Ledgers are sequences of entries, while each entry is a sequence of bytes. Entries are written to a ledger:"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"sequentially, and"),(0,n.kt)("li",{parentName:"ul"},"at most once.")),(0,n.kt)("p",null,"This means that ledgers have ",(0,n.kt)("em",{parentName:"p"},"append-only")," semantics. Entries cannot be modified once they've been written to a ledger. Determining the proper write order is the responsibility of ",(0,n.kt)("a",{parentName:"p",href:"#clients"},"client applications"),"."),(0,n.kt)("h2",{id:"clients-and-apis"},"Clients and APIs"),(0,n.kt)("blockquote",null,(0,n.kt)("p",{parentName:"blockquote"},"BookKeeper clients have two main roles: they create and delete ledgers, and they read entries from and write entries to ledgers."),(0,n.kt)("p",{parentName:"blockquote"},"BookKeeper provides both a lower-level and a higher-level API for ledger interaction.")),(0,n.kt)("p",null,"There are currently two APIs that can be used for interacting with BookKeeper:"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"The ",(0,n.kt)("a",{parentName:"li",href:"../api/ledger-api"},"ledger API")," is a lower-level API that enables you to interact with ledgers directly."),(0,n.kt)("li",{parentName:"ul"},"The ",(0,n.kt)("a",{parentName:"li",href:"../api/distributedlog-api"},"DistributedLog API")," is a higher-level API that enables you to use BookKeeper without directly interacting with ledgers.")),(0,n.kt)("p",null,"In general, you should choose the API based on how much granular control you need over ledger semantics. The two APIs can also both be used within a single application."),(0,n.kt)("h2",{id:"bookies"},"Bookies"),(0,n.kt)("blockquote",null,(0,n.kt)("p",{parentName:"blockquote"},(0,n.kt)("strong",{parentName:"p"},"Bookies")," are individual BookKeeper servers that handle ledgers (more specifically, fragments of ledgers). Bookies function as part of an ensemble.")),(0,n.kt)("p",null,"A bookie is an individual BookKeeper storage server. Individual bookies store fragments of ledgers, not entire ledgers (for the sake of performance). For any given ledger ",(0,n.kt)("strong",{parentName:"p"},"L"),", an ",(0,n.kt)("em",{parentName:"p"},"ensemble")," is the group of bookies storing the entries in ",(0,n.kt)("strong",{parentName:"p"},"L"),"."),(0,n.kt)("p",null,"Whenever entries are written to a ledger, those entries are striped across the ensemble (written to a sub-group of bookies rather than to all bookies)."),(0,n.kt)("h3",{id:"motivation"},"Motivation"),(0,n.kt)("blockquote",null,(0,n.kt)("p",{parentName:"blockquote"},"BookKeeper was initially inspired by the NameNode server in HDFS but its uses now extend far beyond this.")),(0,n.kt)("p",null,"The initial motivation for BookKeeper comes from the ",(0,n.kt)("a",{parentName:"p",href:"http://hadoop.apache.org/"},"Hadoop")," ecosystem. In the ",(0,n.kt)("a",{parentName:"p",href:"https://cwiki.apache.org/confluence/display/HADOOP2/HDFS"},"Hadoop Distributed File System")," (HDFS), a special node called the ",(0,n.kt)("a",{parentName:"p",href:"https://cwiki.apache.org/confluence/display/HADOOP2/NameNode"},"NameNode")," logs all operations in a reliable fashion, which ensures that recovery is possible in case of crashes."),(0,n.kt)("p",null,"The NameNode, however, served only as initial inspiration for BookKeeper. The applications for BookKeeper extend far beyond this and include essentially any application that requires an append-based storage system. BookKeeper provides a number of advantages for such applications:"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"Highly efficient writes"),(0,n.kt)("li",{parentName:"ul"},"High fault tolerance via replication of messages within ensembles of bookies"),(0,n.kt)("li",{parentName:"ul"},"High throughput for write operations via striping (across as many bookies as you wish)")),(0,n.kt)("h2",{id:"metadata-storage"},"Metadata storage"),(0,n.kt)("p",null,"The BookKeeper metadata store maintains all the metadata of the BookKeeper cluster, such as ",(0,n.kt)("a",{parentName:"p",href:"#ledgers"},"ledger")," metadata, available bookies, and so on. Currently, BookKeeper uses ",(0,n.kt)("a",{parentName:"p",href:"https://zookeeper.apache.org"},"ZooKeeper")," for metadata storage. "),(0,n.kt)("h2",{id:"data-management-in-bookies"},"Data management in bookies"),(0,n.kt)("p",null,"Bookies manage data in a ",(0,n.kt)("a",{parentName:"p",href:"https://en.wikipedia.org/wiki/Log-structured_file_system"},"log-structured")," way, which is implemented using three types of files:"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("a",{parentName:"li",href:"#journals"},"journals")),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("a",{parentName:"li",href:"#entry-logs"},"entry logs")),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("a",{parentName:"li",href:"#index-files"},"index files"))),(0,n.kt)("h3",{id:"journals"},"Journals"),(0,n.kt)("p",null,"A journal file contains BookKeeper transaction logs. Before any update to a ledger takes place, the bookie ensures that a transaction describing the update is written to non-volatile storage. A new journal file is created once the bookie starts or the older journal file reaches the journal file size threshold."),(0,n.kt)("h3",{id:"entry-logs"},"Entry logs"),(0,n.kt)("p",null,"An entry log file manages the written entries received from BookKeeper clients. Entries from different ledgers are aggregated and written sequentially, while their offsets are kept as pointers in a ",(0,n.kt)("a",{parentName:"p",href:"#ledger-cache"},"ledger cache")," for fast lookup."),(0,n.kt)("p",null,"A new entry log file is created once the bookie starts or the older entry log file reaches the entry log size threshold. Old entry log files are removed by the Garbage Collector Thread once they are not associated with any active ledger."),(0,n.kt)("h3",{id:"index-files"},"Index files"),(0,n.kt)("p",null,"An index file is created for each ledger, which comprises a header and several fixed-length index pages that record the offsets of data stored in entry log files."),(0,n.kt)("p",null,"Since updating index files would introduce random disk I/O index files are updated lazily by a sync thread running in the background. This ensures speedy performance for updates. Before index pages are persisted to disk, they are gathered in a ledger cache for lookup."),(0,n.kt)("h3",{id:"ledger-cache"},"Ledger cache"),(0,n.kt)("p",null,"Ledger indexes pages are cached in a memory pool, which allows for more efficient management of disk head scheduling."),(0,n.kt)("h3",{id:"adding-entries"},"Adding entries"),(0,n.kt)("p",null,"When a client instructs a bookie to write an entry to a ledger, the entry will go through the following steps to be persisted on disk:"),(0,n.kt)("ol",null,(0,n.kt)("li",{parentName:"ol"},"The entry is appended to an ",(0,n.kt)("a",{parentName:"li",href:"#entry-logs"},"entry log")),(0,n.kt)("li",{parentName:"ol"},"The index of the entry is updated in the ",(0,n.kt)("a",{parentName:"li",href:"#ledger-cache"},"ledger cache")),(0,n.kt)("li",{parentName:"ol"},"A transaction corresponding to this entry update is appended to the ",(0,n.kt)("a",{parentName:"li",href:"#journals"},"journal")),(0,n.kt)("li",{parentName:"ol"},"A response is sent to the BookKeeper client")),(0,n.kt)("blockquote",null,(0,n.kt)("p",{parentName:"blockquote"},"For performance reasons, the entry log buffers entries in memory and commits them in batches, while the ledger cache holds index pages in memory and flushes them lazily. This process is described in more detail in the ",(0,n.kt)("a",{parentName:"p",href:"#data-flush"},"Data flush")," section below.")),(0,n.kt)("h3",{id:"data-flush"},"Data flush"),(0,n.kt)("p",null,"Ledger index pages are flushed to index files in the following two cases:"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"The ledger cache memory limit is reached. There is no more space available to hold newer index pages. Dirty index pages will be evicted from the ledger cache and persisted to index files."),(0,n.kt)("li",{parentName:"ul"},"A background thread synchronous thread is responsible for flushing index pages from the ledger cache to index files periodically.")),(0,n.kt)("p",null,"Besides flushing index pages, the sync thread is responsible for rolling journal files in case that journal files use too much disk space. The data flush flow in the sync thread is as follows:"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("p",{parentName:"li"},"A ",(0,n.kt)("inlineCode",{parentName:"p"},"LastLogMark")," is recorded in memory. The ",(0,n.kt)("inlineCode",{parentName:"p"},"LastLogMark")," indicates that those entries before it have been persisted (to both index and entry log files) and contains two parts:"),(0,n.kt)("ol",{parentName:"li"},(0,n.kt)("li",{parentName:"ol"},"A ",(0,n.kt)("inlineCode",{parentName:"li"},"txnLogId")," (the file ID of a journal)"),(0,n.kt)("li",{parentName:"ol"},"A ",(0,n.kt)("inlineCode",{parentName:"li"},"txnLogPos")," (offset in a journal)"))),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("p",{parentName:"li"},"Dirty index pages are flushed from the ledger cache to the index file, and entry log files are flushed to ensure that all buffered entries in entry log files are persisted to disk."),(0,n.kt)("p",{parentName:"li"},"  Ideally, a bookie only needs to flush index pages and entry log files that contain entries before ",(0,n.kt)("inlineCode",{parentName:"p"},"LastLogMark"),". There is, however, no such information in the ledger and entry log mapping to journal files. Consequently, the thread flushes the ledger cache and entry log entirely here, and may flush entries after the ",(0,n.kt)("inlineCode",{parentName:"p"},"LastLogMark"),". Flushing more is not a problem, though, just redundant.")),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("p",{parentName:"li"},"The ",(0,n.kt)("inlineCode",{parentName:"p"},"LastLogMark")," is persisted to disk, which means that entries added before ",(0,n.kt)("inlineCode",{parentName:"p"},"LastLogMark")," whose entry data and index page were also persisted to disk. It is now time to safely remove journal files created earlier than ",(0,n.kt)("inlineCode",{parentName:"p"},"txnLogId"),"."))),(0,n.kt)("p",null,"If the bookie has crashed before persisting ",(0,n.kt)("inlineCode",{parentName:"p"},"LastLogMark")," to disk, it still has journal files containing entries for which index pages may not have been persisted. Consequently, when this bookie restarts, it inspects journal files to restore those entries and data isn't lost."),(0,n.kt)("p",null,"Using the above data flush mechanism, it is safe for the sync thread to skip data flushing when the bookie shuts down. However, in the entry logger it uses a buffered channel to write entries in batches and there might be data buffered in the buffered channel upon a shut down. The bookie needs to ensure that the entry log flushes its buffered data during shutdown. Otherwise, entry log files become corrupted with partial entries."),(0,n.kt)("h3",{id:"data-compaction"},"Data compaction"),(0,n.kt)("p",null,"On bookies, entries of different ledgers are interleaved in entry log files. A bookie runs a garbage collector thread to delete un-associated entry log files to reclaim disk space. If a given entry log file contains entries from a ledger that has not been deleted, then the entry log file would never be removed and the occupied disk space never reclaimed. In order to avoid such a case, a bookie server compacts entry log files in a garbage collector thread to reclaim disk space."),(0,n.kt)("p",null,"There are two kinds of compaction running with different frequency: minor compaction and major compaction. The differences between minor compaction and major compaction lies in their threshold value and compaction interval."),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"The garbage collection threshold is the size percentage of an entry log file occupied by those undeleted ledgers. The default minor compaction threshold is 0.2, while the major compaction threshold is 0.8."),(0,n.kt)("li",{parentName:"ul"},"The garbage collection interval is how frequently to run the compaction. The default minor compaction interval is 1 hour, while the major compaction threshold is 1 day.")),(0,n.kt)("blockquote",null,(0,n.kt)("p",{parentName:"blockquote"},"If either the threshold or interval is set to less than or equal to zero, compaction is disabled.")),(0,n.kt)("p",null,"The data compaction flow in the garbage collector thread is as follows:"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"The thread scans entry log files to get their entry log metadata, which records a list of ledgers comprising an entry log and their corresponding percentages."),(0,n.kt)("li",{parentName:"ul"},"With the normal garbage collection flow, once the bookie determines that a ledger has been deleted, the ledger will be removed from the entry log metadata and the size of the entry log reduced."),(0,n.kt)("li",{parentName:"ul"},"If the remaining size of an entry log file reaches a specified threshold, the entries of active ledgers in the entry log will be copied to a new entry log file."),(0,n.kt)("li",{parentName:"ul"},"Once all valid entries have been copied, the old entry log file is deleted.")),(0,n.kt)("h2",{id:"zookeeper-metadata"},"ZooKeeper metadata"),(0,n.kt)("p",null,"BookKeeper requires a ZooKeeper installation for storing ",(0,n.kt)("a",{parentName:"p",href:"#ledger"},"ledger")," metadata. Whenever you construct a ",(0,n.kt)("a",{parentName:"p",href:"https://bookkeeper.apache.org//docs/latest/api/javadoc/org/apache/bookkeeper/client/BookKeeper"},(0,n.kt)("inlineCode",{parentName:"a"},"BookKeeper"))," client object, you need to pass a list of ZooKeeper servers as a parameter to the constructor, like this:"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-java"},'String zkConnectionString = "127.0.0.1:2181";\nBookKeeper bkClient = new BookKeeper(zkConnectionString);\n')),(0,n.kt)("blockquote",null,(0,n.kt)("p",{parentName:"blockquote"},"For more info on using the BookKeeper Java client, see ",(0,n.kt)("a",{parentName:"p",href:"../api/ledger-api#the-java-ledger-api-client"},"this guide"),".")),(0,n.kt)("h2",{id:"ledger-manager"},"Ledger manager"),(0,n.kt)("p",null,"A ",(0,n.kt)("em",{parentName:"p"},"ledger manager")," handles ledgers' metadata (which is stored in ZooKeeper). BookKeeper offers two types of ledger managers: the ",(0,n.kt)("a",{parentName:"p",href:"#flat-ledger-manager"},"flat ledger manager")," and the ",(0,n.kt)("a",{parentName:"p",href:"#hierarchical-ledger-manager"},"hierarchical ledger manager"),". Both ledger managers extend the ",(0,n.kt)("a",{parentName:"p",href:"https://bookkeeper.apache.org//docs/latest/api/javadoc/org/apache/bookkeeper/meta/AbstractZkLedgerManager"},(0,n.kt)("inlineCode",{parentName:"a"},"AbstractZkLedgerManager"))," abstract class."),(0,n.kt)("h3",{id:"hierarchical-ledger-manager"},"Hierarchical ledger manager"),(0,n.kt)("blockquote",null,(0,n.kt)("p",{parentName:"blockquote"},"default ledger manager."),(0,n.kt)("p",{parentName:"blockquote"},"The hierarchical ledger manager is able to manage very large numbers of BookKeeper ledgers (> 50,000).")),(0,n.kt)("p",null,"The ",(0,n.kt)("em",{parentName:"p"},"hierarchical ledger manager"),", implemented in the ",(0,n.kt)("a",{parentName:"p",href:"https://bookkeeper.apache.org//docs/latest/api/javadoc/org/apache/bookkeeper/meta/HierarchicalLedgerManager"},(0,n.kt)("inlineCode",{parentName:"a"},"HierarchicalLedgerManager"))," class, first obtains a global unique ID from ZooKeeper using an ",(0,n.kt)("a",{parentName:"p",href:"https://zookeeper.apache.org/doc/current/api/org/apache/zookeeper/CreateMode.html#EPHEMERAL_SEQUENTIAL"},(0,n.kt)("inlineCode",{parentName:"a"},"EPHEMERAL_SEQUENTIAL"))," znode. Since ZooKeeper's sequence counter has a format of ",(0,n.kt)("inlineCode",{parentName:"p"},"%10d")," (10 digits with 0 padding, for example ",(0,n.kt)("inlineCode",{parentName:"p"},"<path>0000000001"),"), the hierarchical ledger manager splits the generated ID into 3 parts:"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-shell"},"{level1 (2 digits)}{level2 (4 digits)}{level3 (4 digits)}\n")),(0,n.kt)("p",null,"These three parts are used to form the actual ledger node path to store ledger metadata:"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-shell"},"{ledgers_root_path}/{level1}/{level2}/L{level3}\n")),(0,n.kt)("p",null,"For example, ledger 0000000001 is split into three parts, 00, 0000, and 00001, and stored in znode ",(0,n.kt)("inlineCode",{parentName:"p"},"/{ledgers_root_path}/00/0000/L0001"),". Each znode could have as many 10,000 ledgers, which avoids the problem of the child list being larger than the maximum ZooKeeper packet size (which is the ",(0,n.kt)("a",{parentName:"p",href:"https://issues.apache.org/jira/browse/BOOKKEEPER-39"},"limitation")," that initially prompted the creation of the hierarchical ledger manager)."),(0,n.kt)("h3",{id:"flat-ledger-manager"},"Flat ledger manager"),(0,n.kt)("blockquote",null,(0,n.kt)("p",{parentName:"blockquote"},"deprecated since 4.7.0, not recommand now.")),(0,n.kt)("p",null,"The ",(0,n.kt)("em",{parentName:"p"},"flat ledger manager"),", implemented in the ",(0,n.kt)("a",{parentName:"p",href:"https://bookkeeper.apache.org//docs/latest/api/javadoc/org/apache/bookkeeper/meta/FlatLedgerManager.html"},(0,n.kt)("inlineCode",{parentName:"a"},"FlatLedgerManager"))," class, stores all ledgers' metadata in child nodes of a single ZooKeeper path. The flat ledger manager creates ",(0,n.kt)("a",{parentName:"p",href:"https://zookeeper.apache.org/doc/current/zookeeperProgrammers.html#Sequence+Nodes+--+Unique+Naming"},"sequential nodes")," to ensure the uniqueness of the ledger ID and prefixes all nodes with ",(0,n.kt)("inlineCode",{parentName:"p"},"L"),". Bookie servers manage their own active ledgers in a hash map so that it's easy to find which ledgers have been deleted from ZooKeeper and then garbage collect them."),(0,n.kt)("p",null,"The flat ledger manager's garbage collection follow proceeds as follows:"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"All existing ledgers are fetched from ZooKeeper (",(0,n.kt)("inlineCode",{parentName:"li"},"zkActiveLedgers"),")"),(0,n.kt)("li",{parentName:"ul"},"All ledgers currently active within the bookie are fetched (",(0,n.kt)("inlineCode",{parentName:"li"},"bkActiveLedgers"),")"),(0,n.kt)("li",{parentName:"ul"},"The currently actively ledgers are looped through to determine which ledgers don't currently exist in ZooKeeper. Those are then garbage collected."),(0,n.kt)("li",{parentName:"ul"},"The ",(0,n.kt)("em",{parentName:"li"},"hierarchical ledger manager")," stores ledgers' metadata in two-level ",(0,n.kt)("a",{parentName:"li",href:"https://zookeeper.apache.org/doc/current/zookeeperOver.html#Nodes+and+ephemeral+nodes"},"znodes"),".")))}c.isMDXComponent=!0}}]);
\ No newline at end of file
diff --git a/content/assets/js/59304d55.f75a7e6d.js b/content/assets/js/59304d55.f75a7e6d.js
new file mode 100644
index 0000000..d8a7679
--- /dev/null
+++ b/content/assets/js/59304d55.f75a7e6d.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunksite_3=self.webpackChunksite_3||[]).push([[3617],{3905:function(e,t,n){n.d(t,{Zo:function(){return u},kt:function(){return k}});var i=n(67294);function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);t&&(i=i.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,i)}return n}function r(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?o(Object(n),!0).forEach((function(t){a(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):o(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function s(e,t){if(null==e)return{};var n,i,a=function(e,t){if(null==e)return{};var n,i,a={},o=Object.keys(e);for(i=0;i<o.length;i++)n=o[i],t.indexOf(n)>=0||(a[n]=e[n]);return a}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(i=0;i<o.length;i++)n=o[i],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}var l=i.createContext({}),c=function(e){var t=i.useContext(l),n=t;return e&&(n="function"==typeof e?e(t):r(r({},t),e)),n},u=function(e){var t=c(e.components);return i.createElement(l.Provider,{value:t},e.children)},p="mdxType",h={inlineCode:"code",wrapper:function(e){var t=e.children;return i.createElement(i.Fragment,{},t)}},d=i.forwardRef((function(e,t){var n=e.components,a=e.mdxType,o=e.originalType,l=e.parentName,u=s(e,["components","mdxType","originalType","parentName"]),p=c(n),d=a,k=p["".concat(l,".").concat(d)]||p[d]||h[d]||o;return n?i.createElement(k,r(r({ref:t},u),{},{components:n})):i.createElement(k,r({ref:t},u))}));function k(e,t){var n=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var o=n.length,r=new Array(o);r[0]=d;var s={};for(var l in t)hasOwnProperty.call(t,l)&&(s[l]=t[l]);s.originalType=e,s[p]="string"==typeof e?e:a,r[1]=s;for(var c=2;c<o;c++)r[c]=n[c];return i.createElement.apply(null,r)}return i.createElement.apply(null,n)}d.displayName="MDXCreateElement"},11627:function(e,t,n){n.r(t),n.d(t,{assets:function(){return l},contentTitle:function(){return r},default:function(){return h},frontMatter:function(){return o},metadata:function(){return s},toc:function(){return c}});var i=n(83117),a=(n(67294),n(3905));const o={id:"tls",title:"Encryption and Authentication using TLS"},r=void 0,s={unversionedId:"security/tls",id:"version-4.17.0/security/tls",title:"Encryption and Authentication using TLS",description:"Apache BookKeeper allows clients and autorecovery daemons to communicate over TLS, although this is not enabled by default.",source:"@site/versioned_docs/version-4.17.0/security/tls.md",sourceDirName:"security",slug:"/security/tls",permalink:"/docs/security/tls",draft:!1,tags:[],version:"4.17.0",frontMatter:{id:"tls",title:"Encryption and Authentication using TLS"},sidebar:"docsSidebar",previous:{title:"BookKeeper Security",permalink:"/docs/security/overview"},next:{title:"Authentication using SASL",permalink:"/docs/security/sasl"}},l={},c=[{value:"Overview",id:"overview",level:2},{value:"Generate TLS key and certificate",id:"bookie-keystore",level:2},{value:"Creating your own CA",id:"creating-your-own-ca",level:2},{value:"Signing the certificate",id:"signing-the-certificate",level:2},{value:"Configuring Bookies",id:"configuring-bookies",level:2},{value:"Configuring Clients",id:"configuring-clients",level:2},{value:"Enabling TLS Logging",id:"enabling-tls-logging",level:2}],u={toc:c},p="wrapper";function h(e){let{components:t,...n}=e;return(0,a.kt)(p,(0,i.Z)({},u,n,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("p",null,"Apache BookKeeper allows clients and autorecovery daemons to communicate over TLS, although this is not enabled by default."),(0,a.kt)("h2",{id:"overview"},"Overview"),(0,a.kt)("p",null,"The bookies need their own key and certificate in order to use TLS. Clients can optionally provide a key and a certificate\nfor mutual authentication.  Each bookie or client can also be configured with a truststore, which is used to\ndetermine which certificates (bookie or client identities) to trust (authenticate)."),(0,a.kt)("p",null,"The truststore can be configured in many ways. To understand the truststore, consider the following two examples:"),(0,a.kt)("ol",null,(0,a.kt)("li",{parentName:"ol"},"the truststore contains one or many certificates;"),(0,a.kt)("li",{parentName:"ol"},"it contains a certificate authority (CA).")),(0,a.kt)("p",null,"In (1), with a list of certificates, the bookie or client will trust any certificate listed in the truststore.\nIn (2), with a CA, the bookie or client will trust any certificate that was signed by the CA in the truststore."),(0,a.kt)("p",null,"(TBD: benefits)"),(0,a.kt)("h2",{id:"bookie-keystore"},"Generate TLS key and certificate"),(0,a.kt)("p",null,"The first step of deploying TLS is to generate the key and the certificate for each machine in the cluster.\nYou can use Java\u2019s ",(0,a.kt)("inlineCode",{parentName:"p"},"keytool")," utility to accomplish this task. We will generate the key into a temporary keystore\ninitially so that we can export and sign it later with CA."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-shell"},"keytool -keystore bookie.keystore.jks -alias localhost -validity {validity} -genkey\n")),(0,a.kt)("p",null,"You need to specify two parameters in the above command:"),(0,a.kt)("ol",null,(0,a.kt)("li",{parentName:"ol"},(0,a.kt)("inlineCode",{parentName:"li"},"keystore"),": the keystore file that stores the certificate. The ",(0,a.kt)("em",{parentName:"li"},"keystore")," file contains the private key of\nthe certificate; hence, it needs to be kept safely."),(0,a.kt)("li",{parentName:"ol"},(0,a.kt)("inlineCode",{parentName:"li"},"validity"),": the valid time of the certificate in days.")),(0,a.kt)("div",{class:"alert alert-success"},"Ensure that common name (CN) matches exactly with the fully qualified domain name (FQDN) of the server. The client compares the CN with the DNS domain name to ensure that it is indeed connecting to the desired server, not a malicious one."),(0,a.kt)("h2",{id:"creating-your-own-ca"},"Creating your own CA"),(0,a.kt)("p",null,"After the first step, each machine in the cluster has a public-private key pair, and a certificate to identify the machine.\nThe certificate, however, is unsigned, which means that an attacker can create such a certificate to pretend to be any machine."),(0,a.kt)("p",null,"Therefore, it is important to prevent forged certificates by signing them for each machine in the cluster.\nA ",(0,a.kt)("inlineCode",{parentName:"p"},"certificate authority (CA)")," is responsible for signing certificates. CA works likes a government that issues passports \u2014\nthe government stamps (signs) each passport so that the passport becomes difficult to forge. Other governments verify the stamps\nto ensure the passport is authentic. Similarly, the CA signs the certificates, and the cryptography guarantees that a signed\ncertificate is computationally difficult to forge. Thus, as long as the CA is a genuine and trusted authority, the clients have\nhigh assurance that they are connecting to the authentic machines."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-shell"},"openssl req -new -x509 -keyout ca-key -out ca-cert -days 365\n")),(0,a.kt)("p",null,"The generated CA is simply a ",(0,a.kt)("em",{parentName:"p"},"public-private")," key pair and certificate, and it is intended to sign other certificates."),(0,a.kt)("p",null,"The next step is to add the generated CA to the clients' truststore so that the clients can trust this CA:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-shell"},"keytool -keystore bookie.truststore.jks -alias CARoot -import -file ca-cert\n")),(0,a.kt)("p",null,"NOTE: If you configure the bookies to require client authentication by setting ",(0,a.kt)("inlineCode",{parentName:"p"},"sslClientAuthentication")," to ",(0,a.kt)("inlineCode",{parentName:"p"},"true")," on the\n",(0,a.kt)("a",{parentName:"p",href:"../reference/config"},"bookie config"),", then you must also provide a truststore for the bookies and it should have all the CA\ncertificates that clients keys were signed by."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-shell"},"keytool -keystore client.truststore.jks -alias CARoot -import -file ca-cert\n")),(0,a.kt)("p",null,"In contrast to the keystore, which stores each machine\u2019s own identity, the truststore of a client stores all the certificates\nthat the client should trust. Importing a certificate into one\u2019s truststore also means trusting all certificates that are signed\nby that certificate. As the analogy above, trusting the government (CA) also means trusting all passports (certificates) that\nit has issued. This attribute is called the chain of trust, and it is particularly useful when deploying TLS on a large BookKeeper cluster.\nYou can sign all certificates in the cluster with a single CA, and have all machines share the same truststore that trusts the CA.\nThat way all machines can authenticate all other machines."),(0,a.kt)("h2",{id:"signing-the-certificate"},"Signing the certificate"),(0,a.kt)("p",null,"The next step is to sign all certificates in the keystore with the CA we generated. First, you need to export the certificate from the keystore:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-shell"},"keytool -keystore bookie.keystore.jks -alias localhost -certreq -file cert-file\n")),(0,a.kt)("p",null,"Then sign it with the CA:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-shell"},"openssl x509 -req -CA ca-cert -CAkey ca-key -in cert-file -out cert-signed -days {validity} -CAcreateserial -passin pass:{ca-password}\n")),(0,a.kt)("p",null,"Finally, you need to import both the certificate of the CA and the signed certificate into the keystore:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-shell"},"keytool -keystore bookie.keystore.jks -alias CARoot -import -file ca-cert\nkeytool -keystore bookie.keystore.jks -alias localhost -import -file cert-signed\n")),(0,a.kt)("p",null,"The definitions of the parameters are the following:"),(0,a.kt)("ol",null,(0,a.kt)("li",{parentName:"ol"},(0,a.kt)("inlineCode",{parentName:"li"},"keystore"),": the location of the keystore"),(0,a.kt)("li",{parentName:"ol"},(0,a.kt)("inlineCode",{parentName:"li"},"ca-cert"),": the certificate of the CA"),(0,a.kt)("li",{parentName:"ol"},(0,a.kt)("inlineCode",{parentName:"li"},"ca-key"),": the private key of the CA"),(0,a.kt)("li",{parentName:"ol"},(0,a.kt)("inlineCode",{parentName:"li"},"ca-password"),": the passphrase of the CA"),(0,a.kt)("li",{parentName:"ol"},(0,a.kt)("inlineCode",{parentName:"li"},"cert-file"),": the exported, unsigned certificate of the bookie"),(0,a.kt)("li",{parentName:"ol"},(0,a.kt)("inlineCode",{parentName:"li"},"cert-signed"),": the signed certificate of the bookie")),(0,a.kt)("p",null,"(TBD: add a script to automatically generate truststores and keystores.)"),(0,a.kt)("h2",{id:"configuring-bookies"},"Configuring Bookies"),(0,a.kt)("p",null,"Bookies support TLS for connections on the same service port. In order to enable TLS, you need to configure ",(0,a.kt)("inlineCode",{parentName:"p"},"tlsProvider")," to be either\n",(0,a.kt)("inlineCode",{parentName:"p"},"JDK")," or ",(0,a.kt)("inlineCode",{parentName:"p"},"OpenSSL"),". If ",(0,a.kt)("inlineCode",{parentName:"p"},"OpenSSL")," is configured, it will use ",(0,a.kt)("inlineCode",{parentName:"p"},"netty-tcnative-boringssl-static"),", which loads a corresponding binding according\nto the platforms to run bookies."),(0,a.kt)("blockquote",null,(0,a.kt)("p",{parentName:"blockquote"},"Current ",(0,a.kt)("inlineCode",{parentName:"p"},"OpenSSL")," implementation doesn't depend on the system installed OpenSSL library. If you want to leverage the OpenSSL installed on\nthe system, you can check ",(0,a.kt)("a",{parentName:"p",href:"http://netty.io/wiki/forked-tomcat-native.html"},"this example")," on how to replaces the JARs on the classpath with\nnetty bindings to leverage installed OpenSSL.")),(0,a.kt)("p",null,"The following TLS configs are needed on the bookie side:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-shell"},"tlsProvider=OpenSSL\ntlsProviderFactoryClass=org.apache.bookkeeper.tls.TLSContextFactory\n# key store\ntlsKeyStoreType=JKS\ntlsKeyStore=/var/private/tls/bookie.keystore.jks\ntlsKeyStorePasswordPath=/var/private/tls/bookie.keystore.passwd\n# trust store\ntlsTrustStoreType=JKS\ntlsTrustStore=/var/private/tls/bookie.truststore.jks\ntlsTrustStorePasswordPath=/var/private/tls/bookie.truststore.passwd\n")),(0,a.kt)("p",null,"NOTE: it is important to restrict access to the store files and corresponding password files via filesystem permissions."),(0,a.kt)("p",null,"Optional settings that are worth considering:"),(0,a.kt)("ol",null,(0,a.kt)("li",{parentName:"ol"},"tlsClientAuthentication=false: Enable/Disable using TLS for authentication. This config when enabled will authenticate the other end\nof the communication channel. It should be enabled on both bookies and clients for mutual TLS."),(0,a.kt)("li",{parentName:"ol"},"tlsEnabledCipherSuites= A cipher suite is a named combination of authentication, encryption, MAC and key exchange\nalgorithm used to negotiate the security settings for a network connection using TLS network protocol. By default,\nit is null. ",(0,a.kt)("a",{parentName:"li",href:"https://www.openssl.org/docs/man1.0.2/man1/ciphers.html"},"OpenSSL Ciphers"),(0,a.kt)("a",{parentName:"li",href:"http://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#ciphersuites"},"JDK Ciphers")),(0,a.kt)("li",{parentName:"ol"},"tlsEnabledProtocols = TLSv1.2,TLSv1.1,TLSv1 (list out the TLS protocols that you are going to accept from clients).\nBy default, it is not set.")),(0,a.kt)("p",null,"To verify the bookie's keystore and truststore are setup correctly you can run the following command:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-shell"},"openssl s_client -debug -connect localhost:3181 -tls1\n")),(0,a.kt)("p",null,"NOTE: TLSv1 should be listed under ",(0,a.kt)("inlineCode",{parentName:"p"},"tlsEnabledProtocols"),"."),(0,a.kt)("p",null,"In the output of this command you should see the server's certificate:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-shell"},"-----BEGIN CERTIFICATE-----\n{variable sized random bytes}\n-----END CERTIFICATE-----\n")),(0,a.kt)("p",null,"If the certificate does not show up or if there are any other error messages then your keystore is not setup correctly."),(0,a.kt)("h2",{id:"configuring-clients"},"Configuring Clients"),(0,a.kt)("p",null,"TLS is supported only for the new BookKeeper client (BookKeeper versions 4.5.0 and higher), the older clients are not\nsupported. The configs for TLS will be the same as bookies."),(0,a.kt)("p",null,"If client authentication is not required by the bookies, the following is a minimal configuration example:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-shell"},"tlsProvider=OpenSSL\ntlsProviderFactoryClass=org.apache.bookkeeper.tls.TLSContextFactory\nclientTrustStore=/var/private/tls/client.truststore.jks\nclientTrustStorePasswordPath=/var/private/tls/client.truststore.passwd\n")),(0,a.kt)("p",null,"If client authentication is required, then a keystore must be created for each client, and the bookies' truststores must\ntrust the certificate in the client's keystore. This may be done using commands that are similar to what we used for\nthe ",(0,a.kt)("a",{parentName:"p",href:"#bookie-keystore"},"bookie keystore"),"."),(0,a.kt)("p",null,"And the following must also be configured:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-shell"},"tlsClientAuthentication=true\nclientKeyStore=/var/private/tls/client.keystore.jks\nclientKeyStorePasswordPath=/var/private/tls/client.keystore.passwd\n")),(0,a.kt)("p",null,"NOTE: it is important to restrict access to the store files and corresponding password files via filesystem permissions."),(0,a.kt)("p",null,"(TBD: add example to use tls in bin/bookkeeper script?)"),(0,a.kt)("h2",{id:"enabling-tls-logging"},"Enabling TLS Logging"),(0,a.kt)("p",null,"You can enable TLS debug logging at the JVM level by starting the bookies and/or clients with ",(0,a.kt)("inlineCode",{parentName:"p"},"javax.net.debug")," system property. For example:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-shell"},"-Djavax.net.debug=all\n")),(0,a.kt)("p",null,"You can find more details on this in ",(0,a.kt)("a",{parentName:"p",href:"http://docs.oracle.com/javase/8/docs/technotes/guides/security/jsse/ReadDebug.html"},"Oracle documentation")," on\n",(0,a.kt)("a",{parentName:"p",href:"http://docs.oracle.com/javase/8/docs/technotes/guides/security/jsse/ReadDebug.html"},"debugging SSL/TLS connections"),"."))}h.isMDXComponent=!0}}]);
\ No newline at end of file
diff --git a/content/assets/js/736b32a3.f2a6c34e.js b/content/assets/js/736b32a3.f2a6c34e.js
new file mode 100644
index 0000000..c6306e7
--- /dev/null
+++ b/content/assets/js/736b32a3.f2a6c34e.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunksite_3=self.webpackChunksite_3||[]).push([[6197],{3905:function(e,t,n){n.d(t,{Zo:function(){return s},kt:function(){return b}});var r=n(67294);function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function i(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function l(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?i(Object(n),!0).forEach((function(t){o(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):i(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function a(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},i=Object.keys(e);for(r=0;r<i.length;r++)n=i[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r<i.length;r++)n=i[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var c=r.createContext({}),u=function(e){var t=r.useContext(c),n=t;return e&&(n="function"==typeof e?e(t):l(l({},t),e)),n},s=function(e){var t=u(e.components);return r.createElement(c.Provider,{value:t},e.children)},p="mdxType",f={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},d=r.forwardRef((function(e,t){var n=e.components,o=e.mdxType,i=e.originalType,c=e.parentName,s=a(e,["components","mdxType","originalType","parentName"]),p=u(n),d=o,b=p["".concat(c,".").concat(d)]||p[d]||f[d]||i;return n?r.createElement(b,l(l({ref:t},s),{},{components:n})):r.createElement(b,l({ref:t},s))}));function b(e,t){var n=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var i=n.length,l=new Array(i);l[0]=d;var a={};for(var c in t)hasOwnProperty.call(t,c)&&(a[c]=t[c]);a.originalType=e,a[p]="string"==typeof e?e:o,l[1]=a;for(var u=2;u<i;u++)l[u]=n[u];return r.createElement.apply(null,l)}return r.createElement.apply(null,n)}d.displayName="MDXCreateElement"},80053:function(e,t,n){n.r(t),n.d(t,{assets:function(){return c},contentTitle:function(){return l},default:function(){return f},frontMatter:function(){return i},metadata:function(){return a},toc:function(){return u}});var r=n(83117),o=(n(67294),n(3905));const i={id:"run-locally",title:"Run bookies locally"},l=void 0,a={unversionedId:"getting-started/run-locally",id:"version-4.17.0/getting-started/run-locally",title:"Run bookies locally",description:"Bookies are individual BookKeeper servers. You can run an ensemble of bookies locally on a single machine using the localbookie command of the bookkeeper CLI tool and specifying the number of bookies you'd like to include in the ensemble.",source:"@site/versioned_docs/version-4.17.0/getting-started/run-locally.md",sourceDirName:"getting-started",slug:"/getting-started/run-locally",permalink:"/docs/getting-started/run-locally",draft:!1,tags:[],version:"4.17.0",frontMatter:{id:"run-locally",title:"Run bookies locally"},sidebar:"docsSidebar",previous:{title:"BookKeeper installation",permalink:"/docs/getting-started/installation"},next:{title:"BookKeeper concepts and architecture",permalink:"/docs/getting-started/concepts"}},c={},u=[],s={toc:u},p="wrapper";function f(e){let{components:t,...n}=e;return(0,o.kt)(p,(0,r.Z)({},s,n,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("p",null,"Bookies are individual BookKeeper servers. You can run an ensemble of bookies locally on a single machine using the ",(0,o.kt)("a",{parentName:"p",href:"../reference/cli#bookkeeper-localbookie"},(0,o.kt)("inlineCode",{parentName:"a"},"localbookie"))," command of the ",(0,o.kt)("inlineCode",{parentName:"p"},"bookkeeper")," CLI tool and specifying the number of bookies you'd like to include in the ensemble."),(0,o.kt)("p",null,"This would start up an ensemble with 10 bookies:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-shell"},"$ bin/bookkeeper localbookie 10\n")),(0,o.kt)("blockquote",null,(0,o.kt)("p",{parentName:"blockquote"},"When you start up an ensemble using ",(0,o.kt)("inlineCode",{parentName:"p"},"localbookie"),", all bookies run in a single JVM process.")))}f.isMDXComponent=!0}}]);
\ No newline at end of file
diff --git a/content/assets/js/7537e02a.cd38eb5e.js b/content/assets/js/7537e02a.cd38eb5e.js
new file mode 100644
index 0000000..41f8851
--- /dev/null
+++ b/content/assets/js/7537e02a.cd38eb5e.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunksite_3=self.webpackChunksite_3||[]).push([[4051],{58946:function(e){e.exports=JSON.parse('{"pluginId":"default","version":"4.17.0","label":"4.17.0","banner":null,"badge":true,"noIndex":false,"className":"docs-version-4.17.0","isLast":true,"docsSidebars":{"docsSidebar":[{"type":"link","label":"Overview","href":"/docs/overview/","docId":"overview/overview"},{"type":"category","label":"Getting started","items":[{"type":"link","label":"Installation","href":"/docs/getting-started/installation","docId":"getting-started/installation"},{"type":"link","label":"Run bookies locally","href":"/docs/getting-started/run-locally","docId":"getting-started/run-locally"},{"type":"link","label":"Concepts and architecture","href":"/docs/getting-started/concepts","docId":"getting-started/concepts"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Deployment","items":[{"type":"link","label":"Manual deployment","href":"/docs/deployment/manual","docId":"deployment/manual"},{"type":"link","label":"BookKeeper on Kubernetes","href":"/docs/deployment/kubernetes","docId":"deployment/kubernetes"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Administration","items":[{"type":"link","label":"BookKeeper administration","href":"/docs/admin/bookies","docId":"admin/bookies"},{"type":"link","label":"AutoRecovery","href":"/docs/admin/autorecovery","docId":"admin/autorecovery"},{"type":"link","label":"Metrics collection","href":"/docs/admin/metrics","docId":"admin/metrics"},{"type":"link","label":"Upgrade","href":"/docs/admin/upgrade","docId":"admin/upgrade"},{"type":"link","label":"Admin REST API","href":"/docs/admin/http","docId":"admin/http"},{"type":"link","label":"Decommissioning Bookies","href":"/docs/admin/decomission","docId":"admin/decomission"}],"collapsed":true,"collapsible":true},{"type":"category","label":"API","items":[{"type":"link","label":"Overview","href":"/docs/api/overview","docId":"api/overview"},{"type":"link","label":"Ledger API","href":"/docs/api/ledger-api","docId":"api/ledger-api"},{"type":"link","label":"Advanced Ledger API","href":"/docs/api/ledger-adv-api","docId":"api/ledger-adv-api"},{"type":"link","label":"DistributedLog","href":"/docs/api/distributedlog-api","docId":"api/distributedlog-api"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Security","items":[{"type":"link","label":"Overview","href":"/docs/security/overview","docId":"security/overview"},{"type":"link","label":"TLS Authentication","href":"/docs/security/tls","docId":"security/tls"},{"type":"link","label":"SASL Authentication","href":"/docs/security/sasl","docId":"security/sasl"},{"type":"link","label":"ZooKeeper Authentication","href":"/docs/security/zookeeper","docId":"security/zookeeper"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Development","items":[{"type":"link","label":"BookKeeper protocol","href":"/docs/development/protocol","docId":"development/protocol"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Reference","items":[{"type":"link","label":"Configuration","href":"/docs/reference/config","docId":"reference/config"},{"type":"link","label":"Command-line tools","href":"/docs/reference/cli","docId":"reference/cli"}],"collapsed":true,"collapsible":true}]},"docs":{"admin/autorecovery":{"id":"admin/autorecovery","title":"Using AutoRecovery","description":"When a bookie crashes, all ledgers on that bookie become under-replicated. In order to bring all ledgers in your BookKeeper cluster back to full replication, you\'ll need to recover the data from any offline bookies. There are two ways to recover bookies\' data:","sidebar":"docsSidebar"},"admin/bookies":{"id":"admin/bookies","title":"BookKeeper administration","description":"This document is a guide to deploying, administering, and maintaining BookKeeper. It also discusses best practices and common problems.","sidebar":"docsSidebar"},"admin/decomission":{"id":"admin/decomission","title":"Decommission Bookies","description":"In case the user wants to decommission a bookie, the following process is useful to follow in order to verify if the","sidebar":"docsSidebar"},"admin/geo-replication":{"id":"admin/geo-replication","title":"Geo-replication","description":"Geo-replication is the replication of data across BookKeeper clusters. In order to enable geo-replication for a group of BookKeeper clusters,"},"admin/http":{"id":"admin/http","title":"BookKeeper Admin REST API","description":"This document introduces BookKeeper HTTP endpoints, which can be used for BookKeeper administration.","sidebar":"docsSidebar"},"admin/metrics":{"id":"admin/metrics","title":"Metric collection","description":"BookKeeper enables metrics collection through a variety of stats providers.","sidebar":"docsSidebar"},"admin/perf":{"id":"admin/perf","title":"Performance tuning","description":""},"admin/placement":{"id":"admin/placement","title":"Customized placement policies","description":""},"admin/upgrade":{"id":"admin/upgrade","title":"Upgrade","description":"If you have questions about upgrades (or need help), please feel free to reach out to us by mailing list or Slack Channel.","sidebar":"docsSidebar"},"api/distributedlog-api":{"id":"api/distributedlog-api","title":"DistributedLog","description":"DistributedLog began its life as a separate project under the Apache Foundation. It was merged into BookKeeper in 2017.","sidebar":"docsSidebar"},"api/ledger-adv-api":{"id":"api/ledger-adv-api","title":"The Advanced Ledger API","description":"In release 4.5.0, Apache BookKeeper introduces a few advanced API for advanced usage.","sidebar":"docsSidebar"},"api/ledger-api":{"id":"api/ledger-api","title":"The Ledger API","description":"The ledger API is a lower-level API for BookKeeper that enables you to interact with ledgers directly.","sidebar":"docsSidebar"},"api/overview":{"id":"api/overview","title":"BookKeeper API","description":"BookKeeper offers a few APIs that applications can use to interact with it:","sidebar":"docsSidebar"},"deployment/kubernetes":{"id":"deployment/kubernetes","title":"Deploying Apache BookKeeper on Kubernetes","description":"Apache BookKeeper can be easily deployed in Kubernetes clusters. The managed clusters on Google Container Engine is the most convenient way.","sidebar":"docsSidebar"},"deployment/manual":{"id":"deployment/manual","title":"Manual deployment","description":"A BookKeeper cluster consists of two main components:","sidebar":"docsSidebar"},"development/codebase":{"id":"development/codebase","title":"The BookKeeper codebase","description":""},"development/protocol":{"id":"development/protocol","title":"The BookKeeper protocol","description":"BookKeeper uses a special replication protocol for guaranteeing persistent storage of entries in an ensemble of bookies.","sidebar":"docsSidebar"},"getting-started/concepts":{"id":"getting-started/concepts","title":"BookKeeper concepts and architecture","description":"BookKeeper is a service that provides persistent storage of streams of log entries---aka records---in sequences called ledgers. BookKeeper replicates stored entries across multiple servers.","sidebar":"docsSidebar"},"getting-started/installation":{"id":"getting-started/installation","title":"BookKeeper installation","description":"You can install BookKeeper either by downloading a GZipped tarball package, using the Docker image or cloning the BookKeeper repository.","sidebar":"docsSidebar"},"getting-started/run-locally":{"id":"getting-started/run-locally","title":"Run bookies locally","description":"Bookies are individual BookKeeper servers. You can run an ensemble of bookies locally on a single machine using the localbookie command of the bookkeeper CLI tool and specifying the number of bookies you\'d like to include in the ensemble.","sidebar":"docsSidebar"},"overview/overview":{"id":"overview/overview","title":"Apache BookKeeper 4.16.4-SNAPSHOT","description":"\x3c!--","sidebar":"docsSidebar"},"reference/cli":{"id":"reference/cli","title":"BookKeeper CLI tool reference","description":"bookkeeper command","sidebar":"docsSidebar"},"reference/config":{"id":"reference/config","title":"BookKeeper configuration","description":"The table below lists parameters that you can set to configure bookies. All configuration takes place in the bk_server.conf file in the bookkeeper-server/conf directory of your BookKeeper installation.","sidebar":"docsSidebar"},"security/overview":{"id":"security/overview","title":"BookKeeper Security","description":"In the 4.5.0 release, the BookKeeper community added a number of features that can be used, together or separately, to secure a BookKeeper cluster.","sidebar":"docsSidebar"},"security/sasl":{"id":"security/sasl","title":"Authentication using SASL","description":"Bookies support client authentication via SASL. Currently we only support GSSAPI (Kerberos). We will start","sidebar":"docsSidebar"},"security/tls":{"id":"security/tls","title":"Encryption and Authentication using TLS","description":"Apache BookKeeper allows clients and autorecovery daemons to communicate over TLS, although this is not enabled by default.","sidebar":"docsSidebar"},"security/zookeeper":{"id":"security/zookeeper","title":"ZooKeeper Authentication","description":"New Clusters","sidebar":"docsSidebar"}}}')}}]);
\ No newline at end of file
diff --git a/content/assets/js/76831a2f.645ef5ff.js b/content/assets/js/76831a2f.645ef5ff.js
new file mode 100644
index 0000000..4a9e147
--- /dev/null
+++ b/content/assets/js/76831a2f.645ef5ff.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunksite_3=self.webpackChunksite_3||[]).push([[9562],{3905:function(e,t,r){r.d(t,{Zo:function(){return c},kt:function(){return k}});var a=r(67294);function n(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function i(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,a)}return r}function o(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?i(Object(r),!0).forEach((function(t){n(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):i(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function l(e,t){if(null==e)return{};var r,a,n=function(e,t){if(null==e)return{};var r,a,n={},i=Object.keys(e);for(a=0;a<i.length;a++)r=i[a],t.indexOf(r)>=0||(n[r]=e[r]);return n}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(a=0;a<i.length;a++)r=i[a],t.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}var s=a.createContext({}),p=function(e){var t=a.useContext(s),r=t;return e&&(r="function"==typeof e?e(t):o(o({},t),e)),r},c=function(e){var t=p(e.components);return a.createElement(s.Provider,{value:t},e.children)},d="mdxType",m={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},u=a.forwardRef((function(e,t){var r=e.components,n=e.mdxType,i=e.originalType,s=e.parentName,c=l(e,["components","mdxType","originalType","parentName"]),d=p(r),u=n,k=d["".concat(s,".").concat(u)]||d[u]||m[u]||i;return r?a.createElement(k,o(o({ref:t},c),{},{components:r})):a.createElement(k,o({ref:t},c))}));function k(e,t){var r=arguments,n=t&&t.mdxType;if("string"==typeof e||n){var i=r.length,o=new Array(i);o[0]=u;var l={};for(var s in t)hasOwnProperty.call(t,s)&&(l[s]=t[s]);l.originalType=e,l[d]="string"==typeof e?e:n,o[1]=l;for(var p=2;p<i;p++)o[p]=r[p];return a.createElement.apply(null,o)}return a.createElement.apply(null,r)}u.displayName="MDXCreateElement"},20265:function(e,t,r){r.r(t),r.d(t,{assets:function(){return s},contentTitle:function(){return o},default:function(){return m},frontMatter:function(){return i},metadata:function(){return l},toc:function(){return p}});var a=r(83117),n=(r(67294),r(3905));const i={id:"metrics",title:"Metric collection"},o=void 0,l={unversionedId:"admin/metrics",id:"version-4.17.0/admin/metrics",title:"Metric collection",description:"BookKeeper enables metrics collection through a variety of stats providers.",source:"@site/versioned_docs/version-4.17.0/admin/metrics.md",sourceDirName:"admin",slug:"/admin/metrics",permalink:"/docs/admin/metrics",draft:!1,tags:[],version:"4.17.0",frontMatter:{id:"metrics",title:"Metric collection"},sidebar:"docsSidebar",previous:{title:"Using AutoRecovery",permalink:"/docs/admin/autorecovery"},next:{title:"Upgrade",permalink:"/docs/admin/upgrade"}},s={},p=[{value:"Stats providers",id:"stats-providers",level:2},{value:"Enabling stats providers in bookies",id:"enabling-stats-providers-in-bookies",level:2}],c={toc:p},d="wrapper";function m(e){let{components:t,...r}=e;return(0,n.kt)(d,(0,a.Z)({},c,r,{components:t,mdxType:"MDXLayout"}),(0,n.kt)("p",null,"BookKeeper enables metrics collection through a variety of ",(0,n.kt)("a",{parentName:"p",href:"#stats-providers"},"stats providers"),"."),(0,n.kt)("h2",{id:"stats-providers"},"Stats providers"),(0,n.kt)("p",null,"BookKeeper has stats provider implementations for these sinks:"),(0,n.kt)("table",null,(0,n.kt)("thead",{parentName:"table"},(0,n.kt)("tr",{parentName:"thead"},(0,n.kt)("th",{parentName:"tr",align:"left"},"Provider"),(0,n.kt)("th",{parentName:"tr",align:"left"},"Provider class name"))),(0,n.kt)("tbody",{parentName:"table"},(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:"left"},(0,n.kt)("a",{parentName:"td",href:"https://mvnrepository.com/artifact/org.apache.bookkeeper.stats/codahale-metrics-provider"},"Codahale Metrics")),(0,n.kt)("td",{parentName:"tr",align:"left"},(0,n.kt)("inlineCode",{parentName:"td"},"org.apache.bookkeeper.stats.CodahaleMetricsProvider"))),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:"left"},(0,n.kt)("a",{parentName:"td",href:"https://prometheus.io/"},"Prometheus")),(0,n.kt)("td",{parentName:"tr",align:"left"},(0,n.kt)("inlineCode",{parentName:"td"},"org.apache.bookkeeper.stats.prometheus.PrometheusMetricsProvider"))))),(0,n.kt)("blockquote",null,(0,n.kt)("p",{parentName:"blockquote"},"The ",(0,n.kt)("a",{parentName:"p",href:"https://github.com/apache/bookkeeper/tree/master/bookkeeper-stats-providers/codahale-metrics-provider"},"Codahale Metrics")," stats provider is the default provider.")),(0,n.kt)("h2",{id:"enabling-stats-providers-in-bookies"},"Enabling stats providers in bookies"),(0,n.kt)("p",null,"Two stats-related ",(0,n.kt)("a",{parentName:"p",href:"../reference/config/"},"configuration parameters")," are available for bookies:"),(0,n.kt)("table",null,(0,n.kt)("thead",{parentName:"table"},(0,n.kt)("tr",{parentName:"thead"},(0,n.kt)("th",{parentName:"tr",align:"left"},"Parameter"),(0,n.kt)("th",{parentName:"tr",align:"left"},"Description"),(0,n.kt)("th",{parentName:"tr",align:"left"},"Default"))),(0,n.kt)("tbody",{parentName:"table"},(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:"left"},(0,n.kt)("inlineCode",{parentName:"td"},"enableStatistics")),(0,n.kt)("td",{parentName:"tr",align:"left"},"Whether statistics are enabled for the bookie"),(0,n.kt)("td",{parentName:"tr",align:"left"},(0,n.kt)("inlineCode",{parentName:"td"},"false"))),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:"left"},(0,n.kt)("inlineCode",{parentName:"td"},"sanityCheckMetricsEnabled")),(0,n.kt)("td",{parentName:"tr",align:"left"},"Flag to enable sanity check metrics in bookie stats"),(0,n.kt)("td",{parentName:"tr",align:"left"},(0,n.kt)("inlineCode",{parentName:"td"},"false"))),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:"left"},(0,n.kt)("inlineCode",{parentName:"td"},"statsProviderClass")),(0,n.kt)("td",{parentName:"tr",align:"left"},"The stats provider class used by the bookie"),(0,n.kt)("td",{parentName:"tr",align:"left"},(0,n.kt)("inlineCode",{parentName:"td"},"org.apache.bookkeeper.stats.CodahaleMetricsProvider"))))),(0,n.kt)("p",null,"To enable stats:"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"set the ",(0,n.kt)("inlineCode",{parentName:"li"},"enableStatistics")," parameter to ",(0,n.kt)("inlineCode",{parentName:"li"},"true")),(0,n.kt)("li",{parentName:"ul"},"set ",(0,n.kt)("inlineCode",{parentName:"li"},"statsProviderClass")," to the desired provider (see the ",(0,n.kt)("a",{parentName:"li",href:"#stats-providers"},"table above")," for a listing of classes)")))}m.isMDXComponent=!0}}]);
\ No newline at end of file
diff --git a/content/assets/js/7a19cc40.c9bd9016.js b/content/assets/js/7a19cc40.c9bd9016.js
new file mode 100644
index 0000000..7ed8e64
--- /dev/null
+++ b/content/assets/js/7a19cc40.c9bd9016.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunksite_3=self.webpackChunksite_3||[]).push([[6960],{3905:function(e,t,r){r.d(t,{Zo:function(){return p},kt:function(){return m}});var a=r(67294);function i(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function n(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,a)}return r}function o(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?n(Object(r),!0).forEach((function(t){i(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):n(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function s(e,t){if(null==e)return{};var r,a,i=function(e,t){if(null==e)return{};var r,a,i={},n=Object.keys(e);for(a=0;a<n.length;a++)r=n[a],t.indexOf(r)>=0||(i[r]=e[r]);return i}(e,t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);for(a=0;a<n.length;a++)r=n[a],t.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(i[r]=e[r])}return i}var l=a.createContext({}),d=function(e){var t=a.useContext(l),r=t;return e&&(r="function"==typeof e?e(t):o(o({},t),e)),r},p=function(e){var t=d(e.components);return a.createElement(l.Provider,{value:t},e.children)},u="mdxType",c={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},g=a.forwardRef((function(e,t){var r=e.components,i=e.mdxType,n=e.originalType,l=e.parentName,p=s(e,["components","mdxType","originalType","parentName"]),u=d(r),g=i,m=u["".concat(l,".").concat(g)]||u[g]||c[g]||n;return r?a.createElement(m,o(o({ref:t},p),{},{components:r})):a.createElement(m,o({ref:t},p))}));function m(e,t){var r=arguments,i=t&&t.mdxType;if("string"==typeof e||i){var n=r.length,o=new Array(n);o[0]=g;var s={};for(var l in t)hasOwnProperty.call(t,l)&&(s[l]=t[l]);s.originalType=e,s[u]="string"==typeof e?e:i,o[1]=s;for(var d=2;d<n;d++)o[d]=r[d];return a.createElement.apply(null,o)}return a.createElement.apply(null,r)}g.displayName="MDXCreateElement"},58743:function(e,t,r){r.r(t),r.d(t,{assets:function(){return l},contentTitle:function(){return o},default:function(){return c},frontMatter:function(){return n},metadata:function(){return s},toc:function(){return d}});var a=r(83117),i=(r(67294),r(3905));const n={id:"distributedlog-api",title:"DistributedLog"},o=void 0,s={unversionedId:"api/distributedlog-api",id:"version-4.17.0/api/distributedlog-api",title:"DistributedLog",description:"DistributedLog began its life as a separate project under the Apache Foundation. It was merged into BookKeeper in 2017.",source:"@site/versioned_docs/version-4.17.0/api/distributedlog-api.md",sourceDirName:"api",slug:"/api/distributedlog-api",permalink:"/docs/api/distributedlog-api",draft:!1,tags:[],version:"4.17.0",frontMatter:{id:"distributedlog-api",title:"DistributedLog"},sidebar:"docsSidebar",previous:{title:"The Advanced Ledger API",permalink:"/docs/api/ledger-adv-api"},next:{title:"BookKeeper Security",permalink:"/docs/security/overview"}},l={},d=[{value:"Architecture",id:"architecture",level:2},{value:"Logs",id:"logs",level:2},{value:"Log records",id:"log-records",level:3},{value:"Log segments",id:"log-segments",level:3},{value:"Namespaces",id:"namespaces",level:3},{value:"Writers",id:"writers",level:2},{value:"Write Proxy",id:"write-proxy",level:3},{value:"Readers",id:"readers",level:2},{value:"Read Proxy",id:"read-proxy",level:3},{value:"Guarantees",id:"guarantees",level:2},{value:"API",id:"api",level:2}],p={toc:d},u="wrapper";function c(e){let{components:t,...n}=e;return(0,i.kt)(u,(0,a.Z)({},p,n,{components:t,mdxType:"MDXLayout"}),(0,i.kt)("blockquote",null,(0,i.kt)("p",{parentName:"blockquote"},"DistributedLog began its life as a separate project under the Apache Foundation. It was merged into BookKeeper in 2017.")),(0,i.kt)("p",null,"The DistributedLog API is an easy-to-use interface for managing BookKeeper entries that enables you to use BookKeeper without needing to interact with ",(0,i.kt)("a",{parentName:"p",href:"ledger-api"},"ledgers")," directly."),(0,i.kt)("p",null,"DistributedLog (DL) maintains sequences of records in categories called ",(0,i.kt)("em",{parentName:"p"},"logs")," (aka ",(0,i.kt)("em",{parentName:"p"},"log streams"),"). ",(0,i.kt)("em",{parentName:"p"},"Writers")," append records to DL logs, while ",(0,i.kt)("em",{parentName:"p"},"readers")," fetch and process those records."),(0,i.kt)("h2",{id:"architecture"},"Architecture"),(0,i.kt)("p",null,"The diagram below illustrates how the DistributedLog API works with BookKeeper:"),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"DistributedLog API",src:r(38659).Z,width:"818",height:"441"})),(0,i.kt)("h2",{id:"logs"},"Logs"),(0,i.kt)("p",null,"A ",(0,i.kt)("em",{parentName:"p"},"log")," in DistributedLog is an ordered, immutable sequence of ",(0,i.kt)("em",{parentName:"p"},"log records"),"."),(0,i.kt)("p",null,"The diagram below illustrates the anatomy of a log stream:"),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"DistributedLog log",src:r(69627).Z,width:"620",height:"516"})),(0,i.kt)("h3",{id:"log-records"},"Log records"),(0,i.kt)("p",null,"Each log record is a sequence of bytes. Applications are responsible for serializing and deserializing byte sequences stored in log records."),(0,i.kt)("p",null,"Log records are written sequentially into a ",(0,i.kt)("em",{parentName:"p"},"log stream")," and assigned with a a unique sequence number called a DLSN (",(0,i.kt)("strong",null,"D"),"istributed",(0,i.kt)("strong",null,"L"),"og ",(0,i.kt)("strong",null,"S"),"equence ",(0,i.kt)("strong",null,"N"),"umber)."),(0,i.kt)("p",null,"In addition to a DLSN, applications can assign their own sequence number when constructing log records. Application-defined sequence numbers are known as ",(0,i.kt)("em",{parentName:"p"},"TransactionIDs")," (or ",(0,i.kt)("em",{parentName:"p"},"txid"),"). Either a DLSN or a TransactionID can be used for positioning readers to start reading from a specific log record."),(0,i.kt)("h3",{id:"log-segments"},"Log segments"),(0,i.kt)("p",null,"Each log is broken down into ",(0,i.kt)("em",{parentName:"p"},"log segments")," that contain subsets of records. Log segments are distributed and stored in BookKeeper. DistributedLog rolls the log segments based on the configured ",(0,i.kt)("em",{parentName:"p"},"rolling policy"),", which be either"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"a configurable period of time (such as every 2 hours), or"),(0,i.kt)("li",{parentName:"ul"},"a configurable maximum size (such as every 128 MB).")),(0,i.kt)("p",null,"The data in logs is divided up into equally sized log segments and distributed evenly across bookies. This allows logs to scale beyond a size that would fit on a single server and spreads read traffic across the cluster."),(0,i.kt)("h3",{id:"namespaces"},"Namespaces"),(0,i.kt)("p",null,"Log streams that belong to the same organization are typically categorized and managed under a ",(0,i.kt)("em",{parentName:"p"},"namespace"),". DistributedLog namespaces essentially enable applications to locate log streams. Applications can perform the following actions under a namespace:"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"create streams"),(0,i.kt)("li",{parentName:"ul"},"delete streams"),(0,i.kt)("li",{parentName:"ul"},"truncate streams to a given sequence number (either a DLSN or a TransactionID)")),(0,i.kt)("h2",{id:"writers"},"Writers"),(0,i.kt)("p",null,"Through the DistributedLog API, writers write data into logs of their choice. All records are appended into logs in order. The sequencing is performed by the writer, which means that there is only one active writer for a log at any given time."),(0,i.kt)("p",null,"DistributedLog guarantees correctness when two writers attempt to write to the same log when a network partition occurs using a ",(0,i.kt)("em",{parentName:"p"},"fencing")," mechanism in the log segment store."),(0,i.kt)("h3",{id:"write-proxy"},"Write Proxy"),(0,i.kt)("p",null,"Log writers are served and managed in a service tier called the ",(0,i.kt)("em",{parentName:"p"},"Write Proxy")," (see the diagram ",(0,i.kt)("a",{parentName:"p",href:"#architecture"},"above"),"). The Write Proxy is used for accepting writes from a large number of clients."),(0,i.kt)("h2",{id:"readers"},"Readers"),(0,i.kt)("p",null,"DistributedLog readers read records from logs of their choice, starting with a provided position. The provided position can be either a DLSN or a TransactionID."),(0,i.kt)("p",null,"Readers read records from logs in strict order. Different readers can read records from different positions in the same log."),(0,i.kt)("p",null,"Unlike other pub-sub systems, DistributedLog doesn't record or manage readers' positions. This means that tracking is the responsibility of applications, as different applications may have different requirements for tracking and coordinating positions. This is hard to get right with a single approach. Distributed databases, for example, might store reader positions along with SSTables, so they would resume applying transactions from the positions store in SSTables. Tracking reader positions could easily be done at the application level using various stores (such as ZooKeeper, the filesystem, or key-value stores)."),(0,i.kt)("h3",{id:"read-proxy"},"Read Proxy"),(0,i.kt)("p",null,"Log records can be cached in a service tier called the ",(0,i.kt)("em",{parentName:"p"},"Read Proxy")," to serve a large number of readers. See the diagram ",(0,i.kt)("a",{parentName:"p",href:"#architecture"},"above"),". The Read Proxy is the analogue of the ",(0,i.kt)("a",{parentName:"p",href:"#write-proxy"},"Write Proxy"),"."),(0,i.kt)("h2",{id:"guarantees"},"Guarantees"),(0,i.kt)("p",null,"The DistributedLog API for BookKeeper provides a number of guarantees for applications:"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"Records written by a ",(0,i.kt)("a",{parentName:"li",href:"#writers"},"writer")," to a ",(0,i.kt)("a",{parentName:"li",href:"#logs"},"log")," are appended in the order in which they are written. If a record ",(0,i.kt)("strong",{parentName:"li"},"R1")," is written by the same writer as a record ",(0,i.kt)("strong",{parentName:"li"},"R2"),", ",(0,i.kt)("strong",{parentName:"li"},"R1")," will have a smaller sequence number than ",(0,i.kt)("strong",{parentName:"li"},"R2"),"."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"#readers"},"Readers")," see ",(0,i.kt)("a",{parentName:"li",href:"#log-records"},"records")," in the same order in which they are ",(0,i.kt)("a",{parentName:"li",href:"#writers"},"written")," to the log."),(0,i.kt)("li",{parentName:"ul"},"All records are persisted on disk by BookKeeper before acknowledgements, which guarantees durability."),(0,i.kt)("li",{parentName:"ul"},"For a log with a replication factor of N, DistributedLog tolerates up to N-1 server failures without losing any records.")),(0,i.kt)("h2",{id:"api"},"API"),(0,i.kt)("p",null,"Documentation for the DistributedLog API can be found ",(0,i.kt)("a",{parentName:"p",href:"https://bookkeeper.apache.org/docs/next/api/distributedlog-api"},"here"),"."),(0,i.kt)("blockquote",null,(0,i.kt)("p",{parentName:"blockquote"},"At a later date, the DistributedLog API docs will be added here.")))}c.isMDXComponent=!0},38659:function(e,t,r){t.Z=r.p+"assets/images/distributedlog-e72b5c54b4a5ca53e33a6740bb2b4242.png"},69627:function(e,t,r){t.Z=r.p+"assets/images/logs-4fa7115af12e41a46d64d9e300847af4.png"}}]);
\ No newline at end of file
diff --git a/content/assets/js/84741dfb.f62e770a.js b/content/assets/js/84741dfb.f62e770a.js
new file mode 100644
index 0000000..8519c2f
--- /dev/null
+++ b/content/assets/js/84741dfb.f62e770a.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunksite_3=self.webpackChunksite_3||[]).push([[4138],{3905:function(e,n,t){t.d(n,{Zo:function(){return p},kt:function(){return v}});var a=t(67294);function r(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function d(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);n&&(a=a.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,a)}return t}function i(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{};n%2?d(Object(t),!0).forEach((function(n){r(e,n,t[n])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):d(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))}))}return e}function l(e,n){if(null==e)return{};var t,a,r=function(e,n){if(null==e)return{};var t,a,r={},d=Object.keys(e);for(a=0;a<d.length;a++)t=d[a],n.indexOf(t)>=0||(r[t]=e[t]);return r}(e,n);if(Object.getOwnPropertySymbols){var d=Object.getOwnPropertySymbols(e);for(a=0;a<d.length;a++)t=d[a],n.indexOf(t)>=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(r[t]=e[t])}return r}var o=a.createContext({}),s=function(e){var n=a.useContext(o),t=n;return e&&(t="function"==typeof e?e(n):i(i({},n),e)),t},p=function(e){var n=s(e.components);return a.createElement(o.Provider,{value:n},e.children)},c="mdxType",u={inlineCode:"code",wrapper:function(e){var n=e.children;return a.createElement(a.Fragment,{},n)}},g=a.forwardRef((function(e,n){var t=e.components,r=e.mdxType,d=e.originalType,o=e.parentName,p=l(e,["components","mdxType","originalType","parentName"]),c=s(t),g=r,v=c["".concat(o,".").concat(g)]||c[g]||u[g]||d;return t?a.createElement(v,i(i({ref:n},p),{},{components:t})):a.createElement(v,i({ref:n},p))}));function v(e,n){var t=arguments,r=n&&n.mdxType;if("string"==typeof e||r){var d=t.length,i=new Array(d);i[0]=g;var l={};for(var o in n)hasOwnProperty.call(n,o)&&(l[o]=n[o]);l.originalType=e,l[c]="string"==typeof e?e:r,i[1]=l;for(var s=2;s<d;s++)i[s]=t[s];return a.createElement.apply(null,i)}return a.createElement.apply(null,t)}g.displayName="MDXCreateElement"},47490:function(e,n,t){t.r(n),t.d(n,{assets:function(){return o},contentTitle:function(){return i},default:function(){return u},frontMatter:function(){return d},metadata:function(){return l},toc:function(){return s}});var a=t(83117),r=(t(67294),t(3905));const d={id:"ledger-adv-api",title:"The Advanced Ledger API"},i=void 0,l={unversionedId:"api/ledger-adv-api",id:"version-4.17.0/api/ledger-adv-api",title:"The Advanced Ledger API",description:"In release 4.5.0, Apache BookKeeper introduces a few advanced API for advanced usage.",source:"@site/versioned_docs/version-4.17.0/api/ledger-adv-api.md",sourceDirName:"api",slug:"/api/ledger-adv-api",permalink:"/docs/api/ledger-adv-api",draft:!1,tags:[],version:"4.17.0",frontMatter:{id:"ledger-adv-api",title:"The Advanced Ledger API"},sidebar:"docsSidebar",previous:{title:"The Ledger API",permalink:"/docs/api/ledger-api"},next:{title:"DistributedLog",permalink:"/docs/api/distributedlog-api"}},o={},s=[{value:"LedgerHandleAdv",id:"ledgerhandleadv",level:2},{value:"Creating advanced ledgers",id:"creating-advanced-ledgers",level:3},{value:"Add Entries",id:"add-entries",level:3},{value:"Read Entries",id:"read-entries",level:3}],p={toc:s},c="wrapper";function u(e){let{components:n,...t}=e;return(0,r.kt)(c,(0,a.Z)({},p,t,{components:n,mdxType:"MDXLayout"}),(0,r.kt)("p",null,"In release ",(0,r.kt)("inlineCode",{parentName:"p"},"4.5.0"),", Apache BookKeeper introduces a few advanced API for advanced usage.\nThis sections covers these advanced APIs."),(0,r.kt)("blockquote",null,(0,r.kt)("p",{parentName:"blockquote"},"Before learn the advanced API, please read ",(0,r.kt)("a",{parentName:"p",href:"ledger-api"},"Ledger API")," first.")),(0,r.kt)("h2",{id:"ledgerhandleadv"},"LedgerHandleAdv"),(0,r.kt)("p",null,(0,r.kt)("a",{parentName:"p",href:"https://bookkeeper.apache.org//docs/latest/api/javadoc/org/apache/bookkeeper/client/LedgerHandleAdv"},(0,r.kt)("inlineCode",{parentName:"a"},"LedgerHandleAdv"))," is an advanced extension of ",(0,r.kt)("a",{parentName:"p",href:"https://bookkeeper.apache.org//docs/latest/api/javadoc/org/apache/bookkeeper/client/LedgerHandle"},(0,r.kt)("inlineCode",{parentName:"a"},"LedgerHandle")),".\nIt allows user passing in an ",(0,r.kt)("inlineCode",{parentName:"p"},"entryId")," when adding an entry."),(0,r.kt)("h3",{id:"creating-advanced-ledgers"},"Creating advanced ledgers"),(0,r.kt)("p",null,"Here's an exmaple:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-java"},'byte[] passwd = "some-passwd".getBytes();\nLedgerHandleAdv handle = bkClient.createLedgerAdv(\n    3, 3, 2, // replica settings\n    DigestType.CRC32,\n    passwd);\n')),(0,r.kt)("p",null,"You can also create advanced ledgers asynchronously."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-java"},'class LedgerCreationCallback implements AsyncCallback.CreateCallback {\n    public void createComplete(int returnCode, LedgerHandle handle, Object ctx) {\n        System.out.println("Ledger successfully created");\n    }\n}\nclient.asyncCreateLedgerAdv(\n        3, // ensemble size\n        3, // write quorum size\n        2, // ack quorum size\n        BookKeeper.DigestType.CRC32,\n        password,\n        new LedgerCreationCallback(),\n        "some context"\n);\n')),(0,r.kt)("p",null,"Besides the APIs above, BookKeeper allows users providing ",(0,r.kt)("inlineCode",{parentName:"p"},"ledger-id")," when creating advanced ledgers."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-java"},'long ledgerId = ...; // the ledger id is generated externally.\n\nbyte[] passwd = "some-passwd".getBytes();\nLedgerHandleAdv handle = bkClient.createLedgerAdv(\n    ledgerId, // ledger id generated externally\n    3, 3, 2, // replica settings\n    DigestType.CRC32,\n    passwd);\n')),(0,r.kt)("blockquote",null,(0,r.kt)("p",{parentName:"blockquote"},"Please note, it is users' responsibility to provide a unique ledger id when using the API above.\nIf a ledger already exists when users try to create an advanced ledger with same ledger id,\na ",(0,r.kt)("a",{parentName:"p",href:"https://bookkeeper.apache.org//docs/latest/api/javadoc/org/apache/bookkeeper/client/BKException.BKLedgerExistException.html"},"LedgerExistsException")," is thrown by the bookkeeper client.")),(0,r.kt)("p",null,"Creating advanced ledgers can be done throught a fluent API since 4.6."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-java"},'BookKeeper bk = ...;\n\nbyte[] passwd = "some-passwd".getBytes();\n\nWriteHandle wh = bk.newCreateLedgerOp()\n    .withDigestType(DigestType.CRC32)\n    .withPassword(passwd)\n    .withEnsembleSize(3)\n    .withWriteQuorumSize(3)\n    .withAckQuorumSize(2)\n    .makeAdv()                  // convert the create ledger builder to create ledger adv builder\n    .withLedgerId(1234L)\n    .execute()                  // execute the creation op\n    .get();                     // wait for the execution to complete\n\n')),(0,r.kt)("h3",{id:"add-entries"},"Add Entries"),(0,r.kt)("p",null,"The normal ",(0,r.kt)("a",{parentName:"p",href:"ledger-api/#adding-entries-to-ledgers"},"add entries api")," in advanced ledgers are disabled. Instead, when users want to add entries\nto advanced ledgers, an entry id is required to pass in along with the entry data when adding an entry."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-java"},'long entryId = ...; // entry id generated externally\n\nledger.addEntry(entryId, "Some entry data".getBytes());\n')),(0,r.kt)("p",null,"If you are using the new API, you can do as following:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-java"},'WriteHandle wh = ...;\nlong entryId = ...; // entry id generated externally\n\nwh.write(entryId, "Some entry data".getBytes()).get();\n')),(0,r.kt)("p",null,"A few notes when using this API:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"The entry id has to be non-negative."),(0,r.kt)("li",{parentName:"ul"},"Clients are okay to add entries out of order."),(0,r.kt)("li",{parentName:"ul"},"However, the entries are only acknowledged in a monotonic order starting from 0.")),(0,r.kt)("h3",{id:"read-entries"},"Read Entries"),(0,r.kt)("p",null,"The read entries api in advanced ledgers remain same as ",(0,r.kt)("a",{parentName:"p",href:"ledger-api/#reading-entries-from-ledgers"},"normal ledgers"),"."))}u.isMDXComponent=!0}}]);
\ No newline at end of file
diff --git a/content/assets/js/87cc2ef4.2ec5bbee.js b/content/assets/js/87cc2ef4.2ec5bbee.js
new file mode 100644
index 0000000..4568445
--- /dev/null
+++ b/content/assets/js/87cc2ef4.2ec5bbee.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunksite_3=self.webpackChunksite_3||[]).push([[637],{3905:function(e,t,r){r.d(t,{Zo:function(){return c},kt:function(){return h}});var a=r(67294);function n(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function o(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,a)}return r}function i(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?o(Object(r),!0).forEach((function(t){n(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):o(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function l(e,t){if(null==e)return{};var r,a,n=function(e,t){if(null==e)return{};var r,a,n={},o=Object.keys(e);for(a=0;a<o.length;a++)r=o[a],t.indexOf(r)>=0||(n[r]=e[r]);return n}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(a=0;a<o.length;a++)r=o[a],t.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}var p=a.createContext({}),s=function(e){var t=a.useContext(p),r=t;return e&&(r="function"==typeof e?e(t):i(i({},t),e)),r},c=function(e){var t=s(e.components);return a.createElement(p.Provider,{value:t},e.children)},d="mdxType",u={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},m=a.forwardRef((function(e,t){var r=e.components,n=e.mdxType,o=e.originalType,p=e.parentName,c=l(e,["components","mdxType","originalType","parentName"]),d=s(r),m=n,h=d["".concat(p,".").concat(m)]||d[m]||u[m]||o;return r?a.createElement(h,i(i({ref:t},c),{},{components:r})):a.createElement(h,i({ref:t},c))}));function h(e,t){var r=arguments,n=t&&t.mdxType;if("string"==typeof e||n){var o=r.length,i=new Array(o);i[0]=m;var l={};for(var p in t)hasOwnProperty.call(t,p)&&(l[p]=t[p]);l.originalType=e,l[d]="string"==typeof e?e:n,i[1]=l;for(var s=2;s<o;s++)i[s]=r[s];return a.createElement.apply(null,i)}return a.createElement.apply(null,r)}m.displayName="MDXCreateElement"},75422:function(e,t,r){r.r(t),r.d(t,{assets:function(){return p},contentTitle:function(){return i},default:function(){return u},frontMatter:function(){return o},metadata:function(){return l},toc:function(){return s}});var a=r(83117),n=(r(67294),r(3905));const o={id:"overview",title:"Apache BookKeeper 4.16.4-SNAPSHOT"},i=void 0,l={unversionedId:"overview/overview",id:"version-4.17.0/overview/overview",title:"Apache BookKeeper 4.16.4-SNAPSHOT",description:"\x3c!--",source:"@site/versioned_docs/version-4.17.0/overview/overview.md",sourceDirName:"overview",slug:"/overview/",permalink:"/docs/overview/",draft:!1,tags:[],version:"4.17.0",frontMatter:{id:"overview",title:"Apache BookKeeper 4.16.4-SNAPSHOT"},sidebar:"docsSidebar",next:{title:"BookKeeper installation",permalink:"/docs/getting-started/installation"}},p={},s=[{value:"Users",id:"users",level:3},{value:"Administrators",id:"administrators",level:3},{value:"Contributors",id:"contributors",level:3}],c={toc:s},d="wrapper";function u(e){let{components:t,...r}=e;return(0,n.kt)(d,(0,a.Z)({},c,r,{components:t,mdxType:"MDXLayout"}),(0,n.kt)("p",null,"This documentation is for Apache BookKeeper","\u2122"," version 4.16.4."),(0,n.kt)("p",null,"Apache BookKeeper","\u2122"," is a scalable, fault-tolerant, low-latency storage service optimized for real-time workloads. It offers durability, replication, and strong consistency as essentials for building reliable real-time applications."),(0,n.kt)("p",null,"BookKeeper is suitable for a wide variety of use cases, including:"),(0,n.kt)("table",null,(0,n.kt)("thead",{parentName:"table"},(0,n.kt)("tr",{parentName:"thead"},(0,n.kt)("th",{parentName:"tr",align:"left"},"Use case"),(0,n.kt)("th",{parentName:"tr",align:"left"},"Example"))),(0,n.kt)("tbody",{parentName:"table"},(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:"left"},(0,n.kt)("a",{parentName:"td",href:"https://en.wikipedia.org/wiki/Write-ahead_logging"},"WAL")," (write-ahead logging)"),(0,n.kt)("td",{parentName:"tr",align:"left"},"The HDFS ",(0,n.kt)("a",{parentName:"td",href:"https://hadoop.apache.org/docs/r2.5.2/hadoop-project-dist/hadoop-hdfs/HDFSHighAvailabilityWithNFS.html#BookKeeper_as_a_Shared_storage_EXPERIMENTAL"},"namenode"))),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:"left"},(0,n.kt)("a",{parentName:"td",href:"https://en.wikipedia.org/wiki/Write-ahead_logging"},"WAL")," (write-ahead logging)"),(0,n.kt)("td",{parentName:"tr",align:"left"},"Twitter ",(0,n.kt)("a",{parentName:"td",href:"https://blog.twitter.com/engineering/en_us/a/2016/strong-consistency-in-manhattan.html"},"Manhattan"))),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:"left"},(0,n.kt)("a",{parentName:"td",href:"https://en.wikipedia.org/wiki/Write-ahead_logging"},"WAL")," (write-ahead logging)"),(0,n.kt)("td",{parentName:"tr",align:"left"},(0,n.kt)("a",{parentName:"td",href:"https://github.com/diennea/herddb"},"HerdDB"))),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:"left"},(0,n.kt)("a",{parentName:"td",href:"https://en.wikipedia.org/wiki/Write-ahead_logging"},"WAL")," (write-ahead logging)"),(0,n.kt)("td",{parentName:"tr",align:"left"},(0,n.kt)("a",{parentName:"td",href:"https://github.com/pravega/pravega"},"Pravega"))),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:"left"},"Message storage"),(0,n.kt)("td",{parentName:"tr",align:"left"},(0,n.kt)("a",{parentName:"td",href:"https://pulsar.apache.org/docs/concepts-architecture-overview#persistent-storage"},"Apache Pulsar"))),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:"left"},"Offset/cursor storage"),(0,n.kt)("td",{parentName:"tr",align:"left"},(0,n.kt)("a",{parentName:"td",href:"https://pulsar.apache.org/docs/concepts-architecture-overview#persistent-storage"},"Apache Pulsar"))),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:"left"},"Object/",(0,n.kt)("a",{parentName:"td",href:"https://en.wikipedia.org/wiki/Binary_large_object"},"BLOB")," storage"),(0,n.kt)("td",{parentName:"tr",align:"left"},"Storing snapshots to replicated state machines")))),(0,n.kt)("p",null,"Learn more about Apache BookKeeper","\u2122"," and what it can do for your organization:"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("a",{parentName:"li",href:"/release-notes#4164"},"Apache BookKeeper 4.16.4 Release Notes")),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("a",{parentName:"li",href:"https://bookkeeper.apache.org//docs/latest/api/javadoc"},"Java API docs"))),(0,n.kt)("p",null,"Or start ",(0,n.kt)("a",{parentName:"p",href:"../getting-started/installation"},"using")," Apache BookKeeper today."),(0,n.kt)("h3",{id:"users"},"Users"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("strong",{parentName:"li"},"Concepts"),": Start with ",(0,n.kt)("a",{parentName:"li",href:"../getting-started/concepts"},"concepts"),". This will help you to fully understand\nthe other parts of the documentation, including the setup, integration and operation guides."),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("strong",{parentName:"li"},"Getting Started"),": Install ",(0,n.kt)("a",{parentName:"li",href:"../getting-started/installation"},"Apache BookKeeper")," and run bookies ",(0,n.kt)("a",{parentName:"li",href:"../getting-started/run-locally"},"locally")),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("strong",{parentName:"li"},"API"),": Read the ",(0,n.kt)("a",{parentName:"li",href:"../api/overview"},"API")," documentation to learn how to use Apache BookKeeper to build your applications."),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("strong",{parentName:"li"},"Deployment"),": The ",(0,n.kt)("a",{parentName:"li",href:"../deployment/manual"},"Deployment Guide")," shows how to deploy Apache BookKeeper to production clusters.")),(0,n.kt)("h3",{id:"administrators"},"Administrators"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("strong",{parentName:"li"},"Operations"),": The ",(0,n.kt)("a",{parentName:"li",href:"../admin/bookies"},"Admin Guide")," shows how to run Apache BookKeeper on production, what are the production\nconsiderations and best practices.")),(0,n.kt)("h3",{id:"contributors"},"Contributors"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("strong",{parentName:"li"},"Details"),": Learn ",(0,n.kt)("a",{parentName:"li",href:"../development/protocol"},"design details")," to know more internals.")))}u.isMDXComponent=!0}}]);
\ No newline at end of file
diff --git a/content/assets/js/951f283b.7ccb826b.js b/content/assets/js/951f283b.7ccb826b.js
new file mode 100644
index 0000000..1df525a
--- /dev/null
+++ b/content/assets/js/951f283b.7ccb826b.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunksite_3=self.webpackChunksite_3||[]).push([[4014],{3905:function(t,e,a){a.d(e,{Zo:function(){return m},kt:function(){return g}});var n=a(67294);function r(t,e,a){return e in t?Object.defineProperty(t,e,{value:a,enumerable:!0,configurable:!0,writable:!0}):t[e]=a,t}function l(t,e){var a=Object.keys(t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(t);e&&(n=n.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),a.push.apply(a,n)}return a}function i(t){for(var e=1;e<arguments.length;e++){var a=null!=arguments[e]?arguments[e]:{};e%2?l(Object(a),!0).forEach((function(e){r(t,e,a[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(a)):l(Object(a)).forEach((function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(a,e))}))}return t}function p(t,e){if(null==t)return{};var a,n,r=function(t,e){if(null==t)return{};var a,n,r={},l=Object.keys(t);for(n=0;n<l.length;n++)a=l[n],e.indexOf(a)>=0||(r[a]=t[a]);return r}(t,e);if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(t);for(n=0;n<l.length;n++)a=l[n],e.indexOf(a)>=0||Object.prototype.propertyIsEnumerable.call(t,a)&&(r[a]=t[a])}return r}var o=n.createContext({}),d=function(t){var e=n.useContext(o),a=e;return t&&(a="function"==typeof t?t(e):i(i({},e),t)),a},m=function(t){var e=d(t.components);return n.createElement(o.Provider,{value:e},t.children)},k="mdxType",N={inlineCode:"code",wrapper:function(t){var e=t.children;return n.createElement(n.Fragment,{},e)}},s=n.forwardRef((function(t,e){var a=t.components,r=t.mdxType,l=t.originalType,o=t.parentName,m=p(t,["components","mdxType","originalType","parentName"]),k=d(a),s=r,g=k["".concat(o,".").concat(s)]||k[s]||N[s]||l;return a?n.createElement(g,i(i({ref:e},m),{},{components:a})):n.createElement(g,i({ref:e},m))}));function g(t,e){var a=arguments,r=e&&e.mdxType;if("string"==typeof t||r){var l=a.length,i=new Array(l);i[0]=s;var p={};for(var o in e)hasOwnProperty.call(e,o)&&(p[o]=e[o]);p.originalType=t,p[k]="string"==typeof t?t:r,i[1]=p;for(var d=2;d<l;d++)i[d]=a[d];return n.createElement.apply(null,i)}return n.createElement.apply(null,a)}s.displayName="MDXCreateElement"},99820:function(t,e,a){a.r(e),a.d(e,{assets:function(){return o},contentTitle:function(){return i},default:function(){return N},frontMatter:function(){return l},metadata:function(){return p},toc:function(){return d}});var n=a(83117),r=(a(67294),a(3905));const l={id:"http",title:"BookKeeper Admin REST API"},i=void 0,p={unversionedId:"admin/http",id:"version-4.17.0/admin/http",title:"BookKeeper Admin REST API",description:"This document introduces BookKeeper HTTP endpoints, which can be used for BookKeeper administration.",source:"@site/versioned_docs/version-4.17.0/admin/http.md",sourceDirName:"admin",slug:"/admin/http",permalink:"/docs/admin/http",draft:!1,tags:[],version:"4.17.0",frontMatter:{id:"http",title:"BookKeeper Admin REST API"},sidebar:"docsSidebar",previous:{title:"Upgrade",permalink:"/docs/admin/upgrade"},next:{title:"Decommission Bookies",permalink:"/docs/admin/decomission"}},o={},d=[{value:"All the endpoints",id:"all-the-endpoints",level:2},{value:"Heartbeat",id:"heartbeat",level:2},{value:"Endpoint: /heartbeat",id:"endpoint-heartbeat",level:3},{value:"Config",id:"config",level:2},{value:"Endpoint: /api/v1/config/server_config",id:"endpoint-apiv1configserver_config",level:3},{value:"Metrics",id:"metrics",level:2},{value:"Endpoint: /metrics",id:"endpoint-metrics",level:3},{value:"Ledger",id:"ledger",level:2},{value:"Endpoint: /api/v1/ledger/delete/?ledger_id=&lt;ledger_id&gt;",id:"endpoint-apiv1ledgerdeleteledger_idledger_id",level:3},{value:"Endpoint: /api/v1/ledger/list/?print_metadata=&lt;metadata&gt;",id:"endpoint-apiv1ledgerlistprint_metadatametadata",level:3},{value:"Endpoint: /api/v1/ledger/metadata/?ledger_id=&lt;ledger_id&gt;",id:"endpoint-apiv1ledgermetadataledger_idledger_id",level:3},{value:"Endpoint: /api/v1/ledger/read/?ledger_id=&lt;ledger_id&gt;&amp;start_entry_id=&lt;start_entry_id&gt;&amp;end_entry_id=&lt;end_entry_id&gt;",id:"endpoint-apiv1ledgerreadledger_idledger_idstart_entry_idstart_entry_idend_entry_idend_entry_id",level:3},{value:"Bookie",id:"bookie",level:2},{value:"Endpoint: /api/v1/bookie/info",id:"endpoint-apiv1bookieinfo",level:3},{value:"Endpoint: /api/v1/bookie/list_bookies/?type=&lt;type&gt;&amp;print_hostnames=&lt;hostnames&gt;",id:"endpoint-apiv1bookielist_bookiestypetypeprint_hostnameshostnames",level:3},{value:"Endpoint: /api/v1/bookie/list_bookie_info",id:"endpoint-apiv1bookielist_bookie_info",level:3},{value:"Endpoint: /api/v1/bookie/cluster_info",id:"endpoint-apiv1bookiecluster_info",level:3},{value:"Endpoint: /api/v1/bookie/last_log_mark",id:"endpoint-apiv1bookielast_log_mark",level:3},{value:"Endpoint: /api/v1/bookie/list_disk_file/?file_type=&lt;type&gt;",id:"endpoint-apiv1bookielist_disk_filefile_typetype",level:3},{value:"Endpoint: /api/v1/bookie/expand_storage",id:"endpoint-apiv1bookieexpand_storage",level:3},{value:"Endpoint: /api/v1/bookie/gc",id:"endpoint-apiv1bookiegc",level:3},{value:"Endpoint: /api/v1/bookie/gc_details",id:"endpoint-apiv1bookiegc_details",level:3},{value:"Endpoint: /api/v1/bookie/gc/suspend_compaction",id:"endpoint-apiv1bookiegcsuspend_compaction",level:3},{value:"Endpoint: /api/v1/bookie/gc/resume_compaction",id:"endpoint-apiv1bookiegcresume_compaction",level:3},{value:"Endpoint: /api/v1/bookie/state",id:"endpoint-apiv1bookiestate",level:3},{value:"Endpoint: /api/v1/bookie/sanity",id:"endpoint-apiv1bookiesanity",level:3},{value:"Endpoint: /api/v1/bookie/is_ready",id:"endpoint-apiv1bookieis_ready",level:3},{value:"Endpoint: /api/v1/bookie/entry_location_compact",id:"endpoint-apiv1bookieentry_location_compact",level:3},{value:"Auto recovery",id:"auto-recovery",level:2},{value:"Endpoint: /api/v1/autorecovery/bookie/",id:"endpoint-apiv1autorecoverybookie",level:3},{value:"Endpoint: /api/v1/autorecovery/list_under_replicated_ledger/?missingreplica=&lt;bookie_address&gt;&amp;excludingmissingreplica=&lt;bookie_address&gt;",id:"endpoint-apiv1autorecoverylist_under_replicated_ledgermissingreplicabookie_addressexcludingmissingreplicabookie_address",level:3},{value:"Endpoint: /api/v1/autorecovery/who_is_auditor",id:"endpoint-apiv1autorecoverywho_is_auditor",level:3},{value:"Endpoint: /api/v1/autorecovery/trigger_audit",id:"endpoint-apiv1autorecoverytrigger_audit",level:3},{value:"Endpoint: /api/v1/autorecovery/lost_bookie_recovery_delay",id:"endpoint-apiv1autorecoverylost_bookie_recovery_delay",level:3},{value:"Endpoint: /api/v1/autorecovery/decommission",id:"endpoint-apiv1autorecoverydecommission",level:3}],m={toc:d},k="wrapper";function N(t){let{components:e,...a}=t;return(0,r.kt)(k,(0,n.Z)({},m,a,{components:e,mdxType:"MDXLayout"}),(0,r.kt)("p",null,"This document introduces BookKeeper HTTP endpoints, which can be used for BookKeeper administration.\nTo use this feature, set ",(0,r.kt)("inlineCode",{parentName:"p"},"httpServerEnabled")," to ",(0,r.kt)("inlineCode",{parentName:"p"},"true")," in file ",(0,r.kt)("inlineCode",{parentName:"p"},"conf/bk_server.conf"),"."),(0,r.kt)("h2",{id:"all-the-endpoints"},"All the endpoints"),(0,r.kt)("p",null,"Currently all the HTTP endpoints could be divided into these 5 components:"),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},"Heartbeat: heartbeat for a specific bookie."),(0,r.kt)("li",{parentName:"ol"},"Config: doing the server configuration for a specific bookie."),(0,r.kt)("li",{parentName:"ol"},"Ledger: HTTP endpoints related to ledgers."),(0,r.kt)("li",{parentName:"ol"},"Bookie: HTTP endpoints related to bookies."),(0,r.kt)("li",{parentName:"ol"},"AutoRecovery: HTTP endpoints related to auto recovery.")),(0,r.kt)("h2",{id:"heartbeat"},"Heartbeat"),(0,r.kt)("h3",{id:"endpoint-heartbeat"},"Endpoint: /heartbeat"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Method: GET"),(0,r.kt)("li",{parentName:"ul"},"Description: Get heartbeat status for a specific bookie"),(0,r.kt)("li",{parentName:"ul"},"Response: ")),(0,r.kt)("table",null,(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:"left"},"Code"),(0,r.kt)("th",{parentName:"tr",align:"left"},"Description"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"left"},"200"),(0,r.kt)("td",{parentName:"tr",align:"left"},"Successful operation")))),(0,r.kt)("h2",{id:"config"},"Config"),(0,r.kt)("h3",{id:"endpoint-apiv1configserver_config"},"Endpoint: /api/v1/config/server_config"),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},"Method: GET"),(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},"Description: Get value of all configured values overridden on local server config")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},"Response:  "),(0,r.kt)("table",{parentName:"li"},(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:"left"},"Code"),(0,r.kt)("th",{parentName:"tr",align:"left"},"Description"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"left"},"200"),(0,r.kt)("td",{parentName:"tr",align:"left"},"Successful operation")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"left"},"403"),(0,r.kt)("td",{parentName:"tr",align:"left"},"Permission denied")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"left"},"404"),(0,r.kt)("td",{parentName:"tr",align:"left"},"Not found"))))))),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},"Method: PUT"),(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},"Description: Update a local server config")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},"Parameters: "),(0,r.kt)("table",{parentName:"li"},(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:"left"},"Name"),(0,r.kt)("th",{parentName:"tr",align:"left"},"Type"),(0,r.kt)("th",{parentName:"tr",align:"left"},"Required"),(0,r.kt)("th",{parentName:"tr",align:"left"},"Description"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"left"},"configName"),(0,r.kt)("td",{parentName:"tr",align:"left"},"String"),(0,r.kt)("td",{parentName:"tr",align:"left"},"Yes"),(0,r.kt)("td",{parentName:"tr",align:"left"},"Configuration name(key)")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"left"},"configValue"),(0,r.kt)("td",{parentName:"tr",align:"left"},"String"),(0,r.kt)("td",{parentName:"tr",align:"left"},"Yes"),(0,r.kt)("td",{parentName:"tr",align:"left"},"Configuration value(value)"))))),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},"Body: "),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre",className:"language-json"},'{\n   "configName1": "configValue1",\n   "configName2": "configValue2"\n}\n'))),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},"Response:  "),(0,r.kt)("table",{parentName:"li"},(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:"left"},"Code"),(0,r.kt)("th",{parentName:"tr",align:"left"},"Description"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"left"},"200"),(0,r.kt)("td",{parentName:"tr",align:"left"},"Successful operation")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"left"},"403"),(0,r.kt)("td",{parentName:"tr",align:"left"},"Permission denied")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"left"},"404"),(0,r.kt)("td",{parentName:"tr",align:"left"},"Not found")))))))),(0,r.kt)("h2",{id:"metrics"},"Metrics"),(0,r.kt)("h3",{id:"endpoint-metrics"},"Endpoint: /metrics"),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},"Method: GET"),(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},"Description: Get all metrics by calling ",(0,r.kt)("inlineCode",{parentName:"p"},"writeAllMetrics()")," of ",(0,r.kt)("inlineCode",{parentName:"p"},"statsProvider")," internally")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},"Response:  "),(0,r.kt)("table",{parentName:"li"},(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:"left"},"Code"),(0,r.kt)("th",{parentName:"tr",align:"left"},"Description"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"left"},"200"),(0,r.kt)("td",{parentName:"tr",align:"left"},"Successful operation")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"left"},"403"),(0,r.kt)("td",{parentName:"tr",align:"left"},"Permission denied")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"left"},"404"),(0,r.kt)("td",{parentName:"tr",align:"left"},"Not found")))))))),(0,r.kt)("h2",{id:"ledger"},"Ledger"),(0,r.kt)("h3",{id:"endpoint-apiv1ledgerdeleteledger_idledger_id"},"Endpoint: /api/v1/ledger/delete/?ledger_id=","<","ledger_id",">"),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},"Method: DELETE"),(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},"Description: Delete a ledger.")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},"Parameters: "),(0,r.kt)("table",{parentName:"li"},(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:"left"},"Name"),(0,r.kt)("th",{parentName:"tr",align:"left"},"Type"),(0,r.kt)("th",{parentName:"tr",align:"left"},"Required"),(0,r.kt)("th",{parentName:"tr",align:"left"},"Description"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"left"},"ledger_id"),(0,r.kt)("td",{parentName:"tr",align:"left"},"Long"),(0,r.kt)("td",{parentName:"tr",align:"left"},"Yes"),(0,r.kt)("td",{parentName:"tr",align:"left"},"ledger id of the ledger."))))),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},"Response:  "),(0,r.kt)("table",{parentName:"li"},(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:"left"},"Code"),(0,r.kt)("th",{parentName:"tr",align:"left"},"Description"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"left"},"200"),(0,r.kt)("td",{parentName:"tr",align:"left"},"Successful operation")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"left"},"403"),(0,r.kt)("td",{parentName:"tr",align:"left"},"Permission denied")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"left"},"404"),(0,r.kt)("td",{parentName:"tr",align:"left"},"Not found")))))))),(0,r.kt)("h3",{id:"endpoint-apiv1ledgerlistprint_metadatametadata"},"Endpoint: /api/v1/ledger/list/?print_metadata=","<","metadata",">"),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},"Method: GET"),(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},"Description: List all the ledgers.")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},"Parameters: "),(0,r.kt)("table",{parentName:"li"},(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:"left"},"Name"),(0,r.kt)("th",{parentName:"tr",align:"left"},"Type"),(0,r.kt)("th",{parentName:"tr",align:"left"},"Required"),(0,r.kt)("th",{parentName:"tr",align:"left"},"Description"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"left"},"print_metadata"),(0,r.kt)("td",{parentName:"tr",align:"left"},"Boolean"),(0,r.kt)("td",{parentName:"tr",align:"left"},"No"),(0,r.kt)("td",{parentName:"tr",align:"left"},"whether print out metadata"))))),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},"Response:  "),(0,r.kt)("table",{parentName:"li"},(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:"left"},"Code"),(0,r.kt)("th",{parentName:"tr",align:"left"},"Description"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"left"},"200"),(0,r.kt)("td",{parentName:"tr",align:"left"},"Successful operation")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"left"},"403"),(0,r.kt)("td",{parentName:"tr",align:"left"},"Permission denied")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"left"},"404"),(0,r.kt)("td",{parentName:"tr",align:"left"},"Not found"))))),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},"Response Body format:  "),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre",className:"language-json"},'{\n  "ledgerId1": "ledgerMetadata1",\n  "ledgerId2": "ledgerMetadata2",\n  ...\n}\n')))))),(0,r.kt)("h3",{id:"endpoint-apiv1ledgermetadataledger_idledger_id"},"Endpoint: /api/v1/ledger/metadata/?ledger_id=","<","ledger_id",">"),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},"Method: GET"),(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},"Description: Get the metadata of a ledger.")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},"Parameters: "),(0,r.kt)("table",{parentName:"li"},(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:"left"},"Name"),(0,r.kt)("th",{parentName:"tr",align:"left"},"Type"),(0,r.kt)("th",{parentName:"tr",align:"left"},"Required"),(0,r.kt)("th",{parentName:"tr",align:"left"},"Description"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"left"},"ledger_id"),(0,r.kt)("td",{parentName:"tr",align:"left"},"Long"),(0,r.kt)("td",{parentName:"tr",align:"left"},"Yes"),(0,r.kt)("td",{parentName:"tr",align:"left"},"ledger id of the ledger."))))),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},"Response:  "),(0,r.kt)("table",{parentName:"li"},(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:"left"},"Code"),(0,r.kt)("th",{parentName:"tr",align:"left"},"Description"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"left"},"200"),(0,r.kt)("td",{parentName:"tr",align:"left"},"Successful operation")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"left"},"403"),(0,r.kt)("td",{parentName:"tr",align:"left"},"Permission denied")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"left"},"404"),(0,r.kt)("td",{parentName:"tr",align:"left"},"Not found"))))),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},"Response Body format:  "),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre",className:"language-json"},'{\n  "ledgerId1": "ledgerMetadata1"\n}\n')))))),(0,r.kt)("h3",{id:"endpoint-apiv1ledgerreadledger_idledger_idstart_entry_idstart_entry_idend_entry_idend_entry_id"},"Endpoint: /api/v1/ledger/read/?ledger_id=","<","ledger_id",">","&start_entry_id=","<","start_entry_id",">","&end_entry_id=","<","end_entry_id",">"),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},"Method: GET"),(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},"Description: Read a range of entries from ledger.")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},"Parameters: "),(0,r.kt)("table",{parentName:"li"},(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:"left"},"Name"),(0,r.kt)("th",{parentName:"tr",align:"left"},"Type"),(0,r.kt)("th",{parentName:"tr",align:"left"},"Required"),(0,r.kt)("th",{parentName:"tr",align:"left"},"Description"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"left"},"ledger_id"),(0,r.kt)("td",{parentName:"tr",align:"left"},"Long"),(0,r.kt)("td",{parentName:"tr",align:"left"},"Yes"),(0,r.kt)("td",{parentName:"tr",align:"left"},"ledger id of the ledger.")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"left"},"start_entry_id"),(0,r.kt)("td",{parentName:"tr",align:"left"},"Long"),(0,r.kt)("td",{parentName:"tr",align:"left"},"No"),(0,r.kt)("td",{parentName:"tr",align:"left"},"start entry id of read range.")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"left"},"end_entry_id"),(0,r.kt)("td",{parentName:"tr",align:"left"},"Long"),(0,r.kt)("td",{parentName:"tr",align:"left"},"No"),(0,r.kt)("td",{parentName:"tr",align:"left"},"end entry id of read range."))))),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},"Response:  "),(0,r.kt)("table",{parentName:"li"},(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:"left"},"Code"),(0,r.kt)("th",{parentName:"tr",align:"left"},"Description"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"left"},"200"),(0,r.kt)("td",{parentName:"tr",align:"left"},"Successful operation")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"left"},"403"),(0,r.kt)("td",{parentName:"tr",align:"left"},"Permission denied")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"left"},"404"),(0,r.kt)("td",{parentName:"tr",align:"left"},"Not found"))))),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},"Response Body format:  "),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre",className:"language-json"},'{\n  "entryId1": "entry content 1",\n  "entryId2": "entry content 2",\n  ...\n}\n')))))),(0,r.kt)("h2",{id:"bookie"},"Bookie"),(0,r.kt)("h3",{id:"endpoint-apiv1bookieinfo"},"Endpoint: /api/v1/bookie/info"),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},"Method: GET"),(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},"Description:  Get bookie info")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},"Response:"),(0,r.kt)("table",{parentName:"li"},(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:"left"},"Code"),(0,r.kt)("th",{parentName:"tr",align:"left"},"Description"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"left"},"200"),(0,r.kt)("td",{parentName:"tr",align:"left"},"Successful operation")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"left"},"403"),(0,r.kt)("td",{parentName:"tr",align:"left"},"Permission denied")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"left"},"501"),(0,r.kt)("td",{parentName:"tr",align:"left"},"Not implemented"))))),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},"Body:"),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre",className:"language-json"},'{\n   "freeSpace" : 0,\n   "totalSpace" : 0\n }\n')))))),(0,r.kt)("h3",{id:"endpoint-apiv1bookielist_bookiestypetypeprint_hostnameshostnames"},"Endpoint: /api/v1/bookie/list_bookies/?type=","<","type",">","&print_hostnames=","<","hostnames",">"),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},"Method: GET"),(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},"Description:  Get all the available bookies.")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},"Parameters: "),(0,r.kt)("table",{parentName:"li"},(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:"left"},"Name"),(0,r.kt)("th",{parentName:"tr",align:"left"},"Type"),(0,r.kt)("th",{parentName:"tr",align:"left"},"Required"),(0,r.kt)("th",{parentName:"tr",align:"left"},"Description"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"left"},"type"),(0,r.kt)("td",{parentName:"tr",align:"left"},"String"),(0,r.kt)("td",{parentName:"tr",align:"left"},"Yes"),(0,r.kt)("td",{parentName:"tr",align:"left"},'value: "rw" or "ro" , list read-write/read-only bookies.')),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"left"},"print_hostnames"),(0,r.kt)("td",{parentName:"tr",align:"left"},"Boolean"),(0,r.kt)("td",{parentName:"tr",align:"left"},"No"),(0,r.kt)("td",{parentName:"tr",align:"left"},"whether print hostname of bookies."))))),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},"Response:  "),(0,r.kt)("table",{parentName:"li"},(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:"left"},"Code"),(0,r.kt)("th",{parentName:"tr",align:"left"},"Description"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"left"},"200"),(0,r.kt)("td",{parentName:"tr",align:"left"},"Successful operation")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"left"},"403"),(0,r.kt)("td",{parentName:"tr",align:"left"},"Permission denied")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"left"},"404"),(0,r.kt)("td",{parentName:"tr",align:"left"},"Not found"))))),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},"Response Body format:  "),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre",className:"language-json"},'{\n  "bookieSocketAddress1": "hostname1",\n  "bookieSocketAddress2": "hostname2",\n  ...\n}\n')))))),(0,r.kt)("h3",{id:"endpoint-apiv1bookielist_bookie_info"},"Endpoint: /api/v1/bookie/list_bookie_info"),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},"Method: GET"),(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},"Description:  Get bookies disk usage info of this cluster.")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},"Response:  "),(0,r.kt)("table",{parentName:"li"},(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:"left"},"Code"),(0,r.kt)("th",{parentName:"tr",align:"left"},"Description"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"left"},"200"),(0,r.kt)("td",{parentName:"tr",align:"left"},"Successful operation")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"left"},"403"),(0,r.kt)("td",{parentName:"tr",align:"left"},"Permission denied")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"left"},"404"),(0,r.kt)("td",{parentName:"tr",align:"left"},"Not found"))))),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},"Response Body format:  "),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre",className:"language-json"},'{\n  "bookieAddress" : {free: xxx, total: xxx},\n  "bookieAddress" : {free: xxx, total: xxx},\n  ...\n  "clusterInfo" : {total_free: xxx, total: xxx}\n}\n')))))),(0,r.kt)("h3",{id:"endpoint-apiv1bookiecluster_info"},"Endpoint: /api/v1/bookie/cluster_info"),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},"Method: GET"),(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},"Description:  Get top-level info of this cluster.")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},"Response:"),(0,r.kt)("table",{parentName:"li"},(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:"left"},"Code"),(0,r.kt)("th",{parentName:"tr",align:"left"},"Description"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"left"},"200"),(0,r.kt)("td",{parentName:"tr",align:"left"},"Successful operation")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"left"},"403"),(0,r.kt)("td",{parentName:"tr",align:"left"},"Permission denied")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"left"},"404"),(0,r.kt)("td",{parentName:"tr",align:"left"},"Not found"))))),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},"Response Body format:"),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre"},' ```json\n {\n   "auditorElected" : false,\n   "auditorId" : "",\n   "clusterUnderReplicated" : false,\n   "ledgerReplicationEnabled" : true,\n   "totalBookiesCount" : 1,\n   "writableBookiesCount" : 1,\n   "readonlyBookiesCount" : 0,\n   "unavailableBookiesCount" : 0\n }\n ```    \n')),(0,r.kt)("p",{parentName:"li"},(0,r.kt)("inlineCode",{parentName:"p"},"clusterUnderReplicated")," is true if there is any underreplicated ledger known currently.\nTrigger audit to increase precision. Audit might not be possible if ",(0,r.kt)("inlineCode",{parentName:"p"},"auditorElected")," is false or\n",(0,r.kt)("inlineCode",{parentName:"p"},"ledgerReplicationEnabled")," is false."))),(0,r.kt)("p",{parentName:"li"},(0,r.kt)("inlineCode",{parentName:"p"},"totalBookiesCount")," = ",(0,r.kt)("inlineCode",{parentName:"p"},"writableBookiesCount")," + ",(0,r.kt)("inlineCode",{parentName:"p"},"readonlyBookiesCount")," + ",(0,r.kt)("inlineCode",{parentName:"p"},"unavailableBookiesCount"),"."))),(0,r.kt)("h3",{id:"endpoint-apiv1bookielast_log_mark"},"Endpoint: /api/v1/bookie/last_log_mark"),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},"Method: GET"),(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},"Description:  Get the last log marker.")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},"Response:  "),(0,r.kt)("table",{parentName:"li"},(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:"left"},"Code"),(0,r.kt)("th",{parentName:"tr",align:"left"},"Description"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"left"},"200"),(0,r.kt)("td",{parentName:"tr",align:"left"},"Successful operation")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"left"},"403"),(0,r.kt)("td",{parentName:"tr",align:"left"},"Permission denied")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"left"},"404"),(0,r.kt)("td",{parentName:"tr",align:"left"},"Not found"))))),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},"Response Body format:  "),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre",className:"language-json"},"{\n  JournalId1 : position1,\n  JournalId2 : position2,\n  ...\n}\n")))))),(0,r.kt)("h3",{id:"endpoint-apiv1bookielist_disk_filefile_typetype"},"Endpoint: /api/v1/bookie/list_disk_file/?file_type=","<","type",">"),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},"Method: GET"),(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},"Description:  Get all the files on disk of current bookie.")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},"Parameters: "),(0,r.kt)("table",{parentName:"li"},(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:"left"},"Name"),(0,r.kt)("th",{parentName:"tr",align:"left"},"Type"),(0,r.kt)("th",{parentName:"tr",align:"left"},"Required"),(0,r.kt)("th",{parentName:"tr",align:"left"},"Description"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"left"},"type"),(0,r.kt)("td",{parentName:"tr",align:"left"},"String"),(0,r.kt)("td",{parentName:"tr",align:"left"},"No"),(0,r.kt)("td",{parentName:"tr",align:"left"},"file type: journal/entrylog/index."))))),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},"Response:  "),(0,r.kt)("table",{parentName:"li"},(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:"left"},"Code"),(0,r.kt)("th",{parentName:"tr",align:"left"},"Description"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"left"},"200"),(0,r.kt)("td",{parentName:"tr",align:"left"},"Successful operation")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"left"},"403"),(0,r.kt)("td",{parentName:"tr",align:"left"},"Permission denied")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"left"},"404"),(0,r.kt)("td",{parentName:"tr",align:"left"},"Not found"))))),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},"Response Body format:  "),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre",className:"language-json"},'{\n  "journal files" : "filename1 filename2 ...",\n  "entrylog files" : "filename1 filename2...",\n  "index files" : "filename1 filename2 ..."\n}\n')))))),(0,r.kt)("h3",{id:"endpoint-apiv1bookieexpand_storage"},"Endpoint: /api/v1/bookie/expand_storage"),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},"Method: PUT"),(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},"Description:  Expand storage for a bookie.")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},"Response:  "),(0,r.kt)("table",{parentName:"li"},(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:"left"},"Code"),(0,r.kt)("th",{parentName:"tr",align:"left"},"Description"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"left"},"200"),(0,r.kt)("td",{parentName:"tr",align:"left"},"Successful operation")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"left"},"403"),(0,r.kt)("td",{parentName:"tr",align:"left"},"Permission denied")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"left"},"404"),(0,r.kt)("td",{parentName:"tr",align:"left"},"Not found")))))))),(0,r.kt)("h3",{id:"endpoint-apiv1bookiegc"},"Endpoint: /api/v1/bookie/gc"),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},"Method: PUT"),(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},"Description:  trigger gc for this bookie.")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},"Response:  "),(0,r.kt)("table",{parentName:"li"},(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:"left"},"Code"),(0,r.kt)("th",{parentName:"tr",align:"left"},"Description"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"left"},"200"),(0,r.kt)("td",{parentName:"tr",align:"left"},"Successful operation")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"left"},"403"),(0,r.kt)("td",{parentName:"tr",align:"left"},"Permission denied")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"left"},"404"),(0,r.kt)("td",{parentName:"tr",align:"left"},"Not found"))))))),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},"Method: GET"),(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},"Description:  whether force triggered Garbage Collection is running or not for this bookie. true for is running.")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},"Response:"),(0,r.kt)("table",{parentName:"li"},(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:"left"},"Code"),(0,r.kt)("th",{parentName:"tr",align:"left"},"Description"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"left"},"200"),(0,r.kt)("td",{parentName:"tr",align:"left"},"Successful operation")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"left"},"403"),(0,r.kt)("td",{parentName:"tr",align:"left"},"Permission denied")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"left"},"404"),(0,r.kt)("td",{parentName:"tr",align:"left"},"Not found"))))),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},"Body:"),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre",className:"language-json"},'{\n   "is_in_force_gc" : "false"\n}\n')))))),(0,r.kt)("h3",{id:"endpoint-apiv1bookiegc_details"},"Endpoint: /api/v1/bookie/gc_details"),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},"Method: GET"),(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},"Description:  get details of Garbage Collection Thread, like whether it is in compacting, last compaction time, compaction counter, etc.")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},"Response:"),(0,r.kt)("table",{parentName:"li"},(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:"left"},"Code"),(0,r.kt)("th",{parentName:"tr",align:"left"},"Description"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"left"},"200"),(0,r.kt)("td",{parentName:"tr",align:"left"},"Successful operation")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"left"},"403"),(0,r.kt)("td",{parentName:"tr",align:"left"},"Permission denied")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"left"},"404"),(0,r.kt)("td",{parentName:"tr",align:"left"},"Not found"))))),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},"Body:"),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre",className:"language-json"},'[ {\n   "forceCompacting" : false,\n   "majorCompacting" : false,\n   "minorCompacting" : false,\n   "lastMajorCompactionTime" : 1544578144944,\n   "lastMinorCompactionTime" : 1544578144944,\n   "majorCompactionCounter" : 1,\n   "minorCompactionCounter" : 0\n } ]\n')))))),(0,r.kt)("h3",{id:"endpoint-apiv1bookiegcsuspend_compaction"},"Endpoint: /api/v1/bookie/gc/suspend_compaction"),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},"Method: PUT"),(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},"Description:  suspend the next compaction stage for this bookie.")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},"Body:"),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre",className:"language-json"},'{\n   "suspendMajor": "true",\n   "suspendMinor": "true"\n}\n'))),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},"Response:"),(0,r.kt)("table",{parentName:"li"},(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:"left"},"Code"),(0,r.kt)("th",{parentName:"tr",align:"left"},"Description"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"left"},"200"),(0,r.kt)("td",{parentName:"tr",align:"left"},"Successful operation")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"left"},"403"),(0,r.kt)("td",{parentName:"tr",align:"left"},"Permission denied")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"left"},"404"),(0,r.kt)("td",{parentName:"tr",align:"left"},"Not found"))))))),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},"Method: GET"),(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},"Description:  whether major or minor compaction  is suspending or not for this bookie. true for is running.")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},"Response:"),(0,r.kt)("table",{parentName:"li"},(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:"left"},"Code"),(0,r.kt)("th",{parentName:"tr",align:"left"},"Description"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"left"},"200"),(0,r.kt)("td",{parentName:"tr",align:"left"},"Successful operation")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"left"},"403"),(0,r.kt)("td",{parentName:"tr",align:"left"},"Permission denied")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"left"},"404"),(0,r.kt)("td",{parentName:"tr",align:"left"},"Not found"))))),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},"Body:"),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre",className:"language-json"},'{\n   "isMajorGcSuspended" : "true",\n   "isMinorGcSuspended" : "true"\n\n}\n')))))),(0,r.kt)("h3",{id:"endpoint-apiv1bookiegcresume_compaction"},"Endpoint: /api/v1/bookie/gc/resume_compaction"),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},"Method: PUT"),(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},"Description:  resume the suspended compaction for this bookie.")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},"Body:"),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre",className:"language-json"},'{\n   "resumeMajor": "true",\n   "resumeMinor": "true"\n}\n'))),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},"Response:"),(0,r.kt)("table",{parentName:"li"},(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:"left"},"Code"),(0,r.kt)("th",{parentName:"tr",align:"left"},"Description"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"left"},"200"),(0,r.kt)("td",{parentName:"tr",align:"left"},"Successful operation")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"left"},"403"),(0,r.kt)("td",{parentName:"tr",align:"left"},"Permission denied")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"left"},"404"),(0,r.kt)("td",{parentName:"tr",align:"left"},"Not found")))))))),(0,r.kt)("h3",{id:"endpoint-apiv1bookiestate"},"Endpoint: /api/v1/bookie/state"),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},"Method: GET"),(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},"Description:  Exposes the current state of bookie")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},"Response:"),(0,r.kt)("table",{parentName:"li"},(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:"left"},"Code"),(0,r.kt)("th",{parentName:"tr",align:"left"},"Description"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"left"},"200"),(0,r.kt)("td",{parentName:"tr",align:"left"},"Successful operation")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"left"},"403"),(0,r.kt)("td",{parentName:"tr",align:"left"},"Permission denied")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"left"},"404"),(0,r.kt)("td",{parentName:"tr",align:"left"},"Not found"))))),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},"Body:"),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre",className:"language-json"},'{\n   "running" : true,\n   "readOnly" : false,\n   "shuttingDown" : false,\n   "availableForHighPriorityWrites" : true\n }\n')))))),(0,r.kt)("h3",{id:"endpoint-apiv1bookiesanity"},"Endpoint: /api/v1/bookie/sanity"),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},"Method: GET"),(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},"Description:  Exposes the bookie sanity state")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},"Response:"),(0,r.kt)("table",{parentName:"li"},(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:"left"},"Code"),(0,r.kt)("th",{parentName:"tr",align:"left"},"Description"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"left"},"200"),(0,r.kt)("td",{parentName:"tr",align:"left"},"Successful operation")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"left"},"403"),(0,r.kt)("td",{parentName:"tr",align:"left"},"Permission denied")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"left"},"404"),(0,r.kt)("td",{parentName:"tr",align:"left"},"Not found"))))),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},"Body:"),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre",className:"language-json"},'{\n   "passed" : true,\n   "readOnly" : false\n }\n')))))),(0,r.kt)("h3",{id:"endpoint-apiv1bookieis_ready"},"Endpoint: /api/v1/bookie/is_ready"),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},"Method: GET"),(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},"Description:  Return true if the bookie is ready")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},"Response:"),(0,r.kt)("table",{parentName:"li"},(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:"left"},"Code"),(0,r.kt)("th",{parentName:"tr",align:"left"},"Description"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"left"},"200"),(0,r.kt)("td",{parentName:"tr",align:"left"},"Successful operation")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"left"},"403"),(0,r.kt)("td",{parentName:"tr",align:"left"},"Permission denied")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"left"},"404"),(0,r.kt)("td",{parentName:"tr",align:"left"},"Not found")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"left"},"503"),(0,r.kt)("td",{parentName:"tr",align:"left"},"Bookie is not ready"))))),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},"Body: ","<","empty",">"))))),(0,r.kt)("h3",{id:"endpoint-apiv1bookieentry_location_compact"},"Endpoint: /api/v1/bookie/entry_location_compact"),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},"Method: PUT"),(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},"Description:  trigger entry location index rocksDB compact. Trigger all entry location rocksDB compact, if entryLocations not be specified.")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},"Parameters: "),(0,r.kt)("table",{parentName:"li"},(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:"left"},"Name"),(0,r.kt)("th",{parentName:"tr",align:"left"},"Type"),(0,r.kt)("th",{parentName:"tr",align:"left"},"Required"),(0,r.kt)("th",{parentName:"tr",align:"left"},"Description"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"left"},"entryLocationRocksDBCompact"),(0,r.kt)("td",{parentName:"tr",align:"left"},"String"),(0,r.kt)("td",{parentName:"tr",align:"left"},"Yes"),(0,r.kt)("td",{parentName:"tr",align:"left"},"Configuration name(key)")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"left"},"entryLocations"),(0,r.kt)("td",{parentName:"tr",align:"left"},"String"),(0,r.kt)("td",{parentName:"tr",align:"left"},"no"),(0,r.kt)("td",{parentName:"tr",align:"left"},"entry location rocksDB path"))))),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},"Body:"),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre",className:"language-json"},'{\n   "entryLocationRocksDBCompact": "true",\n   "entryLocations":"/data1/bookkeeper/ledgers/current/locations,/data2/bookkeeper/ledgers/current/locations"\n}\n'))),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},"Response:"),(0,r.kt)("table",{parentName:"li"},(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:"left"},"Code"),(0,r.kt)("th",{parentName:"tr",align:"left"},"Description"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"left"},"200"),(0,r.kt)("td",{parentName:"tr",align:"left"},"Successful operation")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"left"},"403"),(0,r.kt)("td",{parentName:"tr",align:"left"},"Permission denied")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"left"},"405"),(0,r.kt)("td",{parentName:"tr",align:"left"},"Method Not Allowed"))))))),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},"Method: GET"),(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},"Description:  All entry location index rocksDB compact status on bookie. true for is running.")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},"Response:"),(0,r.kt)("table",{parentName:"li"},(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:"left"},"Code"),(0,r.kt)("th",{parentName:"tr",align:"left"},"Description"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"left"},"200"),(0,r.kt)("td",{parentName:"tr",align:"left"},"Successful operation")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"left"},"403"),(0,r.kt)("td",{parentName:"tr",align:"left"},"Permission denied")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"left"},"405"),(0,r.kt)("td",{parentName:"tr",align:"left"},"Method Not Allowed"))))),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},"Body:"),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre",className:"language-json"},'{\n   "/data1/bookkeeper/ledgers/current/locations" : true,\n   "/data2/bookkeeper/ledgers/current/locations" : false\n}\n')))))),(0,r.kt)("h2",{id:"auto-recovery"},"Auto recovery"),(0,r.kt)("h3",{id:"endpoint-apiv1autorecoverybookie"},"Endpoint: /api/v1/autorecovery/bookie/"),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},"Method: PUT",(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},"Description:  Ledger data recovery for failed bookie")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},"Body: "),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre",className:"language-json"},'{\n  "bookie_src": [ "bookie_src1", "bookie_src2"... ],\n  "bookie_dest": [ "bookie_dest1", "bookie_dest2"... ],\n  "delete_cookie": <bool_value>\n}\n'))),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},"Parameters:"),(0,r.kt)("table",{parentName:"li"},(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:"left"},"Name"),(0,r.kt)("th",{parentName:"tr",align:"left"},"Type"),(0,r.kt)("th",{parentName:"tr",align:"left"},"Required"),(0,r.kt)("th",{parentName:"tr",align:"left"},"Description"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"left"},"bookie_src"),(0,r.kt)("td",{parentName:"tr",align:"left"},"Strings"),(0,r.kt)("td",{parentName:"tr",align:"left"},"Yes"),(0,r.kt)("td",{parentName:"tr",align:"left"},"bookie source to recovery")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"left"},"bookie_dest"),(0,r.kt)("td",{parentName:"tr",align:"left"},"Strings"),(0,r.kt)("td",{parentName:"tr",align:"left"},"No"),(0,r.kt)("td",{parentName:"tr",align:"left"},"bookie data recovery destination")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"left"},"delete_cookie"),(0,r.kt)("td",{parentName:"tr",align:"left"},"Boolean"),(0,r.kt)("td",{parentName:"tr",align:"left"},"No"),(0,r.kt)("td",{parentName:"tr",align:"left"},"Whether delete cookie"))))),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},"Response: "),(0,r.kt)("table",{parentName:"li"},(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:"left"},"Code"),(0,r.kt)("th",{parentName:"tr",align:"left"},"Description"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"left"},"200"),(0,r.kt)("td",{parentName:"tr",align:"left"},"Successful operation")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"left"},"403"),(0,r.kt)("td",{parentName:"tr",align:"left"},"Permission denied")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"left"},"404"),(0,r.kt)("td",{parentName:"tr",align:"left"},"Not found")))))))),(0,r.kt)("h3",{id:"endpoint-apiv1autorecoverylist_under_replicated_ledgermissingreplicabookie_addressexcludingmissingreplicabookie_address"},"Endpoint: /api/v1/autorecovery/list_under_replicated_ledger/?missingreplica=","<","bookie_address",">","&excludingmissingreplica=","<","bookie_address",">"),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},"Method: GET"),(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},"Description:  Get all under replicated ledgers.")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},"Parameters: "),(0,r.kt)("table",{parentName:"li"},(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:"left"},"Name"),(0,r.kt)("th",{parentName:"tr",align:"left"},"Type"),(0,r.kt)("th",{parentName:"tr",align:"left"},"Required"),(0,r.kt)("th",{parentName:"tr",align:"left"},"Description"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"left"},"missingreplica"),(0,r.kt)("td",{parentName:"tr",align:"left"},"String"),(0,r.kt)("td",{parentName:"tr",align:"left"},"No"),(0,r.kt)("td",{parentName:"tr",align:"left"},"missing replica bookieId")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"left"},"excludingmissingreplica"),(0,r.kt)("td",{parentName:"tr",align:"left"},"String"),(0,r.kt)("td",{parentName:"tr",align:"left"},"No"),(0,r.kt)("td",{parentName:"tr",align:"left"},"exclude missing replica bookieId"))))),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},"Response:  "),(0,r.kt)("table",{parentName:"li"},(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:"left"},"Code"),(0,r.kt)("th",{parentName:"tr",align:"left"},"Description"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"left"},"200"),(0,r.kt)("td",{parentName:"tr",align:"left"},"Successful operation")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"left"},"403"),(0,r.kt)("td",{parentName:"tr",align:"left"},"Permission denied")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"left"},"404"),(0,r.kt)("td",{parentName:"tr",align:"left"},"Not found"))))),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},"Response Body format:  "),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre",className:"language-json"},"{\n  [ledgerId1, ledgerId2...]\n}\n")))))),(0,r.kt)("h3",{id:"endpoint-apiv1autorecoverywho_is_auditor"},"Endpoint: /api/v1/autorecovery/who_is_auditor"),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},"Method: GET"),(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},"Description:  Get auditor bookie id.")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},"Response:  "),(0,r.kt)("table",{parentName:"li"},(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:"left"},"Code"),(0,r.kt)("th",{parentName:"tr",align:"left"},"Description"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"left"},"200"),(0,r.kt)("td",{parentName:"tr",align:"left"},"Successful operation")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"left"},"403"),(0,r.kt)("td",{parentName:"tr",align:"left"},"Permission denied")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"left"},"404"),(0,r.kt)("td",{parentName:"tr",align:"left"},"Not found"))))),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},"Response Body format:  "),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre",className:"language-json"},'{\n  "Auditor": "hostname/hostAddress:Port"\n}\n')))))),(0,r.kt)("h3",{id:"endpoint-apiv1autorecoverytrigger_audit"},"Endpoint: /api/v1/autorecovery/trigger_audit"),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},"Method: PUT"),(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},"Description: Force trigger audit by resting the lostBookieRecoveryDelay.")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},"Response:  "),(0,r.kt)("table",{parentName:"li"},(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:"left"},"Code"),(0,r.kt)("th",{parentName:"tr",align:"left"},"Description"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"left"},"200"),(0,r.kt)("td",{parentName:"tr",align:"left"},"Successful operation")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"left"},"403"),(0,r.kt)("td",{parentName:"tr",align:"left"},"Permission denied")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"left"},"404"),(0,r.kt)("td",{parentName:"tr",align:"left"},"Not found")))))))),(0,r.kt)("h3",{id:"endpoint-apiv1autorecoverylost_bookie_recovery_delay"},"Endpoint: /api/v1/autorecovery/lost_bookie_recovery_delay"),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},"Method: GET"),(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},"Description: Get lostBookieRecoveryDelay value in seconds.")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},"Response:  "),(0,r.kt)("table",{parentName:"li"},(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:"left"},"Code"),(0,r.kt)("th",{parentName:"tr",align:"left"},"Description"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"left"},"200"),(0,r.kt)("td",{parentName:"tr",align:"left"},"Successful operation")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"left"},"403"),(0,r.kt)("td",{parentName:"tr",align:"left"},"Permission denied")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"left"},"404"),(0,r.kt)("td",{parentName:"tr",align:"left"},"Not found"))))))),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},"Method: PUT"),(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},"Description: Set lostBookieRecoveryDelay value in seconds.")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},"Body: "),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre",className:"language-json"},'{\n  "delay_seconds": <delay_seconds>\n}\n'))),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},"Parameters:"),(0,r.kt)("table",{parentName:"li"},(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:"left"},"Name"),(0,r.kt)("th",{parentName:"tr",align:"left"},"Type"),(0,r.kt)("th",{parentName:"tr",align:"left"},"Required"),(0,r.kt)("th",{parentName:"tr",align:"left"},"Description"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"left"},"delay_seconds"),(0,r.kt)("td",{parentName:"tr",align:"left"},"Long"),(0,r.kt)("td",{parentName:"tr",align:"left"},"Yes"),(0,r.kt)("td",{parentName:"tr",align:"left"},"set delay value in seconds."))))),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},"Response:  "),(0,r.kt)("table",{parentName:"li"},(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:"left"},"Code"),(0,r.kt)("th",{parentName:"tr",align:"left"},"Description"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"left"},"200"),(0,r.kt)("td",{parentName:"tr",align:"left"},"Successful operation")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"left"},"403"),(0,r.kt)("td",{parentName:"tr",align:"left"},"Permission denied")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"left"},"404"),(0,r.kt)("td",{parentName:"tr",align:"left"},"Not found")))))))),(0,r.kt)("h3",{id:"endpoint-apiv1autorecoverydecommission"},"Endpoint: /api/v1/autorecovery/decommission"),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},"Method: PUT"),(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},"Description: Decommission Bookie, Force trigger Audit task and make sure all the ledgers stored in the decommissioning bookie are replicated.")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},"Body: "),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre",className:"language-json"},'{\n  "bookie_src": <bookie_src>\n}\n'))),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},"Parameters:"),(0,r.kt)("table",{parentName:"li"},(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:"left"},"Name"),(0,r.kt)("th",{parentName:"tr",align:"left"},"Type"),(0,r.kt)("th",{parentName:"tr",align:"left"},"Required"),(0,r.kt)("th",{parentName:"tr",align:"left"},"Description"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"left"},"bookie_src"),(0,r.kt)("td",{parentName:"tr",align:"left"},"String"),(0,r.kt)("td",{parentName:"tr",align:"left"},"Yes"),(0,r.kt)("td",{parentName:"tr",align:"left"},"Bookie src to decommission.."))))),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},"Response:  "),(0,r.kt)("table",{parentName:"li"},(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:"left"},"Code"),(0,r.kt)("th",{parentName:"tr",align:"left"},"Description"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"left"},"200"),(0,r.kt)("td",{parentName:"tr",align:"left"},"Successful operation")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"left"},"403"),(0,r.kt)("td",{parentName:"tr",align:"left"},"Permission denied")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"left"},"404"),(0,r.kt)("td",{parentName:"tr",align:"left"},"Not found")))))))))}N.isMDXComponent=!0}}]);
\ No newline at end of file
diff --git a/content/assets/js/976110e4.291b6630.js b/content/assets/js/976110e4.291b6630.js
new file mode 100644
index 0000000..3531fe9
--- /dev/null
+++ b/content/assets/js/976110e4.291b6630.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunksite_3=self.webpackChunksite_3||[]).push([[7397],{3905:function(e,t,n){n.d(t,{Zo:function(){return c},kt:function(){return h}});var o=n(67294);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function i(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,o)}return n}function a(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?i(Object(n),!0).forEach((function(t){r(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):i(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function l(e,t){if(null==e)return{};var n,o,r=function(e,t){if(null==e)return{};var n,o,r={},i=Object.keys(e);for(o=0;o<i.length;o++)n=i[o],t.indexOf(n)>=0||(r[n]=e[n]);return r}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(o=0;o<i.length;o++)n=i[o],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}var s=o.createContext({}),p=function(e){var t=o.useContext(s),n=t;return e&&(n="function"==typeof e?e(t):a(a({},t),e)),n},c=function(e){var t=p(e.components);return o.createElement(s.Provider,{value:t},e.children)},u="mdxType",d={inlineCode:"code",wrapper:function(e){var t=e.children;return o.createElement(o.Fragment,{},t)}},m=o.forwardRef((function(e,t){var n=e.components,r=e.mdxType,i=e.originalType,s=e.parentName,c=l(e,["components","mdxType","originalType","parentName"]),u=p(n),m=r,h=u["".concat(s,".").concat(m)]||u[m]||d[m]||i;return n?o.createElement(h,a(a({ref:t},c),{},{components:n})):o.createElement(h,a({ref:t},c))}));function h(e,t){var n=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var i=n.length,a=new Array(i);a[0]=m;var l={};for(var s in t)hasOwnProperty.call(t,s)&&(l[s]=t[s]);l.originalType=e,l[u]="string"==typeof e?e:r,a[1]=l;for(var p=2;p<i;p++)a[p]=n[p];return o.createElement.apply(null,a)}return o.createElement.apply(null,n)}m.displayName="MDXCreateElement"},21413:function(e,t,n){n.r(t),n.d(t,{assets:function(){return s},contentTitle:function(){return a},default:function(){return d},frontMatter:function(){return i},metadata:function(){return l},toc:function(){return p}});var o=n(83117),r=(n(67294),n(3905));const i={id:"zookeeper",title:"ZooKeeper Authentication"},a=void 0,l={unversionedId:"security/zookeeper",id:"version-4.17.0/security/zookeeper",title:"ZooKeeper Authentication",description:"New Clusters",source:"@site/versioned_docs/version-4.17.0/security/zookeeper.md",sourceDirName:"security",slug:"/security/zookeeper",permalink:"/docs/security/zookeeper",draft:!1,tags:[],version:"4.17.0",frontMatter:{id:"zookeeper",title:"ZooKeeper Authentication"},sidebar:"docsSidebar",previous:{title:"Authentication using SASL",permalink:"/docs/security/sasl"},next:{title:"The BookKeeper protocol",permalink:"/docs/development/protocol"}},s={},p=[{value:"New Clusters",id:"new-clusters",level:2},{value:"Migrating Clusters",id:"migrating-clusters",level:2},{value:"Migrating the ZooKeeper ensemble",id:"migrating-the-zookeeper-ensemble",level:2}],c={toc:p},u="wrapper";function d(e){let{components:t,...n}=e;return(0,r.kt)(u,(0,o.Z)({},c,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h2",{id:"new-clusters"},"New Clusters"),(0,r.kt)("p",null,"To enable ",(0,r.kt)("inlineCode",{parentName:"p"},"ZooKeeper")," authentication on Bookies or Clients, there are two necessary steps:"),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},"Create a ",(0,r.kt)("inlineCode",{parentName:"li"},"JAAS")," login file and set the appropriate system property to point to it as described in ",(0,r.kt)("a",{parentName:"li",href:"sasl#notes"},"GSSAPI (Kerberos)"),"."),(0,r.kt)("li",{parentName:"ol"},"Set the configuration property ",(0,r.kt)("inlineCode",{parentName:"li"},"zkEnableSecurity")," in each bookie to ",(0,r.kt)("inlineCode",{parentName:"li"},"true"),".")),(0,r.kt)("p",null,"The metadata stored in ",(0,r.kt)("inlineCode",{parentName:"p"},"ZooKeeper")," is such that only certain clients will be able to modify and read the corresponding znodes.\nThe rationale behind this decision is that the data stored in ZooKeeper is not sensitive, but inappropriate manipulation of znodes can cause cluster\ndisruption."),(0,r.kt)("h2",{id:"migrating-clusters"},"Migrating Clusters"),(0,r.kt)("p",null,"If you are running a version of BookKeeper that does not support security or simply with security disabled, and you want to make the cluster secure,\nthen you need to execute the following steps to enable ZooKeeper authentication with minimal disruption to your operations."),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},"Perform a rolling restart setting the ",(0,r.kt)("inlineCode",{parentName:"li"},"JAAS")," login file, which enables bookie or clients to authenticate. At the end of the rolling restart,\nbookies (or clients) are able to manipulate znodes with strict ACLs, but they will not create znodes with those ACLs."),(0,r.kt)("li",{parentName:"ol"},"Perform a second rolling restart of bookies, this time setting the configuration parameter ",(0,r.kt)("inlineCode",{parentName:"li"},"zkEnableSecurity")," to true, which enables the use\nof secure ACLs when creating znodes."),(0,r.kt)("li",{parentName:"ol"},"Currently we don't have provide a tool to set acls on old znodes. You are recommended to set it manually using ZooKeeper tools.")),(0,r.kt)("p",null,"It is also possible to turn off authentication in a secured cluster. To do it, follow these steps:"),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},"Perform a rolling restart of bookies setting the ",(0,r.kt)("inlineCode",{parentName:"li"},"JAAS")," login file, which enable bookies to authenticate, but setting ",(0,r.kt)("inlineCode",{parentName:"li"},"zkEnableSecurity")," to ",(0,r.kt)("inlineCode",{parentName:"li"},"false"),".\nAt the end of rolling restart, bookies stop creating znodes with secure ACLs, but are still able to authenticate and manipulate all znodes."),(0,r.kt)("li",{parentName:"ol"},"You can use ZooKeeper tools to manually reset all ACLs under the znode set in ",(0,r.kt)("inlineCode",{parentName:"li"},"zkLedgersRootPath"),", which defaults to ",(0,r.kt)("inlineCode",{parentName:"li"},"/ledgers"),"."),(0,r.kt)("li",{parentName:"ol"},"Perform a second rolling restart of bookies, this time omitting the system property that sets the ",(0,r.kt)("inlineCode",{parentName:"li"},"JAAS")," login file.")),(0,r.kt)("h2",{id:"migrating-the-zookeeper-ensemble"},"Migrating the ZooKeeper ensemble"),(0,r.kt)("p",null,"It is also necessary to enable authentication on the ",(0,r.kt)("inlineCode",{parentName:"p"},"ZooKeeper")," ensemble. To do it, we need to perform a rolling restart of the ensemble and\nset a few properties. Please refer to the ZooKeeper documentation for more details."),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("a",{parentName:"li",href:"http://zookeeper.apache.org/doc/r3.4.6/zookeeperProgrammers.html#sc_ZooKeeperAccessControl"},"Apache ZooKeeper Documentation")),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("a",{parentName:"li",href:"https://cwiki.apache.org/confluence/display/ZOOKEEPER/Zookeeper+and+SASL"},"Apache ZooKeeper Wiki"))))}d.isMDXComponent=!0}}]);
\ No newline at end of file
diff --git a/content/assets/js/a363e5d2.2b4efa60.js b/content/assets/js/a363e5d2.2b4efa60.js
new file mode 100644
index 0000000..c77f330
--- /dev/null
+++ b/content/assets/js/a363e5d2.2b4efa60.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunksite_3=self.webpackChunksite_3||[]).push([[8846],{3905:function(e,t,a){a.d(t,{Zo:function(){return s},kt:function(){return m}});var l=a(67294);function r(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function n(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(e);t&&(l=l.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,l)}return a}function o(e){for(var t=1;t<arguments.length;t++){var a=null!=arguments[t]?arguments[t]:{};t%2?n(Object(a),!0).forEach((function(t){r(e,t,a[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(a)):n(Object(a)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(a,t))}))}return e}function i(e,t){if(null==e)return{};var a,l,r=function(e,t){if(null==e)return{};var a,l,r={},n=Object.keys(e);for(l=0;l<n.length;l++)a=n[l],t.indexOf(a)>=0||(r[a]=e[a]);return r}(e,t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);for(l=0;l<n.length;l++)a=n[l],t.indexOf(a)>=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(r[a]=e[a])}return r}var k=l.createContext({}),d=function(e){var t=l.useContext(k),a=t;return e&&(a="function"==typeof e?e(t):o(o({},t),e)),a},s=function(e){var t=d(e.components);return l.createElement(k.Provider,{value:t},e.children)},p="mdxType",u={inlineCode:"code",wrapper:function(e){var t=e.children;return l.createElement(l.Fragment,{},t)}},g=l.forwardRef((function(e,t){var a=e.components,r=e.mdxType,n=e.originalType,k=e.parentName,s=i(e,["components","mdxType","originalType","parentName"]),p=d(a),g=r,m=p["".concat(k,".").concat(g)]||p[g]||u[g]||n;return a?l.createElement(m,o(o({ref:t},s),{},{components:a})):l.createElement(m,o({ref:t},s))}));function m(e,t){var a=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var n=a.length,o=new Array(n);o[0]=g;var i={};for(var k in t)hasOwnProperty.call(t,k)&&(i[k]=t[k]);i.originalType=e,i[p]="string"==typeof e?e:r,o[1]=i;for(var d=2;d<n;d++)o[d]=a[d];return l.createElement.apply(null,o)}return l.createElement.apply(null,a)}g.displayName="MDXCreateElement"},58556:function(e,t,a){a.r(t),a.d(t,{assets:function(){return k},contentTitle:function(){return o},default:function(){return u},frontMatter:function(){return n},metadata:function(){return i},toc:function(){return d}});var l=a(83117),r=(a(67294),a(3905));const n={id:"cli",title:"BookKeeper CLI tool reference"},o=void 0,i={unversionedId:"reference/cli",id:"version-4.17.0/reference/cli",title:"BookKeeper CLI tool reference",description:"bookkeeper command",source:"@site/versioned_docs/version-4.17.0/reference/cli.md",sourceDirName:"reference",slug:"/reference/cli",permalink:"/docs/reference/cli",draft:!1,tags:[],version:"4.17.0",frontMatter:{id:"cli",title:"BookKeeper CLI tool reference"},sidebar:"docsSidebar",previous:{title:"BookKeeper configuration",permalink:"/docs/reference/config"}},k={},d=[{value:"<code>bookkeeper</code> command",id:"bookkeeper-command",level:2},{value:"Environment variables",id:"environment-variables",level:4},{value:"Commands",id:"commands",level:4},{value:"bookie",id:"bookkeeper-shell-bookie",level:3},{value:"Usage",id:"usage",level:5},{value:"localbookie",id:"bookkeeper-shell-localbookie",level:3},{value:"Usage",id:"usage-1",level:5},{value:"autorecovery",id:"bookkeeper-shell-autorecovery",level:3},{value:"Usage",id:"usage-2",level:5},{value:"upgrade",id:"bookkeeper-shell-upgrade",level:3},{value:"Usage",id:"usage-3",level:5},{value:"shell",id:"bookkeeper-shell-shell",level:3},{value:"Usage",id:"usage-4",level:5},{value:"help",id:"bookkeeper-shell-help",level:3},{value:"Usage",id:"usage-5",level:5},{value:"BookKeeper shell",id:"bookkeeper-shell",level:2},{value:"queryautorecoverystatus",id:"bookkeeper-shell-queryautorecoverystatus",level:3},{value:"Usage",id:"usage-6",level:5},{value:"autorecovery",id:"bookkeeper-shell-autorecovery",level:3},{value:"Usage",id:"usage-7",level:5},{value:"bookieformat",id:"bookkeeper-shell-bookieformat",level:3},{value:"Usage",id:"usage-8",level:5},{value:"initbookie",id:"bookkeeper-shell-initbookie",level:3},{value:"Usage",id:"usage-9",level:5},{value:"bookieinfo",id:"bookkeeper-shell-bookieinfo",level:3},{value:"Usage",id:"usage-10",level:5},{value:"bookiesanity",id:"bookkeeper-shell-bookiesanity",level:3},{value:"Usage",id:"usage-11",level:5},{value:"decommissionbookie",id:"bookkeeper-shell-decommissionbookie",level:3},{value:"Usage",id:"usage-12",level:5},{value:"deleteledger",id:"bookkeeper-shell-deleteledger",level:3},{value:"Usage",id:"usage-13",level:5},{value:"endpointinfo",id:"bookkeeper-shell-endpointinfo",level:3},{value:"Usage",id:"usage-14",level:5},{value:"expandstorage",id:"bookkeeper-shell-expandstorage",level:3},{value:"Usage",id:"usage-15",level:5},{value:"help",id:"bookkeeper-shell-help",level:3},{value:"Usage",id:"usage-16",level:5},{value:"lastmark",id:"bookkeeper-shell-lastmark",level:3},{value:"Usage",id:"usage-17",level:5},{value:"ledger",id:"bookkeeper-shell-ledger",level:3},{value:"Usage",id:"usage-18",level:5},{value:"ledgermetadata",id:"bookkeeper-shell-ledgermetadata",level:3},{value:"Usage",id:"usage-19",level:5},{value:"listbookies",id:"bookkeeper-shell-listbookies",level:3},{value:"Usage",id:"usage-20",level:5},{value:"listfilesondisc",id:"bookkeeper-shell-listfilesondisc",level:3},{value:"Usage",id:"usage-21",level:5},{value:"listledgers",id:"bookkeeper-shell-listledgers",level:3},{value:"Usage",id:"usage-22",level:5},{value:"listunderreplicated",id:"bookkeeper-shell-listunderreplicated",level:3},{value:"Usage",id:"usage-23",level:5},{value:"metaformat",id:"bookkeeper-shell-metaformat",level:3},{value:"Usage",id:"usage-24",level:5},{value:"initnewcluster",id:"bookkeeper-shell-initnewcluster",level:3},{value:"Usage",id:"usage-25",level:5},{value:"nukeexistingcluster",id:"bookkeeper-shell-nukeexistingcluster",level:3},{value:"Usage",id:"usage-26",level:5},{value:"lostbookierecoverydelay",id:"bookkeeper-shell-lostbookierecoverydelay",level:3},{value:"Usage",id:"usage-27",level:5},{value:"readjournal",id:"bookkeeper-shell-readjournal",level:3},{value:"Usage",id:"usage-28",level:5},{value:"readledger",id:"bookkeeper-shell-readledger",level:3},{value:"Usage",id:"usage-29",level:5},{value:"readlog",id:"bookkeeper-shell-readlog",level:3},{value:"Usage",id:"usage-30",level:5},{value:"recover",id:"bookkeeper-shell-recover",level:3},{value:"Usage",id:"usage-31",level:5},{value:"simpletest",id:"bookkeeper-shell-simpletest",level:3},{value:"Usage",id:"usage-32",level:5},{value:"triggeraudit",id:"bookkeeper-shell-triggeraudit",level:3},{value:"Usage",id:"usage-33",level:5},{value:"updatecookie",id:"bookkeeper-shell-updatecookie",level:3},{value:"Usage",id:"usage-34",level:5},{value:"updateledgers",id:"bookkeeper-shell-updateledgers",level:3},{value:"Usage",id:"usage-35",level:5},{value:"updateBookieInLedger",id:"bookkeeper-shell-updateBookieInLedger",level:3},{value:"Usage",id:"usage-36",level:5},{value:"whoisauditor",id:"bookkeeper-shell-whoisauditor",level:3},{value:"Usage",id:"usage-37",level:5},{value:"whatisinstanceid",id:"bookkeeper-shell-whatisinstanceid",level:3},{value:"Usage",id:"usage-38",level:5},{value:"convert-to-db-storage",id:"bookkeeper-shell-convert-to-db-storage",level:3},{value:"Usage",id:"usage-39",level:5},{value:"convert-to-interleaved-storage",id:"bookkeeper-shell-convert-to-interleaved-storage",level:3},{value:"Usage",id:"usage-40",level:5},{value:"rebuild-db-ledger-locations-index",id:"bookkeeper-shell-rebuild-db-ledger-locations-index",level:3},{value:"Usage",id:"usage-41",level:5}],s={toc:d},p="wrapper";function u(e){let{components:t,...a}=e;return(0,r.kt)(p,(0,l.Z)({},s,a,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h2",{id:"bookkeeper-command"},(0,r.kt)("inlineCode",{parentName:"h2"},"bookkeeper")," command"),(0,r.kt)("p",null,"Manages bookies."),(0,r.kt)("h4",{id:"environment-variables"},"Environment variables"),(0,r.kt)("table",null,(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:null},"Environment variable"),(0,r.kt)("th",{parentName:"tr",align:null},"Description"),(0,r.kt)("th",{parentName:"tr",align:null},"Default"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"BOOKIE_LOG_CONF")),(0,r.kt)("td",{parentName:"tr",align:null},"The Log4j configuration file."),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"${bookkeeperHome}/bookkeeper-server/conf/log4j2.xml"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"BOOKIE_CONF")),(0,r.kt)("td",{parentName:"tr",align:null},"The configuration file for the bookie."),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"${bookkeeperHome}/bookkeeper-server/conf/bk_server.conf"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"BOOKIE_EXTRA_CLASSPATH")),(0,r.kt)("td",{parentName:"tr",align:null},"Extra paths to add to BookKeeper's ",(0,r.kt)("a",{parentName:"td",href:"https://en.wikipedia.org/wiki/Classpath_(Java)"},"classpath"),"."),(0,r.kt)("td",{parentName:"tr",align:null})),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"ENTRY_FORMATTER_CLASS")),(0,r.kt)("td",{parentName:"tr",align:null},"The entry formatter class used to format entries."),(0,r.kt)("td",{parentName:"tr",align:null})),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"BOOKIE_PID_DIR")),(0,r.kt)("td",{parentName:"tr",align:null},"The directory where the bookie server PID file is stored."),(0,r.kt)("td",{parentName:"tr",align:null})),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"BOOKIE_STOP_TIMEOUT")),(0,r.kt)("td",{parentName:"tr",align:null},"The wait time before forcefully killing the bookie server instance if stopping it is not successful."),(0,r.kt)("td",{parentName:"tr",align:null})))),(0,r.kt)("h4",{id:"commands"},"Commands"),(0,r.kt)("h3",{id:"bookkeeper-shell-bookie"},"bookie"),(0,r.kt)("p",null,"Starts up a bookie."),(0,r.kt)("h5",{id:"usage"},"Usage"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-shell"},"$ bin/bookkeeper bookie\n")),(0,r.kt)("h3",{id:"bookkeeper-shell-localbookie"},"localbookie"),(0,r.kt)("p",null,"Starts up an ensemble of N bookies in a single JVM process. Typically used for local experimentation and development."),(0,r.kt)("h5",{id:"usage-1"},"Usage"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-shell"},"$ bin/bookkeeper localbookie \\ \n    N\n")),(0,r.kt)("h3",{id:"bookkeeper-shell-autorecovery"},"autorecovery"),(0,r.kt)("p",null,"Runs the autorecovery service."),(0,r.kt)("h5",{id:"usage-2"},"Usage"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-shell"},"$ bin/bookkeeper autorecovery\n")),(0,r.kt)("h3",{id:"bookkeeper-shell-upgrade"},"upgrade"),(0,r.kt)("p",null,"Upgrades the bookie's filesystem."),(0,r.kt)("h5",{id:"usage-3"},"Usage"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-shell"},"$ bin/bookkeeper upgrade \\ \n    <options>\n")),(0,r.kt)("table",null,(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:null},"Flag"),(0,r.kt)("th",{parentName:"tr",align:null},"Description"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"--upgrade"),(0,r.kt)("td",{parentName:"tr",align:null},"Upgrade the filesystem.")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"--rollback"),(0,r.kt)("td",{parentName:"tr",align:null},"Rollback the filesystem to a previous version.")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"--finalize"),(0,r.kt)("td",{parentName:"tr",align:null},"Mark the upgrade as complete.")))),(0,r.kt)("h3",{id:"bookkeeper-shell-shell"},"shell"),(0,r.kt)("p",null,"Runs the bookie's shell for admin commands."),(0,r.kt)("h5",{id:"usage-4"},"Usage"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-shell"},"$ bin/bookkeeper shell\n")),(0,r.kt)("h3",{id:"bookkeeper-shell-help"},"help"),(0,r.kt)("p",null,"Displays the help message for the ",(0,r.kt)("inlineCode",{parentName:"p"},"bookkeeper")," tool."),(0,r.kt)("h5",{id:"usage-5"},"Usage"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-shell"},"$ bin/bookkeeper help\n")),(0,r.kt)("h2",{id:"bookkeeper-shell"},"BookKeeper shell"),(0,r.kt)("h3",{id:"bookkeeper-shell-queryautorecoverystatus"},"queryautorecoverystatus"),(0,r.kt)("p",null,"Query the autorecovery status"),(0,r.kt)("h5",{id:"usage-6"},"Usage"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-shell"},"$ bin/bookkeeper shell queryautorecoverystatus\n")),(0,r.kt)("table",null,(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:null},"Flag"),(0,r.kt)("th",{parentName:"tr",align:null},"Description"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"-v,--verbose"),(0,r.kt)("td",{parentName:"tr",align:null},"List recovering detailed ledger info")))),(0,r.kt)("h3",{id:"bookkeeper-shell-autorecovery"},"autorecovery"),(0,r.kt)("p",null,"Enable or disable autorecovery in the cluster."),(0,r.kt)("h5",{id:"usage-7"},"Usage"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-shell"},"$ bin/bookkeeper shell autorecovery \\ \n    <options>\n")),(0,r.kt)("table",null,(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:null},"Flag"),(0,r.kt)("th",{parentName:"tr",align:null},"Description"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"-e,--enable"),(0,r.kt)("td",{parentName:"tr",align:null},"Enable autorecovery of underreplicated ledgers")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"-d,--disable"),(0,r.kt)("td",{parentName:"tr",align:null},"Disable autorecovery of underreplicated ledgers")))),(0,r.kt)("h3",{id:"bookkeeper-shell-bookieformat"},"bookieformat"),(0,r.kt)("p",null,"Format the current server contents."),(0,r.kt)("h5",{id:"usage-8"},"Usage"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-shell"},"$ bin/bookkeeper shell bookieformat \\ \n    <options>\n")),(0,r.kt)("table",null,(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:null},"Flag"),(0,r.kt)("th",{parentName:"tr",align:null},"Description"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"-n,--nonInteractive"),(0,r.kt)("td",{parentName:"tr",align:null},"Whether to confirm if old data exists.")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"-f,--force"),(0,r.kt)("td",{parentName:"tr",align:null},"If ","[nonInteractive]"," is specified, then whether to force delete the old data without prompt..?")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"-d,--deleteCookie"),(0,r.kt)("td",{parentName:"tr",align:null},"Delete its cookie on zookeeper")))),(0,r.kt)("h3",{id:"bookkeeper-shell-initbookie"},"initbookie"),(0,r.kt)("p",null,"Initialize new bookie, by making sure that the journalDir, ledgerDirs and\nindexDirs are empty and there is no registered Bookie with this BookieId."),(0,r.kt)("p",null,"If there is data present in current bookie server, the init operation will fail. If you want to format\nthe bookie server, use ",(0,r.kt)("inlineCode",{parentName:"p"},"bookieformat"),"."),(0,r.kt)("h5",{id:"usage-9"},"Usage"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-shell"},"$ bin/bookkeeper shell initbookie\n")),(0,r.kt)("h3",{id:"bookkeeper-shell-bookieinfo"},"bookieinfo"),(0,r.kt)("p",null,"Retrieve bookie info such as free and total disk space."),(0,r.kt)("h5",{id:"usage-10"},"Usage"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-shell"},"$ bin/bookkeeper shell bookieinfo\n")),(0,r.kt)("h3",{id:"bookkeeper-shell-bookiesanity"},"bookiesanity"),(0,r.kt)("p",null,"Sanity test for local bookie. Create ledger and write/read entries on the local bookie."),(0,r.kt)("h5",{id:"usage-11"},"Usage"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-shell"},"$ bin/bookkeeper shell bookiesanity \\ \n    <options>\n")),(0,r.kt)("table",null,(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:null},"Flag"),(0,r.kt)("th",{parentName:"tr",align:null},"Description"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"-e,--entries N"),(0,r.kt)("td",{parentName:"tr",align:null},"Total entries to be added for the test (default 10)")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"-t,--timeout N"),(0,r.kt)("td",{parentName:"tr",align:null},"Timeout for write/read operations in seconds (default 1)")))),(0,r.kt)("h3",{id:"bookkeeper-shell-decommissionbookie"},"decommissionbookie"),(0,r.kt)("p",null,"Force trigger the Audittask and make sure all the ledgers stored in the decommissioning bookie are replicated."),(0,r.kt)("h5",{id:"usage-12"},"Usage"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-shell"},"$ bin/bookkeeper shell decommissionbookie\n")),(0,r.kt)("h3",{id:"bookkeeper-shell-deleteledger"},"deleteledger"),(0,r.kt)("p",null,"Delete a ledger"),(0,r.kt)("h5",{id:"usage-13"},"Usage"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-shell"},"$ bin/bookkeeper shell deleteledger \\ \n    <options>\n")),(0,r.kt)("table",null,(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:null},"Flag"),(0,r.kt)("th",{parentName:"tr",align:null},"Description"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"-l,--ledgerid LEDGER_ID"),(0,r.kt)("td",{parentName:"tr",align:null},"Ledger ID")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"-f,--force"),(0,r.kt)("td",{parentName:"tr",align:null},"Whether to force delete the Ledger without prompt..?")))),(0,r.kt)("h3",{id:"bookkeeper-shell-endpointinfo"},"endpointinfo"),(0,r.kt)("p",null,"Get endpoints of a Bookie."),(0,r.kt)("h5",{id:"usage-14"},"Usage"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-shell"},"$ bin/bookkeeper shell endpointinfo\n")),(0,r.kt)("h3",{id:"bookkeeper-shell-expandstorage"},"expandstorage"),(0,r.kt)("p",null,"Add new empty ledger/index directories. Update the directories info in the conf file before running the command."),(0,r.kt)("h5",{id:"usage-15"},"Usage"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-shell"},"$ bin/bookkeeper shell expandstorage\n")),(0,r.kt)("h3",{id:"bookkeeper-shell-help"},"help"),(0,r.kt)("p",null,"Displays the help message."),(0,r.kt)("h5",{id:"usage-16"},"Usage"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-shell"},"$ bin/bookkeeper shell help\n")),(0,r.kt)("h3",{id:"bookkeeper-shell-lastmark"},"lastmark"),(0,r.kt)("p",null,"Print last log marker."),(0,r.kt)("h5",{id:"usage-17"},"Usage"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-shell"},"$ bin/bookkeeper shell lastmark\n")),(0,r.kt)("h3",{id:"bookkeeper-shell-ledger"},"ledger"),(0,r.kt)("p",null,"Dump ledger index entries into readable format."),(0,r.kt)("h5",{id:"usage-18"},"Usage"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-shell"},"$ bin/bookkeeper shell ledger \\ \n    <options>\n")),(0,r.kt)("table",null,(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:null},"Flag"),(0,r.kt)("th",{parentName:"tr",align:null},"Description"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"-m,--meta LEDGER_ID"),(0,r.kt)("td",{parentName:"tr",align:null},"Print meta information")))),(0,r.kt)("h3",{id:"bookkeeper-shell-ledgermetadata"},"ledgermetadata"),(0,r.kt)("p",null,"Print the metadata for a ledger."),(0,r.kt)("h5",{id:"usage-19"},"Usage"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-shell"},"$ bin/bookkeeper shell ledgermetadata \\ \n    <options>\n")),(0,r.kt)("table",null,(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:null},"Flag"),(0,r.kt)("th",{parentName:"tr",align:null},"Description"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"-l,--ledgerid LEDGER_ID"),(0,r.kt)("td",{parentName:"tr",align:null},"Ledger ID")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"--dump-to-file FILENAME"),(0,r.kt)("td",{parentName:"tr",align:null},"Dump metadata for ledger, to a file")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"--restore-from-file FILENAME"),(0,r.kt)("td",{parentName:"tr",align:null},"Restore metadata for ledger, from a file")))),(0,r.kt)("h3",{id:"bookkeeper-shell-listbookies"},"listbookies"),(0,r.kt)("p",null,"List the bookies, which are running as either readwrite or readonly mode."),(0,r.kt)("h5",{id:"usage-20"},"Usage"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-shell"},"$ bin/bookkeeper shell listbookies \\ \n    <options>\n")),(0,r.kt)("table",null,(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:null},"Flag"),(0,r.kt)("th",{parentName:"tr",align:null},"Description"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"-a,--all"),(0,r.kt)("td",{parentName:"tr",align:null},"Print all bookies")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"-rw,--readwrite"),(0,r.kt)("td",{parentName:"tr",align:null},"Print readwrite bookies")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"-ro,--readonly"),(0,r.kt)("td",{parentName:"tr",align:null},"Print readonly bookies")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"-h,--hostnames"),(0,r.kt)("td",{parentName:"tr",align:null},"Also print hostname of the bookie")))),(0,r.kt)("h3",{id:"bookkeeper-shell-listfilesondisc"},"listfilesondisc"),(0,r.kt)("p",null,"List the files in JournalDirectory/LedgerDirectories/IndexDirectories."),(0,r.kt)("h5",{id:"usage-21"},"Usage"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-shell"},"$ bin/bookkeeper shell listfilesondisc \\ \n    <options>\n")),(0,r.kt)("table",null,(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:null},"Flag"),(0,r.kt)("th",{parentName:"tr",align:null},"Description"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"-txn,--journal"),(0,r.kt)("td",{parentName:"tr",align:null},"Print list of journal files")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"-log,--entrylog"),(0,r.kt)("td",{parentName:"tr",align:null},"Print list of entryLog files")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"-idx,--index"),(0,r.kt)("td",{parentName:"tr",align:null},"Print list of index files")))),(0,r.kt)("h3",{id:"bookkeeper-shell-listledgers"},"listledgers"),(0,r.kt)("p",null,"List all ledgers in the cluster (this may take a long time)."),(0,r.kt)("h5",{id:"usage-22"},"Usage"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-shell"},"$ bin/bookkeeper shell listledgers \\ \n    <options>\n")),(0,r.kt)("table",null,(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:null},"Flag"),(0,r.kt)("th",{parentName:"tr",align:null},"Description"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"-bookieid BOOKIE_ID"),(0,r.kt)("td",{parentName:"tr",align:null},"List ledgers residing in this bookie")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"-m,--meta"),(0,r.kt)("td",{parentName:"tr",align:null},"Print metadata")))),(0,r.kt)("h3",{id:"bookkeeper-shell-listunderreplicated"},"listunderreplicated"),(0,r.kt)("p",null,"List ledgers marked as underreplicated, with optional options to specify missing replica (BookieId) and to exclude missing replica."),(0,r.kt)("h5",{id:"usage-23"},"Usage"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-shell"},"$ bin/bookkeeper shell listunderreplicated \\ \n    <options>\n")),(0,r.kt)("table",null,(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:null},"Flag"),(0,r.kt)("th",{parentName:"tr",align:null},"Description"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"-missingreplica BOOKIE_ADDRESS"),(0,r.kt)("td",{parentName:"tr",align:null},"Bookie Id of missing replica")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"-excludingmissingreplica BOOKIE_ADDRESS"),(0,r.kt)("td",{parentName:"tr",align:null},"Bookie Id of missing replica to ignore")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"-printmissingreplica"),(0,r.kt)("td",{parentName:"tr",align:null},"Whether to print missingreplicas list?")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"-printreplicationworkerid"),(0,r.kt)("td",{parentName:"tr",align:null},"Whether to print replicationworkerid?")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"-c,--onlydisplayledgercount"),(0,r.kt)("td",{parentName:"tr",align:null},"Only display underreplicated ledger count")))),(0,r.kt)("h3",{id:"bookkeeper-shell-metaformat"},"metaformat"),(0,r.kt)("p",null,"Format Bookkeeper metadata in Zookeeper. This command is deprecated since 4.7.0,\nin favor of using ",(0,r.kt)("inlineCode",{parentName:"p"},"initnewcluster")," for initializing a new cluster and ",(0,r.kt)("inlineCode",{parentName:"p"},"nukeexistingcluster")," for nuking an existing cluster."),(0,r.kt)("h5",{id:"usage-24"},"Usage"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-shell"},"$ bin/bookkeeper shell metaformat \\ \n    <options>\n")),(0,r.kt)("table",null,(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:null},"Flag"),(0,r.kt)("th",{parentName:"tr",align:null},"Description"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"-n,--nonInteractive"),(0,r.kt)("td",{parentName:"tr",align:null},"Whether to confirm if old data exists..?")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"-f,--force"),(0,r.kt)("td",{parentName:"tr",align:null},"If ","[nonInteractive]"," is specified, then whether to force delete the old data without prompt.")))),(0,r.kt)("h3",{id:"bookkeeper-shell-initnewcluster"},"initnewcluster"),(0,r.kt)("p",null,"Initializes a new bookkeeper cluster. If initnewcluster fails then try nuking\nexisting cluster by running nukeexistingcluster before running initnewcluster again"),(0,r.kt)("h5",{id:"usage-25"},"Usage"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-shell"},"$ bin/bookkeeper shell initnewcluster\n")),(0,r.kt)("h3",{id:"bookkeeper-shell-nukeexistingcluster"},"nukeexistingcluster"),(0,r.kt)("p",null,"Nuke bookkeeper cluster by deleting metadata"),(0,r.kt)("h5",{id:"usage-26"},"Usage"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-shell"},"$ bin/bookkeeper shell nukeexistingcluster \\ \n    <options>\n")),(0,r.kt)("table",null,(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:null},"Flag"),(0,r.kt)("th",{parentName:"tr",align:null},"Description"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"-p,--zkledgersrootpath ZK_LEDGER_ROOT_PATH"),(0,r.kt)("td",{parentName:"tr",align:null},"zookeeper ledgers rootpath")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"-i,--instanceid INSTANCE_ID"),(0,r.kt)("td",{parentName:"tr",align:null},"instance id")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"-f,--force"),(0,r.kt)("td",{parentName:"tr",align:null},"If instanceid is not specified, then whether to force nuke the metadata without validating instanceid")))),(0,r.kt)("h3",{id:"bookkeeper-shell-lostbookierecoverydelay"},"lostbookierecoverydelay"),(0,r.kt)("p",null,"Setter and Getter for LostBookieRecoveryDelay value (in seconds) in Zookeeper."),(0,r.kt)("h5",{id:"usage-27"},"Usage"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-shell"},"$ bin/bookkeeper shell lostbookierecoverydelay \\ \n    <options>\n")),(0,r.kt)("table",null,(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:null},"Flag"),(0,r.kt)("th",{parentName:"tr",align:null},"Description"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"-g,--get"),(0,r.kt)("td",{parentName:"tr",align:null},"Get LostBookieRecoveryDelay value (in seconds)")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"-s,--set VALUE"),(0,r.kt)("td",{parentName:"tr",align:null},"Set LostBookieRecoveryDelay value (in seconds)")))),(0,r.kt)("h3",{id:"bookkeeper-shell-readjournal"},"readjournal"),(0,r.kt)("p",null,"Scan a journal file and format the entries into readable format."),(0,r.kt)("h5",{id:"usage-28"},"Usage"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-shell"},"$ bin/bookkeeper shell readjournal \\ \n    <options>\n")),(0,r.kt)("table",null,(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:null},"Flag"),(0,r.kt)("th",{parentName:"tr",align:null},"Description"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"-m,--msg"),(0,r.kt)("td",{parentName:"tr",align:null},"Print message body")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"-dir JOURNAL_ID or JOURNAL_FILE_NAME"),(0,r.kt)("td",{parentName:"tr",align:null},"Journal directory (needed if more than one journal configured)")))),(0,r.kt)("h3",{id:"bookkeeper-shell-readledger"},"readledger"),(0,r.kt)("p",null,"Read a range of entries from a ledger."),(0,r.kt)("h5",{id:"usage-29"},"Usage"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-shell"},"$ bin/bookkeeper shell readledger \\ \n    <ledger_id> [<start_entry_id> [<end_entry_id>]]\n")),(0,r.kt)("table",null,(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:null},"Flag"),(0,r.kt)("th",{parentName:"tr",align:null},"Description"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"-m,--msg"),(0,r.kt)("td",{parentName:"tr",align:null},"Print message body")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"-l,--ledgerid LEDGER_ID"),(0,r.kt)("td",{parentName:"tr",align:null},"Ledger ID")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"-fe,--firstentryid ENTRY_ID"),(0,r.kt)("td",{parentName:"tr",align:null},"First EntryID")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"-le,--lastentryid ENTRY_ID"),(0,r.kt)("td",{parentName:"tr",align:null},"Last EntryID")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"-b,--bookie BOOKIE_ID"),(0,r.kt)("td",{parentName:"tr",align:null},"Only read from a specific bookie")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"-r,--force-recovery"),(0,r.kt)("td",{parentName:"tr",align:null},"Ensure the ledger is properly closed before reading")))),(0,r.kt)("h3",{id:"bookkeeper-shell-readlog"},"readlog"),(0,r.kt)("p",null,"Scan an entry file and format the entries into readable format."),(0,r.kt)("h5",{id:"usage-30"},"Usage"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-shell"},"$ bin/bookkeeper shell readlog \\ \n    <entry_log_id | entry_log_file_name> \\ \n    <options>\n")),(0,r.kt)("table",null,(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:null},"Flag"),(0,r.kt)("th",{parentName:"tr",align:null},"Description"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"-m,--msg"),(0,r.kt)("td",{parentName:"tr",align:null},"Print message body")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"-l,--ledgerid LEDGER_ID"),(0,r.kt)("td",{parentName:"tr",align:null},"Ledger ID")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"-e,--entryid ENTRY_ID"),(0,r.kt)("td",{parentName:"tr",align:null},"Entry ID")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"-sp,--startpos START_ENTRY_LOG_BYTE_POS"),(0,r.kt)("td",{parentName:"tr",align:null},"Start Position")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"-ep,--endpos END_ENTRY_LOG_BYTE_POS"),(0,r.kt)("td",{parentName:"tr",align:null},"End Position")))),(0,r.kt)("h3",{id:"bookkeeper-shell-recover"},"recover"),(0,r.kt)("p",null,"Recover the ledger data for failed bookie."),(0,r.kt)("h5",{id:"usage-31"},"Usage"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-shell"},"$ bin/bookkeeper shell recover \\ \n    <bookieSrc[,bookieSrc,...]> \\ \n    <options>\n")),(0,r.kt)("table",null,(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:null},"Flag"),(0,r.kt)("th",{parentName:"tr",align:null},"Description"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"-d,--deleteCookie"),(0,r.kt)("td",{parentName:"tr",align:null},"Delete cookie node for the bookie.")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"-dr,--dryrun"),(0,r.kt)("td",{parentName:"tr",align:null},"Printing the recovery plan w/o doing actual recovery")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"-f,--force"),(0,r.kt)("td",{parentName:"tr",align:null},"Force recovery without confirmation")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"-l,--ledger LEDGER_ID"),(0,r.kt)("td",{parentName:"tr",align:null},"Recover a specific ledger")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"-q,--query"),(0,r.kt)("td",{parentName:"tr",align:null},"Query the ledgers that contain given bookies")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"-sk,--skipOpenLedgers"),(0,r.kt)("td",{parentName:"tr",align:null},"Skip recovering open ledgers")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"-sku,--skipUnrecoverableLedgers"),(0,r.kt)("td",{parentName:"tr",align:null},"Skip unrecoverable ledgers")))),(0,r.kt)("h3",{id:"bookkeeper-shell-simpletest"},"simpletest"),(0,r.kt)("p",null,"Simple test to create a ledger and write entries to it."),(0,r.kt)("h5",{id:"usage-32"},"Usage"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-shell"},"$ bin/bookkeeper shell simpletest \\ \n    <options>\n")),(0,r.kt)("table",null,(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:null},"Flag"),(0,r.kt)("th",{parentName:"tr",align:null},"Description"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"-e,--ensemble N"),(0,r.kt)("td",{parentName:"tr",align:null},"Ensemble size (default 3)")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"-w,--writeQuorum N"),(0,r.kt)("td",{parentName:"tr",align:null},"Write quorum size (default 2)")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"-a,--ackQuorum N"),(0,r.kt)("td",{parentName:"tr",align:null},"Ack quorum size (default 2)")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"-n,--numEntries N"),(0,r.kt)("td",{parentName:"tr",align:null},"Entries to write (default 1000)")))),(0,r.kt)("h3",{id:"bookkeeper-shell-triggeraudit"},"triggeraudit"),(0,r.kt)("p",null,"Force trigger the Audit by resetting the lostBookieRecoveryDelay."),(0,r.kt)("h5",{id:"usage-33"},"Usage"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-shell"},"$ bin/bookkeeper shell triggeraudit\n")),(0,r.kt)("h3",{id:"bookkeeper-shell-updatecookie"},"updatecookie"),(0,r.kt)("p",null,"Update bookie id in cookie."),(0,r.kt)("h5",{id:"usage-34"},"Usage"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-shell"},"$ bin/bookkeeper shell updatecookie \\ \n    <options>\n")),(0,r.kt)("table",null,(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:null},"Flag"),(0,r.kt)("th",{parentName:"tr",align:null},"Description"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"-b,--bookieId HOSTNAME or IP"),(0,r.kt)("td",{parentName:"tr",align:null},"Bookie Id")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"-d,--delete FORCE"),(0,r.kt)("td",{parentName:"tr",align:null},"Delete cookie both locally and in ZooKeeper")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"-e,--expandstorage"),(0,r.kt)("td",{parentName:"tr",align:null},"Expand Storage")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"-l,--list"),(0,r.kt)("td",{parentName:"tr",align:null},"List paths of all the cookies present locally and on zookkeeper")))),(0,r.kt)("h3",{id:"bookkeeper-shell-updateledgers"},"updateledgers"),(0,r.kt)("p",null,"Update bookie id in ledgers (this may take a long time)."),(0,r.kt)("h5",{id:"usage-35"},"Usage"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-shell"},"$ bin/bookkeeper shell updateledgers \\ \n    <options>\n")),(0,r.kt)("table",null,(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:null},"Flag"),(0,r.kt)("th",{parentName:"tr",align:null},"Description"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"-b,--bookieId HOSTNAME or IP"),(0,r.kt)("td",{parentName:"tr",align:null},"Bookie Id")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"-s,--updatespersec"),(0,r.kt)("td",{parentName:"tr",align:null},"Number of ledgers updating per second (default 5 per sec)")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"-l,--limit N"),(0,r.kt)("td",{parentName:"tr",align:null},"Maximum number of ledgers to update (default no limit)")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"-v,--verbose"),(0,r.kt)("td",{parentName:"tr",align:null},"Print status of the ledger updation (default false)")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"-p,--printprogress N"),(0,r.kt)("td",{parentName:"tr",align:null},"Print messages on every configured seconds if verbose turned on (default 10 secs)")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"-r,--maxOutstandingReads N"),(0,r.kt)("td",{parentName:"tr",align:null},"Max outstanding reads (default: 5 * updatespersec)")))),(0,r.kt)("h3",{id:"bookkeeper-shell-updateBookieInLedger"},"updateBookieInLedger"),(0,r.kt)("p",null,"Replace srcBookie with destBookie in ledger metadata. (this may take a long time).\nUseful when Host-reip or data-migration. In that case, shutdown bookie process in src-bookie,\nuse this command to update ledger metadata by replacing src-bookie to dest-bookie where data has been copied/moved.\nStart the bookie process on dest-bookie and dest-bookie will serve copied ledger data from src-bookie."),(0,r.kt)("h5",{id:"usage-36"},"Usage"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-shell"},"$ bin/bookkeeper shell updateBookieInLedger \\ \n    <options>\n")),(0,r.kt)("table",null,(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:null},"Flag"),(0,r.kt)("th",{parentName:"tr",align:null},"Description"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"-sb,--srcBookie BOOKIE_ID"),(0,r.kt)("td",{parentName:"tr",align:null},"Source Bookie Id")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"-db,--destBookie BOOKIE_ID"),(0,r.kt)("td",{parentName:"tr",align:null},"Destination Bookie Id")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"-s,--updatespersec N"),(0,r.kt)("td",{parentName:"tr",align:null},"Number of ledgers updating per second (default 5 per sec)")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"-l,--limit N"),(0,r.kt)("td",{parentName:"tr",align:null},"Maximum number of ledgers to update (default no limit)")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"-v,--verbose"),(0,r.kt)("td",{parentName:"tr",align:null},"Print status of the ledger updation (default false)")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"-p,--printprogress N"),(0,r.kt)("td",{parentName:"tr",align:null},"Print messages on every configured seconds if verbose turned on (default 10 secs)")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"-r,--maxOutstandingReads N"),(0,r.kt)("td",{parentName:"tr",align:null},"Max outstanding reads (default: 5 * updatespersec)")))),(0,r.kt)("h3",{id:"bookkeeper-shell-whoisauditor"},"whoisauditor"),(0,r.kt)("p",null,"Print the node which holds the auditor lock"),(0,r.kt)("h5",{id:"usage-37"},"Usage"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-shell"},"$ bin/bookkeeper shell whoisauditor\n")),(0,r.kt)("h3",{id:"bookkeeper-shell-whatisinstanceid"},"whatisinstanceid"),(0,r.kt)("p",null,"Print the instanceid of the cluster"),(0,r.kt)("h5",{id:"usage-38"},"Usage"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-shell"},"$ bin/bookkeeper shell whatisinstanceid\n")),(0,r.kt)("h3",{id:"bookkeeper-shell-convert-to-db-storage"},"convert-to-db-storage"),(0,r.kt)("p",null,"Convert bookie indexes from InterleavedStorage to DbLedgerStorage format"),(0,r.kt)("h5",{id:"usage-39"},"Usage"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-shell"},"$ bin/bookkeeper shell convert-to-db-storage\n")),(0,r.kt)("h3",{id:"bookkeeper-shell-convert-to-interleaved-storage"},"convert-to-interleaved-storage"),(0,r.kt)("p",null,"Convert bookie indexes from DbLedgerStorage to InterleavedStorage format"),(0,r.kt)("h5",{id:"usage-40"},"Usage"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-shell"},"$ bin/bookkeeper shell convert-to-interleaved-storage\n")),(0,r.kt)("h3",{id:"bookkeeper-shell-rebuild-db-ledger-locations-index"},"rebuild-db-ledger-locations-index"),(0,r.kt)("p",null,"Rebuild DbLedgerStorage locations index"),(0,r.kt)("h5",{id:"usage-41"},"Usage"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-shell"},"$ bin/bookkeeper shell rebuild-db-ledger-locations-index\n")))}u.isMDXComponent=!0}}]);
\ No newline at end of file
diff --git a/content/assets/js/b5173ce4.8c41b00f.js b/content/assets/js/b5173ce4.8c41b00f.js
new file mode 100644
index 0000000..ffba436
--- /dev/null
+++ b/content/assets/js/b5173ce4.8c41b00f.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunksite_3=self.webpackChunksite_3||[]).push([[1059],{3905:function(e,t,n){n.d(t,{Zo:function(){return u},kt:function(){return h}});var o=n(67294);function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function r(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,o)}return n}function l(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?r(Object(n),!0).forEach((function(t){a(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):r(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function s(e,t){if(null==e)return{};var n,o,a=function(e,t){if(null==e)return{};var n,o,a={},r=Object.keys(e);for(o=0;o<r.length;o++)n=r[o],t.indexOf(n)>=0||(a[n]=e[n]);return a}(e,t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(o=0;o<r.length;o++)n=r[o],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}var i=o.createContext({}),p=function(e){var t=o.useContext(i),n=t;return e&&(n="function"==typeof e?e(t):l(l({},t),e)),n},u=function(e){var t=p(e.components);return o.createElement(i.Provider,{value:t},e.children)},c="mdxType",d={inlineCode:"code",wrapper:function(e){var t=e.children;return o.createElement(o.Fragment,{},t)}},k=o.forwardRef((function(e,t){var n=e.components,a=e.mdxType,r=e.originalType,i=e.parentName,u=s(e,["components","mdxType","originalType","parentName"]),c=p(n),k=a,h=c["".concat(i,".").concat(k)]||c[k]||d[k]||r;return n?o.createElement(h,l(l({ref:t},u),{},{components:n})):o.createElement(h,l({ref:t},u))}));function h(e,t){var n=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var r=n.length,l=new Array(r);l[0]=k;var s={};for(var i in t)hasOwnProperty.call(t,i)&&(s[i]=t[i]);s.originalType=e,s[c]="string"==typeof e?e:a,l[1]=s;for(var p=2;p<r;p++)l[p]=n[p];return o.createElement.apply(null,l)}return o.createElement.apply(null,n)}k.displayName="MDXCreateElement"},12858:function(e,t,n){n.r(t),n.d(t,{assets:function(){return i},contentTitle:function(){return l},default:function(){return d},frontMatter:function(){return r},metadata:function(){return s},toc:function(){return p}});var o=n(83117),a=(n(67294),n(3905));const r={id:"kubernetes",title:"Deploying Apache BookKeeper on Kubernetes"},l=void 0,s={unversionedId:"deployment/kubernetes",id:"version-4.17.0/deployment/kubernetes",title:"Deploying Apache BookKeeper on Kubernetes",description:"Apache BookKeeper can be easily deployed in Kubernetes clusters. The managed clusters on Google Container Engine is the most convenient way.",source:"@site/versioned_docs/version-4.17.0/deployment/kubernetes.md",sourceDirName:"deployment",slug:"/deployment/kubernetes",permalink:"/docs/deployment/kubernetes",draft:!1,tags:[],version:"4.17.0",frontMatter:{id:"kubernetes",title:"Deploying Apache BookKeeper on Kubernetes"},sidebar:"docsSidebar",previous:{title:"Manual deployment",permalink:"/docs/deployment/manual"},next:{title:"BookKeeper administration",permalink:"/docs/admin/bookies"}},i={},p=[{value:"Setup on Google Container Engine",id:"setup-on-google-container-engine",level:2},{value:"Prerequisites",id:"prerequisites",level:3},{value:"Create a new Kubernetes cluster",id:"create-a-new-kubernetes-cluster",level:3},{value:"Dashboard",id:"dashboard",level:3},{value:"ZooKeeper",id:"zookeeper",level:3},{value:"Deploy Bookies",id:"deploy-bookies",level:3},{value:"Un-Deploy",id:"un-deploy",level:3}],u={toc:p},c="wrapper";function d(e){let{components:t,...n}=e;return(0,a.kt)(c,(0,o.Z)({},u,n,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("p",null,"Apache BookKeeper can be easily deployed in ",(0,a.kt)("a",{parentName:"p",href:"https://kubernetes.io/"},"Kubernetes")," clusters. The managed clusters on ",(0,a.kt)("a",{parentName:"p",href:"https://cloud.google.com/compute/"},"Google Container Engine")," is the most convenient way."),(0,a.kt)("p",null,"The deployment method shown in this guide relies on ",(0,a.kt)("a",{parentName:"p",href:"http://yaml.org/"},"YAML")," definitions for Kubernetes ",(0,a.kt)("a",{parentName:"p",href:"https://kubernetes.io/docs/resources-reference/v1.6/"},"resources"),". The ",(0,a.kt)("a",{parentName:"p",href:"https://github.com/apache/bookkeeper/tree/master/deploy/kubernetes"},(0,a.kt)("inlineCode",{parentName:"a"},"kubernetes"))," subdirectory holds resource definitions for:"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"A three-node ZooKeeper cluster"),(0,a.kt)("li",{parentName:"ul"},"A BookKeeper cluster with a bookie runs on each node.")),(0,a.kt)("h2",{id:"setup-on-google-container-engine"},"Setup on Google Container Engine"),(0,a.kt)("p",null,"To get started, get source code of ",(0,a.kt)("a",{parentName:"p",href:"https://github.com/apache/bookkeeper/tree/master/deploy/kubernetes"},(0,a.kt)("inlineCode",{parentName:"a"},"kubernetes"))," from github by git clone."),(0,a.kt)("p",null,"If you'd like to change the number of bookies,  or ZooKeeper nodes in your BookKeeper cluster, modify the ",(0,a.kt)("inlineCode",{parentName:"p"},"replicas")," parameter in the ",(0,a.kt)("inlineCode",{parentName:"p"},"spec")," section of the appropriate ",(0,a.kt)("a",{parentName:"p",href:"https://kubernetes.io/docs/concepts/workloads/controllers/deployment/"},(0,a.kt)("inlineCode",{parentName:"a"},"Deployment"))," or ",(0,a.kt)("a",{parentName:"p",href:"https://kubernetes.io/docs/concepts/workloads/controllers/statefulset/"},(0,a.kt)("inlineCode",{parentName:"a"},"StatefulSet"))," resource."),(0,a.kt)("p",null,(0,a.kt)("a",{parentName:"p",href:"https://cloud.google.com/container-engine"},"Google Container Engine")," (GKE) automates the creation and management of Kubernetes clusters in ",(0,a.kt)("a",{parentName:"p",href:"https://cloud.google.com/compute/"},"Google Compute Engine")," (GCE)."),(0,a.kt)("h3",{id:"prerequisites"},"Prerequisites"),(0,a.kt)("p",null,"To get started, you'll need:"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"A Google Cloud Platform account, which you can sign up for at ",(0,a.kt)("a",{parentName:"li",href:"https://cloud.google.com"},"cloud.google.com")),(0,a.kt)("li",{parentName:"ul"},"An existing Cloud Platform project"),(0,a.kt)("li",{parentName:"ul"},"The ",(0,a.kt)("a",{parentName:"li",href:"https://cloud.google.com/sdk/downloads"},"Google Cloud SDK")," (in particular the ",(0,a.kt)("a",{parentName:"li",href:"https://cloud.google.com/sdk/gcloud/"},(0,a.kt)("inlineCode",{parentName:"a"},"gcloud"))," and ",(0,a.kt)("a",{parentName:"li",href:"https://kubernetes.io/docs/tasks/tools/"},(0,a.kt)("inlineCode",{parentName:"a"},"kubectl"))," tools).")),(0,a.kt)("h3",{id:"create-a-new-kubernetes-cluster"},"Create a new Kubernetes cluster"),(0,a.kt)("p",null,"You can create a new GKE cluster using the ",(0,a.kt)("a",{parentName:"p",href:"https://cloud.google.com/sdk/gcloud/reference/container/clusters/create"},(0,a.kt)("inlineCode",{parentName:"a"},"container clusters create"))," command for ",(0,a.kt)("inlineCode",{parentName:"p"},"gcloud"),". This command enables you to specify the number of nodes in the cluster, the machine types of those nodes, and more."),(0,a.kt)("p",null,"As an example, we'll create a new GKE cluster for Kubernetes version ",(0,a.kt)("a",{parentName:"p",href:"https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG.md#v164"},"1.6.4")," in the ",(0,a.kt)("a",{parentName:"p",href:"https://cloud.google.com/compute/docs/regions-zones/regions-zones#available"},"us-central1-a")," zone. The cluster will be named ",(0,a.kt)("inlineCode",{parentName:"p"},"bookkeeper-gke-cluster")," and will consist of three VMs, each using two locally attached SSDs and running on ",(0,a.kt)("a",{parentName:"p",href:"https://cloud.google.com/compute/docs/machine-types"},"n1-standard-8")," machines. These SSDs will be used by Bookie instances, one for the BookKeeper journal and the other for storing the actual data."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"$ gcloud config set compute/zone us-central1-a\n$ gcloud config set project your-project-name\n$ gcloud container clusters create bookkeeper-gke-cluster \\\n  --machine-type=n1-standard-8 \\\n  --num-nodes=3 \\\n  --local-ssd-count=2 \\\n  --enable-kubernetes-alpha\n")),(0,a.kt)("p",null,"By default, bookies will run on all the machines that have locally attached SSD disks. In this example, all of those machines will have two SSDs, but you can add different types of machines to the cluster later. You can control which machines host bookie servers using ",(0,a.kt)("a",{parentName:"p",href:"https://kubernetes.io/docs/concepts/overview/working-with-objects/labels"},"labels"),"."),(0,a.kt)("h3",{id:"dashboard"},"Dashboard"),(0,a.kt)("p",null,"You can observe your cluster in the ",(0,a.kt)("a",{parentName:"p",href:"https://kubernetes.io/docs/tasks/access-application-cluster/web-ui-dashboard/"},"Kubernetes Dashboard")," by downloading the credentials for your Kubernetes cluster and opening up a proxy to the cluster:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"$ gcloud container clusters get-credentials bookkeeper-gke-cluster \\\n  --zone=us-central1-a \\\n  --project=your-project-name\n$ kubectl proxy\n")),(0,a.kt)("p",null,"By default, the proxy will be opened on port 8001. Now you can navigate to ",(0,a.kt)("a",{parentName:"p",href:"http://localhost:8001/ui"},"localhost:8001/ui")," in your browser to access the dashboard. At first your GKE cluster will be empty, but that will change as you begin deploying."),(0,a.kt)("p",null,"When you create a cluster, your ",(0,a.kt)("inlineCode",{parentName:"p"},"kubectl")," config in ",(0,a.kt)("inlineCode",{parentName:"p"},"~/.kube/config")," (on MacOS and Linux) will be updated for you, so you probably won't need to change your configuration. Nonetheless, you can ensure that ",(0,a.kt)("inlineCode",{parentName:"p"},"kubectl")," can interact with your cluster by listing the nodes in the cluster:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"$ kubectl get nodes\n")),(0,a.kt)("p",null,"If ",(0,a.kt)("inlineCode",{parentName:"p"},"kubectl")," is working with your cluster, you can proceed to deploy ZooKeeper and Bookies."),(0,a.kt)("h3",{id:"zookeeper"},"ZooKeeper"),(0,a.kt)("p",null,"You ",(0,a.kt)("em",{parentName:"p"},"must")," deploy ZooKeeper as the first component, as it is a dependency for the others."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"$ kubectl apply -f zookeeper.yaml\n")),(0,a.kt)("p",null,"Wait until all three ZooKeeper server pods are up and have the status ",(0,a.kt)("inlineCode",{parentName:"p"},"Running"),". You can check on the status of the ZooKeeper pods at any time:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"$ kubectl get pods -l component=zookeeper\nNAME      READY     STATUS             RESTARTS   AGE\nzk-0      1/1       Running            0          18m\nzk-1      1/1       Running            0          17m\nzk-2      0/1       Running            6          15m\n")),(0,a.kt)("p",null,"This step may take several minutes, as Kubernetes needs to download the Docker image on the VMs."),(0,a.kt)("p",null,"If you want to connect to one of the remote zookeeper server, you can use",(0,a.kt)("a",{parentName:"p",href:"https://github.com/rgs1/zk_shell"},"zk-shell"),", you need to forward a local port to the\nremote zookeeper server:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"$ kubectl port-forward zk-0 2181:2181\n$ zk-shell localhost 2181\n")),(0,a.kt)("h3",{id:"deploy-bookies"},"Deploy Bookies"),(0,a.kt)("p",null,"Once ZooKeeper cluster is Running, you can then deploy the bookies. You can deploy the bookies either using a ",(0,a.kt)("a",{parentName:"p",href:"https://kubernetes.io/docs/concepts/workloads/controllers/daemonset/"},"DaemonSet")," or a ",(0,a.kt)("a",{parentName:"p",href:"https://kubernetes.io/docs/concepts/workloads/controllers/statefulset/"},"StatefulSet"),"."),(0,a.kt)("blockquote",null,(0,a.kt)("p",{parentName:"blockquote"},"NOTE: ",(0,a.kt)("em",{parentName:"p"},"DaemonSet")," vs ",(0,a.kt)("em",{parentName:"p"},"StatefulSet")),(0,a.kt)("p",{parentName:"blockquote"},"A ",(0,a.kt)("em",{parentName:"p"},"DaemonSet")," ensures that all (or some) nodes run a pod of bookie instance. As nodes are added to the cluster, bookie pods are added automatically to them. As nodes are removed from the\ncluster, those bookie pods are garbage collected. The bookies deployed in a DaemonSet stores data on the local disks on those nodes. So it doesn't require any external storage for Persistent\nVolumes."),(0,a.kt)("p",{parentName:"blockquote"},"A ",(0,a.kt)("em",{parentName:"p"},"StatefulSet")," maintains a sticky identity for the pods that it runs and manages. It provides stable and unique network identifiers, and stable and persistent storage for each pod. The pods\nare not interchangeable, the idenifiers for each pod are maintained across any rescheduling."),(0,a.kt)("p",{parentName:"blockquote"},"Which one to use? A ",(0,a.kt)("em",{parentName:"p"},"DaemonSet")," is the easiest way to deploy a bookkeeper cluster, because it doesn't require additional persistent volume provisioner and use local disks. BookKeeper manages\nthe data replication. It maintains the best latency property. However, it uses ",(0,a.kt)("inlineCode",{parentName:"p"},"hostIP")," and ",(0,a.kt)("inlineCode",{parentName:"p"},"hostPort")," for communications between pods. In some k8s platform (such as DC/OS), ",(0,a.kt)("inlineCode",{parentName:"p"},"hostIP")," and\n",(0,a.kt)("inlineCode",{parentName:"p"},"hostPort")," are not well supported. A ",(0,a.kt)("em",{parentName:"p"},"StatefulSet")," is only practical when deploying in a cloud environment or any K8S installation that has persistent volumes available. Also be aware, latency\ncan be potentially higher when using persistent volumes, because there is usually built-in replication in the persistent volumes.")),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"# deploy bookies in a daemon set\n$ kubectl apply -f bookkeeper.yaml\n\n# deploy bookies in a stateful set\n$ kubectl apply -f bookkeeper.stateful.yaml\n")),(0,a.kt)("p",null,"You can check on the status of the Bookie pods for these components either in the Kubernetes Dashboard or using ",(0,a.kt)("inlineCode",{parentName:"p"},"kubectl"),":"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"$ kubectl get pods\n")),(0,a.kt)("p",null,"While all BookKeeper pods is Running, by zk-shell you could find all available bookies under /ledgers/"),(0,a.kt)("p",null,"You could also run a ",(0,a.kt)("a",{parentName:"p",href:"https://github.com/ivankelly/bookkeeper-tutorial/"},"bookkeeper tutorial")," instance, which named as 'dice' here, in this bookkeeper cluster."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},'$\ufeffkubectl run -i --tty --attach dice --image=caiok/bookkeeper-tutorial --env ZOOKEEPER_SERVERS="zk-0.zookeeper"\n')),(0,a.kt)("p",null,"An example output of Dice instance is like this:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-aidl"},'\u279c $ kubectl run -i --tty --attach dice --image=caiok/bookkeeper-tutorial --env ZOOKEEPER_SERVERS="zk-0.zookeeper"          \nIf you don\'t see a command prompt, try pressing enter.\nValue = 1, epoch = 5, leading\nValue = 2, epoch = 5, leading\nValue = 1, epoch = 5, leading\nValue = 4, epoch = 5, leading\nValue = 5, epoch = 5, leading\nValue = 4, epoch = 5, leading\nValue = 3, epoch = 5, leading\nValue = 5, epoch = 5, leading\nValue = 3, epoch = 5, leading\nValue = 2, epoch = 5, leading\nValue = 1, epoch = 5, leading\nValue = 4, epoch = 5, leading\nValue = 2, epoch = 5, leading\n')),(0,a.kt)("h3",{id:"un-deploy"},"Un-Deploy"),(0,a.kt)("p",null,"Delete Demo dice instance"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"$\ufeffkubectl delete deployment dice      \n")),(0,a.kt)("p",null,"Delete BookKeeper"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"$ kubectl delete -f bookkeeper.yaml    \n")),(0,a.kt)("p",null,"Delete ZooKeeper"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"$ kubectl delete -f zookeeper.yaml    \n")),(0,a.kt)("p",null,"Delete cluster"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"$ gcloud container clusters delete bookkeeper-gke-cluster    \n")))}d.isMDXComponent=!0}}]);
\ No newline at end of file
diff --git a/content/assets/js/c25ed854.411dd627.js b/content/assets/js/c25ed854.411dd627.js
new file mode 100644
index 0000000..496231c
--- /dev/null
+++ b/content/assets/js/c25ed854.411dd627.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunksite_3=self.webpackChunksite_3||[]).push([[6324],{3905:function(e,t,n){n.d(t,{Zo:function(){return d},kt:function(){return k}});var a=n(67294);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function l(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?o(Object(n),!0).forEach((function(t){r(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):o(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function i(e,t){if(null==e)return{};var n,a,r=function(e,t){if(null==e)return{};var n,a,r={},o=Object.keys(e);for(a=0;a<o.length;a++)n=o[a],t.indexOf(n)>=0||(r[n]=e[n]);return r}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(a=0;a<o.length;a++)n=o[a],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}var s=a.createContext({}),p=function(e){var t=a.useContext(s),n=t;return e&&(n="function"==typeof e?e(t):l(l({},t),e)),n},d=function(e){var t=p(e.components);return a.createElement(s.Provider,{value:t},e.children)},c="mdxType",u={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},h=a.forwardRef((function(e,t){var n=e.components,r=e.mdxType,o=e.originalType,s=e.parentName,d=i(e,["components","mdxType","originalType","parentName"]),c=p(n),h=r,k=c["".concat(s,".").concat(h)]||c[h]||u[h]||o;return n?a.createElement(k,l(l({ref:t},d),{},{components:n})):a.createElement(k,l({ref:t},d))}));function k(e,t){var n=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var o=n.length,l=new Array(o);l[0]=h;var i={};for(var s in t)hasOwnProperty.call(t,s)&&(i[s]=t[s]);i.originalType=e,i[c]="string"==typeof e?e:r,l[1]=i;for(var p=2;p<o;p++)l[p]=n[p];return a.createElement.apply(null,l)}return a.createElement.apply(null,n)}h.displayName="MDXCreateElement"},57200:function(e,t,n){n.r(t),n.d(t,{assets:function(){return s},contentTitle:function(){return l},default:function(){return u},frontMatter:function(){return o},metadata:function(){return i},toc:function(){return p}});var a=n(83117),r=(n(67294),n(3905));const o={id:"ledger-api",title:"The Ledger API"},l=void 0,i={unversionedId:"api/ledger-api",id:"version-4.17.0/api/ledger-api",title:"The Ledger API",description:"The ledger API is a lower-level API for BookKeeper that enables you to interact with ledgers directly.",source:"@site/versioned_docs/version-4.17.0/api/ledger-api.md",sourceDirName:"api",slug:"/api/ledger-api",permalink:"/docs/api/ledger-api",draft:!1,tags:[],version:"4.17.0",frontMatter:{id:"ledger-api",title:"The Ledger API"},sidebar:"docsSidebar",previous:{title:"BookKeeper API",permalink:"/docs/api/overview"},next:{title:"The Advanced Ledger API",permalink:"/docs/api/ledger-adv-api"}},s={},p=[{value:"The Java ledger API client",id:"the-java-ledger-api-client",level:2},{value:"Installation",id:"installation",level:2},{value:"Maven",id:"maven",level:3},{value:"Gradle",id:"gradle",level:3},{value:"Connection string",id:"connection-string",level:2},{value:"Creating a new client",id:"creating-a-new-client",level:2},{value:"Creating ledgers",id:"creating-ledgers",level:2},{value:"Create ledgers asynchronously",id:"create-ledgers-asynchronously",level:3},{value:"Adding entries to ledgers",id:"adding-entries-to-ledgers",level:2},{value:"Add entries asynchronously",id:"add-entries-asynchronously",level:3},{value:"Reading entries from ledgers",id:"reading-entries-from-ledgers",level:2},{value:"Reading entries after the LastAddConfirmed range",id:"reading-entries-after-the-lastaddconfirmed-range",level:3},{value:"Deleting ledgers",id:"deleting-ledgers",level:2},{value:"Delete ledgers asynchronously",id:"delete-ledgers-asynchronously",level:3},{value:"Simple example",id:"simple-example",level:2},{value:"Example application",id:"example-application",level:2},{value:"Setup",id:"setup",level:3},{value:"Goal",id:"goal",level:3},{value:"The base application",id:"the-base-application",level:3},{value:"Leaders and followers (and a bit of background)",id:"leaders-and-followers-and-a-bit-of-background",level:3},{value:"Why not just use ZooKeeper?",id:"why-not-just-use-zookeeper",level:3},{value:"Electing a leader",id:"electing-a-leader",level:3},{value:"New API",id:"new-api",level:2},{value:"Create a new client",id:"create-a-new-client",level:3},{value:"Create ledgers",id:"create-ledgers",level:3},{value:"Write flags",id:"write-flags",level:3},{value:"Append entries to ledgers",id:"append-entries-to-ledgers",level:3},{value:"Open ledgers",id:"open-ledgers",level:3},{value:"Recovery vs NoRecovery",id:"recovery-vs-norecovery",level:4},{value:"Read entries from ledgers",id:"read-entries-from-ledgers",level:3},{value:"Read unconfirmed entries from ledgers",id:"read-unconfirmed-entries-from-ledgers",level:3},{value:"Tailing Reads",id:"tailing-reads",level:3},{value:"Polling",id:"polling",level:4},{value:"Long Polling",id:"long-polling",level:4},{value:"Delete ledgers",id:"delete-ledgers",level:3},{value:"Relaxing Durability",id:"relaxing-durability",level:3}],d={toc:p},c="wrapper";function u(e){let{components:t,...n}=e;return(0,r.kt)(c,(0,a.Z)({},d,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("p",null,"The ledger API is a lower-level API for BookKeeper that enables you to interact with ledgers directly."),(0,r.kt)("h2",{id:"the-java-ledger-api-client"},"The Java ledger API client"),(0,r.kt)("p",null,"To get started with the Java client for BookKeeper, install the ",(0,r.kt)("inlineCode",{parentName:"p"},"bookkeeper-server")," library as a dependency in your Java application."),(0,r.kt)("blockquote",null,(0,r.kt)("p",{parentName:"blockquote"},"For a more in-depth tutorial that involves a real use case for BookKeeper, see the ",(0,r.kt)("a",{parentName:"p",href:"#example-application"},"Example application")," guide.")),(0,r.kt)("h2",{id:"installation"},"Installation"),(0,r.kt)("p",null,"The BookKeeper Java client library is available via ",(0,r.kt)("a",{parentName:"p",href:"http://search.maven.org/"},"Maven Central")," and can be installed using ",(0,r.kt)("a",{parentName:"p",href:"#maven"},"Maven"),", ",(0,r.kt)("a",{parentName:"p",href:"#gradle"},"Gradle"),", and other build tools."),(0,r.kt)("h3",{id:"maven"},"Maven"),(0,r.kt)("p",null,"If you're using ",(0,r.kt)("a",{parentName:"p",href:"https://maven.apache.org/"},"Maven"),", add this to your ",(0,r.kt)("a",{parentName:"p",href:"https://maven.apache.org/guides/introduction/introduction-to-the-pom.html"},(0,r.kt)("inlineCode",{parentName:"a"},"pom.xml"))," build configuration file:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-xml"},"\x3c!-- in your <properties> block --\x3e\n<bookkeeper.version>4.16.4</bookkeeper.version>\n\n\x3c!-- in your <dependencies> block --\x3e\n<dependency>\n  <groupId>org.apache.bookkeeper</groupId>\n  <artifactId>bookkeeper-server</artifactId>\n  <version>${bookkeeper.version}</version>\n</dependency>\n")),(0,r.kt)("p",null,"BookKeeper uses google ",(0,r.kt)("a",{parentName:"p",href:"https://github.com/google/protobuf/tree/master/java"},"protobuf")," and ",(0,r.kt)("a",{parentName:"p",href:"https://github.com/google/guava"},"guava")," libraries\na lot. If your application might include different versions of protobuf or guava introduced by other dependencies, you can choose to use the\nshaded library, which relocate classes of protobuf and guava into a different namespace to avoid conflicts."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-xml"},"\x3c!-- in your <properties> block --\x3e\n<bookkeeper.version>4.16.4</bookkeeper.version>\n\n\x3c!-- in your <dependencies> block --\x3e\n<dependency>\n  <groupId>org.apache.bookkeeper</groupId>\n  <artifactId>bookkeeper-server-shaded</artifactId>\n  <version>${bookkeeper.version}</version>\n</dependency>\n")),(0,r.kt)("h3",{id:"gradle"},"Gradle"),(0,r.kt)("p",null,"If you're using ",(0,r.kt)("a",{parentName:"p",href:"https://gradle.org/"},"Gradle"),", add this to your ",(0,r.kt)("a",{parentName:"p",href:"https://spring.io/guides/gs/gradle/"},(0,r.kt)("inlineCode",{parentName:"a"},"build.gradle"))," build configuration file:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-groovy"},"dependencies {\n    compile group: 'org.apache.bookkeeper', name: 'bookkeeper-server', version: '4.16.4'\n}\n\n// Alternatively:\ndependencies {\n    compile 'org.apache.bookkeeper:bookkeeper-server:4.16.4'\n}\n")),(0,r.kt)("p",null,"Similarly as using maven, you can also configure to use the shaded jars."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-groovy"},"// use the `bookkeeper-server-shaded` jar\ndependencies {\n    compile 'org.apache.bookkeeper:bookkeeper-server-shaded:{{ site.latest-version }}'\n}\n")),(0,r.kt)("h2",{id:"connection-string"},"Connection string"),(0,r.kt)("p",null,"When interacting with BookKeeper using the Java client, you need to provide your client with a connection string, for which you have three options:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Provide your entire ZooKeeper connection string, for example ",(0,r.kt)("inlineCode",{parentName:"li"},"zk1:2181,zk2:2181,zk3:2181"),"."),(0,r.kt)("li",{parentName:"ul"},"Provide a host and port for one node in your ZooKeeper cluster, for example ",(0,r.kt)("inlineCode",{parentName:"li"},"zk1:2181"),". In general, it's better to provide a full connection string (in case the ZooKeeper node you attempt to connect to is down)."),(0,r.kt)("li",{parentName:"ul"},"If your ZooKeeper cluster can be discovered via DNS, you can provide the DNS name, for example ",(0,r.kt)("inlineCode",{parentName:"li"},"my-zookeeper-cluster.com"),".")),(0,r.kt)("h2",{id:"creating-a-new-client"},"Creating a new client"),(0,r.kt)("p",null,"In order to create a new ",(0,r.kt)("a",{parentName:"p",href:"https://bookkeeper.apache.org//docs/latest/api/javadoc/org/apache/bookkeeper/client/BookKeeper"},(0,r.kt)("inlineCode",{parentName:"a"},"BookKeeper"))," client object, you need to pass in a ",(0,r.kt)("a",{parentName:"p",href:"#connection-string"},"connection string"),". Here is an example client object using a ZooKeeper connection string:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-java"},'try {\n    String connectionString = "127.0.0.1:2181"; // For a single-node, local ZooKeeper cluster\n    BookKeeper bkClient = new BookKeeper(connectionString);\n} catch (InterruptedException | IOException | KeeperException e) {\n    e.printStackTrace();\n}\n')),(0,r.kt)("blockquote",null,(0,r.kt)("p",{parentName:"blockquote"},"If you're running BookKeeper ",(0,r.kt)("a",{parentName:"p",href:"../getting-started/run-locally"},"locally"),", using the ",(0,r.kt)("a",{parentName:"p",href:"../reference/cli#bookkeeper-localbookie"},(0,r.kt)("inlineCode",{parentName:"a"},"localbookie"))," command, use ",(0,r.kt)("inlineCode",{parentName:"p"},'"127.0.0.1:2181"')," for your connection string, as in the example above.")),(0,r.kt)("p",null,"There are, however, other ways that you can create a client object:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},"By passing in a ",(0,r.kt)("a",{parentName:"p",href:"https://bookkeeper.apache.org//docs/latest/api/javadoc/org/apache/bookkeeper/conf/ClientConfiguration"},(0,r.kt)("inlineCode",{parentName:"a"},"ClientConfiguration"))," object. Here's an example:"),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre",className:"language-java"},"ClientConfiguration config = new ClientConfiguration();\nconfig.setZkServers(zkConnectionString);\nconfig.setAddEntryTimeout(2000);\nBookKeeper bkClient = new BookKeeper(config);\n"))),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},"By specifying a ",(0,r.kt)("inlineCode",{parentName:"p"},"ClientConfiguration")," and a ",(0,r.kt)("a",{parentName:"p",href:"http://zookeeper.apache.org/doc/current/api/org/apache/zookeeper/ZooKeeper.html"},(0,r.kt)("inlineCode",{parentName:"a"},"ZooKeeper"))," client object:"),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre",className:"language-java"},"ClientConfiguration config = new ClientConfiguration();\nconfig.setAddEntryTimeout(5000);\nZooKeeper zkClient = new ZooKeeper(/* client args */);\nBookKeeper bkClient = new BookKeeper(config, zkClient);\n"))),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},"Using the ",(0,r.kt)("inlineCode",{parentName:"p"},"forConfig")," method:"),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre",className:"language-java"},"BookKeeper bkClient = BookKeeper.forConfig(conf).build();\n")))),(0,r.kt)("h2",{id:"creating-ledgers"},"Creating ledgers"),(0,r.kt)("p",null,"The easiest way to create a ledger using the Java client is via the ",(0,r.kt)("inlineCode",{parentName:"p"},"createLedger")," method, which creates a new ledger synchronously and returns a ",(0,r.kt)("a",{parentName:"p",href:"https://bookkeeper.apache.org//docs/latest/api/javadoc/org/apache/bookkeeper/client/LedgerHandle"},(0,r.kt)("inlineCode",{parentName:"a"},"LedgerHandle")),". You must specify at least a ",(0,r.kt)("a",{parentName:"p",href:"https://bookkeeper.apache.org//docs/latest/api/javadoc/org/apache/bookkeeper/client/BookKeeper.DigestType"},(0,r.kt)("inlineCode",{parentName:"a"},"DigestType"))," and a password."),(0,r.kt)("p",null,"Here's an example:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-java"},'byte[] password = "some-password".getBytes();\nLedgerHandle handle = bkClient.createLedger(BookKeeper.DigestType.MAC, password);\n')),(0,r.kt)("p",null,"You can also create ledgers asynchronously"),(0,r.kt)("h3",{id:"create-ledgers-asynchronously"},"Create ledgers asynchronously"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-java"},'class LedgerCreationCallback implements AsyncCallback.CreateCallback {\n    public void createComplete(int returnCode, LedgerHandle handle, Object ctx) {\n        System.out.println("Ledger successfully created");\n    }\n}\n\nclient.asyncCreateLedger(\n        3,\n        2,\n        BookKeeper.DigestType.MAC,\n        password,\n        new LedgerCreationCallback(),\n        "some context"\n);\n')),(0,r.kt)("h2",{id:"adding-entries-to-ledgers"},"Adding entries to ledgers"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-java"},'long entryId = ledger.addEntry("Some entry data".getBytes());\n')),(0,r.kt)("h3",{id:"add-entries-asynchronously"},"Add entries asynchronously"),(0,r.kt)("h2",{id:"reading-entries-from-ledgers"},"Reading entries from ledgers"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-java"},"Enumerator<LedgerEntry> entries = handle.readEntries(1, 99);\n")),(0,r.kt)("p",null,"To read all possible entries from the ledger:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-java"},'Enumerator<LedgerEntry> entries =\n  handle.readEntries(0, handle.getLastAddConfirmed());\n\nwhile (entries.hasNextElement()) {\n    LedgerEntry entry = entries.nextElement();\n    System.out.println("Successfully read entry " + entry.getId());\n}\n')),(0,r.kt)("h3",{id:"reading-entries-after-the-lastaddconfirmed-range"},"Reading entries after the LastAddConfirmed range"),(0,r.kt)("p",null,(0,r.kt)("inlineCode",{parentName:"p"},"readUnconfirmedEntries")," allowing to read after the LastAddConfirmed range.\nIt lets the client read without checking the local value of LastAddConfirmed, so that it is possible to read entries for which the writer has not received the acknowledge yet.\nFor entries which are within the range 0..LastAddConfirmed, BookKeeper guarantees that the writer has successfully received the acknowledge.\nFor entries outside that range it is possible that the writer never received the acknowledge and so there is the risk that the reader is seeing entries before the writer and this could result in a consistency issue in some cases.\nWith this method you can even read entries before the LastAddConfirmed and entries after it with one call, the expected consistency will be as described above."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-java"},'Enumerator<LedgerEntry> entries =\n  handle.readUnconfirmedEntries(0, lastEntryIdExpectedToRead);\n\nwhile (entries.hasNextElement()) {\n    LedgerEntry entry = entries.nextElement();\n    System.out.println("Successfully read entry " + entry.getId());\n}\n')),(0,r.kt)("h2",{id:"deleting-ledgers"},"Deleting ledgers"),(0,r.kt)("p",null,"Ledgers can be deleted synchronously which may throw exception:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-java"},"long ledgerId = 1234;\n\ntry {\n    bkClient.deleteLedger(ledgerId);\n} catch (Exception e) {\n  e.printStackTrace();\n}\n")),(0,r.kt)("h3",{id:"delete-ledgers-asynchronously"},"Delete ledgers asynchronously"),(0,r.kt)("p",null,"Ledgers can also be deleted asynchronously:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-java"},'class DeleteEntryCallback implements AsyncCallback.DeleteCallback {\n    public void deleteComplete() {\n        System.out.println("Delete completed");\n    }\n}\nbkClient.asyncDeleteLedger(ledgerID, new DeleteEntryCallback(), null);\n')),(0,r.kt)("h2",{id:"simple-example"},"Simple example"),(0,r.kt)("blockquote",null,(0,r.kt)("p",{parentName:"blockquote"},"For a more involved BookKeeper client example, see the ",(0,r.kt)("a",{parentName:"p",href:"#example-application"},"example application")," below.")),(0,r.kt)("p",null,"In the code sample below, a BookKeeper client:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"creates a ledger"),(0,r.kt)("li",{parentName:"ul"},"writes entries to the ledger"),(0,r.kt)("li",{parentName:"ul"},"closes the ledger (meaning no further writes are possible)"),(0,r.kt)("li",{parentName:"ul"},"re-opens the ledger for reading"),(0,r.kt)("li",{parentName:"ul"},"reads all available entries")),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-java"},'// Create a client object for the local ensemble. This\n// operation throws multiple exceptions, so make sure to\n// use a try/catch block when instantiating client objects.\nBookKeeper bkc = new BookKeeper("localhost:2181");\n\n// A password for the new ledger\nbyte[] ledgerPassword = /* some sequence of bytes, perhaps random */;\n\n// Create a new ledger and fetch its identifier\nLedgerHandle lh = bkc.createLedger(BookKeeper.DigestType.MAC, ledgerPassword);\nlong ledgerId = lh.getId();\n\n// Create a buffer for four-byte entries\nByteBuffer entry = ByteBuffer.allocate(4);\n\nint numberOfEntries = 100;\n\n// Add entries to the ledger, then close it\nfor (int i = 0; i < numberOfEntries; i++){\n    entry.putInt(i);\n    entry.position(0);\n    lh.addEntry(entry.array());\n}\nlh.close();\n\n// Open the ledger for reading\nlh = bkc.openLedger(ledgerId, BookKeeper.DigestType.MAC, ledgerPassword);\n\n// Read all available entries\nEnumeration<LedgerEntry> entries = lh.readEntries(0, numberOfEntries - 1);\n\nwhile(entries.hasMoreElements()) {\n    ByteBuffer result = ByteBuffer.wrap(entries.nextElement().getEntry());\n    Integer retrEntry = result.getInt();\n\n    // Print the integer stored in each entry\n    System.out.println(String.format("Result: %s", retrEntry));\n}\n\n// Close the ledger and the client\nlh.close();\nbkc.close();\n')),(0,r.kt)("p",null,"Running this should return this output:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-shell"},"Result: 0\nResult: 1\nResult: 2\n# etc\n")),(0,r.kt)("h2",{id:"example-application"},"Example application"),(0,r.kt)("p",null,"This tutorial walks you through building an example application that uses BookKeeper as the replicated log. The application uses the BookKeeper Java client to interact with BookKeeper."),(0,r.kt)("blockquote",null,(0,r.kt)("p",{parentName:"blockquote"},"The code for this tutorial can be found in ",(0,r.kt)("a",{parentName:"p",href:"https://github.com/ivankelly/bookkeeper-tutorial/"},"this GitHub repo"),". The final code for the ",(0,r.kt)("inlineCode",{parentName:"p"},"Dice")," class can be found ",(0,r.kt)("a",{parentName:"p",href:"https://github.com/ivankelly/bookkeeper-tutorial/blob/master/src/main/java/org/apache/bookkeeper/Dice.java"},"here"),".")),(0,r.kt)("h3",{id:"setup"},"Setup"),(0,r.kt)("p",null,"Before you start, you will need to have a BookKeeper cluster running locally on your machine. For installation instructions, see ",(0,r.kt)("a",{parentName:"p",href:"../getting-started/installation"},"Installation"),"."),(0,r.kt)("p",null,"To start up a cluster consisting of six bookies locally:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-shell"},"$ bin/bookkeeper localbookie 6\n")),(0,r.kt)("p",null,"You can specify a different number of bookies if you'd like."),(0,r.kt)("h3",{id:"goal"},"Goal"),(0,r.kt)("p",null,"The goal of the dice application is to have"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"multiple instances of this application,"),(0,r.kt)("li",{parentName:"ul"},"possibly running on different machines,"),(0,r.kt)("li",{parentName:"ul"},"all of which display the exact same sequence of numbers.")),(0,r.kt)("p",null,"In other words, the log needs to be both durable and consistent, regardless of how many bookies are participating in the BookKeeper ensemble. If one of the bookies crashes or becomes unable to communicate with the other bookies in any way, it should ",(0,r.kt)("em",{parentName:"p"},"still")," display the same sequence of numbers as the others. This tutorial will show you how to achieve this."),(0,r.kt)("p",null,"To begin, download the base application, compile and run it."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-shell"},"$ git clone https://github.com/ivankelly/bookkeeper-tutorial.git\n$ mvn package\n$ mvn exec:java -Dexec.mainClass=org.apache.bookkeeper.Dice\n")),(0,r.kt)("p",null,"That should yield output that looks something like this:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre"},"[INFO] Scanning for projects...\n[INFO]                                                                         \n[INFO] ------------------------------------------------------------------------\n[INFO] Building tutorial 1.0-SNAPSHOT\n[INFO] ------------------------------------------------------------------------\n[INFO]\n[INFO] --- exec-maven-plugin:1.3.2:java (default-cli) @ tutorial ---\n[WARNING] Warning: killAfter is now deprecated. Do you need it ? Please comment on MEXEC-6.\nValue = 4\nValue = 5\nValue = 3\n")),(0,r.kt)("h3",{id:"the-base-application"},"The base application"),(0,r.kt)("p",null,"The application in this tutorial is a dice application. The ",(0,r.kt)("inlineCode",{parentName:"p"},"Dice")," class below has a ",(0,r.kt)("inlineCode",{parentName:"p"},"playDice")," function that generates a random number between 1 and 6 every second, prints the value of the dice roll, and runs indefinitely."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-java"},'public class Dice {\n    Random r = new Random();\n\n    void playDice() throws InterruptedException {\n        while (true) {\n            Thread.sleep(1000);\n            System.out.println("Value = " + (r.nextInt(6) + 1));\n        }\n    }\n}\n')),(0,r.kt)("p",null,"When you run the ",(0,r.kt)("inlineCode",{parentName:"p"},"main")," function of this class, a new ",(0,r.kt)("inlineCode",{parentName:"p"},"Dice")," object will be instantiated and then run indefinitely:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-java"},"public class Dice {\n    // other methods\n\n    public static void main(String[] args) throws InterruptedException {\n        Dice d = new Dice();\n        d.playDice();\n    }\n}\n")),(0,r.kt)("h3",{id:"leaders-and-followers-and-a-bit-of-background"},"Leaders and followers (and a bit of background)"),(0,r.kt)("p",null,"To achieve this common view in multiple instances of the program, we need each instance to agree on what the next number in the sequence will be. For example, the instances must agree that 4 is the first number and 2 is the second number and 5 is the third number and so on. This is a difficult problem, especially in the case that any instance may go away at any time, and messages between the instances can be lost or reordered."),(0,r.kt)("p",null,"Luckily, there are already algorithms to solve this. Paxos is an abstract algorithm to implement this kind of agreement, while Zab and Raft are more practical protocols. ",(0,r.kt)("a",{parentName:"p",href:"https://www.youtube.com/watch?v=d7nAGI_NZPk"},"This video")," gives a good overview about how these algorithms usually look. They all have a similar core."),(0,r.kt)("p",null,"It would be possible to run the Paxos to agree on each number in the sequence. However, running Paxos each time can be expensive. What Zab and Raft do is that they use a Paxos-like algorithm to elect a leader. The leader then decides what the sequence of events should be, putting them in a log, which the other instances can then follow to maintain the same state as the leader."),(0,r.kt)("p",null,"Bookkeeper provides the functionality for the second part of the protocol, allowing a leader to write events to a log and have multiple followers tailing the log. However, bookkeeper does not do leader election. You will need a zookeeper or raft instance for that purpose."),(0,r.kt)("h3",{id:"why-not-just-use-zookeeper"},"Why not just use ZooKeeper?"),(0,r.kt)("p",null,"There are a number of reasons:"),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},"Zookeeper's log is only exposed through a tree like interface. It can be hard to shoehorn your application into this."),(0,r.kt)("li",{parentName:"ol"},"A zookeeper ensemble of multiple machines is limited to one log. You may want one log per resource, which will become expensive very quickly."),(0,r.kt)("li",{parentName:"ol"},"Adding extra machines to a zookeeper ensemble does not increase capacity nor throughput.")),(0,r.kt)("p",null,"Bookkeeper can be seen as a means of exposing ZooKeeper's replicated log to applications in a scalable fashion. ZooKeeper is still used by BookKeeper, however, to maintain consistency guarantees, though clients don't need to interact with ZooKeeper directly."),(0,r.kt)("h3",{id:"electing-a-leader"},"Electing a leader"),(0,r.kt)("p",null,"We'll use zookeeper to elect a leader. A zookeeper instance will have started locally when you started the localbookie application above. To verify it's running, run the following command."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-shell"},"$ echo stat | nc localhost 2181\nZookeeper version: 3.4.6-1569965, built on 02/20/2014 09:09 GMT\nClients:\n /127.0.0.1:59343[1](queued=0,recved=40,sent=41)\n /127.0.0.1:49354[1](queued=0,recved=11,sent=11)\n /127.0.0.1:49361[0](queued=0,recved=1,sent=0)\n /127.0.0.1:59344[1](queued=0,recved=38,sent=39)\n /127.0.0.1:59345[1](queued=0,recved=38,sent=39)\n /127.0.0.1:59346[1](queued=0,recved=38,sent=39)\n\nLatency min/avg/max: 0/0/23\nReceived: 167\nSent: 170\nConnections: 6\nOutstanding: 0\nZxid: 0x11\nMode: standalone\nNode count: 16\n")),(0,r.kt)("p",null,"To interact with zookeeper, we'll use the Curator client rather than the stock zookeeper client. Getting things right with the zookeeper client can be tricky, and curator removes a lot of the pointy corners for you. In fact, curator even provides a leader election recipe, so we need to do very little work to get leader election in our application."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-java"},'public class Dice extends LeaderSelectorListenerAdapter implements Closeable {\n\n    final static String ZOOKEEPER_SERVER = "127.0.0.1:2181";\n    final static String ELECTION_PATH = "/dice-elect";\n\n    ...\n\n    Dice() throws InterruptedException {\n        curator = CuratorFrameworkFactory.newClient(ZOOKEEPER_SERVER,\n                2000, 10000, new ExponentialBackoffRetry(1000, 3));\n        curator.start();\n        curator.blockUntilConnected();\n\n        leaderSelector = new LeaderSelector(curator, ELECTION_PATH, this);\n        leaderSelector.autoRequeue();\n        leaderSelector.start();\n    }\n')),(0,r.kt)("p",null,"In the constructor for Dice, we need to create the curator client. We specify four things when creating the client, the location of the zookeeper service, the session timeout, the connect timeout and the retry policy."),(0,r.kt)("p",null,"The session timeout is a zookeeper concept. If the zookeeper server doesn't hear anything from the client for this amount of time, any leases which the client holds will be timed out. This is important in leader election. For leader election, the curator client will take a lease on ELECTION_PATH. The first instance to take the lease will become leader and the rest will become followers. However, their claim on the lease will remain in the cue. If the first instance then goes away, due to a crash etc., its session will timeout. Once the session times out, the lease will be released and the next instance in the queue will become the leader. The call to autoRequeue() will make the client queue itself again if it loses the lease for some other reason, such as if it was still alive, but it a garbage collection cycle caused it to lose its session, and thereby its lease. I've set the lease to be quite low so that when we test out leader election, transitions will be quite quick. The optimum length for session timeout depends very much on the use case. The other parameters are the connection timeout, i.e. the amount of time it will spend trying to connect to a zookeeper server before giving up, and the retry policy. The retry policy specifies how the client should respond to transient errors, such as connection loss. Operations that fail with transient errors can be retried, and this argument specifies how often the retries should occur."),(0,r.kt)("p",null,"Finally, you'll have noticed that Dice now extends LeaderSelectorListenerAdapter and implements Closeable. Closeable is there to close the resource we have initialized in the constructor, the curator client and the leaderSelector. LeaderSelectorListenerAdapter is a callback that the leaderSelector uses to notify the instance that it is now the leader. It is passed as the third argument to the LeaderSelector constructor."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-java"},"    @Override\n    public void takeLeadership(CuratorFramework client)\n            throws Exception {\n        synchronized (this) {\n            leader = true;\n            try {\n                while (true) {\n                    this.wait();\n                }\n            } catch (InterruptedException ie) {\n                Thread.currentThread().interrupt();\n                leader = false;\n            }\n        }\n    }\n")),(0,r.kt)("p",null,"takeLeadership() is the callback called by LeaderSelector when the instance is leader. It should only return when the instance wants to give up leadership. In our case, we never do so we wait on the current object until we're interrupted. To signal to the rest of the program that we are leader we set a volatile boolean called leader to true. This is unset after we are interrupted."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-java"},'    void playDice() throws InterruptedException {\n        while (true) {\n            while (leader) {\n                Thread.sleep(1000);\n                System.out.println("Value = " + (r.nextInt(6) + 1)\n                                   + ", isLeader = " + leader);\n            }\n        }\n    }\n')),(0,r.kt)("p",null,"Finally, we modify the ",(0,r.kt)("inlineCode",{parentName:"p"},"playDice")," function to only generate random numbers when it is the leader."),(0,r.kt)("p",null,"Run two instances of the program in two different terminals. You'll see that one becomes leader and prints numbers and the other just sits there."),(0,r.kt)("p",null,"Now stop the leader using Control-Z. This will pause the process, but it won't kill it. You will be dropped back to the shell in that terminal. After a couple of seconds, the session timeout, you will see that the other instance has become the leader. Zookeeper will guarantee that only one instance is selected as leader at any time."),(0,r.kt)("p",null,"Now go back to the shell that the original leader was on and wake up the process using fg. You'll see something like the following:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-shell"},"...\n...\nValue = 4, isLeader = true\nValue = 4, isLeader = true\n^Z\n[1]+  Stopped                 mvn exec:java -Dexec.mainClass=org.apache.bookkeeper.Dice\n$ fg\nmvn exec:java -Dexec.mainClass=org.apache.bookkeeper.Dice\nValue = 3, isLeader = true\nValue = 1, isLeader = false\n")),(0,r.kt)("h2",{id:"new-api"},"New API"),(0,r.kt)("p",null,"Since 4.6 BookKeeper provides a new client API which leverages Java8 ",(0,r.kt)("a",{parentName:"p",href:"https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html"},"CompletableFuture")," facility.\n",(0,r.kt)("a",{parentName:"p",href:"https://bookkeeper.apache.org//docs/latest/api/javadoc/org/apache/bookkeeper/client/api/WriteHandle"},"WriteHandle"),", ",(0,r.kt)("a",{parentName:"p",href:"https://bookkeeper.apache.org//docs/latest/api/javadoc/org/apache/bookkeeper/client/api/WriteAdvHandle"},"WriteAdvHandle"),", ",(0,r.kt)("a",{parentName:"p",href:"https://bookkeeper.apache.org//docs/latest/api/javadoc/org/apache/bookkeeper/client/api/ReadHandle"},"ReadHandle")," are introduced for replacing the generic ",(0,r.kt)("a",{parentName:"p",href:"https://bookkeeper.apache.org//docs/latest/api/javadoc/org/apache/bookkeeper/client/LedgerHandle"},"LedgerHandle"),"."),(0,r.kt)("blockquote",null,(0,r.kt)("p",{parentName:"blockquote"},"All the new API now is available in ",(0,r.kt)("inlineCode",{parentName:"p"},"org.apache.bookkeeper.client.api"),". You should only use interfaces defined in this package.")),(0,r.kt)("p",null,(0,r.kt)("em",{parentName:"p"},"Beware")," that this API in 4.6 is still experimental API and can be subject to changes in next minor releases."),(0,r.kt)("h3",{id:"create-a-new-client"},"Create a new client"),(0,r.kt)("p",null,"In order to create a new ",(0,r.kt)("a",{parentName:"p",href:"https://bookkeeper.apache.org//docs/latest/api/javadoc/org/apache/bookkeeper/client/api/BookKeeper"},(0,r.kt)("inlineCode",{parentName:"a"},"BookKeeper"))," client object, you need to construct a ",(0,r.kt)("a",{parentName:"p",href:"https://bookkeeper.apache.org//docs/latest/api/javadoc/org/apache/bookkeeper/conf/ClientConfiguration"},(0,r.kt)("inlineCode",{parentName:"a"},"ClientConfiguration"))," object and set a ",(0,r.kt)("a",{parentName:"p",href:"#connection-string"},"connection string")," first, and then use ",(0,r.kt)("a",{parentName:"p",href:"https://bookkeeper.apache.org//docs/latest/api/javadoc/org/apache/bookkeeper/client/api/BookKeeperBuilder"},(0,r.kt)("inlineCode",{parentName:"a"},"BookKeeperBuilder"))," to build the client."),(0,r.kt)("p",null,"Here is an example building the bookkeeper client."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-java"},'// construct a client configuration instance\nClientConfiguration conf = new ClientConfiguration();\nconf.setZkServers(zkConnectionString);\nconf.setZkLedgersRootPath("/path/to/ledgers/root");\n\n// build the bookkeeper client\nBookKeeper bk = BookKeeper.newBuilder(conf)\n    .statsLogger(...)\n    ...\n    .build();\n\n')),(0,r.kt)("h3",{id:"create-ledgers"},"Create ledgers"),(0,r.kt)("p",null,"the easiest way to create a ledger using the java client is via the ",(0,r.kt)("a",{parentName:"p",href:"https://bookkeeper.apache.org//docs/latest/api/javadoc/org/apache/bookkeeper/client/api/createbuilder"},(0,r.kt)("inlineCode",{parentName:"a"},"createbuilder")),". you must specify at least\na ",(0,r.kt)("a",{parentName:"p",href:"https://bookkeeper.apache.org//docs/latest/api/javadoc/org/apache/bookkeeper/client/api/digesttype"},(0,r.kt)("inlineCode",{parentName:"a"},"digesttype"))," and a password."),(0,r.kt)("p",null,"here's an example:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-java"},'BookKeeper bk = ...;\n\nbyte[] password = "some-password".getBytes();\n\nWriteHandle wh = bk.newCreateLedgerOp()\n    .withDigestType(DigestType.CRC32)\n    .withPassword(password)\n    .withEnsembleSize(3)\n    .withWriteQuorumSize(3)\n    .withAckQuorumSize(2)\n    .execute()          // execute the creation op\n    .get();             // wait for the execution to complete\n')),(0,r.kt)("p",null,"A ",(0,r.kt)("a",{parentName:"p",href:"https://bookkeeper.apache.org//docs/latest/api/javadoc/org/apache/bookkeeper/client/api/WriteHandle"},(0,r.kt)("inlineCode",{parentName:"a"},"WriteHandle"))," is returned for applications to write and read entries to and from the ledger."),(0,r.kt)("h3",{id:"write-flags"},"Write flags"),(0,r.kt)("p",null,"You can specify behaviour of the writer by setting ",(0,r.kt)("a",{parentName:"p",href:"https://bookkeeper.apache.org//docs/latest/api/javadoc/org/apache/bookkeeper/client/api/WriteFlag"},(0,r.kt)("inlineCode",{parentName:"a"},"WriteFlags"))," at ledger creation type.\nThese flags are applied only during write operations and are not recorded on metadata."),(0,r.kt)("p",null,"Available write flags:"),(0,r.kt)("table",null,(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:"left"},"Flag"),(0,r.kt)("th",{parentName:"tr",align:"left"},"Explanation"),(0,r.kt)("th",{parentName:"tr",align:"left"},"Notes"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"left"},"DEFERRED_SYNC"),(0,r.kt)("td",{parentName:"tr",align:"left"},"Writes are acknowledged early, without waiting for guarantees of durability"),(0,r.kt)("td",{parentName:"tr",align:"left"},"Data will be only written to the OS page cache, without forcing an fsync.")))),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-java"},'BookKeeper bk = ...;\n\nbyte[] password = "some-password".getBytes();\n\nWriteHandle wh = bk.newCreateLedgerOp()\n    .withDigestType(DigestType.CRC32)\n    .withPassword(password)\n    .withEnsembleSize(3)\n    .withWriteQuorumSize(3)\n    .withAckQuorumSize(2)\n    .withWriteFlags(DEFERRED_SYNC)\n    .execute()          // execute the creation op\n    .get();             // wait for the execution to complete\n')),(0,r.kt)("h3",{id:"append-entries-to-ledgers"},"Append entries to ledgers"),(0,r.kt)("p",null,"The ",(0,r.kt)("a",{parentName:"p",href:"https://bookkeeper.apache.org//docs/latest/api/javadoc/org/apache/bookkeeper/client/api/WriteHandle"},(0,r.kt)("inlineCode",{parentName:"a"},"WriteHandle"))," can be used for applications to append entries to the ledgers."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-java"},'WriteHandle wh = ...;\n\nCompletableFuture<Long> addFuture = wh.append("Some entry data".getBytes());\n\n// option 1: you can wait for add to complete synchronously\ntry {\n    long entryId = FutureUtils.result(addFuture.get());\n} catch (BKException bke) {\n    // error handling\n}\n\n// option 2: you can process the result and exception asynchronously\naddFuture\n    .thenApply(entryId -> {\n        // process the result\n    })\n    .exceptionally(cause -> {\n        // handle the exception\n    })\n\n// option 3: bookkeeper provides a twitter-future-like event listener for processing result and exception asynchronously\naddFuture.whenComplete(new FutureEventListener() {\n    @Override\n    public void onSuccess(long entryId) {\n        // process the result\n    }\n    @Override\n    public void onFailure(Throwable cause) {\n        // handle the exception\n    }\n});\n')),(0,r.kt)("p",null,"The append method supports three representations of a bytes array: the native java ",(0,r.kt)("inlineCode",{parentName:"p"},"byte[]"),", java nio ",(0,r.kt)("inlineCode",{parentName:"p"},"ByteBuffer")," and netty ",(0,r.kt)("inlineCode",{parentName:"p"},"ByteBuf"),".\nIt is recommended to use ",(0,r.kt)("inlineCode",{parentName:"p"},"ByteBuf")," as it is more gc friendly."),(0,r.kt)("h3",{id:"open-ledgers"},"Open ledgers"),(0,r.kt)("p",null,"You can open ledgers to read entries. Opening ledgers is done by ",(0,r.kt)("a",{parentName:"p",href:"https://bookkeeper.apache.org//docs/latest/api/javadoc/org/apache/bookkeeper/client/api/openBuilder"},(0,r.kt)("inlineCode",{parentName:"a"},"openBuilder")),". You must specify the ledgerId and the password\nin order to open the ledgers."),(0,r.kt)("p",null,"here's an example:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-java"},'BookKeeper bk = ...;\n\nlong ledgerId = ...;\nbyte[] password = "some-password".getBytes();\n\nReadHandle rh = bk.newOpenLedgerOp()\n    .withLedgerId(ledgerId)\n    .withPassword(password)\n    .execute()          // execute the open op\n    .get();             // wait for the execution to complete\n')),(0,r.kt)("p",null,"A ",(0,r.kt)("a",{parentName:"p",href:"https://bookkeeper.apache.org//docs/latest/api/javadoc/org/apache/bookkeeper/client/api/ReadHandle"},(0,r.kt)("inlineCode",{parentName:"a"},"ReadHandle"))," is returned for applications to read entries to and from the ledger."),(0,r.kt)("h4",{id:"recovery-vs-norecovery"},"Recovery vs NoRecovery"),(0,r.kt)("p",null,"By default, the ",(0,r.kt)("a",{parentName:"p",href:"https://bookkeeper.apache.org//docs/latest/api/javadoc/org/apache/bookkeeper/client/api/openBuilder"},(0,r.kt)("inlineCode",{parentName:"a"},"openBuilder"))," opens the ledger in a ",(0,r.kt)("inlineCode",{parentName:"p"},"NoRecovery")," mode. You can open the ledger in ",(0,r.kt)("inlineCode",{parentName:"p"},"Recovery")," mode by specifying\n",(0,r.kt)("inlineCode",{parentName:"p"},"withRecovery(true)")," in the open builder."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-java"},'BookKeeper bk = ...;\n\nlong ledgerId = ...;\nbyte[] password = "some-password".getBytes();\n\nReadHandle rh = bk.newOpenLedgerOp()\n    .withLedgerId(ledgerId)\n    .withPassword(password)\n    .withRecovery(true)\n    .execute()\n    .get();\n\n')),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},'What is the difference between "Recovery" and "NoRecovery"?')),(0,r.kt)("p",null,'If you are opening a ledger in "Recovery" mode, it will basically fence and seal the ledger -- no more entries are allowed\nto be appended to it. The writer which is currently appending entries to the ledger will fail with ',(0,r.kt)("a",{parentName:"p",href:"https://bookkeeper.apache.org//docs/latest/api/javadoc/org/apache/bookkeeper/client/api/BKException.Code#LedgerFencedException"},(0,r.kt)("inlineCode",{parentName:"a"},"LedgerFencedException")),"."),(0,r.kt)("p",null,'In constrat, opening a ledger in "NoRecovery" mode, it will not fence and seal the ledger. "NoRecovery" mode is usually used by applications to tailing-read from a ledger.'),(0,r.kt)("h3",{id:"read-entries-from-ledgers"},"Read entries from ledgers"),(0,r.kt)("p",null,"The ",(0,r.kt)("a",{parentName:"p",href:"https://bookkeeper.apache.org//docs/latest/api/javadoc/org/apache/bookkeeper/client/api/ReadHandle"},(0,r.kt)("inlineCode",{parentName:"a"},"ReadHandle"))," returned from the open builder can be used for applications to read entries from the ledgers."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-java"},"ReadHandle rh = ...;\n\nlong startEntryId = ...;\nlong endEntryId = ...;\nCompletableFuture<LedgerEntries> readFuture = rh.read(startEntryId, endEntryId);\n\n// option 1: you can wait for read to complete synchronously\ntry {\n    LedgerEntries entries = FutureUtils.result(readFuture.get());\n} catch (BKException bke) {\n    // error handling\n}\n\n// option 2: you can process the result and exception asynchronously\nreadFuture\n    .thenApply(entries -> {\n        // process the result\n    })\n    .exceptionally(cause -> {\n        // handle the exception\n    })\n\n// option 3: bookkeeper provides a twitter-future-like event listener for processing result and exception asynchronously\nreadFuture.whenComplete(new FutureEventListener<>() {\n    @Override\n    public void onSuccess(LedgerEntries entries) {\n        // process the result\n    }\n    @Override\n    public void onFailure(Throwable cause) {\n        // handle the exception\n    }\n});\n")),(0,r.kt)("p",null,"Once you are done with processing the ",(0,r.kt)("a",{parentName:"p",href:"https://bookkeeper.apache.org//docs/latest/api/javadoc/org/apache/bookkeeper/client/api/LedgerEntries"},(0,r.kt)("inlineCode",{parentName:"a"},"LedgerEntries")),", you can call ",(0,r.kt)("inlineCode",{parentName:"p"},"#close()")," on the ",(0,r.kt)("inlineCode",{parentName:"p"},"LedgerEntries")," instance to\nrelease the buffers held by it."),(0,r.kt)("p",null,"Applications are allowed to read any entries between ",(0,r.kt)("inlineCode",{parentName:"p"},"0")," and ",(0,r.kt)("a",{parentName:"p",href:"https://bookkeeper.apache.org//docs/latest/api/javadoc/org/apache/bookkeeper/client/api/ReadHandle.html#getLastAddConfirmed"},(0,r.kt)("inlineCode",{parentName:"a"},"LastAddConfirmed")),". If the applications\nattempts to read entries beyond ",(0,r.kt)("inlineCode",{parentName:"p"},"LastAddConfirmed"),", they will receive ",(0,r.kt)("a",{parentName:"p",href:"https://bookkeeper.apache.org//docs/latest/api/javadoc/org/apache/bookkeeper/client/api/BKException.Code#IncorrectParameterException"},(0,r.kt)("inlineCode",{parentName:"a"},"IncorrectParameterException")),"."),(0,r.kt)("h3",{id:"read-unconfirmed-entries-from-ledgers"},"Read unconfirmed entries from ledgers"),(0,r.kt)("p",null,(0,r.kt)("inlineCode",{parentName:"p"},"readUnconfirmed")," is provided the mechanism for applications to read entries beyond ",(0,r.kt)("inlineCode",{parentName:"p"},"LastAddConfirmed"),". Applications should be aware of ",(0,r.kt)("inlineCode",{parentName:"p"},"readUnconfirmed")," doesn't provide any\nrepeatable read consistency."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-java"},"CompletableFuture<LedgerEntries> readFuture = rh.readUnconfirmed(startEntryId, endEntryId);\n")),(0,r.kt)("h3",{id:"tailing-reads"},"Tailing Reads"),(0,r.kt)("p",null,"There are two methods for applications to achieve tailing reads: ",(0,r.kt)("inlineCode",{parentName:"p"},"Polling")," and ",(0,r.kt)("inlineCode",{parentName:"p"},"Long-Polling"),"."),(0,r.kt)("h4",{id:"polling"},"Polling"),(0,r.kt)("p",null,"You can do this in synchronous way:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-java"},"ReadHandle rh = ...;\n\nlong startEntryId = 0L;\nlong nextEntryId = startEntryId;\nint numEntriesPerBatch = 4;\nwhile (!rh.isClosed() || nextEntryId <= rh.getLastAddConfirmed()) {\n    long lac = rh.getLastAddConfirmed();\n    if (nextEntryId > lac) {\n        // no more entries are added\n        Thread.sleep(1000);\n\n        lac = rh.readLastAddConfirmed().get();\n        continue;\n    }\n\n    long endEntryId = Math.min(lac, nextEntryId + numEntriesPerBatch - 1);\n    LedgerEntries entries = rh.read(nextEntryId, endEntryId).get();\n\n    // process the entries\n\n    nextEntryId = endEntryId + 1;\n}\n")),(0,r.kt)("h4",{id:"long-polling"},"Long Polling"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-java"},"ReadHandle rh = ...;\n\nlong startEntryId = 0L;\nlong nextEntryId = startEntryId;\nint numEntriesPerBatch = 4;\nwhile (!rh.isClosed() || nextEntryId <= rh.getLastAddConfirmed()) {\n    long lac = rh.getLastAddConfirmed();\n    if (nextEntryId > lac) {\n        // no more entries are added\n        try (LastConfirmedAndEntry lacAndEntry = rh.readLastAddConfirmedAndEntry(nextEntryId, 1000, false).get()) {\n            if (lacAndEntry.hasEntry()) {\n                // process the entry\n\n                ++nextEntryId;\n            }\n        }\n    } else {\n        long endEntryId = Math.min(lac, nextEntryId + numEntriesPerBatch - 1);\n        LedgerEntries entries = rh.read(nextEntryId, endEntryId).get();\n\n        // process the entries\n        nextEntryId = endEntryId + 1;\n    }\n}\n")),(0,r.kt)("h3",{id:"delete-ledgers"},"Delete ledgers"),(0,r.kt)("p",null,"Ledgers can be deleted by using ",(0,r.kt)("a",{parentName:"p",href:"https://bookkeeper.apache.org//docs/latest/api/javadoc/org/apache/bookkeeper/client/api/DeleteBuilder"},(0,r.kt)("inlineCode",{parentName:"a"},"DeleteBuilder")),"."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-java"},"BookKeeper bk = ...;\nlong ledgerId = ...;\n\nbk.newDeleteLedgerOp()\n    .withLedgerId(ledgerId)\n    .execute()\n    .get();\n")),(0,r.kt)("h3",{id:"relaxing-durability"},"Relaxing Durability"),(0,r.kt)("p",null,"In BookKeeper by default each write will be acklowledged to the client if and only if it has been persisted durably (fsync called on the file system) by a quorum of bookies.\nIn this case the LastAddConfirmed pointer is updated on the writer side, this is the guarantee for the writer that data will not be lost and it will\nbe always readable by other clients."),(0,r.kt)("p",null,"On the client side you can temporary relax this constraint by using the ",(0,r.kt)("a",{parentName:"p",href:"https://bookkeeper.apache.org//docs/latest/api/javadoc/org/apache/bookkeeper/client/api/WriteFlag"},(0,r.kt)("inlineCode",{parentName:"a"},"DEFERRED_SYNC"))," Write flag. Using this flag bookies will acknowledge each entry after\nwriting the entry to SO buffers without waiting for an fsync.\nIn this case the LastAddConfirmed pointer is not advanced to the writer side neither is updated on the reader's side, this is because ",(0,r.kt)("strong",{parentName:"p"},"there is some chance to lose the entry"),".\nSuch entries will be still readable using readUnconfirmed() API, but they won't be readable using Long Poll reads or regular read() API."),(0,r.kt)("p",null,"In order to get guarantees of durability the writer must use explicitly the ",(0,r.kt)("a",{parentName:"p",href:"https://bookkeeper.apache.org//docs/latest/api/javadoc/org/apache/bookkeeper/client/api/ForceableHandle"},"force()")," API which will return only after all the bookies in the ensemble acknowledge the call after\nperforming an fsync to the disk which is storing the journal.\nThis way the LastAddConfirmed pointer is advanced on the writer side and it will be eventually available to the readers."),(0,r.kt)("p",null,"The ",(0,r.kt)("em",{parentName:"p"},"close()")," operation on the writer writes on ledger's metadata the current LastAddConfirmed pointer, ",(0,r.kt)("strong",{parentName:"p"},"it is up to the application to call force() before issuing the close command"),".\nIn case that you never call explicitly ",(0,r.kt)("a",{parentName:"p",href:"https://bookkeeper.apache.org//docs/latest/api/javadoc/org/apache/bookkeeper/client/api/ForceableHandle"},"force()")," the LastAddConfirmed will remain unset (-1) on ledger metadata and regular readers won't be able to access data."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-java"},"BookKeeper bk = ...;\nlong ledgerId = ...;\n\nWriteHandle wh = bk.newCreateLedgerOp()\n    .withDigestType(DigestType.CRC32)\n    .withPassword(password)\n    .withEnsembleSize(3)\n    .withWriteQuorumSize(3)\n    .withAckQuorumSize(2)\n    .withWriteFlags(DEFERRED_SYNC)\n    .execute()          // execute the creation op\n    .get();             // wait for the execution to complete\n\n\nwh.force().get();  // wait for fsync, make data available to readers and to the replicator\n\nwh.close(); // seal the ledger\n\n")))}u.isMDXComponent=!0}}]);
\ No newline at end of file
diff --git a/content/assets/js/cfc9ccfa.553ca6af.js b/content/assets/js/cfc9ccfa.553ca6af.js
new file mode 100644
index 0000000..bebc4a0
--- /dev/null
+++ b/content/assets/js/cfc9ccfa.553ca6af.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunksite_3=self.webpackChunksite_3||[]).push([[1527],{3905:function(e,t,a){a.d(t,{Zo:function(){return u},kt:function(){return m}});var n=a(67294);function r(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function l(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}return a}function i(e){for(var t=1;t<arguments.length;t++){var a=null!=arguments[t]?arguments[t]:{};t%2?l(Object(a),!0).forEach((function(t){r(e,t,a[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(a)):l(Object(a)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(a,t))}))}return e}function o(e,t){if(null==e)return{};var a,n,r=function(e,t){if(null==e)return{};var a,n,r={},l=Object.keys(e);for(n=0;n<l.length;n++)a=l[n],t.indexOf(a)>=0||(r[a]=e[a]);return r}(e,t);if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(e);for(n=0;n<l.length;n++)a=l[n],t.indexOf(a)>=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(r[a]=e[a])}return r}var d=n.createContext({}),s=function(e){var t=n.useContext(d),a=t;return e&&(a="function"==typeof e?e(t):i(i({},t),e)),a},u=function(e){var t=s(e.components);return n.createElement(d.Provider,{value:t},e.children)},p="mdxType",g={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},c=n.forwardRef((function(e,t){var a=e.components,r=e.mdxType,l=e.originalType,d=e.parentName,u=o(e,["components","mdxType","originalType","parentName"]),p=s(a),c=r,m=p["".concat(d,".").concat(c)]||p[c]||g[c]||l;return a?n.createElement(m,i(i({ref:t},u),{},{components:a})):n.createElement(m,i({ref:t},u))}));function m(e,t){var a=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var l=a.length,i=new Array(l);i[0]=c;var o={};for(var d in t)hasOwnProperty.call(t,d)&&(o[d]=t[d]);o.originalType=e,o[p]="string"==typeof e?e:r,i[1]=o;for(var s=2;s<l;s++)i[s]=a[s];return n.createElement.apply(null,i)}return n.createElement.apply(null,a)}c.displayName="MDXCreateElement"},11234:function(e,t,a){a.r(t),a.d(t,{assets:function(){return d},contentTitle:function(){return i},default:function(){return g},frontMatter:function(){return l},metadata:function(){return o},toc:function(){return s}});var n=a(83117),r=(a(67294),a(3905));const l={id:"upgrade",title:"Upgrade"},i=void 0,o={unversionedId:"admin/upgrade",id:"version-4.17.0/admin/upgrade",title:"Upgrade",description:"If you have questions about upgrades (or need help), please feel free to reach out to us by mailing list or Slack Channel.",source:"@site/versioned_docs/version-4.17.0/admin/upgrade.md",sourceDirName:"admin",slug:"/admin/upgrade",permalink:"/docs/admin/upgrade",draft:!1,tags:[],version:"4.17.0",frontMatter:{id:"upgrade",title:"Upgrade"},sidebar:"docsSidebar",previous:{title:"Metric collection",permalink:"/docs/admin/metrics"},next:{title:"BookKeeper Admin REST API",permalink:"/docs/admin/http"}},d={},s=[{value:"Overview",id:"overview",level:2},{value:"Canary",id:"canary",level:2},{value:"Rollback Canaries",id:"rollback-canaries",level:3},{value:"Upgrade Steps",id:"upgrade-steps",level:2},{value:"Upgrade Bookies",id:"upgrade-bookies",level:3},{value:"Upgrade Guides",id:"upgrade-guides",level:2},{value:"4.6.x to 4.7.0 upgrade",id:"46x-to-470-upgrade",level:3},{value:"Common Configuration Changes",id:"common-configuration-changes",level:4},{value:"New Settings",id:"new-settings",level:5},{value:"Deprecated Settings",id:"deprecated-settings",level:5},{value:"Changed Settings",id:"changed-settings",level:5},{value:"Server Configuration Changes",id:"server-configuration-changes",level:4},{value:"New Settings",id:"new-settings-1",level:5},{value:"Deprecated Settings",id:"deprecated-settings-1",level:5},{value:"Changed Settings",id:"changed-settings-1",level:5},{value:"Client Configuration Changes",id:"client-configuration-changes",level:4},{value:"New Settings",id:"new-settings-2",level:5},{value:"Deprecated Settings",id:"deprecated-settings-2",level:5},{value:"Changed Settings",id:"changed-settings-2",level:5},{value:"4.7.x to 4.8.X upgrade",id:"47x-to-48x-upgrade",level:3},{value:"4.5.x to 4.6.x upgrade",id:"45x-to-46x-upgrade",level:3},{value:"4.4.x to 4.5.x upgrade",id:"44x-to-45x-upgrade",level:3}],u={toc:s},p="wrapper";function g(e){let{components:t,...a}=e;return(0,r.kt)(p,(0,n.Z)({},u,a,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("blockquote",null,(0,r.kt)("p",{parentName:"blockquote"},"If you have questions about upgrades (or need help), please feel free to reach out to us by ",(0,r.kt)("a",{parentName:"p",href:"/community/mailing-lists"},"mailing list")," or ",(0,r.kt)("a",{parentName:"p",href:"/community/slack"},"Slack Channel"),".")),(0,r.kt)("h2",{id:"overview"},"Overview"),(0,r.kt)("p",null,"Consider the below guidelines in preparation for upgrading."),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Always back up all your configuration files before upgrading."),(0,r.kt)("li",{parentName:"ul"},"Read through the documentation and draft an upgrade plan that matches your specific requirements and environment before starting the upgrade process.\nPut differently, don't start working through the guide on a live cluster. Read guide entirely, make a plan, then execute the plan."),(0,r.kt)("li",{parentName:"ul"},"Pay careful consideration to the order in which components are upgraded. In general, you need to upgrade bookies first and then upgrade your clients."),(0,r.kt)("li",{parentName:"ul"},"If autorecovery is running along with bookies, you need to pay attention to the upgrade sequence."),(0,r.kt)("li",{parentName:"ul"},"Read the release notes carefully for each release. They contain not only information about noteworthy features, but also changes to configurations\nthat may impact your upgrade."),(0,r.kt)("li",{parentName:"ul"},"Always upgrade one or a small set of bookies to canary new version before upgraing all bookies in your cluster.")),(0,r.kt)("h2",{id:"canary"},"Canary"),(0,r.kt)("p",null,"It is wise to canary an upgraded version in one or small set of bookies before upgrading all bookies in your live cluster."),(0,r.kt)("p",null,"You can follow below steps on how to canary a upgraded version:"),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},"Stop a Bookie."),(0,r.kt)("li",{parentName:"ol"},"Upgrade the binary and configuration."),(0,r.kt)("li",{parentName:"ol"},"Start the Bookie in ",(0,r.kt)("inlineCode",{parentName:"li"},"ReadOnly")," mode. This can be used to verify if the Bookie of this new version can run well for read workload."),(0,r.kt)("li",{parentName:"ol"},"Once the Bookie is running at ",(0,r.kt)("inlineCode",{parentName:"li"},"ReadOnly")," mode successfully for a while, restart the Bookie in ",(0,r.kt)("inlineCode",{parentName:"li"},"Write/Read")," mode."),(0,r.kt)("li",{parentName:"ol"},"After step 4, the Bookie will serve both write and read traffic.")),(0,r.kt)("h3",{id:"rollback-canaries"},"Rollback Canaries"),(0,r.kt)("p",null,"If problems occur during canarying an upgraded version, you can simply take down the problematic Bookie node. The remain bookies in the old cluster\nwill repair this problematic bookie node by autorecovery. Nothing needs to be worried about."),(0,r.kt)("h2",{id:"upgrade-steps"},"Upgrade Steps"),(0,r.kt)("p",null,"Once you determined a version is safe to upgrade in a few nodes in your cluster, you can perform following steps to upgrade all bookies in your cluster."),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},"Determine if autorecovery is running along with bookies. If yes, check if the clients (either new clients with new binary or old clients with new configurations)\nare allowed to talk to old bookies; if clients are not allowed to talk to old bookies, please ",(0,r.kt)("a",{parentName:"li",href:"../reference/cli/#autorecovery-1"},"disable autorecovery")," during upgrade."),(0,r.kt)("li",{parentName:"ol"},"Decide on performing a rolling upgrade or a downtime upgrade."),(0,r.kt)("li",{parentName:"ol"},"Upgrade all Bookies (more below)"),(0,r.kt)("li",{parentName:"ol"},"If autorecovery was disabled during upgrade, ",(0,r.kt)("a",{parentName:"li",href:"../reference/cli/#autorecovery-1"},"enable autorecovery"),"."),(0,r.kt)("li",{parentName:"ol"},"After all bookies are upgraded, build applications that use ",(0,r.kt)("inlineCode",{parentName:"li"},"BookKeeper client")," against the new bookkeeper libraries and deploy the new versions.")),(0,r.kt)("h3",{id:"upgrade-bookies"},"Upgrade Bookies"),(0,r.kt)("p",null,"In a rolling upgrade scenario, upgrade one Bookie at a time. In a downtime upgrade scenario, take the entire cluster down, upgrade each Bookie, then start the cluster."),(0,r.kt)("p",null,"For each Bookie:"),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},"Stop the bookie."),(0,r.kt)("li",{parentName:"ol"},"Upgrade the software (either new binary or new configuration)"),(0,r.kt)("li",{parentName:"ol"},"Start the bookie.")),(0,r.kt)("h2",{id:"upgrade-guides"},"Upgrade Guides"),(0,r.kt)("p",null,"We describes the general upgrade method in Apache BookKeeper as above. We will cover the details for individual versions."),(0,r.kt)("h3",{id:"46x-to-470-upgrade"},"4.6.x to 4.7.0 upgrade"),(0,r.kt)("p",null,"There isn't any protocol related backward compabilities changes in 4.7.0. So you can follow the general upgrade sequence to upgrade from 4.6.x to 4.7.0."),(0,r.kt)("p",null,"However, we list a list of changes that you might want to know."),(0,r.kt)("h4",{id:"common-configuration-changes"},"Common Configuration Changes"),(0,r.kt)("p",null,"This section documents the common configuration changes that applied for both clients and servers."),(0,r.kt)("h5",{id:"new-settings"},"New Settings"),(0,r.kt)("p",null,"Following settings are newly added in 4.7.0."),(0,r.kt)("table",null,(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:null},"Name"),(0,r.kt)("th",{parentName:"tr",align:null},"Default Value"),(0,r.kt)("th",{parentName:"tr",align:null},"Description"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"allowShadedLedgerManagerFactoryClass"),(0,r.kt)("td",{parentName:"tr",align:null},"false"),(0,r.kt)("td",{parentName:"tr",align:null},"The allows bookkeeper client to connect to a bookkeeper cluster using a shaded ledger manager factory")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"shadedLedgerManagerFactoryClassPrefix"),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"dlshade.")),(0,r.kt)("td",{parentName:"tr",align:null},"The shaded ledger manager factory prefix. This is used when ",(0,r.kt)("inlineCode",{parentName:"td"},"allowShadedLedgerManagerFactoryClass")," is set to true")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"metadataServiceUri"),(0,r.kt)("td",{parentName:"tr",align:null},"null"),(0,r.kt)("td",{parentName:"tr",align:null},"metadata service uri that bookkeeper is used for loading corresponding metadata driver and resolving its metadata service location")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"permittedStartupUsers"),(0,r.kt)("td",{parentName:"tr",align:null},"null"),(0,r.kt)("td",{parentName:"tr",align:null},"The list of users are permitted to run the bookie process. Any users can run the bookie process if it is not set")))),(0,r.kt)("h5",{id:"deprecated-settings"},"Deprecated Settings"),(0,r.kt)("p",null,"There are no common settings deprecated at 4.7.0."),(0,r.kt)("h5",{id:"changed-settings"},"Changed Settings"),(0,r.kt)("p",null,"There are no common settings whose default value are changed at 4.7.0."),(0,r.kt)("h4",{id:"server-configuration-changes"},"Server Configuration Changes"),(0,r.kt)("h5",{id:"new-settings-1"},"New Settings"),(0,r.kt)("p",null,"Following settings are newly added in 4.7.0."),(0,r.kt)("table",null,(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:null},"Name"),(0,r.kt)("th",{parentName:"tr",align:null},"Default Value"),(0,r.kt)("th",{parentName:"tr",align:null},"Description"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"verifyMetadataOnGC"),(0,r.kt)("td",{parentName:"tr",align:null},"false"),(0,r.kt)("td",{parentName:"tr",align:null},"Whether the bookie is configured to double check the ledgers' metadata prior to garbage collecting them")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"auditorLedgerVerificationPercentage"),(0,r.kt)("td",{parentName:"tr",align:null},"0"),(0,r.kt)("td",{parentName:"tr",align:null},"The percentage of a ledger (fragment)'s entries will be verified by Auditor before claiming a ledger (fragment) is missing")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"numHighPriorityWorkerThreads"),(0,r.kt)("td",{parentName:"tr",align:null},"8"),(0,r.kt)("td",{parentName:"tr",align:null},"The number of threads that should be used for high priority requests (i.e. recovery reads and adds, and fencing). If zero, reads are handled by Netty threads directly.")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"useShortHostName"),(0,r.kt)("td",{parentName:"tr",align:null},"false"),(0,r.kt)("td",{parentName:"tr",align:null},"Whether the bookie should use short hostname or ",(0,r.kt)("a",{parentName:"td",href:"https://en.wikipedia.org/wiki/Fully_qualified_domain_name"},"FQDN")," hostname for registration and ledger metadata when useHostNameAsBookieID is enabled.")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"minUsableSizeForEntryLogCreation"),(0,r.kt)("td",{parentName:"tr",align:null},"1.2 * ",(0,r.kt)("inlineCode",{parentName:"td"},"logSizeLimit")),(0,r.kt)("td",{parentName:"tr",align:null},"Minimum safe usable size to be available in ledger directory for bookie to create entry log files (in bytes).")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"minUsableSizeForHighPriorityWrites"),(0,r.kt)("td",{parentName:"tr",align:null},"1.2 * ",(0,r.kt)("inlineCode",{parentName:"td"},"logSizeLimit")),(0,r.kt)("td",{parentName:"tr",align:null},"Minimum safe usable size to be available in ledger directory for bookie to accept high priority writes even it is in readonly mode.")))),(0,r.kt)("h5",{id:"deprecated-settings-1"},"Deprecated Settings"),(0,r.kt)("p",null,"Following settings are deprecated since 4.7.0."),(0,r.kt)("table",null,(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:null},"Name"),(0,r.kt)("th",{parentName:"tr",align:null},"Description"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"registrationManagerClass"),(0,r.kt)("td",{parentName:"tr",align:null},"The registration manager class used by server to discover registration manager. It is replaced by ",(0,r.kt)("inlineCode",{parentName:"td"},"metadataServiceUri"),".")))),(0,r.kt)("h5",{id:"changed-settings-1"},"Changed Settings"),(0,r.kt)("p",null,"The default values of following settings are changed since 4.7.0."),(0,r.kt)("table",null,(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:null},"Name"),(0,r.kt)("th",{parentName:"tr",align:null},"Old Default Value"),(0,r.kt)("th",{parentName:"tr",align:null},"New Default Value"),(0,r.kt)("th",{parentName:"tr",align:null},"Notes"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"numLongPollWorkerThreads"),(0,r.kt)("td",{parentName:"tr",align:null},"10"),(0,r.kt)("td",{parentName:"tr",align:null},"0"),(0,r.kt)("td",{parentName:"tr",align:null},"If the number of threads is zero or negative, bookie can fallback to use read threads for long poll. This allows not creating threads if application doesn't use long poll feature.")))),(0,r.kt)("h4",{id:"client-configuration-changes"},"Client Configuration Changes"),(0,r.kt)("h5",{id:"new-settings-2"},"New Settings"),(0,r.kt)("p",null,"Following settings are newly added in 4.7.0."),(0,r.kt)("table",null,(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:null},"Name"),(0,r.kt)("th",{parentName:"tr",align:null},"Default Value"),(0,r.kt)("th",{parentName:"tr",align:null},"Description"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"maxNumEnsembleChanges"),(0,r.kt)("td",{parentName:"tr",align:null},"Integer.MAX","_","VALUE"),(0,r.kt)("td",{parentName:"tr",align:null},"The max allowed ensemble change number before sealing a ledger on failures")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"timeoutMonitorIntervalSec"),(0,r.kt)("td",{parentName:"tr",align:null},"min(",(0,r.kt)("inlineCode",{parentName:"td"},"addEntryTimeoutSec"),", ",(0,r.kt)("inlineCode",{parentName:"td"},"addEntryQuorumTimeoutSec"),", ",(0,r.kt)("inlineCode",{parentName:"td"},"readEntryTimeoutSec"),")"),(0,r.kt)("td",{parentName:"tr",align:null},"The interval between successive executions of the operation timeout monitor, in seconds")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"ensemblePlacementPolicyOrderSlowBookies"),(0,r.kt)("td",{parentName:"tr",align:null},"false"),(0,r.kt)("td",{parentName:"tr",align:null},"Flag to enable/disable reordering slow bookies in placement policy")))),(0,r.kt)("h5",{id:"deprecated-settings-2"},"Deprecated Settings"),(0,r.kt)("p",null,"Following settings are deprecated since 4.7.0."),(0,r.kt)("table",null,(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:null},"Name"),(0,r.kt)("th",{parentName:"tr",align:null},"Description"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"clientKeyStoreType"),(0,r.kt)("td",{parentName:"tr",align:null},"Replaced by ",(0,r.kt)("inlineCode",{parentName:"td"},"tlsKeyStoreType"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"clientKeyStore"),(0,r.kt)("td",{parentName:"tr",align:null},"Replaced by ",(0,r.kt)("inlineCode",{parentName:"td"},"tlsKeyStore"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"clientKeyStorePasswordPath"),(0,r.kt)("td",{parentName:"tr",align:null},"Replaced by ",(0,r.kt)("inlineCode",{parentName:"td"},"tlsKeyStorePasswordPath"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"clientTrustStoreType"),(0,r.kt)("td",{parentName:"tr",align:null},"Replaced by ",(0,r.kt)("inlineCode",{parentName:"td"},"tlsTrustStoreType"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"clientTrustStore"),(0,r.kt)("td",{parentName:"tr",align:null},"Replaced by ",(0,r.kt)("inlineCode",{parentName:"td"},"tlsTrustStore"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"clientTrustStorePasswordPath"),(0,r.kt)("td",{parentName:"tr",align:null},"Replaced by ",(0,r.kt)("inlineCode",{parentName:"td"},"tlsTrustStorePasswordPath"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"registrationClientClass"),(0,r.kt)("td",{parentName:"tr",align:null},"The registration client class used by client to discover registration service. It is replaced by ",(0,r.kt)("inlineCode",{parentName:"td"},"metadataServiceUri"),".")))),(0,r.kt)("h5",{id:"changed-settings-2"},"Changed Settings"),(0,r.kt)("p",null,"The default values of following settings are changed since 4.7.0."),(0,r.kt)("table",null,(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:null},"Name"),(0,r.kt)("th",{parentName:"tr",align:null},"Old Default Value"),(0,r.kt)("th",{parentName:"tr",align:null},"New Default Value"),(0,r.kt)("th",{parentName:"tr",align:null},"Notes"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"enableDigestTypeAutodetection"),(0,r.kt)("td",{parentName:"tr",align:null},"false"),(0,r.kt)("td",{parentName:"tr",align:null},"true"),(0,r.kt)("td",{parentName:"tr",align:null},"Autodetect the digest type and passwd when opening a ledger. It will ignore the provided digest type, but still verify the provided passwd.")))),(0,r.kt)("h3",{id:"47x-to-48x-upgrade"},"4.7.x to 4.8.X upgrade"),(0,r.kt)("p",null,"In 4.8.x a new feature is added to persist explicitLac in FileInfo and explicitLac entry in Journal. (Note: Currently this feature is not available if your ledgerStorageClass is DbLedgerStorage, ISSUE #1533 is going to address it) Hence current journal format version is bumped to 6 and current FileInfo header version is bumped to 1. But since default config values of 'journalFormatVersionToWrite' and 'fileInfoFormatVersionToWrite' are set to older versions, this feature is off by default. To enable this feature those config values should be set to current versions. Once this is enabled then we cannot rollback to previous Bookie versions (4.7.x and older), since older version code would not be able to deal with explicitLac entry in Journal file while replaying journal and also reading Header of Index files / FileInfo would fail reading Index files with newer FileInfo version. So in summary, it is a non-rollbackable feature and it applies even if explicitLac is not being used."),(0,r.kt)("h3",{id:"45x-to-46x-upgrade"},"4.5.x to 4.6.x upgrade"),(0,r.kt)("p",null,"There isn't any protocol related backward compabilities changes in 4.6.x. So you can follow the general upgrade sequence to upgrade from 4.5.x to 4.6.x."),(0,r.kt)("h3",{id:"44x-to-45x-upgrade"},"4.4.x to 4.5.x upgrade"),(0,r.kt)("p",null,"There isn't any protocol related backward compabilities changes in 4.5.0. So you can follow the general upgrade sequence to upgrade from 4.4.x to 4.5.x.\nHowever, we list a list of things that you might want to know."),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},"4.5.x upgrades netty from 3.x to 4.x. The memory usage pattern might be changed a bit. Netty 4 uses more direct memory. Please pay attention to your memory usage\nand adjust the JVM settings accordingly."),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("inlineCode",{parentName:"li"},"multi journals")," is a non-rollbackable feature. If you configure a bookie to use multiple journals on 4.5.x you can not roll the bookie back to use 4.4.x. You have\nto take a bookie out and recover it if you want to rollback to 4.4.x.")),(0,r.kt)("p",null,"If you are planning to upgrade a non-secured cluster to a secured cluster enabling security features in 4.5.0, please read ",(0,r.kt)("a",{parentName:"p",href:"../security/overview"},"BookKeeper Security")," for more details."))}g.isMDXComponent=!0}}]);
\ No newline at end of file
diff --git a/content/assets/js/d1db332c.5a078b97.js b/content/assets/js/d1db332c.5a078b97.js
new file mode 100644
index 0000000..c4b1bf8
--- /dev/null
+++ b/content/assets/js/d1db332c.5a078b97.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunksite_3=self.webpackChunksite_3||[]).push([[4380],{3905:function(e,t,r){r.d(t,{Zo:function(){return h},kt:function(){return m}});var a=r(67294);function n(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function l(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,a)}return r}function o(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?l(Object(r),!0).forEach((function(t){n(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):l(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function i(e,t){if(null==e)return{};var r,a,n=function(e,t){if(null==e)return{};var r,a,n={},l=Object.keys(e);for(a=0;a<l.length;a++)r=l[a],t.indexOf(r)>=0||(n[r]=e[r]);return n}(e,t);if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(e);for(a=0;a<l.length;a++)r=l[a],t.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}var s=a.createContext({}),d=function(e){var t=a.useContext(s),r=t;return e&&(r="function"==typeof e?e(t):o(o({},t),e)),r},h=function(e){var t=d(e.components);return a.createElement(s.Provider,{value:t},e.children)},p="mdxType",g={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},u=a.forwardRef((function(e,t){var r=e.components,n=e.mdxType,l=e.originalType,s=e.parentName,h=i(e,["components","mdxType","originalType","parentName"]),p=d(r),u=n,m=p["".concat(s,".").concat(u)]||p[u]||g[u]||l;return r?a.createElement(m,o(o({ref:t},h),{},{components:r})):a.createElement(m,o({ref:t},h))}));function m(e,t){var r=arguments,n=t&&t.mdxType;if("string"==typeof e||n){var l=r.length,o=new Array(l);o[0]=u;var i={};for(var s in t)hasOwnProperty.call(t,s)&&(i[s]=t[s]);i.originalType=e,i[p]="string"==typeof e?e:n,o[1]=i;for(var d=2;d<l;d++)o[d]=r[d];return a.createElement.apply(null,o)}return a.createElement.apply(null,r)}u.displayName="MDXCreateElement"},71975:function(e,t,r){r.r(t),r.d(t,{assets:function(){return s},contentTitle:function(){return o},default:function(){return g},frontMatter:function(){return l},metadata:function(){return i},toc:function(){return d}});var a=r(83117),n=(r(67294),r(3905));const l={id:"protocol",title:"The BookKeeper protocol"},o=void 0,i={unversionedId:"development/protocol",id:"version-4.17.0/development/protocol",title:"The BookKeeper protocol",description:"BookKeeper uses a special replication protocol for guaranteeing persistent storage of entries in an ensemble of bookies.",source:"@site/versioned_docs/version-4.17.0/development/protocol.md",sourceDirName:"development",slug:"/development/protocol",permalink:"/docs/development/protocol",draft:!1,tags:[],version:"4.17.0",frontMatter:{id:"protocol",title:"The BookKeeper protocol"},sidebar:"docsSidebar",previous:{title:"ZooKeeper Authentication",permalink:"/docs/security/zookeeper"},next:{title:"BookKeeper configuration",permalink:"/docs/reference/config"}},s={},d=[{value:"Ledgers",id:"ledgers",level:2},{value:"Ledger metadata",id:"ledger-metadata",level:3},{value:"Ensembles",id:"ensembles",level:3},{value:"Write quorums",id:"write-quorums",level:3},{value:"Ack quorums",id:"ack-quorums",level:3},{value:"Guarantees",id:"guarantees",level:3},{value:"Writing to ledgers",id:"writing-to-ledgers",level:2},{value:"Closing a ledger as a writer",id:"closing-a-ledger-as-a-writer",level:3},{value:"Closing a ledger as a reader",id:"closing-a-ledger-as-a-reader",level:3},{value:"Ledgers to logs",id:"ledgers-to-logs",level:2},{value:"Opening a log",id:"opening-a-log",level:3},{value:"Rolling ledgers",id:"rolling-ledgers",level:3}],h={toc:d},p="wrapper";function g(e){let{components:t,...r}=e;return(0,n.kt)(p,(0,a.Z)({},h,r,{components:t,mdxType:"MDXLayout"}),(0,n.kt)("p",null,"BookKeeper uses a special replication protocol for guaranteeing persistent storage of entries in an ensemble of bookies."),(0,n.kt)("blockquote",null,(0,n.kt)("p",{parentName:"blockquote"},"This document assumes that you have some knowledge of leader election and log replication and how these can be used in a distributed system. If not, we recommend reading the ",(0,n.kt)("a",{parentName:"p",href:"../api/ledger-api#example-application"},"example application")," documentation first.")),(0,n.kt)("h2",{id:"ledgers"},"Ledgers"),(0,n.kt)("p",null,"Ledgers are the basic building block of BookKeeper and the level at which BookKeeper makes its persistent storage guarantees. A replicated log consists of an ordered list of ledgers. See ",(0,n.kt)("a",{parentName:"p",href:"#ledgers-to-logs"},"Ledgers to logs")," for info on building a replicated log from ledgers."),(0,n.kt)("p",null,"Ledgers are composed of metadata and entries. The metadata is stored in ZooKeeper, which provides a ",(0,n.kt)("em",{parentName:"p"},"compare-and-swap")," (CAS) operation. Entries are stored on storage nodes known as bookies."),(0,n.kt)("p",null,"A ledger has a single writer and multiple readers (SWMR)."),(0,n.kt)("h3",{id:"ledger-metadata"},"Ledger metadata"),(0,n.kt)("p",null,"A ledger's metadata contains the following:"),(0,n.kt)("table",null,(0,n.kt)("thead",{parentName:"table"},(0,n.kt)("tr",{parentName:"thead"},(0,n.kt)("th",{parentName:"tr",align:"left"},"Parameter"),(0,n.kt)("th",{parentName:"tr",align:"left"},"Name"),(0,n.kt)("th",{parentName:"tr",align:"left"},"Meaning"))),(0,n.kt)("tbody",{parentName:"table"},(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:"left"},"Identifer"),(0,n.kt)("td",{parentName:"tr",align:"left"}),(0,n.kt)("td",{parentName:"tr",align:"left"},"A 64-bit integer, unique within the system")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:"left"},"Ensemble size"),(0,n.kt)("td",{parentName:"tr",align:"left"},(0,n.kt)("strong",{parentName:"td"},"E")),(0,n.kt)("td",{parentName:"tr",align:"left"},"The number of nodes the ledger is stored on")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:"left"},"Write quorum size"),(0,n.kt)("td",{parentName:"tr",align:"left"},(0,n.kt)("strong",{parentName:"td"},"Q",(0,n.kt)("sub",null,"w"))),(0,n.kt)("td",{parentName:"tr",align:"left"},"The number of nodes each entry is written to. In effect, the max replication for the entry.")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:"left"},"Ack quorum size"),(0,n.kt)("td",{parentName:"tr",align:"left"},(0,n.kt)("strong",{parentName:"td"},"Q",(0,n.kt)("sub",null,"a"))),(0,n.kt)("td",{parentName:"tr",align:"left"},"The number of nodes an entry must be acknowledged on. In effect, the minimum replication for the entry.")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:"left"},"Current state"),(0,n.kt)("td",{parentName:"tr",align:"left"}),(0,n.kt)("td",{parentName:"tr",align:"left"},"The current status of the ledger. One of ",(0,n.kt)("inlineCode",{parentName:"td"},"OPEN"),", ",(0,n.kt)("inlineCode",{parentName:"td"},"CLOSED"),", or ",(0,n.kt)("inlineCode",{parentName:"td"},"IN_RECOVERY"),".")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:"left"},"Last entry"),(0,n.kt)("td",{parentName:"tr",align:"left"}),(0,n.kt)("td",{parentName:"tr",align:"left"},"The last entry in the ledger or ",(0,n.kt)("inlineCode",{parentName:"td"},"NULL")," is the current state is not ",(0,n.kt)("inlineCode",{parentName:"td"},"CLOSED"),".")))),(0,n.kt)("p",null,"In addition, each ledger's metadata consists of one or more ",(0,n.kt)("em",{parentName:"p"},"fragments"),". Each fragment is either"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"the first entry of a fragment or"),(0,n.kt)("li",{parentName:"ul"},"a list of bookies for the fragment.")),(0,n.kt)("p",null,"When creating a ledger, the following invariant must hold:"),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"E >= Q",(0,n.kt)("sub",null,"w")," >= Qa")),(0,n.kt)("p",null,"Thus, the ensemble size (",(0,n.kt)("strong",{parentName:"p"},"E"),") must be larger than the write quorum size (",(0,n.kt)("strong",{parentName:"p"},"Q",(0,n.kt)("sub",null,"w")),"), which must in turn be larger than the ack quorum size (",(0,n.kt)("strong",{parentName:"p"},"Q",(0,n.kt)("sub",null,"a")),"). If that condition does not hold, then the ledger creation operation will fail."),(0,n.kt)("h3",{id:"ensembles"},"Ensembles"),(0,n.kt)("p",null,"When a ledger is created, ",(0,n.kt)("strong",{parentName:"p"},"E")," bookies are chosen for the entries of that ledger. The bookies are the initial ensemble of the ledger. A ledger can have multiple ensembles, but an entry has only one ensemble. Changes in the ensemble involve a new fragment being added to the ledger."),(0,n.kt)("p",null,"Take the following example. In this ledger, with ensemble size of 3, there are two fragments and thus two ensembles, one starting at entry 0, the second at entry 12. The second ensemble differs from the first only by its first element. This could be because bookie1 has failed and therefore had to be replaced."),(0,n.kt)("table",null,(0,n.kt)("thead",{parentName:"table"},(0,n.kt)("tr",{parentName:"thead"},(0,n.kt)("th",{parentName:"tr",align:"left"},"First entry"),(0,n.kt)("th",{parentName:"tr",align:"left"},"Bookies"))),(0,n.kt)("tbody",{parentName:"table"},(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:"left"},"0"),(0,n.kt)("td",{parentName:"tr",align:"left"},"B1, B2, B3")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:"left"},"12"),(0,n.kt)("td",{parentName:"tr",align:"left"},"B4, B2, B3")))),(0,n.kt)("h3",{id:"write-quorums"},"Write quorums"),(0,n.kt)("p",null,"Each entry in the log is written to ",(0,n.kt)("strong",{parentName:"p"},"Q",(0,n.kt)("sub",null,"w"))," nodes. This is considered the write quorum for that entry. The write quorum is the subsequence of the ensemble, ",(0,n.kt)("strong",{parentName:"p"},"Q",(0,n.kt)("sub",null,"w"))," in length, and starting at the bookie at index (entryid % ",(0,n.kt)("strong",{parentName:"p"},"E"),")."),(0,n.kt)("p",null,"For example, in a ledger of ",(0,n.kt)("strong",{parentName:"p"},"E")," = 4, ",(0,n.kt)("strong",{parentName:"p"},"Q",(0,n.kt)("sub",null,"w"))," = 3, and ",(0,n.kt)("strong",{parentName:"p"},"Q",(0,n.kt)("sub",null,"a"))," = 2, with an ensemble consisting of B1, B2, B3, and B4, the write quorums for the first 6 entries will be:"),(0,n.kt)("table",null,(0,n.kt)("thead",{parentName:"table"},(0,n.kt)("tr",{parentName:"thead"},(0,n.kt)("th",{parentName:"tr",align:"left"},"Entry"),(0,n.kt)("th",{parentName:"tr",align:"left"},"Write quorum"))),(0,n.kt)("tbody",{parentName:"table"},(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:"left"},"0"),(0,n.kt)("td",{parentName:"tr",align:"left"},"B1, B2, B3")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:"left"},"1"),(0,n.kt)("td",{parentName:"tr",align:"left"},"B2, B3, B4")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:"left"},"2"),(0,n.kt)("td",{parentName:"tr",align:"left"},"B3, B4, B1")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:"left"},"3"),(0,n.kt)("td",{parentName:"tr",align:"left"},"B4, B1, B2")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:"left"},"4"),(0,n.kt)("td",{parentName:"tr",align:"left"},"B1, B2, B3")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:"left"},"5"),(0,n.kt)("td",{parentName:"tr",align:"left"},"B2, B3, B4")))),(0,n.kt)("p",null,"There are only ",(0,n.kt)("strong",{parentName:"p"},"E")," distinct write quorums in any ensemble. If ",(0,n.kt)("strong",{parentName:"p"},"Q",(0,n.kt)("sub",null,"w"))," = ",(0,n.kt)("strong",{parentName:"p"},"E"),", then there is only one, as no striping occurs."),(0,n.kt)("h3",{id:"ack-quorums"},"Ack quorums"),(0,n.kt)("p",null,"The ack quorum for an entry is any subset of the write quorum of size ",(0,n.kt)("strong",{parentName:"p"},"Q",(0,n.kt)("sub",null,"a")),". If ",(0,n.kt)("strong",{parentName:"p"},"Q",(0,n.kt)("sub",null,"a"))," bookies acknowledge an entry, it means it has been fully replicated."),(0,n.kt)("h3",{id:"guarantees"},"Guarantees"),(0,n.kt)("p",null,"The system can tolerate ",(0,n.kt)("strong",{parentName:"p"},"Q",(0,n.kt)("sub",null,"a"))," \u2013 1 failures without data loss."),(0,n.kt)("p",null,"Bookkeeper guarantees that:"),(0,n.kt)("ol",null,(0,n.kt)("li",{parentName:"ol"},"All updates to a ledger will be read in the same order as they were written."),(0,n.kt)("li",{parentName:"ol"},"All clients will read the same sequence of updates from the ledger.")),(0,n.kt)("h2",{id:"writing-to-ledgers"},"Writing to ledgers"),(0,n.kt)("p",null,"writer, ensuring that entry ids are sequential is trivial. A bookie acknowledges a write once it has been persisted to disk and is therefore durable. Once ",(0,n.kt)("strong",{parentName:"p"},"Q",(0,n.kt)("sub",null,"a"))," bookies from the write quorum acknowledge the write, the write is acknowledged to the client, but only if all entries with lower entry ids in the ledger have already been acknowledged to the client."),(0,n.kt)("p",null,"The entry written contains the ledger id, the entry id, the last add confirmed and the payload. The last add confirmed is the last entry which had been acknowledged to the client when this entry was written. Sending this with the entry speeds up recovery of the ledger in the case that the writer crashes."),(0,n.kt)("p",null,"Another client can also read entries in the ledger up as far as the last add confirmed, as we guarantee that all entries thus far have been replicated on Qa nodes, and therefore all future readers will be able to also read it. However, to read like this, the ledger should be opened with a non-fencing open. Otherwise, it would kill the writer."),(0,n.kt)("p",null,"If a node fails to acknowledge a write, the writer will create a new ensemble by replacing the failed node in the current ensemble. It creates a new fragment with this ensemble, starting from the first message that has not been acknowledged to the client. Creating the new fragment involves making a CAS write to the metadata. If the CAS write fails, someone else has modified something in the ledger metadata. This concurrent modification could have been caused by recovery or rereplication. We reread the metadata. If the state of the ledger is no longer ",(0,n.kt)("inlineCode",{parentName:"p"},"OPEN"),", we send an error to the client for any outstanding writes. Otherwise, we try to replace the failed node again."),(0,n.kt)("h3",{id:"closing-a-ledger-as-a-writer"},"Closing a ledger as a writer"),(0,n.kt)("p",null,"Closing a ledger is straightforward for a writer. The writer makes a CAS write to the metadata, changing the state to ",(0,n.kt)("inlineCode",{parentName:"p"},"CLOSED")," and setting the last entry of the ledger to the last entry which we have acknowledged to the client."),(0,n.kt)("p",null,"If the CAS write fails, it means someone else has modified the metadata. We reread the metadata, and retry closing as long as the state of the ledger is still ",(0,n.kt)("inlineCode",{parentName:"p"},"OPEN"),". If the state is ",(0,n.kt)("inlineCode",{parentName:"p"},"IN_RECOVERY")," we send an error to the client. If the state is ",(0,n.kt)("inlineCode",{parentName:"p"},"CLOSED")," and the last entry is the same as the last entry we have acknowledged to the client, we complete the close operation successfully. If the last entry is different from what we have acknowledged to the client, we send an error to the client."),(0,n.kt)("h3",{id:"closing-a-ledger-as-a-reader"},"Closing a ledger as a reader"),(0,n.kt)("p",null,"A reader can also force a ledger to close. Forcing the ledger to close will prevent any writer from adding new entries to the ledger. This is called fencing. This can occur when a writer has crashed or become unavailable, and a new writer wants to take over writing to the log. The new writer must ensure that it has seen all updates from the previous writer, and prevent the previous writer from making any new updates before making any updates of its own."),(0,n.kt)("p",null,"To recover a ledger, we first update the state in the metadata to IN_RECOVERY. We then send a fence message to all the bookies in the last fragment of the ledger. When a bookie receives a fence message for a ledger, the fenced state of the ledger is persisted to disk. Once we receive a response from at least (",(0,n.kt)("strong",{parentName:"p"},"Q",(0,n.kt)("sub",null,"w"))," - ",(0,n.kt)("strong",{parentName:"p"},"Q",(0,n.kt)("sub",null,"a")),")+1 bookies from each write quorum in the ensemble, the ledger is fenced."),(0,n.kt)("p",null,"By ensuring we have received a response from at last (",(0,n.kt)("strong",{parentName:"p"},"Q",(0,n.kt)("sub",null,"w"))," - ",(0,n.kt)("strong",{parentName:"p"},"Q",(0,n.kt)("sub",null,"a")),") + 1 bookies in each write quorum, we ensure that, if the old writer is alive and tries to add a new entry there will be no write quorum in which Qa bookies will accept the write. If the old writer tries to update the ensemble, it will fail on the CAS metadata write, and then see that the ledger is in IN_RECOVERY state, and that it therefore shouldn\u2019t try to write to it."),(0,n.kt)("p",null,"The old writer will be able to write entries to individual bookies (we can\u2019t guarantee that the fence message reaches all bookies), but as it will not be able reach ack quorum, it will not be able to send a success response to its client. The client will get a LedgerFenced error instead."),(0,n.kt)("p",null,"It is important to note that when you get a ledger fenced message for an entry, it doesn\u2019t mean that the entry has not been written. It means that the entry may or may not have been written, and this can only be determined after the ledger is recovered. In effect, LedgerFenced should be treated like a timeout."),(0,n.kt)("p",null,"Once the ledger is fenced, recovery can begin. Recovery means finding the last entry of the ledger and closing the ledger. To find the last entry of the ledger, the client asks all bookies for the highest last add confirmed value they have seen. It waits until it has received a response at least (",(0,n.kt)("strong",{parentName:"p"},"Q",(0,n.kt)("sub",null,"w"))," - ",(0,n.kt)("strong",{parentName:"p"},"Q",(0,n.kt)("sub",null,"a")),") + 1 bookies from each write quorum, and takes the highest response as the entry id to start reading forward from. It then starts reading forward in the ledger, one entry at a time, replicating all entries it sees to the entire write quorum for that entry. Once it can no longer read any more entries, it updates the state in the metadata to ",(0,n.kt)("inlineCode",{parentName:"p"},"CLOSED"),", and sets the last entry of the ledger to the last entry it wrote. Multiple readers can try to recovery a ledger at the same time, but as the metadata write is CAS they will all converge on the same last entry of the ledger."),(0,n.kt)("h2",{id:"ledgers-to-logs"},"Ledgers to logs"),(0,n.kt)("p",null,"In BookKeeper, ledgers can be used to build a replicated log for your system. All guarantees provided by BookKeeper are at the ledger level. Guarantees on the whole log can be built using the ledger guarantees and any consistent datastore with a compare-and-swap (CAS) primitive. BookKeeper uses ZooKeeper as the datastore but others could theoretically be used."),(0,n.kt)("p",null,"A log in BookKeeper is built from some number of ledgers, with a fixed order. A ledger represents a single segment of the log. A ledger could be the whole period that one node was the leader, or there could be multiple ledgers for a single period of leadership. However, there can only ever be one leader that adds entries to a single ledger. Ledgers cannot be reopened for writing once they have been closed/recovered."),(0,n.kt)("blockquote",null,(0,n.kt)("p",{parentName:"blockquote"},"BookKeeper does ",(0,n.kt)("em",{parentName:"p"},"not")," provide leader election. You must use a system like ZooKeeper for this.")),(0,n.kt)("p",null,"In many cases, leader election is really leader suggestion. Multiple nodes could think that they are leader at any one time. It is the job of the log to guarantee that only one can write changes to the system."),(0,n.kt)("h3",{id:"opening-a-log"},"Opening a log"),(0,n.kt)("p",null,"Once a node thinks it is leader for a particular log, it must take the following steps:"),(0,n.kt)("ol",null,(0,n.kt)("li",{parentName:"ol"},"Read the list of ledgers for the log"),(0,n.kt)("li",{parentName:"ol"},"Fence the last two ledgers in the list. Two ledgers are fenced because the writer may be writing to the second-to-last ledger while adding the last ledger to the list."),(0,n.kt)("li",{parentName:"ol"},"Create a new ledger"),(0,n.kt)("li",{parentName:"ol"},"Add the new ledger to the ledger list"),(0,n.kt)("li",{parentName:"ol"},"Write the new ledger back to the datastore using a CAS operation")),(0,n.kt)("p",null,"The fencing in step 2 and the CAS operation in step 5 prevent two nodes from thinking that they have leadership at any one time."),(0,n.kt)("p",null,"The CAS operation will fail if the list of ledgers has changed between reading it and writing back the new list. When the CAS operation fails, the leader must start at step 1 again. Even better, they should check that they are in fact still the leader with the system that is providing leader election. The protocol will work correctly without this step, though it will be able to make very little progress if two nodes think they are leader and are duelling for the log."),(0,n.kt)("p",null,"The node must not serve any writes until step 5 completes successfully."),(0,n.kt)("h3",{id:"rolling-ledgers"},"Rolling ledgers"),(0,n.kt)("p",null,"The leader may wish to close the current ledger and open a new one every so often. Ledgers can only be deleted as a whole. If you don't roll the log, you won't be able to clean up old entries in the log without a leader change. By closing the current ledger and adding a new one, the leader allows the log to be truncated whenever that data is no longer needed. The steps for rolling the log is similar to those for creating a new ledger."),(0,n.kt)("ol",null,(0,n.kt)("li",{parentName:"ol"},"Create a new ledger"),(0,n.kt)("li",{parentName:"ol"},"Add the new ledger to the ledger list"),(0,n.kt)("li",{parentName:"ol"},"Write the new ledger list to the datastore using CAS"),(0,n.kt)("li",{parentName:"ol"},"Close the previous ledger")),(0,n.kt)("p",null,"By deferring the closing of the previous ledger until step 4, we can continue writing to the log while we perform metadata update operations to add the new ledger. This is safe as long as you fence the last 2 ledgers when acquiring leadership."))}g.isMDXComponent=!0}}]);
\ No newline at end of file
diff --git a/content/assets/js/d972a432.b894eaf4.js b/content/assets/js/d972a432.b894eaf4.js
new file mode 100644
index 0000000..afd6c8a
--- /dev/null
+++ b/content/assets/js/d972a432.b894eaf4.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunksite_3=self.webpackChunksite_3||[]).push([[63],{3905:function(e,t,r){r.d(t,{Zo:function(){return p},kt:function(){return k}});var o=r(67294);function a(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function n(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,o)}return r}function i(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?n(Object(r),!0).forEach((function(t){a(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):n(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function l(e,t){if(null==e)return{};var r,o,a=function(e,t){if(null==e)return{};var r,o,a={},n=Object.keys(e);for(o=0;o<n.length;o++)r=n[o],t.indexOf(r)>=0||(a[r]=e[r]);return a}(e,t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);for(o=0;o<n.length;o++)r=n[o],t.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(a[r]=e[r])}return a}var c=o.createContext({}),s=function(e){var t=o.useContext(c),r=t;return e&&(r="function"==typeof e?e(t):i(i({},t),e)),r},p=function(e){var t=s(e.components);return o.createElement(c.Provider,{value:t},e.children)},u="mdxType",h={inlineCode:"code",wrapper:function(e){var t=e.children;return o.createElement(o.Fragment,{},t)}},d=o.forwardRef((function(e,t){var r=e.components,a=e.mdxType,n=e.originalType,c=e.parentName,p=l(e,["components","mdxType","originalType","parentName"]),u=s(r),d=a,k=u["".concat(c,".").concat(d)]||u[d]||h[d]||n;return r?o.createElement(k,i(i({ref:t},p),{},{components:r})):o.createElement(k,i({ref:t},p))}));function k(e,t){var r=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var n=r.length,i=new Array(n);i[0]=d;var l={};for(var c in t)hasOwnProperty.call(t,c)&&(l[c]=t[c]);l.originalType=e,l[u]="string"==typeof e?e:a,i[1]=l;for(var s=2;s<n;s++)i[s]=r[s];return o.createElement.apply(null,i)}return o.createElement.apply(null,r)}d.displayName="MDXCreateElement"},97853:function(e,t,r){r.r(t),r.d(t,{assets:function(){return c},contentTitle:function(){return i},default:function(){return h},frontMatter:function(){return n},metadata:function(){return l},toc:function(){return s}});var o=r(83117),a=(r(67294),r(3905));const n={id:"autorecovery",title:"Using AutoRecovery"},i=void 0,l={unversionedId:"admin/autorecovery",id:"version-4.17.0/admin/autorecovery",title:"Using AutoRecovery",description:"When a bookie crashes, all ledgers on that bookie become under-replicated. In order to bring all ledgers in your BookKeeper cluster back to full replication, you'll need to recover the data from any offline bookies. There are two ways to recover bookies' data:",source:"@site/versioned_docs/version-4.17.0/admin/autorecovery.md",sourceDirName:"admin",slug:"/admin/autorecovery",permalink:"/docs/admin/autorecovery",draft:!1,tags:[],version:"4.17.0",frontMatter:{id:"autorecovery",title:"Using AutoRecovery"},sidebar:"docsSidebar",previous:{title:"BookKeeper administration",permalink:"/docs/admin/bookies"},next:{title:"Metric collection",permalink:"/docs/admin/metrics"}},c={},s=[{value:"Manual recovery",id:"manual-recovery",level:2},{value:"The manual recovery process",id:"the-manual-recovery-process",level:3},{value:"AutoRecovery",id:"autorecovery",level:2},{value:"Running AutoRecovery",id:"running-autorecovery",level:2},{value:"Configuration",id:"configuration",level:2},{value:"Disable AutoRecovery",id:"disable-autorecovery",level:2},{value:"AutoRecovery architecture",id:"autorecovery-architecture",level:2},{value:"Auditor",id:"auditor",level:3},{value:"Replication Worker",id:"replication-worker",level:3},{value:"The rereplication process",id:"the-rereplication-process",level:3}],p={toc:s},u="wrapper";function h(e){let{components:t,...r}=e;return(0,a.kt)(u,(0,o.Z)({},p,r,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("p",null,"When a bookie crashes, all ledgers on that bookie become under-replicated. In order to bring all ledgers in your BookKeeper cluster back to full replication, you'll need to ",(0,a.kt)("em",{parentName:"p"},"recover")," the data from any offline bookies. There are two ways to recover bookies' data:"),(0,a.kt)("ol",null,(0,a.kt)("li",{parentName:"ol"},"Using ",(0,a.kt)("a",{parentName:"li",href:"#manual-recovery"},"manual recovery")),(0,a.kt)("li",{parentName:"ol"},"Automatically, using ",(0,a.kt)("a",{parentName:"li",href:"#autorecovery"},(0,a.kt)("em",{parentName:"a"},"AutoRecovery")))),(0,a.kt)("h2",{id:"manual-recovery"},"Manual recovery"),(0,a.kt)("p",null,"You can manually recover failed bookies using the ",(0,a.kt)("a",{parentName:"p",href:"/docs/reference/cli"},(0,a.kt)("inlineCode",{parentName:"a"},"bookkeeper"))," command-line tool. You need to specify:"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"the ",(0,a.kt)("inlineCode",{parentName:"li"},"shell recover")," option "),(0,a.kt)("li",{parentName:"ul"},"the IP and port for the failed bookie")),(0,a.kt)("p",null,"Here's an example:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"$ bin/bookkeeper shell recover \\\n  192.168.1.10:3181      # IP and port for the failed bookie\n")),(0,a.kt)("p",null,"If you wish, you can also specify which ledgers you'd like to recover. Here's an example:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"$ bin/bookkeeper shell recover \\\n  192.168.1.10:3181 \\    # IP and port for the failed bookie\n  --ledger ledgerID      # ledgerID which you want to recover \n")),(0,a.kt)("h3",{id:"the-manual-recovery-process"},"The manual recovery process"),(0,a.kt)("p",null,"When you initiate a manual recovery process, the following happens:"),(0,a.kt)("ol",null,(0,a.kt)("li",{parentName:"ol"},"The client (the process running ) reads the metadata of active ledgers from ZooKeeper."),(0,a.kt)("li",{parentName:"ol"},"The ledgers that contain fragments from the failed bookie in their ensemble are selected."),(0,a.kt)("li",{parentName:"ol"},"A recovery process is initiated for each ledger in this list and the rereplication process is run for each ledger."),(0,a.kt)("li",{parentName:"ol"},"Once all the ledgers are marked as fully replicated, bookie recovery is finished.")),(0,a.kt)("h2",{id:"autorecovery"},"AutoRecovery"),(0,a.kt)("p",null,"AutoRecovery is a process that:"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"automatically detects when a bookie in your BookKeeper cluster has become unavailable and then"),(0,a.kt)("li",{parentName:"ul"},"rereplicates all the ledgers that were stored on that bookie.")),(0,a.kt)("p",null,"AutoRecovery can be run in three ways:"),(0,a.kt)("ol",null,(0,a.kt)("li",{parentName:"ol"},"On dedicated nodes in your BookKeeper cluster"),(0,a.kt)("li",{parentName:"ol"},"On the same machines on which your bookies are running"),(0,a.kt)("li",{parentName:"ol"},"On a combination of autorecovery nodes and bookie nodes")),(0,a.kt)("h2",{id:"running-autorecovery"},"Running AutoRecovery"),(0,a.kt)("p",null,"You can start up AutoRecovery using the ",(0,a.kt)("a",{parentName:"p",href:"../reference/cli#bookkeeper-autorecovery"},(0,a.kt)("inlineCode",{parentName:"a"},"autorecovery"))," command of the ",(0,a.kt)("a",{parentName:"p",href:"../reference/cli"},(0,a.kt)("inlineCode",{parentName:"a"},"bookkeeper"))," CLI tool."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"$ bin/bookkeeper autorecovery\n")),(0,a.kt)("blockquote",null,(0,a.kt)("p",{parentName:"blockquote"},"The most important thing to ensure when starting up AutoRecovery is that the ZooKeeper connection string specified by the ",(0,a.kt)("a",{parentName:"p",href:"../reference/config#zkServers"},(0,a.kt)("inlineCode",{parentName:"a"},"zkServers"))," parameter points to the right ZooKeeper cluster.")),(0,a.kt)("p",null,"If you start up AutoRecovery on a machine that is already running a bookie, then the AutoRecovery process will run alongside the bookie on a separate thread."),(0,a.kt)("p",null,"You can also start up AutoRecovery on a fresh machine if you'd like to create a dedicated cluster of AutoRecovery nodes."),(0,a.kt)("p",null,"Note that if you ",(0,a.kt)("em",{parentName:"p"},"only")," want the AutoRecovery process to run on your dedicated AutoRecovery nodes, you must set ",(0,a.kt)("inlineCode",{parentName:"p"},"autoRecoveryDaemonEnabled")," to ",(0,a.kt)("inlineCode",{parentName:"p"},"false")," in the ",(0,a.kt)("inlineCode",{parentName:"p"},"bookkeeper")," configuration. Otherwise,\nbookkeeper nodes will also handle rereplication work."),(0,a.kt)("h2",{id:"configuration"},"Configuration"),(0,a.kt)("p",null,"There are a handful of AutoRecovery-related configs in the ",(0,a.kt)("a",{parentName:"p",href:"../reference/config"},(0,a.kt)("inlineCode",{parentName:"a"},"bk_server.conf"))," configuration file. For a listing of those configs, see ",(0,a.kt)("a",{parentName:"p",href:"../reference/config#autorecovery-settings"},"AutoRecovery settings"),"."),(0,a.kt)("h2",{id:"disable-autorecovery"},"Disable AutoRecovery"),(0,a.kt)("p",null,"You can disable AutoRecovery for the whole cluster at any time, for example during maintenance. Disabling AutoRecovery ensures that bookies' data isn't unnecessarily rereplicated when the bookie is only taken down for a short period of time, for example when the bookie is being updated or the configuration if being changed."),(0,a.kt)("p",null,"You can disable AutoRecover for the whole cluster using the ",(0,a.kt)("a",{parentName:"p",href:"../reference/cli#bookkeeper-shell-autorecovery"},(0,a.kt)("inlineCode",{parentName:"a"},"bookkeeper"))," CLI tool:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"$ bin/bookkeeper shell autorecovery -disable\n")),(0,a.kt)("p",null,"Once disabled, you can reenable AutoRecovery for the whole cluster using the ",(0,a.kt)("a",{parentName:"p",href:"../reference/cli#bookkeeper-shell-autorecovery"},(0,a.kt)("inlineCode",{parentName:"a"},"enable"))," shell command:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"$ bin/bookkeeper shell autorecovery -enable\n")),(0,a.kt)("h2",{id:"autorecovery-architecture"},"AutoRecovery architecture"),(0,a.kt)("p",null,"AutoRecovery has two components:"),(0,a.kt)("ol",null,(0,a.kt)("li",{parentName:"ol"},"The ",(0,a.kt)("a",{parentName:"li",href:"#auditor"},(0,a.kt)("strong",{parentName:"a"},"auditor"))," (see the ",(0,a.kt)("a",{parentName:"li",href:"https://bookkeeper.apache.org//docs/latest/api/javadoc/org/apache/bookkeeper/replication/Auditor.html"},(0,a.kt)("inlineCode",{parentName:"a"},"Auditor"))," class) is a singleton node that watches bookies to see if they fail and creates rereplication tasks for the ledgers on failed bookies."),(0,a.kt)("li",{parentName:"ol"},"The ",(0,a.kt)("a",{parentName:"li",href:"#replication-worker"},(0,a.kt)("strong",{parentName:"a"},"replication worker"))," (see the ",(0,a.kt)("a",{parentName:"li",href:"https://bookkeeper.apache.org//docs/latest/api/javadoc/org/apache/bookkeeper/replication/ReplicationWorker.html"},(0,a.kt)("inlineCode",{parentName:"a"},"ReplicationWorker"))," class) runs on each bookie and executes rereplication tasks provided by the auditor.")),(0,a.kt)("p",null,"Both of these components run as threads in the ",(0,a.kt)("a",{parentName:"p",href:"https://bookkeeper.apache.org//docs/latest/api/javadoc/org/apache/bookkeeper/replication/AutoRecoveryMain"},(0,a.kt)("inlineCode",{parentName:"a"},"AutoRecoveryMain"))," process, which runs on each bookie in the cluster. All recovery nodes participate in leader election---using ZooKeeper---to decide which node becomes the auditor. Nodes that fail to become the auditor watch the elected auditor and run an election process again if they see that the auditor node has failed."),(0,a.kt)("h3",{id:"auditor"},"Auditor"),(0,a.kt)("p",null,"The auditor watches all bookies in the cluster that are registered with ZooKeeper. Bookies register with ZooKeeper at startup. If the bookie crashes or is killed, the bookie's registration in ZooKeeper disappears and the auditor is notified of the change in the list of registered bookies."),(0,a.kt)("p",null,"When the auditor sees that a bookie has disappeared, it immediately scans the complete ledger list to find ledgers that have data stored on the failed bookie. Once it has a list of ledgers for that bookie, the auditor will publish a rereplication task for each ledger under the ",(0,a.kt)("inlineCode",{parentName:"p"},"/underreplicated/")," ",(0,a.kt)("a",{parentName:"p",href:"https://zookeeper.apache.org/doc/current/zookeeperOver.html"},"znode")," in ZooKeeper."),(0,a.kt)("h3",{id:"replication-worker"},"Replication Worker"),(0,a.kt)("p",null,"Each replication worker watches for tasks being published by the auditor on the ",(0,a.kt)("inlineCode",{parentName:"p"},"/underreplicated/")," znode in ZooKeeper. When a new task appears, the replication worker will try to get a lock on it. If it cannot acquire the lock, it will try the next entry. The locks are implemented using ZooKeeper ephemeral znodes."),(0,a.kt)("p",null,"The replication worker will scan through the rereplication task's ledger for fragments of which its local bookie is not a member. When it finds fragments matching this criterion, it will replicate the entries of that fragment to the local bookie. If, after this process, the ledger is fully replicated, the ledgers entry under /underreplicated/ is deleted, and the lock is released. If there is a problem replicating, or there are still fragments in the ledger which are still underreplicated (due to the local bookie already being part of the ensemble for the fragment), then the lock is simply released."),(0,a.kt)("p",null,"If the replication worker finds a fragment which needs rereplication, but does not have a defined endpoint (i.e. the final fragment of a ledger currently being written to), it will wait for a grace period before attempting rereplication. If the fragment needing rereplication still does not have a defined endpoint, the ledger is fenced and rereplication then takes place."),(0,a.kt)("p",null,"This avoids the situation in which a client is writing to a ledger and one of the bookies goes down, but the client has not written an entry to that bookie before rereplication takes place. The client could continue writing to the old fragment, even though the ensemble for the fragment had changed. This could lead to data loss. Fencing prevents this scenario from happening. In the normal case, the client will try to write to the failed bookie within the grace period, and will have started a new fragment before rereplication starts."),(0,a.kt)("p",null,"You can configure this grace period using the ",(0,a.kt)("a",{parentName:"p",href:"../reference/config#openLedgerRereplicationGracePeriod"},(0,a.kt)("inlineCode",{parentName:"a"},"openLedgerRereplicationGracePeriod"))," parameter."),(0,a.kt)("h3",{id:"the-rereplication-process"},"The rereplication process"),(0,a.kt)("p",null,"The ledger rereplication process happens in these steps:"),(0,a.kt)("ol",null,(0,a.kt)("li",{parentName:"ol"},"The client goes through all ledger fragments in the ledger, selecting those that contain the failed bookie."),(0,a.kt)("li",{parentName:"ol"},"A recovery process is initiated for each ledger fragment in this list.",(0,a.kt)("ol",{parentName:"li"},(0,a.kt)("li",{parentName:"ol"},"The client selects a bookie to which all entries in the ledger fragment will be replicated; In the case of autorecovery, this will always be the local bookie."),(0,a.kt)("li",{parentName:"ol"},"The client reads entries that belong to the ledger fragment from other bookies in the ensemble and writes them to the selected bookie."),(0,a.kt)("li",{parentName:"ol"},"Once all entries have been replicated, the zookeeper metadata for the fragment is updated to reflect the new ensemble."),(0,a.kt)("li",{parentName:"ol"},"The fragment is marked as fully replicated in the recovery tool."))),(0,a.kt)("li",{parentName:"ol"},"Once all ledger fragments are marked as fully replicated, the ledger is marked as fully replicated.")))}h.isMDXComponent=!0}}]);
\ No newline at end of file
diff --git a/content/assets/js/e64000bb.cbf0dfe5.js b/content/assets/js/e64000bb.cbf0dfe5.js
new file mode 100644
index 0000000..09a38d6
--- /dev/null
+++ b/content/assets/js/e64000bb.cbf0dfe5.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunksite_3=self.webpackChunksite_3||[]).push([[4612],{3905:function(e,t,o){o.d(t,{Zo:function(){return k},kt:function(){return u}});var n=o(67294);function a(e,t,o){return t in e?Object.defineProperty(e,t,{value:o,enumerable:!0,configurable:!0,writable:!0}):e[t]=o,e}function r(e,t){var o=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),o.push.apply(o,n)}return o}function i(e){for(var t=1;t<arguments.length;t++){var o=null!=arguments[t]?arguments[t]:{};t%2?r(Object(o),!0).forEach((function(t){a(e,t,o[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(o)):r(Object(o)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(o,t))}))}return e}function l(e,t){if(null==e)return{};var o,n,a=function(e,t){if(null==e)return{};var o,n,a={},r=Object.keys(e);for(n=0;n<r.length;n++)o=r[n],t.indexOf(o)>=0||(a[o]=e[o]);return a}(e,t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(n=0;n<r.length;n++)o=r[n],t.indexOf(o)>=0||Object.prototype.propertyIsEnumerable.call(e,o)&&(a[o]=e[o])}return a}var p=n.createContext({}),s=function(e){var t=n.useContext(p),o=t;return e&&(o="function"==typeof e?e(t):i(i({},t),e)),o},k=function(e){var t=s(e.components);return n.createElement(p.Provider,{value:t},e.children)},d="mdxType",c={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},m=n.forwardRef((function(e,t){var o=e.components,a=e.mdxType,r=e.originalType,p=e.parentName,k=l(e,["components","mdxType","originalType","parentName"]),d=s(o),m=a,u=d["".concat(p,".").concat(m)]||d[m]||c[m]||r;return o?n.createElement(u,i(i({ref:t},k),{},{components:o})):n.createElement(u,i({ref:t},k))}));function u(e,t){var o=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var r=o.length,i=new Array(r);i[0]=m;var l={};for(var p in t)hasOwnProperty.call(t,p)&&(l[p]=t[p]);l.originalType=e,l[d]="string"==typeof e?e:a,i[1]=l;for(var s=2;s<r;s++)i[s]=o[s];return n.createElement.apply(null,i)}return n.createElement.apply(null,o)}m.displayName="MDXCreateElement"},24963:function(e,t,o){o.r(t),o.d(t,{assets:function(){return p},contentTitle:function(){return i},default:function(){return c},frontMatter:function(){return r},metadata:function(){return l},toc:function(){return s}});var n=o(83117),a=(o(67294),o(3905));const r={id:"bookies",title:"BookKeeper administration"},i=void 0,l={unversionedId:"admin/bookies",id:"version-4.17.0/admin/bookies",title:"BookKeeper administration",description:"This document is a guide to deploying, administering, and maintaining BookKeeper. It also discusses best practices and common problems.",source:"@site/versioned_docs/version-4.17.0/admin/bookies.md",sourceDirName:"admin",slug:"/admin/bookies",permalink:"/docs/admin/bookies",draft:!1,tags:[],version:"4.17.0",frontMatter:{id:"bookies",title:"BookKeeper administration"},sidebar:"docsSidebar",previous:{title:"Deploying Apache BookKeeper on Kubernetes",permalink:"/docs/deployment/kubernetes"},next:{title:"Using AutoRecovery",permalink:"/docs/admin/autorecovery"}},p={},s=[{value:"Requirements",id:"requirements",level:2},{value:"Performance",id:"performance",level:3},{value:"ZooKeeper",id:"zookeeper",level:3},{value:"Starting and stopping bookies",id:"starting-and-stopping-bookies",level:2},{value:"Local bookies",id:"local-bookies",level:3},{value:"Configuring bookies",id:"configuring-bookies",level:2},{value:"Logging",id:"logging",level:2},{value:"Upgrading",id:"upgrading",level:2},{value:"Upgrade pattern",id:"upgrade-pattern",level:3},{value:"Formatting",id:"formatting",level:2},{value:"AutoRecovery",id:"autorecovery",level:2},{value:"Missing disks or directories",id:"missing-disks-or-directories",level:2}],k={toc:s},d="wrapper";function c(e){let{components:t,...o}=e;return(0,a.kt)(d,(0,n.Z)({},k,o,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("p",null,"This document is a guide to deploying, administering, and maintaining BookKeeper. It also discusses best practices and common problems."),(0,a.kt)("h2",{id:"requirements"},"Requirements"),(0,a.kt)("p",null,"A typical BookKeeper installation consists of an ensemble of bookies and a ZooKeeper quorum. The exact number of bookies depends on the quorum mode that you choose, desired throughput, and the number of clients using the installation simultaneously."),(0,a.kt)("p",null,"The minimum number of bookies depends on the type of installation:"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"For ",(0,a.kt)("em",{parentName:"li"},"self-verifying")," entries you should run at least three bookies. In this mode, clients store a message authentication code along with each entry."),(0,a.kt)("li",{parentName:"ul"},"For ",(0,a.kt)("em",{parentName:"li"},"generic")," entries you should run at least four")),(0,a.kt)("p",null,"There is no upper limit on the number of bookies that you can run in a single ensemble."),(0,a.kt)("h3",{id:"performance"},"Performance"),(0,a.kt)("p",null,"To achieve optimal performance, BookKeeper requires each server to have at least two disks. It's possible to run a bookie with a single disk but performance will be significantly degraded."),(0,a.kt)("h3",{id:"zookeeper"},"ZooKeeper"),(0,a.kt)("p",null,"There is no constraint on the number of ZooKeeper nodes you can run with BookKeeper. A single machine running ZooKeeper in ",(0,a.kt)("a",{parentName:"p",href:"https://zookeeper.apache.org/doc/current/zookeeperStarted.html#sc_InstallingSingleMode"},"standalone mode")," is sufficient for BookKeeper, although for the sake of higher resilience we recommend running ZooKeeper in ",(0,a.kt)("a",{parentName:"p",href:"https://zookeeper.apache.org/doc/current/zookeeperStarted.html#sc_RunningReplicatedZooKeeper"},"quorum mode")," with multiple servers."),(0,a.kt)("h2",{id:"starting-and-stopping-bookies"},"Starting and stopping bookies"),(0,a.kt)("p",null,"You can run bookies either in the foreground or in the background, using ",(0,a.kt)("a",{parentName:"p",href:"https://en.wikipedia.org/wiki/Nohup"},"nohup"),". You can also run ",(0,a.kt)("a",{parentName:"p",href:"#local-bookie"},"local bookies")," for development purposes."),(0,a.kt)("p",null,"To start a bookie in the foreground, use the ",(0,a.kt)("a",{parentName:"p",href:"../reference/cli#bookkeeper-bookie"},(0,a.kt)("inlineCode",{parentName:"a"},"bookie"))," command of the ",(0,a.kt)("a",{parentName:"p",href:"../reference/cli#bookkeeper"},(0,a.kt)("inlineCode",{parentName:"a"},"bookkeeper"))," CLI tool:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-shell"},"$ bin/bookkeeper bookie\n")),(0,a.kt)("p",null,"To start a bookie in the background, use the ",(0,a.kt)("a",{parentName:"p",href:"../reference/cli#bookkeeper-daemon.sh"},(0,a.kt)("inlineCode",{parentName:"a"},"bookkeeper-daemon.sh"))," script and run ",(0,a.kt)("inlineCode",{parentName:"p"},"start bookie"),":"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-shell"},"$ bin/bookkeeper-daemon.sh start bookie\n")),(0,a.kt)("h3",{id:"local-bookies"},"Local bookies"),(0,a.kt)("p",null,"The instructions above showed you how to run bookies intended for production use. If you'd like to experiment with ensembles of bookies locally, you can use the ",(0,a.kt)("a",{parentName:"p",href:"../reference/cli#bookkeeper-localbookie"},(0,a.kt)("inlineCode",{parentName:"a"},"localbookie"))," command of the ",(0,a.kt)("inlineCode",{parentName:"p"},"bookkeeper")," CLI tool and specify the number of bookies you'd like to run."),(0,a.kt)("p",null,"This would spin up a local ensemble of 6 bookies:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-shell"},"$ bin/bookkeeper localbookie 6\n")),(0,a.kt)("blockquote",null,(0,a.kt)("p",{parentName:"blockquote"},"When you run a local bookie ensemble, all bookies run in a single JVM process.")),(0,a.kt)("h2",{id:"configuring-bookies"},"Configuring bookies"),(0,a.kt)("p",null,"There's a wide variety of parameters that you can set in the bookie configuration file in ",(0,a.kt)("inlineCode",{parentName:"p"},"bookkeeper-server/conf/bk_server.conf")," of your ",(0,a.kt)("a",{parentName:"p",href:"../reference/config"},"BookKeeper installation"),". A full listing can be found in ",(0,a.kt)("a",{parentName:"p",href:"../reference/config"},"Bookie configuration"),"."),(0,a.kt)("p",null,"Some of the more important parameters to be aware of:"),(0,a.kt)("table",null,(0,a.kt)("thead",{parentName:"table"},(0,a.kt)("tr",{parentName:"thead"},(0,a.kt)("th",{parentName:"tr",align:"left"},"Parameter"),(0,a.kt)("th",{parentName:"tr",align:"left"},"Description"),(0,a.kt)("th",{parentName:"tr",align:"left"},"Default"))),(0,a.kt)("tbody",{parentName:"table"},(0,a.kt)("tr",{parentName:"tbody"},(0,a.kt)("td",{parentName:"tr",align:"left"},(0,a.kt)("inlineCode",{parentName:"td"},"bookiePort")),(0,a.kt)("td",{parentName:"tr",align:"left"},"The TCP port that the bookie listens on"),(0,a.kt)("td",{parentName:"tr",align:"left"},(0,a.kt)("inlineCode",{parentName:"td"},"3181"))),(0,a.kt)("tr",{parentName:"tbody"},(0,a.kt)("td",{parentName:"tr",align:"left"},(0,a.kt)("inlineCode",{parentName:"td"},"zkServers")),(0,a.kt)("td",{parentName:"tr",align:"left"},"A comma-separated list of ZooKeeper servers in ",(0,a.kt)("inlineCode",{parentName:"td"},"hostname:port")," format"),(0,a.kt)("td",{parentName:"tr",align:"left"},(0,a.kt)("inlineCode",{parentName:"td"},"localhost:2181"))),(0,a.kt)("tr",{parentName:"tbody"},(0,a.kt)("td",{parentName:"tr",align:"left"},(0,a.kt)("inlineCode",{parentName:"td"},"journalDirectory")),(0,a.kt)("td",{parentName:"tr",align:"left"},"The directory where the ",(0,a.kt)("a",{parentName:"td",href:"../getting-started/concepts#log-device"},"log device")," stores the bookie's write-ahead log (WAL)"),(0,a.kt)("td",{parentName:"tr",align:"left"},(0,a.kt)("inlineCode",{parentName:"td"},"/tmp/bk-txn"))),(0,a.kt)("tr",{parentName:"tbody"},(0,a.kt)("td",{parentName:"tr",align:"left"},(0,a.kt)("inlineCode",{parentName:"td"},"ledgerDirectories")),(0,a.kt)("td",{parentName:"tr",align:"left"},"The directories where the ",(0,a.kt)("a",{parentName:"td",href:"../getting-started/concepts#ledger-device"},"ledger device")," stores the bookie's ledger entries (as a comma-separated list)"),(0,a.kt)("td",{parentName:"tr",align:"left"},(0,a.kt)("inlineCode",{parentName:"td"},"/tmp/bk-data"))))),(0,a.kt)("blockquote",null,(0,a.kt)("p",{parentName:"blockquote"},"Ideally, the directories specified ",(0,a.kt)("inlineCode",{parentName:"p"},"journalDirectory")," and ",(0,a.kt)("inlineCode",{parentName:"p"},"ledgerDirectories")," should be on difference devices.")),(0,a.kt)("h2",{id:"logging"},"Logging"),(0,a.kt)("p",null,"BookKeeper uses ",(0,a.kt)("a",{parentName:"p",href:"http://www.slf4j.org/"},"slf4j")," for logging, with ",(0,a.kt)("a",{parentName:"p",href:"https://logging.apache.org/log4j/2.x/"},"log4j")," bindings enabled by default."),(0,a.kt)("p",null,"To enable logging for a bookie, create a ",(0,a.kt)("inlineCode",{parentName:"p"},"log4j.properties")," file and point the ",(0,a.kt)("inlineCode",{parentName:"p"},"BOOKIE_LOG_CONF")," environment variable to the configuration file. Here's an example:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-shell"},"$ export BOOKIE_LOG_CONF=/some/path/log4j.properties\n$ bin/bookkeeper bookie\n")),(0,a.kt)("h2",{id:"upgrading"},"Upgrading"),(0,a.kt)("p",null,"From time to time you may need to make changes to the filesystem layout of bookies---changes that are incompatible with previous versions of BookKeeper and require that directories used with previous versions are upgraded. If a filesystem upgrade is required when updating BookKeeper, the bookie will fail to start and return an error like this:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre"},"2017-05-25 10:41:50,494 - ERROR - [main:Bookie@246] - Directory layout version is less than 3, upgrade needed\n")),(0,a.kt)("p",null,"BookKeeper provides a utility for upgrading the filesystem. You can perform an upgrade using the ",(0,a.kt)("a",{parentName:"p",href:"../reference/cli#bookkeeper-upgrade"},(0,a.kt)("inlineCode",{parentName:"a"},"upgrade"))," command of the ",(0,a.kt)("inlineCode",{parentName:"p"},"bookkeeper")," CLI tool. When running ",(0,a.kt)("inlineCode",{parentName:"p"},"bookkeeper upgrade")," you need to specify one of three flags:"),(0,a.kt)("table",null,(0,a.kt)("thead",{parentName:"table"},(0,a.kt)("tr",{parentName:"thead"},(0,a.kt)("th",{parentName:"tr",align:"left"},"Flag"),(0,a.kt)("th",{parentName:"tr",align:"left"},"Action"))),(0,a.kt)("tbody",{parentName:"table"},(0,a.kt)("tr",{parentName:"tbody"},(0,a.kt)("td",{parentName:"tr",align:"left"},(0,a.kt)("inlineCode",{parentName:"td"},"--upgrade")),(0,a.kt)("td",{parentName:"tr",align:"left"},"Performs an upgrade")),(0,a.kt)("tr",{parentName:"tbody"},(0,a.kt)("td",{parentName:"tr",align:"left"},(0,a.kt)("inlineCode",{parentName:"td"},"--rollback")),(0,a.kt)("td",{parentName:"tr",align:"left"},"Performs a rollback to the initial filesystem version")),(0,a.kt)("tr",{parentName:"tbody"},(0,a.kt)("td",{parentName:"tr",align:"left"},(0,a.kt)("inlineCode",{parentName:"td"},"--finalize")),(0,a.kt)("td",{parentName:"tr",align:"left"},"Marks the upgrade as complete")))),(0,a.kt)("h3",{id:"upgrade-pattern"},"Upgrade pattern"),(0,a.kt)("p",null,"A standard upgrade pattern is to run an upgrade..."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-shell"},"$ bin/bookkeeper upgrade --upgrade\n")),(0,a.kt)("p",null,"...then check that everything is working normally, then kill the bookie. If everything is okay, finalize the upgrade..."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-shell"},"$ bin/bookkeeper upgrade --finalize\n")),(0,a.kt)("p",null,"...and then restart the server:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-shell"},"$ bin/bookkeeper bookie\n")),(0,a.kt)("p",null,"If something has gone wrong, you can always perform a rollback:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-shell"},"$ bin/bookkeeper upgrade --rollback\n")),(0,a.kt)("h2",{id:"formatting"},"Formatting"),(0,a.kt)("p",null,"You can format bookie metadata in ZooKeeper using the ",(0,a.kt)("a",{parentName:"p",href:"../reference/cli#bookkeeper-shell-metaformat"},(0,a.kt)("inlineCode",{parentName:"a"},"metaformat"))," command of the ",(0,a.kt)("a",{parentName:"p",href:"../reference/cli#the-bookkeeper-shell"},"BookKeeper shell"),"."),(0,a.kt)("p",null,"By default, formatting is done in interactive mode, which prompts you to confirm the format operation if old data exists. You can disable confirmation using the ",(0,a.kt)("inlineCode",{parentName:"p"},"-nonInteractive")," flag. If old data does exist, the format operation will abort ",(0,a.kt)("em",{parentName:"p"},"unless")," you set the ",(0,a.kt)("inlineCode",{parentName:"p"},"-force")," flag. Here's an example:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-shell"},"$ bin/bookkeeper shell metaformat\n")),(0,a.kt)("p",null,"You can format the local filesystem data on a bookie using the ",(0,a.kt)("a",{parentName:"p",href:"../reference/cli#bookkeeper-shell-bookieformat"},(0,a.kt)("inlineCode",{parentName:"a"},"bookieformat"))," command on each bookie. Here's an example:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-shell"},"$ bin/bookkeeper shell bookieformat\n")),(0,a.kt)("blockquote",null,(0,a.kt)("p",{parentName:"blockquote"},"The ",(0,a.kt)("inlineCode",{parentName:"p"},"-force")," and ",(0,a.kt)("inlineCode",{parentName:"p"},"-nonInteractive")," flags are also available for the ",(0,a.kt)("inlineCode",{parentName:"p"},"bookieformat")," command.")),(0,a.kt)("h2",{id:"autorecovery"},"AutoRecovery"),(0,a.kt)("p",null,"For a guide to AutoRecovery in BookKeeper, see ",(0,a.kt)("a",{parentName:"p",href:"autorecovery"},"this doc"),"."),(0,a.kt)("h2",{id:"missing-disks-or-directories"},"Missing disks or directories"),(0,a.kt)("p",null,"Accidentally replacing disks or removing directories can cause a bookie to fail while trying to read a ledger fragment that, according to the ledger metadata, exists on the bookie. For this reason, when a bookie is started for the first time, its disk configuration is fixed for the lifetime of that bookie. Any change to its disk configuration, such as a crashed disk or an accidental configuration change, will result in the bookie being unable to start. That will throw an error like this:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre"},"2017-05-29 18:19:13,790 - ERROR - [main:BookieServer314] \u2013 Exception running bookie server : @\norg.apache.bookkeeper.bookie.BookieException$InvalidCookieException\n.......at org.apache.bookkeeper.bookie.Cookie.verify(Cookie.java:82)\n.......at org.apache.bookkeeper.bookie.Bookie.checkEnvironment(Bookie.java:275)\n.......at org.apache.bookkeeper.bookie.Bookie.<init>(Bookie.java:351)\n")),(0,a.kt)("p",null,"If the change was the result of an accidental configuration change, the change can be reverted and the bookie can be restarted. However, if the change ",(0,a.kt)("em",{parentName:"p"},"cannot")," be reverted, such as is the case when you want to add a new disk or replace a disk, the bookie must be wiped and then all its data re-replicated onto it."),(0,a.kt)("ol",null,(0,a.kt)("li",{parentName:"ol"},(0,a.kt)("p",{parentName:"li"},"Increment the ",(0,a.kt)("a",{parentName:"p",href:"../reference/config#bookiePort"},(0,a.kt)("inlineCode",{parentName:"a"},"bookiePort"))," parameter in the ",(0,a.kt)("a",{parentName:"p",href:"../reference/config"},(0,a.kt)("inlineCode",{parentName:"a"},"bk_server.conf")))),(0,a.kt)("li",{parentName:"ol"},(0,a.kt)("p",{parentName:"li"},"Ensure that all directories specified by ",(0,a.kt)("a",{parentName:"p",href:"../reference/config#journalDirectory"},(0,a.kt)("inlineCode",{parentName:"a"},"journalDirectory"))," and ",(0,a.kt)("a",{parentName:"p",href:"../reference/config#ledgerDirectories"},(0,a.kt)("inlineCode",{parentName:"a"},"ledgerDirectories"))," are empty.")),(0,a.kt)("li",{parentName:"ol"},(0,a.kt)("p",{parentName:"li"},(0,a.kt)("a",{parentName:"p",href:"#starting-and-stopping-bookies"},"Start the bookie"),".")),(0,a.kt)("li",{parentName:"ol"},(0,a.kt)("p",{parentName:"li"},"Run the following command to re-replicate the data:"),(0,a.kt)("pre",{parentName:"li"},(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"$ bin/bookkeeper shell recover <oldbookie> \n")),(0,a.kt)("p",{parentName:"li"},"The ZooKeeper server, old bookie, and new bookie, are all identified by their external IP and ",(0,a.kt)("inlineCode",{parentName:"p"},"bookiePort")," (3181 by default). Here's an example:"),(0,a.kt)("pre",{parentName:"li"},(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"$ bin/bookkeeper shell recover  192.168.1.10:3181\n")),(0,a.kt)("p",{parentName:"li"},"See the ",(0,a.kt)("a",{parentName:"p",href:"autorecovery"},"AutoRecovery")," documentation for more info on the re-replication process."))))}c.isMDXComponent=!0}}]);
\ No newline at end of file
diff --git a/content/assets/js/f6025ed5.0ab72057.js b/content/assets/js/f6025ed5.0ab72057.js
new file mode 100644
index 0000000..8b6349c
--- /dev/null
+++ b/content/assets/js/f6025ed5.0ab72057.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunksite_3=self.webpackChunksite_3||[]).push([[5617],{3905:function(e,t,r){r.d(t,{Zo:function(){return l},kt:function(){return m}});var n=r(67294);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function i(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function a(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?i(Object(r),!0).forEach((function(t){o(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):i(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function u(e,t){if(null==e)return{};var r,n,o=function(e,t){if(null==e)return{};var r,n,o={},i=Object.keys(e);for(n=0;n<i.length;n++)r=i[n],t.indexOf(r)>=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(n=0;n<i.length;n++)r=i[n],t.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var c=n.createContext({}),s=function(e){var t=n.useContext(c),r=t;return e&&(r="function"==typeof e?e(t):a(a({},t),e)),r},l=function(e){var t=s(e.components);return n.createElement(c.Provider,{value:t},e.children)},p="mdxType",f={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},d=n.forwardRef((function(e,t){var r=e.components,o=e.mdxType,i=e.originalType,c=e.parentName,l=u(e,["components","mdxType","originalType","parentName"]),p=s(r),d=o,m=p["".concat(c,".").concat(d)]||p[d]||f[d]||i;return r?n.createElement(m,a(a({ref:t},l),{},{components:r})):n.createElement(m,a({ref:t},l))}));function m(e,t){var r=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var i=r.length,a=new Array(i);a[0]=d;var u={};for(var c in t)hasOwnProperty.call(t,c)&&(u[c]=t[c]);u.originalType=e,u[p]="string"==typeof e?e:o,a[1]=u;for(var s=2;s<i;s++)a[s]=r[s];return n.createElement.apply(null,a)}return n.createElement.apply(null,r)}d.displayName="MDXCreateElement"},81438:function(e,t,r){r.r(t),r.d(t,{assets:function(){return c},contentTitle:function(){return a},default:function(){return f},frontMatter:function(){return i},metadata:function(){return u},toc:function(){return s}});var n=r(83117),o=(r(67294),r(3905));const i={id:"overview",title:"BookKeeper Security"},a=void 0,u={unversionedId:"security/overview",id:"version-4.17.0/security/overview",title:"BookKeeper Security",description:"In the 4.5.0 release, the BookKeeper community added a number of features that can be used, together or separately, to secure a BookKeeper cluster.",source:"@site/versioned_docs/version-4.17.0/security/overview.md",sourceDirName:"security",slug:"/security/overview",permalink:"/docs/security/overview",draft:!1,tags:[],version:"4.17.0",frontMatter:{id:"overview",title:"BookKeeper Security"},sidebar:"docsSidebar",previous:{title:"DistributedLog",permalink:"/docs/api/distributedlog-api"},next:{title:"Encryption and Authentication using TLS",permalink:"/docs/security/tls"}},c={},s=[{value:"Next Steps",id:"next-steps",level:2}],l={toc:s},p="wrapper";function f(e){let{components:t,...r}=e;return(0,o.kt)(p,(0,n.Z)({},l,r,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("p",null,"In the 4.5.0 release, the BookKeeper community added a number of features that can be used, together or separately, to secure a BookKeeper cluster.\nThe following security measures are currently supported:"),(0,o.kt)("ol",null,(0,o.kt)("li",{parentName:"ol"},"Authentication of connections to bookies from clients, using either ",(0,o.kt)("a",{parentName:"li",href:"tls"},"TLS")," or ",(0,o.kt)("a",{parentName:"li",href:"sasl"},"SASL (Kerberos)"),"."),(0,o.kt)("li",{parentName:"ol"},"Authentication of connections from clients, bookies, autorecovery daemons to ",(0,o.kt)("a",{parentName:"li",href:"zookeeper"},"ZooKeeper"),", when using zookeeper based ledger managers."),(0,o.kt)("li",{parentName:"ol"},"Encryption of data transferred between bookies and clients, between bookies and autorecovery daemons using ",(0,o.kt)("a",{parentName:"li",href:"tls"},"TLS"),".")),(0,o.kt)("p",null,"It\u2019s worth noting that security is optional - non-secured clusters are supported, as well as a mix of authenticated, unauthenticated, encrypted and non-encrypted clients."),(0,o.kt)("p",null,"NOTE: authorization is not yet available in 4.5.0. The Apache BookKeeper community is looking to add this feature in subsequent releases."),(0,o.kt)("h2",{id:"next-steps"},"Next Steps"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"tls"},"Encryption and Authentication using TLS")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"sasl"},"Authentication using SASL")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"zookeeper"},"ZooKeeper Authentication"))))}f.isMDXComponent=!0}}]);
\ No newline at end of file
diff --git a/content/assets/js/main.287687b3.js b/content/assets/js/main.287687b3.js
new file mode 100644
index 0000000..61ac28c
--- /dev/null
+++ b/content/assets/js/main.287687b3.js
@@ -0,0 +1,2 @@
+/*! For license information please see main.287687b3.js.LICENSE.txt */
+(self.webpackChunksite_3=self.webpackChunksite_3||[]).push([[179],{34334:function(e,t,n){"use strict";function o(e){var t,n,r="";if("string"==typeof e||"number"==typeof e)r+=e;else if("object"==typeof e)if(Array.isArray(e))for(t=0;t<e.length;t++)e[t]&&(n=o(e[t]))&&(r&&(r+=" "),r+=n);else for(t in e)e[t]&&(r&&(r+=" "),r+=t);return r}t.Z=function(){for(var e,t,n=0,r="";n<arguments.length;)(e=arguments[n++])&&(t=o(e))&&(r&&(r+=" "),r+=t);return r}},11205:function(e,t){"use strict";var n=function(){var e=/(?:^|\s)lang(?:uage)?-([\w-]+)(?=\s|$)/i,t=0,n={},o={util:{encode:function e(t){return t instanceof r?new r(t.type,e(t.content),t.alias):Array.isArray(t)?t.map(e):t.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/\u00a0/g," ")},type:function(e){return Object.prototype.toString.call(e).slice(8,-1)},objId:function(e){return e.__id||Object.defineProperty(e,"__id",{value:++t}),e.__id},clone:function e(t,n){var r,i;switch(n=n||{},o.util.type(t)){case"Object":if(i=o.util.objId(t),n[i])return n[i];for(var a in r={},n[i]=r,t)t.hasOwnProperty(a)&&(r[a]=e(t[a],n));return r;case"Array":return i=o.util.objId(t),n[i]?n[i]:(r=[],n[i]=r,t.forEach((function(t,o){r[o]=e(t,n)})),r);default:return t}},getLanguage:function(t){for(;t;){var n=e.exec(t.className);if(n)return n[1].toLowerCase();t=t.parentElement}return"none"},setLanguage:function(t,n){t.className=t.className.replace(RegExp(e,"gi"),""),t.classList.add("language-"+n)},isActive:function(e,t,n){for(var o="no-"+t;e;){var r=e.classList;if(r.contains(t))return!0;if(r.contains(o))return!1;e=e.parentElement}return!!n}},languages:{plain:n,plaintext:n,text:n,txt:n,extend:function(e,t){var n=o.util.clone(o.languages[e]);for(var r in t)n[r]=t[r];return n},insertBefore:function(e,t,n,r){var i=(r=r||o.languages)[e],a={};for(var s in i)if(i.hasOwnProperty(s)){if(s==t)for(var c in n)n.hasOwnProperty(c)&&(a[c]=n[c]);n.hasOwnProperty(s)||(a[s]=i[s])}var d=r[e];return r[e]=a,o.languages.DFS(o.languages,(function(t,n){n===d&&t!=e&&(this[t]=a)})),a},DFS:function e(t,n,r,i){i=i||{};var a=o.util.objId;for(var s in t)if(t.hasOwnProperty(s)){n.call(t,s,t[s],r||s);var c=t[s],d=o.util.type(c);"Object"!==d||i[a(c)]?"Array"!==d||i[a(c)]||(i[a(c)]=!0,e(c,n,s,i)):(i[a(c)]=!0,e(c,n,null,i))}}},plugins:{},highlight:function(e,t,n){var i={code:e,grammar:t,language:n};return o.hooks.run("before-tokenize",i),i.tokens=o.tokenize(i.code,i.grammar),o.hooks.run("after-tokenize",i),r.stringify(o.util.encode(i.tokens),i.language)},tokenize:function(e,t){var n=t.rest;if(n){for(var o in n)t[o]=n[o];delete t.rest}var r=new s;return c(r,r.head,e),a(e,r,t,r.head,0),function(e){var t=[],n=e.head.next;for(;n!==e.tail;)t.push(n.value),n=n.next;return t}(r)},hooks:{all:{},add:function(e,t){var n=o.hooks.all;n[e]=n[e]||[],n[e].push(t)},run:function(e,t){var n=o.hooks.all[e];if(n&&n.length)for(var r,i=0;r=n[i++];)r(t)}},Token:r};function r(e,t,n,o){this.type=e,this.content=t,this.alias=n,this.length=0|(o||"").length}function i(e,t,n,o){e.lastIndex=t;var r=e.exec(n);if(r&&o&&r[1]){var i=r[1].length;r.index+=i,r[0]=r[0].slice(i)}return r}function a(e,t,n,s,l,u){for(var p in n)if(n.hasOwnProperty(p)&&n[p]){var m=n[p];m=Array.isArray(m)?m:[m];for(var f=0;f<m.length;++f){if(u&&u.cause==p+","+f)return;var b=m[f],h=b.inside,v=!!b.lookbehind,g=!!b.greedy,y=b.alias;if(g&&!b.pattern.global){var w=b.pattern.toString().match(/[imsuy]*$/)[0];b.pattern=RegExp(b.pattern.source,w+"g")}for(var _=b.pattern||b,k=s.next,S=l;k!==t.tail&&!(u&&S>=u.reach);S+=k.value.length,k=k.next){var x=k.value;if(t.length>e.length)return;if(!(x instanceof r)){var E,C=1;if(g){if(!(E=i(_,S,e,v))||E.index>=e.length)break;var T=E.index,P=E.index+E[0].length,A=S;for(A+=k.value.length;T>=A;)A+=(k=k.next).value.length;if(S=A-=k.value.length,k.value instanceof r)continue;for(var L=k;L!==t.tail&&(A<P||"string"==typeof L.value);L=L.next)C++,A+=L.value.length;C--,x=e.slice(S,A),E.index-=S}else if(!(E=i(_,0,x,v)))continue;T=E.index;var R=E[0],N=x.slice(0,T),O=x.slice(T+R.length),I=S+x.length;u&&I>u.reach&&(u.reach=I);var D=k.prev;if(N&&(D=c(t,D,N),S+=N.length),d(t,D,C),k=c(t,D,new r(p,h?o.tokenize(R,h):R,y,R)),O&&c(t,k,O),C>1){var M={cause:p+","+f,reach:I};a(e,t,n,k.prev,S,M),u&&M.reach>u.reach&&(u.reach=M.reach)}}}}}}function s(){var e={value:null,prev:null,next:null},t={value:null,prev:e,next:null};e.next=t,this.head=e,this.tail=t,this.length=0}function c(e,t,n){var o=t.next,r={value:n,prev:t,next:o};return t.next=r,o.prev=r,e.length++,r}function d(e,t,n){for(var o=t.next,r=0;r<n&&o!==e.tail;r++)o=o.next;t.next=o,o.prev=t,e.length-=r}return r.stringify=function e(t,n){if("string"==typeof t)return t;if(Array.isArray(t)){var r="";return t.forEach((function(t){r+=e(t,n)})),r}var i={type:t.type,content:e(t.content,n),tag:"span",classes:["token",t.type],attributes:{},language:n},a=t.alias;a&&(Array.isArray(a)?Array.prototype.push.apply(i.classes,a):i.classes.push(a)),o.hooks.run("wrap",i);var s="";for(var c in i.attributes)s+=" "+c+'="'+(i.attributes[c]||"").replace(/"/g,"&quot;")+'"';return"<"+i.tag+' class="'+i.classes.join(" ")+'"'+s+">"+i.content+"</"+i.tag+">"},o}(),o=n;n.default=n,o.languages.markup={comment:{pattern:/<!--(?:(?!<!--)[\s\S])*?-->/,greedy:!0},prolog:{pattern:/<\?[\s\S]+?\?>/,greedy:!0},doctype:{pattern:/<!DOCTYPE(?:[^>"'[\]]|"[^"]*"|'[^']*')+(?:\[(?:[^<"'\]]|"[^"]*"|'[^']*'|<(?!!--)|<!--(?:[^-]|-(?!->))*-->)*\]\s*)?>/i,greedy:!0,inside:{"internal-subset":{pattern:/(^[^\[]*\[)[\s\S]+(?=\]>$)/,lookbehind:!0,greedy:!0,inside:null},string:{pattern:/"[^"]*"|'[^']*'/,greedy:!0},punctuation:/^<!|>$|[[\]]/,"doctype-tag":/^DOCTYPE/i,name:/[^\s<>'"]+/}},cdata:{pattern:/<!\[CDATA\[[\s\S]*?\]\]>/i,greedy:!0},tag:{pattern:/<\/?(?!\d)[^\s>\/=$<%]+(?:\s(?:\s*[^\s>\/=]+(?:\s*=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+(?=[\s>]))|(?=[\s/>])))+)?\s*\/?>/,greedy:!0,inside:{tag:{pattern:/^<\/?[^\s>\/]+/,inside:{punctuation:/^<\/?/,namespace:/^[^\s>\/:]+:/}},"special-attr":[],"attr-value":{pattern:/=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+)/,inside:{punctuation:[{pattern:/^=/,alias:"attr-equals"},/"|'/]}},punctuation:/\/?>/,"attr-name":{pattern:/[^\s>\/]+/,inside:{namespace:/^[^\s>\/:]+:/}}}},entity:[{pattern:/&[\da-z]{1,8};/i,alias:"named-entity"},/&#x?[\da-f]{1,8};/i]},o.languages.markup.tag.inside["attr-value"].inside.entity=o.languages.markup.entity,o.languages.markup.doctype.inside["internal-subset"].inside=o.languages.markup,o.hooks.add("wrap",(function(e){"entity"===e.type&&(e.attributes.title=e.content.replace(/&amp;/,"&"))})),Object.defineProperty(o.languages.markup.tag,"addInlined",{value:function(e,t){var n={};n["language-"+t]={pattern:/(^<!\[CDATA\[)[\s\S]+?(?=\]\]>$)/i,lookbehind:!0,inside:o.languages[t]},n.cdata=/^<!\[CDATA\[|\]\]>$/i;var r={"included-cdata":{pattern:/<!\[CDATA\[[\s\S]*?\]\]>/i,inside:n}};r["language-"+t]={pattern:/[\s\S]+/,inside:o.languages[t]};var i={};i[e]={pattern:RegExp(/(<__[^>]*>)(?:<!\[CDATA\[(?:[^\]]|\](?!\]>))*\]\]>|(?!<!\[CDATA\[)[\s\S])*?(?=<\/__>)/.source.replace(/__/g,(function(){return e})),"i"),lookbehind:!0,greedy:!0,inside:r},o.languages.insertBefore("markup","cdata",i)}}),Object.defineProperty(o.languages.markup.tag,"addAttribute",{value:function(e,t){o.languages.markup.tag.inside["special-attr"].push({pattern:RegExp(/(^|["'\s])/.source+"(?:"+e+")"+/\s*=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+(?=[\s>]))/.source,"i"),lookbehind:!0,inside:{"attr-name":/^[^\s=]+/,"attr-value":{pattern:/=[\s\S]+/,inside:{value:{pattern:/(^=\s*(["']|(?!["'])))\S[\s\S]*(?=\2$)/,lookbehind:!0,alias:[t,"language-"+t],inside:o.languages[t]},punctuation:[{pattern:/^=/,alias:"attr-equals"},/"|'/]}}}})}}),o.languages.html=o.languages.markup,o.languages.mathml=o.languages.markup,o.languages.svg=o.languages.markup,o.languages.xml=o.languages.extend("markup",{}),o.languages.ssml=o.languages.xml,o.languages.atom=o.languages.xml,o.languages.rss=o.languages.xml,function(e){var t="\\b(?:BASH|BASHOPTS|BASH_ALIASES|BASH_ARGC|BASH_ARGV|BASH_CMDS|BASH_COMPLETION_COMPAT_DIR|BASH_LINENO|BASH_REMATCH|BASH_SOURCE|BASH_VERSINFO|BASH_VERSION|COLORTERM|COLUMNS|COMP_WORDBREAKS|DBUS_SESSION_BUS_ADDRESS|DEFAULTS_PATH|DESKTOP_SESSION|DIRSTACK|DISPLAY|EUID|GDMSESSION|GDM_LANG|GNOME_KEYRING_CONTROL|GNOME_KEYRING_PID|GPG_AGENT_INFO|GROUPS|HISTCONTROL|HISTFILE|HISTFILESIZE|HISTSIZE|HOME|HOSTNAME|HOSTTYPE|IFS|INSTANCE|JOB|LANG|LANGUAGE|LC_ADDRESS|LC_ALL|LC_IDENTIFICATION|LC_MEASUREMENT|LC_MONETARY|LC_NAME|LC_NUMERIC|LC_PAPER|LC_TELEPHONE|LC_TIME|LESSCLOSE|LESSOPEN|LINES|LOGNAME|LS_COLORS|MACHTYPE|MAILCHECK|MANDATORY_PATH|NO_AT_BRIDGE|OLDPWD|OPTERR|OPTIND|ORBIT_SOCKETDIR|OSTYPE|PAPERSIZE|PATH|PIPESTATUS|PPID|PS1|PS2|PS3|PS4|PWD|RANDOM|REPLY|SECONDS|SELINUX_INIT|SESSION|SESSIONTYPE|SESSION_MANAGER|SHELL|SHELLOPTS|SHLVL|SSH_AUTH_SOCK|TERM|UID|UPSTART_EVENTS|UPSTART_INSTANCE|UPSTART_JOB|UPSTART_SESSION|USER|WINDOWID|XAUTHORITY|XDG_CONFIG_DIRS|XDG_CURRENT_DESKTOP|XDG_DATA_DIRS|XDG_GREETER_DATA_DIR|XDG_MENU_PREFIX|XDG_RUNTIME_DIR|XDG_SEAT|XDG_SEAT_PATH|XDG_SESSION_DESKTOP|XDG_SESSION_ID|XDG_SESSION_PATH|XDG_SESSION_TYPE|XDG_VTNR|XMODIFIERS)\\b",n={pattern:/(^(["']?)\w+\2)[ \t]+\S.*/,lookbehind:!0,alias:"punctuation",inside:null},o={bash:n,environment:{pattern:RegExp("\\$"+t),alias:"constant"},variable:[{pattern:/\$?\(\([\s\S]+?\)\)/,greedy:!0,inside:{variable:[{pattern:/(^\$\(\([\s\S]+)\)\)/,lookbehind:!0},/^\$\(\(/],number:/\b0x[\dA-Fa-f]+\b|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:[Ee]-?\d+)?/,operator:/--|\+\+|\*\*=?|<<=?|>>=?|&&|\|\||[=!+\-*/%<>^&|]=?|[?~:]/,punctuation:/\(\(?|\)\)?|,|;/}},{pattern:/\$\((?:\([^)]+\)|[^()])+\)|`[^`]+`/,greedy:!0,inside:{variable:/^\$\(|^`|\)$|`$/}},{pattern:/\$\{[^}]+\}/,greedy:!0,inside:{operator:/:[-=?+]?|[!\/]|##?|%%?|\^\^?|,,?/,punctuation:/[\[\]]/,environment:{pattern:RegExp("(\\{)"+t),lookbehind:!0,alias:"constant"}}},/\$(?:\w+|[#?*!@$])/],entity:/\\(?:[abceEfnrtv\\"]|O?[0-7]{1,3}|U[0-9a-fA-F]{8}|u[0-9a-fA-F]{4}|x[0-9a-fA-F]{1,2})/};e.languages.bash={shebang:{pattern:/^#!\s*\/.*/,alias:"important"},comment:{pattern:/(^|[^"{\\$])#.*/,lookbehind:!0},"function-name":[{pattern:/(\bfunction\s+)[\w-]+(?=(?:\s*\(?:\s*\))?\s*\{)/,lookbehind:!0,alias:"function"},{pattern:/\b[\w-]+(?=\s*\(\s*\)\s*\{)/,alias:"function"}],"for-or-select":{pattern:/(\b(?:for|select)\s+)\w+(?=\s+in\s)/,alias:"variable",lookbehind:!0},"assign-left":{pattern:/(^|[\s;|&]|[<>]\()\w+(?=\+?=)/,inside:{environment:{pattern:RegExp("(^|[\\s;|&]|[<>]\\()"+t),lookbehind:!0,alias:"constant"}},alias:"variable",lookbehind:!0},string:[{pattern:/((?:^|[^<])<<-?\s*)(\w+)\s[\s\S]*?(?:\r?\n|\r)\2/,lookbehind:!0,greedy:!0,inside:o},{pattern:/((?:^|[^<])<<-?\s*)(["'])(\w+)\2\s[\s\S]*?(?:\r?\n|\r)\3/,lookbehind:!0,greedy:!0,inside:{bash:n}},{pattern:/(^|[^\\](?:\\\\)*)"(?:\\[\s\S]|\$\([^)]+\)|\$(?!\()|`[^`]+`|[^"\\`$])*"/,lookbehind:!0,greedy:!0,inside:o},{pattern:/(^|[^$\\])'[^']*'/,lookbehind:!0,greedy:!0},{pattern:/\$'(?:[^'\\]|\\[\s\S])*'/,greedy:!0,inside:{entity:o.entity}}],environment:{pattern:RegExp("\\$?"+t),alias:"constant"},variable:o.variable,function:{pattern:/(^|[\s;|&]|[<>]\()(?:add|apropos|apt|apt-cache|apt-get|aptitude|aspell|automysqlbackup|awk|basename|bash|bc|bconsole|bg|bzip2|cal|cat|cfdisk|chgrp|chkconfig|chmod|chown|chroot|cksum|clear|cmp|column|comm|composer|cp|cron|crontab|csplit|curl|cut|date|dc|dd|ddrescue|debootstrap|df|diff|diff3|dig|dir|dircolors|dirname|dirs|dmesg|docker|docker-compose|du|egrep|eject|env|ethtool|expand|expect|expr|fdformat|fdisk|fg|fgrep|file|find|fmt|fold|format|free|fsck|ftp|fuser|gawk|git|gparted|grep|groupadd|groupdel|groupmod|groups|grub-mkconfig|gzip|halt|head|hg|history|host|hostname|htop|iconv|id|ifconfig|ifdown|ifup|import|install|ip|jobs|join|kill|killall|less|link|ln|locate|logname|logrotate|look|lpc|lpr|lprint|lprintd|lprintq|lprm|ls|lsof|lynx|make|man|mc|mdadm|mkconfig|mkdir|mke2fs|mkfifo|mkfs|mkisofs|mknod|mkswap|mmv|more|most|mount|mtools|mtr|mutt|mv|nano|nc|netstat|nice|nl|node|nohup|notify-send|npm|nslookup|op|open|parted|passwd|paste|pathchk|ping|pkill|pnpm|podman|podman-compose|popd|pr|printcap|printenv|ps|pushd|pv|quota|quotacheck|quotactl|ram|rar|rcp|reboot|remsync|rename|renice|rev|rm|rmdir|rpm|rsync|scp|screen|sdiff|sed|sendmail|seq|service|sftp|sh|shellcheck|shuf|shutdown|sleep|slocate|sort|split|ssh|stat|strace|su|sudo|sum|suspend|swapon|sync|tac|tail|tar|tee|time|timeout|top|touch|tr|traceroute|tsort|tty|umount|uname|unexpand|uniq|units|unrar|unshar|unzip|update-grub|uptime|useradd|userdel|usermod|users|uudecode|uuencode|v|vcpkg|vdir|vi|vim|virsh|vmstat|wait|watch|wc|wget|whereis|which|who|whoami|write|xargs|xdg-open|yarn|yes|zenity|zip|zsh|zypper)(?=$|[)\s;|&])/,lookbehind:!0},keyword:{pattern:/(^|[\s;|&]|[<>]\()(?:case|do|done|elif|else|esac|fi|for|function|if|in|select|then|until|while)(?=$|[)\s;|&])/,lookbehind:!0},builtin:{pattern:/(^|[\s;|&]|[<>]\()(?:\.|:|alias|bind|break|builtin|caller|cd|command|continue|declare|echo|enable|eval|exec|exit|export|getopts|hash|help|let|local|logout|mapfile|printf|pwd|read|readarray|readonly|return|set|shift|shopt|source|test|times|trap|type|typeset|ulimit|umask|unalias|unset)(?=$|[)\s;|&])/,lookbehind:!0,alias:"class-name"},boolean:{pattern:/(^|[\s;|&]|[<>]\()(?:false|true)(?=$|[)\s;|&])/,lookbehind:!0},"file-descriptor":{pattern:/\B&\d\b/,alias:"important"},operator:{pattern:/\d?<>|>\||\+=|=[=~]?|!=?|<<[<-]?|[&\d]?>>|\d[<>]&?|[<>][&=]?|&[>&]?|\|[&|]?/,inside:{"file-descriptor":{pattern:/^\d/,alias:"important"}}},punctuation:/\$?\(\(?|\)\)?|\.\.|[{}[\];\\]/,number:{pattern:/(^|\s)(?:[1-9]\d*|0)(?:[.,]\d+)?\b/,lookbehind:!0}},n.inside=e.languages.bash;for(var r=["comment","function-name","for-or-select","assign-left","string","environment","function","keyword","builtin","boolean","file-descriptor","operator","punctuation","number"],i=o.variable[1].inside,a=0;a<r.length;a++)i[r[a]]=e.languages.bash[r[a]];e.languages.shell=e.languages.bash}(o),o.languages.clike={comment:[{pattern:/(^|[^\\])\/\*[\s\S]*?(?:\*\/|$)/,lookbehind:!0,greedy:!0},{pattern:/(^|[^\\:])\/\/.*/,lookbehind:!0,greedy:!0}],string:{pattern:/(["'])(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/,greedy:!0},"class-name":{pattern:/(\b(?:class|extends|implements|instanceof|interface|new|trait)\s+|\bcatch\s+\()[\w.\\]+/i,lookbehind:!0,inside:{punctuation:/[.\\]/}},keyword:/\b(?:break|catch|continue|do|else|finally|for|function|if|in|instanceof|new|null|return|throw|try|while)\b/,boolean:/\b(?:false|true)\b/,function:/\b\w+(?=\()/,number:/\b0x[\da-f]+\b|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:e[+-]?\d+)?/i,operator:/[<>]=?|[!=]=?=?|--?|\+\+?|&&?|\|\|?|[?*/~^%]/,punctuation:/[{}[\];(),.:]/},o.languages.c=o.languages.extend("clike",{comment:{pattern:/\/\/(?:[^\r\n\\]|\\(?:\r\n?|\n|(?![\r\n])))*|\/\*[\s\S]*?(?:\*\/|$)/,greedy:!0},string:{pattern:/"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"/,greedy:!0},"class-name":{pattern:/(\b(?:enum|struct)\s+(?:__attribute__\s*\(\([\s\S]*?\)\)\s*)?)\w+|\b[a-z]\w*_t\b/,lookbehind:!0},keyword:/\b(?:_Alignas|_Alignof|_Atomic|_Bool|_Complex|_Generic|_Imaginary|_Noreturn|_Static_assert|_Thread_local|__attribute__|asm|auto|break|case|char|const|continue|default|do|double|else|enum|extern|float|for|goto|if|inline|int|long|register|return|short|signed|sizeof|static|struct|switch|typedef|typeof|union|unsigned|void|volatile|while)\b/,function:/\b[a-z_]\w*(?=\s*\()/i,number:/(?:\b0x(?:[\da-f]+(?:\.[\da-f]*)?|\.[\da-f]+)(?:p[+-]?\d+)?|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:e[+-]?\d+)?)[ful]{0,4}/i,operator:/>>=?|<<=?|->|([-+&|:])\1|[?:~]|[-+*/%&|^!=<>]=?/}),o.languages.insertBefore("c","string",{char:{pattern:/'(?:\\(?:\r\n|[\s\S])|[^'\\\r\n]){0,32}'/,greedy:!0}}),o.languages.insertBefore("c","string",{macro:{pattern:/(^[\t ]*)#\s*[a-z](?:[^\r\n\\/]|\/(?!\*)|\/\*(?:[^*]|\*(?!\/))*\*\/|\\(?:\r\n|[\s\S]))*/im,lookbehind:!0,greedy:!0,alias:"property",inside:{string:[{pattern:/^(#\s*include\s*)<[^>]+>/,lookbehind:!0},o.languages.c.string],char:o.languages.c.char,comment:o.languages.c.comment,"macro-name":[{pattern:/(^#\s*define\s+)\w+\b(?!\()/i,lookbehind:!0},{pattern:/(^#\s*define\s+)\w+\b(?=\()/i,lookbehind:!0,alias:"function"}],directive:{pattern:/^(#\s*)[a-z]+/,lookbehind:!0,alias:"keyword"},"directive-hash":/^#/,punctuation:/##|\\(?=[\r\n])/,expression:{pattern:/\S[\s\S]*/,inside:o.languages.c}}}}),o.languages.insertBefore("c","function",{constant:/\b(?:EOF|NULL|SEEK_CUR|SEEK_END|SEEK_SET|__DATE__|__FILE__|__LINE__|__TIMESTAMP__|__TIME__|__func__|stderr|stdin|stdout)\b/}),delete o.languages.c.boolean,function(e){var t=/\b(?:alignas|alignof|asm|auto|bool|break|case|catch|char|char16_t|char32_t|char8_t|class|co_await|co_return|co_yield|compl|concept|const|const_cast|consteval|constexpr|constinit|continue|decltype|default|delete|do|double|dynamic_cast|else|enum|explicit|export|extern|final|float|for|friend|goto|if|import|inline|int|int16_t|int32_t|int64_t|int8_t|long|module|mutable|namespace|new|noexcept|nullptr|operator|override|private|protected|public|register|reinterpret_cast|requires|return|short|signed|sizeof|static|static_assert|static_cast|struct|switch|template|this|thread_local|throw|try|typedef|typeid|typename|uint16_t|uint32_t|uint64_t|uint8_t|union|unsigned|using|virtual|void|volatile|wchar_t|while)\b/,n=/\b(?!<keyword>)\w+(?:\s*\.\s*\w+)*\b/.source.replace(/<keyword>/g,(function(){return t.source}));e.languages.cpp=e.languages.extend("c",{"class-name":[{pattern:RegExp(/(\b(?:class|concept|enum|struct|typename)\s+)(?!<keyword>)\w+/.source.replace(/<keyword>/g,(function(){return t.source}))),lookbehind:!0},/\b[A-Z]\w*(?=\s*::\s*\w+\s*\()/,/\b[A-Z_]\w*(?=\s*::\s*~\w+\s*\()/i,/\b\w+(?=\s*<(?:[^<>]|<(?:[^<>]|<[^<>]*>)*>)*>\s*::\s*\w+\s*\()/],keyword:t,number:{pattern:/(?:\b0b[01']+|\b0x(?:[\da-f']+(?:\.[\da-f']*)?|\.[\da-f']+)(?:p[+-]?[\d']+)?|(?:\b[\d']+(?:\.[\d']*)?|\B\.[\d']+)(?:e[+-]?[\d']+)?)[ful]{0,4}/i,greedy:!0},operator:/>>=?|<<=?|->|--|\+\+|&&|\|\||[?:~]|<=>|[-+*/%&|^!=<>]=?|\b(?:and|and_eq|bitand|bitor|not|not_eq|or|or_eq|xor|xor_eq)\b/,boolean:/\b(?:false|true)\b/}),e.languages.insertBefore("cpp","string",{module:{pattern:RegExp(/(\b(?:import|module)\s+)/.source+"(?:"+/"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"|<[^<>\r\n]*>/.source+"|"+/<mod-name>(?:\s*:\s*<mod-name>)?|:\s*<mod-name>/.source.replace(/<mod-name>/g,(function(){return n}))+")"),lookbehind:!0,greedy:!0,inside:{string:/^[<"][\s\S]+/,operator:/:/,punctuation:/\./}},"raw-string":{pattern:/R"([^()\\ ]{0,16})\([\s\S]*?\)\1"/,alias:"string",greedy:!0}}),e.languages.insertBefore("cpp","keyword",{"generic-function":{pattern:/\b(?!operator\b)[a-z_]\w*\s*<(?:[^<>]|<[^<>]*>)*>(?=\s*\()/i,inside:{function:/^\w+/,generic:{pattern:/<[\s\S]+/,alias:"class-name",inside:e.languages.cpp}}}}),e.languages.insertBefore("cpp","operator",{"double-colon":{pattern:/::/,alias:"punctuation"}}),e.languages.insertBefore("cpp","class-name",{"base-clause":{pattern:/(\b(?:class|struct)\s+\w+\s*:\s*)[^;{}"'\s]+(?:\s+[^;{}"'\s]+)*(?=\s*[;{])/,lookbehind:!0,greedy:!0,inside:e.languages.extend("cpp",{})}}),e.languages.insertBefore("inside","double-colon",{"class-name":/\b[a-z_]\w*\b(?!\s*::)/i},e.languages.cpp["base-clause"])}(o),function(e){var t=/(?:"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"|'(?:\\(?:\r\n|[\s\S])|[^'\\\r\n])*')/;e.languages.css={comment:/\/\*[\s\S]*?\*\//,atrule:{pattern:/@[\w-](?:[^;{\s]|\s+(?![\s{]))*(?:;|(?=\s*\{))/,inside:{rule:/^@[\w-]+/,"selector-function-argument":{pattern:/(\bselector\s*\(\s*(?![\s)]))(?:[^()\s]|\s+(?![\s)])|\((?:[^()]|\([^()]*\))*\))+(?=\s*\))/,lookbehind:!0,alias:"selector"},keyword:{pattern:/(^|[^\w-])(?:and|not|only|or)(?![\w-])/,lookbehind:!0}}},url:{pattern:RegExp("\\burl\\((?:"+t.source+"|"+/(?:[^\\\r\n()"']|\\[\s\S])*/.source+")\\)","i"),greedy:!0,inside:{function:/^url/i,punctuation:/^\(|\)$/,string:{pattern:RegExp("^"+t.source+"$"),alias:"url"}}},selector:{pattern:RegExp("(^|[{}\\s])[^{}\\s](?:[^{};\"'\\s]|\\s+(?![\\s{])|"+t.source+")*(?=\\s*\\{)"),lookbehind:!0},string:{pattern:t,greedy:!0},property:{pattern:/(^|[^-\w\xA0-\uFFFF])(?!\s)[-_a-z\xA0-\uFFFF](?:(?!\s)[-\w\xA0-\uFFFF])*(?=\s*:)/i,lookbehind:!0},important:/!important\b/i,function:{pattern:/(^|[^-a-z0-9])[-a-z0-9]+(?=\()/i,lookbehind:!0},punctuation:/[(){};:,]/},e.languages.css.atrule.inside.rest=e.languages.css;var n=e.languages.markup;n&&(n.tag.addInlined("style","css"),n.tag.addAttribute("style","css"))}(o),function(e){var t,n=/("|')(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/;e.languages.css.selector={pattern:e.languages.css.selector.pattern,lookbehind:!0,inside:t={"pseudo-element":/:(?:after|before|first-letter|first-line|selection)|::[-\w]+/,"pseudo-class":/:[-\w]+/,class:/\.[-\w]+/,id:/#[-\w]+/,attribute:{pattern:RegExp("\\[(?:[^[\\]\"']|"+n.source+")*\\]"),greedy:!0,inside:{punctuation:/^\[|\]$/,"case-sensitivity":{pattern:/(\s)[si]$/i,lookbehind:!0,alias:"keyword"},namespace:{pattern:/^(\s*)(?:(?!\s)[-*\w\xA0-\uFFFF])*\|(?!=)/,lookbehind:!0,inside:{punctuation:/\|$/}},"attr-name":{pattern:/^(\s*)(?:(?!\s)[-\w\xA0-\uFFFF])+/,lookbehind:!0},"attr-value":[n,{pattern:/(=\s*)(?:(?!\s)[-\w\xA0-\uFFFF])+(?=\s*$)/,lookbehind:!0}],operator:/[|~*^$]?=/}},"n-th":[{pattern:/(\(\s*)[+-]?\d*[\dn](?:\s*[+-]\s*\d+)?(?=\s*\))/,lookbehind:!0,inside:{number:/[\dn]+/,operator:/[+-]/}},{pattern:/(\(\s*)(?:even|odd)(?=\s*\))/i,lookbehind:!0}],combinator:/>|\+|~|\|\|/,punctuation:/[(),]/}},e.languages.css.atrule.inside["selector-function-argument"].inside=t,e.languages.insertBefore("css","property",{variable:{pattern:/(^|[^-\w\xA0-\uFFFF])--(?!\s)[-_a-z\xA0-\uFFFF](?:(?!\s)[-\w\xA0-\uFFFF])*/i,lookbehind:!0}});var o={pattern:/(\b\d+)(?:%|[a-z]+(?![\w-]))/,lookbehind:!0},r={pattern:/(^|[^\w.-])-?(?:\d+(?:\.\d+)?|\.\d+)/,lookbehind:!0};e.languages.insertBefore("css","function",{operator:{pattern:/(\s)[+\-*\/](?=\s)/,lookbehind:!0},hexcode:{pattern:/\B#[\da-f]{3,8}\b/i,alias:"color"},color:[{pattern:/(^|[^\w-])(?:AliceBlue|AntiqueWhite|Aqua|Aquamarine|Azure|Beige|Bisque|Black|BlanchedAlmond|Blue|BlueViolet|Brown|BurlyWood|CadetBlue|Chartreuse|Chocolate|Coral|CornflowerBlue|Cornsilk|Crimson|Cyan|DarkBlue|DarkCyan|DarkGoldenRod|DarkGr[ae]y|DarkGreen|DarkKhaki|DarkMagenta|DarkOliveGreen|DarkOrange|DarkOrchid|DarkRed|DarkSalmon|DarkSeaGreen|DarkSlateBlue|DarkSlateGr[ae]y|DarkTurquoise|DarkViolet|DeepPink|DeepSkyBlue|DimGr[ae]y|DodgerBlue|FireBrick|FloralWhite|ForestGreen|Fuchsia|Gainsboro|GhostWhite|Gold|GoldenRod|Gr[ae]y|Green|GreenYellow|HoneyDew|HotPink|IndianRed|Indigo|Ivory|Khaki|Lavender|LavenderBlush|LawnGreen|LemonChiffon|LightBlue|LightCoral|LightCyan|LightGoldenRodYellow|LightGr[ae]y|LightGreen|LightPink|LightSalmon|LightSeaGreen|LightSkyBlue|LightSlateGr[ae]y|LightSteelBlue|LightYellow|Lime|LimeGreen|Linen|Magenta|Maroon|MediumAquaMarine|MediumBlue|MediumOrchid|MediumPurple|MediumSeaGreen|MediumSlateBlue|MediumSpringGreen|MediumTurquoise|MediumVioletRed|MidnightBlue|MintCream|MistyRose|Moccasin|NavajoWhite|Navy|OldLace|Olive|OliveDrab|Orange|OrangeRed|Orchid|PaleGoldenRod|PaleGreen|PaleTurquoise|PaleVioletRed|PapayaWhip|PeachPuff|Peru|Pink|Plum|PowderBlue|Purple|Red|RosyBrown|RoyalBlue|SaddleBrown|Salmon|SandyBrown|SeaGreen|SeaShell|Sienna|Silver|SkyBlue|SlateBlue|SlateGr[ae]y|Snow|SpringGreen|SteelBlue|Tan|Teal|Thistle|Tomato|Transparent|Turquoise|Violet|Wheat|White|WhiteSmoke|Yellow|YellowGreen)(?![\w-])/i,lookbehind:!0},{pattern:/\b(?:hsl|rgb)\(\s*\d{1,3}\s*,\s*\d{1,3}%?\s*,\s*\d{1,3}%?\s*\)\B|\b(?:hsl|rgb)a\(\s*\d{1,3}\s*,\s*\d{1,3}%?\s*,\s*\d{1,3}%?\s*,\s*(?:0|0?\.\d+|1)\s*\)\B/i,inside:{unit:o,number:r,function:/[\w-]+(?=\()/,punctuation:/[(),]/}}],entity:/\\[\da-f]{1,8}/i,unit:o,number:r})}(o),o.languages.javascript=o.languages.extend("clike",{"class-name":[o.languages.clike["class-name"],{pattern:/(^|[^$\w\xA0-\uFFFF])(?!\s)[_$A-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\.(?:constructor|prototype))/,lookbehind:!0}],keyword:[{pattern:/((?:^|\})\s*)catch\b/,lookbehind:!0},{pattern:/(^|[^.]|\.\.\.\s*)\b(?:as|assert(?=\s*\{)|async(?=\s*(?:function\b|\(|[$\w\xA0-\uFFFF]|$))|await|break|case|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally(?=\s*(?:\{|$))|for|from(?=\s*(?:['"]|$))|function|(?:get|set)(?=\s*(?:[#\[$\w\xA0-\uFFFF]|$))|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)\b/,lookbehind:!0}],function:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*(?:\.\s*(?:apply|bind|call)\s*)?\()/,number:{pattern:RegExp(/(^|[^\w$])/.source+"(?:"+/NaN|Infinity/.source+"|"+/0[bB][01]+(?:_[01]+)*n?/.source+"|"+/0[oO][0-7]+(?:_[0-7]+)*n?/.source+"|"+/0[xX][\dA-Fa-f]+(?:_[\dA-Fa-f]+)*n?/.source+"|"+/\d+(?:_\d+)*n/.source+"|"+/(?:\d+(?:_\d+)*(?:\.(?:\d+(?:_\d+)*)?)?|\.\d+(?:_\d+)*)(?:[Ee][+-]?\d+(?:_\d+)*)?/.source+")"+/(?![\w$])/.source),lookbehind:!0},operator:/--|\+\+|\*\*=?|=>|&&=?|\|\|=?|[!=]==|<<=?|>>>?=?|[-+*/%&|^!=<>]=?|\.{3}|\?\?=?|\?\.?|[~:]/}),o.languages.javascript["class-name"][0].pattern=/(\b(?:class|extends|implements|instanceof|interface|new)\s+)[\w.\\]+/,o.languages.insertBefore("javascript","keyword",{regex:{pattern:/((?:^|[^$\w\xA0-\uFFFF."'\])\s]|\b(?:return|yield))\s*)\/(?:\[(?:[^\]\\\r\n]|\\.)*\]|\\.|[^/\\\[\r\n])+\/[dgimyus]{0,7}(?=(?:\s|\/\*(?:[^*]|\*(?!\/))*\*\/)*(?:$|[\r\n,.;:})\]]|\/\/))/,lookbehind:!0,greedy:!0,inside:{"regex-source":{pattern:/^(\/)[\s\S]+(?=\/[a-z]*$)/,lookbehind:!0,alias:"language-regex",inside:o.languages.regex},"regex-delimiter":/^\/|\/$/,"regex-flags":/^[a-z]+$/}},"function-variable":{pattern:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*[=:]\s*(?:async\s*)?(?:\bfunction\b|(?:\((?:[^()]|\([^()]*\))*\)|(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*)\s*=>))/,alias:"function"},parameter:[{pattern:/(function(?:\s+(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*)?\s*\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\))/,lookbehind:!0,inside:o.languages.javascript},{pattern:/(^|[^$\w\xA0-\uFFFF])(?!\s)[_$a-z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*=>)/i,lookbehind:!0,inside:o.languages.javascript},{pattern:/(\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\)\s*=>)/,lookbehind:!0,inside:o.languages.javascript},{pattern:/((?:\b|\s|^)(?!(?:as|async|await|break|case|catch|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally|for|from|function|get|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|set|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)(?![$\w\xA0-\uFFFF]))(?:(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*\s*)\(\s*|\]\s*\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\)\s*\{)/,lookbehind:!0,inside:o.languages.javascript}],constant:/\b[A-Z](?:[A-Z_]|\dx?)*\b/}),o.languages.insertBefore("javascript","string",{hashbang:{pattern:/^#!.*/,greedy:!0,alias:"comment"},"template-string":{pattern:/`(?:\\[\s\S]|\$\{(?:[^{}]|\{(?:[^{}]|\{[^}]*\})*\})+\}|(?!\$\{)[^\\`])*`/,greedy:!0,inside:{"template-punctuation":{pattern:/^`|`$/,alias:"string"},interpolation:{pattern:/((?:^|[^\\])(?:\\{2})*)\$\{(?:[^{}]|\{(?:[^{}]|\{[^}]*\})*\})+\}/,lookbehind:!0,inside:{"interpolation-punctuation":{pattern:/^\$\{|\}$/,alias:"punctuation"},rest:o.languages.javascript}},string:/[\s\S]+/}},"string-property":{pattern:/((?:^|[,{])[ \t]*)(["'])(?:\\(?:\r\n|[\s\S])|(?!\2)[^\\\r\n])*\2(?=\s*:)/m,lookbehind:!0,greedy:!0,alias:"property"}}),o.languages.insertBefore("javascript","operator",{"literal-property":{pattern:/((?:^|[,{])[ \t]*)(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*:)/m,lookbehind:!0,alias:"property"}}),o.languages.markup&&(o.languages.markup.tag.addInlined("script","javascript"),o.languages.markup.tag.addAttribute(/on(?:abort|blur|change|click|composition(?:end|start|update)|dblclick|error|focus(?:in|out)?|key(?:down|up)|load|mouse(?:down|enter|leave|move|out|over|up)|reset|resize|scroll|select|slotchange|submit|unload|wheel)/.source,"javascript")),o.languages.js=o.languages.javascript,function(e){var t=/#(?!\{).+/,n={pattern:/#\{[^}]+\}/,alias:"variable"};e.languages.coffeescript=e.languages.extend("javascript",{comment:t,string:[{pattern:/'(?:\\[\s\S]|[^\\'])*'/,greedy:!0},{pattern:/"(?:\\[\s\S]|[^\\"])*"/,greedy:!0,inside:{interpolation:n}}],keyword:/\b(?:and|break|by|catch|class|continue|debugger|delete|do|each|else|extend|extends|false|finally|for|if|in|instanceof|is|isnt|let|loop|namespace|new|no|not|null|of|off|on|or|own|return|super|switch|then|this|throw|true|try|typeof|undefined|unless|until|when|while|window|with|yes|yield)\b/,"class-member":{pattern:/@(?!\d)\w+/,alias:"variable"}}),e.languages.insertBefore("coffeescript","comment",{"multiline-comment":{pattern:/###[\s\S]+?###/,alias:"comment"},"block-regex":{pattern:/\/{3}[\s\S]*?\/{3}/,alias:"regex",inside:{comment:t,interpolation:n}}}),e.languages.insertBefore("coffeescript","string",{"inline-javascript":{pattern:/`(?:\\[\s\S]|[^\\`])*`/,inside:{delimiter:{pattern:/^`|`$/,alias:"punctuation"},script:{pattern:/[\s\S]+/,alias:"language-javascript",inside:e.languages.javascript}}},"multiline-string":[{pattern:/'''[\s\S]*?'''/,greedy:!0,alias:"string"},{pattern:/"""[\s\S]*?"""/,greedy:!0,alias:"string",inside:{interpolation:n}}]}),e.languages.insertBefore("coffeescript","keyword",{property:/(?!\d)\w+(?=\s*:(?!:))/}),delete e.languages.coffeescript["template-string"],e.languages.coffee=e.languages.coffeescript}(o),function(e){var t=/[*&][^\s[\]{},]+/,n=/!(?:<[\w\-%#;/?:@&=+$,.!~*'()[\]]+>|(?:[a-zA-Z\d-]*!)?[\w\-%#;/?:@&=+$.~*'()]+)?/,o="(?:"+n.source+"(?:[ \t]+"+t.source+")?|"+t.source+"(?:[ \t]+"+n.source+")?)",r=/(?:[^\s\x00-\x08\x0e-\x1f!"#%&'*,\-:>?@[\]`{|}\x7f-\x84\x86-\x9f\ud800-\udfff\ufffe\uffff]|[?:-]<PLAIN>)(?:[ \t]*(?:(?![#:])<PLAIN>|:<PLAIN>))*/.source.replace(/<PLAIN>/g,(function(){return/[^\s\x00-\x08\x0e-\x1f,[\]{}\x7f-\x84\x86-\x9f\ud800-\udfff\ufffe\uffff]/.source})),i=/"(?:[^"\\\r\n]|\\.)*"|'(?:[^'\\\r\n]|\\.)*'/.source;function a(e,t){t=(t||"").replace(/m/g,"")+"m";var n=/([:\-,[{]\s*(?:\s<<prop>>[ \t]+)?)(?:<<value>>)(?=[ \t]*(?:$|,|\]|\}|(?:[\r\n]\s*)?#))/.source.replace(/<<prop>>/g,(function(){return o})).replace(/<<value>>/g,(function(){return e}));return RegExp(n,t)}e.languages.yaml={scalar:{pattern:RegExp(/([\-:]\s*(?:\s<<prop>>[ \t]+)?[|>])[ \t]*(?:((?:\r?\n|\r)[ \t]+)\S[^\r\n]*(?:\2[^\r\n]+)*)/.source.replace(/<<prop>>/g,(function(){return o}))),lookbehind:!0,alias:"string"},comment:/#.*/,key:{pattern:RegExp(/((?:^|[:\-,[{\r\n?])[ \t]*(?:<<prop>>[ \t]+)?)<<key>>(?=\s*:\s)/.source.replace(/<<prop>>/g,(function(){return o})).replace(/<<key>>/g,(function(){return"(?:"+r+"|"+i+")"}))),lookbehind:!0,greedy:!0,alias:"atrule"},directive:{pattern:/(^[ \t]*)%.+/m,lookbehind:!0,alias:"important"},datetime:{pattern:a(/\d{4}-\d\d?-\d\d?(?:[tT]|[ \t]+)\d\d?:\d{2}:\d{2}(?:\.\d*)?(?:[ \t]*(?:Z|[-+]\d\d?(?::\d{2})?))?|\d{4}-\d{2}-\d{2}|\d\d?:\d{2}(?::\d{2}(?:\.\d*)?)?/.source),lookbehind:!0,alias:"number"},boolean:{pattern:a(/false|true/.source,"i"),lookbehind:!0,alias:"important"},null:{pattern:a(/null|~/.source,"i"),lookbehind:!0,alias:"important"},string:{pattern:a(i),lookbehind:!0,greedy:!0},number:{pattern:a(/[+-]?(?:0x[\da-f]+|0o[0-7]+|(?:\d+(?:\.\d*)?|\.\d+)(?:e[+-]?\d+)?|\.inf|\.nan)/.source,"i"),lookbehind:!0},tag:n,important:t,punctuation:/---|[:[\]{}\-,|>?]|\.\.\./},e.languages.yml=e.languages.yaml}(o),function(e){var t=/(?:\\.|[^\\\n\r]|(?:\n|\r\n?)(?![\r\n]))/.source;function n(e){return e=e.replace(/<inner>/g,(function(){return t})),RegExp(/((?:^|[^\\])(?:\\{2})*)/.source+"(?:"+e+")")}var o=/(?:\\.|``(?:[^`\r\n]|`(?!`))+``|`[^`\r\n]+`|[^\\|\r\n`])+/.source,r=/\|?__(?:\|__)+\|?(?:(?:\n|\r\n?)|(?![\s\S]))/.source.replace(/__/g,(function(){return o})),i=/\|?[ \t]*:?-{3,}:?[ \t]*(?:\|[ \t]*:?-{3,}:?[ \t]*)+\|?(?:\n|\r\n?)/.source;e.languages.markdown=e.languages.extend("markup",{}),e.languages.insertBefore("markdown","prolog",{"front-matter-block":{pattern:/(^(?:\s*[\r\n])?)---(?!.)[\s\S]*?[\r\n]---(?!.)/,lookbehind:!0,greedy:!0,inside:{punctuation:/^---|---$/,"front-matter":{pattern:/\S+(?:\s+\S+)*/,alias:["yaml","language-yaml"],inside:e.languages.yaml}}},blockquote:{pattern:/^>(?:[\t ]*>)*/m,alias:"punctuation"},table:{pattern:RegExp("^"+r+i+"(?:"+r+")*","m"),inside:{"table-data-rows":{pattern:RegExp("^("+r+i+")(?:"+r+")*$"),lookbehind:!0,inside:{"table-data":{pattern:RegExp(o),inside:e.languages.markdown},punctuation:/\|/}},"table-line":{pattern:RegExp("^("+r+")"+i+"$"),lookbehind:!0,inside:{punctuation:/\||:?-{3,}:?/}},"table-header-row":{pattern:RegExp("^"+r+"$"),inside:{"table-header":{pattern:RegExp(o),alias:"important",inside:e.languages.markdown},punctuation:/\|/}}}},code:[{pattern:/((?:^|\n)[ \t]*\n|(?:^|\r\n?)[ \t]*\r\n?)(?: {4}|\t).+(?:(?:\n|\r\n?)(?: {4}|\t).+)*/,lookbehind:!0,alias:"keyword"},{pattern:/^```[\s\S]*?^```$/m,greedy:!0,inside:{"code-block":{pattern:/^(```.*(?:\n|\r\n?))[\s\S]+?(?=(?:\n|\r\n?)^```$)/m,lookbehind:!0},"code-language":{pattern:/^(```).+/,lookbehind:!0},punctuation:/```/}}],title:[{pattern:/\S.*(?:\n|\r\n?)(?:==+|--+)(?=[ \t]*$)/m,alias:"important",inside:{punctuation:/==+$|--+$/}},{pattern:/(^\s*)#.+/m,lookbehind:!0,alias:"important",inside:{punctuation:/^#+|#+$/}}],hr:{pattern:/(^\s*)([*-])(?:[\t ]*\2){2,}(?=\s*$)/m,lookbehind:!0,alias:"punctuation"},list:{pattern:/(^\s*)(?:[*+-]|\d+\.)(?=[\t ].)/m,lookbehind:!0,alias:"punctuation"},"url-reference":{pattern:/!?\[[^\]]+\]:[\t ]+(?:\S+|<(?:\\.|[^>\\])+>)(?:[\t ]+(?:"(?:\\.|[^"\\])*"|'(?:\\.|[^'\\])*'|\((?:\\.|[^)\\])*\)))?/,inside:{variable:{pattern:/^(!?\[)[^\]]+/,lookbehind:!0},string:/(?:"(?:\\.|[^"\\])*"|'(?:\\.|[^'\\])*'|\((?:\\.|[^)\\])*\))$/,punctuation:/^[\[\]!:]|[<>]/},alias:"url"},bold:{pattern:n(/\b__(?:(?!_)<inner>|_(?:(?!_)<inner>)+_)+__\b|\*\*(?:(?!\*)<inner>|\*(?:(?!\*)<inner>)+\*)+\*\*/.source),lookbehind:!0,greedy:!0,inside:{content:{pattern:/(^..)[\s\S]+(?=..$)/,lookbehind:!0,inside:{}},punctuation:/\*\*|__/}},italic:{pattern:n(/\b_(?:(?!_)<inner>|__(?:(?!_)<inner>)+__)+_\b|\*(?:(?!\*)<inner>|\*\*(?:(?!\*)<inner>)+\*\*)+\*/.source),lookbehind:!0,greedy:!0,inside:{content:{pattern:/(^.)[\s\S]+(?=.$)/,lookbehind:!0,inside:{}},punctuation:/[*_]/}},strike:{pattern:n(/(~~?)(?:(?!~)<inner>)+\2/.source),lookbehind:!0,greedy:!0,inside:{content:{pattern:/(^~~?)[\s\S]+(?=\1$)/,lookbehind:!0,inside:{}},punctuation:/~~?/}},"code-snippet":{pattern:/(^|[^\\`])(?:``[^`\r\n]+(?:`[^`\r\n]+)*``(?!`)|`[^`\r\n]+`(?!`))/,lookbehind:!0,greedy:!0,alias:["code","keyword"]},url:{pattern:n(/!?\[(?:(?!\])<inner>)+\](?:\([^\s)]+(?:[\t ]+"(?:\\.|[^"\\])*")?\)|[ \t]?\[(?:(?!\])<inner>)+\])/.source),lookbehind:!0,greedy:!0,inside:{operator:/^!/,content:{pattern:/(^\[)[^\]]+(?=\])/,lookbehind:!0,inside:{}},variable:{pattern:/(^\][ \t]?\[)[^\]]+(?=\]$)/,lookbehind:!0},url:{pattern:/(^\]\()[^\s)]+/,lookbehind:!0},string:{pattern:/(^[ \t]+)"(?:\\.|[^"\\])*"(?=\)$)/,lookbehind:!0}}}}),["url","bold","italic","strike"].forEach((function(t){["url","bold","italic","strike","code-snippet"].forEach((function(n){t!==n&&(e.languages.markdown[t].inside.content.inside[n]=e.languages.markdown[n])}))})),e.hooks.add("after-tokenize",(function(e){"markdown"!==e.language&&"md"!==e.language||function e(t){if(t&&"string"!=typeof t)for(var n=0,o=t.length;n<o;n++){var r=t[n];if("code"===r.type){var i=r.content[1],a=r.content[3];if(i&&a&&"code-language"===i.type&&"code-block"===a.type&&"string"==typeof i.content){var s=i.content.replace(/\b#/g,"sharp").replace(/\b\+\+/g,"pp"),c="language-"+(s=(/[a-z][\w-]*/i.exec(s)||[""])[0].toLowerCase());a.alias?"string"==typeof a.alias?a.alias=[a.alias,c]:a.alias.push(c):a.alias=[c]}}else e(r.content)}}(e.tokens)})),e.hooks.add("wrap",(function(t){if("code-block"===t.type){for(var n="",o=0,r=t.classes.length;o<r;o++){var i=t.classes[o],d=/language-(.+)/.exec(i);if(d){n=d[1];break}}var l,u=e.languages[n];if(u)t.content=e.highlight((l=t.content,l.replace(a,"").replace(/&(\w{1,8}|#x?[\da-f]{1,8});/gi,(function(e,t){var n;if("#"===(t=t.toLowerCase())[0])return n="x"===t[1]?parseInt(t.slice(2),16):Number(t.slice(1)),c(n);var o=s[t];return o||e}))),u,n);else if(n&&"none"!==n&&e.plugins.autoloader){var p="md-"+(new Date).valueOf()+"-"+Math.floor(1e16*Math.random());t.attributes.id=p,e.plugins.autoloader.loadLanguages(n,(function(){var t=document.getElementById(p);t&&(t.innerHTML=e.highlight(t.textContent,e.languages[n],n))}))}}}));var a=RegExp(e.languages.markup.tag.pattern.source,"gi"),s={amp:"&",lt:"<",gt:">",quot:'"'},c=String.fromCodePoint||String.fromCharCode;e.languages.md=e.languages.markdown}(o),o.languages.graphql={comment:/#.*/,description:{pattern:/(?:"""(?:[^"]|(?!""")")*"""|"(?:\\.|[^\\"\r\n])*")(?=\s*[a-z_])/i,greedy:!0,alias:"string",inside:{"language-markdown":{pattern:/(^"(?:"")?)(?!\1)[\s\S]+(?=\1$)/,lookbehind:!0,inside:o.languages.markdown}}},string:{pattern:/"""(?:[^"]|(?!""")")*"""|"(?:\\.|[^\\"\r\n])*"/,greedy:!0},number:/(?:\B-|\b)\d+(?:\.\d+)?(?:e[+-]?\d+)?\b/i,boolean:/\b(?:false|true)\b/,variable:/\$[a-z_]\w*/i,directive:{pattern:/@[a-z_]\w*/i,alias:"function"},"attr-name":{pattern:/\b[a-z_]\w*(?=\s*(?:\((?:[^()"]|"(?:\\.|[^\\"\r\n])*")*\))?:)/i,greedy:!0},"atom-input":{pattern:/\b[A-Z]\w*Input\b/,alias:"class-name"},scalar:/\b(?:Boolean|Float|ID|Int|String)\b/,constant:/\b[A-Z][A-Z_\d]*\b/,"class-name":{pattern:/(\b(?:enum|implements|interface|on|scalar|type|union)\s+|&\s*|:\s*|\[)[A-Z_]\w*/,lookbehind:!0},fragment:{pattern:/(\bfragment\s+|\.{3}\s*(?!on\b))[a-zA-Z_]\w*/,lookbehind:!0,alias:"function"},"definition-mutation":{pattern:/(\bmutation\s+)[a-zA-Z_]\w*/,lookbehind:!0,alias:"function"},"definition-query":{pattern:/(\bquery\s+)[a-zA-Z_]\w*/,lookbehind:!0,alias:"function"},keyword:/\b(?:directive|enum|extend|fragment|implements|input|interface|mutation|on|query|repeatable|scalar|schema|subscription|type|union)\b/,operator:/[!=|&]|\.{3}/,"property-query":/\w+(?=\s*\()/,object:/\w+(?=\s*\{)/,punctuation:/[!(){}\[\]:=,]/,property:/\w+/},o.hooks.add("after-tokenize",(function(e){if("graphql"===e.language)for(var t=e.tokens.filter((function(e){return"string"!=typeof e&&"comment"!==e.type&&"scalar"!==e.type})),n=0;n<t.length;){var o=t[n++];if("keyword"===o.type&&"mutation"===o.content){var r=[];if(u(["definition-mutation","punctuation"])&&"("===l(1).content){n+=2;var i=p(/^\($/,/^\)$/);if(-1===i)continue;for(;n<i;n++){var a=l(0);"variable"===a.type&&(m(a,"variable-input"),r.push(a.content))}n=i+1}if(u(["punctuation","property-query"])&&"{"===l(0).content&&(n++,m(l(0),"property-mutation"),r.length>0)){var s=p(/^\{$/,/^\}$/);if(-1===s)continue;for(var c=n;c<s;c++){var d=t[c];"variable"===d.type&&r.indexOf(d.content)>=0&&m(d,"variable-input")}}}}function l(e){return t[n+e]}function u(e,t){t=t||0;for(var n=0;n<e.length;n++){var o=l(n+t);if(!o||o.type!==e[n])return!1}return!0}function p(e,o){for(var r=1,i=n;i<t.length;i++){var a=t[i],s=a.content;if("punctuation"===a.type&&"string"==typeof s)if(e.test(s))r++;else if(o.test(s)&&0===--r)return i}return-1}function m(e,t){var n=e.alias;n?Array.isArray(n)||(e.alias=n=[n]):e.alias=n=[],n.push(t)}})),o.languages.sql={comment:{pattern:/(^|[^\\])(?:\/\*[\s\S]*?\*\/|(?:--|\/\/|#).*)/,lookbehind:!0},variable:[{pattern:/@(["'`])(?:\\[\s\S]|(?!\1)[^\\])+\1/,greedy:!0},/@[\w.$]+/],string:{pattern:/(^|[^@\\])("|')(?:\\[\s\S]|(?!\2)[^\\]|\2\2)*\2/,greedy:!0,lookbehind:!0},identifier:{pattern:/(^|[^@\\])`(?:\\[\s\S]|[^`\\]|``)*`/,greedy:!0,lookbehind:!0,inside:{punctuation:/^`|`$/}},function:/\b(?:AVG|COUNT|FIRST|FORMAT|LAST|LCASE|LEN|MAX|MID|MIN|MOD|NOW|ROUND|SUM|UCASE)(?=\s*\()/i,keyword:/\b(?:ACTION|ADD|AFTER|ALGORITHM|ALL|ALTER|ANALYZE|ANY|APPLY|AS|ASC|AUTHORIZATION|AUTO_INCREMENT|BACKUP|BDB|BEGIN|BERKELEYDB|BIGINT|BINARY|BIT|BLOB|BOOL|BOOLEAN|BREAK|BROWSE|BTREE|BULK|BY|CALL|CASCADED?|CASE|CHAIN|CHAR(?:ACTER|SET)?|CHECK(?:POINT)?|CLOSE|CLUSTERED|COALESCE|COLLATE|COLUMNS?|COMMENT|COMMIT(?:TED)?|COMPUTE|CONNECT|CONSISTENT|CONSTRAINT|CONTAINS(?:TABLE)?|CONTINUE|CONVERT|CREATE|CROSS|CURRENT(?:_DATE|_TIME|_TIMESTAMP|_USER)?|CURSOR|CYCLE|DATA(?:BASES?)?|DATE(?:TIME)?|DAY|DBCC|DEALLOCATE|DEC|DECIMAL|DECLARE|DEFAULT|DEFINER|DELAYED|DELETE|DELIMITERS?|DENY|DESC|DESCRIBE|DETERMINISTIC|DISABLE|DISCARD|DISK|DISTINCT|DISTINCTROW|DISTRIBUTED|DO|DOUBLE|DROP|DUMMY|DUMP(?:FILE)?|DUPLICATE|ELSE(?:IF)?|ENABLE|ENCLOSED|END|ENGINE|ENUM|ERRLVL|ERRORS|ESCAPED?|EXCEPT|EXEC(?:UTE)?|EXISTS|EXIT|EXPLAIN|EXTENDED|FETCH|FIELDS|FILE|FILLFACTOR|FIRST|FIXED|FLOAT|FOLLOWING|FOR(?: EACH ROW)?|FORCE|FOREIGN|FREETEXT(?:TABLE)?|FROM|FULL|FUNCTION|GEOMETRY(?:COLLECTION)?|GLOBAL|GOTO|GRANT|GROUP|HANDLER|HASH|HAVING|HOLDLOCK|HOUR|IDENTITY(?:COL|_INSERT)?|IF|IGNORE|IMPORT|INDEX|INFILE|INNER|INNODB|INOUT|INSERT|INT|INTEGER|INTERSECT|INTERVAL|INTO|INVOKER|ISOLATION|ITERATE|JOIN|KEYS?|KILL|LANGUAGE|LAST|LEAVE|LEFT|LEVEL|LIMIT|LINENO|LINES|LINESTRING|LOAD|LOCAL|LOCK|LONG(?:BLOB|TEXT)|LOOP|MATCH(?:ED)?|MEDIUM(?:BLOB|INT|TEXT)|MERGE|MIDDLEINT|MINUTE|MODE|MODIFIES|MODIFY|MONTH|MULTI(?:LINESTRING|POINT|POLYGON)|NATIONAL|NATURAL|NCHAR|NEXT|NO|NONCLUSTERED|NULLIF|NUMERIC|OFF?|OFFSETS?|ON|OPEN(?:DATASOURCE|QUERY|ROWSET)?|OPTIMIZE|OPTION(?:ALLY)?|ORDER|OUT(?:ER|FILE)?|OVER|PARTIAL|PARTITION|PERCENT|PIVOT|PLAN|POINT|POLYGON|PRECEDING|PRECISION|PREPARE|PREV|PRIMARY|PRINT|PRIVILEGES|PROC(?:EDURE)?|PUBLIC|PURGE|QUICK|RAISERROR|READS?|REAL|RECONFIGURE|REFERENCES|RELEASE|RENAME|REPEAT(?:ABLE)?|REPLACE|REPLICATION|REQUIRE|RESIGNAL|RESTORE|RESTRICT|RETURN(?:ING|S)?|REVOKE|RIGHT|ROLLBACK|ROUTINE|ROW(?:COUNT|GUIDCOL|S)?|RTREE|RULE|SAVE(?:POINT)?|SCHEMA|SECOND|SELECT|SERIAL(?:IZABLE)?|SESSION(?:_USER)?|SET(?:USER)?|SHARE|SHOW|SHUTDOWN|SIMPLE|SMALLINT|SNAPSHOT|SOME|SONAME|SQL|START(?:ING)?|STATISTICS|STATUS|STRIPED|SYSTEM_USER|TABLES?|TABLESPACE|TEMP(?:ORARY|TABLE)?|TERMINATED|TEXT(?:SIZE)?|THEN|TIME(?:STAMP)?|TINY(?:BLOB|INT|TEXT)|TOP?|TRAN(?:SACTIONS?)?|TRIGGER|TRUNCATE|TSEQUAL|TYPES?|UNBOUNDED|UNCOMMITTED|UNDEFINED|UNION|UNIQUE|UNLOCK|UNPIVOT|UNSIGNED|UPDATE(?:TEXT)?|USAGE|USE|USER|USING|VALUES?|VAR(?:BINARY|CHAR|CHARACTER|YING)|VIEW|WAITFOR|WARNINGS|WHEN|WHERE|WHILE|WITH(?: ROLLUP|IN)?|WORK|WRITE(?:TEXT)?|YEAR)\b/i,boolean:/\b(?:FALSE|NULL|TRUE)\b/i,number:/\b0x[\da-f]+\b|\b\d+(?:\.\d*)?|\B\.\d+\b/i,operator:/[-+*\/=%^~]|&&?|\|\|?|!=?|<(?:=>?|<|>)?|>[>=]?|\b(?:AND|BETWEEN|DIV|ILIKE|IN|IS|LIKE|NOT|OR|REGEXP|RLIKE|SOUNDS LIKE|XOR)\b/i,punctuation:/[;[\]()`,.]/},function(e){var t=e.languages.javascript["template-string"],n=t.pattern.source,o=t.inside.interpolation,r=o.inside["interpolation-punctuation"],i=o.pattern.source;function a(t,o){if(e.languages[t])return{pattern:RegExp("((?:"+o+")\\s*)"+n),lookbehind:!0,greedy:!0,inside:{"template-punctuation":{pattern:/^`|`$/,alias:"string"},"embedded-code":{pattern:/[\s\S]+/,alias:t}}}}function s(e,t){return"___"+t.toUpperCase()+"_"+e+"___"}function c(t,n,o){var r={code:t,grammar:n,language:o};return e.hooks.run("before-tokenize",r),r.tokens=e.tokenize(r.code,r.grammar),e.hooks.run("after-tokenize",r),r.tokens}function d(t){var n={};n["interpolation-punctuation"]=r;var i=e.tokenize(t,n);if(3===i.length){var a=[1,1];a.push.apply(a,c(i[1],e.languages.javascript,"javascript")),i.splice.apply(i,a)}return new e.Token("interpolation",i,o.alias,t)}function l(t,n,o){var r=e.tokenize(t,{interpolation:{pattern:RegExp(i),lookbehind:!0}}),a=0,l={},u=c(r.map((function(e){if("string"==typeof e)return e;for(var n,r=e.content;-1!==t.indexOf(n=s(a++,o)););return l[n]=r,n})).join(""),n,o),p=Object.keys(l);return a=0,function e(t){for(var n=0;n<t.length;n++){if(a>=p.length)return;var o=t[n];if("string"==typeof o||"string"==typeof o.content){var r=p[a],i="string"==typeof o?o:o.content,s=i.indexOf(r);if(-1!==s){++a;var c=i.substring(0,s),u=d(l[r]),m=i.substring(s+r.length),f=[];if(c&&f.push(c),f.push(u),m){var b=[m];e(b),f.push.apply(f,b)}"string"==typeof o?(t.splice.apply(t,[n,1].concat(f)),n+=f.length-1):o.content=f}}else{var h=o.content;Array.isArray(h)?e(h):e([h])}}}(u),new e.Token(o,u,"language-"+o,t)}e.languages.javascript["template-string"]=[a("css",/\b(?:styled(?:\([^)]*\))?(?:\s*\.\s*\w+(?:\([^)]*\))*)*|css(?:\s*\.\s*(?:global|resolve))?|createGlobalStyle|keyframes)/.source),a("html",/\bhtml|\.\s*(?:inner|outer)HTML\s*\+?=/.source),a("svg",/\bsvg/.source),a("markdown",/\b(?:markdown|md)/.source),a("graphql",/\b(?:gql|graphql(?:\s*\.\s*experimental)?)/.source),a("sql",/\bsql/.source),t].filter(Boolean);var u={javascript:!0,js:!0,typescript:!0,ts:!0,jsx:!0,tsx:!0};function p(e){return"string"==typeof e?e:Array.isArray(e)?e.map(p).join(""):p(e.content)}e.hooks.add("after-tokenize",(function(t){t.language in u&&function t(n){for(var o=0,r=n.length;o<r;o++){var i=n[o];if("string"!=typeof i){var a=i.content;if(Array.isArray(a))if("template-string"===i.type){var s=a[1];if(3===a.length&&"string"!=typeof s&&"embedded-code"===s.type){var c=p(s),d=s.alias,u=Array.isArray(d)?d[0]:d,m=e.languages[u];if(!m)continue;a[1]=l(c,m,u)}}else t(a);else"string"!=typeof a&&t([a])}}}(t.tokens)}))}(o),function(e){e.languages.typescript=e.languages.extend("javascript",{"class-name":{pattern:/(\b(?:class|extends|implements|instanceof|interface|new|type)\s+)(?!keyof\b)(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?:\s*<(?:[^<>]|<(?:[^<>]|<[^<>]*>)*>)*>)?/,lookbehind:!0,greedy:!0,inside:null},builtin:/\b(?:Array|Function|Promise|any|boolean|console|never|number|string|symbol|unknown)\b/}),e.languages.typescript.keyword.push(/\b(?:abstract|declare|is|keyof|readonly|require)\b/,/\b(?:asserts|infer|interface|module|namespace|type)\b(?=\s*(?:[{_$a-zA-Z\xA0-\uFFFF]|$))/,/\btype\b(?=\s*(?:[\{*]|$))/),delete e.languages.typescript.parameter,delete e.languages.typescript["literal-property"];var t=e.languages.extend("typescript",{});delete t["class-name"],e.languages.typescript["class-name"].inside=t,e.languages.insertBefore("typescript","function",{decorator:{pattern:/@[$\w\xA0-\uFFFF]+/,inside:{at:{pattern:/^@/,alias:"operator"},function:/^[\s\S]+/}},"generic-function":{pattern:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*\s*<(?:[^<>]|<(?:[^<>]|<[^<>]*>)*>)*>(?=\s*\()/,greedy:!0,inside:{function:/^#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*/,generic:{pattern:/<[\s\S]+/,alias:"class-name",inside:t}}}}),e.languages.ts=e.languages.typescript}(o),function(e){function t(e,t){return RegExp(e.replace(/<ID>/g,(function(){return/(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*/.source})),t)}e.languages.insertBefore("javascript","function-variable",{"method-variable":{pattern:RegExp("(\\.\\s*)"+e.languages.javascript["function-variable"].pattern.source),lookbehind:!0,alias:["function-variable","method","function","property-access"]}}),e.languages.insertBefore("javascript","function",{method:{pattern:RegExp("(\\.\\s*)"+e.languages.javascript.function.source),lookbehind:!0,alias:["function","property-access"]}}),e.languages.insertBefore("javascript","constant",{"known-class-name":[{pattern:/\b(?:(?:Float(?:32|64)|(?:Int|Uint)(?:8|16|32)|Uint8Clamped)?Array|ArrayBuffer|BigInt|Boolean|DataView|Date|Error|Function|Intl|JSON|(?:Weak)?(?:Map|Set)|Math|Number|Object|Promise|Proxy|Reflect|RegExp|String|Symbol|WebAssembly)\b/,alias:"class-name"},{pattern:/\b(?:[A-Z]\w*)Error\b/,alias:"class-name"}]}),e.languages.insertBefore("javascript","keyword",{imports:{pattern:t(/(\bimport\b\s*)(?:<ID>(?:\s*,\s*(?:\*\s*as\s+<ID>|\{[^{}]*\}))?|\*\s*as\s+<ID>|\{[^{}]*\})(?=\s*\bfrom\b)/.source),lookbehind:!0,inside:e.languages.javascript},exports:{pattern:t(/(\bexport\b\s*)(?:\*(?:\s*as\s+<ID>)?(?=\s*\bfrom\b)|\{[^{}]*\})/.source),lookbehind:!0,inside:e.languages.javascript}}),e.languages.javascript.keyword.unshift({pattern:/\b(?:as|default|export|from|import)\b/,alias:"module"},{pattern:/\b(?:await|break|catch|continue|do|else|finally|for|if|return|switch|throw|try|while|yield)\b/,alias:"control-flow"},{pattern:/\bnull\b/,alias:["null","nil"]},{pattern:/\bundefined\b/,alias:"nil"}),e.languages.insertBefore("javascript","operator",{spread:{pattern:/\.{3}/,alias:"operator"},arrow:{pattern:/=>/,alias:"operator"}}),e.languages.insertBefore("javascript","punctuation",{"property-access":{pattern:t(/(\.\s*)#?<ID>/.source),lookbehind:!0},"maybe-class-name":{pattern:/(^|[^$\w\xA0-\uFFFF])[A-Z][$\w\xA0-\uFFFF]+/,lookbehind:!0},dom:{pattern:/\b(?:document|(?:local|session)Storage|location|navigator|performance|window)\b/,alias:"variable"},console:{pattern:/\bconsole(?=\s*\.)/,alias:"class-name"}});for(var n=["function","function-variable","method","method-variable","property-access"],o=0;o<n.length;o++){var r=n[o],i=e.languages.javascript[r];"RegExp"===e.util.type(i)&&(i=e.languages.javascript[r]={pattern:i});var a=i.inside||{};i.inside=a,a["maybe-class-name"]=/^[A-Z][\s\S]*/}}(o),function(e){var t=e.util.clone(e.languages.javascript),n=/(?:\s|\/\/.*(?!.)|\/\*(?:[^*]|\*(?!\/))\*\/)/.source,o=/(?:\{(?:\{(?:\{[^{}]*\}|[^{}])*\}|[^{}])*\})/.source,r=/(?:\{<S>*\.{3}(?:[^{}]|<BRACES>)*\})/.source;function i(e,t){return e=e.replace(/<S>/g,(function(){return n})).replace(/<BRACES>/g,(function(){return o})).replace(/<SPREAD>/g,(function(){return r})),RegExp(e,t)}r=i(r).source,e.languages.jsx=e.languages.extend("markup",t),e.languages.jsx.tag.pattern=i(/<\/?(?:[\w.:-]+(?:<S>+(?:[\w.:$-]+(?:=(?:"(?:\\[\s\S]|[^\\"])*"|'(?:\\[\s\S]|[^\\'])*'|[^\s{'"/>=]+|<BRACES>))?|<SPREAD>))*<S>*\/?)?>/.source),e.languages.jsx.tag.inside.tag.pattern=/^<\/?[^\s>\/]*/,e.languages.jsx.tag.inside["attr-value"].pattern=/=(?!\{)(?:"(?:\\[\s\S]|[^\\"])*"|'(?:\\[\s\S]|[^\\'])*'|[^\s'">]+)/,e.languages.jsx.tag.inside.tag.inside["class-name"]=/^[A-Z]\w*(?:\.[A-Z]\w*)*$/,e.languages.jsx.tag.inside.comment=t.comment,e.languages.insertBefore("inside","attr-name",{spread:{pattern:i(/<SPREAD>/.source),inside:e.languages.jsx}},e.languages.jsx.tag),e.languages.insertBefore("inside","special-attr",{script:{pattern:i(/=<BRACES>/.source),alias:"language-javascript",inside:{"script-punctuation":{pattern:/^=(?=\{)/,alias:"punctuation"},rest:e.languages.jsx}}},e.languages.jsx.tag);var a=function(e){return e?"string"==typeof e?e:"string"==typeof e.content?e.content:e.content.map(a).join(""):""},s=function(t){for(var n=[],o=0;o<t.length;o++){var r=t[o],i=!1;if("string"!=typeof r&&("tag"===r.type&&r.content[0]&&"tag"===r.content[0].type?"</"===r.content[0].content[0].content?n.length>0&&n[n.length-1].tagName===a(r.content[0].content[1])&&n.pop():"/>"===r.content[r.content.length-1].content||n.push({tagName:a(r.content[0].content[1]),openedBraces:0}):n.length>0&&"punctuation"===r.type&&"{"===r.content?n[n.length-1].openedBraces++:n.length>0&&n[n.length-1].openedBraces>0&&"punctuation"===r.type&&"}"===r.content?n[n.length-1].openedBraces--:i=!0),(i||"string"==typeof r)&&n.length>0&&0===n[n.length-1].openedBraces){var c=a(r);o<t.length-1&&("string"==typeof t[o+1]||"plain-text"===t[o+1].type)&&(c+=a(t[o+1]),t.splice(o+1,1)),o>0&&("string"==typeof t[o-1]||"plain-text"===t[o-1].type)&&(c=a(t[o-1])+c,t.splice(o-1,1),o--),t[o]=new e.Token("plain-text",c,null,c)}r.content&&"string"!=typeof r.content&&s(r.content)}};e.hooks.add("after-tokenize",(function(e){"jsx"!==e.language&&"tsx"!==e.language||s(e.tokens)}))}(o),function(e){e.languages.diff={coord:[/^(?:\*{3}|-{3}|\+{3}).*$/m,/^@@.*@@$/m,/^\d.*$/m]};var t={"deleted-sign":"-","deleted-arrow":"<","inserted-sign":"+","inserted-arrow":">",unchanged:" ",diff:"!"};Object.keys(t).forEach((function(n){var o=t[n],r=[];/^\w+$/.test(n)||r.push(/\w+/.exec(n)[0]),"diff"===n&&r.push("bold"),e.languages.diff[n]={pattern:RegExp("^(?:["+o+"].*(?:\r\n?|\n|(?![\\s\\S])))+","m"),alias:r,inside:{line:{pattern:/(.)(?=[\s\S]).*(?:\r\n?|\n)?/,lookbehind:!0},prefix:{pattern:/[\s\S]/,alias:/\w+/.exec(n)[0]}}}})),Object.defineProperty(e.languages.diff,"PREFIXES",{value:t})}(o),o.languages.git={comment:/^#.*/m,deleted:/^[-\u2013].*/m,inserted:/^\+.*/m,string:/("|')(?:\\.|(?!\1)[^\\\r\n])*\1/,command:{pattern:/^.*\$ git .*$/m,inside:{parameter:/\s--?\w+/}},coord:/^@@.*@@$/m,"commit-sha1":/^commit \w{40}$/m},o.languages.go=o.languages.extend("clike",{string:{pattern:/(^|[^\\])"(?:\\.|[^"\\\r\n])*"|`[^`]*`/,lookbehind:!0,greedy:!0},keyword:/\b(?:break|case|chan|const|continue|default|defer|else|fallthrough|for|func|go(?:to)?|if|import|interface|map|package|range|return|select|struct|switch|type|var)\b/,boolean:/\b(?:_|false|iota|nil|true)\b/,number:[/\b0(?:b[01_]+|o[0-7_]+)i?\b/i,/\b0x(?:[a-f\d_]+(?:\.[a-f\d_]*)?|\.[a-f\d_]+)(?:p[+-]?\d+(?:_\d+)*)?i?(?!\w)/i,/(?:\b\d[\d_]*(?:\.[\d_]*)?|\B\.\d[\d_]*)(?:e[+-]?[\d_]+)?i?(?!\w)/i],operator:/[*\/%^!=]=?|\+[=+]?|-[=-]?|\|[=|]?|&(?:=|&|\^=?)?|>(?:>=?|=)?|<(?:<=?|=|-)?|:=|\.\.\./,builtin:/\b(?:append|bool|byte|cap|close|complex|complex(?:64|128)|copy|delete|error|float(?:32|64)|u?int(?:8|16|32|64)?|imag|len|make|new|panic|print(?:ln)?|real|recover|rune|string|uintptr)\b/}),o.languages.insertBefore("go","string",{char:{pattern:/'(?:\\.|[^'\\\r\n]){0,10}'/,greedy:!0}}),delete o.languages.go["class-name"],function(e){function t(e,t){return"___"+e.toUpperCase()+t+"___"}Object.defineProperties(e.languages["markup-templating"]={},{buildPlaceholders:{value:function(n,o,r,i){if(n.language===o){var a=n.tokenStack=[];n.code=n.code.replace(r,(function(e){if("function"==typeof i&&!i(e))return e;for(var r,s=a.length;-1!==n.code.indexOf(r=t(o,s));)++s;return a[s]=e,r})),n.grammar=e.languages.markup}}},tokenizePlaceholders:{value:function(n,o){if(n.language===o&&n.tokenStack){n.grammar=e.languages[o];var r=0,i=Object.keys(n.tokenStack);!function a(s){for(var c=0;c<s.length&&!(r>=i.length);c++){var d=s[c];if("string"==typeof d||d.content&&"string"==typeof d.content){var l=i[r],u=n.tokenStack[l],p="string"==typeof d?d:d.content,m=t(o,l),f=p.indexOf(m);if(f>-1){++r;var b=p.substring(0,f),h=new e.Token(o,e.tokenize(u,n.grammar),"language-"+o,u),v=p.substring(f+m.length),g=[];b&&g.push.apply(g,a([b])),g.push(h),v&&g.push.apply(g,a([v])),"string"==typeof d?s.splice.apply(s,[c,1].concat(g)):d.content=g}}else d.content&&a(d.content)}return s}(n.tokens)}}}})}(o),function(e){e.languages.handlebars={comment:/\{\{![\s\S]*?\}\}/,delimiter:{pattern:/^\{\{\{?|\}\}\}?$/,alias:"punctuation"},string:/(["'])(?:\\.|(?!\1)[^\\\r\n])*\1/,number:/\b0x[\dA-Fa-f]+\b|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:[Ee][+-]?\d+)?/,boolean:/\b(?:false|true)\b/,block:{pattern:/^(\s*(?:~\s*)?)[#\/]\S+?(?=\s*(?:~\s*)?$|\s)/,lookbehind:!0,alias:"keyword"},brackets:{pattern:/\[[^\]]+\]/,inside:{punctuation:/\[|\]/,variable:/[\s\S]+/}},punctuation:/[!"#%&':()*+,.\/;<=>@\[\\\]^`{|}~]/,variable:/[^!"#%&'()*+,\/;<=>@\[\\\]^`{|}~\s]+/},e.hooks.add("before-tokenize",(function(t){e.languages["markup-templating"].buildPlaceholders(t,"handlebars",/\{\{\{[\s\S]+?\}\}\}|\{\{[\s\S]+?\}\}/g)})),e.hooks.add("after-tokenize",(function(t){e.languages["markup-templating"].tokenizePlaceholders(t,"handlebars")})),e.languages.hbs=e.languages.handlebars}(o),o.languages.json={property:{pattern:/(^|[^\\])"(?:\\.|[^\\"\r\n])*"(?=\s*:)/,lookbehind:!0,greedy:!0},string:{pattern:/(^|[^\\])"(?:\\.|[^\\"\r\n])*"(?!\s*:)/,lookbehind:!0,greedy:!0},comment:{pattern:/\/\/.*|\/\*[\s\S]*?(?:\*\/|$)/,greedy:!0},number:/-?\b\d+(?:\.\d+)?(?:e[+-]?\d+)?\b/i,punctuation:/[{}[\],]/,operator:/:/,boolean:/\b(?:false|true)\b/,null:{pattern:/\bnull\b/,alias:"keyword"}},o.languages.webmanifest=o.languages.json,o.languages.less=o.languages.extend("css",{comment:[/\/\*[\s\S]*?\*\//,{pattern:/(^|[^\\])\/\/.*/,lookbehind:!0}],atrule:{pattern:/@[\w-](?:\((?:[^(){}]|\([^(){}]*\))*\)|[^(){};\s]|\s+(?!\s))*?(?=\s*\{)/,inside:{punctuation:/[:()]/}},selector:{pattern:/(?:@\{[\w-]+\}|[^{};\s@])(?:@\{[\w-]+\}|\((?:[^(){}]|\([^(){}]*\))*\)|[^(){};@\s]|\s+(?!\s))*?(?=\s*\{)/,inside:{variable:/@+[\w-]+/}},property:/(?:@\{[\w-]+\}|[\w-])+(?:\+_?)?(?=\s*:)/,operator:/[+\-*\/]/}),o.languages.insertBefore("less","property",{variable:[{pattern:/@[\w-]+\s*:/,inside:{punctuation:/:/}},/@@?[\w-]+/],"mixin-usage":{pattern:/([{;]\s*)[.#](?!\d)[\w-].*?(?=[(;])/,lookbehind:!0,alias:"function"}}),o.languages.makefile={comment:{pattern:/(^|[^\\])#(?:\\(?:\r\n|[\s\S])|[^\\\r\n])*/,lookbehind:!0},string:{pattern:/(["'])(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/,greedy:!0},"builtin-target":{pattern:/\.[A-Z][^:#=\s]+(?=\s*:(?!=))/,alias:"builtin"},target:{pattern:/^(?:[^:=\s]|[ \t]+(?![\s:]))+(?=\s*:(?!=))/m,alias:"symbol",inside:{variable:/\$+(?:(?!\$)[^(){}:#=\s]+|(?=[({]))/}},variable:/\$+(?:(?!\$)[^(){}:#=\s]+|\([@*%<^+?][DF]\)|(?=[({]))/,keyword:/-include\b|\b(?:define|else|endef|endif|export|ifn?def|ifn?eq|include|override|private|sinclude|undefine|unexport|vpath)\b/,function:{pattern:/(\()(?:abspath|addsuffix|and|basename|call|dir|error|eval|file|filter(?:-out)?|findstring|firstword|flavor|foreach|guile|if|info|join|lastword|load|notdir|or|origin|patsubst|realpath|shell|sort|strip|subst|suffix|value|warning|wildcard|word(?:list|s)?)(?=[ \t])/,lookbehind:!0},operator:/(?:::|[?:+!])?=|[|@]/,punctuation:/[:;(){}]/},o.languages.objectivec=o.languages.extend("c",{string:{pattern:/@?"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"/,greedy:!0},keyword:/\b(?:asm|auto|break|case|char|const|continue|default|do|double|else|enum|extern|float|for|goto|if|in|inline|int|long|register|return|self|short|signed|sizeof|static|struct|super|switch|typedef|typeof|union|unsigned|void|volatile|while)\b|(?:@interface|@end|@implementation|@protocol|@class|@public|@protected|@private|@property|@try|@catch|@finally|@throw|@synthesize|@dynamic|@selector)\b/,operator:/-[->]?|\+\+?|!=?|<<?=?|>>?=?|==?|&&?|\|\|?|[~^%?*\/@]/}),delete o.languages.objectivec["class-name"],o.languages.objc=o.languages.objectivec,o.languages.ocaml={comment:{pattern:/\(\*[\s\S]*?\*\)/,greedy:!0},char:{pattern:/'(?:[^\\\r\n']|\\(?:.|[ox]?[0-9a-f]{1,3}))'/i,greedy:!0},string:[{pattern:/"(?:\\(?:[\s\S]|\r\n)|[^\\\r\n"])*"/,greedy:!0},{pattern:/\{([a-z_]*)\|[\s\S]*?\|\1\}/,greedy:!0}],number:[/\b(?:0b[01][01_]*|0o[0-7][0-7_]*)\b/i,/\b0x[a-f0-9][a-f0-9_]*(?:\.[a-f0-9_]*)?(?:p[+-]?\d[\d_]*)?(?!\w)/i,/\b\d[\d_]*(?:\.[\d_]*)?(?:e[+-]?\d[\d_]*)?(?!\w)/i],directive:{pattern:/\B#\w+/,alias:"property"},label:{pattern:/\B~\w+/,alias:"property"},"type-variable":{pattern:/\B'\w+/,alias:"function"},variant:{pattern:/`\w+/,alias:"symbol"},keyword:/\b(?:as|assert|begin|class|constraint|do|done|downto|else|end|exception|external|for|fun|function|functor|if|in|include|inherit|initializer|lazy|let|match|method|module|mutable|new|nonrec|object|of|open|private|rec|sig|struct|then|to|try|type|val|value|virtual|when|where|while|with)\b/,boolean:/\b(?:false|true)\b/,"operator-like-punctuation":{pattern:/\[[<>|]|[>|]\]|\{<|>\}/,alias:"punctuation"},operator:/\.[.~]|:[=>]|[=<>@^|&+\-*\/$%!?~][!$%&*+\-.\/:<=>?@^|~]*|\b(?:and|asr|land|lor|lsl|lsr|lxor|mod|or)\b/,punctuation:/;;|::|[(){}\[\].,:;#]|\b_\b/},o.languages.python={comment:{pattern:/(^|[^\\])#.*/,lookbehind:!0,greedy:!0},"string-interpolation":{pattern:/(?:f|fr|rf)(?:("""|''')[\s\S]*?\1|("|')(?:\\.|(?!\2)[^\\\r\n])*\2)/i,greedy:!0,inside:{interpolation:{pattern:/((?:^|[^{])(?:\{\{)*)\{(?!\{)(?:[^{}]|\{(?!\{)(?:[^{}]|\{(?!\{)(?:[^{}])+\})+\})+\}/,lookbehind:!0,inside:{"format-spec":{pattern:/(:)[^:(){}]+(?=\}$)/,lookbehind:!0},"conversion-option":{pattern:/![sra](?=[:}]$)/,alias:"punctuation"},rest:null}},string:/[\s\S]+/}},"triple-quoted-string":{pattern:/(?:[rub]|br|rb)?("""|''')[\s\S]*?\1/i,greedy:!0,alias:"string"},string:{pattern:/(?:[rub]|br|rb)?("|')(?:\\.|(?!\1)[^\\\r\n])*\1/i,greedy:!0},function:{pattern:/((?:^|\s)def[ \t]+)[a-zA-Z_]\w*(?=\s*\()/g,lookbehind:!0},"class-name":{pattern:/(\bclass\s+)\w+/i,lookbehind:!0},decorator:{pattern:/(^[\t ]*)@\w+(?:\.\w+)*/m,lookbehind:!0,alias:["annotation","punctuation"],inside:{punctuation:/\./}},keyword:/\b(?:_(?=\s*:)|and|as|assert|async|await|break|case|class|continue|def|del|elif|else|except|exec|finally|for|from|global|if|import|in|is|lambda|match|nonlocal|not|or|pass|print|raise|return|try|while|with|yield)\b/,builtin:/\b(?:__import__|abs|all|any|apply|ascii|basestring|bin|bool|buffer|bytearray|bytes|callable|chr|classmethod|cmp|coerce|compile|complex|delattr|dict|dir|divmod|enumerate|eval|execfile|file|filter|float|format|frozenset|getattr|globals|hasattr|hash|help|hex|id|input|int|intern|isinstance|issubclass|iter|len|list|locals|long|map|max|memoryview|min|next|object|oct|open|ord|pow|property|range|raw_input|reduce|reload|repr|reversed|round|set|setattr|slice|sorted|staticmethod|str|sum|super|tuple|type|unichr|unicode|vars|xrange|zip)\b/,boolean:/\b(?:False|None|True)\b/,number:/\b0(?:b(?:_?[01])+|o(?:_?[0-7])+|x(?:_?[a-f0-9])+)\b|(?:\b\d+(?:_\d+)*(?:\.(?:\d+(?:_\d+)*)?)?|\B\.\d+(?:_\d+)*)(?:e[+-]?\d+(?:_\d+)*)?j?(?!\w)/i,operator:/[-+%=]=?|!=|:=|\*\*?=?|\/\/?=?|<[<=>]?|>[=>]?|[&|^~]/,punctuation:/[{}[\];(),.:]/},o.languages.python["string-interpolation"].inside.interpolation.inside.rest=o.languages.python,o.languages.py=o.languages.python,o.languages.reason=o.languages.extend("clike",{string:{pattern:/"(?:\\(?:\r\n|[\s\S])|[^\\\r\n"])*"/,greedy:!0},"class-name":/\b[A-Z]\w*/,keyword:/\b(?:and|as|assert|begin|class|constraint|do|done|downto|else|end|exception|external|for|fun|function|functor|if|in|include|inherit|initializer|lazy|let|method|module|mutable|new|nonrec|object|of|open|or|private|rec|sig|struct|switch|then|to|try|type|val|virtual|when|while|with)\b/,operator:/\.{3}|:[:=]|\|>|->|=(?:==?|>)?|<=?|>=?|[|^?'#!~`]|[+\-*\/]\.?|\b(?:asr|land|lor|lsl|lsr|lxor|mod)\b/}),o.languages.insertBefore("reason","class-name",{char:{pattern:/'(?:\\x[\da-f]{2}|\\o[0-3][0-7][0-7]|\\\d{3}|\\.|[^'\\\r\n])'/,greedy:!0},constructor:/\b[A-Z]\w*\b(?!\s*\.)/,label:{pattern:/\b[a-z]\w*(?=::)/,alias:"symbol"}}),delete o.languages.reason.function,function(e){e.languages.sass=e.languages.extend("css",{comment:{pattern:/^([ \t]*)\/[\/*].*(?:(?:\r?\n|\r)\1[ \t].+)*/m,lookbehind:!0,greedy:!0}}),e.languages.insertBefore("sass","atrule",{"atrule-line":{pattern:/^(?:[ \t]*)[@+=].+/m,greedy:!0,inside:{atrule:/(?:@[\w-]+|[+=])/}}}),delete e.languages.sass.atrule;var t=/\$[-\w]+|#\{\$[-\w]+\}/,n=[/[+*\/%]|[=!]=|<=?|>=?|\b(?:and|not|or)\b/,{pattern:/(\s)-(?=\s)/,lookbehind:!0}];e.languages.insertBefore("sass","property",{"variable-line":{pattern:/^[ \t]*\$.+/m,greedy:!0,inside:{punctuation:/:/,variable:t,operator:n}},"property-line":{pattern:/^[ \t]*(?:[^:\s]+ *:.*|:[^:\s].*)/m,greedy:!0,inside:{property:[/[^:\s]+(?=\s*:)/,{pattern:/(:)[^:\s]+/,lookbehind:!0}],punctuation:/:/,variable:t,operator:n,important:e.languages.sass.important}}}),delete e.languages.sass.property,delete e.languages.sass.important,e.languages.insertBefore("sass","punctuation",{selector:{pattern:/^([ \t]*)\S(?:,[^,\r\n]+|[^,\r\n]*)(?:,[^,\r\n]+)*(?:,(?:\r?\n|\r)\1[ \t]+\S(?:,[^,\r\n]+|[^,\r\n]*)(?:,[^,\r\n]+)*)*/m,lookbehind:!0,greedy:!0}})}(o),o.languages.scss=o.languages.extend("css",{comment:{pattern:/(^|[^\\])(?:\/\*[\s\S]*?\*\/|\/\/.*)/,lookbehind:!0},atrule:{pattern:/@[\w-](?:\([^()]+\)|[^()\s]|\s+(?!\s))*?(?=\s+[{;])/,inside:{rule:/@[\w-]+/}},url:/(?:[-a-z]+-)?url(?=\()/i,selector:{pattern:/(?=\S)[^@;{}()]?(?:[^@;{}()\s]|\s+(?!\s)|#\{\$[-\w]+\})+(?=\s*\{(?:\}|\s|[^}][^:{}]*[:{][^}]))/,inside:{parent:{pattern:/&/,alias:"important"},placeholder:/%[-\w]+/,variable:/\$[-\w]+|#\{\$[-\w]+\}/}},property:{pattern:/(?:[-\w]|\$[-\w]|#\{\$[-\w]+\})+(?=\s*:)/,inside:{variable:/\$[-\w]+|#\{\$[-\w]+\}/}}}),o.languages.insertBefore("scss","atrule",{keyword:[/@(?:content|debug|each|else(?: if)?|extend|for|forward|function|if|import|include|mixin|return|use|warn|while)\b/i,{pattern:/( )(?:from|through)(?= )/,lookbehind:!0}]}),o.languages.insertBefore("scss","important",{variable:/\$[-\w]+|#\{\$[-\w]+\}/}),o.languages.insertBefore("scss","function",{"module-modifier":{pattern:/\b(?:as|hide|show|with)\b/i,alias:"keyword"},placeholder:{pattern:/%[-\w]+/,alias:"selector"},statement:{pattern:/\B!(?:default|optional)\b/i,alias:"keyword"},boolean:/\b(?:false|true)\b/,null:{pattern:/\bnull\b/,alias:"keyword"},operator:{pattern:/(\s)(?:[-+*\/%]|[=!]=|<=?|>=?|and|not|or)(?=\s)/,lookbehind:!0}}),o.languages.scss.atrule.inside.rest=o.languages.scss,function(e){var t={pattern:/(\b\d+)(?:%|[a-z]+)/,lookbehind:!0},n={pattern:/(^|[^\w.-])-?(?:\d+(?:\.\d+)?|\.\d+)/,lookbehind:!0},o={comment:{pattern:/(^|[^\\])(?:\/\*[\s\S]*?\*\/|\/\/.*)/,lookbehind:!0},url:{pattern:/\burl\((["']?).*?\1\)/i,greedy:!0},string:{pattern:/("|')(?:(?!\1)[^\\\r\n]|\\(?:\r\n|[\s\S]))*\1/,greedy:!0},interpolation:null,func:null,important:/\B!(?:important|optional)\b/i,keyword:{pattern:/(^|\s+)(?:(?:else|for|if|return|unless)(?=\s|$)|@[\w-]+)/,lookbehind:!0},hexcode:/#[\da-f]{3,6}/i,color:[/\b(?:AliceBlue|AntiqueWhite|Aqua|Aquamarine|Azure|Beige|Bisque|Black|BlanchedAlmond|Blue|BlueViolet|Brown|BurlyWood|CadetBlue|Chartreuse|Chocolate|Coral|CornflowerBlue|Cornsilk|Crimson|Cyan|DarkBlue|DarkCyan|DarkGoldenRod|DarkGr[ae]y|DarkGreen|DarkKhaki|DarkMagenta|DarkOliveGreen|DarkOrange|DarkOrchid|DarkRed|DarkSalmon|DarkSeaGreen|DarkSlateBlue|DarkSlateGr[ae]y|DarkTurquoise|DarkViolet|DeepPink|DeepSkyBlue|DimGr[ae]y|DodgerBlue|FireBrick|FloralWhite|ForestGreen|Fuchsia|Gainsboro|GhostWhite|Gold|GoldenRod|Gr[ae]y|Green|GreenYellow|HoneyDew|HotPink|IndianRed|Indigo|Ivory|Khaki|Lavender|LavenderBlush|LawnGreen|LemonChiffon|LightBlue|LightCoral|LightCyan|LightGoldenRodYellow|LightGr[ae]y|LightGreen|LightPink|LightSalmon|LightSeaGreen|LightSkyBlue|LightSlateGr[ae]y|LightSteelBlue|LightYellow|Lime|LimeGreen|Linen|Magenta|Maroon|MediumAquaMarine|MediumBlue|MediumOrchid|MediumPurple|MediumSeaGreen|MediumSlateBlue|MediumSpringGreen|MediumTurquoise|MediumVioletRed|MidnightBlue|MintCream|MistyRose|Moccasin|NavajoWhite|Navy|OldLace|Olive|OliveDrab|Orange|OrangeRed|Orchid|PaleGoldenRod|PaleGreen|PaleTurquoise|PaleVioletRed|PapayaWhip|PeachPuff|Peru|Pink|Plum|PowderBlue|Purple|Red|RosyBrown|RoyalBlue|SaddleBrown|Salmon|SandyBrown|SeaGreen|SeaShell|Sienna|Silver|SkyBlue|SlateBlue|SlateGr[ae]y|Snow|SpringGreen|SteelBlue|Tan|Teal|Thistle|Tomato|Transparent|Turquoise|Violet|Wheat|White|WhiteSmoke|Yellow|YellowGreen)\b/i,{pattern:/\b(?:hsl|rgb)\(\s*\d{1,3}\s*,\s*\d{1,3}%?\s*,\s*\d{1,3}%?\s*\)\B|\b(?:hsl|rgb)a\(\s*\d{1,3}\s*,\s*\d{1,3}%?\s*,\s*\d{1,3}%?\s*,\s*(?:0|0?\.\d+|1)\s*\)\B/i,inside:{unit:t,number:n,function:/[\w-]+(?=\()/,punctuation:/[(),]/}}],entity:/\\[\da-f]{1,8}/i,unit:t,boolean:/\b(?:false|true)\b/,operator:[/~|[+!\/%<>?=]=?|[-:]=|\*[*=]?|\.{2,3}|&&|\|\||\B-\B|\b(?:and|in|is(?: a| defined| not|nt)?|not|or)\b/],number:n,punctuation:/[{}()\[\];:,]/};o.interpolation={pattern:/\{[^\r\n}:]+\}/,alias:"variable",inside:{delimiter:{pattern:/^\{|\}$/,alias:"punctuation"},rest:o}},o.func={pattern:/[\w-]+\([^)]*\).*/,inside:{function:/^[^(]+/,rest:o}},e.languages.stylus={"atrule-declaration":{pattern:/(^[ \t]*)@.+/m,lookbehind:!0,inside:{atrule:/^@[\w-]+/,rest:o}},"variable-declaration":{pattern:/(^[ \t]*)[\w$-]+\s*.?=[ \t]*(?:\{[^{}]*\}|\S.*|$)/m,lookbehind:!0,inside:{variable:/^\S+/,rest:o}},statement:{pattern:/(^[ \t]*)(?:else|for|if|return|unless)[ \t].+/m,lookbehind:!0,inside:{keyword:/^\S+/,rest:o}},"property-declaration":{pattern:/((?:^|\{)([ \t]*))(?:[\w-]|\{[^}\r\n]+\})+(?:\s*:\s*|[ \t]+)(?!\s)[^{\r\n]*(?:;|[^{\r\n,]$(?!(?:\r?\n|\r)(?:\{|\2[ \t])))/m,lookbehind:!0,inside:{property:{pattern:/^[^\s:]+/,inside:{interpolation:o.interpolation}},rest:o}},selector:{pattern:/(^[ \t]*)(?:(?=\S)(?:[^{}\r\n:()]|::?[\w-]+(?:\([^)\r\n]*\)|(?![\w-]))|\{[^}\r\n]+\})+)(?:(?:\r?\n|\r)(?:\1(?:(?=\S)(?:[^{}\r\n:()]|::?[\w-]+(?:\([^)\r\n]*\)|(?![\w-]))|\{[^}\r\n]+\})+)))*(?:,$|\{|(?=(?:\r?\n|\r)(?:\{|\1[ \t])))/m,lookbehind:!0,inside:{interpolation:o.interpolation,comment:o.comment,punctuation:/[{},]/}},func:o.func,string:o.string,comment:{pattern:/(^|[^\\])(?:\/\*[\s\S]*?\*\/|\/\/.*)/,lookbehind:!0,greedy:!0},interpolation:o.interpolation,punctuation:/[{}()\[\];:.]/}}(o),function(e){var t=e.util.clone(e.languages.typescript);e.languages.tsx=e.languages.extend("jsx",t),delete e.languages.tsx.parameter,delete e.languages.tsx["literal-property"];var n=e.languages.tsx.tag;n.pattern=RegExp(/(^|[^\w$]|(?=<\/))/.source+"(?:"+n.pattern.source+")",n.pattern.flags),n.lookbehind=!0}(o),o.languages.wasm={comment:[/\(;[\s\S]*?;\)/,{pattern:/;;.*/,greedy:!0}],string:{pattern:/"(?:\\[\s\S]|[^"\\])*"/,greedy:!0},keyword:[{pattern:/\b(?:align|offset)=/,inside:{operator:/=/}},{pattern:/\b(?:(?:f32|f64|i32|i64)(?:\.(?:abs|add|and|ceil|clz|const|convert_[su]\/i(?:32|64)|copysign|ctz|demote\/f64|div(?:_[su])?|eqz?|extend_[su]\/i32|floor|ge(?:_[su])?|gt(?:_[su])?|le(?:_[su])?|load(?:(?:8|16|32)_[su])?|lt(?:_[su])?|max|min|mul|neg?|nearest|or|popcnt|promote\/f32|reinterpret\/[fi](?:32|64)|rem_[su]|rot[lr]|shl|shr_[su]|sqrt|store(?:8|16|32)?|sub|trunc(?:_[su]\/f(?:32|64))?|wrap\/i64|xor))?|memory\.(?:grow|size))\b/,inside:{punctuation:/\./}},/\b(?:anyfunc|block|br(?:_if|_table)?|call(?:_indirect)?|data|drop|elem|else|end|export|func|get_(?:global|local)|global|if|import|local|loop|memory|module|mut|nop|offset|param|result|return|select|set_(?:global|local)|start|table|tee_local|then|type|unreachable)\b/],variable:/\$[\w!#$%&'*+\-./:<=>?@\\^`|~]+/,number:/[+-]?\b(?:\d(?:_?\d)*(?:\.\d(?:_?\d)*)?(?:[eE][+-]?\d(?:_?\d)*)?|0x[\da-fA-F](?:_?[\da-fA-F])*(?:\.[\da-fA-F](?:_?[\da-fA-D])*)?(?:[pP][+-]?\d(?:_?\d)*)?)\b|\binf\b|\bnan(?::0x[\da-fA-F](?:_?[\da-fA-D])*)?\b/,punctuation:/[()]/},t.Z=o},87459:function(e,t,n){"use strict";function o(e){var t,n,r="";if("string"==typeof e||"number"==typeof e)r+=e;else if("object"==typeof e)if(Array.isArray(e))for(t=0;t<e.length;t++)e[t]&&(n=o(e[t]))&&(r&&(r+=" "),r+=n);else for(t in e)e[t]&&(r&&(r+=" "),r+=t);return r}t.Z=function(){for(var e,t,n=0,r="";n<arguments.length;)(e=arguments[n++])&&(t=o(e))&&(r&&(r+=" "),r+=t);return r}},723:function(e,t,n){"use strict";n.d(t,{Z:function(){return m}});var o=n(67294),r=n(83117),i=n(68356),a=n.n(i),s=n(16887),c={"00099f85":[()=>n.e(5701).then(n.bind(n,60599)),"@site/versioned_docs/version-4.10.0/api/overview.md",60599],"0012aeda":[()=>n.e(6583).then(n.bind(n,75676)),"@site/versioned_docs/version-4.6.2/api/ledger-api.md",75676],"0066c128":[()=>n.e(8262).then(n.bind(n,71025)),"@site/versioned_docs/version-4.15.5/admin/placement.md",71025],"014f04cc":[()=>n.e(6057).then(n.bind(n,99738)),"@site/versioned_docs/version-4.16.5/deployment/manual.md",99738],"0187783a":[()=>n.e(520).then(n.t.bind(n,58942,19)),"~docs/default/version-4-11-1-metadata-prop-280.json",58942],"026a1d69":[()=>n.e(7886).then(n.bind(n,38906)),"@site/src/pages/bps/BP-template.md",38906],"035695b8":[()=>n.e(1007).then(n.bind(n,66518)),"@site/versioned_docs/version-4.7.3/security/overview.md",66518],"037dd35f":[()=>n.e(5446).then(n.bind(n,72671)),"@site/versioned_docs/version-4.15.5/deployment/manual.md",72671],"03f88f06":[()=>n.e(6082).then(n.bind(n,88815)),"@site/versioned_docs/version-4.15.5/getting-started/installation.md",88815],"04da809a":[()=>n.e(5578).then(n.bind(n,35016)),"@site/docs/deployment/kubernetes.md",35016],"0537c41d":[()=>n.e(3699).then(n.bind(n,53713)),"@site/versioned_docs/version-4.7.3/api/ledger-api.md",53713],"05c61b00":[()=>n.e(1080).then(n.bind(n,86442)),"@site/src/pages/bps/BP-22-separate-closing-ledgers-from-opening-ledgers.md",86442],"05d43200":[()=>n.e(8598).then(n.bind(n,26544)),"@site/versioned_docs/version-4.5.1/reference/config.md",26544],"064c7463":[()=>n.e(5777).then(n.t.bind(n,13086,19)),"~docs/default/version-4-15-5-metadata-prop-664.json",13086],"07497906":[()=>n.e(931).then(n.bind(n,85951)),"@site/versioned_docs/version-4.14.8/admin/decomission.md",85951],"07b748cc":[()=>n.e(440).then(n.bind(n,2241)),"@site/versioned_docs/version-4.7.3/admin/placement.md",2241],"07c6cf68":[()=>n.e(9815).then(n.bind(n,20669)),"@site/versioned_docs/version-4.15.5/admin/perf.md",20669],"0843cb03":[()=>n.e(5178).then(n.bind(n,66895)),"@site/versioned_docs/version-4.7.3/reference/cli.md",66895],"089cefec":[()=>n.e(3096).then(n.bind(n,18390)),"@site/docs/api/ledger-adv-api.md",18390],"09c5a1ad":[()=>n.e(3690).then(n.bind(n,73545)),"@site/versioned_docs/version-4.11.1/deployment/manual.md",73545],"0a998885":[()=>n.e(9232).then(n.bind(n,40541)),"@site/versioned_docs/version-4.11.1/admin/autorecovery.md",40541],"0aaf5a35":[()=>n.e(3782).then(n.bind(n,35633)),"@site/versioned_docs/version-4.7.3/security/sasl.md",35633],"0c3f6a2e":[()=>n.e(7150).then(n.bind(n,42259)),"@site/versioned_docs/version-4.16.5/admin/perf.md",42259],"0d0fc48b":[()=>n.e(4050).then(n.bind(n,84478)),"@site/versioned_docs/version-4.10.0/reference/config.md",84478],"0d2aa02e":[()=>n.e(3349).then(n.bind(n,31565)),"@site/versioned_docs/version-4.10.0/admin/metrics.md",31565],"0d53d5be":[()=>n.e(1951).then(n.bind(n,87034)),"@site/versioned_docs/version-4.8.2/admin/upgrade.md",87034],"0d73263b":[()=>n.e(4696).then(n.bind(n,91230)),"@site/versioned_docs/version-4.15.5/getting-started/concepts.md",91230],"0de1e94b":[()=>n.e(9940).then(n.bind(n,54098)),"@site/versioned_docs/version-4.6.2/reference/config.md",54098],"0e2af38d":[()=>n.e(9041).then(n.bind(n,80103)),"@site/versioned_docs/version-4.17.0/security/sasl.md",80103],"1020a002":[()=>n.e(9694).then(n.bind(n,41650)),"@site/versioned_docs/version-4.17.0/admin/decomission.md",41650],"11433b40":[()=>n.e(8629).then(n.bind(n,47534)),"@site/versioned_docs/version-4.9.2/deployment/manual.md",47534],"11829f95":[()=>n.e(7031).then(n.bind(n,713)),"@site/versioned_docs/version-4.6.2/getting-started/installation.md",713],"1268352f":[()=>n.e(122).then(n.bind(n,64368)),"@site/versioned_docs/version-4.7.3/admin/perf.md",64368],"131f50d0":[()=>n.e(289).then(n.bind(n,58269)),"@site/versioned_docs/version-4.8.2/overview/overview.md",58269],"136f9a14":[()=>n.e(6552).then(n.bind(n,18504)),"@site/versioned_docs/version-4.6.2/security/overview.md",18504],"137061ef":[()=>n.e(5947).then(n.bind(n,76846)),"@site/src/pages/bps/BP-35-128-bits-support.md",76846],"13a7da5f":[()=>n.e(5733).then(n.bind(n,16223)),"@site/src/pages/project/bylaws.md",16223],"14609be1":[()=>n.e(7307).then(n.bind(n,59053)),"@site/src/pages/release-notes.md",59053],"14a50b22":[()=>n.e(6572).then(n.bind(n,24261)),"@site/versioned_docs/version-4.7.3/admin/http.md",24261],"14da3ce7":[()=>n.e(7666).then(n.bind(n,35090)),"@site/versioned_docs/version-4.9.2/getting-started/run-locally.md",35090],"1547da37":[()=>n.e(9685).then(n.bind(n,73600)),"@site/versioned_docs/version-4.12.1/reference/config.md",73600],17896441:[()=>Promise.all([n.e(532),n.e(5430),n.e(7918)]).then(n.bind(n,56751)),"@theme/DocItem",56751],"1791646b":[()=>n.e(4539).then(n.bind(n,82298)),"@site/versioned_docs/version-4.14.8/development/codebase.md",82298],"17b33b39":[()=>n.e(8687).then(n.bind(n,25492)),"@site/versioned_docs/version-4.16.5/security/sasl.md",25492],"17fed085":[()=>n.e(9006).then(n.bind(n,98938)),"@site/versioned_docs/version-4.12.1/admin/perf.md",98938],"186b8a18":[()=>n.e(8037).then(n.bind(n,93820)),"@site/versioned_docs/version-4.8.2/admin/placement.md",93820],"196689c8":[()=>n.e(534).then(n.bind(n,36110)),"@site/versioned_docs/version-4.17.0/deployment/manual.md",36110],"1a41bcf4":[()=>n.e(166).then(n.bind(n,25105)),"@site/versioned_docs/version-4.7.3/getting-started/run-locally.md",25105],"1ac84465":[()=>n.e(6994).then(n.bind(n,72836)),"@site/versioned_docs/version-4.8.2/getting-started/run-locally.md",72836],"1b641edf":[()=>n.e(3676).then(n.bind(n,96137)),"@site/versioned_docs/version-4.17.0/admin/placement.md",96137],"1bb26576":[()=>n.e(2993).then(n.bind(n,92823)),"@site/versioned_docs/version-4.11.1/admin/metrics.md",92823],"1be78505":[()=>Promise.all([n.e(532),n.e(9514)]).then(n.bind(n,19963)),"@theme/DocPage",19963],"1c223750":[()=>n.e(5870).then(n.bind(n,18152)),"@site/versioned_docs/version-4.10.0/getting-started/run-locally.md",18152],"1c4211eb":[()=>n.e(253).then(n.bind(n,50161)),"@site/versioned_docs/version-4.12.1/api/overview.md",50161],"1cb4afcc":[()=>n.e(6763).then(n.bind(n,94145)),"@site/versioned_docs/version-4.8.2/admin/geo-replication.md",94145],"1d91761b":[()=>n.e(5500).then(n.bind(n,11856)),"@site/versioned_docs/version-4.8.2/getting-started/installation.md",11856],"1ddcee41":[()=>n.e(8654).then(n.bind(n,77302)),"@site/versioned_docs/version-4.10.0/development/codebase.md",77302],"1e033391":[()=>n.e(3171).then(n.bind(n,30752)),"@site/versioned_docs/version-4.11.1/deployment/kubernetes.md",30752],"1e371f09":[()=>n.e(3845).then(n.bind(n,31315)),"@site/versioned_docs/version-4.15.5/security/sasl.md",31315],"1ecfc0b9":[()=>n.e(6696).then(n.bind(n,43593)),"@site/versioned_docs/version-4.14.8/admin/geo-replication.md",43593],"1f391b9e":[()=>Promise.all([n.e(532),n.e(5430),n.e(3085)]).then(n.bind(n,14247)),"@theme/MDXPage",14247],"1fe02719":[()=>n.e(6657).then(n.bind(n,25354)),"@site/versioned_docs/version-4.14.8/deployment/kubernetes.md",25354],"20c15017":[()=>n.e(4150).then(n.bind(n,40532)),"@site/versioned_docs/version-4.12.1/deployment/manual.md",40532],"213d6dd2":[()=>n.e(1744).then(n.bind(n,20702)),"@site/versioned_docs/version-4.17.0/reference/config.md",20702],"213de9a1":[()=>n.e(325).then(n.bind(n,29293)),"@site/versioned_docs/version-4.15.5/security/zookeeper.md",29293],"21e4306c":[()=>n.e(8211).then(n.bind(n,44729)),"@site/versioned_docs/version-4.5.1/security/overview.md",44729],"2246c66d":[()=>n.e(8986).then(n.bind(n,62288)),"@site/versioned_docs/version-4.13.0/admin/bookies.md",62288],"22d76b2d":[()=>n.e(6146).then(n.bind(n,48223)),"@site/src/pages/bps/BP-42-new-api-list-ledgers.md",48223],23200584:[()=>n.e(6066).then(n.bind(n,70848)),"@site/docs/api/distributedlog-api.md",70848],"2440862d":[()=>n.e(6669).then(n.bind(n,33335)),"@site/versioned_docs/version-4.5.1/admin/upgrade.md",33335],"24e8d336":[()=>n.e(6950).then(n.bind(n,60858)),"@site/versioned_docs/version-4.6.2/reference/cli.md",60858],"257152cd":[()=>n.e(2179).then(n.bind(n,33226)),"@site/versioned_docs/version-4.7.3/overview/overview.md",33226],"25be17b9":[()=>n.e(9389).then(n.bind(n,40917)),"@site/versioned_docs/version-4.15.5/reference/cli.md",40917],28655793:[()=>n.e(1423).then(n.bind(n,6762)),"@site/versioned_docs/version-4.10.0/security/sasl.md",6762],"286c567a":[()=>n.e(9782).then(n.bind(n,94544)),"@site/versioned_docs/version-4.15.5/deployment/kubernetes.md",94544],"2956de9a":[()=>n.e(879).then(n.bind(n,90929)),"@site/versioned_docs/version-4.6.2/security/sasl.md",90929],"2afb7445":[()=>n.e(1514).then(n.bind(n,374)),"@site/versioned_docs/version-4.15.5/getting-started/run-locally.md",374],"2b1d6972":[()=>n.e(1536).then(n.bind(n,76643)),"@site/versioned_docs/version-4.6.2/admin/placement.md",76643],"2ba8ffb1":[()=>n.e(659).then(n.bind(n,26314)),"@site/versioned_docs/version-4.5.1/admin/bookies.md",26314],"2c6e2254":[()=>n.e(9272).then(n.bind(n,40270)),"@site/versioned_docs/version-4.5.1/api/ledger-adv-api.md",40270],"2cc56763":[()=>n.e(6820).then(n.bind(n,14462)),"@site/versioned_docs/version-4.8.2/security/tls.md",14462],"2d24b11b":[()=>n.e(1896).then(n.bind(n,50991)),"@site/src/pages/community/testing.md",50991],"2d2c1853":[()=>n.e(9877).then(n.bind(n,54067)),"@site/versioned_docs/version-4.11.1/api/distributedlog-api.md",54067],"2e50ccc4":[()=>n.e(6395).then(n.bind(n,90653)),"@site/versioned_docs/version-4.8.2/admin/http.md",90653],"2ec0be4c":[()=>n.e(8351).then(n.bind(n,71909)),"@site/versioned_docs/version-4.6.2/development/codebase.md",71909],"2ff57c08":[()=>n.e(248).then(n.bind(n,21459)),"@site/versioned_docs/version-4.14.8/security/overview.md",21459],"3044fa47":[()=>n.e(7322).then(n.bind(n,88137)),"@site/versioned_docs/version-4.17.0/getting-started/installation.md",88137],"30c186c7":[()=>n.e(2329).then(n.bind(n,69823)),"@site/versioned_docs/version-4.6.2/deployment/kubernetes.md",69823],"313a661a":[()=>n.e(1173).then(n.bind(n,64651)),"@site/versioned_docs/version-4.11.1/admin/http.md",64651],"318dfdf9":[()=>n.e(9433).then(n.bind(n,4878)),"@site/docs/admin/metrics.md",4878],"31b6813e":[()=>n.e(2215).then(n.bind(n,72986)),"@site/versioned_docs/version-4.8.2/deployment/kubernetes.md",72986],"331b2a3d":[()=>n.e(6405).then(n.t.bind(n,92276,19)),"~docs/default/version-4-9-2-metadata-prop-8ae.json",92276],"33c915ea":[()=>n.e(7626).then(n.bind(n,90486)),"@site/versioned_docs/version-4.8.2/admin/autorecovery.md",90486],"3411c643":[()=>n.e(8357).then(n.bind(n,75144)),"@site/versioned_docs/version-4.12.1/development/codebase.md",75144],"342215bd":[()=>n.e(3577).then(n.bind(n,70457)),"@site/versioned_docs/version-4.5.1/reference/metrics.md",70457],"34dce56b":[()=>n.e(6004).then(n.bind(n,10905)),"@site/versioned_docs/version-4.17.0/api/overview.md",10905],35216708:[()=>n.e(8756).then(n.bind(n,94708)),"@site/versioned_docs/version-4.16.5/admin/placement.md",94708],"3521ddbf":[()=>n.e(9905).then(n.bind(n,56447)),"@site/src/pages/community/licensing.md",56447],"35534a6f":[()=>n.e(762).then(n.bind(n,13126)),"@site/versioned_docs/version-4.14.8/getting-started/installation.md",13126],"3592d2f2":[()=>n.e(7992).then(n.bind(n,87549)),"@site/docs/security/overview.md",87549],"3630fad3":[()=>n.e(9861).then(n.bind(n,12746)),"@site/versioned_docs/version-4.12.1/admin/geo-replication.md",12746],"39a4b53d":[()=>n.e(4258).then(n.bind(n,62304)),"@site/versioned_docs/version-4.12.1/deployment/kubernetes.md",62304],"3a07cdee":[()=>n.e(2354).then(n.bind(n,58598)),"@site/versioned_docs/version-4.13.0/deployment/kubernetes.md",58598],"3bb6078f":[()=>n.e(7374).then(n.bind(n,92417)),"@site/src/pages/bps/BP-46-run-without-journal.md",92417],"3bd732bb":[()=>n.e(4203).then(n.bind(n,24993)),"@site/versioned_docs/version-4.16.5/reference/config.md",24993],"3c400ed9":[()=>n.e(349).then(n.t.bind(n,39865,19)),"~docs/default/version-4-13-0-metadata-prop-ab4.json",39865],"3cef618a":[()=>n.e(678).then(n.bind(n,10402)),"@site/versioned_docs/version-4.14.8/admin/bookies.md",10402],"3cff1016":[()=>n.e(3758).then(n.bind(n,43916)),"@site/versioned_docs/version-4.8.2/reference/metrics.md",43916],"3d7bb4e0":[()=>n.e(906).then(n.bind(n,4810)),"@site/versioned_docs/version-4.9.2/security/overview.md",4810],"3d9fe30f":[()=>n.e(4107).then(n.bind(n,95150)),"@site/versioned_docs/version-4.5.1/security/zookeeper.md",95150],"3ec050b2":[()=>n.e(5181).then(n.bind(n,53865)),"@site/versioned_docs/version-4.10.0/security/tls.md",53865],"3f07749a":[()=>n.e(9199).then(n.bind(n,52085)),"@site/src/pages/bps/BP-28-etcd-as-metadata-store.md",52085],"3f48ad20":[()=>n.e(8991).then(n.bind(n,75323)),"@site/versioned_docs/version-4.9.2/admin/http.md",75323],"3f753b27":[()=>n.e(4923).then(n.bind(n,3516)),"@site/versioned_docs/version-4.13.0/deployment/manual.md",3516],"3f883def":[()=>n.e(2442).then(n.bind(n,11706)),"@site/versioned_docs/version-4.10.0/development/protocol.md",11706],"40712b22":[()=>n.e(5268).then(n.bind(n,10440)),"@site/versioned_docs/version-4.13.0/admin/placement.md",10440],"41168d35":[()=>n.e(1467).then(n.bind(n,26783)),"@site/src/pages/bps/BP-38-bookie-endpoint-discovery.md",26783],"421258aa":[()=>n.e(1441).then(n.bind(n,71302)),"@site/versioned_docs/version-4.12.1/security/tls.md",71302],"425c25af":[()=>n.e(6114).then(n.bind(n,42305)),"@site/versioned_docs/version-4.6.2/admin/http.md",42305],"43a0a41f":[()=>n.e(3258).then(n.t.bind(n,99033,19)),"~docs/default/version-4-6-2-metadata-prop-234.json",99033],"4698369b":[()=>n.e(9773).then(n.bind(n,31203)),"@site/versioned_docs/version-4.6.2/admin/autorecovery.md",31203],"46fd0908":[()=>n.e(3404).then(n.bind(n,10847)),"@site/versioned_docs/version-4.17.0/getting-started/concepts.md",10847],"4808995b":[()=>n.e(1594).then(n.bind(n,84862)),"@site/versioned_docs/version-4.5.1/api/ledger-api.md",84862],"4831039f":[()=>n.e(2882).then(n.bind(n,66845)),"@site/versioned_docs/version-4.9.2/security/tls.md",66845],"485f610c":[()=>n.e(983).then(n.bind(n,9752)),"@site/versioned_docs/version-4.5.1/getting-started/installation.md",9752],"4882bd62":[()=>n.e(1922).then(n.bind(n,24189)),"@site/versioned_docs/version-4.11.1/admin/decomission.md",24189],"48e6979d":[()=>n.e(1631).then(n.bind(n,84840)),"@site/versioned_docs/version-4.11.1/getting-started/run-locally.md",84840],"491836cf":[()=>n.e(8282).then(n.bind(n,24609)),"@site/versioned_docs/version-4.7.3/development/protocol.md",24609],"492440dc":[()=>n.e(2561).then(n.bind(n,54470)),"@site/versioned_docs/version-4.12.1/admin/upgrade.md",54470],"4a224a91":[()=>n.e(2207).then(n.t.bind(n,29488,19)),"~docs/default/version-4-14-8-metadata-prop-4cc.json",29488],"4a8bd1f6":[()=>n.e(24).then(n.bind(n,30259)),"@site/versioned_docs/version-4.9.2/api/overview.md",30259],"4bf870c6":[()=>n.e(3200).then(n.bind(n,75174)),"@site/versioned_docs/version-4.16.5/admin/bookies.md",75174],"4bfd050d":[()=>n.e(11).then(n.bind(n,40387)),"@site/versioned_docs/version-4.12.1/admin/metrics.md",40387],"4cd56fdb":[()=>n.e(1898).then(n.bind(n,97923)),"@site/docs/admin/geo-replication.md",97923],"4ce92582":[()=>n.e(8342).then(n.bind(n,71350)),"@site/versioned_docs/version-4.9.2/admin/placement.md",71350],"4cf33c28":[()=>n.e(9084).then(n.bind(n,23395)),"@site/versioned_docs/version-4.10.0/admin/http.md",23395],"4d70f3cf":[()=>n.e(3164).then(n.bind(n,92145)),"@site/versioned_docs/version-4.5.1/deployment/manual.md",92145],"4e6f80aa":[()=>n.e(1626).then(n.bind(n,17436)),"@site/versioned_docs/version-4.15.5/api/ledger-api.md",17436],"4f98aae6":[()=>n.e(2370).then(n.bind(n,29577)),"@site/versioned_docs/version-4.17.0/admin/geo-replication.md",29577],"50f3a74f":[()=>n.e(5631).then(n.bind(n,47666)),"@site/versioned_docs/version-4.11.1/security/overview.md",47666],"52fd9c79":[()=>n.e(2018).then(n.bind(n,66298)),"@site/versioned_docs/version-4.15.5/security/tls.md",66298],"54f44165":[()=>n.e(152).then(n.bind(n,60681)),"@site/docs/getting-started/installation.md",60681],"5531b81f":[()=>n.e(8335).then(n.bind(n,65237)),"@site/src/pages/community/bookkeeper-proposals.md",65237],"561b6265":[()=>n.e(2407).then(n.bind(n,71548)),"@site/versioned_docs/version-4.12.1/admin/http.md",71548],"561c0d70":[()=>n.e(2609).then(n.bind(n,25762)),"@site/versioned_docs/version-4.13.0/api/ledger-api.md",25762],"5684741f":[()=>n.e(6522).then(n.bind(n,19296)),"@site/versioned_docs/version-4.16.5/getting-started/concepts.md",19296],58753608:[()=>n.e(4010).then(n.bind(n,77761)),"@site/versioned_docs/version-4.16.5/admin/geo-replication.md",77761],"58efeb0f":[()=>n.e(9552).then(n.bind(n,201)),"@site/versioned_docs/version-4.10.0/admin/placement.md",201],"59304d55":[()=>n.e(3617).then(n.bind(n,11627)),"@site/versioned_docs/version-4.17.0/security/tls.md",11627],"5a1d798c":[()=>n.e(3852).then(n.bind(n,1831)),"@site/versioned_docs/version-4.10.0/admin/geo-replication.md",1831],"5acc7ccb":[()=>n.e(7934).then(n.bind(n,85831)),"@site/versioned_docs/version-4.13.0/development/protocol.md",85831],"5ae0edee":[()=>n.e(2288).then(n.bind(n,29242)),"@site/versioned_docs/version-4.14.8/admin/autorecovery.md",29242],"5b25eae8":[()=>n.e(6187).then(n.bind(n,8092)),"@site/versioned_docs/version-4.5.1/getting-started/run-locally.md",8092],"5b83d837":[()=>n.e(9632).then(n.bind(n,25248)),"@site/versioned_docs/version-4.11.1/admin/upgrade.md",25248],"5ccf8bb0":[()=>n.e(3351).then(n.bind(n,39505)),"@site/versioned_docs/version-4.5.1/security/sasl.md",39505],"5cf2c6e0":[()=>n.e(8791).then(n.bind(n,54900)),"@site/versioned_docs/version-4.8.2/reference/cli.md",54900],"5d50bbf1":[()=>n.e(7741).then(n.bind(n,80394)),"@site/versioned_docs/version-4.11.1/admin/perf.md",80394],"5e6a0b05":[()=>n.e(5792).then(n.bind(n,61498)),"@site/versioned_docs/version-4.5.1/security/tls.md",61498],"5e9f5e1a":[()=>Promise.resolve().then(n.bind(n,36809)),"@generated/docusaurus.config",36809],"5f20ae4e":[()=>n.e(3958).then(n.bind(n,50862)),"@site/versioned_docs/version-4.10.0/api/ledger-api.md",50862],"612db47a":[()=>n.e(6346).then(n.bind(n,53592)),"@site/versioned_docs/version-4.11.1/admin/bookies.md",53592],"61a001f8":[()=>n.e(4061).then(n.bind(n,68926)),"@site/versioned_docs/version-4.6.2/security/zookeeper.md",68926],"629b6576":[()=>n.e(9196).then(n.bind(n,78742)),"@site/versioned_docs/version-4.8.2/development/protocol.md",78742],"62a0d553":[()=>n.e(1963).then(n.bind(n,39978)),"@site/src/pages/bps/BP-34-cluster-metadata-checker.md",39978],"634aee6c":[()=>n.e(7356).then(n.bind(n,31355)),"@site/versioned_docs/version-4.9.2/reference/metrics.md",31355],"638e6f40":[()=>n.e(6055).then(n.bind(n,53793)),"@site/versioned_docs/version-4.11.1/getting-started/installation.md",53793],"65650ba2":[()=>n.e(3609).then(n.bind(n,20538)),"@site/versioned_docs/version-4.14.8/admin/upgrade.md",20538],"65df3d35":[()=>n.e(4643).then(n.bind(n,58814)),"@site/docs/api/overview.md",58814],"662da30f":[()=>n.e(2320).then(n.bind(n,62416)),"@site/versioned_docs/version-4.15.5/admin/decomission.md",62416],"66ba8f65":[()=>n.e(7071).then(n.bind(n,15792)),"@site/versioned_docs/version-4.14.8/api/overview.md",15792],"6766c2ba":[()=>n.e(6775).then(n.bind(n,95157)),"@site/docs/admin/upgrade.md",95157],"6789c389":[()=>n.e(8001).then(n.bind(n,20996)),"@site/src/pages/bps/BP-44-use-metrics.md",20996],"685312ca":[()=>n.e(3786).then(n.bind(n,20054)),"@site/versioned_docs/version-4.5.1/api/overview.md",20054],"69138a9b":[()=>n.e(7590).then(n.bind(n,11298)),"@site/versioned_docs/version-4.14.8/security/zookeeper.md",11298],"6b366f12":[()=>n.e(4849).then(n.bind(n,87419)),"@site/versioned_docs/version-4.16.5/api/ledger-api.md",87419],"6beda70c":[()=>n.e(833).then(n.bind(n,88768)),"@site/versioned_docs/version-4.15.5/admin/http.md",88768],"6cdfbbfb":[()=>n.e(4651).then(n.bind(n,12212)),"@site/versioned_docs/version-4.11.1/development/protocol.md",12212],"6e0bb75c":[()=>n.e(9178).then(n.bind(n,25865)),"@site/versioned_docs/version-4.16.5/overview/overview.md",25865],"6eb9aa01":[()=>n.e(8461).then(n.bind(n,57866)),"@site/versioned_docs/version-4.9.2/reference/cli.md",57866],"6ee89642":[()=>n.e(157).then(n.bind(n,61981)),"@site/versioned_docs/version-4.8.2/admin/perf.md",61981],"6f4e447b":[()=>n.e(5904).then(n.bind(n,5038)),"@site/versioned_docs/version-4.9.2/admin/metrics.md",5038],"6ff4dfcf":[()=>n.e(3159).then(n.bind(n,96546)),"@site/versioned_docs/version-4.12.1/reference/cli.md",96546],"70ab0033":[()=>n.e(3523).then(n.bind(n,35554)),"@site/versioned_docs/version-4.16.5/security/zookeeper.md",35554],"71605a32":[()=>n.e(1406).then(n.bind(n,97369)),"@site/versioned_docs/version-4.8.2/admin/bookies.md",97369],"724151f0":[()=>n.e(1708).then(n.bind(n,5542)),"@site/versioned_docs/version-4.13.0/admin/decomission.md",5542],"724e3ad7":[()=>n.e(2009).then(n.bind(n,30048)),"@site/versioned_docs/version-4.16.5/development/protocol.md",30048],"72c0ad31":[()=>n.e(6406).then(n.bind(n,98840)),"@site/versioned_docs/version-4.6.2/development/protocol.md",98840],"730767f4":[()=>n.e(8743).then(n.bind(n,31057)),"@site/versioned_docs/version-4.13.0/getting-started/concepts.md",31057],73663191:[()=>n.e(7753).then(n.bind(n,70874)),"@site/versioned_docs/version-4.14.8/reference/config.md",70874],"736b32a3":[()=>n.e(6197).then(n.bind(n,80053)),"@site/versioned_docs/version-4.17.0/getting-started/run-locally.md",80053],"7381f606":[()=>n.e(9421).then(n.bind(n,99124)),"@site/versioned_docs/version-4.17.0/admin/perf.md",99124],"739e861c":[()=>n.e(1614).then(n.bind(n,94325)),"@site/versioned_docs/version-4.5.1/reference/cli.md",94325],"73d377e5":[()=>n.e(115).then(n.bind(n,20951)),"@site/versioned_docs/version-4.10.0/overview/overview.md",20951],"7472e927":[()=>n.e(4110).then(n.bind(n,60680)),"@site/versioned_docs/version-4.8.2/security/zookeeper.md",60680],"7537e02a":[()=>n.e(4051).then(n.t.bind(n,58946,19)),"~docs/default/version-4-17-0-metadata-prop-a27.json",58946],"7589009a":[()=>n.e(3132).then(n.bind(n,48127)),"@site/versioned_docs/version-4.7.3/reference/metrics.md",48127],"76097a60":[()=>n.e(5866).then(n.bind(n,60883)),"@site/versioned_docs/version-4.12.1/security/sasl.md",60883],"76831a2f":[()=>n.e(9562).then(n.bind(n,20265)),"@site/versioned_docs/version-4.17.0/admin/metrics.md",20265],"772e10c8":[()=>n.e(2867).then(n.bind(n,42625)),"@site/versioned_docs/version-4.9.2/admin/perf.md",42625],"7815c2d3":[()=>n.e(7916).then(n.bind(n,79792)),"@site/versioned_docs/version-4.9.2/admin/autorecovery.md",79792],"78cfffe1":[()=>n.e(1717).then(n.bind(n,89838)),"@site/versioned_docs/version-4.9.2/development/protocol.md",89838],"7917e5c5":[()=>n.e(1573).then(n.bind(n,8864)),"@site/versioned_docs/version-4.8.2/api/distributedlog-api.md",8864],"79615c67":[()=>n.e(3209).then(n.bind(n,18314)),"@site/versioned_docs/version-4.14.8/admin/http.md",18314],"7a19cc40":[()=>n.e(6960).then(n.bind(n,58743)),"@site/versioned_docs/version-4.17.0/api/distributedlog-api.md",58743],"7b3ecbf1":[()=>n.e(7909).then(n.bind(n,28999)),"@site/versioned_docs/version-4.12.1/api/distributedlog-api.md",28999],"7b3ed863":[()=>n.e(2657).then(n.bind(n,17051)),"@site/docs/getting-started/concepts.md",17051],"7b53c4c5":[()=>n.e(9444).then(n.bind(n,21148)),"@site/versioned_docs/version-4.15.5/admin/autorecovery.md",21148],"7bf77d86":[()=>n.e(2128).then(n.bind(n,58151)),"@site/versioned_docs/version-4.16.5/admin/decomission.md",58151],"7c48a47e":[()=>n.e(8859).then(n.bind(n,7025)),"@site/versioned_docs/version-4.15.5/api/overview.md",7025],"7c8189eb":[()=>n.e(205).then(n.bind(n,81423)),"@site/src/pages/community/contributing.md",81423],"7cefa220":[()=>n.e(1870).then(n.bind(n,49227)),"@site/versioned_docs/version-4.13.0/security/overview.md",49227],"7dcbb8ba":[()=>n.e(4186).then(n.bind(n,89273)),"@site/versioned_docs/version-4.16.5/getting-started/installation.md",89273],"7e8a1336":[()=>n.e(3331).then(n.bind(n,72103)),"@site/versioned_docs/version-4.13.0/getting-started/installation.md",72103],"7e8ff14f":[()=>n.e(1751).then(n.bind(n,48123)),"@site/src/pages/bps/BP-27-new-bookkeeper-cli.md",48123],"7e9c80a9":[()=>n.e(363).then(n.bind(n,75091)),"@site/versioned_docs/version-4.8.2/deployment/manual.md",75091],"7ef71a47":[()=>n.e(7599).then(n.bind(n,28234)),"@site/src/pages/releases.md",28234],"7f23633c":[()=>n.e(5638).then(n.bind(n,84609)),"@site/src/pages/bps/BP-41-bookieid.md",84609],"7f6538f4":[()=>n.e(8095).then(n.bind(n,61599)),"@site/versioned_docs/version-4.11.1/reference/cli.md",61599],"7fa58592":[()=>n.e(609).then(n.bind(n,2338)),"@site/versioned_docs/version-4.5.1/api/distributedlog-api.md",2338],"80055ea8":[()=>n.e(8136).then(n.bind(n,57724)),"@site/versioned_docs/version-4.13.0/admin/upgrade.md",57724],"816774dc":[()=>n.e(792).then(n.bind(n,67250)),"@site/src/pages/bps/BP-62-new-API-for-batched-reads.md",67250],"818526b6":[()=>n.e(1948).then(n.bind(n,77884)),"@site/versioned_docs/version-4.12.1/admin/autorecovery.md",77884],"824fb3c0":[()=>n.e(3413).then(n.bind(n,60153)),"@site/versioned_docs/version-4.14.8/development/protocol.md",60153],"8296c7ad":[()=>n.e(9946).then(n.bind(n,9648)),"@site/versioned_docs/version-4.9.2/deployment/kubernetes.md",9648],"8372258a":[()=>n.e(9076).then(n.bind(n,64002)),"@site/src/pages/bps/BP-21-new-api-close-inconsistencies.md",64002],"83a4731b":[()=>n.e(5156).then(n.bind(n,2246)),"@site/versioned_docs/version-4.9.2/api/ledger-api.md",2246],"83e74c48":[()=>n.e(3757).then(n.bind(n,19624)),"@site/versioned_docs/version-4.11.1/admin/geo-replication.md",19624],"84741dfb":[()=>n.e(4138).then(n.bind(n,47490)),"@site/versioned_docs/version-4.17.0/api/ledger-adv-api.md",47490],"850e3a3d":[()=>n.e(6415).then(n.bind(n,21618)),"@site/versioned_docs/version-4.5.1/admin/geo-replication.md",21618],"8607f33a":[()=>n.e(8550).then(n.bind(n,91428)),"@site/versioned_docs/version-4.16.5/api/distributedlog-api.md",91428],"86a6f4a6":[()=>n.e(4670).then(n.bind(n,799)),"@site/src/pages/bps/BP-31-durability.md",799],"86ab4954":[()=>n.e(5221).then(n.bind(n,56393)),"@site/versioned_docs/version-4.11.1/reference/config.md",56393],"87726f30":[()=>n.e(9023).then(n.bind(n,4119)),"@site/versioned_docs/version-4.12.1/api/ledger-api.md",4119],"87cc2ef4":[()=>n.e(637).then(n.bind(n,75422)),"@site/versioned_docs/version-4.17.0/overview/overview.md",75422],"87d315c4":[()=>n.e(9716).then(n.bind(n,85140)),"@site/versioned_docs/version-4.7.3/admin/autorecovery.md",85140],"87d8598c":[()=>n.e(5585).then(n.t.bind(n,22573,19)),"~docs/default/version-4-10-0-metadata-prop-d1e.json",22573],"896baf8c":[()=>n.e(1493).then(n.bind(n,55250)),"@site/versioned_docs/version-4.10.0/admin/autorecovery.md",55250],"8af1d301":[()=>n.e(5593).then(n.bind(n,79664)),"@site/docs/admin/bookies.md",79664],"8b73681b":[()=>n.e(3323).then(n.bind(n,10836)),"@site/versioned_docs/version-4.15.5/admin/geo-replication.md",10836],"8cc504e2":[()=>n.e(3390).then(n.bind(n,58803)),"@site/versioned_docs/version-4.5.1/admin/metrics.md",58803],"8d306d14":[()=>n.e(7474).then(n.bind(n,25169)),"@site/versioned_docs/version-4.11.1/development/codebase.md",25169],"8d5383ff":[()=>n.e(3515).then(n.bind(n,37422)),"@site/src/pages/community/issue-report.md",37422],"8df24095":[()=>n.e(7055).then(n.bind(n,86273)),"@site/docs/admin/autorecovery.md",86273],"8e8026e2":[()=>n.e(3615).then(n.bind(n,13344)),"@site/versioned_docs/version-4.10.0/deployment/manual.md",13344],"8e901aa8":[()=>n.e(3641).then(n.bind(n,68461)),"@site/versioned_docs/version-4.11.1/getting-started/concepts.md",68461],"8ef2f9fb":[()=>n.e(4876).then(n.bind(n,14521)),"@site/docs/security/zookeeper.md",14521],"8fde3252":[()=>n.e(4592).then(n.bind(n,80697)),"@site/docs/security/tls.md",80697],"9050039c":[()=>n.e(8540).then(n.bind(n,68614)),"@site/versioned_docs/version-4.7.3/deployment/manual.md",68614],"91a9c488":[()=>n.e(4871).then(n.bind(n,36225)),"@site/versioned_docs/version-4.9.2/api/ledger-adv-api.md",36225],"91c76d4c":[()=>n.e(960).then(n.bind(n,42045)),"@site/docs/reference/cli.md",42045],"9260b226":[()=>n.e(4887).then(n.bind(n,53e3)),"@site/versioned_docs/version-4.8.2/reference/config.md",53e3],"92fa1062":[()=>n.e(9342).then(n.bind(n,87398)),"@site/src/pages/bps/BP-20-github-workflow-for-bookkeeper-proposals.md",87398],"935f2afb":[()=>n.e(53).then(n.t.bind(n,1109,19)),"~docs/default/version-current-metadata-prop-751.json",1109],"93eb8f00":[()=>n.e(7285).then(n.bind(n,8532)),"@site/versioned_docs/version-4.9.2/development/codebase.md",8532],"94320cd8":[()=>n.e(9441).then(n.bind(n,86819)),"@site/versioned_docs/version-4.15.5/development/protocol.md",86819],"943eb5d2":[()=>n.e(1361).then(n.bind(n,89414)),"@site/versioned_docs/version-4.16.5/getting-started/run-locally.md",89414],"951f283b":[()=>n.e(4014).then(n.bind(n,99820)),"@site/versioned_docs/version-4.17.0/admin/http.md",99820],"95ce3d34":[()=>n.e(453).then(n.bind(n,55939)),"@site/versioned_docs/version-4.15.5/admin/metrics.md",55939],96616036:[()=>n.e(1689).then(n.bind(n,53095)),"@site/versioned_docs/version-4.16.5/deployment/kubernetes.md",53095],"976110e4":[()=>n.e(7397).then(n.bind(n,21413)),"@site/versioned_docs/version-4.17.0/security/zookeeper.md",21413],"97cfc084":[()=>n.e(5297).then(n.bind(n,70868)),"@site/versioned_docs/version-4.16.5/security/tls.md",70868],"985bff7a":[()=>n.e(2575).then(n.bind(n,28474)),"@site/versioned_docs/version-4.8.2/getting-started/concepts.md",28474],"9a26ec38":[()=>n.e(5729).then(n.bind(n,10811)),"@site/versioned_docs/version-4.11.1/security/tls.md",10811],"9a9953e7":[()=>n.e(4546).then(n.bind(n,61377)),"@site/docs/reference/config.md",61377],"9b42fb08":[()=>n.e(1335).then(n.bind(n,28362)),"@site/versioned_docs/version-4.14.8/reference/metrics.md",28362],"9c4aba92":[()=>n.e(4840).then(n.bind(n,87483)),"@site/docs/security/sasl.md",87483],"9c5aab0e":[()=>n.e(5451).then(n.bind(n,79577)),"@site/versioned_docs/version-4.11.1/api/ledger-adv-api.md",79577],"9ca9b220":[()=>n.e(4378).then(n.bind(n,50591)),"@site/versioned_docs/version-4.9.2/overview/overview.md",50591],"9dbc92a7":[()=>n.e(908).then(n.bind(n,28450)),"@site/docs/api/ledger-api.md",28450],"9e5743fa":[()=>n.e(2418).then(n.bind(n,47288)),"@site/versioned_docs/version-4.15.5/admin/upgrade.md",47288],"9edca4e9":[()=>n.e(1401).then(n.bind(n,21672)),"@site/docs/admin/decomission.md",21672],"9f61d8e1":[()=>n.e(4152).then(n.bind(n,73240)),"@site/versioned_docs/version-4.7.3/api/overview.md",73240],"9fedf7e0":[()=>n.e(2913).then(n.bind(n,24947)),"@site/versioned_docs/version-4.8.2/development/codebase.md",24947],a19a348a:[()=>n.e(1488).then(n.bind(n,20593)),"@site/src/pages/community/meeting.md",20593],a1b73db9:[()=>n.e(338).then(n.bind(n,16502)),"@site/versioned_docs/version-4.15.5/api/ledger-adv-api.md",16502],a3335d39:[()=>n.e(1845).then(n.bind(n,86946)),"@site/versioned_docs/version-4.16.5/development/codebase.md",86946],a34b52ce:[()=>n.e(9035).then(n.bind(n,3013)),"@site/versioned_docs/version-4.10.0/admin/upgrade.md",3013],a363e5d2:[()=>n.e(8846).then(n.bind(n,58556)),"@site/versioned_docs/version-4.17.0/reference/cli.md",58556],a363edce:[()=>n.e(426).then(n.bind(n,42403)),"@site/versioned_docs/version-4.13.0/admin/perf.md",42403],a386696c:[()=>n.e(724).then(n.bind(n,36986)),"@site/versioned_docs/version-4.8.2/api/ledger-adv-api.md",36986],a3d44527:[()=>n.e(9609).then(n.bind(n,18528)),"@site/versioned_docs/version-4.10.0/security/zookeeper.md",18528],a43fb5c1:[()=>n.e(4845).then(n.bind(n,14101)),"@site/versioned_docs/version-4.13.0/api/overview.md",14101],a47a33ba:[()=>n.e(9521).then(n.bind(n,10179)),"@site/versioned_docs/version-4.6.2/api/overview.md",10179],a4f4c0c8:[()=>n.e(7845).then(n.bind(n,5937)),"@site/versioned_docs/version-4.11.1/admin/placement.md",5937],a5854c89:[()=>n.e(7367).then(n.bind(n,97494)),"@site/versioned_docs/version-4.11.1/security/sasl.md",97494],a647d08a:[()=>n.e(8173).then(n.bind(n,84210)),"@site/src/pages/community/slack.md",84210],a6fce498:[()=>n.e(657).then(n.bind(n,68385)),"@site/versioned_docs/version-4.16.5/security/overview.md",68385],a7a77925:[()=>n.e(2253).then(n.bind(n,7281)),"@site/docs/admin/perf.md",7281],a9e28e86:[()=>n.e(8502).then(n.bind(n,81980)),"@site/versioned_docs/version-4.13.0/admin/autorecovery.md",81980],aa2b1be2:[()=>n.e(3035).then(n.bind(n,5296)),"@site/versioned_docs/version-4.14.8/getting-started/run-locally.md",5296],abb3dda4:[()=>n.e(7844).then(n.t.bind(n,32741,19)),"~docs/default/version-4-8-2-metadata-prop-9c6.json",32741],abbc0c33:[()=>n.e(9138).then(n.bind(n,72875)),"@site/versioned_docs/version-4.6.2/deployment/manual.md",72875],ac63e720:[()=>n.e(2047).then(n.bind(n,69545)),"@site/versioned_docs/version-4.5.1/development/protocol.md",69545],ae4d2163:[()=>n.e(9412).then(n.bind(n,53629)),"@site/versioned_docs/version-4.15.5/development/codebase.md",53629],aede75d4:[()=>n.e(1831).then(n.bind(n,92634)),"@site/versioned_docs/version-4.13.0/admin/geo-replication.md",92634],af1e75d9:[()=>n.e(478).then(n.t.bind(n,92937,19)),"~docs/default/version-4-16-5-metadata-prop-547.json",92937],af30b71e:[()=>n.e(1435).then(n.bind(n,71785)),"@site/versioned_docs/version-4.6.2/getting-started/concepts.md",71785],b022ea46:[()=>n.e(8969).then(n.bind(n,78691)),"@site/versioned_docs/version-4.13.0/api/ledger-adv-api.md",78691],b217b1df:[()=>n.e(7218).then(n.bind(n,38345)),"@site/versioned_docs/version-4.11.1/api/ledger-api.md",38345],b218484e:[()=>n.e(7903).then(n.bind(n,30141)),"@site/versioned_docs/version-4.6.2/getting-started/run-locally.md",30141],b26f55a5:[()=>n.e(9418).then(n.bind(n,10274)),"@site/versioned_docs/version-4.12.1/admin/placement.md",10274],b2f83641:[()=>n.e(3133).then(n.bind(n,68583)),"@site/versioned_docs/version-4.15.5/api/distributedlog-api.md",68583],b3100f29:[()=>n.e(1765).then(n.bind(n,67156)),"@site/versioned_docs/version-4.14.8/getting-started/concepts.md",67156],b3c11919:[()=>n.e(372).then(n.bind(n,78170)),"@site/src/pages/bps/BP-26-move-distributedlog-core-library.md",78170],b4baf230:[()=>n.e(60).then(n.bind(n,51333)),"@site/versioned_docs/version-4.12.1/api/ledger-adv-api.md",51333],b5173ce4:[()=>n.e(1059).then(n.bind(n,12858)),"@site/versioned_docs/version-4.17.0/deployment/kubernetes.md",12858],b54aa47d:[()=>n.e(6192).then(n.bind(n,44073)),"@site/versioned_docs/version-4.9.2/admin/geo-replication.md",44073],b672ebd6:[()=>n.e(7732).then(n.bind(n,57494)),"@site/versioned_docs/version-4.12.1/development/protocol.md",57494],b68c61f5:[()=>n.e(7030).then(n.bind(n,52781)),"@site/versioned_docs/version-4.10.0/deployment/kubernetes.md",52781],b6c885a5:[()=>n.e(9290).then(n.bind(n,22141)),"@site/versioned_docs/version-4.9.2/getting-started/installation.md",22141],b7d359f1:[()=>n.e(6885).then(n.bind(n,56936)),"@site/versioned_docs/version-4.7.3/development/codebase.md",56936],b7fafd37:[()=>n.e(3937).then(n.bind(n,33120)),"@site/versioned_docs/version-4.13.0/security/tls.md",33120],b800115e:[()=>n.e(8522).then(n.bind(n,60541)),"@site/src/pages/bps/BP-32-advisory-write-close.md",60541],b929e89b:[()=>n.e(7781).then(n.bind(n,88473)),"@site/src/pages/project/privacy.md",88473],b9567f41:[()=>n.e(7281).then(n.bind(n,70858)),"@site/versioned_docs/version-4.16.5/admin/autorecovery.md",70858],ba18db30:[()=>n.e(4980).then(n.bind(n,78741)),"@site/src/pages/bps/BP-66-support-throttling-for-zookeeper-read-during-rereplication.md",78741],ba628d47:[()=>n.e(3011).then(n.bind(n,90943)),"@site/docs/admin/placement.md",90943],bb7ded3b:[()=>n.e(9547).then(n.bind(n,25497)),"@site/versioned_docs/version-4.11.1/reference/metrics.md",25497],bbd70f53:[()=>n.e(6111).then(n.bind(n,12183)),"@site/versioned_docs/version-4.7.3/reference/config.md",12183],bbde899b:[()=>n.e(1209).then(n.bind(n,89755)),"@site/docs/development/protocol.md",89755],bbef9193:[()=>n.e(3498).then(n.bind(n,99754)),"@site/versioned_docs/version-4.6.2/reference/metrics.md",99754],bc29171d:[()=>n.e(4900).then(n.bind(n,25656)),"@site/versioned_docs/version-4.7.3/api/distributedlog-api.md",25656],bc5400c9:[()=>n.e(4026).then(n.bind(n,30063)),"@site/versioned_docs/version-4.5.1/development/codebase.md",30063],bd384662:[()=>n.e(5860).then(n.bind(n,11010)),"@site/versioned_docs/version-4.14.8/api/distributedlog-api.md",11010],be9b1ba5:[()=>n.e(4624).then(n.bind(n,16913)),"@site/versioned_docs/version-4.9.2/getting-started/concepts.md",16913],beeb3fc3:[()=>n.e(6181).then(n.t.bind(n,15745,19)),"/home/runner/work/bookkeeper/bookkeeper/site3/website/.docusaurus/docusaurus-plugin-content-pages/default/plugin-route-context-module-100.json",15745],bf29d81a:[()=>n.e(7068).then(n.bind(n,77954)),"@site/versioned_docs/version-4.10.0/reference/cli.md",77954],bf69fc30:[()=>n.e(9113).then(n.bind(n,38399)),"@site/src/pages/bps/BP-37-conf-documentation.md",38399],c0fb62f3:[()=>n.e(7743).then(n.bind(n,76043)),"@site/versioned_docs/version-4.16.5/api/overview.md",76043],c142e639:[()=>n.e(975).then(n.bind(n,61392)),"@site/versioned_docs/version-4.13.0/admin/metrics.md",61392],c2065ba5:[()=>n.e(6902).then(n.bind(n,83491)),"@site/versioned_docs/version-4.12.1/overview/overview.md",83491],c23b53d6:[()=>n.e(368).then(n.bind(n,21567)),"@site/versioned_docs/version-4.14.8/overview/overview.md",21567],c25ed854:[()=>n.e(6324).then(n.bind(n,57200)),"@site/versioned_docs/version-4.17.0/api/ledger-api.md",57200],c29dbf77:[()=>n.e(7378).then(n.bind(n,2934)),"@site/versioned_docs/version-4.6.2/api/ledger-adv-api.md",2934],c34c1aa0:[()=>n.e(2662).then(n.bind(n,57987)),"@site/versioned_docs/version-4.5.1/admin/autorecovery.md",57987],c3917577:[()=>n.e(6174).then(n.bind(n,64578)),"@site/versioned_docs/version-4.6.2/admin/bookies.md",64578],c3a4d6bc:[()=>n.e(8108).then(n.bind(n,93783)),"@site/versioned_docs/version-4.14.8/security/sasl.md",93783],c4b0d767:[()=>n.e(8441).then(n.bind(n,45639)),"@site/versioned_docs/version-4.16.5/admin/metrics.md",45639],c4f5d8e4:[()=>n.e(4195).then(n.bind(n,4546)),"@site/src/pages/index.js",4546],c53b1d90:[()=>n.e(3391).then(n.bind(n,97198)),"@site/versioned_docs/version-4.5.1/deployment/kubernetes.md",97198],c56769ee:[()=>n.e(4392).then(n.bind(n,66160)),"@site/versioned_docs/version-4.13.0/security/zookeeper.md",66160],c6ff1e84:[()=>n.e(8682).then(n.bind(n,28639)),"@site/versioned_docs/version-4.8.2/security/sasl.md",28639],c767f061:[()=>n.e(5211).then(n.bind(n,32626)),"@site/versioned_docs/version-4.12.1/getting-started/run-locally.md",32626],c78e0dfd:[()=>n.e(5848).then(n.bind(n,74224)),"@site/versioned_docs/version-4.5.1/getting-started/concepts.md",74224],c7f18df2:[()=>n.e(9122).then(n.bind(n,38530)),"@site/src/pages/bps/BP-36-stats-documentation-annotation.md",38530],c87023c4:[()=>n.e(6525).then(n.bind(n,78596)),"@site/versioned_docs/version-4.12.1/security/overview.md",78596],c90cac61:[()=>n.e(8562).then(n.bind(n,57977)),"@site/src/pages/community/releases.md",57977],c93357d8:[()=>n.e(2572).then(n.bind(n,32466)),"@site/versioned_docs/version-4.15.5/admin/bookies.md",32466],c9cfd710:[()=>n.e(4756).then(n.bind(n,57195)),"@site/versioned_docs/version-4.12.1/getting-started/concepts.md",57195],ca99f506:[()=>n.e(9578).then(n.bind(n,39011)),"@site/versioned_docs/version-4.8.2/api/overview.md",39011],ca9e19a0:[()=>n.e(6469).then(n.bind(n,49e3)),"@site/versioned_docs/version-4.5.1/admin/perf.md",49e3],caa6cc64:[()=>n.e(4779).then(n.bind(n,44842)),"@site/versioned_docs/version-4.6.2/security/tls.md",44842],cb1fb814:[()=>n.e(7211).then(n.bind(n,71597)),"@site/versioned_docs/version-4.7.3/admin/upgrade.md",71597],cb881008:[()=>n.e(2422).then(n.bind(n,47358)),"@site/versioned_docs/version-4.14.8/security/tls.md",47358],cb952911:[()=>n.e(622).then(n.bind(n,47998)),"@site/versioned_docs/version-4.7.3/security/zookeeper.md",47998],cbfa528b:[()=>n.e(9249).then(n.bind(n,55768)),"@site/versioned_docs/version-4.12.1/reference/metrics.md",55768],cf9c4b04:[()=>n.e(9211).then(n.bind(n,34466)),"@site/src/pages/community/release-guide.md",34466],cfc9ccfa:[()=>n.e(1527).then(n.bind(n,11234)),"@site/versioned_docs/version-4.17.0/admin/upgrade.md",11234],d09aafa8:[()=>n.e(5646).then(n.bind(n,82933)),"@site/docs/deployment/manual.md",82933],d0a2eb8e:[()=>n.e(5616).then(n.bind(n,80478)),"@site/versioned_docs/version-4.13.0/reference/config.md",80478],d1a9d15c:[()=>n.e(2824).then(n.bind(n,92171)),"@site/versioned_docs/version-4.7.3/admin/geo-replication.md",92171],d1db332c:[()=>n.e(4380).then(n.bind(n,71975)),"@site/versioned_docs/version-4.17.0/development/protocol.md",71975],d2113218:[()=>n.e(3239).then(n.bind(n,70470)),"@site/versioned_docs/version-4.10.0/api/ledger-adv-api.md",70470],d288ceb1:[()=>n.e(9999).then(n.bind(n,23777)),"@site/src/pages/project/who.md",23777],d67b6402:[()=>n.e(771).then(n.bind(n,24666)),"@site/versioned_docs/version-4.11.1/api/overview.md",24666],d70b4d73:[()=>n.e(8385).then(n.bind(n,56826)),"@site/src/pages/community/presentations.md",56826],d78c0d88:[()=>n.e(6783).then(n.bind(n,16586)),"@site/versioned_docs/version-4.15.5/overview/overview.md",16586],d86f913f:[()=>n.e(8473).then(n.bind(n,25507)),"@site/versioned_docs/version-4.6.2/admin/upgrade.md",25507],d8aef0aa:[()=>n.e(3310).then(n.bind(n,35353)),"@site/versioned_docs/version-4.8.2/admin/metrics.md",35353],d91115c6:[()=>n.e(3508).then(n.bind(n,4051)),"@site/versioned_docs/version-4.10.0/reference/metrics.md",4051],d96302cc:[()=>n.e(3902).then(n.t.bind(n,83769,19)),"/home/runner/work/bookkeeper/bookkeeper/site3/website/.docusaurus/docusaurus-plugin-content-docs/default/plugin-route-context-module-100.json",83769],d972a432:[()=>n.e(63).then(n.bind(n,97853)),"@site/versioned_docs/version-4.17.0/admin/autorecovery.md",97853],d9c8eb9a:[()=>n.e(6643).then(n.bind(n,70443)),"@site/versioned_docs/version-4.9.2/security/sasl.md",70443],da284785:[()=>n.e(10).then(n.bind(n,63536)),"@site/versioned_docs/version-4.10.0/api/distributedlog-api.md",63536],da8fb6e6:[()=>n.e(7406).then(n.bind(n,45344)),"@site/versioned_docs/version-4.6.2/overview/overview.md",45344],db1d00c4:[()=>n.e(7595).then(n.bind(n,38962)),"@site/versioned_docs/version-4.11.1/overview/overview.md",38962],db40a819:[()=>n.e(2893).then(n.bind(n,7649)),"@site/versioned_docs/version-4.9.2/api/distributedlog-api.md",7649],dc0ec182:[()=>n.e(9522).then(n.bind(n,5585)),"@site/src/pages/bps/BP-29-metadata-store-api-module.md",5585],dca334c0:[()=>n.e(741).then(n.bind(n,92554)),"@site/versioned_docs/version-4.13.0/getting-started/run-locally.md",92554],dd523e5f:[()=>n.e(1310).then(n.bind(n,38937)),"@site/versioned_docs/version-4.13.0/api/distributedlog-api.md",38937],de2333f9:[()=>n.e(7106).then(n.bind(n,51649)),"@site/versioned_docs/version-4.7.3/getting-started/concepts.md",51649],ded32efe:[()=>n.e(8130).then(n.bind(n,86286)),"@site/versioned_docs/version-4.6.2/api/distributedlog-api.md",86286],deffa85b:[()=>n.e(7399).then(n.bind(n,69049)),"@site/versioned_docs/version-4.6.2/admin/perf.md",69049],df1f2a65:[()=>n.e(2974).then(n.bind(n,3523)),"@site/versioned_docs/version-4.16.5/reference/cli.md",3523],df9d0e7b:[()=>n.e(9693).then(n.bind(n,85611)),"@site/versioned_docs/version-4.7.3/admin/bookies.md",85611],dff2692f:[()=>n.e(3012).then(n.bind(n,33616)),"@site/versioned_docs/version-4.7.3/admin/metrics.md",33616],e0128c32:[()=>n.e(2855).then(n.bind(n,53394)),"@site/versioned_docs/version-4.16.5/admin/http.md",53394],e0d9e15f:[()=>n.e(7053).then(n.bind(n,53314)),"@site/versioned_docs/version-4.13.0/security/sasl.md",53314],e151506d:[()=>n.e(2493).then(n.bind(n,93808)),"@site/versioned_docs/version-4.5.1/overview/overview.md",93808],e1797e98:[()=>n.e(2686).then(n.bind(n,88331)),"@site/versioned_docs/version-4.6.2/admin/metrics.md",88331],e1e94bbc:[()=>n.e(9263).then(n.bind(n,95594)),"@site/src/pages/bps/BP-33-building-official-docker-imags.md",95594],e2886f4d:[()=>n.e(4377).then(n.bind(n,76292)),"@site/versioned_docs/version-4.9.2/security/zookeeper.md",76292],e2a686c7:[()=>n.e(8031).then(n.bind(n,22002)),"@site/versioned_docs/version-4.12.1/getting-started/installation.md",22002],e2a8767f:[()=>n.e(3877).then(n.bind(n,30685)),"@site/src/pages/community/coding-guide.md",30685],e39bc689:[()=>n.e(937).then(n.bind(n,64206)),"@site/src/pages/bps/BP-43-gradle-migration.md",64206],e494340d:[()=>n.e(119).then(n.bind(n,19109)),"@site/versioned_docs/version-4.9.2/reference/config.md",19109],e526d9fb:[()=>n.e(4579).then(n.bind(n,53401)),"@site/versioned_docs/version-4.10.0/admin/perf.md",53401],e52fe1ed:[()=>n.e(2682).then(n.bind(n,35808)),"@site/versioned_docs/version-4.12.1/admin/decomission.md",35808],e54bfd1f:[()=>n.e(6268).then(n.bind(n,97502)),"@site/src/pages/bps/BP-25-MovingChecksumToProto.md",97502],e64000bb:[()=>n.e(4612).then(n.bind(n,24963)),"@site/versioned_docs/version-4.17.0/admin/bookies.md",24963],e66d8aa5:[()=>n.e(1227).then(n.bind(n,67433)),"@site/versioned_docs/version-4.14.8/api/ledger-adv-api.md",67433],e6a6cdb5:[()=>n.e(4869).then(n.bind(n,61352)),"@site/versioned_docs/version-4.10.0/security/overview.md",61352],e94dfc49:[()=>n.e(8308).then(n.bind(n,9225)),"@site/docs/overview/overview.md",9225],ea0aa512:[()=>n.e(5232).then(n.bind(n,70284)),"@site/versioned_docs/version-4.7.3/deployment/kubernetes.md",70284],ea5d6149:[()=>n.e(3066).then(n.bind(n,98688)),"@site/versioned_docs/version-4.13.0/development/codebase.md",98688],eba79e96:[()=>n.e(796).then(n.bind(n,65282)),"@site/versioned_docs/version-4.13.0/overview/overview.md",65282],ebba64f8:[()=>n.e(4846).then(n.bind(n,11384)),"@site/docs/getting-started/run-locally.md",11384],ebf8c8a4:[()=>n.e(9192).then(n.bind(n,52869)),"@site/versioned_docs/version-4.16.5/admin/upgrade.md",52869],ed08832e:[()=>n.e(8049).then(n.bind(n,71794)),"@site/versioned_docs/version-4.10.0/getting-started/installation.md",71794],ed30e49e:[()=>n.e(5).then(n.bind(n,47324)),"@site/docs/development/codebase.md",47324],edb7b4da:[()=>n.e(1293).then(n.bind(n,65518)),"@site/versioned_docs/version-4.14.8/api/ledger-api.md",65518],ee4ead70:[()=>n.e(9295).then(n.bind(n,18459)),"@site/versioned_docs/version-4.6.2/admin/geo-replication.md",18459],ee8b4f50:[()=>n.e(8339).then(n.bind(n,20616)),"@site/versioned_docs/version-4.17.0/development/codebase.md",20616],ef1ef56c:[()=>n.e(9550).then(n.t.bind(n,19348,19)),"~docs/default/version-4-5-1-metadata-prop-bc3.json",19348],ef3f5cc8:[()=>n.e(5251).then(n.bind(n,40323)),"@site/versioned_docs/version-4.14.8/deployment/manual.md",40323],effdd252:[()=>n.e(2211).then(n.bind(n,34588)),"@site/versioned_docs/version-4.13.0/reference/metrics.md",34588],f1c1c644:[()=>n.e(2279).then(n.bind(n,98872)),"@site/src/pages/community/mailing-lists.md",98872],f1ec30d1:[()=>n.e(989).then(n.t.bind(n,58168,19)),"~docs/default/version-4-12-1-metadata-prop-897.json",58168],f2d5ac7e:[()=>n.e(2057).then(n.bind(n,41112)),"@site/versioned_docs/version-4.10.0/admin/bookies.md",41112],f2d60081:[()=>n.e(1359).then(n.bind(n,57021)),"@site/versioned_docs/version-4.9.2/admin/bookies.md",57021],f35ad539:[()=>n.e(6303).then(n.bind(n,35410)),"@site/versioned_docs/version-4.14.8/admin/metrics.md",35410],f440e5d3:[()=>n.e(7764).then(n.bind(n,50289)),"@site/versioned_docs/version-4.16.5/api/ledger-adv-api.md",50289],f47db9e6:[()=>n.e(2049).then(n.bind(n,88026)),"@site/versioned_docs/version-4.14.8/reference/cli.md",88026],f4dc42ca:[()=>n.e(1181).then(n.bind(n,79397)),"@site/versioned_docs/version-4.15.5/security/overview.md",79397],f51846fe:[()=>n.e(355).then(n.bind(n,12971)),"@site/versioned_docs/version-4.12.1/admin/bookies.md",12971],f51baf8e:[()=>n.e(1271).then(n.bind(n,51314)),"@site/versioned_docs/version-4.9.2/admin/upgrade.md",51314],f6025ed5:[()=>n.e(5617).then(n.bind(n,81438)),"@site/versioned_docs/version-4.17.0/security/overview.md",81438],f61db2e5:[()=>n.e(8669).then(n.bind(n,77306)),"@site/versioned_docs/version-4.7.3/api/ledger-adv-api.md",77306],f69994f3:[()=>n.e(663).then(n.bind(n,9471)),"@site/docs/admin/http.md",9471],f6ba9a4b:[()=>n.e(6016).then(n.bind(n,47009)),"@site/versioned_docs/version-4.14.8/admin/placement.md",47009],f74a5a7b:[()=>n.e(3912).then(n.bind(n,39776)),"@site/versioned_docs/version-4.13.0/reference/cli.md",39776],f7a674b2:[()=>n.e(5694).then(n.t.bind(n,41726,19)),"~docs/default/version-4-7-3-metadata-prop-11c.json",41726],f8bf4ac5:[()=>n.e(8805).then(n.bind(n,73102)),"@site/versioned_docs/version-4.15.5/reference/config.md",73102],f963ea94:[()=>n.e(4123).then(n.bind(n,62020)),"@site/versioned_docs/version-4.14.8/admin/perf.md",62020],f9a3b6b7:[()=>n.e(1666).then(n.bind(n,17811)),"@site/versioned_docs/version-4.8.2/api/ledger-api.md",17811],f9a9d4c2:[()=>n.e(8951).then(n.bind(n,63828)),"@site/versioned_docs/version-4.13.0/admin/http.md",63828],fb18728e:[()=>n.e(3898).then(n.bind(n,64716)),"@site/versioned_docs/version-4.5.1/admin/placement.md",64716],fca08244:[()=>n.e(1682).then(n.bind(n,77762)),"@site/versioned_docs/version-4.11.1/security/zookeeper.md",77762],fcea3b45:[()=>n.e(7942).then(n.bind(n,36212)),"@site/versioned_docs/version-4.7.3/security/tls.md",36212],fd1c180b:[()=>n.e(5056).then(n.bind(n,37702)),"@site/versioned_docs/version-4.7.3/getting-started/installation.md",37702],ff260964:[()=>n.e(123).then(n.bind(n,72547)),"@site/versioned_docs/version-4.10.0/getting-started/concepts.md",72547],ffb1bb68:[()=>n.e(643).then(n.bind(n,58079)),"@site/versioned_docs/version-4.12.1/security/zookeeper.md",58079],ffbf113e:[()=>n.e(8663).then(n.bind(n,80871)),"@site/versioned_docs/version-4.8.2/security/overview.md",80871]};function d(e){let{error:t,retry:n,pastDelay:r}=e;return t?o.createElement("div",{style:{textAlign:"center",color:"#fff",backgroundColor:"#fa383e",borderColor:"#fa383e",borderStyle:"solid",borderRadius:"0.25rem",borderWidth:"1px",boxSizing:"border-box",display:"block",padding:"1rem",flex:"0 0 50%",marginLeft:"25%",marginRight:"25%",marginTop:"5rem",maxWidth:"50%",width:"100%"}},o.createElement("p",null,String(t)),o.createElement("div",null,o.createElement("button",{type:"button",onClick:n},"Retry"))):r?o.createElement("div",{style:{display:"flex",justifyContent:"center",alignItems:"center",height:"100vh"}},o.createElement("svg",{id:"loader",style:{width:128,height:110,position:"absolute",top:"calc(100vh - 64%)"},viewBox:"0 0 45 45",xmlns:"http://www.w3.org/2000/svg",stroke:"#61dafb"},o.createElement("g",{fill:"none",fillRule:"evenodd",transform:"translate(1 1)",strokeWidth:"2"},o.createElement("circle",{cx:"22",cy:"22",r:"6",strokeOpacity:"0"},o.createElement("animate",{attributeName:"r",begin:"1.5s",dur:"3s",values:"6;22",calcMode:"linear",repeatCount:"indefinite"}),o.createElement("animate",{attributeName:"stroke-opacity",begin:"1.5s",dur:"3s",values:"1;0",calcMode:"linear",repeatCount:"indefinite"}),o.createElement("animate",{attributeName:"stroke-width",begin:"1.5s",dur:"3s",values:"2;0",calcMode:"linear",repeatCount:"indefinite"})),o.createElement("circle",{cx:"22",cy:"22",r:"6",strokeOpacity:"0"},o.createElement("animate",{attributeName:"r",begin:"3s",dur:"3s",values:"6;22",calcMode:"linear",repeatCount:"indefinite"}),o.createElement("animate",{attributeName:"stroke-opacity",begin:"3s",dur:"3s",values:"1;0",calcMode:"linear",repeatCount:"indefinite"}),o.createElement("animate",{attributeName:"stroke-width",begin:"3s",dur:"3s",values:"2;0",calcMode:"linear",repeatCount:"indefinite"})),o.createElement("circle",{cx:"22",cy:"22",r:"8"},o.createElement("animate",{attributeName:"r",begin:"0s",dur:"1.5s",values:"6;1;2;3;4;5;6",calcMode:"linear",repeatCount:"indefinite"}))))):null}var l=n(99670),u=n(30226);function p(e,t){if("*"===e)return a()({loading:d,loader:()=>n.e(4972).then(n.bind(n,4972)),modules:["@theme/NotFound"],webpack:()=>[4972],render(e,t){const n=e.default;return o.createElement(u.z,{value:{plugin:{name:"native",id:"default"}}},o.createElement(n,t))}});const i=s[`${e}-${t}`],p={},m=[],f=[],b=(0,l.Z)(i);return Object.entries(b).forEach((e=>{let[t,n]=e;const o=c[n];o&&(p[t]=o[0],m.push(o[1]),f.push(o[2]))})),a().Map({loading:d,loader:p,modules:m,webpack:()=>f,render(t,n){const a=JSON.parse(JSON.stringify(i));Object.entries(t).forEach((t=>{let[n,o]=t;const r=o.default;if(!r)throw new Error(`The page component at ${e} doesn't have a default export. This makes it impossible to render anything. Consider default-exporting a React component.`);"object"!=typeof r&&"function"!=typeof r||Object.keys(o).filter((e=>"default"!==e)).forEach((e=>{r[e]=o[e]}));let i=a;const s=n.split(".");s.slice(0,-1).forEach((e=>{i=i[e]})),i[s[s.length-1]]=r}));const s=a.__comp;delete a.__comp;const c=a.__context;return delete a.__context,o.createElement(u.z,{value:c},o.createElement(s,(0,r.Z)({},a,n)))}})}var m=[{path:"/bps/BP-20-github-workflow-for-bookkeeper-proposals",component:p("/bps/BP-20-github-workflow-for-bookkeeper-proposals","638"),exact:!0},{path:"/bps/BP-21-new-api-close-inconsistencies",component:p("/bps/BP-21-new-api-close-inconsistencies","6ec"),exact:!0},{path:"/bps/BP-22-separate-closing-ledgers-from-opening-ledgers",component:p("/bps/BP-22-separate-closing-ledgers-from-opening-ledgers","423"),exact:!0},{path:"/bps/BP-25-MovingChecksumToProto",component:p("/bps/BP-25-MovingChecksumToProto","5ff"),exact:!0},{path:"/bps/BP-26-move-distributedlog-core-library",component:p("/bps/BP-26-move-distributedlog-core-library","1a6"),exact:!0},{path:"/bps/BP-27-new-bookkeeper-cli",component:p("/bps/BP-27-new-bookkeeper-cli","d9d"),exact:!0},{path:"/bps/BP-28-etcd-as-metadata-store",component:p("/bps/BP-28-etcd-as-metadata-store","83f"),exact:!0},{path:"/bps/BP-29-metadata-store-api-module",component:p("/bps/BP-29-metadata-store-api-module","458"),exact:!0},{path:"/bps/BP-31-durability",component:p("/bps/BP-31-durability","111"),exact:!0},{path:"/bps/BP-32-advisory-write-close",component:p("/bps/BP-32-advisory-write-close","711"),exact:!0},{path:"/bps/BP-33-building-official-docker-imags",component:p("/bps/BP-33-building-official-docker-imags","a4a"),exact:!0},{path:"/bps/BP-34-cluster-metadata-checker",component:p("/bps/BP-34-cluster-metadata-checker","0df"),exact:!0},{path:"/bps/BP-35-128-bits-support",component:p("/bps/BP-35-128-bits-support","afb"),exact:!0},{path:"/bps/BP-36-stats-documentation-annotation",component:p("/bps/BP-36-stats-documentation-annotation","149"),exact:!0},{path:"/bps/BP-37-conf-documentation",component:p("/bps/BP-37-conf-documentation","59e"),exact:!0},{path:"/bps/BP-38-bookie-endpoint-discovery",component:p("/bps/BP-38-bookie-endpoint-discovery","4fa"),exact:!0},{path:"/bps/BP-41-bookieid",component:p("/bps/BP-41-bookieid","999"),exact:!0},{path:"/bps/BP-42-new-api-list-ledgers",component:p("/bps/BP-42-new-api-list-ledgers","411"),exact:!0},{path:"/bps/BP-43-gradle-migration",component:p("/bps/BP-43-gradle-migration","da1"),exact:!0},{path:"/bps/BP-44-use-metrics",component:p("/bps/BP-44-use-metrics","502"),exact:!0},{path:"/bps/BP-46-run-without-journal",component:p("/bps/BP-46-run-without-journal","15a"),exact:!0},{path:"/bps/BP-62-new-API-for-batched-reads",component:p("/bps/BP-62-new-API-for-batched-reads","498"),exact:!0},{path:"/bps/BP-66-support-throttling-for-zookeeper-read-during-rereplication",component:p("/bps/BP-66-support-throttling-for-zookeeper-read-during-rereplication","2c6"),exact:!0},{path:"/bps/BP-template",component:p("/bps/BP-template","26a"),exact:!0},{path:"/community/bookkeeper-proposals",component:p("/community/bookkeeper-proposals","dbc"),exact:!0},{path:"/community/coding-guide",component:p("/community/coding-guide","a5f"),exact:!0},{path:"/community/contributing",component:p("/community/contributing","acc"),exact:!0},{path:"/community/issue-report",component:p("/community/issue-report","2b9"),exact:!0},{path:"/community/licensing",component:p("/community/licensing","fd3"),exact:!0},{path:"/community/mailing-lists",component:p("/community/mailing-lists","2c5"),exact:!0},{path:"/community/meeting",component:p("/community/meeting","889"),exact:!0},{path:"/community/presentations",component:p("/community/presentations","c9d"),exact:!0},{path:"/community/release-guide",component:p("/community/release-guide","85f"),exact:!0},{path:"/community/releases",component:p("/community/releases","8e0"),exact:!0},{path:"/community/slack",component:p("/community/slack","cb9"),exact:!0},{path:"/community/testing",component:p("/community/testing","656"),exact:!0},{path:"/project/bylaws",component:p("/project/bylaws","894"),exact:!0},{path:"/project/privacy",component:p("/project/privacy","330"),exact:!0},{path:"/project/who",component:p("/project/who","500"),exact:!0},{path:"/release-notes",component:p("/release-notes","18c"),exact:!0},{path:"/releases",component:p("/releases","aaf"),exact:!0},{path:"/docs/4.10.0",component:p("/docs/4.10.0","c04"),routes:[{path:"/docs/4.10.0/admin/autorecovery",component:p("/docs/4.10.0/admin/autorecovery","a34"),exact:!0,sidebar:"version-4.10.0/docsSidebar"},{path:"/docs/4.10.0/admin/bookies",component:p("/docs/4.10.0/admin/bookies","4bf"),exact:!0,sidebar:"version-4.10.0/docsSidebar"},{path:"/docs/4.10.0/admin/geo-replication",component:p("/docs/4.10.0/admin/geo-replication","ada"),exact:!0},{path:"/docs/4.10.0/admin/http",component:p("/docs/4.10.0/admin/http","850"),exact:!0,sidebar:"version-4.10.0/docsSidebar"},{path:"/docs/4.10.0/admin/metrics",component:p("/docs/4.10.0/admin/metrics","92d"),exact:!0,sidebar:"version-4.10.0/docsSidebar"},{path:"/docs/4.10.0/admin/perf",component:p("/docs/4.10.0/admin/perf","edf"),exact:!0},{path:"/docs/4.10.0/admin/placement",component:p("/docs/4.10.0/admin/placement","13f"),exact:!0},{path:"/docs/4.10.0/admin/upgrade",component:p("/docs/4.10.0/admin/upgrade","156"),exact:!0,sidebar:"version-4.10.0/docsSidebar"},{path:"/docs/4.10.0/api/distributedlog-api",component:p("/docs/4.10.0/api/distributedlog-api","c65"),exact:!0,sidebar:"version-4.10.0/docsSidebar"},{path:"/docs/4.10.0/api/ledger-adv-api",component:p("/docs/4.10.0/api/ledger-adv-api","549"),exact:!0,sidebar:"version-4.10.0/docsSidebar"},{path:"/docs/4.10.0/api/ledger-api",component:p("/docs/4.10.0/api/ledger-api","5d3"),exact:!0,sidebar:"version-4.10.0/docsSidebar"},{path:"/docs/4.10.0/api/overview",component:p("/docs/4.10.0/api/overview","659"),exact:!0,sidebar:"version-4.10.0/docsSidebar"},{path:"/docs/4.10.0/deployment/kubernetes",component:p("/docs/4.10.0/deployment/kubernetes","63b"),exact:!0,sidebar:"version-4.10.0/docsSidebar"},{path:"/docs/4.10.0/deployment/manual",component:p("/docs/4.10.0/deployment/manual","221"),exact:!0,sidebar:"version-4.10.0/docsSidebar"},{path:"/docs/4.10.0/development/codebase",component:p("/docs/4.10.0/development/codebase","316"),exact:!0},{path:"/docs/4.10.0/development/protocol",component:p("/docs/4.10.0/development/protocol","6de"),exact:!0,sidebar:"version-4.10.0/docsSidebar"},{path:"/docs/4.10.0/getting-started/concepts",component:p("/docs/4.10.0/getting-started/concepts","4d2"),exact:!0,sidebar:"version-4.10.0/docsSidebar"},{path:"/docs/4.10.0/getting-started/installation",component:p("/docs/4.10.0/getting-started/installation","dbe"),exact:!0,sidebar:"version-4.10.0/docsSidebar"},{path:"/docs/4.10.0/getting-started/run-locally",component:p("/docs/4.10.0/getting-started/run-locally","cd6"),exact:!0,sidebar:"version-4.10.0/docsSidebar"},{path:"/docs/4.10.0/overview/",component:p("/docs/4.10.0/overview/","9af"),exact:!0,sidebar:"version-4.10.0/docsSidebar"},{path:"/docs/4.10.0/reference/cli",component:p("/docs/4.10.0/reference/cli","444"),exact:!0,sidebar:"version-4.10.0/docsSidebar"},{path:"/docs/4.10.0/reference/config",component:p("/docs/4.10.0/reference/config","c64"),exact:!0,sidebar:"version-4.10.0/docsSidebar"},{path:"/docs/4.10.0/reference/metrics",component:p("/docs/4.10.0/reference/metrics","c8e"),exact:!0},{path:"/docs/4.10.0/security/overview",component:p("/docs/4.10.0/security/overview","984"),exact:!0,sidebar:"version-4.10.0/docsSidebar"},{path:"/docs/4.10.0/security/sasl",component:p("/docs/4.10.0/security/sasl","8f4"),exact:!0,sidebar:"version-4.10.0/docsSidebar"},{path:"/docs/4.10.0/security/tls",component:p("/docs/4.10.0/security/tls","6ba"),exact:!0,sidebar:"version-4.10.0/docsSidebar"},{path:"/docs/4.10.0/security/zookeeper",component:p("/docs/4.10.0/security/zookeeper","e6e"),exact:!0,sidebar:"version-4.10.0/docsSidebar"}]},{path:"/docs/4.11.1",component:p("/docs/4.11.1","d06"),routes:[{path:"/docs/4.11.1/admin/autorecovery",component:p("/docs/4.11.1/admin/autorecovery","e4d"),exact:!0,sidebar:"version-4.11.1/docsSidebar"},{path:"/docs/4.11.1/admin/bookies",component:p("/docs/4.11.1/admin/bookies","913"),exact:!0,sidebar:"version-4.11.1/docsSidebar"},{path:"/docs/4.11.1/admin/decomission",component:p("/docs/4.11.1/admin/decomission","84f"),exact:!0,sidebar:"version-4.11.1/docsSidebar"},{path:"/docs/4.11.1/admin/geo-replication",component:p("/docs/4.11.1/admin/geo-replication","662"),exact:!0},{path:"/docs/4.11.1/admin/http",component:p("/docs/4.11.1/admin/http","678"),exact:!0,sidebar:"version-4.11.1/docsSidebar"},{path:"/docs/4.11.1/admin/metrics",component:p("/docs/4.11.1/admin/metrics","2a8"),exact:!0,sidebar:"version-4.11.1/docsSidebar"},{path:"/docs/4.11.1/admin/perf",component:p("/docs/4.11.1/admin/perf","407"),exact:!0},{path:"/docs/4.11.1/admin/placement",component:p("/docs/4.11.1/admin/placement","73e"),exact:!0},{path:"/docs/4.11.1/admin/upgrade",component:p("/docs/4.11.1/admin/upgrade","af2"),exact:!0,sidebar:"version-4.11.1/docsSidebar"},{path:"/docs/4.11.1/api/distributedlog-api",component:p("/docs/4.11.1/api/distributedlog-api","cf6"),exact:!0,sidebar:"version-4.11.1/docsSidebar"},{path:"/docs/4.11.1/api/ledger-adv-api",component:p("/docs/4.11.1/api/ledger-adv-api","cde"),exact:!0,sidebar:"version-4.11.1/docsSidebar"},{path:"/docs/4.11.1/api/ledger-api",component:p("/docs/4.11.1/api/ledger-api","78a"),exact:!0,sidebar:"version-4.11.1/docsSidebar"},{path:"/docs/4.11.1/api/overview",component:p("/docs/4.11.1/api/overview","4cc"),exact:!0,sidebar:"version-4.11.1/docsSidebar"},{path:"/docs/4.11.1/deployment/kubernetes",component:p("/docs/4.11.1/deployment/kubernetes","d54"),exact:!0,sidebar:"version-4.11.1/docsSidebar"},{path:"/docs/4.11.1/deployment/manual",component:p("/docs/4.11.1/deployment/manual","7c6"),exact:!0,sidebar:"version-4.11.1/docsSidebar"},{path:"/docs/4.11.1/development/codebase",component:p("/docs/4.11.1/development/codebase","a9d"),exact:!0},{path:"/docs/4.11.1/development/protocol",component:p("/docs/4.11.1/development/protocol","407"),exact:!0,sidebar:"version-4.11.1/docsSidebar"},{path:"/docs/4.11.1/getting-started/concepts",component:p("/docs/4.11.1/getting-started/concepts","89a"),exact:!0,sidebar:"version-4.11.1/docsSidebar"},{path:"/docs/4.11.1/getting-started/installation",component:p("/docs/4.11.1/getting-started/installation","695"),exact:!0,sidebar:"version-4.11.1/docsSidebar"},{path:"/docs/4.11.1/getting-started/run-locally",component:p("/docs/4.11.1/getting-started/run-locally","59f"),exact:!0,sidebar:"version-4.11.1/docsSidebar"},{path:"/docs/4.11.1/overview/",component:p("/docs/4.11.1/overview/","b2f"),exact:!0,sidebar:"version-4.11.1/docsSidebar"},{path:"/docs/4.11.1/reference/cli",component:p("/docs/4.11.1/reference/cli","a8b"),exact:!0,sidebar:"version-4.11.1/docsSidebar"},{path:"/docs/4.11.1/reference/config",component:p("/docs/4.11.1/reference/config","deb"),exact:!0,sidebar:"version-4.11.1/docsSidebar"},{path:"/docs/4.11.1/reference/metrics",component:p("/docs/4.11.1/reference/metrics","29e"),exact:!0},{path:"/docs/4.11.1/security/overview",component:p("/docs/4.11.1/security/overview","507"),exact:!0,sidebar:"version-4.11.1/docsSidebar"},{path:"/docs/4.11.1/security/sasl",component:p("/docs/4.11.1/security/sasl","dc2"),exact:!0,sidebar:"version-4.11.1/docsSidebar"},{path:"/docs/4.11.1/security/tls",component:p("/docs/4.11.1/security/tls","52e"),exact:!0,sidebar:"version-4.11.1/docsSidebar"},{path:"/docs/4.11.1/security/zookeeper",component:p("/docs/4.11.1/security/zookeeper","864"),exact:!0,sidebar:"version-4.11.1/docsSidebar"}]},{path:"/docs/4.12.1",component:p("/docs/4.12.1","071"),routes:[{path:"/docs/4.12.1/admin/autorecovery",component:p("/docs/4.12.1/admin/autorecovery","89b"),exact:!0,sidebar:"version-4.12.1/docsSidebar"},{path:"/docs/4.12.1/admin/bookies",component:p("/docs/4.12.1/admin/bookies","0d6"),exact:!0,sidebar:"version-4.12.1/docsSidebar"},{path:"/docs/4.12.1/admin/decomission",component:p("/docs/4.12.1/admin/decomission","7be"),exact:!0,sidebar:"version-4.12.1/docsSidebar"},{path:"/docs/4.12.1/admin/geo-replication",component:p("/docs/4.12.1/admin/geo-replication","d2d"),exact:!0},{path:"/docs/4.12.1/admin/http",component:p("/docs/4.12.1/admin/http","fe4"),exact:!0,sidebar:"version-4.12.1/docsSidebar"},{path:"/docs/4.12.1/admin/metrics",component:p("/docs/4.12.1/admin/metrics","c89"),exact:!0,sidebar:"version-4.12.1/docsSidebar"},{path:"/docs/4.12.1/admin/perf",component:p("/docs/4.12.1/admin/perf","ec4"),exact:!0},{path:"/docs/4.12.1/admin/placement",component:p("/docs/4.12.1/admin/placement","726"),exact:!0},{path:"/docs/4.12.1/admin/upgrade",component:p("/docs/4.12.1/admin/upgrade","dda"),exact:!0,sidebar:"version-4.12.1/docsSidebar"},{path:"/docs/4.12.1/api/distributedlog-api",component:p("/docs/4.12.1/api/distributedlog-api","fa6"),exact:!0,sidebar:"version-4.12.1/docsSidebar"},{path:"/docs/4.12.1/api/ledger-adv-api",component:p("/docs/4.12.1/api/ledger-adv-api","e2f"),exact:!0,sidebar:"version-4.12.1/docsSidebar"},{path:"/docs/4.12.1/api/ledger-api",component:p("/docs/4.12.1/api/ledger-api","5a5"),exact:!0,sidebar:"version-4.12.1/docsSidebar"},{path:"/docs/4.12.1/api/overview",component:p("/docs/4.12.1/api/overview","3ed"),exact:!0,sidebar:"version-4.12.1/docsSidebar"},{path:"/docs/4.12.1/deployment/kubernetes",component:p("/docs/4.12.1/deployment/kubernetes","6a6"),exact:!0,sidebar:"version-4.12.1/docsSidebar"},{path:"/docs/4.12.1/deployment/manual",component:p("/docs/4.12.1/deployment/manual","7e5"),exact:!0,sidebar:"version-4.12.1/docsSidebar"},{path:"/docs/4.12.1/development/codebase",component:p("/docs/4.12.1/development/codebase","916"),exact:!0},{path:"/docs/4.12.1/development/protocol",component:p("/docs/4.12.1/development/protocol","5a5"),exact:!0,sidebar:"version-4.12.1/docsSidebar"},{path:"/docs/4.12.1/getting-started/concepts",component:p("/docs/4.12.1/getting-started/concepts","b6d"),exact:!0,sidebar:"version-4.12.1/docsSidebar"},{path:"/docs/4.12.1/getting-started/installation",component:p("/docs/4.12.1/getting-started/installation","e37"),exact:!0,sidebar:"version-4.12.1/docsSidebar"},{path:"/docs/4.12.1/getting-started/run-locally",component:p("/docs/4.12.1/getting-started/run-locally","06e"),exact:!0,sidebar:"version-4.12.1/docsSidebar"},{path:"/docs/4.12.1/overview/",component:p("/docs/4.12.1/overview/","bfe"),exact:!0,sidebar:"version-4.12.1/docsSidebar"},{path:"/docs/4.12.1/reference/cli",component:p("/docs/4.12.1/reference/cli","abd"),exact:!0,sidebar:"version-4.12.1/docsSidebar"},{path:"/docs/4.12.1/reference/config",component:p("/docs/4.12.1/reference/config","33c"),exact:!0,sidebar:"version-4.12.1/docsSidebar"},{path:"/docs/4.12.1/reference/metrics",component:p("/docs/4.12.1/reference/metrics","607"),exact:!0},{path:"/docs/4.12.1/security/overview",component:p("/docs/4.12.1/security/overview","471"),exact:!0,sidebar:"version-4.12.1/docsSidebar"},{path:"/docs/4.12.1/security/sasl",component:p("/docs/4.12.1/security/sasl","829"),exact:!0,sidebar:"version-4.12.1/docsSidebar"},{path:"/docs/4.12.1/security/tls",component:p("/docs/4.12.1/security/tls","dcc"),exact:!0,sidebar:"version-4.12.1/docsSidebar"},{path:"/docs/4.12.1/security/zookeeper",component:p("/docs/4.12.1/security/zookeeper","709"),exact:!0,sidebar:"version-4.12.1/docsSidebar"}]},{path:"/docs/4.13.0",component:p("/docs/4.13.0","fb3"),routes:[{path:"/docs/4.13.0/admin/autorecovery",component:p("/docs/4.13.0/admin/autorecovery","3d4"),exact:!0,sidebar:"version-4.13.0/docsSidebar"},{path:"/docs/4.13.0/admin/bookies",component:p("/docs/4.13.0/admin/bookies","058"),exact:!0,sidebar:"version-4.13.0/docsSidebar"},{path:"/docs/4.13.0/admin/decomission",component:p("/docs/4.13.0/admin/decomission","67b"),exact:!0,sidebar:"version-4.13.0/docsSidebar"},{path:"/docs/4.13.0/admin/geo-replication",component:p("/docs/4.13.0/admin/geo-replication","1cf"),exact:!0},{path:"/docs/4.13.0/admin/http",component:p("/docs/4.13.0/admin/http","a06"),exact:!0,sidebar:"version-4.13.0/docsSidebar"},{path:"/docs/4.13.0/admin/metrics",component:p("/docs/4.13.0/admin/metrics","ce7"),exact:!0,sidebar:"version-4.13.0/docsSidebar"},{path:"/docs/4.13.0/admin/perf",component:p("/docs/4.13.0/admin/perf","427"),exact:!0},{path:"/docs/4.13.0/admin/placement",component:p("/docs/4.13.0/admin/placement","b86"),exact:!0},{path:"/docs/4.13.0/admin/upgrade",component:p("/docs/4.13.0/admin/upgrade","4e5"),exact:!0,sidebar:"version-4.13.0/docsSidebar"},{path:"/docs/4.13.0/api/distributedlog-api",component:p("/docs/4.13.0/api/distributedlog-api","a2e"),exact:!0,sidebar:"version-4.13.0/docsSidebar"},{path:"/docs/4.13.0/api/ledger-adv-api",component:p("/docs/4.13.0/api/ledger-adv-api","89f"),exact:!0,sidebar:"version-4.13.0/docsSidebar"},{path:"/docs/4.13.0/api/ledger-api",component:p("/docs/4.13.0/api/ledger-api","9b0"),exact:!0,sidebar:"version-4.13.0/docsSidebar"},{path:"/docs/4.13.0/api/overview",component:p("/docs/4.13.0/api/overview","5f4"),exact:!0,sidebar:"version-4.13.0/docsSidebar"},{path:"/docs/4.13.0/deployment/kubernetes",component:p("/docs/4.13.0/deployment/kubernetes","65d"),exact:!0,sidebar:"version-4.13.0/docsSidebar"},{path:"/docs/4.13.0/deployment/manual",component:p("/docs/4.13.0/deployment/manual","8b0"),exact:!0,sidebar:"version-4.13.0/docsSidebar"},{path:"/docs/4.13.0/development/codebase",component:p("/docs/4.13.0/development/codebase","f91"),exact:!0},{path:"/docs/4.13.0/development/protocol",component:p("/docs/4.13.0/development/protocol","08a"),exact:!0,sidebar:"version-4.13.0/docsSidebar"},{path:"/docs/4.13.0/getting-started/concepts",component:p("/docs/4.13.0/getting-started/concepts","bc4"),exact:!0,sidebar:"version-4.13.0/docsSidebar"},{path:"/docs/4.13.0/getting-started/installation",component:p("/docs/4.13.0/getting-started/installation","b39"),exact:!0,sidebar:"version-4.13.0/docsSidebar"},{path:"/docs/4.13.0/getting-started/run-locally",component:p("/docs/4.13.0/getting-started/run-locally","e66"),exact:!0,sidebar:"version-4.13.0/docsSidebar"},{path:"/docs/4.13.0/overview/",component:p("/docs/4.13.0/overview/","18d"),exact:!0,sidebar:"version-4.13.0/docsSidebar"},{path:"/docs/4.13.0/reference/cli",component:p("/docs/4.13.0/reference/cli","12e"),exact:!0,sidebar:"version-4.13.0/docsSidebar"},{path:"/docs/4.13.0/reference/config",component:p("/docs/4.13.0/reference/config","455"),exact:!0,sidebar:"version-4.13.0/docsSidebar"},{path:"/docs/4.13.0/reference/metrics",component:p("/docs/4.13.0/reference/metrics","5ca"),exact:!0},{path:"/docs/4.13.0/security/overview",component:p("/docs/4.13.0/security/overview","d78"),exact:!0,sidebar:"version-4.13.0/docsSidebar"},{path:"/docs/4.13.0/security/sasl",component:p("/docs/4.13.0/security/sasl","132"),exact:!0,sidebar:"version-4.13.0/docsSidebar"},{path:"/docs/4.13.0/security/tls",component:p("/docs/4.13.0/security/tls","6e8"),exact:!0,sidebar:"version-4.13.0/docsSidebar"},{path:"/docs/4.13.0/security/zookeeper",component:p("/docs/4.13.0/security/zookeeper","c16"),exact:!0,sidebar:"version-4.13.0/docsSidebar"}]},{path:"/docs/4.14.8",component:p("/docs/4.14.8","855"),routes:[{path:"/docs/4.14.8/admin/autorecovery",component:p("/docs/4.14.8/admin/autorecovery","a10"),exact:!0,sidebar:"version-4.14.8/docsSidebar"},{path:"/docs/4.14.8/admin/bookies",component:p("/docs/4.14.8/admin/bookies","7b1"),exact:!0,sidebar:"version-4.14.8/docsSidebar"},{path:"/docs/4.14.8/admin/decomission",component:p("/docs/4.14.8/admin/decomission","c2f"),exact:!0,sidebar:"version-4.14.8/docsSidebar"},{path:"/docs/4.14.8/admin/geo-replication",component:p("/docs/4.14.8/admin/geo-replication","4d1"),exact:!0},{path:"/docs/4.14.8/admin/http",component:p("/docs/4.14.8/admin/http","996"),exact:!0,sidebar:"version-4.14.8/docsSidebar"},{path:"/docs/4.14.8/admin/metrics",component:p("/docs/4.14.8/admin/metrics","d75"),exact:!0,sidebar:"version-4.14.8/docsSidebar"},{path:"/docs/4.14.8/admin/perf",component:p("/docs/4.14.8/admin/perf","ee9"),exact:!0},{path:"/docs/4.14.8/admin/placement",component:p("/docs/4.14.8/admin/placement","985"),exact:!0},{path:"/docs/4.14.8/admin/upgrade",component:p("/docs/4.14.8/admin/upgrade","169"),exact:!0,sidebar:"version-4.14.8/docsSidebar"},{path:"/docs/4.14.8/api/distributedlog-api",component:p("/docs/4.14.8/api/distributedlog-api","53e"),exact:!0,sidebar:"version-4.14.8/docsSidebar"},{path:"/docs/4.14.8/api/ledger-adv-api",component:p("/docs/4.14.8/api/ledger-adv-api","fb8"),exact:!0,sidebar:"version-4.14.8/docsSidebar"},{path:"/docs/4.14.8/api/ledger-api",component:p("/docs/4.14.8/api/ledger-api","717"),exact:!0,sidebar:"version-4.14.8/docsSidebar"},{path:"/docs/4.14.8/api/overview",component:p("/docs/4.14.8/api/overview","54b"),exact:!0,sidebar:"version-4.14.8/docsSidebar"},{path:"/docs/4.14.8/deployment/kubernetes",component:p("/docs/4.14.8/deployment/kubernetes","4d3"),exact:!0,sidebar:"version-4.14.8/docsSidebar"},{path:"/docs/4.14.8/deployment/manual",component:p("/docs/4.14.8/deployment/manual","551"),exact:!0,sidebar:"version-4.14.8/docsSidebar"},{path:"/docs/4.14.8/development/codebase",component:p("/docs/4.14.8/development/codebase","728"),exact:!0},{path:"/docs/4.14.8/development/protocol",component:p("/docs/4.14.8/development/protocol","151"),exact:!0,sidebar:"version-4.14.8/docsSidebar"},{path:"/docs/4.14.8/getting-started/concepts",component:p("/docs/4.14.8/getting-started/concepts","570"),exact:!0,sidebar:"version-4.14.8/docsSidebar"},{path:"/docs/4.14.8/getting-started/installation",component:p("/docs/4.14.8/getting-started/installation","0db"),exact:!0,sidebar:"version-4.14.8/docsSidebar"},{path:"/docs/4.14.8/getting-started/run-locally",component:p("/docs/4.14.8/getting-started/run-locally","603"),exact:!0,sidebar:"version-4.14.8/docsSidebar"},{path:"/docs/4.14.8/overview/",component:p("/docs/4.14.8/overview/","f6f"),exact:!0,sidebar:"version-4.14.8/docsSidebar"},{path:"/docs/4.14.8/reference/cli",component:p("/docs/4.14.8/reference/cli","579"),exact:!0,sidebar:"version-4.14.8/docsSidebar"},{path:"/docs/4.14.8/reference/config",component:p("/docs/4.14.8/reference/config","bb1"),exact:!0,sidebar:"version-4.14.8/docsSidebar"},{path:"/docs/4.14.8/reference/metrics",component:p("/docs/4.14.8/reference/metrics","2f9"),exact:!0},{path:"/docs/4.14.8/security/overview",component:p("/docs/4.14.8/security/overview","8ad"),exact:!0,sidebar:"version-4.14.8/docsSidebar"},{path:"/docs/4.14.8/security/sasl",component:p("/docs/4.14.8/security/sasl","97b"),exact:!0,sidebar:"version-4.14.8/docsSidebar"},{path:"/docs/4.14.8/security/tls",component:p("/docs/4.14.8/security/tls","fab"),exact:!0,sidebar:"version-4.14.8/docsSidebar"},{path:"/docs/4.14.8/security/zookeeper",component:p("/docs/4.14.8/security/zookeeper","21c"),exact:!0,sidebar:"version-4.14.8/docsSidebar"}]},{path:"/docs/4.15.5",component:p("/docs/4.15.5","d97"),routes:[{path:"/docs/4.15.5/admin/autorecovery",component:p("/docs/4.15.5/admin/autorecovery","35e"),exact:!0,sidebar:"docsSidebar"},{path:"/docs/4.15.5/admin/bookies",component:p("/docs/4.15.5/admin/bookies","e1f"),exact:!0,sidebar:"docsSidebar"},{path:"/docs/4.15.5/admin/decomission",component:p("/docs/4.15.5/admin/decomission","0aa"),exact:!0,sidebar:"docsSidebar"},{path:"/docs/4.15.5/admin/geo-replication",component:p("/docs/4.15.5/admin/geo-replication","77b"),exact:!0},{path:"/docs/4.15.5/admin/http",component:p("/docs/4.15.5/admin/http","ca2"),exact:!0,sidebar:"docsSidebar"},{path:"/docs/4.15.5/admin/metrics",component:p("/docs/4.15.5/admin/metrics","509"),exact:!0,sidebar:"docsSidebar"},{path:"/docs/4.15.5/admin/perf",component:p("/docs/4.15.5/admin/perf","c38"),exact:!0},{path:"/docs/4.15.5/admin/placement",component:p("/docs/4.15.5/admin/placement","5ef"),exact:!0},{path:"/docs/4.15.5/admin/upgrade",component:p("/docs/4.15.5/admin/upgrade","976"),exact:!0,sidebar:"docsSidebar"},{path:"/docs/4.15.5/api/distributedlog-api",component:p("/docs/4.15.5/api/distributedlog-api","925"),exact:!0,sidebar:"docsSidebar"},{path:"/docs/4.15.5/api/ledger-adv-api",component:p("/docs/4.15.5/api/ledger-adv-api","0c7"),exact:!0,sidebar:"docsSidebar"},{path:"/docs/4.15.5/api/ledger-api",component:p("/docs/4.15.5/api/ledger-api","597"),exact:!0,sidebar:"docsSidebar"},{path:"/docs/4.15.5/api/overview",component:p("/docs/4.15.5/api/overview","1aa"),exact:!0,sidebar:"docsSidebar"},{path:"/docs/4.15.5/deployment/kubernetes",component:p("/docs/4.15.5/deployment/kubernetes","068"),exact:!0,sidebar:"docsSidebar"},{path:"/docs/4.15.5/deployment/manual",component:p("/docs/4.15.5/deployment/manual","35d"),exact:!0,sidebar:"docsSidebar"},{path:"/docs/4.15.5/development/codebase",component:p("/docs/4.15.5/development/codebase","76c"),exact:!0},{path:"/docs/4.15.5/development/protocol",component:p("/docs/4.15.5/development/protocol","a75"),exact:!0,sidebar:"docsSidebar"},{path:"/docs/4.15.5/getting-started/concepts",component:p("/docs/4.15.5/getting-started/concepts","45a"),exact:!0,sidebar:"docsSidebar"},{path:"/docs/4.15.5/getting-started/installation",component:p("/docs/4.15.5/getting-started/installation","62b"),exact:!0,sidebar:"docsSidebar"},{path:"/docs/4.15.5/getting-started/run-locally",component:p("/docs/4.15.5/getting-started/run-locally","119"),exact:!0,sidebar:"docsSidebar"},{path:"/docs/4.15.5/overview/",component:p("/docs/4.15.5/overview/","e0b"),exact:!0,sidebar:"docsSidebar"},{path:"/docs/4.15.5/reference/cli",component:p("/docs/4.15.5/reference/cli","7b3"),exact:!0,sidebar:"docsSidebar"},{path:"/docs/4.15.5/reference/config",component:p("/docs/4.15.5/reference/config","228"),exact:!0,sidebar:"docsSidebar"},{path:"/docs/4.15.5/security/overview",component:p("/docs/4.15.5/security/overview","bc6"),exact:!0,sidebar:"docsSidebar"},{path:"/docs/4.15.5/security/sasl",component:p("/docs/4.15.5/security/sasl","145"),exact:!0,sidebar:"docsSidebar"},{path:"/docs/4.15.5/security/tls",component:p("/docs/4.15.5/security/tls","819"),exact:!0,sidebar:"docsSidebar"},{path:"/docs/4.15.5/security/zookeeper",component:p("/docs/4.15.5/security/zookeeper","40e"),exact:!0,sidebar:"docsSidebar"}]},{path:"/docs/4.16.5",component:p("/docs/4.16.5","8c2"),routes:[{path:"/docs/4.16.5/admin/autorecovery",component:p("/docs/4.16.5/admin/autorecovery","935"),exact:!0,sidebar:"docsSidebar"},{path:"/docs/4.16.5/admin/bookies",component:p("/docs/4.16.5/admin/bookies","48e"),exact:!0,sidebar:"docsSidebar"},{path:"/docs/4.16.5/admin/decomission",component:p("/docs/4.16.5/admin/decomission","e96"),exact:!0,sidebar:"docsSidebar"},{path:"/docs/4.16.5/admin/geo-replication",component:p("/docs/4.16.5/admin/geo-replication","96d"),exact:!0},{path:"/docs/4.16.5/admin/http",component:p("/docs/4.16.5/admin/http","18d"),exact:!0,sidebar:"docsSidebar"},{path:"/docs/4.16.5/admin/metrics",component:p("/docs/4.16.5/admin/metrics","181"),exact:!0,sidebar:"docsSidebar"},{path:"/docs/4.16.5/admin/perf",component:p("/docs/4.16.5/admin/perf","8e8"),exact:!0},{path:"/docs/4.16.5/admin/placement",component:p("/docs/4.16.5/admin/placement","a06"),exact:!0},{path:"/docs/4.16.5/admin/upgrade",component:p("/docs/4.16.5/admin/upgrade","558"),exact:!0,sidebar:"docsSidebar"},{path:"/docs/4.16.5/api/distributedlog-api",component:p("/docs/4.16.5/api/distributedlog-api","2c3"),exact:!0,sidebar:"docsSidebar"},{path:"/docs/4.16.5/api/ledger-adv-api",component:p("/docs/4.16.5/api/ledger-adv-api","1cd"),exact:!0,sidebar:"docsSidebar"},{path:"/docs/4.16.5/api/ledger-api",component:p("/docs/4.16.5/api/ledger-api","02a"),exact:!0,sidebar:"docsSidebar"},{path:"/docs/4.16.5/api/overview",component:p("/docs/4.16.5/api/overview","1e1"),exact:!0,sidebar:"docsSidebar"},{path:"/docs/4.16.5/deployment/kubernetes",component:p("/docs/4.16.5/deployment/kubernetes","4d8"),exact:!0,sidebar:"docsSidebar"},{path:"/docs/4.16.5/deployment/manual",component:p("/docs/4.16.5/deployment/manual","8df"),exact:!0,sidebar:"docsSidebar"},{path:"/docs/4.16.5/development/codebase",component:p("/docs/4.16.5/development/codebase","4de"),exact:!0},{path:"/docs/4.16.5/development/protocol",component:p("/docs/4.16.5/development/protocol","804"),exact:!0,sidebar:"docsSidebar"},{path:"/docs/4.16.5/getting-started/concepts",component:p("/docs/4.16.5/getting-started/concepts","5a7"),exact:!0,sidebar:"docsSidebar"},{path:"/docs/4.16.5/getting-started/installation",component:p("/docs/4.16.5/getting-started/installation","d54"),exact:!0,sidebar:"docsSidebar"},{path:"/docs/4.16.5/getting-started/run-locally",component:p("/docs/4.16.5/getting-started/run-locally","b4f"),exact:!0,sidebar:"docsSidebar"},{path:"/docs/4.16.5/overview/",component:p("/docs/4.16.5/overview/","495"),exact:!0,sidebar:"docsSidebar"},{path:"/docs/4.16.5/reference/cli",component:p("/docs/4.16.5/reference/cli","e54"),exact:!0,sidebar:"docsSidebar"},{path:"/docs/4.16.5/reference/config",component:p("/docs/4.16.5/reference/config","eeb"),exact:!0,sidebar:"docsSidebar"},{path:"/docs/4.16.5/security/overview",component:p("/docs/4.16.5/security/overview","1af"),exact:!0,sidebar:"docsSidebar"},{path:"/docs/4.16.5/security/sasl",component:p("/docs/4.16.5/security/sasl","1f7"),exact:!0,sidebar:"docsSidebar"},{path:"/docs/4.16.5/security/tls",component:p("/docs/4.16.5/security/tls","476"),exact:!0,sidebar:"docsSidebar"},{path:"/docs/4.16.5/security/zookeeper",component:p("/docs/4.16.5/security/zookeeper","ce9"),exact:!0,sidebar:"docsSidebar"}]},{path:"/docs/4.5.1",component:p("/docs/4.5.1","a83"),routes:[{path:"/docs/4.5.1/admin/autorecovery",component:p("/docs/4.5.1/admin/autorecovery","f9f"),exact:!0,sidebar:"version-4.5.1/docsSidebar"},{path:"/docs/4.5.1/admin/bookies",component:p("/docs/4.5.1/admin/bookies","daa"),exact:!0,sidebar:"version-4.5.1/docsSidebar"},{path:"/docs/4.5.1/admin/geo-replication",component:p("/docs/4.5.1/admin/geo-replication","23b"),exact:!0},{path:"/docs/4.5.1/admin/metrics",component:p("/docs/4.5.1/admin/metrics","552"),exact:!0,sidebar:"version-4.5.1/docsSidebar"},{path:"/docs/4.5.1/admin/perf",component:p("/docs/4.5.1/admin/perf","705"),exact:!0},{path:"/docs/4.5.1/admin/placement",component:p("/docs/4.5.1/admin/placement","e73"),exact:!0},{path:"/docs/4.5.1/admin/upgrade",component:p("/docs/4.5.1/admin/upgrade","200"),exact:!0,sidebar:"version-4.5.1/docsSidebar"},{path:"/docs/4.5.1/api/distributedlog-api",component:p("/docs/4.5.1/api/distributedlog-api","1e9"),exact:!0,sidebar:"version-4.5.1/docsSidebar"},{path:"/docs/4.5.1/api/ledger-adv-api",component:p("/docs/4.5.1/api/ledger-adv-api","fee"),exact:!0,sidebar:"version-4.5.1/docsSidebar"},{path:"/docs/4.5.1/api/ledger-api",component:p("/docs/4.5.1/api/ledger-api","d9e"),exact:!0,sidebar:"version-4.5.1/docsSidebar"},{path:"/docs/4.5.1/api/overview",component:p("/docs/4.5.1/api/overview","c15"),exact:!0,sidebar:"version-4.5.1/docsSidebar"},{path:"/docs/4.5.1/deployment/kubernetes",component:p("/docs/4.5.1/deployment/kubernetes","bf3"),exact:!0,sidebar:"version-4.5.1/docsSidebar"},{path:"/docs/4.5.1/deployment/manual",component:p("/docs/4.5.1/deployment/manual","51c"),exact:!0,sidebar:"version-4.5.1/docsSidebar"},{path:"/docs/4.5.1/development/codebase",component:p("/docs/4.5.1/development/codebase","8ad"),exact:!0},{path:"/docs/4.5.1/development/protocol",component:p("/docs/4.5.1/development/protocol","982"),exact:!0,sidebar:"version-4.5.1/docsSidebar"},{path:"/docs/4.5.1/getting-started/concepts",component:p("/docs/4.5.1/getting-started/concepts","d33"),exact:!0,sidebar:"version-4.5.1/docsSidebar"},{path:"/docs/4.5.1/getting-started/installation",component:p("/docs/4.5.1/getting-started/installation","1e6"),exact:!0,sidebar:"version-4.5.1/docsSidebar"},{path:"/docs/4.5.1/getting-started/run-locally",component:p("/docs/4.5.1/getting-started/run-locally","b39"),exact:!0,sidebar:"version-4.5.1/docsSidebar"},{path:"/docs/4.5.1/overview/",component:p("/docs/4.5.1/overview/","c22"),exact:!0,sidebar:"version-4.5.1/docsSidebar"},{path:"/docs/4.5.1/reference/cli",component:p("/docs/4.5.1/reference/cli","46a"),exact:!0,sidebar:"version-4.5.1/docsSidebar"},{path:"/docs/4.5.1/reference/config",component:p("/docs/4.5.1/reference/config","b7e"),exact:!0,sidebar:"version-4.5.1/docsSidebar"},{path:"/docs/4.5.1/reference/metrics",component:p("/docs/4.5.1/reference/metrics","fad"),exact:!0},{path:"/docs/4.5.1/security/overview",component:p("/docs/4.5.1/security/overview","aa7"),exact:!0,sidebar:"version-4.5.1/docsSidebar"},{path:"/docs/4.5.1/security/sasl",component:p("/docs/4.5.1/security/sasl","fef"),exact:!0,sidebar:"version-4.5.1/docsSidebar"},{path:"/docs/4.5.1/security/tls",component:p("/docs/4.5.1/security/tls","e2b"),exact:!0,sidebar:"version-4.5.1/docsSidebar"},{path:"/docs/4.5.1/security/zookeeper",component:p("/docs/4.5.1/security/zookeeper","a5f"),exact:!0,sidebar:"version-4.5.1/docsSidebar"}]},{path:"/docs/4.6.2",component:p("/docs/4.6.2","9c8"),routes:[{path:"/docs/4.6.2/admin/autorecovery",component:p("/docs/4.6.2/admin/autorecovery","1c6"),exact:!0,sidebar:"version-4.6.2/docsSidebar"},{path:"/docs/4.6.2/admin/bookies",component:p("/docs/4.6.2/admin/bookies","a55"),exact:!0,sidebar:"version-4.6.2/docsSidebar"},{path:"/docs/4.6.2/admin/geo-replication",component:p("/docs/4.6.2/admin/geo-replication","f19"),exact:!0},{path:"/docs/4.6.2/admin/http",component:p("/docs/4.6.2/admin/http","ecb"),exact:!0,sidebar:"version-4.6.2/docsSidebar"},{path:"/docs/4.6.2/admin/metrics",component:p("/docs/4.6.2/admin/metrics","d4d"),exact:!0,sidebar:"version-4.6.2/docsSidebar"},{path:"/docs/4.6.2/admin/perf",component:p("/docs/4.6.2/admin/perf","7b2"),exact:!0},{path:"/docs/4.6.2/admin/placement",component:p("/docs/4.6.2/admin/placement","6e2"),exact:!0},{path:"/docs/4.6.2/admin/upgrade",component:p("/docs/4.6.2/admin/upgrade","fae"),exact:!0,sidebar:"version-4.6.2/docsSidebar"},{path:"/docs/4.6.2/api/distributedlog-api",component:p("/docs/4.6.2/api/distributedlog-api","df6"),exact:!0,sidebar:"version-4.6.2/docsSidebar"},{path:"/docs/4.6.2/api/ledger-adv-api",component:p("/docs/4.6.2/api/ledger-adv-api","9d0"),exact:!0,sidebar:"version-4.6.2/docsSidebar"},{path:"/docs/4.6.2/api/ledger-api",component:p("/docs/4.6.2/api/ledger-api","75c"),exact:!0,sidebar:"version-4.6.2/docsSidebar"},{path:"/docs/4.6.2/api/overview",component:p("/docs/4.6.2/api/overview","97a"),exact:!0,sidebar:"version-4.6.2/docsSidebar"},{path:"/docs/4.6.2/deployment/kubernetes",component:p("/docs/4.6.2/deployment/kubernetes","b9d"),exact:!0,sidebar:"version-4.6.2/docsSidebar"},{path:"/docs/4.6.2/deployment/manual",component:p("/docs/4.6.2/deployment/manual","552"),exact:!0,sidebar:"version-4.6.2/docsSidebar"},{path:"/docs/4.6.2/development/codebase",component:p("/docs/4.6.2/development/codebase","d3c"),exact:!0},{path:"/docs/4.6.2/development/protocol",component:p("/docs/4.6.2/development/protocol","999"),exact:!0,sidebar:"version-4.6.2/docsSidebar"},{path:"/docs/4.6.2/getting-started/concepts",component:p("/docs/4.6.2/getting-started/concepts","177"),exact:!0,sidebar:"version-4.6.2/docsSidebar"},{path:"/docs/4.6.2/getting-started/installation",component:p("/docs/4.6.2/getting-started/installation","c8f"),exact:!0,sidebar:"version-4.6.2/docsSidebar"},{path:"/docs/4.6.2/getting-started/run-locally",component:p("/docs/4.6.2/getting-started/run-locally","393"),exact:!0,sidebar:"version-4.6.2/docsSidebar"},{path:"/docs/4.6.2/overview/",component:p("/docs/4.6.2/overview/","31b"),exact:!0,sidebar:"version-4.6.2/docsSidebar"},{path:"/docs/4.6.2/reference/cli",component:p("/docs/4.6.2/reference/cli","942"),exact:!0,sidebar:"version-4.6.2/docsSidebar"},{path:"/docs/4.6.2/reference/config",component:p("/docs/4.6.2/reference/config","5e1"),exact:!0,sidebar:"version-4.6.2/docsSidebar"},{path:"/docs/4.6.2/reference/metrics",component:p("/docs/4.6.2/reference/metrics","3d0"),exact:!0},{path:"/docs/4.6.2/security/overview",component:p("/docs/4.6.2/security/overview","ecd"),exact:!0,sidebar:"version-4.6.2/docsSidebar"},{path:"/docs/4.6.2/security/sasl",component:p("/docs/4.6.2/security/sasl","586"),exact:!0,sidebar:"version-4.6.2/docsSidebar"},{path:"/docs/4.6.2/security/tls",component:p("/docs/4.6.2/security/tls","22c"),exact:!0,sidebar:"version-4.6.2/docsSidebar"},{path:"/docs/4.6.2/security/zookeeper",component:p("/docs/4.6.2/security/zookeeper","fef"),exact:!0,sidebar:"version-4.6.2/docsSidebar"}]},{path:"/docs/4.7.3",component:p("/docs/4.7.3","ab6"),routes:[{path:"/docs/4.7.3/admin/autorecovery",component:p("/docs/4.7.3/admin/autorecovery","b0d"),exact:!0,sidebar:"version-4.7.3/docsSidebar"},{path:"/docs/4.7.3/admin/bookies",component:p("/docs/4.7.3/admin/bookies","29e"),exact:!0,sidebar:"version-4.7.3/docsSidebar"},{path:"/docs/4.7.3/admin/geo-replication",component:p("/docs/4.7.3/admin/geo-replication","27b"),exact:!0},{path:"/docs/4.7.3/admin/http",component:p("/docs/4.7.3/admin/http","b3c"),exact:!0,sidebar:"version-4.7.3/docsSidebar"},{path:"/docs/4.7.3/admin/metrics",component:p("/docs/4.7.3/admin/metrics","dcf"),exact:!0,sidebar:"version-4.7.3/docsSidebar"},{path:"/docs/4.7.3/admin/perf",component:p("/docs/4.7.3/admin/perf","b7b"),exact:!0},{path:"/docs/4.7.3/admin/placement",component:p("/docs/4.7.3/admin/placement","2a0"),exact:!0},{path:"/docs/4.7.3/admin/upgrade",component:p("/docs/4.7.3/admin/upgrade","786"),exact:!0,sidebar:"version-4.7.3/docsSidebar"},{path:"/docs/4.7.3/api/distributedlog-api",component:p("/docs/4.7.3/api/distributedlog-api","c83"),exact:!0,sidebar:"version-4.7.3/docsSidebar"},{path:"/docs/4.7.3/api/ledger-adv-api",component:p("/docs/4.7.3/api/ledger-adv-api","bfb"),exact:!0,sidebar:"version-4.7.3/docsSidebar"},{path:"/docs/4.7.3/api/ledger-api",component:p("/docs/4.7.3/api/ledger-api","3d2"),exact:!0,sidebar:"version-4.7.3/docsSidebar"},{path:"/docs/4.7.3/api/overview",component:p("/docs/4.7.3/api/overview","745"),exact:!0,sidebar:"version-4.7.3/docsSidebar"},{path:"/docs/4.7.3/deployment/kubernetes",component:p("/docs/4.7.3/deployment/kubernetes","822"),exact:!0,sidebar:"version-4.7.3/docsSidebar"},{path:"/docs/4.7.3/deployment/manual",component:p("/docs/4.7.3/deployment/manual","037"),exact:!0,sidebar:"version-4.7.3/docsSidebar"},{path:"/docs/4.7.3/development/codebase",component:p("/docs/4.7.3/development/codebase","ded"),exact:!0},{path:"/docs/4.7.3/development/protocol",component:p("/docs/4.7.3/development/protocol","003"),exact:!0,sidebar:"version-4.7.3/docsSidebar"},{path:"/docs/4.7.3/getting-started/concepts",component:p("/docs/4.7.3/getting-started/concepts","613"),exact:!0,sidebar:"version-4.7.3/docsSidebar"},{path:"/docs/4.7.3/getting-started/installation",component:p("/docs/4.7.3/getting-started/installation","75e"),exact:!0,sidebar:"version-4.7.3/docsSidebar"},{path:"/docs/4.7.3/getting-started/run-locally",component:p("/docs/4.7.3/getting-started/run-locally","176"),exact:!0,sidebar:"version-4.7.3/docsSidebar"},{path:"/docs/4.7.3/overview/",component:p("/docs/4.7.3/overview/","d3c"),exact:!0,sidebar:"version-4.7.3/docsSidebar"},{path:"/docs/4.7.3/reference/cli",component:p("/docs/4.7.3/reference/cli","d3c"),exact:!0,sidebar:"version-4.7.3/docsSidebar"},{path:"/docs/4.7.3/reference/config",component:p("/docs/4.7.3/reference/config","dfc"),exact:!0,sidebar:"version-4.7.3/docsSidebar"},{path:"/docs/4.7.3/reference/metrics",component:p("/docs/4.7.3/reference/metrics","acb"),exact:!0},{path:"/docs/4.7.3/security/overview",component:p("/docs/4.7.3/security/overview","bc8"),exact:!0,sidebar:"version-4.7.3/docsSidebar"},{path:"/docs/4.7.3/security/sasl",component:p("/docs/4.7.3/security/sasl","f67"),exact:!0,sidebar:"version-4.7.3/docsSidebar"},{path:"/docs/4.7.3/security/tls",component:p("/docs/4.7.3/security/tls","118"),exact:!0,sidebar:"version-4.7.3/docsSidebar"},{path:"/docs/4.7.3/security/zookeeper",component:p("/docs/4.7.3/security/zookeeper","476"),exact:!0,sidebar:"version-4.7.3/docsSidebar"}]},{path:"/docs/4.8.2",component:p("/docs/4.8.2","795"),routes:[{path:"/docs/4.8.2/admin/autorecovery",component:p("/docs/4.8.2/admin/autorecovery","9e2"),exact:!0,sidebar:"version-4.8.2/docsSidebar"},{path:"/docs/4.8.2/admin/bookies",component:p("/docs/4.8.2/admin/bookies","6e8"),exact:!0,sidebar:"version-4.8.2/docsSidebar"},{path:"/docs/4.8.2/admin/geo-replication",component:p("/docs/4.8.2/admin/geo-replication","383"),exact:!0},{path:"/docs/4.8.2/admin/http",component:p("/docs/4.8.2/admin/http","b5c"),exact:!0,sidebar:"version-4.8.2/docsSidebar"},{path:"/docs/4.8.2/admin/metrics",component:p("/docs/4.8.2/admin/metrics","5e6"),exact:!0,sidebar:"version-4.8.2/docsSidebar"},{path:"/docs/4.8.2/admin/perf",component:p("/docs/4.8.2/admin/perf","bb1"),exact:!0},{path:"/docs/4.8.2/admin/placement",component:p("/docs/4.8.2/admin/placement","256"),exact:!0},{path:"/docs/4.8.2/admin/upgrade",component:p("/docs/4.8.2/admin/upgrade","958"),exact:!0,sidebar:"version-4.8.2/docsSidebar"},{path:"/docs/4.8.2/api/distributedlog-api",component:p("/docs/4.8.2/api/distributedlog-api","4a7"),exact:!0,sidebar:"version-4.8.2/docsSidebar"},{path:"/docs/4.8.2/api/ledger-adv-api",component:p("/docs/4.8.2/api/ledger-adv-api","4e5"),exact:!0,sidebar:"version-4.8.2/docsSidebar"},{path:"/docs/4.8.2/api/ledger-api",component:p("/docs/4.8.2/api/ledger-api","0e6"),exact:!0,sidebar:"version-4.8.2/docsSidebar"},{path:"/docs/4.8.2/api/overview",component:p("/docs/4.8.2/api/overview","fd5"),exact:!0,sidebar:"version-4.8.2/docsSidebar"},{path:"/docs/4.8.2/deployment/kubernetes",component:p("/docs/4.8.2/deployment/kubernetes","ee8"),exact:!0,sidebar:"version-4.8.2/docsSidebar"},{path:"/docs/4.8.2/deployment/manual",component:p("/docs/4.8.2/deployment/manual","d27"),exact:!0,sidebar:"version-4.8.2/docsSidebar"},{path:"/docs/4.8.2/development/codebase",component:p("/docs/4.8.2/development/codebase","acd"),exact:!0},{path:"/docs/4.8.2/development/protocol",component:p("/docs/4.8.2/development/protocol","a69"),exact:!0,sidebar:"version-4.8.2/docsSidebar"},{path:"/docs/4.8.2/getting-started/concepts",component:p("/docs/4.8.2/getting-started/concepts","8f6"),exact:!0,sidebar:"version-4.8.2/docsSidebar"},{path:"/docs/4.8.2/getting-started/installation",component:p("/docs/4.8.2/getting-started/installation","531"),exact:!0,sidebar:"version-4.8.2/docsSidebar"},{path:"/docs/4.8.2/getting-started/run-locally",component:p("/docs/4.8.2/getting-started/run-locally","1bc"),exact:!0,sidebar:"version-4.8.2/docsSidebar"},{path:"/docs/4.8.2/overview/",component:p("/docs/4.8.2/overview/","671"),exact:!0,sidebar:"version-4.8.2/docsSidebar"},{path:"/docs/4.8.2/reference/cli",component:p("/docs/4.8.2/reference/cli","0fc"),exact:!0,sidebar:"version-4.8.2/docsSidebar"},{path:"/docs/4.8.2/reference/config",component:p("/docs/4.8.2/reference/config","8fb"),exact:!0,sidebar:"version-4.8.2/docsSidebar"},{path:"/docs/4.8.2/reference/metrics",component:p("/docs/4.8.2/reference/metrics","bb3"),exact:!0},{path:"/docs/4.8.2/security/overview",component:p("/docs/4.8.2/security/overview","2f9"),exact:!0,sidebar:"version-4.8.2/docsSidebar"},{path:"/docs/4.8.2/security/sasl",component:p("/docs/4.8.2/security/sasl","e03"),exact:!0,sidebar:"version-4.8.2/docsSidebar"},{path:"/docs/4.8.2/security/tls",component:p("/docs/4.8.2/security/tls","b5f"),exact:!0,sidebar:"version-4.8.2/docsSidebar"},{path:"/docs/4.8.2/security/zookeeper",component:p("/docs/4.8.2/security/zookeeper","5e7"),exact:!0,sidebar:"version-4.8.2/docsSidebar"}]},{path:"/docs/4.9.2",component:p("/docs/4.9.2","78f"),routes:[{path:"/docs/4.9.2/admin/autorecovery",component:p("/docs/4.9.2/admin/autorecovery","180"),exact:!0,sidebar:"version-4.9.2/docsSidebar"},{path:"/docs/4.9.2/admin/bookies",component:p("/docs/4.9.2/admin/bookies","d85"),exact:!0,sidebar:"version-4.9.2/docsSidebar"},{path:"/docs/4.9.2/admin/geo-replication",component:p("/docs/4.9.2/admin/geo-replication","08a"),exact:!0},{path:"/docs/4.9.2/admin/http",component:p("/docs/4.9.2/admin/http","363"),exact:!0,sidebar:"version-4.9.2/docsSidebar"},{path:"/docs/4.9.2/admin/metrics",component:p("/docs/4.9.2/admin/metrics","852"),exact:!0,sidebar:"version-4.9.2/docsSidebar"},{path:"/docs/4.9.2/admin/perf",component:p("/docs/4.9.2/admin/perf","10c"),exact:!0},{path:"/docs/4.9.2/admin/placement",component:p("/docs/4.9.2/admin/placement","8d5"),exact:!0},{path:"/docs/4.9.2/admin/upgrade",component:p("/docs/4.9.2/admin/upgrade","279"),exact:!0,sidebar:"version-4.9.2/docsSidebar"},{path:"/docs/4.9.2/api/distributedlog-api",component:p("/docs/4.9.2/api/distributedlog-api","d27"),exact:!0,sidebar:"version-4.9.2/docsSidebar"},{path:"/docs/4.9.2/api/ledger-adv-api",component:p("/docs/4.9.2/api/ledger-adv-api","0cf"),exact:!0,sidebar:"version-4.9.2/docsSidebar"},{path:"/docs/4.9.2/api/ledger-api",component:p("/docs/4.9.2/api/ledger-api","d7f"),exact:!0,sidebar:"version-4.9.2/docsSidebar"},{path:"/docs/4.9.2/api/overview",component:p("/docs/4.9.2/api/overview","634"),exact:!0,sidebar:"version-4.9.2/docsSidebar"},{path:"/docs/4.9.2/deployment/kubernetes",component:p("/docs/4.9.2/deployment/kubernetes","b21"),exact:!0,sidebar:"version-4.9.2/docsSidebar"},{path:"/docs/4.9.2/deployment/manual",component:p("/docs/4.9.2/deployment/manual","e27"),exact:!0,sidebar:"version-4.9.2/docsSidebar"},{path:"/docs/4.9.2/development/codebase",component:p("/docs/4.9.2/development/codebase","e4e"),exact:!0},{path:"/docs/4.9.2/development/protocol",component:p("/docs/4.9.2/development/protocol","021"),exact:!0,sidebar:"version-4.9.2/docsSidebar"},{path:"/docs/4.9.2/getting-started/concepts",component:p("/docs/4.9.2/getting-started/concepts","4df"),exact:!0,sidebar:"version-4.9.2/docsSidebar"},{path:"/docs/4.9.2/getting-started/installation",component:p("/docs/4.9.2/getting-started/installation","2bd"),exact:!0,sidebar:"version-4.9.2/docsSidebar"},{path:"/docs/4.9.2/getting-started/run-locally",component:p("/docs/4.9.2/getting-started/run-locally","7e7"),exact:!0,sidebar:"version-4.9.2/docsSidebar"},{path:"/docs/4.9.2/overview/",component:p("/docs/4.9.2/overview/","25b"),exact:!0,sidebar:"version-4.9.2/docsSidebar"},{path:"/docs/4.9.2/reference/cli",component:p("/docs/4.9.2/reference/cli","3f7"),exact:!0,sidebar:"version-4.9.2/docsSidebar"},{path:"/docs/4.9.2/reference/config",component:p("/docs/4.9.2/reference/config","fd7"),exact:!0,sidebar:"version-4.9.2/docsSidebar"},{path:"/docs/4.9.2/reference/metrics",component:p("/docs/4.9.2/reference/metrics","b05"),exact:!0},{path:"/docs/4.9.2/security/overview",component:p("/docs/4.9.2/security/overview","03c"),exact:!0,sidebar:"version-4.9.2/docsSidebar"},{path:"/docs/4.9.2/security/sasl",component:p("/docs/4.9.2/security/sasl","704"),exact:!0,sidebar:"version-4.9.2/docsSidebar"},{path:"/docs/4.9.2/security/tls",component:p("/docs/4.9.2/security/tls","a88"),exact:!0,sidebar:"version-4.9.2/docsSidebar"},{path:"/docs/4.9.2/security/zookeeper",component:p("/docs/4.9.2/security/zookeeper","868"),exact:!0,sidebar:"version-4.9.2/docsSidebar"}]},{path:"/docs/next",component:p("/docs/next","497"),routes:[{path:"/docs/next/admin/autorecovery",component:p("/docs/next/admin/autorecovery","1fa"),exact:!0,sidebar:"docsSidebar"},{path:"/docs/next/admin/bookies",component:p("/docs/next/admin/bookies","b7c"),exact:!0,sidebar:"docsSidebar"},{path:"/docs/next/admin/decomission",component:p("/docs/next/admin/decomission","9b8"),exact:!0,sidebar:"docsSidebar"},{path:"/docs/next/admin/geo-replication",component:p("/docs/next/admin/geo-replication","0f1"),exact:!0},{path:"/docs/next/admin/http",component:p("/docs/next/admin/http","b7d"),exact:!0,sidebar:"docsSidebar"},{path:"/docs/next/admin/metrics",component:p("/docs/next/admin/metrics","f98"),exact:!0,sidebar:"docsSidebar"},{path:"/docs/next/admin/perf",component:p("/docs/next/admin/perf","717"),exact:!0},{path:"/docs/next/admin/placement",component:p("/docs/next/admin/placement","748"),exact:!0},{path:"/docs/next/admin/upgrade",component:p("/docs/next/admin/upgrade","e1c"),exact:!0,sidebar:"docsSidebar"},{path:"/docs/next/api/distributedlog-api",component:p("/docs/next/api/distributedlog-api","de6"),exact:!0,sidebar:"docsSidebar"},{path:"/docs/next/api/ledger-adv-api",component:p("/docs/next/api/ledger-adv-api","044"),exact:!0,sidebar:"docsSidebar"},{path:"/docs/next/api/ledger-api",component:p("/docs/next/api/ledger-api","0b1"),exact:!0,sidebar:"docsSidebar"},{path:"/docs/next/api/overview",component:p("/docs/next/api/overview","e7d"),exact:!0,sidebar:"docsSidebar"},{path:"/docs/next/deployment/kubernetes",component:p("/docs/next/deployment/kubernetes","b39"),exact:!0,sidebar:"docsSidebar"},{path:"/docs/next/deployment/manual",component:p("/docs/next/deployment/manual","683"),exact:!0,sidebar:"docsSidebar"},{path:"/docs/next/development/codebase",component:p("/docs/next/development/codebase","647"),exact:!0},{path:"/docs/next/development/protocol",component:p("/docs/next/development/protocol","aba"),exact:!0,sidebar:"docsSidebar"},{path:"/docs/next/getting-started/concepts",component:p("/docs/next/getting-started/concepts","b19"),exact:!0,sidebar:"docsSidebar"},{path:"/docs/next/getting-started/installation",component:p("/docs/next/getting-started/installation","109"),exact:!0,sidebar:"docsSidebar"},{path:"/docs/next/getting-started/run-locally",component:p("/docs/next/getting-started/run-locally","6bb"),exact:!0,sidebar:"docsSidebar"},{path:"/docs/next/overview/",component:p("/docs/next/overview/","0ea"),exact:!0,sidebar:"docsSidebar"},{path:"/docs/next/reference/cli",component:p("/docs/next/reference/cli","431"),exact:!0,sidebar:"docsSidebar"},{path:"/docs/next/reference/config",component:p("/docs/next/reference/config","d41"),exact:!0,sidebar:"docsSidebar"},{path:"/docs/next/security/overview",component:p("/docs/next/security/overview","52d"),exact:!0,sidebar:"docsSidebar"},{path:"/docs/next/security/sasl",component:p("/docs/next/security/sasl","b25"),exact:!0,sidebar:"docsSidebar"},{path:"/docs/next/security/tls",component:p("/docs/next/security/tls","5e9"),exact:!0,sidebar:"docsSidebar"},{path:"/docs/next/security/zookeeper",component:p("/docs/next/security/zookeeper","14c"),exact:!0,sidebar:"docsSidebar"}]},{path:"/docs",component:p("/docs","a26"),routes:[{path:"/docs/admin/autorecovery",component:p("/docs/admin/autorecovery","658"),exact:!0,sidebar:"docsSidebar"},{path:"/docs/admin/bookies",component:p("/docs/admin/bookies","f84"),exact:!0,sidebar:"docsSidebar"},{path:"/docs/admin/decomission",component:p("/docs/admin/decomission","687"),exact:!0,sidebar:"docsSidebar"},{path:"/docs/admin/geo-replication",component:p("/docs/admin/geo-replication","a4c"),exact:!0},{path:"/docs/admin/http",component:p("/docs/admin/http","8df"),exact:!0,sidebar:"docsSidebar"},{path:"/docs/admin/metrics",component:p("/docs/admin/metrics","fff"),exact:!0,sidebar:"docsSidebar"},{path:"/docs/admin/perf",component:p("/docs/admin/perf","b56"),exact:!0},{path:"/docs/admin/placement",component:p("/docs/admin/placement","f07"),exact:!0},{path:"/docs/admin/upgrade",component:p("/docs/admin/upgrade","931"),exact:!0,sidebar:"docsSidebar"},{path:"/docs/api/distributedlog-api",component:p("/docs/api/distributedlog-api","8e7"),exact:!0,sidebar:"docsSidebar"},{path:"/docs/api/ledger-adv-api",component:p("/docs/api/ledger-adv-api","f98"),exact:!0,sidebar:"docsSidebar"},{path:"/docs/api/ledger-api",component:p("/docs/api/ledger-api","b65"),exact:!0,sidebar:"docsSidebar"},{path:"/docs/api/overview",component:p("/docs/api/overview","b7b"),exact:!0,sidebar:"docsSidebar"},{path:"/docs/deployment/kubernetes",component:p("/docs/deployment/kubernetes","96e"),exact:!0,sidebar:"docsSidebar"},{path:"/docs/deployment/manual",component:p("/docs/deployment/manual","bb0"),exact:!0,sidebar:"docsSidebar"},{path:"/docs/development/codebase",component:p("/docs/development/codebase","cee"),exact:!0},{path:"/docs/development/protocol",component:p("/docs/development/protocol","cc7"),exact:!0,sidebar:"docsSidebar"},{path:"/docs/getting-started/concepts",component:p("/docs/getting-started/concepts","dde"),exact:!0,sidebar:"docsSidebar"},{path:"/docs/getting-started/installation",component:p("/docs/getting-started/installation","00b"),exact:!0,sidebar:"docsSidebar"},{path:"/docs/getting-started/run-locally",component:p("/docs/getting-started/run-locally","4e4"),exact:!0,sidebar:"docsSidebar"},{path:"/docs/overview/",component:p("/docs/overview/","586"),exact:!0,sidebar:"docsSidebar"},{path:"/docs/reference/cli",component:p("/docs/reference/cli","0c5"),exact:!0,sidebar:"docsSidebar"},{path:"/docs/reference/config",component:p("/docs/reference/config","716"),exact:!0,sidebar:"docsSidebar"},{path:"/docs/security/overview",component:p("/docs/security/overview","657"),exact:!0,sidebar:"docsSidebar"},{path:"/docs/security/sasl",component:p("/docs/security/sasl","0d6"),exact:!0,sidebar:"docsSidebar"},{path:"/docs/security/tls",component:p("/docs/security/tls","dda"),exact:!0,sidebar:"docsSidebar"},{path:"/docs/security/zookeeper",component:p("/docs/security/zookeeper","6a8"),exact:!0,sidebar:"docsSidebar"}]},{path:"/",component:p("/","577"),exact:!0},{path:"*",component:p("*")}]},98934:function(e,t,n){"use strict";n.d(t,{_:function(){return r},t:function(){return i}});var o=n(67294);const r=o.createContext(!1);function i(e){let{children:t}=e;const[n,i]=(0,o.useState)(!1);return(0,o.useEffect)((()=>{i(!0)}),[]),o.createElement(r.Provider,{value:n},t)}},49383:function(e,t,n){"use strict";var o=n(67294),r=n(73935),i=n(73727),a=n(70405),s=n(10412),c=[n(32497),n(3310),n(18320),n(98270)],d=n(723),l=n(16550),u=n(18790);function p(e){let{children:t}=e;return o.createElement(o.Fragment,null,t)}var m=n(83117),f=n(35742),b=n(52263),h=n(44996),v=n(86668),g=n(1944),y=n(94711),w=n(19727),_=n(43320),k=n(90197);function S(){const{i18n:{defaultLocale:e,localeConfigs:t}}=(0,b.Z)(),n=(0,y.l)();return o.createElement(f.Z,null,Object.entries(t).map((e=>{let[t,{htmlLang:r}]=e;return o.createElement("link",{key:t,rel:"alternate",href:n.createUrl({locale:t,fullyQualified:!0}),hrefLang:r})})),o.createElement("link",{rel:"alternate",href:n.createUrl({locale:e,fullyQualified:!0}),hrefLang:"x-default"}))}function x(e){let{permalink:t}=e;const{siteConfig:{url:n}}=(0,b.Z)(),r=function(){const{siteConfig:{url:e}}=(0,b.Z)(),{pathname:t}=(0,l.TH)();return e+(0,h.Z)(t)}(),i=t?`${n}${t}`:r;return o.createElement(f.Z,null,o.createElement("meta",{property:"og:url",content:i}),o.createElement("link",{rel:"canonical",href:i}))}function E(){const{i18n:{currentLocale:e}}=(0,b.Z)(),{metadata:t,image:n}=(0,v.L)();return o.createElement(o.Fragment,null,o.createElement(f.Z,null,o.createElement("meta",{name:"twitter:card",content:"summary_large_image"}),o.createElement("body",{className:w.h})),n&&o.createElement(g.d,{image:n}),o.createElement(x,null),o.createElement(S,null),o.createElement(k.Z,{tag:_.HX,locale:e}),o.createElement(f.Z,null,t.map(((e,t)=>o.createElement("meta",(0,m.Z)({key:t},e))))))}const C=new Map;function T(e){if(C.has(e.pathname))return{...e,pathname:C.get(e.pathname)};if((0,u.f)(d.Z,e.pathname).some((e=>{let{route:t}=e;return!0===t.exact})))return C.set(e.pathname,e.pathname),e;const t=e.pathname.trim().replace(/(?:\/index)?\.html$/,"")||"/";return C.set(e.pathname,t),{...e,pathname:t}}var P=n(98934),A=n(58940);function L(e){for(var t=arguments.length,n=new Array(t>1?t-1:0),o=1;o<t;o++)n[o-1]=arguments[o];const r=c.map((t=>{const o=t.default?.[e]??t[e];return o?.(...n)}));return()=>r.forEach((e=>e?.()))}var R=function(e){let{children:t,location:n,previousLocation:r}=e;return(0,o.useLayoutEffect)((()=>{r!==n&&(!function(e){let{location:t,previousLocation:n}=e;if(!n)return;const o=t.pathname===n.pathname,r=t.hash===n.hash,i=t.search===n.search;if(o&&r&&!i)return;const{hash:a}=t;if(a){const e=decodeURIComponent(a.substring(1)),t=document.getElementById(e);t?.scrollIntoView()}else window.scrollTo(0,0)}({location:n,previousLocation:r}),L("onRouteDidUpdate",{previousLocation:r,location:n}))}),[r,n]),t};function N(e){const t=Array.from(new Set([e,decodeURI(e)])).map((e=>(0,u.f)(d.Z,e))).flat();return Promise.all(t.map((e=>e.route.component.preload?.())))}class O extends o.Component{previousLocation;routeUpdateCleanupCb;constructor(e){super(e),this.previousLocation=null,this.routeUpdateCleanupCb=s.Z.canUseDOM?L("onRouteUpdate",{previousLocation:null,location:this.props.location}):()=>{},this.state={nextRouteHasLoaded:!0}}shouldComponentUpdate(e,t){if(e.location===this.props.location)return t.nextRouteHasLoaded;const n=e.location;return this.previousLocation=this.props.location,this.setState({nextRouteHasLoaded:!1}),this.routeUpdateCleanupCb=L("onRouteUpdate",{previousLocation:this.previousLocation,location:n}),N(n.pathname).then((()=>{this.routeUpdateCleanupCb(),this.setState({nextRouteHasLoaded:!0})})).catch((e=>{console.warn(e),window.location.reload()})),!1}render(){const{children:e,location:t}=this.props;return o.createElement(R,{previousLocation:this.previousLocation,location:t},o.createElement(l.AW,{location:t,render:()=>e}))}}var I=O;const D="docusaurus-base-url-issue-banner-container",M="docusaurus-base-url-issue-banner",B="docusaurus-base-url-issue-banner-suggestion-container",F="__DOCUSAURUS_INSERT_BASEURL_BANNER";function z(e){return`\nwindow['${F}'] = true;\n\ndocument.addEventListener('DOMContentLoaded', maybeInsertBanner);\n\nfunction maybeInsertBanner() {\n  var shouldInsert = window['${F}'];\n  shouldInsert && insertBanner();\n}\n\nfunction insertBanner() {\n  var bannerContainer = document.getElementById('${D}');\n  if (!bannerContainer) {\n    return;\n  }\n  var bannerHtml = ${JSON.stringify(function(e){return`\n<div id="${M}" style="border: thick solid red; background-color: rgb(255, 230, 179); margin: 20px; padding: 20px; font-size: 20px;">\n   <p style="font-weight: bold; font-size: 30px;">Your Docusaurus site did not load properly.</p>\n   <p>A very common reason is a wrong site <a href="https://docusaurus.io/docs/docusaurus.config.js/#baseUrl" style="font-weight: bold;">baseUrl configuration</a>.</p>\n   <p>Current configured baseUrl = <span style="font-weight: bold; color: red;">${e}</span> ${"/"===e?" (default value)":""}</p>\n   <p>We suggest trying baseUrl = <span id="${B}" style="font-weight: bold; color: green;"></span></p>\n</div>\n`}(e)).replace(/</g,"\\<")};\n  bannerContainer.innerHTML = bannerHtml;\n  var suggestionContainer = document.getElementById('${B}');\n  var actualHomePagePath = window.location.pathname;\n  var suggestedBaseUrl = actualHomePagePath.substr(-1) === '/'\n        ? actualHomePagePath\n        : actualHomePagePath + '/';\n  suggestionContainer.innerHTML = suggestedBaseUrl;\n}\n`}function j(){const{siteConfig:{baseUrl:e}}=(0,b.Z)();return(0,o.useLayoutEffect)((()=>{window[F]=!1}),[]),o.createElement(o.Fragment,null,!s.Z.canUseDOM&&o.createElement(f.Z,null,o.createElement("script",null,z(e))),o.createElement("div",{id:D}))}function U(){const{siteConfig:{baseUrl:e,baseUrlIssueBanner:t}}=(0,b.Z)(),{pathname:n}=(0,l.TH)();return t&&n===e?o.createElement(j,null):null}function $(){const{siteConfig:{favicon:e,title:t,noIndex:n},i18n:{currentLocale:r,localeConfigs:i}}=(0,b.Z)(),a=(0,h.Z)(e),{htmlLang:s,direction:c}=i[r];return o.createElement(f.Z,null,o.createElement("html",{lang:s,dir:c}),o.createElement("title",null,t),o.createElement("meta",{property:"og:title",content:t}),o.createElement("meta",{name:"viewport",content:"width=device-width, initial-scale=1.0"}),n&&o.createElement("meta",{name:"robots",content:"noindex, nofollow"}),e&&o.createElement("link",{rel:"icon",href:a}))}var q=n(44763);function H(){const e=(0,u.H)(d.Z),t=(0,l.TH)();return o.createElement(q.Z,null,o.createElement(A.M,null,o.createElement(P.t,null,o.createElement(p,null,o.createElement($,null),o.createElement(E,null),o.createElement(U,null),o.createElement(I,{location:T(t)},e)))))}var G=n(16887);const Z=function(e){try{return document.createElement("link").relList.supports(e)}catch{return!1}}("prefetch")?function(e){return new Promise(((t,n)=>{if("undefined"==typeof document)return void n();const o=document.createElement("link");o.setAttribute("rel","prefetch"),o.setAttribute("href",e),o.onload=()=>t(),o.onerror=()=>n();const r=document.getElementsByTagName("head")[0]??document.getElementsByName("script")[0]?.parentNode;r?.appendChild(o)}))}:function(e){return new Promise(((t,n)=>{const o=new XMLHttpRequest;o.open("GET",e,!0),o.withCredentials=!0,o.onload=()=>{200===o.status?t():n()},o.send(null)}))};var V=n(99670);const W=new Set,K=new Set,Y=()=>navigator.connection?.effectiveType.includes("2g")||navigator.connection?.saveData,Q={prefetch(e){if(!(e=>!Y()&&!K.has(e)&&!W.has(e))(e))return!1;W.add(e);const t=(0,u.f)(d.Z,e).flatMap((e=>{return t=e.route.path,Object.entries(G).filter((e=>{let[n]=e;return n.replace(/-[^-]+$/,"")===t})).flatMap((e=>{let[,t]=e;return Object.values((0,V.Z)(t))}));var t}));return Promise.all(t.map((e=>{const t=n.gca(e);return t&&!t.includes("undefined")?Z(t).catch((()=>{})):Promise.resolve()})))},preload(e){return!!(e=>!Y()&&!K.has(e))(e)&&(K.add(e),N(e))}};var X=Object.freeze(Q);if(s.Z.canUseDOM){window.docusaurus=X;const e=r.hydrate;N(window.location.pathname).then((()=>{e(o.createElement(a.B6,null,o.createElement(i.VK,null,o.createElement(H,null))),document.getElementById("__docusaurus"))}))}},58940:function(e,t,n){"use strict";n.d(t,{_:function(){return l},M:function(){return u}});var o=n(67294),r=n(36809),i=JSON.parse('{"docusaurus-plugin-content-docs":{"default":{"path":"/docs","versions":[{"name":"current","label":"Next","isLast":false,"path":"/docs/next","mainDocId":"overview/overview","docs":[{"id":"admin/autorecovery","path":"/docs/next/admin/autorecovery","sidebar":"docsSidebar"},{"id":"admin/bookies","path":"/docs/next/admin/bookies","sidebar":"docsSidebar"},{"id":"admin/decomission","path":"/docs/next/admin/decomission","sidebar":"docsSidebar"},{"id":"admin/geo-replication","path":"/docs/next/admin/geo-replication"},{"id":"admin/http","path":"/docs/next/admin/http","sidebar":"docsSidebar"},{"id":"admin/metrics","path":"/docs/next/admin/metrics","sidebar":"docsSidebar"},{"id":"admin/perf","path":"/docs/next/admin/perf"},{"id":"admin/placement","path":"/docs/next/admin/placement"},{"id":"admin/upgrade","path":"/docs/next/admin/upgrade","sidebar":"docsSidebar"},{"id":"api/distributedlog-api","path":"/docs/next/api/distributedlog-api","sidebar":"docsSidebar"},{"id":"api/ledger-adv-api","path":"/docs/next/api/ledger-adv-api","sidebar":"docsSidebar"},{"id":"api/ledger-api","path":"/docs/next/api/ledger-api","sidebar":"docsSidebar"},{"id":"api/overview","path":"/docs/next/api/overview","sidebar":"docsSidebar"},{"id":"deployment/kubernetes","path":"/docs/next/deployment/kubernetes","sidebar":"docsSidebar"},{"id":"deployment/manual","path":"/docs/next/deployment/manual","sidebar":"docsSidebar"},{"id":"development/codebase","path":"/docs/next/development/codebase"},{"id":"development/protocol","path":"/docs/next/development/protocol","sidebar":"docsSidebar"},{"id":"getting-started/concepts","path":"/docs/next/getting-started/concepts","sidebar":"docsSidebar"},{"id":"getting-started/installation","path":"/docs/next/getting-started/installation","sidebar":"docsSidebar"},{"id":"getting-started/run-locally","path":"/docs/next/getting-started/run-locally","sidebar":"docsSidebar"},{"id":"overview/overview","path":"/docs/next/overview/","sidebar":"docsSidebar"},{"id":"reference/cli","path":"/docs/next/reference/cli","sidebar":"docsSidebar"},{"id":"reference/config","path":"/docs/next/reference/config","sidebar":"docsSidebar"},{"id":"security/overview","path":"/docs/next/security/overview","sidebar":"docsSidebar"},{"id":"security/sasl","path":"/docs/next/security/sasl","sidebar":"docsSidebar"},{"id":"security/tls","path":"/docs/next/security/tls","sidebar":"docsSidebar"},{"id":"security/zookeeper","path":"/docs/next/security/zookeeper","sidebar":"docsSidebar"}],"draftIds":[],"sidebars":{"docsSidebar":{"link":{"path":"/docs/next/overview/","label":"Overview"}}}},{"name":"4.17.0","label":"4.17.0","isLast":true,"path":"/docs","mainDocId":"overview/overview","docs":[{"id":"admin/autorecovery","path":"/docs/admin/autorecovery","sidebar":"docsSidebar"},{"id":"admin/bookies","path":"/docs/admin/bookies","sidebar":"docsSidebar"},{"id":"admin/decomission","path":"/docs/admin/decomission","sidebar":"docsSidebar"},{"id":"admin/geo-replication","path":"/docs/admin/geo-replication"},{"id":"admin/http","path":"/docs/admin/http","sidebar":"docsSidebar"},{"id":"admin/metrics","path":"/docs/admin/metrics","sidebar":"docsSidebar"},{"id":"admin/perf","path":"/docs/admin/perf"},{"id":"admin/placement","path":"/docs/admin/placement"},{"id":"admin/upgrade","path":"/docs/admin/upgrade","sidebar":"docsSidebar"},{"id":"api/distributedlog-api","path":"/docs/api/distributedlog-api","sidebar":"docsSidebar"},{"id":"api/ledger-adv-api","path":"/docs/api/ledger-adv-api","sidebar":"docsSidebar"},{"id":"api/ledger-api","path":"/docs/api/ledger-api","sidebar":"docsSidebar"},{"id":"api/overview","path":"/docs/api/overview","sidebar":"docsSidebar"},{"id":"deployment/kubernetes","path":"/docs/deployment/kubernetes","sidebar":"docsSidebar"},{"id":"deployment/manual","path":"/docs/deployment/manual","sidebar":"docsSidebar"},{"id":"development/codebase","path":"/docs/development/codebase"},{"id":"development/protocol","path":"/docs/development/protocol","sidebar":"docsSidebar"},{"id":"getting-started/concepts","path":"/docs/getting-started/concepts","sidebar":"docsSidebar"},{"id":"getting-started/installation","path":"/docs/getting-started/installation","sidebar":"docsSidebar"},{"id":"getting-started/run-locally","path":"/docs/getting-started/run-locally","sidebar":"docsSidebar"},{"id":"overview/overview","path":"/docs/overview/","sidebar":"docsSidebar"},{"id":"reference/cli","path":"/docs/reference/cli","sidebar":"docsSidebar"},{"id":"reference/config","path":"/docs/reference/config","sidebar":"docsSidebar"},{"id":"security/overview","path":"/docs/security/overview","sidebar":"docsSidebar"},{"id":"security/sasl","path":"/docs/security/sasl","sidebar":"docsSidebar"},{"id":"security/tls","path":"/docs/security/tls","sidebar":"docsSidebar"},{"id":"security/zookeeper","path":"/docs/security/zookeeper","sidebar":"docsSidebar"}],"draftIds":[],"sidebars":{"docsSidebar":{"link":{"path":"/docs/overview/","label":"Overview"}}}},{"name":"4.16.5","label":"4.16.5","isLast":false,"path":"/docs/4.16.5","mainDocId":"overview/overview","docs":[{"id":"admin/autorecovery","path":"/docs/4.16.5/admin/autorecovery","sidebar":"docsSidebar"},{"id":"admin/bookies","path":"/docs/4.16.5/admin/bookies","sidebar":"docsSidebar"},{"id":"admin/decomission","path":"/docs/4.16.5/admin/decomission","sidebar":"docsSidebar"},{"id":"admin/geo-replication","path":"/docs/4.16.5/admin/geo-replication"},{"id":"admin/http","path":"/docs/4.16.5/admin/http","sidebar":"docsSidebar"},{"id":"admin/metrics","path":"/docs/4.16.5/admin/metrics","sidebar":"docsSidebar"},{"id":"admin/perf","path":"/docs/4.16.5/admin/perf"},{"id":"admin/placement","path":"/docs/4.16.5/admin/placement"},{"id":"admin/upgrade","path":"/docs/4.16.5/admin/upgrade","sidebar":"docsSidebar"},{"id":"api/distributedlog-api","path":"/docs/4.16.5/api/distributedlog-api","sidebar":"docsSidebar"},{"id":"api/ledger-adv-api","path":"/docs/4.16.5/api/ledger-adv-api","sidebar":"docsSidebar"},{"id":"api/ledger-api","path":"/docs/4.16.5/api/ledger-api","sidebar":"docsSidebar"},{"id":"api/overview","path":"/docs/4.16.5/api/overview","sidebar":"docsSidebar"},{"id":"deployment/kubernetes","path":"/docs/4.16.5/deployment/kubernetes","sidebar":"docsSidebar"},{"id":"deployment/manual","path":"/docs/4.16.5/deployment/manual","sidebar":"docsSidebar"},{"id":"development/codebase","path":"/docs/4.16.5/development/codebase"},{"id":"development/protocol","path":"/docs/4.16.5/development/protocol","sidebar":"docsSidebar"},{"id":"getting-started/concepts","path":"/docs/4.16.5/getting-started/concepts","sidebar":"docsSidebar"},{"id":"getting-started/installation","path":"/docs/4.16.5/getting-started/installation","sidebar":"docsSidebar"},{"id":"getting-started/run-locally","path":"/docs/4.16.5/getting-started/run-locally","sidebar":"docsSidebar"},{"id":"overview/overview","path":"/docs/4.16.5/overview/","sidebar":"docsSidebar"},{"id":"reference/cli","path":"/docs/4.16.5/reference/cli","sidebar":"docsSidebar"},{"id":"reference/config","path":"/docs/4.16.5/reference/config","sidebar":"docsSidebar"},{"id":"security/overview","path":"/docs/4.16.5/security/overview","sidebar":"docsSidebar"},{"id":"security/sasl","path":"/docs/4.16.5/security/sasl","sidebar":"docsSidebar"},{"id":"security/tls","path":"/docs/4.16.5/security/tls","sidebar":"docsSidebar"},{"id":"security/zookeeper","path":"/docs/4.16.5/security/zookeeper","sidebar":"docsSidebar"}],"draftIds":[],"sidebars":{"docsSidebar":{"link":{"path":"/docs/4.16.5/overview/","label":"Overview"}}}},{"name":"4.15.5","label":"4.15.5","isLast":false,"path":"/docs/4.15.5","mainDocId":"overview/overview","docs":[{"id":"admin/autorecovery","path":"/docs/4.15.5/admin/autorecovery","sidebar":"docsSidebar"},{"id":"admin/bookies","path":"/docs/4.15.5/admin/bookies","sidebar":"docsSidebar"},{"id":"admin/decomission","path":"/docs/4.15.5/admin/decomission","sidebar":"docsSidebar"},{"id":"admin/geo-replication","path":"/docs/4.15.5/admin/geo-replication"},{"id":"admin/http","path":"/docs/4.15.5/admin/http","sidebar":"docsSidebar"},{"id":"admin/metrics","path":"/docs/4.15.5/admin/metrics","sidebar":"docsSidebar"},{"id":"admin/perf","path":"/docs/4.15.5/admin/perf"},{"id":"admin/placement","path":"/docs/4.15.5/admin/placement"},{"id":"admin/upgrade","path":"/docs/4.15.5/admin/upgrade","sidebar":"docsSidebar"},{"id":"api/distributedlog-api","path":"/docs/4.15.5/api/distributedlog-api","sidebar":"docsSidebar"},{"id":"api/ledger-adv-api","path":"/docs/4.15.5/api/ledger-adv-api","sidebar":"docsSidebar"},{"id":"api/ledger-api","path":"/docs/4.15.5/api/ledger-api","sidebar":"docsSidebar"},{"id":"api/overview","path":"/docs/4.15.5/api/overview","sidebar":"docsSidebar"},{"id":"deployment/kubernetes","path":"/docs/4.15.5/deployment/kubernetes","sidebar":"docsSidebar"},{"id":"deployment/manual","path":"/docs/4.15.5/deployment/manual","sidebar":"docsSidebar"},{"id":"development/codebase","path":"/docs/4.15.5/development/codebase"},{"id":"development/protocol","path":"/docs/4.15.5/development/protocol","sidebar":"docsSidebar"},{"id":"getting-started/concepts","path":"/docs/4.15.5/getting-started/concepts","sidebar":"docsSidebar"},{"id":"getting-started/installation","path":"/docs/4.15.5/getting-started/installation","sidebar":"docsSidebar"},{"id":"getting-started/run-locally","path":"/docs/4.15.5/getting-started/run-locally","sidebar":"docsSidebar"},{"id":"overview/overview","path":"/docs/4.15.5/overview/","sidebar":"docsSidebar"},{"id":"reference/cli","path":"/docs/4.15.5/reference/cli","sidebar":"docsSidebar"},{"id":"reference/config","path":"/docs/4.15.5/reference/config","sidebar":"docsSidebar"},{"id":"security/overview","path":"/docs/4.15.5/security/overview","sidebar":"docsSidebar"},{"id":"security/sasl","path":"/docs/4.15.5/security/sasl","sidebar":"docsSidebar"},{"id":"security/tls","path":"/docs/4.15.5/security/tls","sidebar":"docsSidebar"},{"id":"security/zookeeper","path":"/docs/4.15.5/security/zookeeper","sidebar":"docsSidebar"}],"draftIds":[],"sidebars":{"docsSidebar":{"link":{"path":"/docs/4.15.5/overview/","label":"Overview"}}}},{"name":"4.14.8","label":"4.14.8","isLast":false,"path":"/docs/4.14.8","mainDocId":"overview/overview","docs":[{"id":"admin/autorecovery","path":"/docs/4.14.8/admin/autorecovery","sidebar":"version-4.14.8/docsSidebar"},{"id":"admin/bookies","path":"/docs/4.14.8/admin/bookies","sidebar":"version-4.14.8/docsSidebar"},{"id":"admin/decomission","path":"/docs/4.14.8/admin/decomission","sidebar":"version-4.14.8/docsSidebar"},{"id":"admin/geo-replication","path":"/docs/4.14.8/admin/geo-replication"},{"id":"admin/http","path":"/docs/4.14.8/admin/http","sidebar":"version-4.14.8/docsSidebar"},{"id":"admin/metrics","path":"/docs/4.14.8/admin/metrics","sidebar":"version-4.14.8/docsSidebar"},{"id":"admin/perf","path":"/docs/4.14.8/admin/perf"},{"id":"admin/placement","path":"/docs/4.14.8/admin/placement"},{"id":"admin/upgrade","path":"/docs/4.14.8/admin/upgrade","sidebar":"version-4.14.8/docsSidebar"},{"id":"api/distributedlog-api","path":"/docs/4.14.8/api/distributedlog-api","sidebar":"version-4.14.8/docsSidebar"},{"id":"api/ledger-adv-api","path":"/docs/4.14.8/api/ledger-adv-api","sidebar":"version-4.14.8/docsSidebar"},{"id":"api/ledger-api","path":"/docs/4.14.8/api/ledger-api","sidebar":"version-4.14.8/docsSidebar"},{"id":"api/overview","path":"/docs/4.14.8/api/overview","sidebar":"version-4.14.8/docsSidebar"},{"id":"deployment/kubernetes","path":"/docs/4.14.8/deployment/kubernetes","sidebar":"version-4.14.8/docsSidebar"},{"id":"deployment/manual","path":"/docs/4.14.8/deployment/manual","sidebar":"version-4.14.8/docsSidebar"},{"id":"development/codebase","path":"/docs/4.14.8/development/codebase"},{"id":"development/protocol","path":"/docs/4.14.8/development/protocol","sidebar":"version-4.14.8/docsSidebar"},{"id":"getting-started/concepts","path":"/docs/4.14.8/getting-started/concepts","sidebar":"version-4.14.8/docsSidebar"},{"id":"getting-started/installation","path":"/docs/4.14.8/getting-started/installation","sidebar":"version-4.14.8/docsSidebar"},{"id":"getting-started/run-locally","path":"/docs/4.14.8/getting-started/run-locally","sidebar":"version-4.14.8/docsSidebar"},{"id":"overview/overview","path":"/docs/4.14.8/overview/","sidebar":"version-4.14.8/docsSidebar"},{"id":"reference/cli","path":"/docs/4.14.8/reference/cli","sidebar":"version-4.14.8/docsSidebar"},{"id":"reference/config","path":"/docs/4.14.8/reference/config","sidebar":"version-4.14.8/docsSidebar"},{"id":"reference/metrics","path":"/docs/4.14.8/reference/metrics"},{"id":"security/overview","path":"/docs/4.14.8/security/overview","sidebar":"version-4.14.8/docsSidebar"},{"id":"security/sasl","path":"/docs/4.14.8/security/sasl","sidebar":"version-4.14.8/docsSidebar"},{"id":"security/tls","path":"/docs/4.14.8/security/tls","sidebar":"version-4.14.8/docsSidebar"},{"id":"security/zookeeper","path":"/docs/4.14.8/security/zookeeper","sidebar":"version-4.14.8/docsSidebar"}],"draftIds":[],"sidebars":{"version-4.14.8/docsSidebar":{"link":{"path":"/docs/4.14.8/overview/","label":"Overview"}}}},{"name":"4.13.0","label":"4.13.0","isLast":false,"path":"/docs/4.13.0","mainDocId":"overview/overview","docs":[{"id":"admin/autorecovery","path":"/docs/4.13.0/admin/autorecovery","sidebar":"version-4.13.0/docsSidebar"},{"id":"admin/bookies","path":"/docs/4.13.0/admin/bookies","sidebar":"version-4.13.0/docsSidebar"},{"id":"admin/decomission","path":"/docs/4.13.0/admin/decomission","sidebar":"version-4.13.0/docsSidebar"},{"id":"admin/geo-replication","path":"/docs/4.13.0/admin/geo-replication"},{"id":"admin/http","path":"/docs/4.13.0/admin/http","sidebar":"version-4.13.0/docsSidebar"},{"id":"admin/metrics","path":"/docs/4.13.0/admin/metrics","sidebar":"version-4.13.0/docsSidebar"},{"id":"admin/perf","path":"/docs/4.13.0/admin/perf"},{"id":"admin/placement","path":"/docs/4.13.0/admin/placement"},{"id":"admin/upgrade","path":"/docs/4.13.0/admin/upgrade","sidebar":"version-4.13.0/docsSidebar"},{"id":"api/distributedlog-api","path":"/docs/4.13.0/api/distributedlog-api","sidebar":"version-4.13.0/docsSidebar"},{"id":"api/ledger-adv-api","path":"/docs/4.13.0/api/ledger-adv-api","sidebar":"version-4.13.0/docsSidebar"},{"id":"api/ledger-api","path":"/docs/4.13.0/api/ledger-api","sidebar":"version-4.13.0/docsSidebar"},{"id":"api/overview","path":"/docs/4.13.0/api/overview","sidebar":"version-4.13.0/docsSidebar"},{"id":"deployment/kubernetes","path":"/docs/4.13.0/deployment/kubernetes","sidebar":"version-4.13.0/docsSidebar"},{"id":"deployment/manual","path":"/docs/4.13.0/deployment/manual","sidebar":"version-4.13.0/docsSidebar"},{"id":"development/codebase","path":"/docs/4.13.0/development/codebase"},{"id":"development/protocol","path":"/docs/4.13.0/development/protocol","sidebar":"version-4.13.0/docsSidebar"},{"id":"getting-started/concepts","path":"/docs/4.13.0/getting-started/concepts","sidebar":"version-4.13.0/docsSidebar"},{"id":"getting-started/installation","path":"/docs/4.13.0/getting-started/installation","sidebar":"version-4.13.0/docsSidebar"},{"id":"getting-started/run-locally","path":"/docs/4.13.0/getting-started/run-locally","sidebar":"version-4.13.0/docsSidebar"},{"id":"overview/overview","path":"/docs/4.13.0/overview/","sidebar":"version-4.13.0/docsSidebar"},{"id":"reference/cli","path":"/docs/4.13.0/reference/cli","sidebar":"version-4.13.0/docsSidebar"},{"id":"reference/config","path":"/docs/4.13.0/reference/config","sidebar":"version-4.13.0/docsSidebar"},{"id":"reference/metrics","path":"/docs/4.13.0/reference/metrics"},{"id":"security/overview","path":"/docs/4.13.0/security/overview","sidebar":"version-4.13.0/docsSidebar"},{"id":"security/sasl","path":"/docs/4.13.0/security/sasl","sidebar":"version-4.13.0/docsSidebar"},{"id":"security/tls","path":"/docs/4.13.0/security/tls","sidebar":"version-4.13.0/docsSidebar"},{"id":"security/zookeeper","path":"/docs/4.13.0/security/zookeeper","sidebar":"version-4.13.0/docsSidebar"}],"draftIds":[],"sidebars":{"version-4.13.0/docsSidebar":{"link":{"path":"/docs/4.13.0/overview/","label":"Overview"}}}},{"name":"4.12.1","label":"4.12.1","isLast":false,"path":"/docs/4.12.1","mainDocId":"overview/overview","docs":[{"id":"admin/autorecovery","path":"/docs/4.12.1/admin/autorecovery","sidebar":"version-4.12.1/docsSidebar"},{"id":"admin/bookies","path":"/docs/4.12.1/admin/bookies","sidebar":"version-4.12.1/docsSidebar"},{"id":"admin/decomission","path":"/docs/4.12.1/admin/decomission","sidebar":"version-4.12.1/docsSidebar"},{"id":"admin/geo-replication","path":"/docs/4.12.1/admin/geo-replication"},{"id":"admin/http","path":"/docs/4.12.1/admin/http","sidebar":"version-4.12.1/docsSidebar"},{"id":"admin/metrics","path":"/docs/4.12.1/admin/metrics","sidebar":"version-4.12.1/docsSidebar"},{"id":"admin/perf","path":"/docs/4.12.1/admin/perf"},{"id":"admin/placement","path":"/docs/4.12.1/admin/placement"},{"id":"admin/upgrade","path":"/docs/4.12.1/admin/upgrade","sidebar":"version-4.12.1/docsSidebar"},{"id":"api/distributedlog-api","path":"/docs/4.12.1/api/distributedlog-api","sidebar":"version-4.12.1/docsSidebar"},{"id":"api/ledger-adv-api","path":"/docs/4.12.1/api/ledger-adv-api","sidebar":"version-4.12.1/docsSidebar"},{"id":"api/ledger-api","path":"/docs/4.12.1/api/ledger-api","sidebar":"version-4.12.1/docsSidebar"},{"id":"api/overview","path":"/docs/4.12.1/api/overview","sidebar":"version-4.12.1/docsSidebar"},{"id":"deployment/kubernetes","path":"/docs/4.12.1/deployment/kubernetes","sidebar":"version-4.12.1/docsSidebar"},{"id":"deployment/manual","path":"/docs/4.12.1/deployment/manual","sidebar":"version-4.12.1/docsSidebar"},{"id":"development/codebase","path":"/docs/4.12.1/development/codebase"},{"id":"development/protocol","path":"/docs/4.12.1/development/protocol","sidebar":"version-4.12.1/docsSidebar"},{"id":"getting-started/concepts","path":"/docs/4.12.1/getting-started/concepts","sidebar":"version-4.12.1/docsSidebar"},{"id":"getting-started/installation","path":"/docs/4.12.1/getting-started/installation","sidebar":"version-4.12.1/docsSidebar"},{"id":"getting-started/run-locally","path":"/docs/4.12.1/getting-started/run-locally","sidebar":"version-4.12.1/docsSidebar"},{"id":"overview/overview","path":"/docs/4.12.1/overview/","sidebar":"version-4.12.1/docsSidebar"},{"id":"reference/cli","path":"/docs/4.12.1/reference/cli","sidebar":"version-4.12.1/docsSidebar"},{"id":"reference/config","path":"/docs/4.12.1/reference/config","sidebar":"version-4.12.1/docsSidebar"},{"id":"reference/metrics","path":"/docs/4.12.1/reference/metrics"},{"id":"security/overview","path":"/docs/4.12.1/security/overview","sidebar":"version-4.12.1/docsSidebar"},{"id":"security/sasl","path":"/docs/4.12.1/security/sasl","sidebar":"version-4.12.1/docsSidebar"},{"id":"security/tls","path":"/docs/4.12.1/security/tls","sidebar":"version-4.12.1/docsSidebar"},{"id":"security/zookeeper","path":"/docs/4.12.1/security/zookeeper","sidebar":"version-4.12.1/docsSidebar"}],"draftIds":[],"sidebars":{"version-4.12.1/docsSidebar":{"link":{"path":"/docs/4.12.1/overview/","label":"Overview"}}}},{"name":"4.11.1","label":"4.11.1","isLast":false,"path":"/docs/4.11.1","mainDocId":"overview/overview","docs":[{"id":"admin/autorecovery","path":"/docs/4.11.1/admin/autorecovery","sidebar":"version-4.11.1/docsSidebar"},{"id":"admin/bookies","path":"/docs/4.11.1/admin/bookies","sidebar":"version-4.11.1/docsSidebar"},{"id":"admin/decomission","path":"/docs/4.11.1/admin/decomission","sidebar":"version-4.11.1/docsSidebar"},{"id":"admin/geo-replication","path":"/docs/4.11.1/admin/geo-replication"},{"id":"admin/http","path":"/docs/4.11.1/admin/http","sidebar":"version-4.11.1/docsSidebar"},{"id":"admin/metrics","path":"/docs/4.11.1/admin/metrics","sidebar":"version-4.11.1/docsSidebar"},{"id":"admin/perf","path":"/docs/4.11.1/admin/perf"},{"id":"admin/placement","path":"/docs/4.11.1/admin/placement"},{"id":"admin/upgrade","path":"/docs/4.11.1/admin/upgrade","sidebar":"version-4.11.1/docsSidebar"},{"id":"api/distributedlog-api","path":"/docs/4.11.1/api/distributedlog-api","sidebar":"version-4.11.1/docsSidebar"},{"id":"api/ledger-adv-api","path":"/docs/4.11.1/api/ledger-adv-api","sidebar":"version-4.11.1/docsSidebar"},{"id":"api/ledger-api","path":"/docs/4.11.1/api/ledger-api","sidebar":"version-4.11.1/docsSidebar"},{"id":"api/overview","path":"/docs/4.11.1/api/overview","sidebar":"version-4.11.1/docsSidebar"},{"id":"deployment/kubernetes","path":"/docs/4.11.1/deployment/kubernetes","sidebar":"version-4.11.1/docsSidebar"},{"id":"deployment/manual","path":"/docs/4.11.1/deployment/manual","sidebar":"version-4.11.1/docsSidebar"},{"id":"development/codebase","path":"/docs/4.11.1/development/codebase"},{"id":"development/protocol","path":"/docs/4.11.1/development/protocol","sidebar":"version-4.11.1/docsSidebar"},{"id":"getting-started/concepts","path":"/docs/4.11.1/getting-started/concepts","sidebar":"version-4.11.1/docsSidebar"},{"id":"getting-started/installation","path":"/docs/4.11.1/getting-started/installation","sidebar":"version-4.11.1/docsSidebar"},{"id":"getting-started/run-locally","path":"/docs/4.11.1/getting-started/run-locally","sidebar":"version-4.11.1/docsSidebar"},{"id":"overview/overview","path":"/docs/4.11.1/overview/","sidebar":"version-4.11.1/docsSidebar"},{"id":"reference/cli","path":"/docs/4.11.1/reference/cli","sidebar":"version-4.11.1/docsSidebar"},{"id":"reference/config","path":"/docs/4.11.1/reference/config","sidebar":"version-4.11.1/docsSidebar"},{"id":"reference/metrics","path":"/docs/4.11.1/reference/metrics"},{"id":"security/overview","path":"/docs/4.11.1/security/overview","sidebar":"version-4.11.1/docsSidebar"},{"id":"security/sasl","path":"/docs/4.11.1/security/sasl","sidebar":"version-4.11.1/docsSidebar"},{"id":"security/tls","path":"/docs/4.11.1/security/tls","sidebar":"version-4.11.1/docsSidebar"},{"id":"security/zookeeper","path":"/docs/4.11.1/security/zookeeper","sidebar":"version-4.11.1/docsSidebar"}],"draftIds":[],"sidebars":{"version-4.11.1/docsSidebar":{"link":{"path":"/docs/4.11.1/overview/","label":"Overview"}}}},{"name":"4.10.0","label":"4.10.0","isLast":false,"path":"/docs/4.10.0","mainDocId":"overview/overview","docs":[{"id":"admin/autorecovery","path":"/docs/4.10.0/admin/autorecovery","sidebar":"version-4.10.0/docsSidebar"},{"id":"admin/bookies","path":"/docs/4.10.0/admin/bookies","sidebar":"version-4.10.0/docsSidebar"},{"id":"admin/geo-replication","path":"/docs/4.10.0/admin/geo-replication"},{"id":"admin/http","path":"/docs/4.10.0/admin/http","sidebar":"version-4.10.0/docsSidebar"},{"id":"admin/metrics","path":"/docs/4.10.0/admin/metrics","sidebar":"version-4.10.0/docsSidebar"},{"id":"admin/perf","path":"/docs/4.10.0/admin/perf"},{"id":"admin/placement","path":"/docs/4.10.0/admin/placement"},{"id":"admin/upgrade","path":"/docs/4.10.0/admin/upgrade","sidebar":"version-4.10.0/docsSidebar"},{"id":"api/distributedlog-api","path":"/docs/4.10.0/api/distributedlog-api","sidebar":"version-4.10.0/docsSidebar"},{"id":"api/ledger-adv-api","path":"/docs/4.10.0/api/ledger-adv-api","sidebar":"version-4.10.0/docsSidebar"},{"id":"api/ledger-api","path":"/docs/4.10.0/api/ledger-api","sidebar":"version-4.10.0/docsSidebar"},{"id":"api/overview","path":"/docs/4.10.0/api/overview","sidebar":"version-4.10.0/docsSidebar"},{"id":"deployment/kubernetes","path":"/docs/4.10.0/deployment/kubernetes","sidebar":"version-4.10.0/docsSidebar"},{"id":"deployment/manual","path":"/docs/4.10.0/deployment/manual","sidebar":"version-4.10.0/docsSidebar"},{"id":"development/codebase","path":"/docs/4.10.0/development/codebase"},{"id":"development/protocol","path":"/docs/4.10.0/development/protocol","sidebar":"version-4.10.0/docsSidebar"},{"id":"getting-started/concepts","path":"/docs/4.10.0/getting-started/concepts","sidebar":"version-4.10.0/docsSidebar"},{"id":"getting-started/installation","path":"/docs/4.10.0/getting-started/installation","sidebar":"version-4.10.0/docsSidebar"},{"id":"getting-started/run-locally","path":"/docs/4.10.0/getting-started/run-locally","sidebar":"version-4.10.0/docsSidebar"},{"id":"overview/overview","path":"/docs/4.10.0/overview/","sidebar":"version-4.10.0/docsSidebar"},{"id":"reference/cli","path":"/docs/4.10.0/reference/cli","sidebar":"version-4.10.0/docsSidebar"},{"id":"reference/config","path":"/docs/4.10.0/reference/config","sidebar":"version-4.10.0/docsSidebar"},{"id":"reference/metrics","path":"/docs/4.10.0/reference/metrics"},{"id":"security/overview","path":"/docs/4.10.0/security/overview","sidebar":"version-4.10.0/docsSidebar"},{"id":"security/sasl","path":"/docs/4.10.0/security/sasl","sidebar":"version-4.10.0/docsSidebar"},{"id":"security/tls","path":"/docs/4.10.0/security/tls","sidebar":"version-4.10.0/docsSidebar"},{"id":"security/zookeeper","path":"/docs/4.10.0/security/zookeeper","sidebar":"version-4.10.0/docsSidebar"}],"draftIds":[],"sidebars":{"version-4.10.0/docsSidebar":{"link":{"path":"/docs/4.10.0/overview/","label":"Overview"}}}},{"name":"4.9.2","label":"4.9.2","isLast":false,"path":"/docs/4.9.2","mainDocId":"overview/overview","docs":[{"id":"admin/autorecovery","path":"/docs/4.9.2/admin/autorecovery","sidebar":"version-4.9.2/docsSidebar"},{"id":"admin/bookies","path":"/docs/4.9.2/admin/bookies","sidebar":"version-4.9.2/docsSidebar"},{"id":"admin/geo-replication","path":"/docs/4.9.2/admin/geo-replication"},{"id":"admin/http","path":"/docs/4.9.2/admin/http","sidebar":"version-4.9.2/docsSidebar"},{"id":"admin/metrics","path":"/docs/4.9.2/admin/metrics","sidebar":"version-4.9.2/docsSidebar"},{"id":"admin/perf","path":"/docs/4.9.2/admin/perf"},{"id":"admin/placement","path":"/docs/4.9.2/admin/placement"},{"id":"admin/upgrade","path":"/docs/4.9.2/admin/upgrade","sidebar":"version-4.9.2/docsSidebar"},{"id":"api/distributedlog-api","path":"/docs/4.9.2/api/distributedlog-api","sidebar":"version-4.9.2/docsSidebar"},{"id":"api/ledger-adv-api","path":"/docs/4.9.2/api/ledger-adv-api","sidebar":"version-4.9.2/docsSidebar"},{"id":"api/ledger-api","path":"/docs/4.9.2/api/ledger-api","sidebar":"version-4.9.2/docsSidebar"},{"id":"api/overview","path":"/docs/4.9.2/api/overview","sidebar":"version-4.9.2/docsSidebar"},{"id":"deployment/kubernetes","path":"/docs/4.9.2/deployment/kubernetes","sidebar":"version-4.9.2/docsSidebar"},{"id":"deployment/manual","path":"/docs/4.9.2/deployment/manual","sidebar":"version-4.9.2/docsSidebar"},{"id":"development/codebase","path":"/docs/4.9.2/development/codebase"},{"id":"development/protocol","path":"/docs/4.9.2/development/protocol","sidebar":"version-4.9.2/docsSidebar"},{"id":"getting-started/concepts","path":"/docs/4.9.2/getting-started/concepts","sidebar":"version-4.9.2/docsSidebar"},{"id":"getting-started/installation","path":"/docs/4.9.2/getting-started/installation","sidebar":"version-4.9.2/docsSidebar"},{"id":"getting-started/run-locally","path":"/docs/4.9.2/getting-started/run-locally","sidebar":"version-4.9.2/docsSidebar"},{"id":"overview/overview","path":"/docs/4.9.2/overview/","sidebar":"version-4.9.2/docsSidebar"},{"id":"reference/cli","path":"/docs/4.9.2/reference/cli","sidebar":"version-4.9.2/docsSidebar"},{"id":"reference/config","path":"/docs/4.9.2/reference/config","sidebar":"version-4.9.2/docsSidebar"},{"id":"reference/metrics","path":"/docs/4.9.2/reference/metrics"},{"id":"security/overview","path":"/docs/4.9.2/security/overview","sidebar":"version-4.9.2/docsSidebar"},{"id":"security/sasl","path":"/docs/4.9.2/security/sasl","sidebar":"version-4.9.2/docsSidebar"},{"id":"security/tls","path":"/docs/4.9.2/security/tls","sidebar":"version-4.9.2/docsSidebar"},{"id":"security/zookeeper","path":"/docs/4.9.2/security/zookeeper","sidebar":"version-4.9.2/docsSidebar"}],"draftIds":[],"sidebars":{"version-4.9.2/docsSidebar":{"link":{"path":"/docs/4.9.2/overview/","label":"Overview"}}}},{"name":"4.8.2","label":"4.8.2","isLast":false,"path":"/docs/4.8.2","mainDocId":"overview/overview","docs":[{"id":"admin/autorecovery","path":"/docs/4.8.2/admin/autorecovery","sidebar":"version-4.8.2/docsSidebar"},{"id":"admin/bookies","path":"/docs/4.8.2/admin/bookies","sidebar":"version-4.8.2/docsSidebar"},{"id":"admin/geo-replication","path":"/docs/4.8.2/admin/geo-replication"},{"id":"admin/http","path":"/docs/4.8.2/admin/http","sidebar":"version-4.8.2/docsSidebar"},{"id":"admin/metrics","path":"/docs/4.8.2/admin/metrics","sidebar":"version-4.8.2/docsSidebar"},{"id":"admin/perf","path":"/docs/4.8.2/admin/perf"},{"id":"admin/placement","path":"/docs/4.8.2/admin/placement"},{"id":"admin/upgrade","path":"/docs/4.8.2/admin/upgrade","sidebar":"version-4.8.2/docsSidebar"},{"id":"api/distributedlog-api","path":"/docs/4.8.2/api/distributedlog-api","sidebar":"version-4.8.2/docsSidebar"},{"id":"api/ledger-adv-api","path":"/docs/4.8.2/api/ledger-adv-api","sidebar":"version-4.8.2/docsSidebar"},{"id":"api/ledger-api","path":"/docs/4.8.2/api/ledger-api","sidebar":"version-4.8.2/docsSidebar"},{"id":"api/overview","path":"/docs/4.8.2/api/overview","sidebar":"version-4.8.2/docsSidebar"},{"id":"deployment/kubernetes","path":"/docs/4.8.2/deployment/kubernetes","sidebar":"version-4.8.2/docsSidebar"},{"id":"deployment/manual","path":"/docs/4.8.2/deployment/manual","sidebar":"version-4.8.2/docsSidebar"},{"id":"development/codebase","path":"/docs/4.8.2/development/codebase"},{"id":"development/protocol","path":"/docs/4.8.2/development/protocol","sidebar":"version-4.8.2/docsSidebar"},{"id":"getting-started/concepts","path":"/docs/4.8.2/getting-started/concepts","sidebar":"version-4.8.2/docsSidebar"},{"id":"getting-started/installation","path":"/docs/4.8.2/getting-started/installation","sidebar":"version-4.8.2/docsSidebar"},{"id":"getting-started/run-locally","path":"/docs/4.8.2/getting-started/run-locally","sidebar":"version-4.8.2/docsSidebar"},{"id":"overview/overview","path":"/docs/4.8.2/overview/","sidebar":"version-4.8.2/docsSidebar"},{"id":"reference/cli","path":"/docs/4.8.2/reference/cli","sidebar":"version-4.8.2/docsSidebar"},{"id":"reference/config","path":"/docs/4.8.2/reference/config","sidebar":"version-4.8.2/docsSidebar"},{"id":"reference/metrics","path":"/docs/4.8.2/reference/metrics"},{"id":"security/overview","path":"/docs/4.8.2/security/overview","sidebar":"version-4.8.2/docsSidebar"},{"id":"security/sasl","path":"/docs/4.8.2/security/sasl","sidebar":"version-4.8.2/docsSidebar"},{"id":"security/tls","path":"/docs/4.8.2/security/tls","sidebar":"version-4.8.2/docsSidebar"},{"id":"security/zookeeper","path":"/docs/4.8.2/security/zookeeper","sidebar":"version-4.8.2/docsSidebar"}],"draftIds":[],"sidebars":{"version-4.8.2/docsSidebar":{"link":{"path":"/docs/4.8.2/overview/","label":"Overview"}}}},{"name":"4.7.3","label":"4.7.3","isLast":false,"path":"/docs/4.7.3","mainDocId":"overview/overview","docs":[{"id":"admin/autorecovery","path":"/docs/4.7.3/admin/autorecovery","sidebar":"version-4.7.3/docsSidebar"},{"id":"admin/bookies","path":"/docs/4.7.3/admin/bookies","sidebar":"version-4.7.3/docsSidebar"},{"id":"admin/geo-replication","path":"/docs/4.7.3/admin/geo-replication"},{"id":"admin/http","path":"/docs/4.7.3/admin/http","sidebar":"version-4.7.3/docsSidebar"},{"id":"admin/metrics","path":"/docs/4.7.3/admin/metrics","sidebar":"version-4.7.3/docsSidebar"},{"id":"admin/perf","path":"/docs/4.7.3/admin/perf"},{"id":"admin/placement","path":"/docs/4.7.3/admin/placement"},{"id":"admin/upgrade","path":"/docs/4.7.3/admin/upgrade","sidebar":"version-4.7.3/docsSidebar"},{"id":"api/distributedlog-api","path":"/docs/4.7.3/api/distributedlog-api","sidebar":"version-4.7.3/docsSidebar"},{"id":"api/ledger-adv-api","path":"/docs/4.7.3/api/ledger-adv-api","sidebar":"version-4.7.3/docsSidebar"},{"id":"api/ledger-api","path":"/docs/4.7.3/api/ledger-api","sidebar":"version-4.7.3/docsSidebar"},{"id":"api/overview","path":"/docs/4.7.3/api/overview","sidebar":"version-4.7.3/docsSidebar"},{"id":"deployment/kubernetes","path":"/docs/4.7.3/deployment/kubernetes","sidebar":"version-4.7.3/docsSidebar"},{"id":"deployment/manual","path":"/docs/4.7.3/deployment/manual","sidebar":"version-4.7.3/docsSidebar"},{"id":"development/codebase","path":"/docs/4.7.3/development/codebase"},{"id":"development/protocol","path":"/docs/4.7.3/development/protocol","sidebar":"version-4.7.3/docsSidebar"},{"id":"getting-started/concepts","path":"/docs/4.7.3/getting-started/concepts","sidebar":"version-4.7.3/docsSidebar"},{"id":"getting-started/installation","path":"/docs/4.7.3/getting-started/installation","sidebar":"version-4.7.3/docsSidebar"},{"id":"getting-started/run-locally","path":"/docs/4.7.3/getting-started/run-locally","sidebar":"version-4.7.3/docsSidebar"},{"id":"overview/overview","path":"/docs/4.7.3/overview/","sidebar":"version-4.7.3/docsSidebar"},{"id":"reference/cli","path":"/docs/4.7.3/reference/cli","sidebar":"version-4.7.3/docsSidebar"},{"id":"reference/config","path":"/docs/4.7.3/reference/config","sidebar":"version-4.7.3/docsSidebar"},{"id":"reference/metrics","path":"/docs/4.7.3/reference/metrics"},{"id":"security/overview","path":"/docs/4.7.3/security/overview","sidebar":"version-4.7.3/docsSidebar"},{"id":"security/sasl","path":"/docs/4.7.3/security/sasl","sidebar":"version-4.7.3/docsSidebar"},{"id":"security/tls","path":"/docs/4.7.3/security/tls","sidebar":"version-4.7.3/docsSidebar"},{"id":"security/zookeeper","path":"/docs/4.7.3/security/zookeeper","sidebar":"version-4.7.3/docsSidebar"}],"draftIds":[],"sidebars":{"version-4.7.3/docsSidebar":{"link":{"path":"/docs/4.7.3/overview/","label":"Overview"}}}},{"name":"4.6.2","label":"4.6.2","isLast":false,"path":"/docs/4.6.2","mainDocId":"overview/overview","docs":[{"id":"admin/autorecovery","path":"/docs/4.6.2/admin/autorecovery","sidebar":"version-4.6.2/docsSidebar"},{"id":"admin/bookies","path":"/docs/4.6.2/admin/bookies","sidebar":"version-4.6.2/docsSidebar"},{"id":"admin/geo-replication","path":"/docs/4.6.2/admin/geo-replication"},{"id":"admin/http","path":"/docs/4.6.2/admin/http","sidebar":"version-4.6.2/docsSidebar"},{"id":"admin/metrics","path":"/docs/4.6.2/admin/metrics","sidebar":"version-4.6.2/docsSidebar"},{"id":"admin/perf","path":"/docs/4.6.2/admin/perf"},{"id":"admin/placement","path":"/docs/4.6.2/admin/placement"},{"id":"admin/upgrade","path":"/docs/4.6.2/admin/upgrade","sidebar":"version-4.6.2/docsSidebar"},{"id":"api/distributedlog-api","path":"/docs/4.6.2/api/distributedlog-api","sidebar":"version-4.6.2/docsSidebar"},{"id":"api/ledger-adv-api","path":"/docs/4.6.2/api/ledger-adv-api","sidebar":"version-4.6.2/docsSidebar"},{"id":"api/ledger-api","path":"/docs/4.6.2/api/ledger-api","sidebar":"version-4.6.2/docsSidebar"},{"id":"api/overview","path":"/docs/4.6.2/api/overview","sidebar":"version-4.6.2/docsSidebar"},{"id":"deployment/kubernetes","path":"/docs/4.6.2/deployment/kubernetes","sidebar":"version-4.6.2/docsSidebar"},{"id":"deployment/manual","path":"/docs/4.6.2/deployment/manual","sidebar":"version-4.6.2/docsSidebar"},{"id":"development/codebase","path":"/docs/4.6.2/development/codebase"},{"id":"development/protocol","path":"/docs/4.6.2/development/protocol","sidebar":"version-4.6.2/docsSidebar"},{"id":"getting-started/concepts","path":"/docs/4.6.2/getting-started/concepts","sidebar":"version-4.6.2/docsSidebar"},{"id":"getting-started/installation","path":"/docs/4.6.2/getting-started/installation","sidebar":"version-4.6.2/docsSidebar"},{"id":"getting-started/run-locally","path":"/docs/4.6.2/getting-started/run-locally","sidebar":"version-4.6.2/docsSidebar"},{"id":"overview/overview","path":"/docs/4.6.2/overview/","sidebar":"version-4.6.2/docsSidebar"},{"id":"reference/cli","path":"/docs/4.6.2/reference/cli","sidebar":"version-4.6.2/docsSidebar"},{"id":"reference/config","path":"/docs/4.6.2/reference/config","sidebar":"version-4.6.2/docsSidebar"},{"id":"reference/metrics","path":"/docs/4.6.2/reference/metrics"},{"id":"security/overview","path":"/docs/4.6.2/security/overview","sidebar":"version-4.6.2/docsSidebar"},{"id":"security/sasl","path":"/docs/4.6.2/security/sasl","sidebar":"version-4.6.2/docsSidebar"},{"id":"security/tls","path":"/docs/4.6.2/security/tls","sidebar":"version-4.6.2/docsSidebar"},{"id":"security/zookeeper","path":"/docs/4.6.2/security/zookeeper","sidebar":"version-4.6.2/docsSidebar"}],"draftIds":[],"sidebars":{"version-4.6.2/docsSidebar":{"link":{"path":"/docs/4.6.2/overview/","label":"Overview"}}}},{"name":"4.5.1","label":"4.5.1","isLast":false,"path":"/docs/4.5.1","mainDocId":"overview/overview","docs":[{"id":"admin/autorecovery","path":"/docs/4.5.1/admin/autorecovery","sidebar":"version-4.5.1/docsSidebar"},{"id":"admin/bookies","path":"/docs/4.5.1/admin/bookies","sidebar":"version-4.5.1/docsSidebar"},{"id":"admin/geo-replication","path":"/docs/4.5.1/admin/geo-replication"},{"id":"admin/metrics","path":"/docs/4.5.1/admin/metrics","sidebar":"version-4.5.1/docsSidebar"},{"id":"admin/perf","path":"/docs/4.5.1/admin/perf"},{"id":"admin/placement","path":"/docs/4.5.1/admin/placement"},{"id":"admin/upgrade","path":"/docs/4.5.1/admin/upgrade","sidebar":"version-4.5.1/docsSidebar"},{"id":"api/distributedlog-api","path":"/docs/4.5.1/api/distributedlog-api","sidebar":"version-4.5.1/docsSidebar"},{"id":"api/ledger-adv-api","path":"/docs/4.5.1/api/ledger-adv-api","sidebar":"version-4.5.1/docsSidebar"},{"id":"api/ledger-api","path":"/docs/4.5.1/api/ledger-api","sidebar":"version-4.5.1/docsSidebar"},{"id":"api/overview","path":"/docs/4.5.1/api/overview","sidebar":"version-4.5.1/docsSidebar"},{"id":"deployment/kubernetes","path":"/docs/4.5.1/deployment/kubernetes","sidebar":"version-4.5.1/docsSidebar"},{"id":"deployment/manual","path":"/docs/4.5.1/deployment/manual","sidebar":"version-4.5.1/docsSidebar"},{"id":"development/codebase","path":"/docs/4.5.1/development/codebase"},{"id":"development/protocol","path":"/docs/4.5.1/development/protocol","sidebar":"version-4.5.1/docsSidebar"},{"id":"getting-started/concepts","path":"/docs/4.5.1/getting-started/concepts","sidebar":"version-4.5.1/docsSidebar"},{"id":"getting-started/installation","path":"/docs/4.5.1/getting-started/installation","sidebar":"version-4.5.1/docsSidebar"},{"id":"getting-started/run-locally","path":"/docs/4.5.1/getting-started/run-locally","sidebar":"version-4.5.1/docsSidebar"},{"id":"overview/overview","path":"/docs/4.5.1/overview/","sidebar":"version-4.5.1/docsSidebar"},{"id":"reference/cli","path":"/docs/4.5.1/reference/cli","sidebar":"version-4.5.1/docsSidebar"},{"id":"reference/config","path":"/docs/4.5.1/reference/config","sidebar":"version-4.5.1/docsSidebar"},{"id":"reference/metrics","path":"/docs/4.5.1/reference/metrics"},{"id":"security/overview","path":"/docs/4.5.1/security/overview","sidebar":"version-4.5.1/docsSidebar"},{"id":"security/sasl","path":"/docs/4.5.1/security/sasl","sidebar":"version-4.5.1/docsSidebar"},{"id":"security/tls","path":"/docs/4.5.1/security/tls","sidebar":"version-4.5.1/docsSidebar"},{"id":"security/zookeeper","path":"/docs/4.5.1/security/zookeeper","sidebar":"version-4.5.1/docsSidebar"}],"draftIds":[],"sidebars":{"version-4.5.1/docsSidebar":{"link":{"path":"/docs/4.5.1/overview/","label":"Overview"}}}}],"breadcrumbs":false}}}'),a=JSON.parse('{"defaultLocale":"en","locales":["en"],"path":"i18n","currentLocale":"en","localeConfigs":{"en":{"label":"English","direction":"ltr","htmlLang":"en","calendar":"gregory","path":"en"}}}'),s=n(57529),c=JSON.parse('{"docusaurusVersion":"2.4.0","siteVersion":"0.0.0","pluginVersions":{"docusaurus-plugin-content-docs":{"type":"package","name":"@docusaurus/plugin-content-docs","version":"2.4.0"},"docusaurus-plugin-content-blog":{"type":"package","name":"@docusaurus/plugin-content-blog","version":"2.4.0"},"docusaurus-plugin-content-pages":{"type":"package","name":"@docusaurus/plugin-content-pages","version":"2.4.0"},"docusaurus-plugin-sitemap":{"type":"package","name":"@docusaurus/plugin-sitemap","version":"2.4.0"},"docusaurus-theme-classic":{"type":"package","name":"@docusaurus/theme-classic","version":"2.4.0"},"docusaurus-plugin-sass":{"type":"package","name":"docusaurus-plugin-sass","version":"0.2.2"}}}');const d={siteConfig:r.default,siteMetadata:c,globalData:i,i18n:a,codeTranslations:s},l=o.createContext(d);function u(e){let{children:t}=e;return o.createElement(l.Provider,{value:d},t)}},44763:function(e,t,n){"use strict";n.d(t,{Z:function(){return p}});var o=n(67294),r=n(10412),i=n(35742),a=n(18780),s=n(7961);function c(e){let{error:t,tryAgain:n}=e;return o.createElement("div",{style:{display:"flex",flexDirection:"column",justifyContent:"center",alignItems:"flex-start",minHeight:"100vh",width:"100%",maxWidth:"80ch",fontSize:"20px",margin:"0 auto",padding:"1rem"}},o.createElement("h1",{style:{fontSize:"3rem"}},"This page crashed"),o.createElement("button",{type:"button",onClick:n,style:{margin:"1rem 0",fontSize:"2rem",cursor:"pointer",borderRadius:20,padding:"1rem"}},"Try again"),o.createElement(d,{error:t}))}function d(e){let{error:t}=e;const n=(0,a.getErrorCausalChain)(t).map((e=>e.message)).join("\n\nCause:\n");return o.createElement("p",{style:{whiteSpace:"pre-wrap"}},n)}function l(e){let{error:t,tryAgain:n}=e;return o.createElement(p,{fallback:()=>o.createElement(c,{error:t,tryAgain:n})},o.createElement(i.Z,null,o.createElement("title",null,"Page Error")),o.createElement(s.Z,null,o.createElement(c,{error:t,tryAgain:n})))}const u=e=>o.createElement(l,e);class p extends o.Component{constructor(e){super(e),this.state={error:null}}componentDidCatch(e){r.Z.canUseDOM&&this.setState({error:e})}render(){const{children:e}=this.props,{error:t}=this.state;if(t){const e={error:t,tryAgain:()=>this.setState({error:null})};return(this.props.fallback??u)(e)}return e??null}}},10412:function(e,t){"use strict";const n="undefined"!=typeof window&&"document"in window&&"createElement"in window.document,o={canUseDOM:n,canUseEventListeners:n&&("addEventListener"in window||"attachEvent"in window),canUseIntersectionObserver:n&&"IntersectionObserver"in window,canUseViewport:n&&"screen"in window};t.Z=o},35742:function(e,t,n){"use strict";n.d(t,{Z:function(){return i}});var o=n(67294),r=n(70405);function i(e){return o.createElement(r.ql,e)}},39960:function(e,t,n){"use strict";n.d(t,{Z:function(){return m}});var o=n(83117),r=n(67294),i=n(73727),a=n(18780),s=n(52263),c=n(13919),d=n(10412);const l=r.createContext({collectLink:()=>{}});var u=n(44996);function p(e,t){let{isNavLink:n,to:p,href:m,activeClassName:f,isActive:b,"data-noBrokenLinkCheck":h,autoAddBaseUrl:v=!0,...g}=e;const{siteConfig:{trailingSlash:y,baseUrl:w}}=(0,s.Z)(),{withBaseUrl:_}=(0,u.C)(),k=(0,r.useContext)(l),S=(0,r.useRef)(null);(0,r.useImperativeHandle)(t,(()=>S.current));const x=p||m;const E=(0,c.Z)(x),C=x?.replace("pathname://","");let T=void 0!==C?(P=C,v&&(e=>e.startsWith("/"))(P)?_(P):P):void 0;var P;T&&E&&(T=(0,a.applyTrailingSlash)(T,{trailingSlash:y,baseUrl:w}));const A=(0,r.useRef)(!1),L=n?i.OL:i.rU,R=d.Z.canUseIntersectionObserver,N=(0,r.useRef)(),O=()=>{A.current||null==T||(window.docusaurus.preload(T),A.current=!0)};(0,r.useEffect)((()=>(!R&&E&&null!=T&&window.docusaurus.prefetch(T),()=>{R&&N.current&&N.current.disconnect()})),[N,T,R,E]);const I=T?.startsWith("#")??!1,D=!T||!E||I;return D||h||k.collectLink(T),D?r.createElement("a",(0,o.Z)({ref:S,href:T},x&&!E&&{target:"_blank",rel:"noopener noreferrer"},g)):r.createElement(L,(0,o.Z)({},g,{onMouseEnter:O,onTouchStart:O,innerRef:e=>{S.current=e,R&&e&&E&&(N.current=new window.IntersectionObserver((t=>{t.forEach((t=>{e===t.target&&(t.isIntersecting||t.intersectionRatio>0)&&(N.current.unobserve(e),N.current.disconnect(),null!=T&&window.docusaurus.prefetch(T))}))})),N.current.observe(e))},to:T},n&&{isActive:b,activeClassName:f}))}var m=r.forwardRef(p)},11875:function(e,t){"use strict";t.Z=()=>null},95999:function(e,t,n){"use strict";n.d(t,{Z:function(){return c},I:function(){return s}});var o=n(67294);function r(e,t){const n=e.split(/(\{\w+\})/).map(((e,n)=>{if(n%2==1){const n=t?.[e.slice(1,-1)];if(void 0!==n)return n}return e}));return n.some((e=>(0,o.isValidElement)(e)))?n.map(((e,t)=>(0,o.isValidElement)(e)?o.cloneElement(e,{key:t}):e)).filter((e=>""!==e)):n.join("")}var i=n(57529);function a(e){let{id:t,message:n}=e;if(void 0===t&&void 0===n)throw new Error("Docusaurus translation declarations must have at least a translation id or a default translation message");return i[t??n]??n??t}function s(e,t){let{message:n,id:o}=e;return r(a({message:n,id:o}),t)}function c(e){let{children:t,id:n,values:i}=e;if(t&&"string"!=typeof t)throw console.warn("Illegal <Translate> children",t),new Error("The Docusaurus <Translate> component only accept simple string values");const s=a({message:t,id:n});return o.createElement(o.Fragment,null,r(s,i))}},29935:function(e,t,n){"use strict";n.d(t,{m:function(){return o}});const o="default"},13919:function(e,t,n){"use strict";function o(e){return/^(?:\w*:|\/\/)/.test(e)}function r(e){return void 0!==e&&!o(e)}n.d(t,{Z:function(){return r},b:function(){return o}})},44996:function(e,t,n){"use strict";n.d(t,{C:function(){return a},Z:function(){return s}});var o=n(67294),r=n(52263),i=n(13919);function a(){const{siteConfig:{baseUrl:e,url:t}}=(0,r.Z)(),n=(0,o.useCallback)(((n,o)=>function(e,t,n,o){let{forcePrependBaseUrl:r=!1,absolute:a=!1}=void 0===o?{}:o;if(!n||n.startsWith("#")||(0,i.b)(n))return n;if(r)return t+n.replace(/^\//,"");if(n===t.replace(/\/$/,""))return t;const s=n.startsWith(t)?n:t+n.replace(/^\//,"");return a?e+s:s}(t,e,n,o)),[t,e]);return{withBaseUrl:n}}function s(e,t){void 0===t&&(t={});const{withBaseUrl:n}=a();return n(e,t)}},52263:function(e,t,n){"use strict";n.d(t,{Z:function(){return i}});var o=n(67294),r=n(58940);function i(){return(0,o.useContext)(r._)}},72389:function(e,t,n){"use strict";n.d(t,{Z:function(){return i}});var o=n(67294),r=n(98934);function i(){return(0,o.useContext)(r._)}},99670:function(e,t,n){"use strict";n.d(t,{Z:function(){return r}});const o=e=>"object"==typeof e&&!!e&&Object.keys(e).length>0;function r(e){const t={};return function e(n,r){Object.entries(n).forEach((n=>{let[i,a]=n;const s=r?`${r}.${i}`:i;o(a)?e(a,s):t[s]=a}))}(e),t}},30226:function(e,t,n){"use strict";n.d(t,{_:function(){return r},z:function(){return i}});var o=n(67294);const r=o.createContext(null);function i(e){let{children:t,value:n}=e;const i=o.useContext(r),a=(0,o.useMemo)((()=>function(e){let{parent:t,value:n}=e;if(!t){if(!n)throw new Error("Unexpected: no Docusaurus route context found");if(!("plugin"in n))throw new Error("Unexpected: Docusaurus topmost route context has no `plugin` attribute");return n}const o={...t.data,...n?.data};return{plugin:t.plugin,data:o}}({parent:i,value:n})),[i,n]);return o.createElement(r.Provider,{value:a},t)}},80143:function(e,t,n){"use strict";n.d(t,{Iw:function(){return b},gA:function(){return p},_r:function(){return l},zh:function(){return u},yW:function(){return f},gB:function(){return m}});var o=n(16550),r=n(52263),i=n(29935);function a(e,t){void 0===t&&(t={});const n=function(){const{globalData:e}=(0,r.Z)();return e}()[e];if(!n&&t.failfast)throw new Error(`Docusaurus plugin global data not found for "${e}" plugin.`);return n}const s=e=>e.versions.find((e=>e.isLast));function c(e,t){const n=function(e,t){const n=s(e);return[...e.versions.filter((e=>e!==n)),n].find((e=>!!(0,o.LX)(t,{path:e.path,exact:!1,strict:!1})))}(e,t),r=n?.docs.find((e=>!!(0,o.LX)(t,{path:e.path,exact:!0,strict:!1})));return{activeVersion:n,activeDoc:r,alternateDocVersions:r?function(t){const n={};return e.versions.forEach((e=>{e.docs.forEach((o=>{o.id===t&&(n[e.name]=o)}))})),n}(r.id):{}}}const d={},l=()=>a("docusaurus-plugin-content-docs")??d,u=e=>function(e,t,n){void 0===t&&(t=i.m),void 0===n&&(n={});const o=a(e),r=o?.[t];if(!r&&n.failfast)throw new Error(`Docusaurus plugin global data not found for "${e}" plugin with id "${t}".`);return r}("docusaurus-plugin-content-docs",e,{failfast:!0});function p(e){void 0===e&&(e={});const t=l(),{pathname:n}=(0,o.TH)();return function(e,t,n){void 0===n&&(n={});const r=Object.entries(e).sort(((e,t)=>t[1].path.localeCompare(e[1].path))).find((e=>{let[,n]=e;return!!(0,o.LX)(t,{path:n.path,exact:!1,strict:!1})})),i=r?{pluginId:r[0],pluginData:r[1]}:void 0;if(!i&&n.failfast)throw new Error(`Can't find active docs plugin for "${t}" pathname, while it was expected to be found. Maybe you tried to use a docs feature that can only be used on a docs-related page? Existing docs plugin paths are: ${Object.values(e).map((e=>e.path)).join(", ")}`);return i}(t,n,e)}function m(e){return u(e).versions}function f(e){const t=u(e);return s(t)}function b(e){const t=u(e),{pathname:n}=(0,o.TH)();return c(t,n)}},18320:function(e,t,n){"use strict";n.r(t);var o=n(74865),r=n.n(o);r().configure({showSpinner:!1});const i={onRouteUpdate(e){let{location:t,previousLocation:n}=e;if(n&&t.pathname!==n.pathname){const e=window.setTimeout((()=>{r().start()}),200);return()=>window.clearTimeout(e)}},onRouteDidUpdate(){r().done()}};t.default=i},3310:function(e,t,n){"use strict";n.r(t);var o=n(11205),r=n(36809);!function(e){const{themeConfig:{prism:t}}=r.default,{additionalLanguages:o}=t;globalThis.Prism=e,o.forEach((e=>{n(6726)(`./prism-${e}`)})),delete globalThis.Prism}(o.Z)},39471:function(e,t,n){"use strict";n.d(t,{Z:function(){return i}});var o=n(67294),r={iconExternalLink:"iconExternalLink_nPIU"};function i(e){let{width:t=13.5,height:n=13.5}=e;return o.createElement("svg",{width:t,height:n,"aria-hidden":"true",viewBox:"0 0 24 24",className:r.iconExternalLink},o.createElement("path",{fill:"currentColor",d:"M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"}))}},7961:function(e,t,n){"use strict";n.d(t,{Z:function(){return ut}});var o=n(67294),r=n(34334),i=n(44763),a=n(1944),s=n(83117),c=n(16550),d=n(95999),l=n(85936);const u="docusaurus_skipToContent_fallback";function p(e){e.setAttribute("tabindex","-1"),e.focus(),e.removeAttribute("tabindex")}function m(){const e=(0,o.useRef)(null),{action:t}=(0,c.k6)(),n=(0,o.useCallback)((e=>{e.preventDefault();const t=document.querySelector("main:first-of-type")??document.getElementById(u);t&&p(t)}),[]);return(0,l.S)((n=>{let{location:o}=n;e.current&&!o.hash&&"PUSH"===t&&p(e.current)})),{containerRef:e,onClick:n}}const f=(0,d.I)({id:"theme.common.skipToMainContent",description:"The skip to content label used for accessibility, allowing to rapidly navigate to main content with keyboard tab/enter navigation",message:"Skip to main content"});function b(e){const t=e.children??f,{containerRef:n,onClick:r}=m();return o.createElement("div",{ref:n,role:"region","aria-label":f},o.createElement("a",(0,s.Z)({},e,{href:`#${u}`,onClick:r}),t))}var h=n(35281),v=n(19727),g={skipToContent:"skipToContent_fXgn"};function y(){return o.createElement(b,{className:g.skipToContent})}var w=n(86668),_=n(59689);function k(e){let{width:t=21,height:n=21,color:r="currentColor",strokeWidth:i=1.2,className:a,...c}=e;return o.createElement("svg",(0,s.Z)({viewBox:"0 0 15 15",width:t,height:n},c),o.createElement("g",{stroke:r,strokeWidth:i},o.createElement("path",{d:"M.75.75l13.5 13.5M14.25.75L.75 14.25"})))}var S={closeButton:"closeButton_CVFx"};function x(e){return o.createElement("button",(0,s.Z)({type:"button","aria-label":(0,d.I)({id:"theme.AnnouncementBar.closeButtonAriaLabel",message:"Close",description:"The ARIA label for close button of announcement bar"})},e,{className:(0,r.Z)("clean-btn close",S.closeButton,e.className)}),o.createElement(k,{width:14,height:14,strokeWidth:3.1}))}var E={content:"content_knG7"};function C(e){const{announcementBar:t}=(0,w.L)(),{content:n}=t;return o.createElement("div",(0,s.Z)({},e,{className:(0,r.Z)(E.content,e.className),dangerouslySetInnerHTML:{__html:n}}))}var T={announcementBar:"announcementBar_mb4j",announcementBarPlaceholder:"announcementBarPlaceholder_vyr4",announcementBarClose:"announcementBarClose_gvF7",announcementBarContent:"announcementBarContent_xLdY"};function P(){const{announcementBar:e}=(0,w.L)(),{isActive:t,close:n}=(0,_.nT)();if(!t)return null;const{backgroundColor:r,textColor:i,isCloseable:a}=e;return o.createElement("div",{className:T.announcementBar,style:{backgroundColor:r,color:i},role:"banner"},a&&o.createElement("div",{className:T.announcementBarPlaceholder}),o.createElement(C,{className:T.announcementBarContent}),a&&o.createElement(x,{onClick:n,className:T.announcementBarClose}))}var A=n(72961),L=n(12466);var R=n(902),N=n(13102);const O=o.createContext(null);function I(e){let{children:t}=e;const n=function(){const e=(0,A.e)(),t=(0,N.HY)(),[n,r]=(0,o.useState)(!1),i=null!==t.component,a=(0,R.D9)(i);return(0,o.useEffect)((()=>{i&&!a&&r(!0)}),[i,a]),(0,o.useEffect)((()=>{i?e.shown||r(!0):r(!1)}),[e.shown,i]),(0,o.useMemo)((()=>[n,r]),[n])}();return o.createElement(O.Provider,{value:n},t)}function D(e){if(e.component){const t=e.component;return o.createElement(t,e.props)}}function M(){const e=(0,o.useContext)(O);if(!e)throw new R.i6("NavbarSecondaryMenuDisplayProvider");const[t,n]=e,r=(0,o.useCallback)((()=>n(!1)),[n]),i=(0,N.HY)();return(0,o.useMemo)((()=>({shown:t,hide:r,content:D(i)})),[r,i,t])}function B(e){let{header:t,primaryMenu:n,secondaryMenu:i}=e;const{shown:a}=M();return o.createElement("div",{className:"navbar-sidebar"},t,o.createElement("div",{className:(0,r.Z)("navbar-sidebar__items",{"navbar-sidebar__items--show-secondary":a})},o.createElement("div",{className:"navbar-sidebar__item menu"},n),o.createElement("div",{className:"navbar-sidebar__item menu"},i)))}var F=n(92949),z=n(72389);function j(e){return o.createElement("svg",(0,s.Z)({viewBox:"0 0 24 24",width:24,height:24},e),o.createElement("path",{fill:"currentColor",d:"M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"}))}function U(e){return o.createElement("svg",(0,s.Z)({viewBox:"0 0 24 24",width:24,height:24},e),o.createElement("path",{fill:"currentColor",d:"M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"}))}var $={toggle:"toggle_vylO",toggleButton:"toggleButton_gllP",darkToggleIcon:"darkToggleIcon_wfgR",lightToggleIcon:"lightToggleIcon_pyhR",toggleButtonDisabled:"toggleButtonDisabled_aARS"};function q(e){let{className:t,buttonClassName:n,value:i,onChange:a}=e;const s=(0,z.Z)(),c=(0,d.I)({message:"Switch between dark and light mode (currently {mode})",id:"theme.colorToggle.ariaLabel",description:"The ARIA label for the navbar color mode toggle"},{mode:"dark"===i?(0,d.I)({message:"dark mode",id:"theme.colorToggle.ariaLabel.mode.dark",description:"The name for the dark color mode"}):(0,d.I)({message:"light mode",id:"theme.colorToggle.ariaLabel.mode.light",description:"The name for the light color mode"})});return o.createElement("div",{className:(0,r.Z)($.toggle,t)},o.createElement("button",{className:(0,r.Z)("clean-btn",$.toggleButton,!s&&$.toggleButtonDisabled,n),type:"button",onClick:()=>a("dark"===i?"light":"dark"),disabled:!s,title:c,"aria-label":c,"aria-live":"polite"},o.createElement(j,{className:(0,r.Z)($.toggleIcon,$.lightToggleIcon)}),o.createElement(U,{className:(0,r.Z)($.toggleIcon,$.darkToggleIcon)})))}var H=o.memo(q),G={darkNavbarColorModeToggle:"darkNavbarColorModeToggle_X3D1"};function Z(e){let{className:t}=e;const n=(0,w.L)().navbar.style,r=(0,w.L)().colorMode.disableSwitch,{colorMode:i,setColorMode:a}=(0,F.I)();return r?null:o.createElement(H,{className:t,buttonClassName:"dark"===n?G.darkNavbarColorModeToggle:void 0,value:i,onChange:a})}var V=n(21327);function W(){return o.createElement(V.Z,{className:"navbar__brand",imageClassName:"navbar__logo",titleClassName:"navbar__title text--truncate"})}function K(){const e=(0,A.e)();return o.createElement("button",{type:"button","aria-label":(0,d.I)({id:"theme.docs.sidebar.closeSidebarButtonAriaLabel",message:"Close navigation bar",description:"The ARIA label for close button of mobile sidebar"}),className:"clean-btn navbar-sidebar__close",onClick:()=>e.toggle()},o.createElement(k,{color:"var(--ifm-color-emphasis-600)"}))}function Y(){return o.createElement("div",{className:"navbar-sidebar__brand"},o.createElement(W,null),o.createElement(Z,{className:"margin-right--md"}),o.createElement(K,null))}var Q=n(39960),X=n(44996),J=n(13919);function ee(e,t){return void 0!==e&&void 0!==t&&new RegExp(e,"gi").test(t)}var te=n(39471);function ne(e){let{activeBasePath:t,activeBaseRegex:n,to:r,href:i,label:a,html:c,isDropdownLink:d,prependBaseUrlToHref:l,...u}=e;const p=(0,X.Z)(r),m=(0,X.Z)(t),f=(0,X.Z)(i,{forcePrependBaseUrl:!0}),b=a&&i&&!(0,J.Z)(i),h=c?{dangerouslySetInnerHTML:{__html:c}}:{children:o.createElement(o.Fragment,null,a,b&&o.createElement(te.Z,d&&{width:12,height:12}))};return i?o.createElement(Q.Z,(0,s.Z)({href:l?f:i},u,h)):o.createElement(Q.Z,(0,s.Z)({to:p,isNavLink:!0},(t||n)&&{isActive:(e,t)=>n?ee(n,t.pathname):t.pathname.startsWith(m)},u,h))}function oe(e){let{className:t,isDropdownItem:n=!1,...i}=e;const a=o.createElement(ne,(0,s.Z)({className:(0,r.Z)(n?"dropdown__link":"navbar__item navbar__link",t),isDropdownLink:n},i));return n?o.createElement("li",null,a):a}function re(e){let{className:t,isDropdownItem:n,...i}=e;return o.createElement("li",{className:"menu__list-item"},o.createElement(ne,(0,s.Z)({className:(0,r.Z)("menu__link",t)},i)))}function ie(e){let{mobile:t=!1,position:n,...r}=e;const i=t?re:oe;return o.createElement(i,(0,s.Z)({},r,{activeClassName:r.activeClassName??(t?"menu__link--active":"navbar__link--active")}))}var ae=n(86043),se=n(48596),ce=n(52263);function de(e,t){return e.some((e=>function(e,t){return!!(0,se.Mg)(e.to,t)||!!ee(e.activeBaseRegex,t)||!(!e.activeBasePath||!t.startsWith(e.activeBasePath))}(e,t)))}function le(e){let{items:t,position:n,className:i,onClick:a,...c}=e;const d=(0,o.useRef)(null),[l,u]=(0,o.useState)(!1);return(0,o.useEffect)((()=>{const e=e=>{d.current&&!d.current.contains(e.target)&&u(!1)};return document.addEventListener("mousedown",e),document.addEventListener("touchstart",e),document.addEventListener("focusin",e),()=>{document.removeEventListener("mousedown",e),document.removeEventListener("touchstart",e),document.removeEventListener("focusin",e)}}),[d]),o.createElement("div",{ref:d,className:(0,r.Z)("navbar__item","dropdown","dropdown--hoverable",{"dropdown--right":"right"===n,"dropdown--show":l})},o.createElement(ne,(0,s.Z)({"aria-haspopup":"true","aria-expanded":l,role:"button",href:c.to?void 0:"#",className:(0,r.Z)("navbar__link",i)},c,{onClick:c.to?void 0:e=>e.preventDefault(),onKeyDown:e=>{"Enter"===e.key&&(e.preventDefault(),u(!l))}}),c.children??c.label),o.createElement("ul",{className:"dropdown__menu"},t.map(((e,t)=>o.createElement(xe,(0,s.Z)({isDropdownItem:!0,activeClassName:"dropdown__link--active"},e,{key:t}))))))}function ue(e){let{items:t,className:n,position:i,onClick:a,...d}=e;const l=function(){const{siteConfig:{baseUrl:e}}=(0,ce.Z)(),{pathname:t}=(0,c.TH)();return t.replace(e,"/")}(),u=de(t,l),{collapsed:p,toggleCollapsed:m,setCollapsed:f}=(0,ae.u)({initialState:()=>!u});return(0,o.useEffect)((()=>{u&&f(!u)}),[l,u,f]),o.createElement("li",{className:(0,r.Z)("menu__list-item",{"menu__list-item--collapsed":p})},o.createElement(ne,(0,s.Z)({role:"button",className:(0,r.Z)("menu__link menu__link--sublist menu__link--sublist-caret",n)},d,{onClick:e=>{e.preventDefault(),m()}}),d.children??d.label),o.createElement(ae.z,{lazy:!0,as:"ul",className:"menu__list",collapsed:p},t.map(((e,t)=>o.createElement(xe,(0,s.Z)({mobile:!0,isDropdownItem:!0,onClick:a,activeClassName:"menu__link--active"},e,{key:t}))))))}function pe(e){let{mobile:t=!1,...n}=e;const r=t?ue:le;return o.createElement(r,n)}var me=n(94711);function fe(e){let{width:t=20,height:n=20,...r}=e;return o.createElement("svg",(0,s.Z)({viewBox:"0 0 24 24",width:t,height:n,"aria-hidden":!0},r),o.createElement("path",{fill:"currentColor",d:"M12.87 15.07l-2.54-2.51.03-.03c1.74-1.94 2.98-4.17 3.71-6.53H17V4h-7V2H8v2H1v1.99h11.17C11.5 7.92 10.44 9.75 9 11.35 8.07 10.32 7.3 9.19 6.69 8h-2c.73 1.63 1.73 3.17 2.98 4.56l-5.09 5.02L4 19l5-5 3.11 3.11.76-2.04zM18.5 10h-2L12 22h2l1.12-3h4.75L21 22h2l-4.5-12zm-2.62 7l1.62-4.33L19.12 17h-3.24z"}))}var be="iconLanguage_nlXk";var he=n(11875),ve={searchBox:"searchBox_ZlJk"};function ge(e){let{children:t,className:n}=e;return o.createElement("div",{className:(0,r.Z)(n,ve.searchBox)},t)}var ye=n(80143),we=n(52802);var _e=n(60373);const ke=e=>e.docs.find((t=>t.id===e.mainDocId));var Se={default:ie,localeDropdown:function(e){let{mobile:t,dropdownItemsBefore:n,dropdownItemsAfter:r,...i}=e;const{i18n:{currentLocale:a,locales:l,localeConfigs:u}}=(0,ce.Z)(),p=(0,me.l)(),{search:m,hash:f}=(0,c.TH)(),b=[...n,...l.map((e=>{const n=`${`pathname://${p.createUrl({locale:e,fullyQualified:!1})}`}${m}${f}`;return{label:u[e].label,lang:u[e].htmlLang,to:n,target:"_self",autoAddBaseUrl:!1,className:e===a?t?"menu__link--active":"dropdown__link--active":""}})),...r],h=t?(0,d.I)({message:"Languages",id:"theme.navbar.mobileLanguageDropdown.label",description:"The label for the mobile language switcher dropdown"}):u[a].label;return o.createElement(pe,(0,s.Z)({},i,{mobile:t,label:o.createElement(o.Fragment,null,o.createElement(fe,{className:be}),h),items:b}))},search:function(e){let{mobile:t,className:n}=e;return t?null:o.createElement(ge,{className:n},o.createElement(he.Z,null))},dropdown:pe,html:function(e){let{value:t,className:n,mobile:i=!1,isDropdownItem:a=!1}=e;const s=a?"li":"div";return o.createElement(s,{className:(0,r.Z)({navbar__item:!i&&!a,"menu__list-item":i},n),dangerouslySetInnerHTML:{__html:t}})},doc:function(e){let{docId:t,label:n,docsPluginId:r,...i}=e;const{activeDoc:a}=(0,ye.Iw)(r),c=(0,we.vY)(t,r);return null===c?null:o.createElement(ie,(0,s.Z)({exact:!0},i,{isActive:()=>a?.path===c.path||!!a?.sidebar&&a.sidebar===c.sidebar,label:n??c.id,to:c.path}))},docSidebar:function(e){let{sidebarId:t,label:n,docsPluginId:r,...i}=e;const{activeDoc:a}=(0,ye.Iw)(r),c=(0,we.oz)(t,r).link;if(!c)throw new Error(`DocSidebarNavbarItem: Sidebar with ID "${t}" doesn't have anything to be linked to.`);return o.createElement(ie,(0,s.Z)({exact:!0},i,{isActive:()=>a?.sidebar===t,label:n??c.label,to:c.path}))},docsVersion:function(e){let{label:t,to:n,docsPluginId:r,...i}=e;const a=(0,we.lO)(r)[0],c=t??a.label,d=n??(e=>e.docs.find((t=>t.id===e.mainDocId)))(a).path;return o.createElement(ie,(0,s.Z)({},i,{label:c,to:d}))},docsVersionDropdown:function(e){let{mobile:t,docsPluginId:n,dropdownActiveClassDisabled:r,dropdownItemsBefore:i,dropdownItemsAfter:a,...l}=e;const{search:u,hash:p}=(0,c.TH)(),m=(0,ye.Iw)(n),f=(0,ye.gB)(n),{savePreferredVersionName:b}=(0,_e.J)(n),h=[...i,...f.map((e=>{const t=m.alternateDocVersions[e.name]??ke(e);return{label:e.label,to:`${t.path}${u}${p}`,isActive:()=>e===m.activeVersion,onClick:()=>b(e.name)}})),...a],v=(0,we.lO)(n)[0],g=t&&h.length>1?(0,d.I)({id:"theme.navbar.mobileVersionsDropdown.label",message:"Versions",description:"The label for the navbar versions dropdown on mobile view"}):v.label,y=t&&h.length>1?void 0:ke(v).path;return h.length<=1?o.createElement(ie,(0,s.Z)({},l,{mobile:t,label:g,to:y,isActive:r?()=>!1:void 0})):o.createElement(pe,(0,s.Z)({},l,{mobile:t,label:g,to:y,items:h,isActive:r?()=>!1:void 0}))}};function xe(e){let{type:t,...n}=e;const r=function(e,t){return e&&"default"!==e?e:"items"in t?"dropdown":"default"}(t,n),i=Se[r];if(!i)throw new Error(`No NavbarItem component found for type "${t}".`);return o.createElement(i,n)}function Ee(){const e=(0,A.e)(),t=(0,w.L)().navbar.items;return o.createElement("ul",{className:"menu__list"},t.map(((t,n)=>o.createElement(xe,(0,s.Z)({mobile:!0},t,{onClick:()=>e.toggle(),key:n})))))}function Ce(e){return o.createElement("button",(0,s.Z)({},e,{type:"button",className:"clean-btn navbar-sidebar__back"}),o.createElement(d.Z,{id:"theme.navbar.mobileSidebarSecondaryMenu.backButtonLabel",description:"The label of the back button to return to main menu, inside the mobile navbar sidebar secondary menu (notably used to display the docs sidebar)"},"\u2190 Back to main menu"))}function Te(){const e=0===(0,w.L)().navbar.items.length,t=M();return o.createElement(o.Fragment,null,!e&&o.createElement(Ce,{onClick:()=>t.hide()}),t.content)}function Pe(){const e=(0,A.e)();var t;return void 0===(t=e.shown)&&(t=!0),(0,o.useEffect)((()=>(document.body.style.overflow=t?"hidden":"visible",()=>{document.body.style.overflow="visible"})),[t]),e.shouldRender?o.createElement(B,{header:o.createElement(Y,null),primaryMenu:o.createElement(Ee,null),secondaryMenu:o.createElement(Te,null)}):null}var Ae={navbarHideable:"navbarHideable_m1mJ",navbarHidden:"navbarHidden_jGov"};function Le(e){return o.createElement("div",(0,s.Z)({role:"presentation"},e,{className:(0,r.Z)("navbar-sidebar__backdrop",e.className)}))}function Re(e){let{children:t}=e;const{navbar:{hideOnScroll:n,style:i}}=(0,w.L)(),a=(0,A.e)(),{navbarRef:s,isNavbarVisible:c}=function(e){const[t,n]=(0,o.useState)(e),r=(0,o.useRef)(!1),i=(0,o.useRef)(0),a=(0,o.useCallback)((e=>{null!==e&&(i.current=e.getBoundingClientRect().height)}),[]);return(0,L.RF)(((t,o)=>{let{scrollY:a}=t;if(!e)return;if(a<i.current)return void n(!0);if(r.current)return void(r.current=!1);const s=o?.scrollY,c=document.documentElement.scrollHeight-i.current,d=window.innerHeight;s&&a>=s?n(!1):a+d<c&&n(!0)})),(0,l.S)((t=>{if(!e)return;const o=t.location.hash;if(o?document.getElementById(o.substring(1)):void 0)return r.current=!0,void n(!1);n(!0)})),{navbarRef:a,isNavbarVisible:t}}(n);return o.createElement("nav",{ref:s,"aria-label":(0,d.I)({id:"theme.NavBar.navAriaLabel",message:"Main",description:"The ARIA label for the main navigation"}),className:(0,r.Z)("navbar","navbar--fixed-top",n&&[Ae.navbarHideable,!c&&Ae.navbarHidden],{"navbar--dark":"dark"===i,"navbar--primary":"primary"===i,"navbar-sidebar--show":a.shown})},t,o.createElement(Le,{onClick:a.toggle}),o.createElement(Pe,null))}var Ne=n(18780),Oe={errorBoundaryError:"errorBoundaryError_a6uf"};function Ie(e){return o.createElement("button",(0,s.Z)({type:"button"},e),o.createElement(d.Z,{id:"theme.ErrorPageContent.tryAgain",description:"The label of the button to try again rendering when the React error boundary captures an error"},"Try again"))}function De(e){let{error:t}=e;const n=(0,Ne.getErrorCausalChain)(t).map((e=>e.message)).join("\n\nCause:\n");return o.createElement("p",{className:Oe.errorBoundaryError},n)}class Me extends o.Component{componentDidCatch(e,t){throw this.props.onError(e,t)}render(){return this.props.children}}const Be="right";function Fe(e){let{width:t=30,height:n=30,className:r,...i}=e;return o.createElement("svg",(0,s.Z)({className:r,width:t,height:n,viewBox:"0 0 30 30","aria-hidden":"true"},i),o.createElement("path",{stroke:"currentColor",strokeLinecap:"round",strokeMiterlimit:"10",strokeWidth:"2",d:"M4 7h22M4 15h22M4 23h22"}))}function ze(){const{toggle:e,shown:t}=(0,A.e)();return o.createElement("button",{onClick:e,"aria-label":(0,d.I)({id:"theme.docs.sidebar.toggleSidebarButtonAriaLabel",message:"Toggle navigation bar",description:"The ARIA label for hamburger menu button of mobile navigation"}),"aria-expanded":t,className:"navbar__toggle clean-btn",type:"button"},o.createElement(Fe,null))}var je={colorModeToggle:"colorModeToggle_DEke"};function Ue(e){let{items:t}=e;return o.createElement(o.Fragment,null,t.map(((e,t)=>o.createElement(Me,{key:t,onError:t=>new Error(`A theme navbar item failed to render.\nPlease double-check the following navbar item (themeConfig.navbar.items) of your Docusaurus config:\n${JSON.stringify(e,null,2)}`,{cause:t})},o.createElement(xe,e)))))}function $e(e){let{left:t,right:n}=e;return o.createElement("div",{className:"navbar__inner"},o.createElement("div",{className:"navbar__items"},t),o.createElement("div",{className:"navbar__items navbar__items--right"},n))}function qe(){const e=(0,A.e)(),t=(0,w.L)().navbar.items,[n,r]=function(e){function t(e){return"left"===(e.position??Be)}return[e.filter(t),e.filter((e=>!t(e)))]}(t),i=t.find((e=>"search"===e.type));return o.createElement($e,{left:o.createElement(o.Fragment,null,!e.disabled&&o.createElement(ze,null),o.createElement(W,null),o.createElement(Ue,{items:n})),right:o.createElement(o.Fragment,null,o.createElement(Ue,{items:r}),o.createElement(Z,{className:je.colorModeToggle}),!i&&o.createElement(ge,null,o.createElement(he.Z,null)))})}function He(){return o.createElement(Re,null,o.createElement(qe,null))}function Ge(e){let{item:t}=e;const{to:n,href:r,label:i,prependBaseUrlToHref:a,...c}=t,d=(0,X.Z)(n),l=(0,X.Z)(r,{forcePrependBaseUrl:!0});return o.createElement(Q.Z,(0,s.Z)({className:"footer__link-item"},r?{href:a?l:r}:{to:d},c),i,r&&!(0,J.Z)(r)&&o.createElement(te.Z,null))}function Ze(e){let{item:t}=e;return t.html?o.createElement("li",{className:"footer__item",dangerouslySetInnerHTML:{__html:t.html}}):o.createElement("li",{key:t.href??t.to,className:"footer__item"},o.createElement(Ge,{item:t}))}function Ve(e){let{column:t}=e;return o.createElement("div",{className:"col footer__col"},o.createElement("div",{className:"footer__title"},t.title),o.createElement("ul",{className:"footer__items clean-list"},t.items.map(((e,t)=>o.createElement(Ze,{key:t,item:e})))))}function We(e){let{columns:t}=e;return o.createElement("div",{className:"row footer__links"},t.map(((e,t)=>o.createElement(Ve,{key:t,column:e}))))}function Ke(){return o.createElement("span",{className:"footer__link-separator"},"\xb7")}function Ye(e){let{item:t}=e;return t.html?o.createElement("span",{className:"footer__link-item",dangerouslySetInnerHTML:{__html:t.html}}):o.createElement(Ge,{item:t})}function Qe(e){let{links:t}=e;return o.createElement("div",{className:"footer__links text--center"},o.createElement("div",{className:"footer__links"},t.map(((e,n)=>o.createElement(o.Fragment,{key:n},o.createElement(Ye,{item:e}),t.length!==n+1&&o.createElement(Ke,null))))))}function Xe(e){let{links:t}=e;return function(e){return"title"in e[0]}(t)?o.createElement(We,{columns:t}):o.createElement(Qe,{links:t})}var Je=n(50941),et={footerLogoLink:"footerLogoLink_BH7S"};function tt(e){let{logo:t}=e;const{withBaseUrl:n}=(0,X.C)(),i={light:n(t.src),dark:n(t.srcDark??t.src)};return o.createElement(Je.Z,{className:(0,r.Z)("footer__logo",t.className),alt:t.alt,sources:i,width:t.width,height:t.height,style:t.style})}function nt(e){let{logo:t}=e;return t.href?o.createElement(Q.Z,{href:t.href,className:et.footerLogoLink,target:t.target},o.createElement(tt,{logo:t})):o.createElement(tt,{logo:t})}function ot(e){let{copyright:t}=e;return o.createElement("div",{className:"footer__copyright",dangerouslySetInnerHTML:{__html:t}})}function rt(e){let{style:t,links:n,logo:i,copyright:a}=e;return o.createElement("footer",{className:(0,r.Z)("footer",{"footer--dark":"dark"===t})},o.createElement("div",{className:"container container-fluid"},n,(i||a)&&o.createElement("div",{className:"footer__bottom text--center"},i&&o.createElement("div",{className:"margin-bottom--sm"},i),a)))}function it(){const{footer:e}=(0,w.L)();if(!e)return null;const{copyright:t,links:n,logo:r,style:i}=e;return o.createElement(rt,{style:i,links:n&&n.length>0&&o.createElement(Xe,{links:n}),logo:r&&o.createElement(nt,{logo:r}),copyright:t&&o.createElement(ot,{copyright:t})})}var at=o.memo(it);const st=(0,R.Qc)([F.S,_.pl,L.OC,_e.L5,a.VC,function(e){let{children:t}=e;return o.createElement(N.n2,null,o.createElement(A.M,null,o.createElement(I,null,t)))}]);function ct(e){let{children:t}=e;return o.createElement(st,null,t)}function dt(e){let{error:t,tryAgain:n}=e;return o.createElement("main",{className:"container margin-vert--xl"},o.createElement("div",{className:"row"},o.createElement("div",{className:"col col--6 col--offset-3"},o.createElement("h1",{className:"hero__title"},o.createElement(d.Z,{id:"theme.ErrorPageContent.title",description:"The title of the fallback page when the page crashed"},"This page crashed.")),o.createElement("div",{className:"margin-vert--lg"},o.createElement(Ie,{onClick:n,className:"button button--primary shadow--lw"})),o.createElement("hr",null),o.createElement("div",{className:"margin-vert--md"},o.createElement(De,{error:t})))))}var lt={mainWrapper:"mainWrapper_z2l0"};function ut(e){const{children:t,noFooter:n,wrapperClassName:s,title:c,description:d}=e;return(0,v.t)(),o.createElement(ct,null,o.createElement(a.d,{title:c,description:d}),o.createElement(y,null),o.createElement(P,null),o.createElement(He,null),o.createElement("div",{id:u,className:(0,r.Z)(h.k.wrapper.main,lt.mainWrapper,s)},o.createElement(i.Z,{fallback:e=>o.createElement(dt,e)},t)),!n&&o.createElement(at,null))}},21327:function(e,t,n){"use strict";n.d(t,{Z:function(){return u}});var o=n(83117),r=n(67294),i=n(39960),a=n(44996),s=n(52263),c=n(86668),d=n(50941);function l(e){let{logo:t,alt:n,imageClassName:o}=e;const i={light:(0,a.Z)(t.src),dark:(0,a.Z)(t.srcDark||t.src)},s=r.createElement(d.Z,{className:t.className,sources:i,height:t.height,width:t.width,alt:n,style:t.style});return o?r.createElement("div",{className:o},s):s}function u(e){const{siteConfig:{title:t}}=(0,s.Z)(),{navbar:{title:n,logo:d}}=(0,c.L)(),{imageClassName:u,titleClassName:p,...m}=e,f=(0,a.Z)(d?.href||"/"),b=n?"":t,h=d?.alt??b;return r.createElement(i.Z,(0,o.Z)({to:f},m,d?.target&&{target:d.target}),d&&r.createElement(l,{logo:d,alt:h,imageClassName:u}),null!=n&&r.createElement("b",{className:p},n))}},90197:function(e,t,n){"use strict";n.d(t,{Z:function(){return i}});var o=n(67294),r=n(35742);function i(e){let{locale:t,version:n,tag:i}=e;const a=t;return o.createElement(r.Z,null,t&&o.createElement("meta",{name:"docusaurus_locale",content:t}),n&&o.createElement("meta",{name:"docusaurus_version",content:n}),i&&o.createElement("meta",{name:"docusaurus_tag",content:i}),a&&o.createElement("meta",{name:"docsearch:language",content:a}),n&&o.createElement("meta",{name:"docsearch:version",content:n}),i&&o.createElement("meta",{name:"docsearch:docusaurus_tag",content:i}))}},50941:function(e,t,n){"use strict";n.d(t,{Z:function(){return d}});var o=n(83117),r=n(67294),i=n(34334),a=n(72389),s=n(92949),c={themedImage:"themedImage_ToTc","themedImage--light":"themedImage--light_HNdA","themedImage--dark":"themedImage--dark_i4oU"};function d(e){const t=(0,a.Z)(),{colorMode:n}=(0,s.I)(),{sources:d,className:l,alt:u,...p}=e,m=t?"dark"===n?["dark"]:["light"]:["light","dark"];return r.createElement(r.Fragment,null,m.map((e=>r.createElement("img",(0,o.Z)({key:e,src:d[e],alt:u,className:(0,i.Z)(c.themedImage,c[`themedImage--${e}`],l)},p)))))}},86043:function(e,t,n){"use strict";n.d(t,{u:function(){return s},z:function(){return h}});var o=n(83117),r=n(67294),i=n(10412);const a="ease-in-out";function s(e){let{initialState:t}=e;const[n,o]=(0,r.useState)(t??!1),i=(0,r.useCallback)((()=>{o((e=>!e))}),[]);return{collapsed:n,setCollapsed:o,toggleCollapsed:i}}const c={display:"none",overflow:"hidden",height:"0px"},d={display:"block",overflow:"visible",height:"auto"};function l(e,t){const n=t?c:d;e.style.display=n.display,e.style.overflow=n.overflow,e.style.height=n.height}function u(e){if(window.matchMedia("(prefers-reduced-motion: reduce)").matches)return 0;const t=e/36;return Math.round(10*(4+15*t**.25+t/5))}function p(e){let{collapsibleRef:t,collapsed:n,animation:o}=e;const i=(0,r.useRef)(!1);(0,r.useEffect)((()=>{const e=t.current;function r(){const t=function(){const t=e.scrollHeight;return{transition:`height ${o?.duration??u(t)}ms ${o?.easing??a}`,height:`${t}px`}}();e.style.transition=t.transition,e.style.height=t.height}if(!i.current)return l(e,n),void(i.current=!0);return e.style.willChange="height",function(){const t=requestAnimationFrame((()=>{n?(r(),requestAnimationFrame((()=>{e.style.height=c.height,e.style.overflow=c.overflow}))):(e.style.display="block",requestAnimationFrame((()=>{r()})))}));return()=>cancelAnimationFrame(t)}()}),[t,n,o])}function m(e){if(!i.Z.canUseDOM)return e?c:d}function f(e){let{as:t="div",collapsed:n,children:o,animation:i,onCollapseTransitionEnd:a,className:s,disableSSRStyle:c}=e;const d=(0,r.useRef)(null);return p({collapsibleRef:d,collapsed:n,animation:i}),r.createElement(t,{ref:d,style:c?void 0:m(n),onTransitionEnd:e=>{"height"===e.propertyName&&(l(d.current,n),a?.(n))},className:s},o)}function b(e){let{collapsed:t,...n}=e;const[i,a]=(0,r.useState)(!t),[s,c]=(0,r.useState)(t);return(0,r.useLayoutEffect)((()=>{t||a(!0)}),[t]),(0,r.useLayoutEffect)((()=>{i&&c(t)}),[i,t]),i?r.createElement(f,(0,o.Z)({},n,{collapsed:s})):null}function h(e){let{lazy:t,...n}=e;const o=t?b:f;return r.createElement(o,n)}},59689:function(e,t,n){"use strict";n.d(t,{nT:function(){return f},pl:function(){return m}});var o=n(67294),r=n(72389),i=n(50012),a=n(902),s=n(86668);const c=(0,i.WA)("docusaurus.announcement.dismiss"),d=(0,i.WA)("docusaurus.announcement.id"),l=()=>"true"===c.get(),u=e=>c.set(String(e)),p=o.createContext(null);function m(e){let{children:t}=e;const n=function(){const{announcementBar:e}=(0,s.L)(),t=(0,r.Z)(),[n,i]=(0,o.useState)((()=>!!t&&l()));(0,o.useEffect)((()=>{i(l())}),[]);const a=(0,o.useCallback)((()=>{u(!0),i(!0)}),[]);return(0,o.useEffect)((()=>{if(!e)return;const{id:t}=e;let n=d.get();"annoucement-bar"===n&&(n="announcement-bar");const o=t!==n;d.set(t),o&&u(!1),!o&&l()||i(!1)}),[e]),(0,o.useMemo)((()=>({isActive:!!e&&!n,close:a})),[e,n,a])}();return o.createElement(p.Provider,{value:n},t)}function f(){const e=(0,o.useContext)(p);if(!e)throw new a.i6("AnnouncementBarProvider");return e}},92949:function(e,t,n){"use strict";n.d(t,{I:function(){return h},S:function(){return b}});var o=n(67294),r=n(10412),i=n(902),a=n(50012),s=n(86668);const c=o.createContext(void 0),d="theme",l=(0,a.WA)(d),u={light:"light",dark:"dark"},p=e=>e===u.dark?u.dark:u.light,m=e=>r.Z.canUseDOM?p(document.documentElement.getAttribute("data-theme")):p(e),f=e=>{l.set(p(e))};function b(e){let{children:t}=e;const n=function(){const{colorMode:{defaultMode:e,disableSwitch:t,respectPrefersColorScheme:n}}=(0,s.L)(),[r,i]=(0,o.useState)(m(e));(0,o.useEffect)((()=>{t&&l.del()}),[t]);const a=(0,o.useCallback)((function(t,o){void 0===o&&(o={});const{persist:r=!0}=o;t?(i(t),r&&f(t)):(i(n?window.matchMedia("(prefers-color-scheme: dark)").matches?u.dark:u.light:e),l.del())}),[n,e]);(0,o.useEffect)((()=>{document.documentElement.setAttribute("data-theme",p(r))}),[r]),(0,o.useEffect)((()=>{if(t)return;const e=e=>{if(e.key!==d)return;const t=l.get();null!==t&&a(p(t))};return window.addEventListener("storage",e),()=>window.removeEventListener("storage",e)}),[t,a]);const c=(0,o.useRef)(!1);return(0,o.useEffect)((()=>{if(t&&!n)return;const e=window.matchMedia("(prefers-color-scheme: dark)"),o=()=>{window.matchMedia("print").matches||c.current?c.current=window.matchMedia("print").matches:a(null)};return e.addListener(o),()=>e.removeListener(o)}),[a,t,n]),(0,o.useMemo)((()=>({colorMode:r,setColorMode:a,get isDarkTheme(){return r===u.dark},setLightTheme(){a(u.light)},setDarkTheme(){a(u.dark)}})),[r,a])}();return o.createElement(c.Provider,{value:n},t)}function h(){const e=(0,o.useContext)(c);if(null==e)throw new i.i6("ColorModeProvider","Please see https://docusaurus.io/docs/api/themes/configuration#use-color-mode.");return e}},60373:function(e,t,n){"use strict";n.d(t,{J:function(){return g},L5:function(){return h}});var o=n(67294),r=n(80143),i=n(29935),a=n(86668),s=n(52802),c=n(902),d=n(50012);const l=e=>`docs-preferred-version-${e}`,u={save:(e,t,n)=>{(0,d.WA)(l(e),{persistence:t}).set(n)},read:(e,t)=>(0,d.WA)(l(e),{persistence:t}).get(),clear:(e,t)=>{(0,d.WA)(l(e),{persistence:t}).del()}},p=e=>Object.fromEntries(e.map((e=>[e,{preferredVersionName:null}])));const m=o.createContext(null);function f(){const e=(0,r._r)(),t=(0,a.L)().docs.versionPersistence,n=(0,o.useMemo)((()=>Object.keys(e)),[e]),[i,s]=(0,o.useState)((()=>p(n)));(0,o.useEffect)((()=>{s(function(e){let{pluginIds:t,versionPersistence:n,allDocsData:o}=e;function r(e){const t=u.read(e,n);return o[e].versions.some((e=>e.name===t))?{preferredVersionName:t}:(u.clear(e,n),{preferredVersionName:null})}return Object.fromEntries(t.map((e=>[e,r(e)])))}({allDocsData:e,versionPersistence:t,pluginIds:n}))}),[e,t,n]);return[i,(0,o.useMemo)((()=>({savePreferredVersion:function(e,n){u.save(e,t,n),s((t=>({...t,[e]:{preferredVersionName:n}})))}})),[t])]}function b(e){let{children:t}=e;const n=f();return o.createElement(m.Provider,{value:n},t)}function h(e){let{children:t}=e;return s.cE?o.createElement(b,null,t):o.createElement(o.Fragment,null,t)}function v(){const e=(0,o.useContext)(m);if(!e)throw new c.i6("DocsPreferredVersionContextProvider");return e}function g(e){void 0===e&&(e=i.m);const t=(0,r.zh)(e),[n,a]=v(),{preferredVersionName:s}=n[e];return{preferredVersion:t.versions.find((e=>e.name===s))??null,savePreferredVersionName:(0,o.useCallback)((t=>{a.savePreferredVersion(e,t)}),[a,e])}}},1116:function(e,t,n){"use strict";n.d(t,{V:function(){return c},b:function(){return s}});var o=n(67294),r=n(902);const i=Symbol("EmptyContext"),a=o.createContext(i);function s(e){let{children:t,name:n,items:r}=e;const i=(0,o.useMemo)((()=>n&&r?{name:n,items:r}:null),[n,r]);return o.createElement(a.Provider,{value:i},t)}function c(){const e=(0,o.useContext)(a);if(e===i)throw new r.i6("DocsSidebarProvider");return e}},72961:function(e,t,n){"use strict";n.d(t,{M:function(){return p},e:function(){return m}});var o=n(67294),r=n(13102),i=n(87524),a=n(16550),s=(n(61688),n(902));function c(e){!function(e){const t=(0,a.k6)(),n=(0,s.zX)(e);(0,o.useEffect)((()=>t.block(((e,t)=>n(e,t)))),[t,n])}(((t,n)=>{if("POP"===n)return e(t,n)}))}var d=n(86668);const l=o.createContext(void 0);function u(){const e=function(){const e=(0,r.HY)(),{items:t}=(0,d.L)().navbar;return 0===t.length&&!e.component}(),t=(0,i.i)(),n=!e&&"mobile"===t,[a,s]=(0,o.useState)(!1);c((()=>{if(a)return s(!1),!1}));const l=(0,o.useCallback)((()=>{s((e=>!e))}),[]);return(0,o.useEffect)((()=>{"desktop"===t&&s(!1)}),[t]),(0,o.useMemo)((()=>({disabled:e,shouldRender:n,toggle:l,shown:a})),[e,n,l,a])}function p(e){let{children:t}=e;const n=u();return o.createElement(l.Provider,{value:n},t)}function m(){const e=o.useContext(l);if(void 0===e)throw new s.i6("NavbarMobileSidebarProvider");return e}},13102:function(e,t,n){"use strict";n.d(t,{HY:function(){return s},Zo:function(){return c},n2:function(){return a}});var o=n(67294),r=n(902);const i=o.createContext(null);function a(e){let{children:t}=e;const n=(0,o.useState)({component:null,props:null});return o.createElement(i.Provider,{value:n},t)}function s(){const e=(0,o.useContext)(i);if(!e)throw new r.i6("NavbarSecondaryMenuContentProvider");return e[0]}function c(e){let{component:t,props:n}=e;const a=(0,o.useContext)(i);if(!a)throw new r.i6("NavbarSecondaryMenuContentProvider");const[,s]=a,c=(0,r.Ql)(n);return(0,o.useEffect)((()=>{s({component:t,props:c})}),[s,t,c]),(0,o.useEffect)((()=>()=>s({component:null,props:null})),[s]),null}},19727:function(e,t,n){"use strict";n.d(t,{h:function(){return r},t:function(){return i}});var o=n(67294);const r="navigation-with-keyboard";function i(){(0,o.useEffect)((()=>{function e(e){"keydown"===e.type&&"Tab"===e.key&&document.body.classList.add(r),"mousedown"===e.type&&document.body.classList.remove(r)}return document.addEventListener("keydown",e),document.addEventListener("mousedown",e),()=>{document.body.classList.remove(r),document.removeEventListener("keydown",e),document.removeEventListener("mousedown",e)}}),[])}},87524:function(e,t,n){"use strict";n.d(t,{i:function(){return d}});var o=n(67294),r=n(10412);const i={desktop:"desktop",mobile:"mobile",ssr:"ssr"},a=996;function s(){return r.Z.canUseDOM?window.innerWidth>a?i.desktop:i.mobile:i.ssr}const c=!1;function d(){const[e,t]=(0,o.useState)((()=>c?"ssr":s()));return(0,o.useEffect)((()=>{function e(){t(s())}const n=c?window.setTimeout(e,1e3):void 0;return window.addEventListener("resize",e),()=>{window.removeEventListener("resize",e),clearTimeout(n)}}),[]),e}},35281:function(e,t,n){"use strict";n.d(t,{k:function(){return o}});const o={page:{blogListPage:"blog-list-page",blogPostPage:"blog-post-page",blogTagsListPage:"blog-tags-list-page",blogTagPostListPage:"blog-tags-post-list-page",docsDocPage:"docs-doc-page",docsTagsListPage:"docs-tags-list-page",docsTagDocListPage:"docs-tags-doc-list-page",mdxPage:"mdx-page"},wrapper:{main:"main-wrapper",blogPages:"blog-wrapper",docsPages:"docs-wrapper",mdxPages:"mdx-wrapper"},common:{editThisPage:"theme-edit-this-page",lastUpdated:"theme-last-updated",backToTopButton:"theme-back-to-top-button",codeBlock:"theme-code-block",admonition:"theme-admonition",admonitionType:e=>`theme-admonition-${e}`},layout:{},docs:{docVersionBanner:"theme-doc-version-banner",docVersionBadge:"theme-doc-version-badge",docBreadcrumbs:"theme-doc-breadcrumbs",docMarkdown:"theme-doc-markdown",docTocMobile:"theme-doc-toc-mobile",docTocDesktop:"theme-doc-toc-desktop",docFooter:"theme-doc-footer",docFooterTagsRow:"theme-doc-footer-tags-row",docFooterEditMetaRow:"theme-doc-footer-edit-meta-row",docSidebarContainer:"theme-doc-sidebar-container",docSidebarMenu:"theme-doc-sidebar-menu",docSidebarItemCategory:"theme-doc-sidebar-item-category",docSidebarItemLink:"theme-doc-sidebar-item-link",docSidebarItemCategoryLevel:e=>`theme-doc-sidebar-item-category-level-${e}`,docSidebarItemLinkLevel:e=>`theme-doc-sidebar-item-link-level-${e}`},blog:{}}},52802:function(e,t,n){"use strict";n.d(t,{Wl:function(){return p},_F:function(){return b},cE:function(){return u},hI:function(){return _},lO:function(){return g},vY:function(){return w},oz:function(){return y},s1:function(){return v}});var o=n(67294),r=n(16550),i=n(18790),a=n(80143),s=n(60373),c=n(1116);function d(e){return Array.from(new Set(e))}var l=n(48596);const u=!!a._r;function p(e){if(e.href)return e.href;for(const t of e.items){if("link"===t.type)return t.href;if("category"===t.type){const e=p(t);if(e)return e}}}const m=(e,t)=>void 0!==e&&(0,l.Mg)(e,t),f=(e,t)=>e.some((e=>b(e,t)));function b(e,t){return"link"===e.type?m(e.href,t):"category"===e.type&&(m(e.href,t)||f(e.items,t))}function h(e){let{sidebarItems:t,pathname:n,onlyCategories:o=!1}=e;const r=[];return function e(t){for(const i of t)if("category"===i.type&&((0,l.Mg)(i.href,n)||e(i.items))||"link"===i.type&&(0,l.Mg)(i.href,n)){return o&&"category"!==i.type||r.unshift(i),!0}return!1}(t),r}function v(){const e=(0,c.V)(),{pathname:t}=(0,r.TH)(),n=(0,a.gA)()?.pluginData.breadcrumbs;return!1!==n&&e?h({sidebarItems:e.items,pathname:t}):null}function g(e){const{activeVersion:t}=(0,a.Iw)(e),{preferredVersion:n}=(0,s.J)(e),r=(0,a.yW)(e);return(0,o.useMemo)((()=>d([t,n,r].filter(Boolean))),[t,n,r])}function y(e,t){const n=g(t);return(0,o.useMemo)((()=>{const t=n.flatMap((e=>e.sidebars?Object.entries(e.sidebars):[])),o=t.find((t=>t[0]===e));if(!o)throw new Error(`Can't find any sidebar with id "${e}" in version${n.length>1?"s":""} ${n.map((e=>e.name)).join(", ")}".\nAvailable sidebar ids are:\n- ${Object.keys(t).join("\n- ")}`);return o[1]}),[e,n])}function w(e,t){const n=g(t);return(0,o.useMemo)((()=>{const t=n.flatMap((e=>e.docs)),o=t.find((t=>t.id===e));if(!o){if(n.flatMap((e=>e.draftIds)).includes(e))return null;throw new Error(`Couldn't find any doc with id "${e}" in version${n.length>1?"s":""} "${n.map((e=>e.name)).join(", ")}".\nAvailable doc ids are:\n- ${d(t.map((e=>e.id))).join("\n- ")}`)}return o}),[e,n])}function _(e){let{route:t,versionMetadata:n}=e;const o=(0,r.TH)(),a=t.routes,s=a.find((e=>(0,r.LX)(o.pathname,e)));if(!s)return null;const c=s.sidebar,d=c?n.docsSidebars[c]:void 0;return{docElement:(0,i.H)(a),sidebarName:c,sidebarItems:d}}},1944:function(e,t,n){"use strict";n.d(t,{FG:function(){return p},d:function(){return l},VC:function(){return m}});var o=n(67294),r=n(87459),i=n(35742),a=n(30226);function s(){const e=o.useContext(a._);if(!e)throw new Error("Unexpected: no Docusaurus route context found");return e}var c=n(44996),d=n(52263);function l(e){let{title:t,description:n,keywords:r,image:a,children:s}=e;const l=function(e){const{siteConfig:t}=(0,d.Z)(),{title:n,titleDelimiter:o}=t;return e?.trim().length?`${e.trim()} ${o} ${n}`:n}(t),{withBaseUrl:u}=(0,c.C)(),p=a?u(a,{absolute:!0}):void 0;return o.createElement(i.Z,null,t&&o.createElement("title",null,l),t&&o.createElement("meta",{property:"og:title",content:l}),n&&o.createElement("meta",{name:"description",content:n}),n&&o.createElement("meta",{property:"og:description",content:n}),r&&o.createElement("meta",{name:"keywords",content:Array.isArray(r)?r.join(","):r}),p&&o.createElement("meta",{property:"og:image",content:p}),p&&o.createElement("meta",{name:"twitter:image",content:p}),s)}const u=o.createContext(void 0);function p(e){let{className:t,children:n}=e;const a=o.useContext(u),s=(0,r.Z)(a,t);return o.createElement(u.Provider,{value:s},o.createElement(i.Z,null,o.createElement("html",{className:s})),n)}function m(e){let{children:t}=e;const n=s(),i=`plugin-${n.plugin.name.replace(/docusaurus-(?:plugin|theme)-(?:content-)?/gi,"")}`;const a=`plugin-id-${n.plugin.id}`;return o.createElement(p,{className:(0,r.Z)(i,a)},t)}},902:function(e,t,n){"use strict";n.d(t,{D9:function(){return a},Qc:function(){return d},Ql:function(){return c},i6:function(){return s},zX:function(){return i}});var o=n(67294);const r=n(10412).Z.canUseDOM?o.useLayoutEffect:o.useEffect;function i(e){const t=(0,o.useRef)(e);return r((()=>{t.current=e}),[e]),(0,o.useCallback)((function(){return t.current(...arguments)}),[])}function a(e){const t=(0,o.useRef)();return r((()=>{t.current=e})),t.current}class s extends Error{constructor(e,t){super(),this.name="ReactContextError",this.message=`Hook ${this.stack?.split("\n")[1]?.match(/at (?:\w+\.)?(?<name>\w+)/)?.groups.name??""} is called outside the <${e}>. ${t??""}`}}function c(e){const t=Object.entries(e);return t.sort(((e,t)=>e[0].localeCompare(t[0]))),(0,o.useMemo)((()=>e),t.flat())}function d(e){return t=>{let{children:n}=t;return o.createElement(o.Fragment,null,e.reduceRight(((e,t)=>o.createElement(t,null,e)),n))}}},48596:function(e,t,n){"use strict";n.d(t,{Mg:function(){return a},Ns:function(){return s}});var o=n(67294),r=n(723),i=n(52263);function a(e,t){const n=e=>(!e||e.endsWith("/")?e:`${e}/`)?.toLowerCase();return n(e)===n(t)}function s(){const{baseUrl:e}=(0,i.Z)().siteConfig;return(0,o.useMemo)((()=>function(e){let{baseUrl:t,routes:n}=e;function o(e){return e.path===t&&!0===e.exact}function r(e){return e.path===t&&!e.exact}return function e(t){if(0===t.length)return;return t.find(o)||e(t.filter(r).flatMap((e=>e.routes??[])))}(n)}({routes:r.Z,baseUrl:e})),[e])}},12466:function(e,t,n){"use strict";n.d(t,{Ct:function(){return p},OC:function(){return c},RF:function(){return u}});var o=n(67294),r=n(10412),i=n(72389),a=n(902);const s=o.createContext(void 0);function c(e){let{children:t}=e;const n=function(){const e=(0,o.useRef)(!0);return(0,o.useMemo)((()=>({scrollEventsEnabledRef:e,enableScrollEvents:()=>{e.current=!0},disableScrollEvents:()=>{e.current=!1}})),[])}();return o.createElement(s.Provider,{value:n},t)}function d(){const e=(0,o.useContext)(s);if(null==e)throw new a.i6("ScrollControllerProvider");return e}const l=()=>r.Z.canUseDOM?{scrollX:window.pageXOffset,scrollY:window.pageYOffset}:null;function u(e,t){void 0===t&&(t=[]);const{scrollEventsEnabledRef:n}=d(),r=(0,o.useRef)(l()),i=(0,a.zX)(e);(0,o.useEffect)((()=>{const e=()=>{if(!n.current)return;const e=l();i(e,r.current),r.current=e},t={passive:!0};return e(),window.addEventListener("scroll",e,t),()=>window.removeEventListener("scroll",e,t)}),[i,n,...t])}function p(){const e=(0,o.useRef)(null),t=(0,i.Z)()&&"smooth"===getComputedStyle(document.documentElement).scrollBehavior;return{startScroll:n=>{e.current=t?function(e){return window.scrollTo({top:e,behavior:"smooth"}),()=>{}}(n):function(e){let t=null;const n=document.documentElement.scrollTop>e;return function o(){const r=document.documentElement.scrollTop;(n&&r>e||!n&&r<e)&&(t=requestAnimationFrame(o),window.scrollTo(0,Math.floor(.85*(r-e))+e))}(),()=>t&&cancelAnimationFrame(t)}(n)},cancelScroll:()=>e.current?.()}}},43320:function(e,t,n){"use strict";n.d(t,{HX:function(){return o},os:function(){return r}});n(52263);const o="default";function r(e,t){return`docs-${e}-${t}`}},50012:function(e,t,n){"use strict";n.d(t,{WA:function(){return c}});n(67294),n(61688);const o="localStorage";function r(e){let{key:t,oldValue:n,newValue:o,storage:r}=e;if(n===o)return;const i=document.createEvent("StorageEvent");i.initStorageEvent("storage",!1,!1,t,n,o,window.location.href,r),window.dispatchEvent(i)}function i(e){if(void 0===e&&(e=o),"undefined"==typeof window)throw new Error("Browser storage is not available on Node.js/Docusaurus SSR process.");if("none"===e)return null;try{return window[e]}catch(n){return t=n,a||(console.warn("Docusaurus browser storage is not available.\nPossible reasons: running Docusaurus in an iframe, in an incognito browser session, or using too strict browser privacy settings.",t),a=!0),null}var t}let a=!1;const s={get:()=>null,set:()=>{},del:()=>{},listen:()=>()=>{}};function c(e,t){if("undefined"==typeof window)return function(e){function t(){throw new Error(`Illegal storage API usage for storage key "${e}".\nDocusaurus storage APIs are not supposed to be called on the server-rendering process.\nPlease only call storage APIs in effects and event handlers.`)}return{get:t,set:t,del:t,listen:t}}(e);const n=i(t?.persistence);return null===n?s:{get:()=>{try{return n.getItem(e)}catch(t){return console.error(`Docusaurus storage error, can't get key=${e}`,t),null}},set:t=>{try{const o=n.getItem(e);n.setItem(e,t),r({key:e,oldValue:o,newValue:t,storage:n})}catch(o){console.error(`Docusaurus storage error, can't set ${e}=${t}`,o)}},del:()=>{try{const t=n.getItem(e);n.removeItem(e),r({key:e,oldValue:t,newValue:null,storage:n})}catch(t){console.error(`Docusaurus storage error, can't delete key=${e}`,t)}},listen:t=>{try{const o=o=>{o.storageArea===n&&o.key===e&&t(o)};return window.addEventListener("storage",o),()=>window.removeEventListener("storage",o)}catch(o){return console.error(`Docusaurus storage error, can't listen for changes of key=${e}`,o),()=>{}}}}}},94711:function(e,t,n){"use strict";n.d(t,{l:function(){return i}});var o=n(52263),r=n(16550);function i(){const{siteConfig:{baseUrl:e,url:t},i18n:{defaultLocale:n,currentLocale:i}}=(0,o.Z)(),{pathname:a}=(0,r.TH)(),s=i===n?e:e.replace(`/${i}/`,"/"),c=a.replace(e,"");return{createUrl:function(e){let{locale:o,fullyQualified:r}=e;return`${r?t:""}${function(e){return e===n?`${s}`:`${s}${e}/`}(o)}${c}`}}}},85936:function(e,t,n){"use strict";n.d(t,{S:function(){return a}});var o=n(67294),r=n(16550),i=n(902);function a(e){const t=(0,r.TH)(),n=(0,i.D9)(t),a=(0,i.zX)(e);(0,o.useEffect)((()=>{n&&t!==n&&a({location:t,previousLocation:n})}),[a,t,n])}},86668:function(e,t,n){"use strict";n.d(t,{L:function(){return r}});var o=n(52263);function r(){return(0,o.Z)().siteConfig.themeConfig}},8802:function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e,t){const{trailingSlash:n,baseUrl:o}=t;if(e.startsWith("#"))return e;if(void 0===n)return e;const[r]=e.split(/[#?]/),i="/"===r||r===o?r:(a=r,n?function(e){return e.endsWith("/")?e:`${e}/`}(a):function(e){return e.endsWith("/")?e.slice(0,-1):e}(a));var a;return e.replace(r,i)}},54143:function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.getErrorCausalChain=void 0,t.getErrorCausalChain=function e(t){return t.cause?[t,...e(t.cause)]:[t]}},18780:function(e,t,n){"use strict";var o=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.getErrorCausalChain=t.applyTrailingSlash=t.blogPostContainerID=void 0,t.blogPostContainerID="post-content";var r=n(8802);Object.defineProperty(t,"applyTrailingSlash",{enumerable:!0,get:function(){return o(r).default}});var i=n(54143);Object.defineProperty(t,"getErrorCausalChain",{enumerable:!0,get:function(){return i.getErrorCausalChain}})},99318:function(e,t,n){"use strict";n.d(t,{lX:function(){return w},q_:function(){return C},ob:function(){return m},PP:function(){return P},Ep:function(){return p}});var o=n(83117);function r(e){return"/"===e.charAt(0)}function i(e,t){for(var n=t,o=n+1,r=e.length;o<r;n+=1,o+=1)e[n]=e[o];e.pop()}var a=function(e,t){void 0===t&&(t="");var n,o=e&&e.split("/")||[],a=t&&t.split("/")||[],s=e&&r(e),c=t&&r(t),d=s||c;if(e&&r(e)?a=o:o.length&&(a.pop(),a=a.concat(o)),!a.length)return"/";if(a.length){var l=a[a.length-1];n="."===l||".."===l||""===l}else n=!1;for(var u=0,p=a.length;p>=0;p--){var m=a[p];"."===m?i(a,p):".."===m?(i(a,p),u++):u&&(i(a,p),u--)}if(!d)for(;u--;u)a.unshift("..");!d||""===a[0]||a[0]&&r(a[0])||a.unshift("");var f=a.join("/");return n&&"/"!==f.substr(-1)&&(f+="/"),f},s=n(2177);function c(e){return"/"===e.charAt(0)?e:"/"+e}function d(e){return"/"===e.charAt(0)?e.substr(1):e}function l(e,t){return function(e,t){return 0===e.toLowerCase().indexOf(t.toLowerCase())&&-1!=="/?#".indexOf(e.charAt(t.length))}(e,t)?e.substr(t.length):e}function u(e){return"/"===e.charAt(e.length-1)?e.slice(0,-1):e}function p(e){var t=e.pathname,n=e.search,o=e.hash,r=t||"/";return n&&"?"!==n&&(r+="?"===n.charAt(0)?n:"?"+n),o&&"#"!==o&&(r+="#"===o.charAt(0)?o:"#"+o),r}function m(e,t,n,r){var i;"string"==typeof e?(i=function(e){var t=e||"/",n="",o="",r=t.indexOf("#");-1!==r&&(o=t.substr(r),t=t.substr(0,r));var i=t.indexOf("?");return-1!==i&&(n=t.substr(i),t=t.substr(0,i)),{pathname:t,search:"?"===n?"":n,hash:"#"===o?"":o}}(e),i.state=t):(void 0===(i=(0,o.Z)({},e)).pathname&&(i.pathname=""),i.search?"?"!==i.search.charAt(0)&&(i.search="?"+i.search):i.search="",i.hash?"#"!==i.hash.charAt(0)&&(i.hash="#"+i.hash):i.hash="",void 0!==t&&void 0===i.state&&(i.state=t));try{i.pathname=decodeURI(i.pathname)}catch(s){throw s instanceof URIError?new URIError('Pathname "'+i.pathname+'" could not be decoded. This is likely caused by an invalid percent-encoding.'):s}return n&&(i.key=n),r?i.pathname?"/"!==i.pathname.charAt(0)&&(i.pathname=a(i.pathname,r.pathname)):i.pathname=r.pathname:i.pathname||(i.pathname="/"),i}function f(){var e=null;var t=[];return{setPrompt:function(t){return e=t,function(){e===t&&(e=null)}},confirmTransitionTo:function(t,n,o,r){if(null!=e){var i="function"==typeof e?e(t,n):e;"string"==typeof i?"function"==typeof o?o(i,r):r(!0):r(!1!==i)}else r(!0)},appendListener:function(e){var n=!0;function o(){n&&e.apply(void 0,arguments)}return t.push(o),function(){n=!1,t=t.filter((function(e){return e!==o}))}},notifyListeners:function(){for(var e=arguments.length,n=new Array(e),o=0;o<e;o++)n[o]=arguments[o];t.forEach((function(e){return e.apply(void 0,n)}))}}}var b=!("undefined"==typeof window||!window.document||!window.document.createElement);function h(e,t){t(window.confirm(e))}var v="popstate",g="hashchange";function y(){try{return window.history.state||{}}catch(e){return{}}}function w(e){void 0===e&&(e={}),b||(0,s.Z)(!1);var t,n=window.history,r=(-1===(t=window.navigator.userAgent).indexOf("Android 2.")&&-1===t.indexOf("Android 4.0")||-1===t.indexOf("Mobile Safari")||-1!==t.indexOf("Chrome")||-1!==t.indexOf("Windows Phone"))&&window.history&&"pushState"in window.history,i=!(-1===window.navigator.userAgent.indexOf("Trident")),a=e,d=a.forceRefresh,w=void 0!==d&&d,_=a.getUserConfirmation,k=void 0===_?h:_,S=a.keyLength,x=void 0===S?6:S,E=e.basename?u(c(e.basename)):"";function C(e){var t=e||{},n=t.key,o=t.state,r=window.location,i=r.pathname+r.search+r.hash;return E&&(i=l(i,E)),m(i,o,n)}function T(){return Math.random().toString(36).substr(2,x)}var P=f();function A(e){(0,o.Z)(U,e),U.length=n.length,P.notifyListeners(U.location,U.action)}function L(e){(function(e){return void 0===e.state&&-1===navigator.userAgent.indexOf("CriOS")})(e)||O(C(e.state))}function R(){O(C(y()))}var N=!1;function O(e){if(N)N=!1,A();else{P.confirmTransitionTo(e,"POP",k,(function(t){t?A({action:"POP",location:e}):function(e){var t=U.location,n=D.indexOf(t.key);-1===n&&(n=0);var o=D.indexOf(e.key);-1===o&&(o=0);var r=n-o;r&&(N=!0,B(r))}(e)}))}}var I=C(y()),D=[I.key];function M(e){return E+p(e)}function B(e){n.go(e)}var F=0;function z(e){1===(F+=e)&&1===e?(window.addEventListener(v,L),i&&window.addEventListener(g,R)):0===F&&(window.removeEventListener(v,L),i&&window.removeEventListener(g,R))}var j=!1;var U={length:n.length,action:"POP",location:I,createHref:M,push:function(e,t){var o="PUSH",i=m(e,t,T(),U.location);P.confirmTransitionTo(i,o,k,(function(e){if(e){var t=M(i),a=i.key,s=i.state;if(r)if(n.pushState({key:a,state:s},null,t),w)window.location.href=t;else{var c=D.indexOf(U.location.key),d=D.slice(0,c+1);d.push(i.key),D=d,A({action:o,location:i})}else window.location.href=t}}))},replace:function(e,t){var o="REPLACE",i=m(e,t,T(),U.location);P.confirmTransitionTo(i,o,k,(function(e){if(e){var t=M(i),a=i.key,s=i.state;if(r)if(n.replaceState({key:a,state:s},null,t),w)window.location.replace(t);else{var c=D.indexOf(U.location.key);-1!==c&&(D[c]=i.key),A({action:o,location:i})}else window.location.replace(t)}}))},go:B,goBack:function(){B(-1)},goForward:function(){B(1)},block:function(e){void 0===e&&(e=!1);var t=P.setPrompt(e);return j||(z(1),j=!0),function(){return j&&(j=!1,z(-1)),t()}},listen:function(e){var t=P.appendListener(e);return z(1),function(){z(-1),t()}}};return U}var _="hashchange",k={hashbang:{encodePath:function(e){return"!"===e.charAt(0)?e:"!/"+d(e)},decodePath:function(e){return"!"===e.charAt(0)?e.substr(1):e}},noslash:{encodePath:d,decodePath:c},slash:{encodePath:c,decodePath:c}};function S(e){var t=e.indexOf("#");return-1===t?e:e.slice(0,t)}function x(){var e=window.location.href,t=e.indexOf("#");return-1===t?"":e.substring(t+1)}function E(e){window.location.replace(S(window.location.href)+"#"+e)}function C(e){void 0===e&&(e={}),b||(0,s.Z)(!1);var t=window.history,n=(window.navigator.userAgent.indexOf("Firefox"),e),r=n.getUserConfirmation,i=void 0===r?h:r,a=n.hashType,d=void 0===a?"slash":a,v=e.basename?u(c(e.basename)):"",g=k[d],y=g.encodePath,w=g.decodePath;function C(){var e=w(x());return v&&(e=l(e,v)),m(e)}var T=f();function P(e){(0,o.Z)(j,e),j.length=t.length,T.notifyListeners(j.location,j.action)}var A=!1,L=null;function R(){var e,t,n=x(),o=y(n);if(n!==o)E(o);else{var r=C(),a=j.location;if(!A&&(t=r,(e=a).pathname===t.pathname&&e.search===t.search&&e.hash===t.hash))return;if(L===p(r))return;L=null,function(e){if(A)A=!1,P();else{var t="POP";T.confirmTransitionTo(e,t,i,(function(n){n?P({action:t,location:e}):function(e){var t=j.location,n=D.lastIndexOf(p(t));-1===n&&(n=0);var o=D.lastIndexOf(p(e));-1===o&&(o=0);var r=n-o;r&&(A=!0,M(r))}(e)}))}}(r)}}var N=x(),O=y(N);N!==O&&E(O);var I=C(),D=[p(I)];function M(e){t.go(e)}var B=0;function F(e){1===(B+=e)&&1===e?window.addEventListener(_,R):0===B&&window.removeEventListener(_,R)}var z=!1;var j={length:t.length,action:"POP",location:I,createHref:function(e){var t=document.querySelector("base"),n="";return t&&t.getAttribute("href")&&(n=S(window.location.href)),n+"#"+y(v+p(e))},push:function(e,t){var n="PUSH",o=m(e,void 0,void 0,j.location);T.confirmTransitionTo(o,n,i,(function(e){if(e){var t=p(o),r=y(v+t);if(x()!==r){L=t,function(e){window.location.hash=e}(r);var i=D.lastIndexOf(p(j.location)),a=D.slice(0,i+1);a.push(t),D=a,P({action:n,location:o})}else P()}}))},replace:function(e,t){var n="REPLACE",o=m(e,void 0,void 0,j.location);T.confirmTransitionTo(o,n,i,(function(e){if(e){var t=p(o),r=y(v+t);x()!==r&&(L=t,E(r));var i=D.indexOf(p(j.location));-1!==i&&(D[i]=t),P({action:n,location:o})}}))},go:M,goBack:function(){M(-1)},goForward:function(){M(1)},block:function(e){void 0===e&&(e=!1);var t=T.setPrompt(e);return z||(F(1),z=!0),function(){return z&&(z=!1,F(-1)),t()}},listen:function(e){var t=T.appendListener(e);return F(1),function(){F(-1),t()}}};return j}function T(e,t,n){return Math.min(Math.max(e,t),n)}function P(e){void 0===e&&(e={});var t=e,n=t.getUserConfirmation,r=t.initialEntries,i=void 0===r?["/"]:r,a=t.initialIndex,s=void 0===a?0:a,c=t.keyLength,d=void 0===c?6:c,l=f();function u(e){(0,o.Z)(w,e),w.length=w.entries.length,l.notifyListeners(w.location,w.action)}function b(){return Math.random().toString(36).substr(2,d)}var h=T(s,0,i.length-1),v=i.map((function(e){return m(e,void 0,"string"==typeof e?b():e.key||b())})),g=p;function y(e){var t=T(w.index+e,0,w.entries.length-1),o=w.entries[t];l.confirmTransitionTo(o,"POP",n,(function(e){e?u({action:"POP",location:o,index:t}):u()}))}var w={length:v.length,action:"POP",location:v[h],index:h,entries:v,createHref:g,push:function(e,t){var o="PUSH",r=m(e,t,b(),w.location);l.confirmTransitionTo(r,o,n,(function(e){if(e){var t=w.index+1,n=w.entries.slice(0);n.length>t?n.splice(t,n.length-t,r):n.push(r),u({action:o,location:r,index:t,entries:n})}}))},replace:function(e,t){var o="REPLACE",r=m(e,t,b(),w.location);l.confirmTransitionTo(r,o,n,(function(e){e&&(w.entries[w.index]=r,u({action:o,location:r}))}))},go:y,goBack:function(){y(-1)},goForward:function(){y(1)},canGo:function(e){var t=w.index+e;return t>=0&&t<w.entries.length},block:function(e){return void 0===e&&(e=!1),l.setPrompt(e)},listen:function(e){return l.appendListener(e)}};return w}},8679:function(e,t,n){"use strict";var o=n(59864),r={childContextTypes:!0,contextType:!0,contextTypes:!0,defaultProps:!0,displayName:!0,getDefaultProps:!0,getDerivedStateFromError:!0,getDerivedStateFromProps:!0,mixins:!0,propTypes:!0,type:!0},i={name:!0,length:!0,prototype:!0,caller:!0,callee:!0,arguments:!0,arity:!0},a={$$typeof:!0,compare:!0,defaultProps:!0,displayName:!0,propTypes:!0,type:!0},s={};function c(e){return o.isMemo(e)?a:s[e.$$typeof]||r}s[o.ForwardRef]={$$typeof:!0,render:!0,defaultProps:!0,displayName:!0,propTypes:!0},s[o.Memo]=a;var d=Object.defineProperty,l=Object.getOwnPropertyNames,u=Object.getOwnPropertySymbols,p=Object.getOwnPropertyDescriptor,m=Object.getPrototypeOf,f=Object.prototype;e.exports=function e(t,n,o){if("string"!=typeof n){if(f){var r=m(n);r&&r!==f&&e(t,r,o)}var a=l(n);u&&(a=a.concat(u(n)));for(var s=c(t),b=c(n),h=0;h<a.length;++h){var v=a[h];if(!(i[v]||o&&o[v]||b&&b[v]||s&&s[v])){var g=p(n,v);try{d(t,v,g)}catch(y){}}}}return t}},41143:function(e){"use strict";e.exports=function(e,t,n,o,r,i,a,s){if(!e){var c;if(void 0===t)c=new Error("Minified exception occurred; use the non-minified dev environment for the full error message and additional helpful warnings.");else{var d=[n,o,r,i,a,s],l=0;(c=new Error(t.replace(/%s/g,(function(){return d[l++]})))).name="Invariant Violation"}throw c.framesToPop=1,c}}},5826:function(e){e.exports=Array.isArray||function(e){return"[object Array]"==Object.prototype.toString.call(e)}},98270:function(e,t,n){"use strict";n.r(t)},32497:function(e,t,n){"use strict";n.r(t)},74865:function(e,t,n){var o,r;o=function(){var e,t,n={version:"0.2.0"},o=n.settings={minimum:.08,easing:"ease",positionUsing:"",speed:200,trickle:!0,trickleRate:.02,trickleSpeed:800,showSpinner:!0,barSelector:'[role="bar"]',spinnerSelector:'[role="spinner"]',parent:"body",template:'<div class="bar" role="bar"><div class="peg"></div></div><div class="spinner" role="spinner"><div class="spinner-icon"></div></div>'};function r(e,t,n){return e<t?t:e>n?n:e}function i(e){return 100*(-1+e)}function a(e,t,n){var r;return(r="translate3d"===o.positionUsing?{transform:"translate3d("+i(e)+"%,0,0)"}:"translate"===o.positionUsing?{transform:"translate("+i(e)+"%,0)"}:{"margin-left":i(e)+"%"}).transition="all "+t+"ms "+n,r}n.configure=function(e){var t,n;for(t in e)void 0!==(n=e[t])&&e.hasOwnProperty(t)&&(o[t]=n);return this},n.status=null,n.set=function(e){var t=n.isStarted();e=r(e,o.minimum,1),n.status=1===e?null:e;var i=n.render(!t),d=i.querySelector(o.barSelector),l=o.speed,u=o.easing;return i.offsetWidth,s((function(t){""===o.positionUsing&&(o.positionUsing=n.getPositioningCSS()),c(d,a(e,l,u)),1===e?(c(i,{transition:"none",opacity:1}),i.offsetWidth,setTimeout((function(){c(i,{transition:"all "+l+"ms linear",opacity:0}),setTimeout((function(){n.remove(),t()}),l)}),l)):setTimeout(t,l)})),this},n.isStarted=function(){return"number"==typeof n.status},n.start=function(){n.status||n.set(0);var e=function(){setTimeout((function(){n.status&&(n.trickle(),e())}),o.trickleSpeed)};return o.trickle&&e(),this},n.done=function(e){return e||n.status?n.inc(.3+.5*Math.random()).set(1):this},n.inc=function(e){var t=n.status;return t?("number"!=typeof e&&(e=(1-t)*r(Math.random()*t,.1,.95)),t=r(t+e,0,.994),n.set(t)):n.start()},n.trickle=function(){return n.inc(Math.random()*o.trickleRate)},e=0,t=0,n.promise=function(o){return o&&"resolved"!==o.state()?(0===t&&n.start(),e++,t++,o.always((function(){0==--t?(e=0,n.done()):n.set((e-t)/e)})),this):this},n.render=function(e){if(n.isRendered())return document.getElementById("nprogress");l(document.documentElement,"nprogress-busy");var t=document.createElement("div");t.id="nprogress",t.innerHTML=o.template;var r,a=t.querySelector(o.barSelector),s=e?"-100":i(n.status||0),d=document.querySelector(o.parent);return c(a,{transition:"all 0 linear",transform:"translate3d("+s+"%,0,0)"}),o.showSpinner||(r=t.querySelector(o.spinnerSelector))&&m(r),d!=document.body&&l(d,"nprogress-custom-parent"),d.appendChild(t),t},n.remove=function(){u(document.documentElement,"nprogress-busy"),u(document.querySelector(o.parent),"nprogress-custom-parent");var e=document.getElementById("nprogress");e&&m(e)},n.isRendered=function(){return!!document.getElementById("nprogress")},n.getPositioningCSS=function(){var e=document.body.style,t="WebkitTransform"in e?"Webkit":"MozTransform"in e?"Moz":"msTransform"in e?"ms":"OTransform"in e?"O":"";return t+"Perspective"in e?"translate3d":t+"Transform"in e?"translate":"margin"};var s=function(){var e=[];function t(){var n=e.shift();n&&n(t)}return function(n){e.push(n),1==e.length&&t()}}(),c=function(){var e=["Webkit","O","Moz","ms"],t={};function n(e){return e.replace(/^-ms-/,"ms-").replace(/-([\da-z])/gi,(function(e,t){return t.toUpperCase()}))}function o(t){var n=document.body.style;if(t in n)return t;for(var o,r=e.length,i=t.charAt(0).toUpperCase()+t.slice(1);r--;)if((o=e[r]+i)in n)return o;return t}function r(e){return e=n(e),t[e]||(t[e]=o(e))}function i(e,t,n){t=r(t),e.style[t]=n}return function(e,t){var n,o,r=arguments;if(2==r.length)for(n in t)void 0!==(o=t[n])&&t.hasOwnProperty(n)&&i(e,n,o);else i(e,r[1],r[2])}}();function d(e,t){return("string"==typeof e?e:p(e)).indexOf(" "+t+" ")>=0}function l(e,t){var n=p(e),o=n+t;d(n,t)||(e.className=o.substring(1))}function u(e,t){var n,o=p(e);d(e,t)&&(n=o.replace(" "+t+" "," "),e.className=n.substring(1,n.length-1))}function p(e){return(" "+(e.className||"")+" ").replace(/\s+/gi," ")}function m(e){e&&e.parentNode&&e.parentNode.removeChild(e)}return n},void 0===(r="function"==typeof o?o.call(t,n,t,e):o)||(e.exports=r)},27418:function(e){"use strict";var t=Object.getOwnPropertySymbols,n=Object.prototype.hasOwnProperty,o=Object.prototype.propertyIsEnumerable;e.exports=function(){try{if(!Object.assign)return!1;var e=new String("abc");if(e[5]="de","5"===Object.getOwnPropertyNames(e)[0])return!1;for(var t={},n=0;n<10;n++)t["_"+String.fromCharCode(n)]=n;if("0123456789"!==Object.getOwnPropertyNames(t).map((function(e){return t[e]})).join(""))return!1;var o={};return"abcdefghijklmnopqrst".split("").forEach((function(e){o[e]=e})),"abcdefghijklmnopqrst"===Object.keys(Object.assign({},o)).join("")}catch(r){return!1}}()?Object.assign:function(e,r){for(var i,a,s=function(e){if(null==e)throw new TypeError("Object.assign cannot be called with null or undefined");return Object(e)}(e),c=1;c<arguments.length;c++){for(var d in i=Object(arguments[c]))n.call(i,d)&&(s[d]=i[d]);if(t){a=t(i);for(var l=0;l<a.length;l++)o.call(i,a[l])&&(s[a[l]]=i[a[l]])}}return s}},29901:function(e){e.exports&&(e.exports={core:{meta:{path:"components/prism-core.js",option:"mandatory"},core:"Core"},themes:{meta:{path:"themes/{id}.css",link:"index.html?theme={id}",exclusive:!0},prism:{title:"Default",option:"default"},"prism-dark":"Dark","prism-funky":"Funky","prism-okaidia":{title:"Okaidia",owner:"ocodia"},"prism-twilight":{title:"Twilight",owner:"remybach"},"prism-coy":{title:"Coy",owner:"tshedor"},"prism-solarizedlight":{title:"Solarized Light",owner:"hectormatos2011 "},"prism-tomorrow":{title:"Tomorrow Night",owner:"Rosey"}},languages:{meta:{path:"components/prism-{id}",noCSS:!0,examplesPath:"examples/prism-{id}",addCheckAll:!0},markup:{title:"Markup",alias:["html","xml","svg","mathml","ssml","atom","rss"],aliasTitles:{html:"HTML",xml:"XML",svg:"SVG",mathml:"MathML",ssml:"SSML",atom:"Atom",rss:"RSS"},option:"default"},css:{title:"CSS",option:"default",modify:"markup"},clike:{title:"C-like",option:"default"},javascript:{title:"JavaScript",require:"clike",modify:"markup",optional:"regex",alias:"js",option:"default"},abap:{title:"ABAP",owner:"dellagustin"},abnf:{title:"ABNF",owner:"RunDevelopment"},actionscript:{title:"ActionScript",require:"javascript",modify:"markup",owner:"Golmote"},ada:{title:"Ada",owner:"Lucretia"},agda:{title:"Agda",owner:"xy-ren"},al:{title:"AL",owner:"RunDevelopment"},antlr4:{title:"ANTLR4",alias:"g4",owner:"RunDevelopment"},apacheconf:{title:"Apache Configuration",owner:"GuiTeK"},apex:{title:"Apex",require:["clike","sql"],owner:"RunDevelopment"},apl:{title:"APL",owner:"ngn"},applescript:{title:"AppleScript",owner:"Golmote"},aql:{title:"AQL",owner:"RunDevelopment"},arduino:{title:"Arduino",require:"cpp",alias:"ino",owner:"dkern"},arff:{title:"ARFF",owner:"Golmote"},armasm:{title:"ARM Assembly",alias:"arm-asm",owner:"RunDevelopment"},arturo:{title:"Arturo",alias:"art",optional:["bash","css","javascript","markup","markdown","sql"],owner:"drkameleon"},asciidoc:{alias:"adoc",title:"AsciiDoc",owner:"Golmote"},aspnet:{title:"ASP.NET (C#)",require:["markup","csharp"],owner:"nauzilus"},asm6502:{title:"6502 Assembly",owner:"kzurawel"},asmatmel:{title:"Atmel AVR Assembly",owner:"cerkit"},autohotkey:{title:"AutoHotkey",owner:"aviaryan"},autoit:{title:"AutoIt",owner:"Golmote"},avisynth:{title:"AviSynth",alias:"avs",owner:"Zinfidel"},"avro-idl":{title:"Avro IDL",alias:"avdl",owner:"RunDevelopment"},awk:{title:"AWK",alias:"gawk",aliasTitles:{gawk:"GAWK"},owner:"RunDevelopment"},bash:{title:"Bash",alias:["sh","shell"],aliasTitles:{sh:"Shell",shell:"Shell"},owner:"zeitgeist87"},basic:{title:"BASIC",owner:"Golmote"},batch:{title:"Batch",owner:"Golmote"},bbcode:{title:"BBcode",alias:"shortcode",aliasTitles:{shortcode:"Shortcode"},owner:"RunDevelopment"},bbj:{title:"BBj",owner:"hyyan"},bicep:{title:"Bicep",owner:"johnnyreilly"},birb:{title:"Birb",require:"clike",owner:"Calamity210"},bison:{title:"Bison",require:"c",owner:"Golmote"},bnf:{title:"BNF",alias:"rbnf",aliasTitles:{rbnf:"RBNF"},owner:"RunDevelopment"},bqn:{title:"BQN",owner:"yewscion"},brainfuck:{title:"Brainfuck",owner:"Golmote"},brightscript:{title:"BrightScript",owner:"RunDevelopment"},bro:{title:"Bro",owner:"wayward710"},bsl:{title:"BSL (1C:Enterprise)",alias:"oscript",aliasTitles:{oscript:"OneScript"},owner:"Diversus23"},c:{title:"C",require:"clike",owner:"zeitgeist87"},csharp:{title:"C#",require:"clike",alias:["cs","dotnet"],owner:"mvalipour"},cpp:{title:"C++",require:"c",owner:"zeitgeist87"},cfscript:{title:"CFScript",require:"clike",alias:"cfc",owner:"mjclemente"},chaiscript:{title:"ChaiScript",require:["clike","cpp"],owner:"RunDevelopment"},cil:{title:"CIL",owner:"sbrl"},cilkc:{title:"Cilk/C",require:"c",alias:"cilk-c",owner:"OpenCilk"},cilkcpp:{title:"Cilk/C++",require:"cpp",alias:["cilk-cpp","cilk"],owner:"OpenCilk"},clojure:{title:"Clojure",owner:"troglotit"},cmake:{title:"CMake",owner:"mjrogozinski"},cobol:{title:"COBOL",owner:"RunDevelopment"},coffeescript:{title:"CoffeeScript",require:"javascript",alias:"coffee",owner:"R-osey"},concurnas:{title:"Concurnas",alias:"conc",owner:"jasontatton"},csp:{title:"Content-Security-Policy",owner:"ScottHelme"},cooklang:{title:"Cooklang",owner:"ahue"},coq:{title:"Coq",owner:"RunDevelopment"},crystal:{title:"Crystal",require:"ruby",owner:"MakeNowJust"},"css-extras":{title:"CSS Extras",require:"css",modify:"css",owner:"milesj"},csv:{title:"CSV",owner:"RunDevelopment"},cue:{title:"CUE",owner:"RunDevelopment"},cypher:{title:"Cypher",owner:"RunDevelopment"},d:{title:"D",require:"clike",owner:"Golmote"},dart:{title:"Dart",require:"clike",owner:"Golmote"},dataweave:{title:"DataWeave",owner:"machaval"},dax:{title:"DAX",owner:"peterbud"},dhall:{title:"Dhall",owner:"RunDevelopment"},diff:{title:"Diff",owner:"uranusjr"},django:{title:"Django/Jinja2",require:"markup-templating",alias:"jinja2",owner:"romanvm"},"dns-zone-file":{title:"DNS zone file",owner:"RunDevelopment",alias:"dns-zone"},docker:{title:"Docker",alias:"dockerfile",owner:"JustinBeckwith"},dot:{title:"DOT (Graphviz)",alias:"gv",optional:"markup",owner:"RunDevelopment"},ebnf:{title:"EBNF",owner:"RunDevelopment"},editorconfig:{title:"EditorConfig",owner:"osipxd"},eiffel:{title:"Eiffel",owner:"Conaclos"},ejs:{title:"EJS",require:["javascript","markup-templating"],owner:"RunDevelopment",alias:"eta",aliasTitles:{eta:"Eta"}},elixir:{title:"Elixir",owner:"Golmote"},elm:{title:"Elm",owner:"zwilias"},etlua:{title:"Embedded Lua templating",require:["lua","markup-templating"],owner:"RunDevelopment"},erb:{title:"ERB",require:["ruby","markup-templating"],owner:"Golmote"},erlang:{title:"Erlang",owner:"Golmote"},"excel-formula":{title:"Excel Formula",alias:["xlsx","xls"],owner:"RunDevelopment"},fsharp:{title:"F#",require:"clike",owner:"simonreynolds7"},factor:{title:"Factor",owner:"catb0t"},false:{title:"False",owner:"edukisto"},"firestore-security-rules":{title:"Firestore security rules",require:"clike",owner:"RunDevelopment"},flow:{title:"Flow",require:"javascript",owner:"Golmote"},fortran:{title:"Fortran",owner:"Golmote"},ftl:{title:"FreeMarker Template Language",require:"markup-templating",owner:"RunDevelopment"},gml:{title:"GameMaker Language",alias:"gamemakerlanguage",require:"clike",owner:"LiarOnce"},gap:{title:"GAP (CAS)",owner:"RunDevelopment"},gcode:{title:"G-code",owner:"RunDevelopment"},gdscript:{title:"GDScript",owner:"RunDevelopment"},gedcom:{title:"GEDCOM",owner:"Golmote"},gettext:{title:"gettext",alias:"po",owner:"RunDevelopment"},gherkin:{title:"Gherkin",owner:"hason"},git:{title:"Git",owner:"lgiraudel"},glsl:{title:"GLSL",require:"c",owner:"Golmote"},gn:{title:"GN",alias:"gni",owner:"RunDevelopment"},"linker-script":{title:"GNU Linker Script",alias:"ld",owner:"RunDevelopment"},go:{title:"Go",require:"clike",owner:"arnehormann"},"go-module":{title:"Go module",alias:"go-mod",owner:"RunDevelopment"},gradle:{title:"Gradle",require:"clike",owner:"zeabdelkhalek-badido18"},graphql:{title:"GraphQL",optional:"markdown",owner:"Golmote"},groovy:{title:"Groovy",require:"clike",owner:"robfletcher"},haml:{title:"Haml",require:"ruby",optional:["css","css-extras","coffeescript","erb","javascript","less","markdown","scss","textile"],owner:"Golmote"},handlebars:{title:"Handlebars",require:"markup-templating",alias:["hbs","mustache"],aliasTitles:{mustache:"Mustache"},owner:"Golmote"},haskell:{title:"Haskell",alias:"hs",owner:"bholst"},haxe:{title:"Haxe",require:"clike",optional:"regex",owner:"Golmote"},hcl:{title:"HCL",owner:"outsideris"},hlsl:{title:"HLSL",require:"c",owner:"RunDevelopment"},hoon:{title:"Hoon",owner:"matildepark"},http:{title:"HTTP",optional:["csp","css","hpkp","hsts","javascript","json","markup","uri"],owner:"danielgtaylor"},hpkp:{title:"HTTP Public-Key-Pins",owner:"ScottHelme"},hsts:{title:"HTTP Strict-Transport-Security",owner:"ScottHelme"},ichigojam:{title:"IchigoJam",owner:"BlueCocoa"},icon:{title:"Icon",owner:"Golmote"},"icu-message-format":{title:"ICU Message Format",owner:"RunDevelopment"},idris:{title:"Idris",alias:"idr",owner:"KeenS",require:"haskell"},ignore:{title:".ignore",owner:"osipxd",alias:["gitignore","hgignore","npmignore"],aliasTitles:{gitignore:".gitignore",hgignore:".hgignore",npmignore:".npmignore"}},inform7:{title:"Inform 7",owner:"Golmote"},ini:{title:"Ini",owner:"aviaryan"},io:{title:"Io",owner:"AlesTsurko"},j:{title:"J",owner:"Golmote"},java:{title:"Java",require:"clike",owner:"sherblot"},javadoc:{title:"JavaDoc",require:["markup","java","javadoclike"],modify:"java",optional:"scala",owner:"RunDevelopment"},javadoclike:{title:"JavaDoc-like",modify:["java","javascript","php"],owner:"RunDevelopment"},javastacktrace:{title:"Java stack trace",owner:"RunDevelopment"},jexl:{title:"Jexl",owner:"czosel"},jolie:{title:"Jolie",require:"clike",owner:"thesave"},jq:{title:"JQ",owner:"RunDevelopment"},jsdoc:{title:"JSDoc",require:["javascript","javadoclike","typescript"],modify:"javascript",optional:["actionscript","coffeescript"],owner:"RunDevelopment"},"js-extras":{title:"JS Extras",require:"javascript",modify:"javascript",optional:["actionscript","coffeescript","flow","n4js","typescript"],owner:"RunDevelopment"},json:{title:"JSON",alias:"webmanifest",aliasTitles:{webmanifest:"Web App Manifest"},owner:"CupOfTea696"},json5:{title:"JSON5",require:"json",owner:"RunDevelopment"},jsonp:{title:"JSONP",require:"json",owner:"RunDevelopment"},jsstacktrace:{title:"JS stack trace",owner:"sbrl"},"js-templates":{title:"JS Templates",require:"javascript",modify:"javascript",optional:["css","css-extras","graphql","markdown","markup","sql"],owner:"RunDevelopment"},julia:{title:"Julia",owner:"cdagnino"},keepalived:{title:"Keepalived Configure",owner:"dev-itsheng"},keyman:{title:"Keyman",owner:"mcdurdin"},kotlin:{title:"Kotlin",alias:["kt","kts"],aliasTitles:{kts:"Kotlin Script"},require:"clike",owner:"Golmote"},kumir:{title:"KuMir (\u041a\u0443\u041c\u0438\u0440)",alias:"kum",owner:"edukisto"},kusto:{title:"Kusto",owner:"RunDevelopment"},latex:{title:"LaTeX",alias:["tex","context"],aliasTitles:{tex:"TeX",context:"ConTeXt"},owner:"japborst"},latte:{title:"Latte",require:["clike","markup-templating","php"],owner:"nette"},less:{title:"Less",require:"css",optional:"css-extras",owner:"Golmote"},lilypond:{title:"LilyPond",require:"scheme",alias:"ly",owner:"RunDevelopment"},liquid:{title:"Liquid",require:"markup-templating",owner:"cinhtau"},lisp:{title:"Lisp",alias:["emacs","elisp","emacs-lisp"],owner:"JuanCaicedo"},livescript:{title:"LiveScript",owner:"Golmote"},llvm:{title:"LLVM IR",owner:"porglezomp"},log:{title:"Log file",optional:"javastacktrace",owner:"RunDevelopment"},lolcode:{title:"LOLCODE",owner:"Golmote"},lua:{title:"Lua",owner:"Golmote"},magma:{title:"Magma (CAS)",owner:"RunDevelopment"},makefile:{title:"Makefile",owner:"Golmote"},markdown:{title:"Markdown",require:"markup",optional:"yaml",alias:"md",owner:"Golmote"},"markup-templating":{title:"Markup templating",require:"markup",owner:"Golmote"},mata:{title:"Mata",owner:"RunDevelopment"},matlab:{title:"MATLAB",owner:"Golmote"},maxscript:{title:"MAXScript",owner:"RunDevelopment"},mel:{title:"MEL",owner:"Golmote"},mermaid:{title:"Mermaid",owner:"RunDevelopment"},metafont:{title:"METAFONT",owner:"LaeriExNihilo"},mizar:{title:"Mizar",owner:"Golmote"},mongodb:{title:"MongoDB",owner:"airs0urce",require:"javascript"},monkey:{title:"Monkey",owner:"Golmote"},moonscript:{title:"MoonScript",alias:"moon",owner:"RunDevelopment"},n1ql:{title:"N1QL",owner:"TMWilds"},n4js:{title:"N4JS",require:"javascript",optional:"jsdoc",alias:"n4jsd",owner:"bsmith-n4"},"nand2tetris-hdl":{title:"Nand To Tetris HDL",owner:"stephanmax"},naniscript:{title:"Naninovel Script",owner:"Elringus",alias:"nani"},nasm:{title:"NASM",owner:"rbmj"},neon:{title:"NEON",owner:"nette"},nevod:{title:"Nevod",owner:"nezaboodka"},nginx:{title:"nginx",owner:"volado"},nim:{title:"Nim",owner:"Golmote"},nix:{title:"Nix",owner:"Golmote"},nsis:{title:"NSIS",owner:"idleberg"},objectivec:{title:"Objective-C",require:"c",alias:"objc",owner:"uranusjr"},ocaml:{title:"OCaml",owner:"Golmote"},odin:{title:"Odin",owner:"edukisto"},opencl:{title:"OpenCL",require:"c",modify:["c","cpp"],owner:"Milania1"},openqasm:{title:"OpenQasm",alias:"qasm",owner:"RunDevelopment"},oz:{title:"Oz",owner:"Golmote"},parigp:{title:"PARI/GP",owner:"Golmote"},parser:{title:"Parser",require:"markup",owner:"Golmote"},pascal:{title:"Pascal",alias:"objectpascal",aliasTitles:{objectpascal:"Object Pascal"},owner:"Golmote"},pascaligo:{title:"Pascaligo",owner:"DefinitelyNotAGoat"},psl:{title:"PATROL Scripting Language",owner:"bertysentry"},pcaxis:{title:"PC-Axis",alias:"px",owner:"RunDevelopment"},peoplecode:{title:"PeopleCode",alias:"pcode",owner:"RunDevelopment"},perl:{title:"Perl",owner:"Golmote"},php:{title:"PHP",require:"markup-templating",owner:"milesj"},phpdoc:{title:"PHPDoc",require:["php","javadoclike"],modify:"php",owner:"RunDevelopment"},"php-extras":{title:"PHP Extras",require:"php",modify:"php",owner:"milesj"},"plant-uml":{title:"PlantUML",alias:"plantuml",owner:"RunDevelopment"},plsql:{title:"PL/SQL",require:"sql",owner:"Golmote"},powerquery:{title:"PowerQuery",alias:["pq","mscript"],owner:"peterbud"},powershell:{title:"PowerShell",owner:"nauzilus"},processing:{title:"Processing",require:"clike",owner:"Golmote"},prolog:{title:"Prolog",owner:"Golmote"},promql:{title:"PromQL",owner:"arendjr"},properties:{title:".properties",owner:"Golmote"},protobuf:{title:"Protocol Buffers",require:"clike",owner:"just-boris"},pug:{title:"Pug",require:["markup","javascript"],optional:["coffeescript","ejs","handlebars","less","livescript","markdown","scss","stylus","twig"],owner:"Golmote"},puppet:{title:"Puppet",owner:"Golmote"},pure:{title:"Pure",optional:["c","cpp","fortran"],owner:"Golmote"},purebasic:{title:"PureBasic",require:"clike",alias:"pbfasm",owner:"HeX0R101"},purescript:{title:"PureScript",require:"haskell",alias:"purs",owner:"sriharshachilakapati"},python:{title:"Python",alias:"py",owner:"multipetros"},qsharp:{title:"Q#",require:"clike",alias:"qs",owner:"fedonman"},q:{title:"Q (kdb+ database)",owner:"Golmote"},qml:{title:"QML",require:"javascript",owner:"RunDevelopment"},qore:{title:"Qore",require:"clike",owner:"temnroegg"},r:{title:"R",owner:"Golmote"},racket:{title:"Racket",require:"scheme",alias:"rkt",owner:"RunDevelopment"},cshtml:{title:"Razor C#",alias:"razor",require:["markup","csharp"],optional:["css","css-extras","javascript","js-extras"],owner:"RunDevelopment"},jsx:{title:"React JSX",require:["markup","javascript"],optional:["jsdoc","js-extras","js-templates"],owner:"vkbansal"},tsx:{title:"React TSX",require:["jsx","typescript"]},reason:{title:"Reason",require:"clike",owner:"Golmote"},regex:{title:"Regex",owner:"RunDevelopment"},rego:{title:"Rego",owner:"JordanSh"},renpy:{title:"Ren'py",alias:"rpy",owner:"HyuchiaDiego"},rescript:{title:"ReScript",alias:"res",owner:"vmarcosp"},rest:{title:"reST (reStructuredText)",owner:"Golmote"},rip:{title:"Rip",owner:"ravinggenius"},roboconf:{title:"Roboconf",owner:"Golmote"},robotframework:{title:"Robot Framework",alias:"robot",owner:"RunDevelopment"},ruby:{title:"Ruby",require:"clike",alias:"rb",owner:"samflores"},rust:{title:"Rust",owner:"Golmote"},sas:{title:"SAS",optional:["groovy","lua","sql"],owner:"Golmote"},sass:{title:"Sass (Sass)",require:"css",optional:"css-extras",owner:"Golmote"},scss:{title:"Sass (SCSS)",require:"css",optional:"css-extras",owner:"MoOx"},scala:{title:"Scala",require:"java",owner:"jozic"},scheme:{title:"Scheme",owner:"bacchus123"},"shell-session":{title:"Shell session",require:"bash",alias:["sh-session","shellsession"],owner:"RunDevelopment"},smali:{title:"Smali",owner:"RunDevelopment"},smalltalk:{title:"Smalltalk",owner:"Golmote"},smarty:{title:"Smarty",require:"markup-templating",optional:"php",owner:"Golmote"},sml:{title:"SML",alias:"smlnj",aliasTitles:{smlnj:"SML/NJ"},owner:"RunDevelopment"},solidity:{title:"Solidity (Ethereum)",alias:"sol",require:"clike",owner:"glachaud"},"solution-file":{title:"Solution file",alias:"sln",owner:"RunDevelopment"},soy:{title:"Soy (Closure Template)",require:"markup-templating",owner:"Golmote"},sparql:{title:"SPARQL",require:"turtle",owner:"Triply-Dev",alias:"rq"},"splunk-spl":{title:"Splunk SPL",owner:"RunDevelopment"},sqf:{title:"SQF: Status Quo Function (Arma 3)",require:"clike",owner:"RunDevelopment"},sql:{title:"SQL",owner:"multipetros"},squirrel:{title:"Squirrel",require:"clike",owner:"RunDevelopment"},stan:{title:"Stan",owner:"RunDevelopment"},stata:{title:"Stata Ado",require:["mata","java","python"],owner:"RunDevelopment"},iecst:{title:"Structured Text (IEC 61131-3)",owner:"serhioromano"},stylus:{title:"Stylus",owner:"vkbansal"},supercollider:{title:"SuperCollider",alias:"sclang",owner:"RunDevelopment"},swift:{title:"Swift",owner:"chrischares"},systemd:{title:"Systemd configuration file",owner:"RunDevelopment"},"t4-templating":{title:"T4 templating",owner:"RunDevelopment"},"t4-cs":{title:"T4 Text Templates (C#)",require:["t4-templating","csharp"],alias:"t4",owner:"RunDevelopment"},"t4-vb":{title:"T4 Text Templates (VB)",require:["t4-templating","vbnet"],owner:"RunDevelopment"},tap:{title:"TAP",owner:"isaacs",require:"yaml"},tcl:{title:"Tcl",owner:"PeterChaplin"},tt2:{title:"Template Toolkit 2",require:["clike","markup-templating"],owner:"gflohr"},textile:{title:"Textile",require:"markup",optional:"css",owner:"Golmote"},toml:{title:"TOML",owner:"RunDevelopment"},tremor:{title:"Tremor",alias:["trickle","troy"],owner:"darach",aliasTitles:{trickle:"trickle",troy:"troy"}},turtle:{title:"Turtle",alias:"trig",aliasTitles:{trig:"TriG"},owner:"jakubklimek"},twig:{title:"Twig",require:"markup-templating",owner:"brandonkelly"},typescript:{title:"TypeScript",require:"javascript",optional:"js-templates",alias:"ts",owner:"vkbansal"},typoscript:{title:"TypoScript",alias:"tsconfig",aliasTitles:{tsconfig:"TSConfig"},owner:"dkern"},unrealscript:{title:"UnrealScript",alias:["uscript","uc"],owner:"RunDevelopment"},uorazor:{title:"UO Razor Script",owner:"jaseowns"},uri:{title:"URI",alias:"url",aliasTitles:{url:"URL"},owner:"RunDevelopment"},v:{title:"V",require:"clike",owner:"taggon"},vala:{title:"Vala",require:"clike",optional:"regex",owner:"TemplarVolk"},vbnet:{title:"VB.Net",require:"basic",owner:"Bigsby"},velocity:{title:"Velocity",require:"markup",owner:"Golmote"},verilog:{title:"Verilog",owner:"a-rey"},vhdl:{title:"VHDL",owner:"a-rey"},vim:{title:"vim",owner:"westonganger"},"visual-basic":{title:"Visual Basic",alias:["vb","vba"],aliasTitles:{vba:"VBA"},owner:"Golmote"},warpscript:{title:"WarpScript",owner:"RunDevelopment"},wasm:{title:"WebAssembly",owner:"Golmote"},"web-idl":{title:"Web IDL",alias:"webidl",owner:"RunDevelopment"},wgsl:{title:"WGSL",owner:"Dr4gonthree"},wiki:{title:"Wiki markup",require:"markup",owner:"Golmote"},wolfram:{title:"Wolfram language",alias:["mathematica","nb","wl"],aliasTitles:{mathematica:"Mathematica",nb:"Mathematica Notebook"},owner:"msollami"},wren:{title:"Wren",owner:"clsource"},xeora:{title:"Xeora",require:"markup",alias:"xeoracube",aliasTitles:{xeoracube:"XeoraCube"},owner:"freakmaxi"},"xml-doc":{title:"XML doc (.net)",require:"markup",modify:["csharp","fsharp","vbnet"],owner:"RunDevelopment"},xojo:{title:"Xojo (REALbasic)",owner:"Golmote"},xquery:{title:"XQuery",require:"markup",owner:"Golmote"},yaml:{title:"YAML",alias:"yml",owner:"hason"},yang:{title:"YANG",owner:"RunDevelopment"},zig:{title:"Zig",owner:"RunDevelopment"}},plugins:{meta:{path:"plugins/{id}/prism-{id}",link:"plugins/{id}/"},"line-highlight":{title:"Line Highlight",description:"Highlights specific lines and/or line ranges."},"line-numbers":{title:"Line Numbers",description:"Line number at the beginning of code lines.",owner:"kuba-kubula"},"show-invisibles":{title:"Show Invisibles",description:"Show hidden characters such as tabs and line breaks.",optional:["autolinker","data-uri-highlight"]},autolinker:{title:"Autolinker",description:"Converts URLs and emails in code to clickable links. Parses Markdown links in comments."},wpd:{title:"WebPlatform Docs",description:'Makes tokens link to <a href="https://webplatform.github.io/docs/">WebPlatform.org documentation</a>. The links open in a new tab.'},"custom-class":{title:"Custom Class",description:"This plugin allows you to prefix Prism's default classes (<code>.comment</code> can become <code>.namespace--comment</code>) or replace them with your defined ones (like <code>.editor__comment</code>). You can even add new classes.",owner:"dvkndn",noCSS:!0},"file-highlight":{title:"File Highlight",description:"Fetch external files and highlight them with Prism. Used on the Prism website itself.",noCSS:!0},"show-language":{title:"Show Language",description:"Display the highlighted language in code blocks (inline code does not show the label).",owner:"nauzilus",noCSS:!0,require:"toolbar"},"jsonp-highlight":{title:"JSONP Highlight",description:"Fetch content with JSONP and highlight some interesting content (e.g. GitHub/Gists or Bitbucket API).",noCSS:!0,owner:"nauzilus"},"highlight-keywords":{title:"Highlight Keywords",description:"Adds special CSS classes for each keyword for fine-grained highlighting.",owner:"vkbansal",noCSS:!0},"remove-initial-line-feed":{title:"Remove initial line feed",description:"Removes the initial line feed in code blocks.",owner:"Golmote",noCSS:!0},"inline-color":{title:"Inline color",description:"Adds a small inline preview for colors in style sheets.",require:"css-extras",owner:"RunDevelopment"},previewers:{title:"Previewers",description:"Previewers for angles, colors, gradients, easing and time.",require:"css-extras",owner:"Golmote"},autoloader:{title:"Autoloader",description:"Automatically loads the needed languages to highlight the code blocks.",owner:"Golmote",noCSS:!0},"keep-markup":{title:"Keep Markup",description:"Prevents custom markup from being dropped out during highlighting.",owner:"Golmote",optional:"normalize-whitespace",noCSS:!0},"command-line":{title:"Command Line",description:"Display a command line with a prompt and, optionally, the output/response from the commands.",owner:"chriswells0"},"unescaped-markup":{title:"Unescaped Markup",description:"Write markup without having to escape anything."},"normalize-whitespace":{title:"Normalize Whitespace",description:"Supports multiple operations to normalize whitespace in code blocks.",owner:"zeitgeist87",optional:"unescaped-markup",noCSS:!0},"data-uri-highlight":{title:"Data-URI Highlight",description:"Highlights data-URI contents.",owner:"Golmote",noCSS:!0},toolbar:{title:"Toolbar",description:"Attach a toolbar for plugins to easily register buttons on the top of a code block.",owner:"mAAdhaTTah"},"copy-to-clipboard":{title:"Copy to Clipboard Button",description:"Add a button that copies the code block to the clipboard when clicked.",owner:"mAAdhaTTah",require:"toolbar",noCSS:!0},"download-button":{title:"Download Button",description:"A button in the toolbar of a code block adding a convenient way to download a code file.",owner:"Golmote",require:"toolbar",noCSS:!0},"match-braces":{title:"Match braces",description:"Highlights matching braces.",owner:"RunDevelopment"},"diff-highlight":{title:"Diff Highlight",description:"Highlights the code inside diff blocks.",owner:"RunDevelopment",require:"diff"},"filter-highlight-all":{title:"Filter highlightAll",description:"Filters the elements the <code>highlightAll</code> and <code>highlightAllUnder</code> methods actually highlight.",owner:"RunDevelopment",noCSS:!0},treeview:{title:"Treeview",description:"A language with special styles to highlight file system tree structures.",owner:"Golmote"}}})},2885:function(e,t,n){const o=n(29901),r=n(39642),i=new Set;function a(e){void 0===e?e=Object.keys(o.languages).filter((e=>"meta"!=e)):Array.isArray(e)||(e=[e]);const t=[...i,...Object.keys(Prism.languages)];r(o,e,t).load((e=>{if(!(e in o.languages))return void(a.silent||console.warn("Language does not exist: "+e));const t="./prism-"+e;delete n.c[n(16500).resolve(t)],delete Prism.languages[e],n(16500)(t),i.add(e)}))}a.silent=!1,e.exports=a},6726:function(e,t,n){var o={"./":2885};function r(e){var t=i(e);return n(t)}function i(e){if(!n.o(o,e)){var t=new Error("Cannot find module '"+e+"'");throw t.code="MODULE_NOT_FOUND",t}return o[e]}r.keys=function(){return Object.keys(o)},r.resolve=i,e.exports=r,r.id=6726},16500:function(e,t,n){var o={"./":2885};function r(e){var t=i(e);return n(t)}function i(e){if(!n.o(o,e)){var t=new Error("Cannot find module '"+e+"'");throw t.code="MODULE_NOT_FOUND",t}return o[e]}r.keys=function(){return Object.keys(o)},r.resolve=i,e.exports=r,r.id=16500},39642:function(e){"use strict";var t=function(){var e=function(){};function t(e,t){Array.isArray(e)?e.forEach(t):null!=e&&t(e,0)}function n(e){for(var t={},n=0,o=e.length;n<o;n++)t[e[n]]=!0;return t}function o(e){var n={},o=[];function r(o,i){if(!(o in n)){i.push(o);var a=i.indexOf(o);if(a<i.length-1)throw new Error("Circular dependency: "+i.slice(a).join(" -> "));var s={},c=e[o];if(c){function d(t){if(!(t in e))throw new Error(o+" depends on an unknown component "+t);if(!(t in s))for(var a in r(t,i),s[t]=!0,n[t])s[a]=!0}t(c.require,d),t(c.optional,d),t(c.modify,d)}n[o]=s,i.pop()}}return function(e){var t=n[e];return t||(r(e,o),t=n[e]),t}}function r(e){for(var t in e)return!0;return!1}return function(i,a,s){var c=function(e){var t={};for(var n in e){var o=e[n];for(var r in o)if("meta"!=r){var i=o[r];t[r]="string"==typeof i?{title:i}:i}}return t}(i),d=function(e){var n;return function(o){if(o in e)return o;if(!n)for(var r in n={},e){var i=e[r];t(i&&i.alias,(function(t){if(t in n)throw new Error(t+" cannot be alias for both "+r+" and "+n[t]);if(t in e)throw new Error(t+" cannot be alias of "+r+" because it is a component.");n[t]=r}))}return n[o]||o}}(c);a=a.map(d),s=(s||[]).map(d);var l=n(a),u=n(s);a.forEach((function e(n){var o=c[n];t(o&&o.require,(function(t){t in u||(l[t]=!0,e(t))}))}));for(var p,m=o(c),f=l;r(f);){for(var b in p={},f){var h=c[b];t(h&&h.modify,(function(e){e in u&&(p[e]=!0)}))}for(var v in u)if(!(v in l))for(var g in m(v))if(g in l){p[v]=!0;break}for(var y in f=p)l[y]=!0}var w={getIds:function(){var e=[];return w.load((function(t){e.push(t)})),e},load:function(t,n){return function(t,n,o,r){var i=r?r.series:void 0,a=r?r.parallel:e,s={},c={};function d(e){if(e in s)return s[e];c[e]=!0;var r,l=[];for(var u in t(e))u in n&&l.push(u);if(0===l.length)r=o(e);else{var p=a(l.map((function(e){var t=d(e);return delete c[e],t})));i?r=i(p,(function(){return o(e)})):o(e)}return s[e]=r}for(var l in n)d(l);var u=[];for(var p in c)u.push(s[p]);return a(u)}(m,l,t,n)}};return w}}();e.exports=t},92703:function(e,t,n){"use strict";var o=n(50414);function r(){}function i(){}i.resetWarningCache=r,e.exports=function(){function e(e,t,n,r,i,a){if(a!==o){var s=new Error("Calling PropTypes validators directly is not supported by the `prop-types` package. Use PropTypes.checkPropTypes() to call them. Read more at http://fb.me/use-check-prop-types");throw s.name="Invariant Violation",s}}function t(){return e}e.isRequired=e;var n={array:e,bigint:e,bool:e,func:e,number:e,object:e,string:e,symbol:e,any:e,arrayOf:t,element:e,elementType:e,instanceOf:t,node:e,objectOf:t,oneOf:t,oneOfType:t,shape:t,exact:t,checkPropTypes:i,resetWarningCache:r};return n.PropTypes=n,n}},45697:function(e,t,n){e.exports=n(92703)()},50414:function(e){"use strict";e.exports="SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED"},64448:function(e,t,n){"use strict";var o=n(67294),r=n(27418),i=n(63840);function a(e){for(var t="https://reactjs.org/docs/error-decoder.html?invariant="+e,n=1;n<arguments.length;n++)t+="&args[]="+encodeURIComponent(arguments[n]);return"Minified React error #"+e+"; visit "+t+" for the full message or use the non-minified dev environment for full errors and additional helpful warnings."}if(!o)throw Error(a(227));var s=new Set,c={};function d(e,t){l(e,t),l(e+"Capture",t)}function l(e,t){for(c[e]=t,e=0;e<t.length;e++)s.add(t[e])}var u=!("undefined"==typeof window||void 0===window.document||void 0===window.document.createElement),p=/^[:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD][:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD\-.0-9\u00B7\u0300-\u036F\u203F-\u2040]*$/,m=Object.prototype.hasOwnProperty,f={},b={};function h(e,t,n,o,r,i,a){this.acceptsBooleans=2===t||3===t||4===t,this.attributeName=o,this.attributeNamespace=r,this.mustUseProperty=n,this.propertyName=e,this.type=t,this.sanitizeURL=i,this.removeEmptyString=a}var v={};"children dangerouslySetInnerHTML defaultValue defaultChecked innerHTML suppressContentEditableWarning suppressHydrationWarning style".split(" ").forEach((function(e){v[e]=new h(e,0,!1,e,null,!1,!1)})),[["acceptCharset","accept-charset"],["className","class"],["htmlFor","for"],["httpEquiv","http-equiv"]].forEach((function(e){var t=e[0];v[t]=new h(t,1,!1,e[1],null,!1,!1)})),["contentEditable","draggable","spellCheck","value"].forEach((function(e){v[e]=new h(e,2,!1,e.toLowerCase(),null,!1,!1)})),["autoReverse","externalResourcesRequired","focusable","preserveAlpha"].forEach((function(e){v[e]=new h(e,2,!1,e,null,!1,!1)})),"allowFullScreen async autoFocus autoPlay controls default defer disabled disablePictureInPicture disableRemotePlayback formNoValidate hidden loop noModule noValidate open playsInline readOnly required reversed scoped seamless itemScope".split(" ").forEach((function(e){v[e]=new h(e,3,!1,e.toLowerCase(),null,!1,!1)})),["checked","multiple","muted","selected"].forEach((function(e){v[e]=new h(e,3,!0,e,null,!1,!1)})),["capture","download"].forEach((function(e){v[e]=new h(e,4,!1,e,null,!1,!1)})),["cols","rows","size","span"].forEach((function(e){v[e]=new h(e,6,!1,e,null,!1,!1)})),["rowSpan","start"].forEach((function(e){v[e]=new h(e,5,!1,e.toLowerCase(),null,!1,!1)}));var g=/[\-:]([a-z])/g;function y(e){return e[1].toUpperCase()}function w(e,t,n,o){var r=v.hasOwnProperty(t)?v[t]:null;(null!==r?0===r.type:!o&&(2<t.length&&("o"===t[0]||"O"===t[0])&&("n"===t[1]||"N"===t[1])))||(function(e,t,n,o){if(null==t||function(e,t,n,o){if(null!==n&&0===n.type)return!1;switch(typeof t){case"function":case"symbol":return!0;case"boolean":return!o&&(null!==n?!n.acceptsBooleans:"data-"!==(e=e.toLowerCase().slice(0,5))&&"aria-"!==e);default:return!1}}(e,t,n,o))return!0;if(o)return!1;if(null!==n)switch(n.type){case 3:return!t;case 4:return!1===t;case 5:return isNaN(t);case 6:return isNaN(t)||1>t}return!1}(t,n,r,o)&&(n=null),o||null===r?function(e){return!!m.call(b,e)||!m.call(f,e)&&(p.test(e)?b[e]=!0:(f[e]=!0,!1))}(t)&&(null===n?e.removeAttribute(t):e.setAttribute(t,""+n)):r.mustUseProperty?e[r.propertyName]=null===n?3!==r.type&&"":n:(t=r.attributeName,o=r.attributeNamespace,null===n?e.removeAttribute(t):(n=3===(r=r.type)||4===r&&!0===n?"":""+n,o?e.setAttributeNS(o,t,n):e.setAttribute(t,n))))}"accent-height alignment-baseline arabic-form baseline-shift cap-height clip-path clip-rule color-interpolation color-interpolation-filters color-profile color-rendering dominant-baseline enable-background fill-opacity fill-rule flood-color flood-opacity font-family font-size font-size-adjust font-stretch font-style font-variant font-weight glyph-name glyph-orientation-horizontal glyph-orientation-vertical horiz-adv-x horiz-origin-x image-rendering letter-spacing lighting-color marker-end marker-mid marker-start overline-position overline-thickness paint-order panose-1 pointer-events rendering-intent shape-rendering stop-color stop-opacity strikethrough-position strikethrough-thickness stroke-dasharray stroke-dashoffset stroke-linecap stroke-linejoin stroke-miterlimit stroke-opacity stroke-width text-anchor text-decoration text-rendering underline-position underline-thickness unicode-bidi unicode-range units-per-em v-alphabetic v-hanging v-ideographic v-mathematical vector-effect vert-adv-y vert-origin-x vert-origin-y word-spacing writing-mode xmlns:xlink x-height".split(" ").forEach((function(e){var t=e.replace(g,y);v[t]=new h(t,1,!1,e,null,!1,!1)})),"xlink:actuate xlink:arcrole xlink:role xlink:show xlink:title xlink:type".split(" ").forEach((function(e){var t=e.replace(g,y);v[t]=new h(t,1,!1,e,"http://www.w3.org/1999/xlink",!1,!1)})),["xml:base","xml:lang","xml:space"].forEach((function(e){var t=e.replace(g,y);v[t]=new h(t,1,!1,e,"http://www.w3.org/XML/1998/namespace",!1,!1)})),["tabIndex","crossOrigin"].forEach((function(e){v[e]=new h(e,1,!1,e.toLowerCase(),null,!1,!1)})),v.xlinkHref=new h("xlinkHref",1,!1,"xlink:href","http://www.w3.org/1999/xlink",!0,!1),["src","href","action","formAction"].forEach((function(e){v[e]=new h(e,1,!1,e.toLowerCase(),null,!0,!0)}));var _=o.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED,k=60103,S=60106,x=60107,E=60108,C=60114,T=60109,P=60110,A=60112,L=60113,R=60120,N=60115,O=60116,I=60121,D=60128,M=60129,B=60130,F=60131;if("function"==typeof Symbol&&Symbol.for){var z=Symbol.for;k=z("react.element"),S=z("react.portal"),x=z("react.fragment"),E=z("react.strict_mode"),C=z("react.profiler"),T=z("react.provider"),P=z("react.context"),A=z("react.forward_ref"),L=z("react.suspense"),R=z("react.suspense_list"),N=z("react.memo"),O=z("react.lazy"),I=z("react.block"),z("react.scope"),D=z("react.opaque.id"),M=z("react.debug_trace_mode"),B=z("react.offscreen"),F=z("react.legacy_hidden")}var j,U="function"==typeof Symbol&&Symbol.iterator;function $(e){return null===e||"object"!=typeof e?null:"function"==typeof(e=U&&e[U]||e["@@iterator"])?e:null}function q(e){if(void 0===j)try{throw Error()}catch(n){var t=n.stack.trim().match(/\n( *(at )?)/);j=t&&t[1]||""}return"\n"+j+e}var H=!1;function G(e,t){if(!e||H)return"";H=!0;var n=Error.prepareStackTrace;Error.prepareStackTrace=void 0;try{if(t)if(t=function(){throw Error()},Object.defineProperty(t.prototype,"props",{set:function(){throw Error()}}),"object"==typeof Reflect&&Reflect.construct){try{Reflect.construct(t,[])}catch(c){var o=c}Reflect.construct(e,[],t)}else{try{t.call()}catch(c){o=c}e.call(t.prototype)}else{try{throw Error()}catch(c){o=c}e()}}catch(c){if(c&&o&&"string"==typeof c.stack){for(var r=c.stack.split("\n"),i=o.stack.split("\n"),a=r.length-1,s=i.length-1;1<=a&&0<=s&&r[a]!==i[s];)s--;for(;1<=a&&0<=s;a--,s--)if(r[a]!==i[s]){if(1!==a||1!==s)do{if(a--,0>--s||r[a]!==i[s])return"\n"+r[a].replace(" at new "," at ")}while(1<=a&&0<=s);break}}}finally{H=!1,Error.prepareStackTrace=n}return(e=e?e.displayName||e.name:"")?q(e):""}function Z(e){switch(e.tag){case 5:return q(e.type);case 16:return q("Lazy");case 13:return q("Suspense");case 19:return q("SuspenseList");case 0:case 2:case 15:return e=G(e.type,!1);case 11:return e=G(e.type.render,!1);case 22:return e=G(e.type._render,!1);case 1:return e=G(e.type,!0);default:return""}}function V(e){if(null==e)return null;if("function"==typeof e)return e.displayName||e.name||null;if("string"==typeof e)return e;switch(e){case x:return"Fragment";case S:return"Portal";case C:return"Profiler";case E:return"StrictMode";case L:return"Suspense";case R:return"SuspenseList"}if("object"==typeof e)switch(e.$$typeof){case P:return(e.displayName||"Context")+".Consumer";case T:return(e._context.displayName||"Context")+".Provider";case A:var t=e.render;return t=t.displayName||t.name||"",e.displayName||(""!==t?"ForwardRef("+t+")":"ForwardRef");case N:return V(e.type);case I:return V(e._render);case O:t=e._payload,e=e._init;try{return V(e(t))}catch(n){}}return null}function W(e){switch(typeof e){case"boolean":case"number":case"object":case"string":case"undefined":return e;default:return""}}function K(e){var t=e.type;return(e=e.nodeName)&&"input"===e.toLowerCase()&&("checkbox"===t||"radio"===t)}function Y(e){e._valueTracker||(e._valueTracker=function(e){var t=K(e)?"checked":"value",n=Object.getOwnPropertyDescriptor(e.constructor.prototype,t),o=""+e[t];if(!e.hasOwnProperty(t)&&void 0!==n&&"function"==typeof n.get&&"function"==typeof n.set){var r=n.get,i=n.set;return Object.defineProperty(e,t,{configurable:!0,get:function(){return r.call(this)},set:function(e){o=""+e,i.call(this,e)}}),Object.defineProperty(e,t,{enumerable:n.enumerable}),{getValue:function(){return o},setValue:function(e){o=""+e},stopTracking:function(){e._valueTracker=null,delete e[t]}}}}(e))}function Q(e){if(!e)return!1;var t=e._valueTracker;if(!t)return!0;var n=t.getValue(),o="";return e&&(o=K(e)?e.checked?"true":"false":e.value),(e=o)!==n&&(t.setValue(e),!0)}function X(e){if(void 0===(e=e||("undefined"!=typeof document?document:void 0)))return null;try{return e.activeElement||e.body}catch(t){return e.body}}function J(e,t){var n=t.checked;return r({},t,{defaultChecked:void 0,defaultValue:void 0,value:void 0,checked:null!=n?n:e._wrapperState.initialChecked})}function ee(e,t){var n=null==t.defaultValue?"":t.defaultValue,o=null!=t.checked?t.checked:t.defaultChecked;n=W(null!=t.value?t.value:n),e._wrapperState={initialChecked:o,initialValue:n,controlled:"checkbox"===t.type||"radio"===t.type?null!=t.checked:null!=t.value}}function te(e,t){null!=(t=t.checked)&&w(e,"checked",t,!1)}function ne(e,t){te(e,t);var n=W(t.value),o=t.type;if(null!=n)"number"===o?(0===n&&""===e.value||e.value!=n)&&(e.value=""+n):e.value!==""+n&&(e.value=""+n);else if("submit"===o||"reset"===o)return void e.removeAttribute("value");t.hasOwnProperty("value")?re(e,t.type,n):t.hasOwnProperty("defaultValue")&&re(e,t.type,W(t.defaultValue)),null==t.checked&&null!=t.defaultChecked&&(e.defaultChecked=!!t.defaultChecked)}function oe(e,t,n){if(t.hasOwnProperty("value")||t.hasOwnProperty("defaultValue")){var o=t.type;if(!("submit"!==o&&"reset"!==o||void 0!==t.value&&null!==t.value))return;t=""+e._wrapperState.initialValue,n||t===e.value||(e.value=t),e.defaultValue=t}""!==(n=e.name)&&(e.name=""),e.defaultChecked=!!e._wrapperState.initialChecked,""!==n&&(e.name=n)}function re(e,t,n){"number"===t&&X(e.ownerDocument)===e||(null==n?e.defaultValue=""+e._wrapperState.initialValue:e.defaultValue!==""+n&&(e.defaultValue=""+n))}function ie(e,t){return e=r({children:void 0},t),(t=function(e){var t="";return o.Children.forEach(e,(function(e){null!=e&&(t+=e)})),t}(t.children))&&(e.children=t),e}function ae(e,t,n,o){if(e=e.options,t){t={};for(var r=0;r<n.length;r++)t["$"+n[r]]=!0;for(n=0;n<e.length;n++)r=t.hasOwnProperty("$"+e[n].value),e[n].selected!==r&&(e[n].selected=r),r&&o&&(e[n].defaultSelected=!0)}else{for(n=""+W(n),t=null,r=0;r<e.length;r++){if(e[r].value===n)return e[r].selected=!0,void(o&&(e[r].defaultSelected=!0));null!==t||e[r].disabled||(t=e[r])}null!==t&&(t.selected=!0)}}function se(e,t){if(null!=t.dangerouslySetInnerHTML)throw Error(a(91));return r({},t,{value:void 0,defaultValue:void 0,children:""+e._wrapperState.initialValue})}function ce(e,t){var n=t.value;if(null==n){if(n=t.children,t=t.defaultValue,null!=n){if(null!=t)throw Error(a(92));if(Array.isArray(n)){if(!(1>=n.length))throw Error(a(93));n=n[0]}t=n}null==t&&(t=""),n=t}e._wrapperState={initialValue:W(n)}}function de(e,t){var n=W(t.value),o=W(t.defaultValue);null!=n&&((n=""+n)!==e.value&&(e.value=n),null==t.defaultValue&&e.defaultValue!==n&&(e.defaultValue=n)),null!=o&&(e.defaultValue=""+o)}function le(e){var t=e.textContent;t===e._wrapperState.initialValue&&""!==t&&null!==t&&(e.value=t)}var ue={html:"http://www.w3.org/1999/xhtml",mathml:"http://www.w3.org/1998/Math/MathML",svg:"http://www.w3.org/2000/svg"};function pe(e){switch(e){case"svg":return"http://www.w3.org/2000/svg";case"math":return"http://www.w3.org/1998/Math/MathML";default:return"http://www.w3.org/1999/xhtml"}}function me(e,t){return null==e||"http://www.w3.org/1999/xhtml"===e?pe(t):"http://www.w3.org/2000/svg"===e&&"foreignObject"===t?"http://www.w3.org/1999/xhtml":e}var fe,be,he=(be=function(e,t){if(e.namespaceURI!==ue.svg||"innerHTML"in e)e.innerHTML=t;else{for((fe=fe||document.createElement("div")).innerHTML="<svg>"+t.valueOf().toString()+"</svg>",t=fe.firstChild;e.firstChild;)e.removeChild(e.firstChild);for(;t.firstChild;)e.appendChild(t.firstChild)}},"undefined"!=typeof MSApp&&MSApp.execUnsafeLocalFunction?function(e,t,n,o){MSApp.execUnsafeLocalFunction((function(){return be(e,t)}))}:be);function ve(e,t){if(t){var n=e.firstChild;if(n&&n===e.lastChild&&3===n.nodeType)return void(n.nodeValue=t)}e.textContent=t}var ge={animationIterationCount:!0,borderImageOutset:!0,borderImageSlice:!0,borderImageWidth:!0,boxFlex:!0,boxFlexGroup:!0,boxOrdinalGroup:!0,columnCount:!0,columns:!0,flex:!0,flexGrow:!0,flexPositive:!0,flexShrink:!0,flexNegative:!0,flexOrder:!0,gridArea:!0,gridRow:!0,gridRowEnd:!0,gridRowSpan:!0,gridRowStart:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnSpan:!0,gridColumnStart:!0,fontWeight:!0,lineClamp:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,tabSize:!0,widows:!0,zIndex:!0,zoom:!0,fillOpacity:!0,floodOpacity:!0,stopOpacity:!0,strokeDasharray:!0,strokeDashoffset:!0,strokeMiterlimit:!0,strokeOpacity:!0,strokeWidth:!0},ye=["Webkit","ms","Moz","O"];function we(e,t,n){return null==t||"boolean"==typeof t||""===t?"":n||"number"!=typeof t||0===t||ge.hasOwnProperty(e)&&ge[e]?(""+t).trim():t+"px"}function _e(e,t){for(var n in e=e.style,t)if(t.hasOwnProperty(n)){var o=0===n.indexOf("--"),r=we(n,t[n],o);"float"===n&&(n="cssFloat"),o?e.setProperty(n,r):e[n]=r}}Object.keys(ge).forEach((function(e){ye.forEach((function(t){t=t+e.charAt(0).toUpperCase()+e.substring(1),ge[t]=ge[e]}))}));var ke=r({menuitem:!0},{area:!0,base:!0,br:!0,col:!0,embed:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0});function Se(e,t){if(t){if(ke[e]&&(null!=t.children||null!=t.dangerouslySetInnerHTML))throw Error(a(137,e));if(null!=t.dangerouslySetInnerHTML){if(null!=t.children)throw Error(a(60));if("object"!=typeof t.dangerouslySetInnerHTML||!("__html"in t.dangerouslySetInnerHTML))throw Error(a(61))}if(null!=t.style&&"object"!=typeof t.style)throw Error(a(62))}}function xe(e,t){if(-1===e.indexOf("-"))return"string"==typeof t.is;switch(e){case"annotation-xml":case"color-profile":case"font-face":case"font-face-src":case"font-face-uri":case"font-face-format":case"font-face-name":case"missing-glyph":return!1;default:return!0}}function Ee(e){return(e=e.target||e.srcElement||window).correspondingUseElement&&(e=e.correspondingUseElement),3===e.nodeType?e.parentNode:e}var Ce=null,Te=null,Pe=null;function Ae(e){if(e=or(e)){if("function"!=typeof Ce)throw Error(a(280));var t=e.stateNode;t&&(t=ir(t),Ce(e.stateNode,e.type,t))}}function Le(e){Te?Pe?Pe.push(e):Pe=[e]:Te=e}function Re(){if(Te){var e=Te,t=Pe;if(Pe=Te=null,Ae(e),t)for(e=0;e<t.length;e++)Ae(t[e])}}function Ne(e,t){return e(t)}function Oe(e,t,n,o,r){return e(t,n,o,r)}function Ie(){}var De=Ne,Me=!1,Be=!1;function Fe(){null===Te&&null===Pe||(Ie(),Re())}function ze(e,t){var n=e.stateNode;if(null===n)return null;var o=ir(n);if(null===o)return null;n=o[t];e:switch(t){case"onClick":case"onClickCapture":case"onDoubleClick":case"onDoubleClickCapture":case"onMouseDown":case"onMouseDownCapture":case"onMouseMove":case"onMouseMoveCapture":case"onMouseUp":case"onMouseUpCapture":case"onMouseEnter":(o=!o.disabled)||(o=!("button"===(e=e.type)||"input"===e||"select"===e||"textarea"===e)),e=!o;break e;default:e=!1}if(e)return null;if(n&&"function"!=typeof n)throw Error(a(231,t,typeof n));return n}var je=!1;if(u)try{var Ue={};Object.defineProperty(Ue,"passive",{get:function(){je=!0}}),window.addEventListener("test",Ue,Ue),window.removeEventListener("test",Ue,Ue)}catch(be){je=!1}function $e(e,t,n,o,r,i,a,s,c){var d=Array.prototype.slice.call(arguments,3);try{t.apply(n,d)}catch(l){this.onError(l)}}var qe=!1,He=null,Ge=!1,Ze=null,Ve={onError:function(e){qe=!0,He=e}};function We(e,t,n,o,r,i,a,s,c){qe=!1,He=null,$e.apply(Ve,arguments)}function Ke(e){var t=e,n=e;if(e.alternate)for(;t.return;)t=t.return;else{e=t;do{0!=(1026&(t=e).flags)&&(n=t.return),e=t.return}while(e)}return 3===t.tag?n:null}function Ye(e){if(13===e.tag){var t=e.memoizedState;if(null===t&&(null!==(e=e.alternate)&&(t=e.memoizedState)),null!==t)return t.dehydrated}return null}function Qe(e){if(Ke(e)!==e)throw Error(a(188))}function Xe(e){if(e=function(e){var t=e.alternate;if(!t){if(null===(t=Ke(e)))throw Error(a(188));return t!==e?null:e}for(var n=e,o=t;;){var r=n.return;if(null===r)break;var i=r.alternate;if(null===i){if(null!==(o=r.return)){n=o;continue}break}if(r.child===i.child){for(i=r.child;i;){if(i===n)return Qe(r),e;if(i===o)return Qe(r),t;i=i.sibling}throw Error(a(188))}if(n.return!==o.return)n=r,o=i;else{for(var s=!1,c=r.child;c;){if(c===n){s=!0,n=r,o=i;break}if(c===o){s=!0,o=r,n=i;break}c=c.sibling}if(!s){for(c=i.child;c;){if(c===n){s=!0,n=i,o=r;break}if(c===o){s=!0,o=i,n=r;break}c=c.sibling}if(!s)throw Error(a(189))}}if(n.alternate!==o)throw Error(a(190))}if(3!==n.tag)throw Error(a(188));return n.stateNode.current===n?e:t}(e),!e)return null;for(var t=e;;){if(5===t.tag||6===t.tag)return t;if(t.child)t.child.return=t,t=t.child;else{if(t===e)break;for(;!t.sibling;){if(!t.return||t.return===e)return null;t=t.return}t.sibling.return=t.return,t=t.sibling}}return null}function Je(e,t){for(var n=e.alternate;null!==t;){if(t===e||t===n)return!0;t=t.return}return!1}var et,tt,nt,ot,rt=!1,it=[],at=null,st=null,ct=null,dt=new Map,lt=new Map,ut=[],pt="mousedown mouseup touchcancel touchend touchstart auxclick dblclick pointercancel pointerdown pointerup dragend dragstart drop compositionend compositionstart keydown keypress keyup input textInput copy cut paste click change contextmenu reset submit".split(" ");function mt(e,t,n,o,r){return{blockedOn:e,domEventName:t,eventSystemFlags:16|n,nativeEvent:r,targetContainers:[o]}}function ft(e,t){switch(e){case"focusin":case"focusout":at=null;break;case"dragenter":case"dragleave":st=null;break;case"mouseover":case"mouseout":ct=null;break;case"pointerover":case"pointerout":dt.delete(t.pointerId);break;case"gotpointercapture":case"lostpointercapture":lt.delete(t.pointerId)}}function bt(e,t,n,o,r,i){return null===e||e.nativeEvent!==i?(e=mt(t,n,o,r,i),null!==t&&(null!==(t=or(t))&&tt(t)),e):(e.eventSystemFlags|=o,t=e.targetContainers,null!==r&&-1===t.indexOf(r)&&t.push(r),e)}function ht(e){var t=nr(e.target);if(null!==t){var n=Ke(t);if(null!==n)if(13===(t=n.tag)){if(null!==(t=Ye(n)))return e.blockedOn=t,void ot(e.lanePriority,(function(){i.unstable_runWithPriority(e.priority,(function(){nt(n)}))}))}else if(3===t&&n.stateNode.hydrate)return void(e.blockedOn=3===n.tag?n.stateNode.containerInfo:null)}e.blockedOn=null}function vt(e){if(null!==e.blockedOn)return!1;for(var t=e.targetContainers;0<t.length;){var n=Xt(e.domEventName,e.eventSystemFlags,t[0],e.nativeEvent);if(null!==n)return null!==(t=or(n))&&tt(t),e.blockedOn=n,!1;t.shift()}return!0}function gt(e,t,n){vt(e)&&n.delete(t)}function yt(){for(rt=!1;0<it.length;){var e=it[0];if(null!==e.blockedOn){null!==(e=or(e.blockedOn))&&et(e);break}for(var t=e.targetContainers;0<t.length;){var n=Xt(e.domEventName,e.eventSystemFlags,t[0],e.nativeEvent);if(null!==n){e.blockedOn=n;break}t.shift()}null===e.blockedOn&&it.shift()}null!==at&&vt(at)&&(at=null),null!==st&&vt(st)&&(st=null),null!==ct&&vt(ct)&&(ct=null),dt.forEach(gt),lt.forEach(gt)}function wt(e,t){e.blockedOn===t&&(e.blockedOn=null,rt||(rt=!0,i.unstable_scheduleCallback(i.unstable_NormalPriority,yt)))}function _t(e){function t(t){return wt(t,e)}if(0<it.length){wt(it[0],e);for(var n=1;n<it.length;n++){var o=it[n];o.blockedOn===e&&(o.blockedOn=null)}}for(null!==at&&wt(at,e),null!==st&&wt(st,e),null!==ct&&wt(ct,e),dt.forEach(t),lt.forEach(t),n=0;n<ut.length;n++)(o=ut[n]).blockedOn===e&&(o.blockedOn=null);for(;0<ut.length&&null===(n=ut[0]).blockedOn;)ht(n),null===n.blockedOn&&ut.shift()}function kt(e,t){var n={};return n[e.toLowerCase()]=t.toLowerCase(),n["Webkit"+e]="webkit"+t,n["Moz"+e]="moz"+t,n}var St={animationend:kt("Animation","AnimationEnd"),animationiteration:kt("Animation","AnimationIteration"),animationstart:kt("Animation","AnimationStart"),transitionend:kt("Transition","TransitionEnd")},xt={},Et={};function Ct(e){if(xt[e])return xt[e];if(!St[e])return e;var t,n=St[e];for(t in n)if(n.hasOwnProperty(t)&&t in Et)return xt[e]=n[t];return e}u&&(Et=document.createElement("div").style,"AnimationEvent"in window||(delete St.animationend.animation,delete St.animationiteration.animation,delete St.animationstart.animation),"TransitionEvent"in window||delete St.transitionend.transition);var Tt=Ct("animationend"),Pt=Ct("animationiteration"),At=Ct("animationstart"),Lt=Ct("transitionend"),Rt=new Map,Nt=new Map,Ot=["abort","abort",Tt,"animationEnd",Pt,"animationIteration",At,"animationStart","canplay","canPlay","canplaythrough","canPlayThrough","durationchange","durationChange","emptied","emptied","encrypted","encrypted","ended","ended","error","error","gotpointercapture","gotPointerCapture","load","load","loadeddata","loadedData","loadedmetadata","loadedMetadata","loadstart","loadStart","lostpointercapture","lostPointerCapture","playing","playing","progress","progress","seeking","seeking","stalled","stalled","suspend","suspend","timeupdate","timeUpdate",Lt,"transitionEnd","waiting","waiting"];function It(e,t){for(var n=0;n<e.length;n+=2){var o=e[n],r=e[n+1];r="on"+(r[0].toUpperCase()+r.slice(1)),Nt.set(o,t),Rt.set(o,r),d(r,[o])}}(0,i.unstable_now)();var Dt=8;function Mt(e){if(0!=(1&e))return Dt=15,1;if(0!=(2&e))return Dt=14,2;if(0!=(4&e))return Dt=13,4;var t=24&e;return 0!==t?(Dt=12,t):0!=(32&e)?(Dt=11,32):0!==(t=192&e)?(Dt=10,t):0!=(256&e)?(Dt=9,256):0!==(t=3584&e)?(Dt=8,t):0!=(4096&e)?(Dt=7,4096):0!==(t=4186112&e)?(Dt=6,t):0!==(t=62914560&e)?(Dt=5,t):67108864&e?(Dt=4,67108864):0!=(134217728&e)?(Dt=3,134217728):0!==(t=805306368&e)?(Dt=2,t):0!=(1073741824&e)?(Dt=1,1073741824):(Dt=8,e)}function Bt(e,t){var n=e.pendingLanes;if(0===n)return Dt=0;var o=0,r=0,i=e.expiredLanes,a=e.suspendedLanes,s=e.pingedLanes;if(0!==i)o=i,r=Dt=15;else if(0!==(i=134217727&n)){var c=i&~a;0!==c?(o=Mt(c),r=Dt):0!==(s&=i)&&(o=Mt(s),r=Dt)}else 0!==(i=n&~a)?(o=Mt(i),r=Dt):0!==s&&(o=Mt(s),r=Dt);if(0===o)return 0;if(o=n&((0>(o=31-qt(o))?0:1<<o)<<1)-1,0!==t&&t!==o&&0==(t&a)){if(Mt(t),r<=Dt)return t;Dt=r}if(0!==(t=e.entangledLanes))for(e=e.entanglements,t&=o;0<t;)r=1<<(n=31-qt(t)),o|=e[n],t&=~r;return o}function Ft(e){return 0!==(e=-1073741825&e.pendingLanes)?e:1073741824&e?1073741824:0}function zt(e,t){switch(e){case 15:return 1;case 14:return 2;case 12:return 0===(e=jt(24&~t))?zt(10,t):e;case 10:return 0===(e=jt(192&~t))?zt(8,t):e;case 8:return 0===(e=jt(3584&~t))&&(0===(e=jt(4186112&~t))&&(e=512)),e;case 2:return 0===(t=jt(805306368&~t))&&(t=268435456),t}throw Error(a(358,e))}function jt(e){return e&-e}function Ut(e){for(var t=[],n=0;31>n;n++)t.push(e);return t}function $t(e,t,n){e.pendingLanes|=t;var o=t-1;e.suspendedLanes&=o,e.pingedLanes&=o,(e=e.eventTimes)[t=31-qt(t)]=n}var qt=Math.clz32?Math.clz32:function(e){return 0===e?32:31-(Ht(e)/Gt|0)|0},Ht=Math.log,Gt=Math.LN2;var Zt=i.unstable_UserBlockingPriority,Vt=i.unstable_runWithPriority,Wt=!0;function Kt(e,t,n,o){Me||Ie();var r=Qt,i=Me;Me=!0;try{Oe(r,e,t,n,o)}finally{(Me=i)||Fe()}}function Yt(e,t,n,o){Vt(Zt,Qt.bind(null,e,t,n,o))}function Qt(e,t,n,o){var r;if(Wt)if((r=0==(4&t))&&0<it.length&&-1<pt.indexOf(e))e=mt(null,e,t,n,o),it.push(e);else{var i=Xt(e,t,n,o);if(null===i)r&&ft(e,o);else{if(r){if(-1<pt.indexOf(e))return e=mt(i,e,t,n,o),void it.push(e);if(function(e,t,n,o,r){switch(t){case"focusin":return at=bt(at,e,t,n,o,r),!0;case"dragenter":return st=bt(st,e,t,n,o,r),!0;case"mouseover":return ct=bt(ct,e,t,n,o,r),!0;case"pointerover":var i=r.pointerId;return dt.set(i,bt(dt.get(i)||null,e,t,n,o,r)),!0;case"gotpointercapture":return i=r.pointerId,lt.set(i,bt(lt.get(i)||null,e,t,n,o,r)),!0}return!1}(i,e,t,n,o))return;ft(e,o)}Do(e,t,o,null,n)}}}function Xt(e,t,n,o){var r=Ee(o);if(null!==(r=nr(r))){var i=Ke(r);if(null===i)r=null;else{var a=i.tag;if(13===a){if(null!==(r=Ye(i)))return r;r=null}else if(3===a){if(i.stateNode.hydrate)return 3===i.tag?i.stateNode.containerInfo:null;r=null}else i!==r&&(r=null)}}return Do(e,t,o,r,n),null}var Jt=null,en=null,tn=null;function nn(){if(tn)return tn;var e,t,n=en,o=n.length,r="value"in Jt?Jt.value:Jt.textContent,i=r.length;for(e=0;e<o&&n[e]===r[e];e++);var a=o-e;for(t=1;t<=a&&n[o-t]===r[i-t];t++);return tn=r.slice(e,1<t?1-t:void 0)}function on(e){var t=e.keyCode;return"charCode"in e?0===(e=e.charCode)&&13===t&&(e=13):e=t,10===e&&(e=13),32<=e||13===e?e:0}function rn(){return!0}function an(){return!1}function sn(e){function t(t,n,o,r,i){for(var a in this._reactName=t,this._targetInst=o,this.type=n,this.nativeEvent=r,this.target=i,this.currentTarget=null,e)e.hasOwnProperty(a)&&(t=e[a],this[a]=t?t(r):r[a]);return this.isDefaultPrevented=(null!=r.defaultPrevented?r.defaultPrevented:!1===r.returnValue)?rn:an,this.isPropagationStopped=an,this}return r(t.prototype,{preventDefault:function(){this.defaultPrevented=!0;var e=this.nativeEvent;e&&(e.preventDefault?e.preventDefault():"unknown"!=typeof e.returnValue&&(e.returnValue=!1),this.isDefaultPrevented=rn)},stopPropagation:function(){var e=this.nativeEvent;e&&(e.stopPropagation?e.stopPropagation():"unknown"!=typeof e.cancelBubble&&(e.cancelBubble=!0),this.isPropagationStopped=rn)},persist:function(){},isPersistent:rn}),t}var cn,dn,ln,un={eventPhase:0,bubbles:0,cancelable:0,timeStamp:function(e){return e.timeStamp||Date.now()},defaultPrevented:0,isTrusted:0},pn=sn(un),mn=r({},un,{view:0,detail:0}),fn=sn(mn),bn=r({},mn,{screenX:0,screenY:0,clientX:0,clientY:0,pageX:0,pageY:0,ctrlKey:0,shiftKey:0,altKey:0,metaKey:0,getModifierState:Tn,button:0,buttons:0,relatedTarget:function(e){return void 0===e.relatedTarget?e.fromElement===e.srcElement?e.toElement:e.fromElement:e.relatedTarget},movementX:function(e){return"movementX"in e?e.movementX:(e!==ln&&(ln&&"mousemove"===e.type?(cn=e.screenX-ln.screenX,dn=e.screenY-ln.screenY):dn=cn=0,ln=e),cn)},movementY:function(e){return"movementY"in e?e.movementY:dn}}),hn=sn(bn),vn=sn(r({},bn,{dataTransfer:0})),gn=sn(r({},mn,{relatedTarget:0})),yn=sn(r({},un,{animationName:0,elapsedTime:0,pseudoElement:0})),wn=r({},un,{clipboardData:function(e){return"clipboardData"in e?e.clipboardData:window.clipboardData}}),_n=sn(wn),kn=sn(r({},un,{data:0})),Sn={Esc:"Escape",Spacebar:" ",Left:"ArrowLeft",Up:"ArrowUp",Right:"ArrowRight",Down:"ArrowDown",Del:"Delete",Win:"OS",Menu:"ContextMenu",Apps:"ContextMenu",Scroll:"ScrollLock",MozPrintableKey:"Unidentified"},xn={8:"Backspace",9:"Tab",12:"Clear",13:"Enter",16:"Shift",17:"Control",18:"Alt",19:"Pause",20:"CapsLock",27:"Escape",32:" ",33:"PageUp",34:"PageDown",35:"End",36:"Home",37:"ArrowLeft",38:"ArrowUp",39:"ArrowRight",40:"ArrowDown",45:"Insert",46:"Delete",112:"F1",113:"F2",114:"F3",115:"F4",116:"F5",117:"F6",118:"F7",119:"F8",120:"F9",121:"F10",122:"F11",123:"F12",144:"NumLock",145:"ScrollLock",224:"Meta"},En={Alt:"altKey",Control:"ctrlKey",Meta:"metaKey",Shift:"shiftKey"};function Cn(e){var t=this.nativeEvent;return t.getModifierState?t.getModifierState(e):!!(e=En[e])&&!!t[e]}function Tn(){return Cn}var Pn=r({},mn,{key:function(e){if(e.key){var t=Sn[e.key]||e.key;if("Unidentified"!==t)return t}return"keypress"===e.type?13===(e=on(e))?"Enter":String.fromCharCode(e):"keydown"===e.type||"keyup"===e.type?xn[e.keyCode]||"Unidentified":""},code:0,location:0,ctrlKey:0,shiftKey:0,altKey:0,metaKey:0,repeat:0,locale:0,getModifierState:Tn,charCode:function(e){return"keypress"===e.type?on(e):0},keyCode:function(e){return"keydown"===e.type||"keyup"===e.type?e.keyCode:0},which:function(e){return"keypress"===e.type?on(e):"keydown"===e.type||"keyup"===e.type?e.keyCode:0}}),An=sn(Pn),Ln=sn(r({},bn,{pointerId:0,width:0,height:0,pressure:0,tangentialPressure:0,tiltX:0,tiltY:0,twist:0,pointerType:0,isPrimary:0})),Rn=sn(r({},mn,{touches:0,targetTouches:0,changedTouches:0,altKey:0,metaKey:0,ctrlKey:0,shiftKey:0,getModifierState:Tn})),Nn=sn(r({},un,{propertyName:0,elapsedTime:0,pseudoElement:0})),On=r({},bn,{deltaX:function(e){return"deltaX"in e?e.deltaX:"wheelDeltaX"in e?-e.wheelDeltaX:0},deltaY:function(e){return"deltaY"in e?e.deltaY:"wheelDeltaY"in e?-e.wheelDeltaY:"wheelDelta"in e?-e.wheelDelta:0},deltaZ:0,deltaMode:0}),In=sn(On),Dn=[9,13,27,32],Mn=u&&"CompositionEvent"in window,Bn=null;u&&"documentMode"in document&&(Bn=document.documentMode);var Fn=u&&"TextEvent"in window&&!Bn,zn=u&&(!Mn||Bn&&8<Bn&&11>=Bn),jn=String.fromCharCode(32),Un=!1;function $n(e,t){switch(e){case"keyup":return-1!==Dn.indexOf(t.keyCode);case"keydown":return 229!==t.keyCode;case"keypress":case"mousedown":case"focusout":return!0;default:return!1}}function qn(e){return"object"==typeof(e=e.detail)&&"data"in e?e.data:null}var Hn=!1;var Gn={color:!0,date:!0,datetime:!0,"datetime-local":!0,email:!0,month:!0,number:!0,password:!0,range:!0,search:!0,tel:!0,text:!0,time:!0,url:!0,week:!0};function Zn(e){var t=e&&e.nodeName&&e.nodeName.toLowerCase();return"input"===t?!!Gn[e.type]:"textarea"===t}function Vn(e,t,n,o){Le(o),0<(t=Bo(t,"onChange")).length&&(n=new pn("onChange","change",null,n,o),e.push({event:n,listeners:t}))}var Wn=null,Kn=null;function Yn(e){Ao(e,0)}function Qn(e){if(Q(rr(e)))return e}function Xn(e,t){if("change"===e)return t}var Jn=!1;if(u){var eo;if(u){var to="oninput"in document;if(!to){var no=document.createElement("div");no.setAttribute("oninput","return;"),to="function"==typeof no.oninput}eo=to}else eo=!1;Jn=eo&&(!document.documentMode||9<document.documentMode)}function oo(){Wn&&(Wn.detachEvent("onpropertychange",ro),Kn=Wn=null)}function ro(e){if("value"===e.propertyName&&Qn(Kn)){var t=[];if(Vn(t,Kn,e,Ee(e)),e=Yn,Me)e(t);else{Me=!0;try{Ne(e,t)}finally{Me=!1,Fe()}}}}function io(e,t,n){"focusin"===e?(oo(),Kn=n,(Wn=t).attachEvent("onpropertychange",ro)):"focusout"===e&&oo()}function ao(e){if("selectionchange"===e||"keyup"===e||"keydown"===e)return Qn(Kn)}function so(e,t){if("click"===e)return Qn(t)}function co(e,t){if("input"===e||"change"===e)return Qn(t)}var lo="function"==typeof Object.is?Object.is:function(e,t){return e===t&&(0!==e||1/e==1/t)||e!=e&&t!=t},uo=Object.prototype.hasOwnProperty;function po(e,t){if(lo(e,t))return!0;if("object"!=typeof e||null===e||"object"!=typeof t||null===t)return!1;var n=Object.keys(e),o=Object.keys(t);if(n.length!==o.length)return!1;for(o=0;o<n.length;o++)if(!uo.call(t,n[o])||!lo(e[n[o]],t[n[o]]))return!1;return!0}function mo(e){for(;e&&e.firstChild;)e=e.firstChild;return e}function fo(e,t){var n,o=mo(e);for(e=0;o;){if(3===o.nodeType){if(n=e+o.textContent.length,e<=t&&n>=t)return{node:o,offset:t-e};e=n}e:{for(;o;){if(o.nextSibling){o=o.nextSibling;break e}o=o.parentNode}o=void 0}o=mo(o)}}function bo(e,t){return!(!e||!t)&&(e===t||(!e||3!==e.nodeType)&&(t&&3===t.nodeType?bo(e,t.parentNode):"contains"in e?e.contains(t):!!e.compareDocumentPosition&&!!(16&e.compareDocumentPosition(t))))}function ho(){for(var e=window,t=X();t instanceof e.HTMLIFrameElement;){try{var n="string"==typeof t.contentWindow.location.href}catch(o){n=!1}if(!n)break;t=X((e=t.contentWindow).document)}return t}function vo(e){var t=e&&e.nodeName&&e.nodeName.toLowerCase();return t&&("input"===t&&("text"===e.type||"search"===e.type||"tel"===e.type||"url"===e.type||"password"===e.type)||"textarea"===t||"true"===e.contentEditable)}var go=u&&"documentMode"in document&&11>=document.documentMode,yo=null,wo=null,_o=null,ko=!1;function So(e,t,n){var o=n.window===n?n.document:9===n.nodeType?n:n.ownerDocument;ko||null==yo||yo!==X(o)||("selectionStart"in(o=yo)&&vo(o)?o={start:o.selectionStart,end:o.selectionEnd}:o={anchorNode:(o=(o.ownerDocument&&o.ownerDocument.defaultView||window).getSelection()).anchorNode,anchorOffset:o.anchorOffset,focusNode:o.focusNode,focusOffset:o.focusOffset},_o&&po(_o,o)||(_o=o,0<(o=Bo(wo,"onSelect")).length&&(t=new pn("onSelect","select",null,t,n),e.push({event:t,listeners:o}),t.target=yo)))}It("cancel cancel click click close close contextmenu contextMenu copy copy cut cut auxclick auxClick dblclick doubleClick dragend dragEnd dragstart dragStart drop drop focusin focus focusout blur input input invalid invalid keydown keyDown keypress keyPress keyup keyUp mousedown mouseDown mouseup mouseUp paste paste pause pause play play pointercancel pointerCancel pointerdown pointerDown pointerup pointerUp ratechange rateChange reset reset seeked seeked submit submit touchcancel touchCancel touchend touchEnd touchstart touchStart volumechange volumeChange".split(" "),0),It("drag drag dragenter dragEnter dragexit dragExit dragleave dragLeave dragover dragOver mousemove mouseMove mouseout mouseOut mouseover mouseOver pointermove pointerMove pointerout pointerOut pointerover pointerOver scroll scroll toggle toggle touchmove touchMove wheel wheel".split(" "),1),It(Ot,2);for(var xo="change selectionchange textInput compositionstart compositionend compositionupdate".split(" "),Eo=0;Eo<xo.length;Eo++)Nt.set(xo[Eo],0);l("onMouseEnter",["mouseout","mouseover"]),l("onMouseLeave",["mouseout","mouseover"]),l("onPointerEnter",["pointerout","pointerover"]),l("onPointerLeave",["pointerout","pointerover"]),d("onChange","change click focusin focusout input keydown keyup selectionchange".split(" ")),d("onSelect","focusout contextmenu dragend focusin keydown keyup mousedown mouseup selectionchange".split(" ")),d("onBeforeInput",["compositionend","keypress","textInput","paste"]),d("onCompositionEnd","compositionend focusout keydown keypress keyup mousedown".split(" ")),d("onCompositionStart","compositionstart focusout keydown keypress keyup mousedown".split(" ")),d("onCompositionUpdate","compositionupdate focusout keydown keypress keyup mousedown".split(" "));var Co="abort canplay canplaythrough durationchange emptied encrypted ended error loadeddata loadedmetadata loadstart pause play playing progress ratechange seeked seeking stalled suspend timeupdate volumechange waiting".split(" "),To=new Set("cancel close invalid load scroll toggle".split(" ").concat(Co));function Po(e,t,n){var o=e.type||"unknown-event";e.currentTarget=n,function(e,t,n,o,r,i,s,c,d){if(We.apply(this,arguments),qe){if(!qe)throw Error(a(198));var l=He;qe=!1,He=null,Ge||(Ge=!0,Ze=l)}}(o,t,void 0,e),e.currentTarget=null}function Ao(e,t){t=0!=(4&t);for(var n=0;n<e.length;n++){var o=e[n],r=o.event;o=o.listeners;e:{var i=void 0;if(t)for(var a=o.length-1;0<=a;a--){var s=o[a],c=s.instance,d=s.currentTarget;if(s=s.listener,c!==i&&r.isPropagationStopped())break e;Po(r,s,d),i=c}else for(a=0;a<o.length;a++){if(c=(s=o[a]).instance,d=s.currentTarget,s=s.listener,c!==i&&r.isPropagationStopped())break e;Po(r,s,d),i=c}}}if(Ge)throw e=Ze,Ge=!1,Ze=null,e}function Lo(e,t){var n=ar(t),o=e+"__bubble";n.has(o)||(Io(t,e,2,!1),n.add(o))}var Ro="_reactListening"+Math.random().toString(36).slice(2);function No(e){e[Ro]||(e[Ro]=!0,s.forEach((function(t){To.has(t)||Oo(t,!1,e,null),Oo(t,!0,e,null)})))}function Oo(e,t,n,o){var r=4<arguments.length&&void 0!==arguments[4]?arguments[4]:0,i=n;if("selectionchange"===e&&9!==n.nodeType&&(i=n.ownerDocument),null!==o&&!t&&To.has(e)){if("scroll"!==e)return;r|=2,i=o}var a=ar(i),s=e+"__"+(t?"capture":"bubble");a.has(s)||(t&&(r|=4),Io(i,e,r,t),a.add(s))}function Io(e,t,n,o){var r=Nt.get(t);switch(void 0===r?2:r){case 0:r=Kt;break;case 1:r=Yt;break;default:r=Qt}n=r.bind(null,t,n,e),r=void 0,!je||"touchstart"!==t&&"touchmove"!==t&&"wheel"!==t||(r=!0),o?void 0!==r?e.addEventListener(t,n,{capture:!0,passive:r}):e.addEventListener(t,n,!0):void 0!==r?e.addEventListener(t,n,{passive:r}):e.addEventListener(t,n,!1)}function Do(e,t,n,o,r){var i=o;if(0==(1&t)&&0==(2&t)&&null!==o)e:for(;;){if(null===o)return;var a=o.tag;if(3===a||4===a){var s=o.stateNode.containerInfo;if(s===r||8===s.nodeType&&s.parentNode===r)break;if(4===a)for(a=o.return;null!==a;){var c=a.tag;if((3===c||4===c)&&((c=a.stateNode.containerInfo)===r||8===c.nodeType&&c.parentNode===r))return;a=a.return}for(;null!==s;){if(null===(a=nr(s)))return;if(5===(c=a.tag)||6===c){o=i=a;continue e}s=s.parentNode}}o=o.return}!function(e,t,n){if(Be)return e(t,n);Be=!0;try{return De(e,t,n)}finally{Be=!1,Fe()}}((function(){var o=i,r=Ee(n),a=[];e:{var s=Rt.get(e);if(void 0!==s){var c=pn,d=e;switch(e){case"keypress":if(0===on(n))break e;case"keydown":case"keyup":c=An;break;case"focusin":d="focus",c=gn;break;case"focusout":d="blur",c=gn;break;case"beforeblur":case"afterblur":c=gn;break;case"click":if(2===n.button)break e;case"auxclick":case"dblclick":case"mousedown":case"mousemove":case"mouseup":case"mouseout":case"mouseover":case"contextmenu":c=hn;break;case"drag":case"dragend":case"dragenter":case"dragexit":case"dragleave":case"dragover":case"dragstart":case"drop":c=vn;break;case"touchcancel":case"touchend":case"touchmove":case"touchstart":c=Rn;break;case Tt:case Pt:case At:c=yn;break;case Lt:c=Nn;break;case"scroll":c=fn;break;case"wheel":c=In;break;case"copy":case"cut":case"paste":c=_n;break;case"gotpointercapture":case"lostpointercapture":case"pointercancel":case"pointerdown":case"pointermove":case"pointerout":case"pointerover":case"pointerup":c=Ln}var l=0!=(4&t),u=!l&&"scroll"===e,p=l?null!==s?s+"Capture":null:s;l=[];for(var m,f=o;null!==f;){var b=(m=f).stateNode;if(5===m.tag&&null!==b&&(m=b,null!==p&&(null!=(b=ze(f,p))&&l.push(Mo(f,b,m)))),u)break;f=f.return}0<l.length&&(s=new c(s,d,null,n,r),a.push({event:s,listeners:l}))}}if(0==(7&t)){if(c="mouseout"===e||"pointerout"===e,(!(s="mouseover"===e||"pointerover"===e)||0!=(16&t)||!(d=n.relatedTarget||n.fromElement)||!nr(d)&&!d[er])&&(c||s)&&(s=r.window===r?r:(s=r.ownerDocument)?s.defaultView||s.parentWindow:window,c?(c=o,null!==(d=(d=n.relatedTarget||n.toElement)?nr(d):null)&&(d!==(u=Ke(d))||5!==d.tag&&6!==d.tag)&&(d=null)):(c=null,d=o),c!==d)){if(l=hn,b="onMouseLeave",p="onMouseEnter",f="mouse","pointerout"!==e&&"pointerover"!==e||(l=Ln,b="onPointerLeave",p="onPointerEnter",f="pointer"),u=null==c?s:rr(c),m=null==d?s:rr(d),(s=new l(b,f+"leave",c,n,r)).target=u,s.relatedTarget=m,b=null,nr(r)===o&&((l=new l(p,f+"enter",d,n,r)).target=m,l.relatedTarget=u,b=l),u=b,c&&d)e:{for(p=d,f=0,m=l=c;m;m=Fo(m))f++;for(m=0,b=p;b;b=Fo(b))m++;for(;0<f-m;)l=Fo(l),f--;for(;0<m-f;)p=Fo(p),m--;for(;f--;){if(l===p||null!==p&&l===p.alternate)break e;l=Fo(l),p=Fo(p)}l=null}else l=null;null!==c&&zo(a,s,c,l,!1),null!==d&&null!==u&&zo(a,u,d,l,!0)}if("select"===(c=(s=o?rr(o):window).nodeName&&s.nodeName.toLowerCase())||"input"===c&&"file"===s.type)var h=Xn;else if(Zn(s))if(Jn)h=co;else{h=ao;var v=io}else(c=s.nodeName)&&"input"===c.toLowerCase()&&("checkbox"===s.type||"radio"===s.type)&&(h=so);switch(h&&(h=h(e,o))?Vn(a,h,n,r):(v&&v(e,s,o),"focusout"===e&&(v=s._wrapperState)&&v.controlled&&"number"===s.type&&re(s,"number",s.value)),v=o?rr(o):window,e){case"focusin":(Zn(v)||"true"===v.contentEditable)&&(yo=v,wo=o,_o=null);break;case"focusout":_o=wo=yo=null;break;case"mousedown":ko=!0;break;case"contextmenu":case"mouseup":case"dragend":ko=!1,So(a,n,r);break;case"selectionchange":if(go)break;case"keydown":case"keyup":So(a,n,r)}var g;if(Mn)e:{switch(e){case"compositionstart":var y="onCompositionStart";break e;case"compositionend":y="onCompositionEnd";break e;case"compositionupdate":y="onCompositionUpdate";break e}y=void 0}else Hn?$n(e,n)&&(y="onCompositionEnd"):"keydown"===e&&229===n.keyCode&&(y="onCompositionStart");y&&(zn&&"ko"!==n.locale&&(Hn||"onCompositionStart"!==y?"onCompositionEnd"===y&&Hn&&(g=nn()):(en="value"in(Jt=r)?Jt.value:Jt.textContent,Hn=!0)),0<(v=Bo(o,y)).length&&(y=new kn(y,e,null,n,r),a.push({event:y,listeners:v}),g?y.data=g:null!==(g=qn(n))&&(y.data=g))),(g=Fn?function(e,t){switch(e){case"compositionend":return qn(t);case"keypress":return 32!==t.which?null:(Un=!0,jn);case"textInput":return(e=t.data)===jn&&Un?null:e;default:return null}}(e,n):function(e,t){if(Hn)return"compositionend"===e||!Mn&&$n(e,t)?(e=nn(),tn=en=Jt=null,Hn=!1,e):null;switch(e){case"paste":default:return null;case"keypress":if(!(t.ctrlKey||t.altKey||t.metaKey)||t.ctrlKey&&t.altKey){if(t.char&&1<t.char.length)return t.char;if(t.which)return String.fromCharCode(t.which)}return null;case"compositionend":return zn&&"ko"!==t.locale?null:t.data}}(e,n))&&(0<(o=Bo(o,"onBeforeInput")).length&&(r=new kn("onBeforeInput","beforeinput",null,n,r),a.push({event:r,listeners:o}),r.data=g))}Ao(a,t)}))}function Mo(e,t,n){return{instance:e,listener:t,currentTarget:n}}function Bo(e,t){for(var n=t+"Capture",o=[];null!==e;){var r=e,i=r.stateNode;5===r.tag&&null!==i&&(r=i,null!=(i=ze(e,n))&&o.unshift(Mo(e,i,r)),null!=(i=ze(e,t))&&o.push(Mo(e,i,r))),e=e.return}return o}function Fo(e){if(null===e)return null;do{e=e.return}while(e&&5!==e.tag);return e||null}function zo(e,t,n,o,r){for(var i=t._reactName,a=[];null!==n&&n!==o;){var s=n,c=s.alternate,d=s.stateNode;if(null!==c&&c===o)break;5===s.tag&&null!==d&&(s=d,r?null!=(c=ze(n,i))&&a.unshift(Mo(n,c,s)):r||null!=(c=ze(n,i))&&a.push(Mo(n,c,s))),n=n.return}0!==a.length&&e.push({event:t,listeners:a})}function jo(){}var Uo=null,$o=null;function qo(e,t){switch(e){case"button":case"input":case"select":case"textarea":return!!t.autoFocus}return!1}function Ho(e,t){return"textarea"===e||"option"===e||"noscript"===e||"string"==typeof t.children||"number"==typeof t.children||"object"==typeof t.dangerouslySetInnerHTML&&null!==t.dangerouslySetInnerHTML&&null!=t.dangerouslySetInnerHTML.__html}var Go="function"==typeof setTimeout?setTimeout:void 0,Zo="function"==typeof clearTimeout?clearTimeout:void 0;function Vo(e){1===e.nodeType?e.textContent="":9===e.nodeType&&(null!=(e=e.body)&&(e.textContent=""))}function Wo(e){for(;null!=e;e=e.nextSibling){var t=e.nodeType;if(1===t||3===t)break}return e}function Ko(e){e=e.previousSibling;for(var t=0;e;){if(8===e.nodeType){var n=e.data;if("$"===n||"$!"===n||"$?"===n){if(0===t)return e;t--}else"/$"===n&&t++}e=e.previousSibling}return null}var Yo=0;var Qo=Math.random().toString(36).slice(2),Xo="__reactFiber$"+Qo,Jo="__reactProps$"+Qo,er="__reactContainer$"+Qo,tr="__reactEvents$"+Qo;function nr(e){var t=e[Xo];if(t)return t;for(var n=e.parentNode;n;){if(t=n[er]||n[Xo]){if(n=t.alternate,null!==t.child||null!==n&&null!==n.child)for(e=Ko(e);null!==e;){if(n=e[Xo])return n;e=Ko(e)}return t}n=(e=n).parentNode}return null}function or(e){return!(e=e[Xo]||e[er])||5!==e.tag&&6!==e.tag&&13!==e.tag&&3!==e.tag?null:e}function rr(e){if(5===e.tag||6===e.tag)return e.stateNode;throw Error(a(33))}function ir(e){return e[Jo]||null}function ar(e){var t=e[tr];return void 0===t&&(t=e[tr]=new Set),t}var sr=[],cr=-1;function dr(e){return{current:e}}function lr(e){0>cr||(e.current=sr[cr],sr[cr]=null,cr--)}function ur(e,t){cr++,sr[cr]=e.current,e.current=t}var pr={},mr=dr(pr),fr=dr(!1),br=pr;function hr(e,t){var n=e.type.contextTypes;if(!n)return pr;var o=e.stateNode;if(o&&o.__reactInternalMemoizedUnmaskedChildContext===t)return o.__reactInternalMemoizedMaskedChildContext;var r,i={};for(r in n)i[r]=t[r];return o&&((e=e.stateNode).__reactInternalMemoizedUnmaskedChildContext=t,e.__reactInternalMemoizedMaskedChildContext=i),i}function vr(e){return null!=(e=e.childContextTypes)}function gr(){lr(fr),lr(mr)}function yr(e,t,n){if(mr.current!==pr)throw Error(a(168));ur(mr,t),ur(fr,n)}function wr(e,t,n){var o=e.stateNode;if(e=t.childContextTypes,"function"!=typeof o.getChildContext)return n;for(var i in o=o.getChildContext())if(!(i in e))throw Error(a(108,V(t)||"Unknown",i));return r({},n,o)}function _r(e){return e=(e=e.stateNode)&&e.__reactInternalMemoizedMergedChildContext||pr,br=mr.current,ur(mr,e),ur(fr,fr.current),!0}function kr(e,t,n){var o=e.stateNode;if(!o)throw Error(a(169));n?(e=wr(e,t,br),o.__reactInternalMemoizedMergedChildContext=e,lr(fr),lr(mr),ur(mr,e)):lr(fr),ur(fr,n)}var Sr=null,xr=null,Er=i.unstable_runWithPriority,Cr=i.unstable_scheduleCallback,Tr=i.unstable_cancelCallback,Pr=i.unstable_shouldYield,Ar=i.unstable_requestPaint,Lr=i.unstable_now,Rr=i.unstable_getCurrentPriorityLevel,Nr=i.unstable_ImmediatePriority,Or=i.unstable_UserBlockingPriority,Ir=i.unstable_NormalPriority,Dr=i.unstable_LowPriority,Mr=i.unstable_IdlePriority,Br={},Fr=void 0!==Ar?Ar:function(){},zr=null,jr=null,Ur=!1,$r=Lr(),qr=1e4>$r?Lr:function(){return Lr()-$r};function Hr(){switch(Rr()){case Nr:return 99;case Or:return 98;case Ir:return 97;case Dr:return 96;case Mr:return 95;default:throw Error(a(332))}}function Gr(e){switch(e){case 99:return Nr;case 98:return Or;case 97:return Ir;case 96:return Dr;case 95:return Mr;default:throw Error(a(332))}}function Zr(e,t){return e=Gr(e),Er(e,t)}function Vr(e,t,n){return e=Gr(e),Cr(e,t,n)}function Wr(){if(null!==jr){var e=jr;jr=null,Tr(e)}Kr()}function Kr(){if(!Ur&&null!==zr){Ur=!0;var e=0;try{var t=zr;Zr(99,(function(){for(;e<t.length;e++){var n=t[e];do{n=n(!0)}while(null!==n)}})),zr=null}catch(n){throw null!==zr&&(zr=zr.slice(e+1)),Cr(Nr,Wr),n}finally{Ur=!1}}}var Yr=_.ReactCurrentBatchConfig;function Qr(e,t){if(e&&e.defaultProps){for(var n in t=r({},t),e=e.defaultProps)void 0===t[n]&&(t[n]=e[n]);return t}return t}var Xr=dr(null),Jr=null,ei=null,ti=null;function ni(){ti=ei=Jr=null}function oi(e){var t=Xr.current;lr(Xr),e.type._context._currentValue=t}function ri(e,t){for(;null!==e;){var n=e.alternate;if((e.childLanes&t)===t){if(null===n||(n.childLanes&t)===t)break;n.childLanes|=t}else e.childLanes|=t,null!==n&&(n.childLanes|=t);e=e.return}}function ii(e,t){Jr=e,ti=ei=null,null!==(e=e.dependencies)&&null!==e.firstContext&&(0!=(e.lanes&t)&&(Ma=!0),e.firstContext=null)}function ai(e,t){if(ti!==e&&!1!==t&&0!==t)if("number"==typeof t&&1073741823!==t||(ti=e,t=1073741823),t={context:e,observedBits:t,next:null},null===ei){if(null===Jr)throw Error(a(308));ei=t,Jr.dependencies={lanes:0,firstContext:t,responders:null}}else ei=ei.next=t;return e._currentValue}var si=!1;function ci(e){e.updateQueue={baseState:e.memoizedState,firstBaseUpdate:null,lastBaseUpdate:null,shared:{pending:null},effects:null}}function di(e,t){e=e.updateQueue,t.updateQueue===e&&(t.updateQueue={baseState:e.baseState,firstBaseUpdate:e.firstBaseUpdate,lastBaseUpdate:e.lastBaseUpdate,shared:e.shared,effects:e.effects})}function li(e,t){return{eventTime:e,lane:t,tag:0,payload:null,callback:null,next:null}}function ui(e,t){if(null!==(e=e.updateQueue)){var n=(e=e.shared).pending;null===n?t.next=t:(t.next=n.next,n.next=t),e.pending=t}}function pi(e,t){var n=e.updateQueue,o=e.alternate;if(null!==o&&n===(o=o.updateQueue)){var r=null,i=null;if(null!==(n=n.firstBaseUpdate)){do{var a={eventTime:n.eventTime,lane:n.lane,tag:n.tag,payload:n.payload,callback:n.callback,next:null};null===i?r=i=a:i=i.next=a,n=n.next}while(null!==n);null===i?r=i=t:i=i.next=t}else r=i=t;return n={baseState:o.baseState,firstBaseUpdate:r,lastBaseUpdate:i,shared:o.shared,effects:o.effects},void(e.updateQueue=n)}null===(e=n.lastBaseUpdate)?n.firstBaseUpdate=t:e.next=t,n.lastBaseUpdate=t}function mi(e,t,n,o){var i=e.updateQueue;si=!1;var a=i.firstBaseUpdate,s=i.lastBaseUpdate,c=i.shared.pending;if(null!==c){i.shared.pending=null;var d=c,l=d.next;d.next=null,null===s?a=l:s.next=l,s=d;var u=e.alternate;if(null!==u){var p=(u=u.updateQueue).lastBaseUpdate;p!==s&&(null===p?u.firstBaseUpdate=l:p.next=l,u.lastBaseUpdate=d)}}if(null!==a){for(p=i.baseState,s=0,u=l=d=null;;){c=a.lane;var m=a.eventTime;if((o&c)===c){null!==u&&(u=u.next={eventTime:m,lane:0,tag:a.tag,payload:a.payload,callback:a.callback,next:null});e:{var f=e,b=a;switch(c=t,m=n,b.tag){case 1:if("function"==typeof(f=b.payload)){p=f.call(m,p,c);break e}p=f;break e;case 3:f.flags=-4097&f.flags|64;case 0:if(null==(c="function"==typeof(f=b.payload)?f.call(m,p,c):f))break e;p=r({},p,c);break e;case 2:si=!0}}null!==a.callback&&(e.flags|=32,null===(c=i.effects)?i.effects=[a]:c.push(a))}else m={eventTime:m,lane:c,tag:a.tag,payload:a.payload,callback:a.callback,next:null},null===u?(l=u=m,d=p):u=u.next=m,s|=c;if(null===(a=a.next)){if(null===(c=i.shared.pending))break;a=c.next,c.next=null,i.lastBaseUpdate=c,i.shared.pending=null}}null===u&&(d=p),i.baseState=d,i.firstBaseUpdate=l,i.lastBaseUpdate=u,Us|=s,e.lanes=s,e.memoizedState=p}}function fi(e,t,n){if(e=t.effects,t.effects=null,null!==e)for(t=0;t<e.length;t++){var o=e[t],r=o.callback;if(null!==r){if(o.callback=null,o=n,"function"!=typeof r)throw Error(a(191,r));r.call(o)}}}var bi=(new o.Component).refs;function hi(e,t,n,o){n=null==(n=n(o,t=e.memoizedState))?t:r({},t,n),e.memoizedState=n,0===e.lanes&&(e.updateQueue.baseState=n)}var vi={isMounted:function(e){return!!(e=e._reactInternals)&&Ke(e)===e},enqueueSetState:function(e,t,n){e=e._reactInternals;var o=pc(),r=mc(e),i=li(o,r);i.payload=t,null!=n&&(i.callback=n),ui(e,i),fc(e,r,o)},enqueueReplaceState:function(e,t,n){e=e._reactInternals;var o=pc(),r=mc(e),i=li(o,r);i.tag=1,i.payload=t,null!=n&&(i.callback=n),ui(e,i),fc(e,r,o)},enqueueForceUpdate:function(e,t){e=e._reactInternals;var n=pc(),o=mc(e),r=li(n,o);r.tag=2,null!=t&&(r.callback=t),ui(e,r),fc(e,o,n)}};function gi(e,t,n,o,r,i,a){return"function"==typeof(e=e.stateNode).shouldComponentUpdate?e.shouldComponentUpdate(o,i,a):!t.prototype||!t.prototype.isPureReactComponent||(!po(n,o)||!po(r,i))}function yi(e,t,n){var o=!1,r=pr,i=t.contextType;return"object"==typeof i&&null!==i?i=ai(i):(r=vr(t)?br:mr.current,i=(o=null!=(o=t.contextTypes))?hr(e,r):pr),t=new t(n,i),e.memoizedState=null!==t.state&&void 0!==t.state?t.state:null,t.updater=vi,e.stateNode=t,t._reactInternals=e,o&&((e=e.stateNode).__reactInternalMemoizedUnmaskedChildContext=r,e.__reactInternalMemoizedMaskedChildContext=i),t}function wi(e,t,n,o){e=t.state,"function"==typeof t.componentWillReceiveProps&&t.componentWillReceiveProps(n,o),"function"==typeof t.UNSAFE_componentWillReceiveProps&&t.UNSAFE_componentWillReceiveProps(n,o),t.state!==e&&vi.enqueueReplaceState(t,t.state,null)}function _i(e,t,n,o){var r=e.stateNode;r.props=n,r.state=e.memoizedState,r.refs=bi,ci(e);var i=t.contextType;"object"==typeof i&&null!==i?r.context=ai(i):(i=vr(t)?br:mr.current,r.context=hr(e,i)),mi(e,n,r,o),r.state=e.memoizedState,"function"==typeof(i=t.getDerivedStateFromProps)&&(hi(e,t,i,n),r.state=e.memoizedState),"function"==typeof t.getDerivedStateFromProps||"function"==typeof r.getSnapshotBeforeUpdate||"function"!=typeof r.UNSAFE_componentWillMount&&"function"!=typeof r.componentWillMount||(t=r.state,"function"==typeof r.componentWillMount&&r.componentWillMount(),"function"==typeof r.UNSAFE_componentWillMount&&r.UNSAFE_componentWillMount(),t!==r.state&&vi.enqueueReplaceState(r,r.state,null),mi(e,n,r,o),r.state=e.memoizedState),"function"==typeof r.componentDidMount&&(e.flags|=4)}var ki=Array.isArray;function Si(e,t,n){if(null!==(e=n.ref)&&"function"!=typeof e&&"object"!=typeof e){if(n._owner){if(n=n._owner){if(1!==n.tag)throw Error(a(309));var o=n.stateNode}if(!o)throw Error(a(147,e));var r=""+e;return null!==t&&null!==t.ref&&"function"==typeof t.ref&&t.ref._stringRef===r?t.ref:(t=function(e){var t=o.refs;t===bi&&(t=o.refs={}),null===e?delete t[r]:t[r]=e},t._stringRef=r,t)}if("string"!=typeof e)throw Error(a(284));if(!n._owner)throw Error(a(290,e))}return e}function xi(e,t){if("textarea"!==e.type)throw Error(a(31,"[object Object]"===Object.prototype.toString.call(t)?"object with keys {"+Object.keys(t).join(", ")+"}":t))}function Ei(e){function t(t,n){if(e){var o=t.lastEffect;null!==o?(o.nextEffect=n,t.lastEffect=n):t.firstEffect=t.lastEffect=n,n.nextEffect=null,n.flags=8}}function n(n,o){if(!e)return null;for(;null!==o;)t(n,o),o=o.sibling;return null}function o(e,t){for(e=new Map;null!==t;)null!==t.key?e.set(t.key,t):e.set(t.index,t),t=t.sibling;return e}function r(e,t){return(e=Zc(e,t)).index=0,e.sibling=null,e}function i(t,n,o){return t.index=o,e?null!==(o=t.alternate)?(o=o.index)<n?(t.flags=2,n):o:(t.flags=2,n):n}function s(t){return e&&null===t.alternate&&(t.flags=2),t}function c(e,t,n,o){return null===t||6!==t.tag?((t=Yc(n,e.mode,o)).return=e,t):((t=r(t,n)).return=e,t)}function d(e,t,n,o){return null!==t&&t.elementType===n.type?((o=r(t,n.props)).ref=Si(e,t,n),o.return=e,o):((o=Vc(n.type,n.key,n.props,null,e.mode,o)).ref=Si(e,t,n),o.return=e,o)}function l(e,t,n,o){return null===t||4!==t.tag||t.stateNode.containerInfo!==n.containerInfo||t.stateNode.implementation!==n.implementation?((t=Qc(n,e.mode,o)).return=e,t):((t=r(t,n.children||[])).return=e,t)}function u(e,t,n,o,i){return null===t||7!==t.tag?((t=Wc(n,e.mode,o,i)).return=e,t):((t=r(t,n)).return=e,t)}function p(e,t,n){if("string"==typeof t||"number"==typeof t)return(t=Yc(""+t,e.mode,n)).return=e,t;if("object"==typeof t&&null!==t){switch(t.$$typeof){case k:return(n=Vc(t.type,t.key,t.props,null,e.mode,n)).ref=Si(e,null,t),n.return=e,n;case S:return(t=Qc(t,e.mode,n)).return=e,t}if(ki(t)||$(t))return(t=Wc(t,e.mode,n,null)).return=e,t;xi(e,t)}return null}function m(e,t,n,o){var r=null!==t?t.key:null;if("string"==typeof n||"number"==typeof n)return null!==r?null:c(e,t,""+n,o);if("object"==typeof n&&null!==n){switch(n.$$typeof){case k:return n.key===r?n.type===x?u(e,t,n.props.children,o,r):d(e,t,n,o):null;case S:return n.key===r?l(e,t,n,o):null}if(ki(n)||$(n))return null!==r?null:u(e,t,n,o,null);xi(e,n)}return null}function f(e,t,n,o,r){if("string"==typeof o||"number"==typeof o)return c(t,e=e.get(n)||null,""+o,r);if("object"==typeof o&&null!==o){switch(o.$$typeof){case k:return e=e.get(null===o.key?n:o.key)||null,o.type===x?u(t,e,o.props.children,r,o.key):d(t,e,o,r);case S:return l(t,e=e.get(null===o.key?n:o.key)||null,o,r)}if(ki(o)||$(o))return u(t,e=e.get(n)||null,o,r,null);xi(t,o)}return null}function b(r,a,s,c){for(var d=null,l=null,u=a,b=a=0,h=null;null!==u&&b<s.length;b++){u.index>b?(h=u,u=null):h=u.sibling;var v=m(r,u,s[b],c);if(null===v){null===u&&(u=h);break}e&&u&&null===v.alternate&&t(r,u),a=i(v,a,b),null===l?d=v:l.sibling=v,l=v,u=h}if(b===s.length)return n(r,u),d;if(null===u){for(;b<s.length;b++)null!==(u=p(r,s[b],c))&&(a=i(u,a,b),null===l?d=u:l.sibling=u,l=u);return d}for(u=o(r,u);b<s.length;b++)null!==(h=f(u,r,b,s[b],c))&&(e&&null!==h.alternate&&u.delete(null===h.key?b:h.key),a=i(h,a,b),null===l?d=h:l.sibling=h,l=h);return e&&u.forEach((function(e){return t(r,e)})),d}function h(r,s,c,d){var l=$(c);if("function"!=typeof l)throw Error(a(150));if(null==(c=l.call(c)))throw Error(a(151));for(var u=l=null,b=s,h=s=0,v=null,g=c.next();null!==b&&!g.done;h++,g=c.next()){b.index>h?(v=b,b=null):v=b.sibling;var y=m(r,b,g.value,d);if(null===y){null===b&&(b=v);break}e&&b&&null===y.alternate&&t(r,b),s=i(y,s,h),null===u?l=y:u.sibling=y,u=y,b=v}if(g.done)return n(r,b),l;if(null===b){for(;!g.done;h++,g=c.next())null!==(g=p(r,g.value,d))&&(s=i(g,s,h),null===u?l=g:u.sibling=g,u=g);return l}for(b=o(r,b);!g.done;h++,g=c.next())null!==(g=f(b,r,h,g.value,d))&&(e&&null!==g.alternate&&b.delete(null===g.key?h:g.key),s=i(g,s,h),null===u?l=g:u.sibling=g,u=g);return e&&b.forEach((function(e){return t(r,e)})),l}return function(e,o,i,c){var d="object"==typeof i&&null!==i&&i.type===x&&null===i.key;d&&(i=i.props.children);var l="object"==typeof i&&null!==i;if(l)switch(i.$$typeof){case k:e:{for(l=i.key,d=o;null!==d;){if(d.key===l){if(7===d.tag){if(i.type===x){n(e,d.sibling),(o=r(d,i.props.children)).return=e,e=o;break e}}else if(d.elementType===i.type){n(e,d.sibling),(o=r(d,i.props)).ref=Si(e,d,i),o.return=e,e=o;break e}n(e,d);break}t(e,d),d=d.sibling}i.type===x?((o=Wc(i.props.children,e.mode,c,i.key)).return=e,e=o):((c=Vc(i.type,i.key,i.props,null,e.mode,c)).ref=Si(e,o,i),c.return=e,e=c)}return s(e);case S:e:{for(d=i.key;null!==o;){if(o.key===d){if(4===o.tag&&o.stateNode.containerInfo===i.containerInfo&&o.stateNode.implementation===i.implementation){n(e,o.sibling),(o=r(o,i.children||[])).return=e,e=o;break e}n(e,o);break}t(e,o),o=o.sibling}(o=Qc(i,e.mode,c)).return=e,e=o}return s(e)}if("string"==typeof i||"number"==typeof i)return i=""+i,null!==o&&6===o.tag?(n(e,o.sibling),(o=r(o,i)).return=e,e=o):(n(e,o),(o=Yc(i,e.mode,c)).return=e,e=o),s(e);if(ki(i))return b(e,o,i,c);if($(i))return h(e,o,i,c);if(l&&xi(e,i),void 0===i&&!d)switch(e.tag){case 1:case 22:case 0:case 11:case 15:throw Error(a(152,V(e.type)||"Component"))}return n(e,o)}}var Ci=Ei(!0),Ti=Ei(!1),Pi={},Ai=dr(Pi),Li=dr(Pi),Ri=dr(Pi);function Ni(e){if(e===Pi)throw Error(a(174));return e}function Oi(e,t){switch(ur(Ri,t),ur(Li,e),ur(Ai,Pi),e=t.nodeType){case 9:case 11:t=(t=t.documentElement)?t.namespaceURI:me(null,"");break;default:t=me(t=(e=8===e?t.parentNode:t).namespaceURI||null,e=e.tagName)}lr(Ai),ur(Ai,t)}function Ii(){lr(Ai),lr(Li),lr(Ri)}function Di(e){Ni(Ri.current);var t=Ni(Ai.current),n=me(t,e.type);t!==n&&(ur(Li,e),ur(Ai,n))}function Mi(e){Li.current===e&&(lr(Ai),lr(Li))}var Bi=dr(0);function Fi(e){for(var t=e;null!==t;){if(13===t.tag){var n=t.memoizedState;if(null!==n&&(null===(n=n.dehydrated)||"$?"===n.data||"$!"===n.data))return t}else if(19===t.tag&&void 0!==t.memoizedProps.revealOrder){if(0!=(64&t.flags))return t}else if(null!==t.child){t.child.return=t,t=t.child;continue}if(t===e)break;for(;null===t.sibling;){if(null===t.return||t.return===e)return null;t=t.return}t.sibling.return=t.return,t=t.sibling}return null}var zi=null,ji=null,Ui=!1;function $i(e,t){var n=Hc(5,null,null,0);n.elementType="DELETED",n.type="DELETED",n.stateNode=t,n.return=e,n.flags=8,null!==e.lastEffect?(e.lastEffect.nextEffect=n,e.lastEffect=n):e.firstEffect=e.lastEffect=n}function qi(e,t){switch(e.tag){case 5:var n=e.type;return null!==(t=1!==t.nodeType||n.toLowerCase()!==t.nodeName.toLowerCase()?null:t)&&(e.stateNode=t,!0);case 6:return null!==(t=""===e.pendingProps||3!==t.nodeType?null:t)&&(e.stateNode=t,!0);default:return!1}}function Hi(e){if(Ui){var t=ji;if(t){var n=t;if(!qi(e,t)){if(!(t=Wo(n.nextSibling))||!qi(e,t))return e.flags=-1025&e.flags|2,Ui=!1,void(zi=e);$i(zi,n)}zi=e,ji=Wo(t.firstChild)}else e.flags=-1025&e.flags|2,Ui=!1,zi=e}}function Gi(e){for(e=e.return;null!==e&&5!==e.tag&&3!==e.tag&&13!==e.tag;)e=e.return;zi=e}function Zi(e){if(e!==zi)return!1;if(!Ui)return Gi(e),Ui=!0,!1;var t=e.type;if(5!==e.tag||"head"!==t&&"body"!==t&&!Ho(t,e.memoizedProps))for(t=ji;t;)$i(e,t),t=Wo(t.nextSibling);if(Gi(e),13===e.tag){if(!(e=null!==(e=e.memoizedState)?e.dehydrated:null))throw Error(a(317));e:{for(e=e.nextSibling,t=0;e;){if(8===e.nodeType){var n=e.data;if("/$"===n){if(0===t){ji=Wo(e.nextSibling);break e}t--}else"$"!==n&&"$!"!==n&&"$?"!==n||t++}e=e.nextSibling}ji=null}}else ji=zi?Wo(e.stateNode.nextSibling):null;return!0}function Vi(){ji=zi=null,Ui=!1}var Wi=[];function Ki(){for(var e=0;e<Wi.length;e++)Wi[e]._workInProgressVersionPrimary=null;Wi.length=0}var Yi=_.ReactCurrentDispatcher,Qi=_.ReactCurrentBatchConfig,Xi=0,Ji=null,ea=null,ta=null,na=!1,oa=!1;function ra(){throw Error(a(321))}function ia(e,t){if(null===t)return!1;for(var n=0;n<t.length&&n<e.length;n++)if(!lo(e[n],t[n]))return!1;return!0}function aa(e,t,n,o,r,i){if(Xi=i,Ji=t,t.memoizedState=null,t.updateQueue=null,t.lanes=0,Yi.current=null===e||null===e.memoizedState?Na:Oa,e=n(o,r),oa){i=0;do{if(oa=!1,!(25>i))throw Error(a(301));i+=1,ta=ea=null,t.updateQueue=null,Yi.current=Ia,e=n(o,r)}while(oa)}if(Yi.current=Ra,t=null!==ea&&null!==ea.next,Xi=0,ta=ea=Ji=null,na=!1,t)throw Error(a(300));return e}function sa(){var e={memoizedState:null,baseState:null,baseQueue:null,queue:null,next:null};return null===ta?Ji.memoizedState=ta=e:ta=ta.next=e,ta}function ca(){if(null===ea){var e=Ji.alternate;e=null!==e?e.memoizedState:null}else e=ea.next;var t=null===ta?Ji.memoizedState:ta.next;if(null!==t)ta=t,ea=e;else{if(null===e)throw Error(a(310));e={memoizedState:(ea=e).memoizedState,baseState:ea.baseState,baseQueue:ea.baseQueue,queue:ea.queue,next:null},null===ta?Ji.memoizedState=ta=e:ta=ta.next=e}return ta}function da(e,t){return"function"==typeof t?t(e):t}function la(e){var t=ca(),n=t.queue;if(null===n)throw Error(a(311));n.lastRenderedReducer=e;var o=ea,r=o.baseQueue,i=n.pending;if(null!==i){if(null!==r){var s=r.next;r.next=i.next,i.next=s}o.baseQueue=r=i,n.pending=null}if(null!==r){r=r.next,o=o.baseState;var c=s=i=null,d=r;do{var l=d.lane;if((Xi&l)===l)null!==c&&(c=c.next={lane:0,action:d.action,eagerReducer:d.eagerReducer,eagerState:d.eagerState,next:null}),o=d.eagerReducer===e?d.eagerState:e(o,d.action);else{var u={lane:l,action:d.action,eagerReducer:d.eagerReducer,eagerState:d.eagerState,next:null};null===c?(s=c=u,i=o):c=c.next=u,Ji.lanes|=l,Us|=l}d=d.next}while(null!==d&&d!==r);null===c?i=o:c.next=s,lo(o,t.memoizedState)||(Ma=!0),t.memoizedState=o,t.baseState=i,t.baseQueue=c,n.lastRenderedState=o}return[t.memoizedState,n.dispatch]}function ua(e){var t=ca(),n=t.queue;if(null===n)throw Error(a(311));n.lastRenderedReducer=e;var o=n.dispatch,r=n.pending,i=t.memoizedState;if(null!==r){n.pending=null;var s=r=r.next;do{i=e(i,s.action),s=s.next}while(s!==r);lo(i,t.memoizedState)||(Ma=!0),t.memoizedState=i,null===t.baseQueue&&(t.baseState=i),n.lastRenderedState=i}return[i,o]}function pa(e,t,n){var o=t._getVersion;o=o(t._source);var r=t._workInProgressVersionPrimary;if(null!==r?e=r===o:(e=e.mutableReadLanes,(e=(Xi&e)===e)&&(t._workInProgressVersionPrimary=o,Wi.push(t))),e)return n(t._source);throw Wi.push(t),Error(a(350))}function ma(e,t,n,o){var r=Os;if(null===r)throw Error(a(349));var i=t._getVersion,s=i(t._source),c=Yi.current,d=c.useState((function(){return pa(r,t,n)})),l=d[1],u=d[0];d=ta;var p=e.memoizedState,m=p.refs,f=m.getSnapshot,b=p.source;p=p.subscribe;var h=Ji;return e.memoizedState={refs:m,source:t,subscribe:o},c.useEffect((function(){m.getSnapshot=n,m.setSnapshot=l;var e=i(t._source);if(!lo(s,e)){e=n(t._source),lo(u,e)||(l(e),e=mc(h),r.mutableReadLanes|=e&r.pendingLanes),e=r.mutableReadLanes,r.entangledLanes|=e;for(var o=r.entanglements,a=e;0<a;){var c=31-qt(a),d=1<<c;o[c]|=e,a&=~d}}}),[n,t,o]),c.useEffect((function(){return o(t._source,(function(){var e=m.getSnapshot,n=m.setSnapshot;try{n(e(t._source));var o=mc(h);r.mutableReadLanes|=o&r.pendingLanes}catch(i){n((function(){throw i}))}}))}),[t,o]),lo(f,n)&&lo(b,t)&&lo(p,o)||((e={pending:null,dispatch:null,lastRenderedReducer:da,lastRenderedState:u}).dispatch=l=La.bind(null,Ji,e),d.queue=e,d.baseQueue=null,u=pa(r,t,n),d.memoizedState=d.baseState=u),u}function fa(e,t,n){return ma(ca(),e,t,n)}function ba(e){var t=sa();return"function"==typeof e&&(e=e()),t.memoizedState=t.baseState=e,e=(e=t.queue={pending:null,dispatch:null,lastRenderedReducer:da,lastRenderedState:e}).dispatch=La.bind(null,Ji,e),[t.memoizedState,e]}function ha(e,t,n,o){return e={tag:e,create:t,destroy:n,deps:o,next:null},null===(t=Ji.updateQueue)?(t={lastEffect:null},Ji.updateQueue=t,t.lastEffect=e.next=e):null===(n=t.lastEffect)?t.lastEffect=e.next=e:(o=n.next,n.next=e,e.next=o,t.lastEffect=e),e}function va(e){return e={current:e},sa().memoizedState=e}function ga(){return ca().memoizedState}function ya(e,t,n,o){var r=sa();Ji.flags|=e,r.memoizedState=ha(1|t,n,void 0,void 0===o?null:o)}function wa(e,t,n,o){var r=ca();o=void 0===o?null:o;var i=void 0;if(null!==ea){var a=ea.memoizedState;if(i=a.destroy,null!==o&&ia(o,a.deps))return void ha(t,n,i,o)}Ji.flags|=e,r.memoizedState=ha(1|t,n,i,o)}function _a(e,t){return ya(516,4,e,t)}function ka(e,t){return wa(516,4,e,t)}function Sa(e,t){return wa(4,2,e,t)}function xa(e,t){return"function"==typeof t?(e=e(),t(e),function(){t(null)}):null!=t?(e=e(),t.current=e,function(){t.current=null}):void 0}function Ea(e,t,n){return n=null!=n?n.concat([e]):null,wa(4,2,xa.bind(null,t,e),n)}function Ca(){}function Ta(e,t){var n=ca();t=void 0===t?null:t;var o=n.memoizedState;return null!==o&&null!==t&&ia(t,o[1])?o[0]:(n.memoizedState=[e,t],e)}function Pa(e,t){var n=ca();t=void 0===t?null:t;var o=n.memoizedState;return null!==o&&null!==t&&ia(t,o[1])?o[0]:(e=e(),n.memoizedState=[e,t],e)}function Aa(e,t){var n=Hr();Zr(98>n?98:n,(function(){e(!0)})),Zr(97<n?97:n,(function(){var n=Qi.transition;Qi.transition=1;try{e(!1),t()}finally{Qi.transition=n}}))}function La(e,t,n){var o=pc(),r=mc(e),i={lane:r,action:n,eagerReducer:null,eagerState:null,next:null},a=t.pending;if(null===a?i.next=i:(i.next=a.next,a.next=i),t.pending=i,a=e.alternate,e===Ji||null!==a&&a===Ji)oa=na=!0;else{if(0===e.lanes&&(null===a||0===a.lanes)&&null!==(a=t.lastRenderedReducer))try{var s=t.lastRenderedState,c=a(s,n);if(i.eagerReducer=a,i.eagerState=c,lo(c,s))return}catch(d){}fc(e,r,o)}}var Ra={readContext:ai,useCallback:ra,useContext:ra,useEffect:ra,useImperativeHandle:ra,useLayoutEffect:ra,useMemo:ra,useReducer:ra,useRef:ra,useState:ra,useDebugValue:ra,useDeferredValue:ra,useTransition:ra,useMutableSource:ra,useOpaqueIdentifier:ra,unstable_isNewReconciler:!1},Na={readContext:ai,useCallback:function(e,t){return sa().memoizedState=[e,void 0===t?null:t],e},useContext:ai,useEffect:_a,useImperativeHandle:function(e,t,n){return n=null!=n?n.concat([e]):null,ya(4,2,xa.bind(null,t,e),n)},useLayoutEffect:function(e,t){return ya(4,2,e,t)},useMemo:function(e,t){var n=sa();return t=void 0===t?null:t,e=e(),n.memoizedState=[e,t],e},useReducer:function(e,t,n){var o=sa();return t=void 0!==n?n(t):t,o.memoizedState=o.baseState=t,e=(e=o.queue={pending:null,dispatch:null,lastRenderedReducer:e,lastRenderedState:t}).dispatch=La.bind(null,Ji,e),[o.memoizedState,e]},useRef:va,useState:ba,useDebugValue:Ca,useDeferredValue:function(e){var t=ba(e),n=t[0],o=t[1];return _a((function(){var t=Qi.transition;Qi.transition=1;try{o(e)}finally{Qi.transition=t}}),[e]),n},useTransition:function(){var e=ba(!1),t=e[0];return va(e=Aa.bind(null,e[1])),[e,t]},useMutableSource:function(e,t,n){var o=sa();return o.memoizedState={refs:{getSnapshot:t,setSnapshot:null},source:e,subscribe:n},ma(o,e,t,n)},useOpaqueIdentifier:function(){if(Ui){var e=!1,t=function(e){return{$$typeof:D,toString:e,valueOf:e}}((function(){throw e||(e=!0,n("r:"+(Yo++).toString(36))),Error(a(355))})),n=ba(t)[1];return 0==(2&Ji.mode)&&(Ji.flags|=516,ha(5,(function(){n("r:"+(Yo++).toString(36))}),void 0,null)),t}return ba(t="r:"+(Yo++).toString(36)),t},unstable_isNewReconciler:!1},Oa={readContext:ai,useCallback:Ta,useContext:ai,useEffect:ka,useImperativeHandle:Ea,useLayoutEffect:Sa,useMemo:Pa,useReducer:la,useRef:ga,useState:function(){return la(da)},useDebugValue:Ca,useDeferredValue:function(e){var t=la(da),n=t[0],o=t[1];return ka((function(){var t=Qi.transition;Qi.transition=1;try{o(e)}finally{Qi.transition=t}}),[e]),n},useTransition:function(){var e=la(da)[0];return[ga().current,e]},useMutableSource:fa,useOpaqueIdentifier:function(){return la(da)[0]},unstable_isNewReconciler:!1},Ia={readContext:ai,useCallback:Ta,useContext:ai,useEffect:ka,useImperativeHandle:Ea,useLayoutEffect:Sa,useMemo:Pa,useReducer:ua,useRef:ga,useState:function(){return ua(da)},useDebugValue:Ca,useDeferredValue:function(e){var t=ua(da),n=t[0],o=t[1];return ka((function(){var t=Qi.transition;Qi.transition=1;try{o(e)}finally{Qi.transition=t}}),[e]),n},useTransition:function(){var e=ua(da)[0];return[ga().current,e]},useMutableSource:fa,useOpaqueIdentifier:function(){return ua(da)[0]},unstable_isNewReconciler:!1},Da=_.ReactCurrentOwner,Ma=!1;function Ba(e,t,n,o){t.child=null===e?Ti(t,null,n,o):Ci(t,e.child,n,o)}function Fa(e,t,n,o,r){n=n.render;var i=t.ref;return ii(t,r),o=aa(e,t,n,o,i,r),null===e||Ma?(t.flags|=1,Ba(e,t,o,r),t.child):(t.updateQueue=e.updateQueue,t.flags&=-517,e.lanes&=~r,is(e,t,r))}function za(e,t,n,o,r,i){if(null===e){var a=n.type;return"function"!=typeof a||Gc(a)||void 0!==a.defaultProps||null!==n.compare||void 0!==n.defaultProps?((e=Vc(n.type,null,o,t,t.mode,i)).ref=t.ref,e.return=t,t.child=e):(t.tag=15,t.type=a,ja(e,t,a,o,r,i))}return a=e.child,0==(r&i)&&(r=a.memoizedProps,(n=null!==(n=n.compare)?n:po)(r,o)&&e.ref===t.ref)?is(e,t,i):(t.flags|=1,(e=Zc(a,o)).ref=t.ref,e.return=t,t.child=e)}function ja(e,t,n,o,r,i){if(null!==e&&po(e.memoizedProps,o)&&e.ref===t.ref){if(Ma=!1,0==(i&r))return t.lanes=e.lanes,is(e,t,i);0!=(16384&e.flags)&&(Ma=!0)}return qa(e,t,n,o,i)}function Ua(e,t,n){var o=t.pendingProps,r=o.children,i=null!==e?e.memoizedState:null;if("hidden"===o.mode||"unstable-defer-without-hiding"===o.mode)if(0==(4&t.mode))t.memoizedState={baseLanes:0},kc(t,n);else{if(0==(1073741824&n))return e=null!==i?i.baseLanes|n:n,t.lanes=t.childLanes=1073741824,t.memoizedState={baseLanes:e},kc(t,e),null;t.memoizedState={baseLanes:0},kc(t,null!==i?i.baseLanes:n)}else null!==i?(o=i.baseLanes|n,t.memoizedState=null):o=n,kc(t,o);return Ba(e,t,r,n),t.child}function $a(e,t){var n=t.ref;(null===e&&null!==n||null!==e&&e.ref!==n)&&(t.flags|=128)}function qa(e,t,n,o,r){var i=vr(n)?br:mr.current;return i=hr(t,i),ii(t,r),n=aa(e,t,n,o,i,r),null===e||Ma?(t.flags|=1,Ba(e,t,n,r),t.child):(t.updateQueue=e.updateQueue,t.flags&=-517,e.lanes&=~r,is(e,t,r))}function Ha(e,t,n,o,r){if(vr(n)){var i=!0;_r(t)}else i=!1;if(ii(t,r),null===t.stateNode)null!==e&&(e.alternate=null,t.alternate=null,t.flags|=2),yi(t,n,o),_i(t,n,o,r),o=!0;else if(null===e){var a=t.stateNode,s=t.memoizedProps;a.props=s;var c=a.context,d=n.contextType;"object"==typeof d&&null!==d?d=ai(d):d=hr(t,d=vr(n)?br:mr.current);var l=n.getDerivedStateFromProps,u="function"==typeof l||"function"==typeof a.getSnapshotBeforeUpdate;u||"function"!=typeof a.UNSAFE_componentWillReceiveProps&&"function"!=typeof a.componentWillReceiveProps||(s!==o||c!==d)&&wi(t,a,o,d),si=!1;var p=t.memoizedState;a.state=p,mi(t,o,a,r),c=t.memoizedState,s!==o||p!==c||fr.current||si?("function"==typeof l&&(hi(t,n,l,o),c=t.memoizedState),(s=si||gi(t,n,s,o,p,c,d))?(u||"function"!=typeof a.UNSAFE_componentWillMount&&"function"!=typeof a.componentWillMount||("function"==typeof a.componentWillMount&&a.componentWillMount(),"function"==typeof a.UNSAFE_componentWillMount&&a.UNSAFE_componentWillMount()),"function"==typeof a.componentDidMount&&(t.flags|=4)):("function"==typeof a.componentDidMount&&(t.flags|=4),t.memoizedProps=o,t.memoizedState=c),a.props=o,a.state=c,a.context=d,o=s):("function"==typeof a.componentDidMount&&(t.flags|=4),o=!1)}else{a=t.stateNode,di(e,t),s=t.memoizedProps,d=t.type===t.elementType?s:Qr(t.type,s),a.props=d,u=t.pendingProps,p=a.context,"object"==typeof(c=n.contextType)&&null!==c?c=ai(c):c=hr(t,c=vr(n)?br:mr.current);var m=n.getDerivedStateFromProps;(l="function"==typeof m||"function"==typeof a.getSnapshotBeforeUpdate)||"function"!=typeof a.UNSAFE_componentWillReceiveProps&&"function"!=typeof a.componentWillReceiveProps||(s!==u||p!==c)&&wi(t,a,o,c),si=!1,p=t.memoizedState,a.state=p,mi(t,o,a,r);var f=t.memoizedState;s!==u||p!==f||fr.current||si?("function"==typeof m&&(hi(t,n,m,o),f=t.memoizedState),(d=si||gi(t,n,d,o,p,f,c))?(l||"function"!=typeof a.UNSAFE_componentWillUpdate&&"function"!=typeof a.componentWillUpdate||("function"==typeof a.componentWillUpdate&&a.componentWillUpdate(o,f,c),"function"==typeof a.UNSAFE_componentWillUpdate&&a.UNSAFE_componentWillUpdate(o,f,c)),"function"==typeof a.componentDidUpdate&&(t.flags|=4),"function"==typeof a.getSnapshotBeforeUpdate&&(t.flags|=256)):("function"!=typeof a.componentDidUpdate||s===e.memoizedProps&&p===e.memoizedState||(t.flags|=4),"function"!=typeof a.getSnapshotBeforeUpdate||s===e.memoizedProps&&p===e.memoizedState||(t.flags|=256),t.memoizedProps=o,t.memoizedState=f),a.props=o,a.state=f,a.context=c,o=d):("function"!=typeof a.componentDidUpdate||s===e.memoizedProps&&p===e.memoizedState||(t.flags|=4),"function"!=typeof a.getSnapshotBeforeUpdate||s===e.memoizedProps&&p===e.memoizedState||(t.flags|=256),o=!1)}return Ga(e,t,n,o,i,r)}function Ga(e,t,n,o,r,i){$a(e,t);var a=0!=(64&t.flags);if(!o&&!a)return r&&kr(t,n,!1),is(e,t,i);o=t.stateNode,Da.current=t;var s=a&&"function"!=typeof n.getDerivedStateFromError?null:o.render();return t.flags|=1,null!==e&&a?(t.child=Ci(t,e.child,null,i),t.child=Ci(t,null,s,i)):Ba(e,t,s,i),t.memoizedState=o.state,r&&kr(t,n,!0),t.child}function Za(e){var t=e.stateNode;t.pendingContext?yr(0,t.pendingContext,t.pendingContext!==t.context):t.context&&yr(0,t.context,!1),Oi(e,t.containerInfo)}var Va,Wa,Ka,Ya,Qa={dehydrated:null,retryLane:0};function Xa(e,t,n){var o,r=t.pendingProps,i=Bi.current,a=!1;return(o=0!=(64&t.flags))||(o=(null===e||null!==e.memoizedState)&&0!=(2&i)),o?(a=!0,t.flags&=-65):null!==e&&null===e.memoizedState||void 0===r.fallback||!0===r.unstable_avoidThisFallback||(i|=1),ur(Bi,1&i),null===e?(void 0!==r.fallback&&Hi(t),e=r.children,i=r.fallback,a?(e=Ja(t,e,i,n),t.child.memoizedState={baseLanes:n},t.memoizedState=Qa,e):"number"==typeof r.unstable_expectedLoadTime?(e=Ja(t,e,i,n),t.child.memoizedState={baseLanes:n},t.memoizedState=Qa,t.lanes=33554432,e):((n=Kc({mode:"visible",children:e},t.mode,n,null)).return=t,t.child=n)):(e.memoizedState,a?(r=ts(e,t,r.children,r.fallback,n),a=t.child,i=e.child.memoizedState,a.memoizedState=null===i?{baseLanes:n}:{baseLanes:i.baseLanes|n},a.childLanes=e.childLanes&~n,t.memoizedState=Qa,r):(n=es(e,t,r.children,n),t.memoizedState=null,n))}function Ja(e,t,n,o){var r=e.mode,i=e.child;return t={mode:"hidden",children:t},0==(2&r)&&null!==i?(i.childLanes=0,i.pendingProps=t):i=Kc(t,r,0,null),n=Wc(n,r,o,null),i.return=e,n.return=e,i.sibling=n,e.child=i,n}function es(e,t,n,o){var r=e.child;return e=r.sibling,n=Zc(r,{mode:"visible",children:n}),0==(2&t.mode)&&(n.lanes=o),n.return=t,n.sibling=null,null!==e&&(e.nextEffect=null,e.flags=8,t.firstEffect=t.lastEffect=e),t.child=n}function ts(e,t,n,o,r){var i=t.mode,a=e.child;e=a.sibling;var s={mode:"hidden",children:n};return 0==(2&i)&&t.child!==a?((n=t.child).childLanes=0,n.pendingProps=s,null!==(a=n.lastEffect)?(t.firstEffect=n.firstEffect,t.lastEffect=a,a.nextEffect=null):t.firstEffect=t.lastEffect=null):n=Zc(a,s),null!==e?o=Zc(e,o):(o=Wc(o,i,r,null)).flags|=2,o.return=t,n.return=t,n.sibling=o,t.child=n,o}function ns(e,t){e.lanes|=t;var n=e.alternate;null!==n&&(n.lanes|=t),ri(e.return,t)}function os(e,t,n,o,r,i){var a=e.memoizedState;null===a?e.memoizedState={isBackwards:t,rendering:null,renderingStartTime:0,last:o,tail:n,tailMode:r,lastEffect:i}:(a.isBackwards=t,a.rendering=null,a.renderingStartTime=0,a.last=o,a.tail=n,a.tailMode=r,a.lastEffect=i)}function rs(e,t,n){var o=t.pendingProps,r=o.revealOrder,i=o.tail;if(Ba(e,t,o.children,n),0!=(2&(o=Bi.current)))o=1&o|2,t.flags|=64;else{if(null!==e&&0!=(64&e.flags))e:for(e=t.child;null!==e;){if(13===e.tag)null!==e.memoizedState&&ns(e,n);else if(19===e.tag)ns(e,n);else if(null!==e.child){e.child.return=e,e=e.child;continue}if(e===t)break e;for(;null===e.sibling;){if(null===e.return||e.return===t)break e;e=e.return}e.sibling.return=e.return,e=e.sibling}o&=1}if(ur(Bi,o),0==(2&t.mode))t.memoizedState=null;else switch(r){case"forwards":for(n=t.child,r=null;null!==n;)null!==(e=n.alternate)&&null===Fi(e)&&(r=n),n=n.sibling;null===(n=r)?(r=t.child,t.child=null):(r=n.sibling,n.sibling=null),os(t,!1,r,n,i,t.lastEffect);break;case"backwards":for(n=null,r=t.child,t.child=null;null!==r;){if(null!==(e=r.alternate)&&null===Fi(e)){t.child=r;break}e=r.sibling,r.sibling=n,n=r,r=e}os(t,!0,n,null,i,t.lastEffect);break;case"together":os(t,!1,null,null,void 0,t.lastEffect);break;default:t.memoizedState=null}return t.child}function is(e,t,n){if(null!==e&&(t.dependencies=e.dependencies),Us|=t.lanes,0!=(n&t.childLanes)){if(null!==e&&t.child!==e.child)throw Error(a(153));if(null!==t.child){for(n=Zc(e=t.child,e.pendingProps),t.child=n,n.return=t;null!==e.sibling;)e=e.sibling,(n=n.sibling=Zc(e,e.pendingProps)).return=t;n.sibling=null}return t.child}return null}function as(e,t){if(!Ui)switch(e.tailMode){case"hidden":t=e.tail;for(var n=null;null!==t;)null!==t.alternate&&(n=t),t=t.sibling;null===n?e.tail=null:n.sibling=null;break;case"collapsed":n=e.tail;for(var o=null;null!==n;)null!==n.alternate&&(o=n),n=n.sibling;null===o?t||null===e.tail?e.tail=null:e.tail.sibling=null:o.sibling=null}}function ss(e,t,n){var o=t.pendingProps;switch(t.tag){case 2:case 16:case 15:case 0:case 11:case 7:case 8:case 12:case 9:case 14:return null;case 1:case 17:return vr(t.type)&&gr(),null;case 3:return Ii(),lr(fr),lr(mr),Ki(),(o=t.stateNode).pendingContext&&(o.context=o.pendingContext,o.pendingContext=null),null!==e&&null!==e.child||(Zi(t)?t.flags|=4:o.hydrate||(t.flags|=256)),Wa(t),null;case 5:Mi(t);var i=Ni(Ri.current);if(n=t.type,null!==e&&null!=t.stateNode)Ka(e,t,n,o,i),e.ref!==t.ref&&(t.flags|=128);else{if(!o){if(null===t.stateNode)throw Error(a(166));return null}if(e=Ni(Ai.current),Zi(t)){o=t.stateNode,n=t.type;var s=t.memoizedProps;switch(o[Xo]=t,o[Jo]=s,n){case"dialog":Lo("cancel",o),Lo("close",o);break;case"iframe":case"object":case"embed":Lo("load",o);break;case"video":case"audio":for(e=0;e<Co.length;e++)Lo(Co[e],o);break;case"source":Lo("error",o);break;case"img":case"image":case"link":Lo("error",o),Lo("load",o);break;case"details":Lo("toggle",o);break;case"input":ee(o,s),Lo("invalid",o);break;case"select":o._wrapperState={wasMultiple:!!s.multiple},Lo("invalid",o);break;case"textarea":ce(o,s),Lo("invalid",o)}for(var d in Se(n,s),e=null,s)s.hasOwnProperty(d)&&(i=s[d],"children"===d?"string"==typeof i?o.textContent!==i&&(e=["children",i]):"number"==typeof i&&o.textContent!==""+i&&(e=["children",""+i]):c.hasOwnProperty(d)&&null!=i&&"onScroll"===d&&Lo("scroll",o));switch(n){case"input":Y(o),oe(o,s,!0);break;case"textarea":Y(o),le(o);break;case"select":case"option":break;default:"function"==typeof s.onClick&&(o.onclick=jo)}o=e,t.updateQueue=o,null!==o&&(t.flags|=4)}else{switch(d=9===i.nodeType?i:i.ownerDocument,e===ue.html&&(e=pe(n)),e===ue.html?"script"===n?((e=d.createElement("div")).innerHTML="<script><\/script>",e=e.removeChild(e.firstChild)):"string"==typeof o.is?e=d.createElement(n,{is:o.is}):(e=d.createElement(n),"select"===n&&(d=e,o.multiple?d.multiple=!0:o.size&&(d.size=o.size))):e=d.createElementNS(e,n),e[Xo]=t,e[Jo]=o,Va(e,t,!1,!1),t.stateNode=e,d=xe(n,o),n){case"dialog":Lo("cancel",e),Lo("close",e),i=o;break;case"iframe":case"object":case"embed":Lo("load",e),i=o;break;case"video":case"audio":for(i=0;i<Co.length;i++)Lo(Co[i],e);i=o;break;case"source":Lo("error",e),i=o;break;case"img":case"image":case"link":Lo("error",e),Lo("load",e),i=o;break;case"details":Lo("toggle",e),i=o;break;case"input":ee(e,o),i=J(e,o),Lo("invalid",e);break;case"option":i=ie(e,o);break;case"select":e._wrapperState={wasMultiple:!!o.multiple},i=r({},o,{value:void 0}),Lo("invalid",e);break;case"textarea":ce(e,o),i=se(e,o),Lo("invalid",e);break;default:i=o}Se(n,i);var l=i;for(s in l)if(l.hasOwnProperty(s)){var u=l[s];"style"===s?_e(e,u):"dangerouslySetInnerHTML"===s?null!=(u=u?u.__html:void 0)&&he(e,u):"children"===s?"string"==typeof u?("textarea"!==n||""!==u)&&ve(e,u):"number"==typeof u&&ve(e,""+u):"suppressContentEditableWarning"!==s&&"suppressHydrationWarning"!==s&&"autoFocus"!==s&&(c.hasOwnProperty(s)?null!=u&&"onScroll"===s&&Lo("scroll",e):null!=u&&w(e,s,u,d))}switch(n){case"input":Y(e),oe(e,o,!1);break;case"textarea":Y(e),le(e);break;case"option":null!=o.value&&e.setAttribute("value",""+W(o.value));break;case"select":e.multiple=!!o.multiple,null!=(s=o.value)?ae(e,!!o.multiple,s,!1):null!=o.defaultValue&&ae(e,!!o.multiple,o.defaultValue,!0);break;default:"function"==typeof i.onClick&&(e.onclick=jo)}qo(n,o)&&(t.flags|=4)}null!==t.ref&&(t.flags|=128)}return null;case 6:if(e&&null!=t.stateNode)Ya(e,t,e.memoizedProps,o);else{if("string"!=typeof o&&null===t.stateNode)throw Error(a(166));n=Ni(Ri.current),Ni(Ai.current),Zi(t)?(o=t.stateNode,n=t.memoizedProps,o[Xo]=t,o.nodeValue!==n&&(t.flags|=4)):((o=(9===n.nodeType?n:n.ownerDocument).createTextNode(o))[Xo]=t,t.stateNode=o)}return null;case 13:return lr(Bi),o=t.memoizedState,0!=(64&t.flags)?(t.lanes=n,t):(o=null!==o,n=!1,null===e?void 0!==t.memoizedProps.fallback&&Zi(t):n=null!==e.memoizedState,o&&!n&&0!=(2&t.mode)&&(null===e&&!0!==t.memoizedProps.unstable_avoidThisFallback||0!=(1&Bi.current)?0===Fs&&(Fs=3):(0!==Fs&&3!==Fs||(Fs=4),null===Os||0==(134217727&Us)&&0==(134217727&$s)||gc(Os,Ds))),(o||n)&&(t.flags|=4),null);case 4:return Ii(),Wa(t),null===e&&No(t.stateNode.containerInfo),null;case 10:return oi(t),null;case 19:if(lr(Bi),null===(o=t.memoizedState))return null;if(s=0!=(64&t.flags),null===(d=o.rendering))if(s)as(o,!1);else{if(0!==Fs||null!==e&&0!=(64&e.flags))for(e=t.child;null!==e;){if(null!==(d=Fi(e))){for(t.flags|=64,as(o,!1),null!==(s=d.updateQueue)&&(t.updateQueue=s,t.flags|=4),null===o.lastEffect&&(t.firstEffect=null),t.lastEffect=o.lastEffect,o=n,n=t.child;null!==n;)e=o,(s=n).flags&=2,s.nextEffect=null,s.firstEffect=null,s.lastEffect=null,null===(d=s.alternate)?(s.childLanes=0,s.lanes=e,s.child=null,s.memoizedProps=null,s.memoizedState=null,s.updateQueue=null,s.dependencies=null,s.stateNode=null):(s.childLanes=d.childLanes,s.lanes=d.lanes,s.child=d.child,s.memoizedProps=d.memoizedProps,s.memoizedState=d.memoizedState,s.updateQueue=d.updateQueue,s.type=d.type,e=d.dependencies,s.dependencies=null===e?null:{lanes:e.lanes,firstContext:e.firstContext}),n=n.sibling;return ur(Bi,1&Bi.current|2),t.child}e=e.sibling}null!==o.tail&&qr()>Zs&&(t.flags|=64,s=!0,as(o,!1),t.lanes=33554432)}else{if(!s)if(null!==(e=Fi(d))){if(t.flags|=64,s=!0,null!==(n=e.updateQueue)&&(t.updateQueue=n,t.flags|=4),as(o,!0),null===o.tail&&"hidden"===o.tailMode&&!d.alternate&&!Ui)return null!==(t=t.lastEffect=o.lastEffect)&&(t.nextEffect=null),null}else 2*qr()-o.renderingStartTime>Zs&&1073741824!==n&&(t.flags|=64,s=!0,as(o,!1),t.lanes=33554432);o.isBackwards?(d.sibling=t.child,t.child=d):(null!==(n=o.last)?n.sibling=d:t.child=d,o.last=d)}return null!==o.tail?(n=o.tail,o.rendering=n,o.tail=n.sibling,o.lastEffect=t.lastEffect,o.renderingStartTime=qr(),n.sibling=null,t=Bi.current,ur(Bi,s?1&t|2:1&t),n):null;case 23:case 24:return Sc(),null!==e&&null!==e.memoizedState!=(null!==t.memoizedState)&&"unstable-defer-without-hiding"!==o.mode&&(t.flags|=4),null}throw Error(a(156,t.tag))}function cs(e){switch(e.tag){case 1:vr(e.type)&&gr();var t=e.flags;return 4096&t?(e.flags=-4097&t|64,e):null;case 3:if(Ii(),lr(fr),lr(mr),Ki(),0!=(64&(t=e.flags)))throw Error(a(285));return e.flags=-4097&t|64,e;case 5:return Mi(e),null;case 13:return lr(Bi),4096&(t=e.flags)?(e.flags=-4097&t|64,e):null;case 19:return lr(Bi),null;case 4:return Ii(),null;case 10:return oi(e),null;case 23:case 24:return Sc(),null;default:return null}}function ds(e,t){try{var n="",o=t;do{n+=Z(o),o=o.return}while(o);var r=n}catch(i){r="\nError generating stack: "+i.message+"\n"+i.stack}return{value:e,source:t,stack:r}}function ls(e,t){try{console.error(t.value)}catch(n){setTimeout((function(){throw n}))}}Va=function(e,t){for(var n=t.child;null!==n;){if(5===n.tag||6===n.tag)e.appendChild(n.stateNode);else if(4!==n.tag&&null!==n.child){n.child.return=n,n=n.child;continue}if(n===t)break;for(;null===n.sibling;){if(null===n.return||n.return===t)return;n=n.return}n.sibling.return=n.return,n=n.sibling}},Wa=function(){},Ka=function(e,t,n,o){var i=e.memoizedProps;if(i!==o){e=t.stateNode,Ni(Ai.current);var a,s=null;switch(n){case"input":i=J(e,i),o=J(e,o),s=[];break;case"option":i=ie(e,i),o=ie(e,o),s=[];break;case"select":i=r({},i,{value:void 0}),o=r({},o,{value:void 0}),s=[];break;case"textarea":i=se(e,i),o=se(e,o),s=[];break;default:"function"!=typeof i.onClick&&"function"==typeof o.onClick&&(e.onclick=jo)}for(u in Se(n,o),n=null,i)if(!o.hasOwnProperty(u)&&i.hasOwnProperty(u)&&null!=i[u])if("style"===u){var d=i[u];for(a in d)d.hasOwnProperty(a)&&(n||(n={}),n[a]="")}else"dangerouslySetInnerHTML"!==u&&"children"!==u&&"suppressContentEditableWarning"!==u&&"suppressHydrationWarning"!==u&&"autoFocus"!==u&&(c.hasOwnProperty(u)?s||(s=[]):(s=s||[]).push(u,null));for(u in o){var l=o[u];if(d=null!=i?i[u]:void 0,o.hasOwnProperty(u)&&l!==d&&(null!=l||null!=d))if("style"===u)if(d){for(a in d)!d.hasOwnProperty(a)||l&&l.hasOwnProperty(a)||(n||(n={}),n[a]="");for(a in l)l.hasOwnProperty(a)&&d[a]!==l[a]&&(n||(n={}),n[a]=l[a])}else n||(s||(s=[]),s.push(u,n)),n=l;else"dangerouslySetInnerHTML"===u?(l=l?l.__html:void 0,d=d?d.__html:void 0,null!=l&&d!==l&&(s=s||[]).push(u,l)):"children"===u?"string"!=typeof l&&"number"!=typeof l||(s=s||[]).push(u,""+l):"suppressContentEditableWarning"!==u&&"suppressHydrationWarning"!==u&&(c.hasOwnProperty(u)?(null!=l&&"onScroll"===u&&Lo("scroll",e),s||d===l||(s=[])):"object"==typeof l&&null!==l&&l.$$typeof===D?l.toString():(s=s||[]).push(u,l))}n&&(s=s||[]).push("style",n);var u=s;(t.updateQueue=u)&&(t.flags|=4)}},Ya=function(e,t,n,o){n!==o&&(t.flags|=4)};var us="function"==typeof WeakMap?WeakMap:Map;function ps(e,t,n){(n=li(-1,n)).tag=3,n.payload={element:null};var o=t.value;return n.callback=function(){Ys||(Ys=!0,Qs=o),ls(0,t)},n}function ms(e,t,n){(n=li(-1,n)).tag=3;var o=e.type.getDerivedStateFromError;if("function"==typeof o){var r=t.value;n.payload=function(){return ls(0,t),o(r)}}var i=e.stateNode;return null!==i&&"function"==typeof i.componentDidCatch&&(n.callback=function(){"function"!=typeof o&&(null===Xs?Xs=new Set([this]):Xs.add(this),ls(0,t));var e=t.stack;this.componentDidCatch(t.value,{componentStack:null!==e?e:""})}),n}var fs="function"==typeof WeakSet?WeakSet:Set;function bs(e){var t=e.ref;if(null!==t)if("function"==typeof t)try{t(null)}catch(n){jc(e,n)}else t.current=null}function hs(e,t){switch(t.tag){case 0:case 11:case 15:case 22:case 5:case 6:case 4:case 17:return;case 1:if(256&t.flags&&null!==e){var n=e.memoizedProps,o=e.memoizedState;t=(e=t.stateNode).getSnapshotBeforeUpdate(t.elementType===t.type?n:Qr(t.type,n),o),e.__reactInternalSnapshotBeforeUpdate=t}return;case 3:return void(256&t.flags&&Vo(t.stateNode.containerInfo))}throw Error(a(163))}function vs(e,t,n){switch(n.tag){case 0:case 11:case 15:case 22:if(null!==(t=null!==(t=n.updateQueue)?t.lastEffect:null)){e=t=t.next;do{if(3==(3&e.tag)){var o=e.create;e.destroy=o()}e=e.next}while(e!==t)}if(null!==(t=null!==(t=n.updateQueue)?t.lastEffect:null)){e=t=t.next;do{var r=e;o=r.next,0!=(4&(r=r.tag))&&0!=(1&r)&&(Bc(n,e),Mc(n,e)),e=o}while(e!==t)}return;case 1:return e=n.stateNode,4&n.flags&&(null===t?e.componentDidMount():(o=n.elementType===n.type?t.memoizedProps:Qr(n.type,t.memoizedProps),e.componentDidUpdate(o,t.memoizedState,e.__reactInternalSnapshotBeforeUpdate))),void(null!==(t=n.updateQueue)&&fi(n,t,e));case 3:if(null!==(t=n.updateQueue)){if(e=null,null!==n.child)switch(n.child.tag){case 5:case 1:e=n.child.stateNode}fi(n,t,e)}return;case 5:return e=n.stateNode,void(null===t&&4&n.flags&&qo(n.type,n.memoizedProps)&&e.focus());case 6:case 4:case 12:case 19:case 17:case 20:case 21:case 23:case 24:return;case 13:return void(null===n.memoizedState&&(n=n.alternate,null!==n&&(n=n.memoizedState,null!==n&&(n=n.dehydrated,null!==n&&_t(n)))))}throw Error(a(163))}function gs(e,t){for(var n=e;;){if(5===n.tag){var o=n.stateNode;if(t)"function"==typeof(o=o.style).setProperty?o.setProperty("display","none","important"):o.display="none";else{o=n.stateNode;var r=n.memoizedProps.style;r=null!=r&&r.hasOwnProperty("display")?r.display:null,o.style.display=we("display",r)}}else if(6===n.tag)n.stateNode.nodeValue=t?"":n.memoizedProps;else if((23!==n.tag&&24!==n.tag||null===n.memoizedState||n===e)&&null!==n.child){n.child.return=n,n=n.child;continue}if(n===e)break;for(;null===n.sibling;){if(null===n.return||n.return===e)return;n=n.return}n.sibling.return=n.return,n=n.sibling}}function ys(e,t){if(xr&&"function"==typeof xr.onCommitFiberUnmount)try{xr.onCommitFiberUnmount(Sr,t)}catch(i){}switch(t.tag){case 0:case 11:case 14:case 15:case 22:if(null!==(e=t.updateQueue)&&null!==(e=e.lastEffect)){var n=e=e.next;do{var o=n,r=o.destroy;if(o=o.tag,void 0!==r)if(0!=(4&o))Bc(t,n);else{o=t;try{r()}catch(i){jc(o,i)}}n=n.next}while(n!==e)}break;case 1:if(bs(t),"function"==typeof(e=t.stateNode).componentWillUnmount)try{e.props=t.memoizedProps,e.state=t.memoizedState,e.componentWillUnmount()}catch(i){jc(t,i)}break;case 5:bs(t);break;case 4:Es(e,t)}}function ws(e){e.alternate=null,e.child=null,e.dependencies=null,e.firstEffect=null,e.lastEffect=null,e.memoizedProps=null,e.memoizedState=null,e.pendingProps=null,e.return=null,e.updateQueue=null}function _s(e){return 5===e.tag||3===e.tag||4===e.tag}function ks(e){e:{for(var t=e.return;null!==t;){if(_s(t))break e;t=t.return}throw Error(a(160))}var n=t;switch(t=n.stateNode,n.tag){case 5:var o=!1;break;case 3:case 4:t=t.containerInfo,o=!0;break;default:throw Error(a(161))}16&n.flags&&(ve(t,""),n.flags&=-17);e:t:for(n=e;;){for(;null===n.sibling;){if(null===n.return||_s(n.return)){n=null;break e}n=n.return}for(n.sibling.return=n.return,n=n.sibling;5!==n.tag&&6!==n.tag&&18!==n.tag;){if(2&n.flags)continue t;if(null===n.child||4===n.tag)continue t;n.child.return=n,n=n.child}if(!(2&n.flags)){n=n.stateNode;break e}}o?Ss(e,n,t):xs(e,n,t)}function Ss(e,t,n){var o=e.tag,r=5===o||6===o;if(r)e=r?e.stateNode:e.stateNode.instance,t?8===n.nodeType?n.parentNode.insertBefore(e,t):n.insertBefore(e,t):(8===n.nodeType?(t=n.parentNode).insertBefore(e,n):(t=n).appendChild(e),null!=(n=n._reactRootContainer)||null!==t.onclick||(t.onclick=jo));else if(4!==o&&null!==(e=e.child))for(Ss(e,t,n),e=e.sibling;null!==e;)Ss(e,t,n),e=e.sibling}function xs(e,t,n){var o=e.tag,r=5===o||6===o;if(r)e=r?e.stateNode:e.stateNode.instance,t?n.insertBefore(e,t):n.appendChild(e);else if(4!==o&&null!==(e=e.child))for(xs(e,t,n),e=e.sibling;null!==e;)xs(e,t,n),e=e.sibling}function Es(e,t){for(var n,o,r=t,i=!1;;){if(!i){i=r.return;e:for(;;){if(null===i)throw Error(a(160));switch(n=i.stateNode,i.tag){case 5:o=!1;break e;case 3:case 4:n=n.containerInfo,o=!0;break e}i=i.return}i=!0}if(5===r.tag||6===r.tag){e:for(var s=e,c=r,d=c;;)if(ys(s,d),null!==d.child&&4!==d.tag)d.child.return=d,d=d.child;else{if(d===c)break e;for(;null===d.sibling;){if(null===d.return||d.return===c)break e;d=d.return}d.sibling.return=d.return,d=d.sibling}o?(s=n,c=r.stateNode,8===s.nodeType?s.parentNode.removeChild(c):s.removeChild(c)):n.removeChild(r.stateNode)}else if(4===r.tag){if(null!==r.child){n=r.stateNode.containerInfo,o=!0,r.child.return=r,r=r.child;continue}}else if(ys(e,r),null!==r.child){r.child.return=r,r=r.child;continue}if(r===t)break;for(;null===r.sibling;){if(null===r.return||r.return===t)return;4===(r=r.return).tag&&(i=!1)}r.sibling.return=r.return,r=r.sibling}}function Cs(e,t){switch(t.tag){case 0:case 11:case 14:case 15:case 22:var n=t.updateQueue;if(null!==(n=null!==n?n.lastEffect:null)){var o=n=n.next;do{3==(3&o.tag)&&(e=o.destroy,o.destroy=void 0,void 0!==e&&e()),o=o.next}while(o!==n)}return;case 1:case 12:case 17:return;case 5:if(null!=(n=t.stateNode)){o=t.memoizedProps;var r=null!==e?e.memoizedProps:o;e=t.type;var i=t.updateQueue;if(t.updateQueue=null,null!==i){for(n[Jo]=o,"input"===e&&"radio"===o.type&&null!=o.name&&te(n,o),xe(e,r),t=xe(e,o),r=0;r<i.length;r+=2){var s=i[r],c=i[r+1];"style"===s?_e(n,c):"dangerouslySetInnerHTML"===s?he(n,c):"children"===s?ve(n,c):w(n,s,c,t)}switch(e){case"input":ne(n,o);break;case"textarea":de(n,o);break;case"select":e=n._wrapperState.wasMultiple,n._wrapperState.wasMultiple=!!o.multiple,null!=(i=o.value)?ae(n,!!o.multiple,i,!1):e!==!!o.multiple&&(null!=o.defaultValue?ae(n,!!o.multiple,o.defaultValue,!0):ae(n,!!o.multiple,o.multiple?[]:"",!1))}}}return;case 6:if(null===t.stateNode)throw Error(a(162));return void(t.stateNode.nodeValue=t.memoizedProps);case 3:return void((n=t.stateNode).hydrate&&(n.hydrate=!1,_t(n.containerInfo)));case 13:return null!==t.memoizedState&&(Gs=qr(),gs(t.child,!0)),void Ts(t);case 19:return void Ts(t);case 23:case 24:return void gs(t,null!==t.memoizedState)}throw Error(a(163))}function Ts(e){var t=e.updateQueue;if(null!==t){e.updateQueue=null;var n=e.stateNode;null===n&&(n=e.stateNode=new fs),t.forEach((function(t){var o=$c.bind(null,e,t);n.has(t)||(n.add(t),t.then(o,o))}))}}function Ps(e,t){return null!==e&&(null===(e=e.memoizedState)||null!==e.dehydrated)&&(null!==(t=t.memoizedState)&&null===t.dehydrated)}var As=Math.ceil,Ls=_.ReactCurrentDispatcher,Rs=_.ReactCurrentOwner,Ns=0,Os=null,Is=null,Ds=0,Ms=0,Bs=dr(0),Fs=0,zs=null,js=0,Us=0,$s=0,qs=0,Hs=null,Gs=0,Zs=1/0;function Vs(){Zs=qr()+500}var Ws,Ks=null,Ys=!1,Qs=null,Xs=null,Js=!1,ec=null,tc=90,nc=[],oc=[],rc=null,ic=0,ac=null,sc=-1,cc=0,dc=0,lc=null,uc=!1;function pc(){return 0!=(48&Ns)?qr():-1!==sc?sc:sc=qr()}function mc(e){if(0==(2&(e=e.mode)))return 1;if(0==(4&e))return 99===Hr()?1:2;if(0===cc&&(cc=js),0!==Yr.transition){0!==dc&&(dc=null!==Hs?Hs.pendingLanes:0),e=cc;var t=4186112&~dc;return 0===(t&=-t)&&(0===(t=(e=4186112&~e)&-e)&&(t=8192)),t}return e=Hr(),0!=(4&Ns)&&98===e?e=zt(12,cc):e=zt(e=function(e){switch(e){case 99:return 15;case 98:return 10;case 97:case 96:return 8;case 95:return 2;default:return 0}}(e),cc),e}function fc(e,t,n){if(50<ic)throw ic=0,ac=null,Error(a(185));if(null===(e=bc(e,t)))return null;$t(e,t,n),e===Os&&($s|=t,4===Fs&&gc(e,Ds));var o=Hr();1===t?0!=(8&Ns)&&0==(48&Ns)?yc(e):(hc(e,n),0===Ns&&(Vs(),Wr())):(0==(4&Ns)||98!==o&&99!==o||(null===rc?rc=new Set([e]):rc.add(e)),hc(e,n)),Hs=e}function bc(e,t){e.lanes|=t;var n=e.alternate;for(null!==n&&(n.lanes|=t),n=e,e=e.return;null!==e;)e.childLanes|=t,null!==(n=e.alternate)&&(n.childLanes|=t),n=e,e=e.return;return 3===n.tag?n.stateNode:null}function hc(e,t){for(var n=e.callbackNode,o=e.suspendedLanes,r=e.pingedLanes,i=e.expirationTimes,s=e.pendingLanes;0<s;){var c=31-qt(s),d=1<<c,l=i[c];if(-1===l){if(0==(d&o)||0!=(d&r)){l=t,Mt(d);var u=Dt;i[c]=10<=u?l+250:6<=u?l+5e3:-1}}else l<=t&&(e.expiredLanes|=d);s&=~d}if(o=Bt(e,e===Os?Ds:0),t=Dt,0===o)null!==n&&(n!==Br&&Tr(n),e.callbackNode=null,e.callbackPriority=0);else{if(null!==n){if(e.callbackPriority===t)return;n!==Br&&Tr(n)}15===t?(n=yc.bind(null,e),null===zr?(zr=[n],jr=Cr(Nr,Kr)):zr.push(n),n=Br):14===t?n=Vr(99,yc.bind(null,e)):(n=function(e){switch(e){case 15:case 14:return 99;case 13:case 12:case 11:case 10:return 98;case 9:case 8:case 7:case 6:case 4:case 5:return 97;case 3:case 2:case 1:return 95;case 0:return 90;default:throw Error(a(358,e))}}(t),n=Vr(n,vc.bind(null,e))),e.callbackPriority=t,e.callbackNode=n}}function vc(e){if(sc=-1,dc=cc=0,0!=(48&Ns))throw Error(a(327));var t=e.callbackNode;if(Dc()&&e.callbackNode!==t)return null;var n=Bt(e,e===Os?Ds:0);if(0===n)return null;var o=n,r=Ns;Ns|=16;var i=Cc();for(Os===e&&Ds===o||(Vs(),xc(e,o));;)try{Ac();break}catch(c){Ec(e,c)}if(ni(),Ls.current=i,Ns=r,null!==Is?o=0:(Os=null,Ds=0,o=Fs),0!=(js&$s))xc(e,0);else if(0!==o){if(2===o&&(Ns|=64,e.hydrate&&(e.hydrate=!1,Vo(e.containerInfo)),0!==(n=Ft(e))&&(o=Tc(e,n))),1===o)throw t=zs,xc(e,0),gc(e,n),hc(e,qr()),t;switch(e.finishedWork=e.current.alternate,e.finishedLanes=n,o){case 0:case 1:throw Error(a(345));case 2:case 5:Nc(e);break;case 3:if(gc(e,n),(62914560&n)===n&&10<(o=Gs+500-qr())){if(0!==Bt(e,0))break;if(((r=e.suspendedLanes)&n)!==n){pc(),e.pingedLanes|=e.suspendedLanes&r;break}e.timeoutHandle=Go(Nc.bind(null,e),o);break}Nc(e);break;case 4:if(gc(e,n),(4186112&n)===n)break;for(o=e.eventTimes,r=-1;0<n;){var s=31-qt(n);i=1<<s,(s=o[s])>r&&(r=s),n&=~i}if(n=r,10<(n=(120>(n=qr()-n)?120:480>n?480:1080>n?1080:1920>n?1920:3e3>n?3e3:4320>n?4320:1960*As(n/1960))-n)){e.timeoutHandle=Go(Nc.bind(null,e),n);break}Nc(e);break;default:throw Error(a(329))}}return hc(e,qr()),e.callbackNode===t?vc.bind(null,e):null}function gc(e,t){for(t&=~qs,t&=~$s,e.suspendedLanes|=t,e.pingedLanes&=~t,e=e.expirationTimes;0<t;){var n=31-qt(t),o=1<<n;e[n]=-1,t&=~o}}function yc(e){if(0!=(48&Ns))throw Error(a(327));if(Dc(),e===Os&&0!=(e.expiredLanes&Ds)){var t=Ds,n=Tc(e,t);0!=(js&$s)&&(n=Tc(e,t=Bt(e,t)))}else n=Tc(e,t=Bt(e,0));if(0!==e.tag&&2===n&&(Ns|=64,e.hydrate&&(e.hydrate=!1,Vo(e.containerInfo)),0!==(t=Ft(e))&&(n=Tc(e,t))),1===n)throw n=zs,xc(e,0),gc(e,t),hc(e,qr()),n;return e.finishedWork=e.current.alternate,e.finishedLanes=t,Nc(e),hc(e,qr()),null}function wc(e,t){var n=Ns;Ns|=1;try{return e(t)}finally{0===(Ns=n)&&(Vs(),Wr())}}function _c(e,t){var n=Ns;Ns&=-2,Ns|=8;try{return e(t)}finally{0===(Ns=n)&&(Vs(),Wr())}}function kc(e,t){ur(Bs,Ms),Ms|=t,js|=t}function Sc(){Ms=Bs.current,lr(Bs)}function xc(e,t){e.finishedWork=null,e.finishedLanes=0;var n=e.timeoutHandle;if(-1!==n&&(e.timeoutHandle=-1,Zo(n)),null!==Is)for(n=Is.return;null!==n;){var o=n;switch(o.tag){case 1:null!=(o=o.type.childContextTypes)&&gr();break;case 3:Ii(),lr(fr),lr(mr),Ki();break;case 5:Mi(o);break;case 4:Ii();break;case 13:case 19:lr(Bi);break;case 10:oi(o);break;case 23:case 24:Sc()}n=n.return}Os=e,Is=Zc(e.current,null),Ds=Ms=js=t,Fs=0,zs=null,qs=$s=Us=0}function Ec(e,t){for(;;){var n=Is;try{if(ni(),Yi.current=Ra,na){for(var o=Ji.memoizedState;null!==o;){var r=o.queue;null!==r&&(r.pending=null),o=o.next}na=!1}if(Xi=0,ta=ea=Ji=null,oa=!1,Rs.current=null,null===n||null===n.return){Fs=1,zs=t,Is=null;break}e:{var i=e,a=n.return,s=n,c=t;if(t=Ds,s.flags|=2048,s.firstEffect=s.lastEffect=null,null!==c&&"object"==typeof c&&"function"==typeof c.then){var d=c;if(0==(2&s.mode)){var l=s.alternate;l?(s.updateQueue=l.updateQueue,s.memoizedState=l.memoizedState,s.lanes=l.lanes):(s.updateQueue=null,s.memoizedState=null)}var u=0!=(1&Bi.current),p=a;do{var m;if(m=13===p.tag){var f=p.memoizedState;if(null!==f)m=null!==f.dehydrated;else{var b=p.memoizedProps;m=void 0!==b.fallback&&(!0!==b.unstable_avoidThisFallback||!u)}}if(m){var h=p.updateQueue;if(null===h){var v=new Set;v.add(d),p.updateQueue=v}else h.add(d);if(0==(2&p.mode)){if(p.flags|=64,s.flags|=16384,s.flags&=-2981,1===s.tag)if(null===s.alternate)s.tag=17;else{var g=li(-1,1);g.tag=2,ui(s,g)}s.lanes|=1;break e}c=void 0,s=t;var y=i.pingCache;if(null===y?(y=i.pingCache=new us,c=new Set,y.set(d,c)):void 0===(c=y.get(d))&&(c=new Set,y.set(d,c)),!c.has(s)){c.add(s);var w=Uc.bind(null,i,d,s);d.then(w,w)}p.flags|=4096,p.lanes=t;break e}p=p.return}while(null!==p);c=Error((V(s.type)||"A React component")+" suspended while rendering, but no fallback UI was specified.\n\nAdd a <Suspense fallback=...> component higher in the tree to provide a loading indicator or placeholder to display.")}5!==Fs&&(Fs=2),c=ds(c,s),p=a;do{switch(p.tag){case 3:i=c,p.flags|=4096,t&=-t,p.lanes|=t,pi(p,ps(0,i,t));break e;case 1:i=c;var _=p.type,k=p.stateNode;if(0==(64&p.flags)&&("function"==typeof _.getDerivedStateFromError||null!==k&&"function"==typeof k.componentDidCatch&&(null===Xs||!Xs.has(k)))){p.flags|=4096,t&=-t,p.lanes|=t,pi(p,ms(p,i,t));break e}}p=p.return}while(null!==p)}Rc(n)}catch(S){t=S,Is===n&&null!==n&&(Is=n=n.return);continue}break}}function Cc(){var e=Ls.current;return Ls.current=Ra,null===e?Ra:e}function Tc(e,t){var n=Ns;Ns|=16;var o=Cc();for(Os===e&&Ds===t||xc(e,t);;)try{Pc();break}catch(r){Ec(e,r)}if(ni(),Ns=n,Ls.current=o,null!==Is)throw Error(a(261));return Os=null,Ds=0,Fs}function Pc(){for(;null!==Is;)Lc(Is)}function Ac(){for(;null!==Is&&!Pr();)Lc(Is)}function Lc(e){var t=Ws(e.alternate,e,Ms);e.memoizedProps=e.pendingProps,null===t?Rc(e):Is=t,Rs.current=null}function Rc(e){var t=e;do{var n=t.alternate;if(e=t.return,0==(2048&t.flags)){if(null!==(n=ss(n,t,Ms)))return void(Is=n);if(24!==(n=t).tag&&23!==n.tag||null===n.memoizedState||0!=(1073741824&Ms)||0==(4&n.mode)){for(var o=0,r=n.child;null!==r;)o|=r.lanes|r.childLanes,r=r.sibling;n.childLanes=o}null!==e&&0==(2048&e.flags)&&(null===e.firstEffect&&(e.firstEffect=t.firstEffect),null!==t.lastEffect&&(null!==e.lastEffect&&(e.lastEffect.nextEffect=t.firstEffect),e.lastEffect=t.lastEffect),1<t.flags&&(null!==e.lastEffect?e.lastEffect.nextEffect=t:e.firstEffect=t,e.lastEffect=t))}else{if(null!==(n=cs(t)))return n.flags&=2047,void(Is=n);null!==e&&(e.firstEffect=e.lastEffect=null,e.flags|=2048)}if(null!==(t=t.sibling))return void(Is=t);Is=t=e}while(null!==t);0===Fs&&(Fs=5)}function Nc(e){var t=Hr();return Zr(99,Oc.bind(null,e,t)),null}function Oc(e,t){do{Dc()}while(null!==ec);if(0!=(48&Ns))throw Error(a(327));var n=e.finishedWork;if(null===n)return null;if(e.finishedWork=null,e.finishedLanes=0,n===e.current)throw Error(a(177));e.callbackNode=null;var o=n.lanes|n.childLanes,r=o,i=e.pendingLanes&~r;e.pendingLanes=r,e.suspendedLanes=0,e.pingedLanes=0,e.expiredLanes&=r,e.mutableReadLanes&=r,e.entangledLanes&=r,r=e.entanglements;for(var s=e.eventTimes,c=e.expirationTimes;0<i;){var d=31-qt(i),l=1<<d;r[d]=0,s[d]=-1,c[d]=-1,i&=~l}if(null!==rc&&0==(24&o)&&rc.has(e)&&rc.delete(e),e===Os&&(Is=Os=null,Ds=0),1<n.flags?null!==n.lastEffect?(n.lastEffect.nextEffect=n,o=n.firstEffect):o=n:o=n.firstEffect,null!==o){if(r=Ns,Ns|=32,Rs.current=null,Uo=Wt,vo(s=ho())){if("selectionStart"in s)c={start:s.selectionStart,end:s.selectionEnd};else e:if(c=(c=s.ownerDocument)&&c.defaultView||window,(l=c.getSelection&&c.getSelection())&&0!==l.rangeCount){c=l.anchorNode,i=l.anchorOffset,d=l.focusNode,l=l.focusOffset;try{c.nodeType,d.nodeType}catch(C){c=null;break e}var u=0,p=-1,m=-1,f=0,b=0,h=s,v=null;t:for(;;){for(var g;h!==c||0!==i&&3!==h.nodeType||(p=u+i),h!==d||0!==l&&3!==h.nodeType||(m=u+l),3===h.nodeType&&(u+=h.nodeValue.length),null!==(g=h.firstChild);)v=h,h=g;for(;;){if(h===s)break t;if(v===c&&++f===i&&(p=u),v===d&&++b===l&&(m=u),null!==(g=h.nextSibling))break;v=(h=v).parentNode}h=g}c=-1===p||-1===m?null:{start:p,end:m}}else c=null;c=c||{start:0,end:0}}else c=null;$o={focusedElem:s,selectionRange:c},Wt=!1,lc=null,uc=!1,Ks=o;do{try{Ic()}catch(C){if(null===Ks)throw Error(a(330));jc(Ks,C),Ks=Ks.nextEffect}}while(null!==Ks);lc=null,Ks=o;do{try{for(s=e;null!==Ks;){var y=Ks.flags;if(16&y&&ve(Ks.stateNode,""),128&y){var w=Ks.alternate;if(null!==w){var _=w.ref;null!==_&&("function"==typeof _?_(null):_.current=null)}}switch(1038&y){case 2:ks(Ks),Ks.flags&=-3;break;case 6:ks(Ks),Ks.flags&=-3,Cs(Ks.alternate,Ks);break;case 1024:Ks.flags&=-1025;break;case 1028:Ks.flags&=-1025,Cs(Ks.alternate,Ks);break;case 4:Cs(Ks.alternate,Ks);break;case 8:Es(s,c=Ks);var k=c.alternate;ws(c),null!==k&&ws(k)}Ks=Ks.nextEffect}}catch(C){if(null===Ks)throw Error(a(330));jc(Ks,C),Ks=Ks.nextEffect}}while(null!==Ks);if(_=$o,w=ho(),y=_.focusedElem,s=_.selectionRange,w!==y&&y&&y.ownerDocument&&bo(y.ownerDocument.documentElement,y)){null!==s&&vo(y)&&(w=s.start,void 0===(_=s.end)&&(_=w),"selectionStart"in y?(y.selectionStart=w,y.selectionEnd=Math.min(_,y.value.length)):(_=(w=y.ownerDocument||document)&&w.defaultView||window).getSelection&&(_=_.getSelection(),c=y.textContent.length,k=Math.min(s.start,c),s=void 0===s.end?k:Math.min(s.end,c),!_.extend&&k>s&&(c=s,s=k,k=c),c=fo(y,k),i=fo(y,s),c&&i&&(1!==_.rangeCount||_.anchorNode!==c.node||_.anchorOffset!==c.offset||_.focusNode!==i.node||_.focusOffset!==i.offset)&&((w=w.createRange()).setStart(c.node,c.offset),_.removeAllRanges(),k>s?(_.addRange(w),_.extend(i.node,i.offset)):(w.setEnd(i.node,i.offset),_.addRange(w))))),w=[];for(_=y;_=_.parentNode;)1===_.nodeType&&w.push({element:_,left:_.scrollLeft,top:_.scrollTop});for("function"==typeof y.focus&&y.focus(),y=0;y<w.length;y++)(_=w[y]).element.scrollLeft=_.left,_.element.scrollTop=_.top}Wt=!!Uo,$o=Uo=null,e.current=n,Ks=o;do{try{for(y=e;null!==Ks;){var S=Ks.flags;if(36&S&&vs(y,Ks.alternate,Ks),128&S){w=void 0;var x=Ks.ref;if(null!==x){var E=Ks.stateNode;Ks.tag,w=E,"function"==typeof x?x(w):x.current=w}}Ks=Ks.nextEffect}}catch(C){if(null===Ks)throw Error(a(330));jc(Ks,C),Ks=Ks.nextEffect}}while(null!==Ks);Ks=null,Fr(),Ns=r}else e.current=n;if(Js)Js=!1,ec=e,tc=t;else for(Ks=o;null!==Ks;)t=Ks.nextEffect,Ks.nextEffect=null,8&Ks.flags&&((S=Ks).sibling=null,S.stateNode=null),Ks=t;if(0===(o=e.pendingLanes)&&(Xs=null),1===o?e===ac?ic++:(ic=0,ac=e):ic=0,n=n.stateNode,xr&&"function"==typeof xr.onCommitFiberRoot)try{xr.onCommitFiberRoot(Sr,n,void 0,64==(64&n.current.flags))}catch(C){}if(hc(e,qr()),Ys)throw Ys=!1,e=Qs,Qs=null,e;return 0!=(8&Ns)||Wr(),null}function Ic(){for(;null!==Ks;){var e=Ks.alternate;uc||null===lc||(0!=(8&Ks.flags)?Je(Ks,lc)&&(uc=!0):13===Ks.tag&&Ps(e,Ks)&&Je(Ks,lc)&&(uc=!0));var t=Ks.flags;0!=(256&t)&&hs(e,Ks),0==(512&t)||Js||(Js=!0,Vr(97,(function(){return Dc(),null}))),Ks=Ks.nextEffect}}function Dc(){if(90!==tc){var e=97<tc?97:tc;return tc=90,Zr(e,Fc)}return!1}function Mc(e,t){nc.push(t,e),Js||(Js=!0,Vr(97,(function(){return Dc(),null})))}function Bc(e,t){oc.push(t,e),Js||(Js=!0,Vr(97,(function(){return Dc(),null})))}function Fc(){if(null===ec)return!1;var e=ec;if(ec=null,0!=(48&Ns))throw Error(a(331));var t=Ns;Ns|=32;var n=oc;oc=[];for(var o=0;o<n.length;o+=2){var r=n[o],i=n[o+1],s=r.destroy;if(r.destroy=void 0,"function"==typeof s)try{s()}catch(d){if(null===i)throw Error(a(330));jc(i,d)}}for(n=nc,nc=[],o=0;o<n.length;o+=2){r=n[o],i=n[o+1];try{var c=r.create;r.destroy=c()}catch(d){if(null===i)throw Error(a(330));jc(i,d)}}for(c=e.current.firstEffect;null!==c;)e=c.nextEffect,c.nextEffect=null,8&c.flags&&(c.sibling=null,c.stateNode=null),c=e;return Ns=t,Wr(),!0}function zc(e,t,n){ui(e,t=ps(0,t=ds(n,t),1)),t=pc(),null!==(e=bc(e,1))&&($t(e,1,t),hc(e,t))}function jc(e,t){if(3===e.tag)zc(e,e,t);else for(var n=e.return;null!==n;){if(3===n.tag){zc(n,e,t);break}if(1===n.tag){var o=n.stateNode;if("function"==typeof n.type.getDerivedStateFromError||"function"==typeof o.componentDidCatch&&(null===Xs||!Xs.has(o))){var r=ms(n,e=ds(t,e),1);if(ui(n,r),r=pc(),null!==(n=bc(n,1)))$t(n,1,r),hc(n,r);else if("function"==typeof o.componentDidCatch&&(null===Xs||!Xs.has(o)))try{o.componentDidCatch(t,e)}catch(i){}break}}n=n.return}}function Uc(e,t,n){var o=e.pingCache;null!==o&&o.delete(t),t=pc(),e.pingedLanes|=e.suspendedLanes&n,Os===e&&(Ds&n)===n&&(4===Fs||3===Fs&&(62914560&Ds)===Ds&&500>qr()-Gs?xc(e,0):qs|=n),hc(e,t)}function $c(e,t){var n=e.stateNode;null!==n&&n.delete(t),0===(t=0)&&(0==(2&(t=e.mode))?t=1:0==(4&t)?t=99===Hr()?1:2:(0===cc&&(cc=js),0===(t=jt(62914560&~cc))&&(t=4194304))),n=pc(),null!==(e=bc(e,t))&&($t(e,t,n),hc(e,n))}function qc(e,t,n,o){this.tag=e,this.key=n,this.sibling=this.child=this.return=this.stateNode=this.type=this.elementType=null,this.index=0,this.ref=null,this.pendingProps=t,this.dependencies=this.memoizedState=this.updateQueue=this.memoizedProps=null,this.mode=o,this.flags=0,this.lastEffect=this.firstEffect=this.nextEffect=null,this.childLanes=this.lanes=0,this.alternate=null}function Hc(e,t,n,o){return new qc(e,t,n,o)}function Gc(e){return!(!(e=e.prototype)||!e.isReactComponent)}function Zc(e,t){var n=e.alternate;return null===n?((n=Hc(e.tag,t,e.key,e.mode)).elementType=e.elementType,n.type=e.type,n.stateNode=e.stateNode,n.alternate=e,e.alternate=n):(n.pendingProps=t,n.type=e.type,n.flags=0,n.nextEffect=null,n.firstEffect=null,n.lastEffect=null),n.childLanes=e.childLanes,n.lanes=e.lanes,n.child=e.child,n.memoizedProps=e.memoizedProps,n.memoizedState=e.memoizedState,n.updateQueue=e.updateQueue,t=e.dependencies,n.dependencies=null===t?null:{lanes:t.lanes,firstContext:t.firstContext},n.sibling=e.sibling,n.index=e.index,n.ref=e.ref,n}function Vc(e,t,n,o,r,i){var s=2;if(o=e,"function"==typeof e)Gc(e)&&(s=1);else if("string"==typeof e)s=5;else e:switch(e){case x:return Wc(n.children,r,i,t);case M:s=8,r|=16;break;case E:s=8,r|=1;break;case C:return(e=Hc(12,n,t,8|r)).elementType=C,e.type=C,e.lanes=i,e;case L:return(e=Hc(13,n,t,r)).type=L,e.elementType=L,e.lanes=i,e;case R:return(e=Hc(19,n,t,r)).elementType=R,e.lanes=i,e;case B:return Kc(n,r,i,t);case F:return(e=Hc(24,n,t,r)).elementType=F,e.lanes=i,e;default:if("object"==typeof e&&null!==e)switch(e.$$typeof){case T:s=10;break e;case P:s=9;break e;case A:s=11;break e;case N:s=14;break e;case O:s=16,o=null;break e;case I:s=22;break e}throw Error(a(130,null==e?e:typeof e,""))}return(t=Hc(s,n,t,r)).elementType=e,t.type=o,t.lanes=i,t}function Wc(e,t,n,o){return(e=Hc(7,e,o,t)).lanes=n,e}function Kc(e,t,n,o){return(e=Hc(23,e,o,t)).elementType=B,e.lanes=n,e}function Yc(e,t,n){return(e=Hc(6,e,null,t)).lanes=n,e}function Qc(e,t,n){return(t=Hc(4,null!==e.children?e.children:[],e.key,t)).lanes=n,t.stateNode={containerInfo:e.containerInfo,pendingChildren:null,implementation:e.implementation},t}function Xc(e,t,n){this.tag=t,this.containerInfo=e,this.finishedWork=this.pingCache=this.current=this.pendingChildren=null,this.timeoutHandle=-1,this.pendingContext=this.context=null,this.hydrate=n,this.callbackNode=null,this.callbackPriority=0,this.eventTimes=Ut(0),this.expirationTimes=Ut(-1),this.entangledLanes=this.finishedLanes=this.mutableReadLanes=this.expiredLanes=this.pingedLanes=this.suspendedLanes=this.pendingLanes=0,this.entanglements=Ut(0),this.mutableSourceEagerHydrationData=null}function Jc(e,t,n,o){var r=t.current,i=pc(),s=mc(r);e:if(n){t:{if(Ke(n=n._reactInternals)!==n||1!==n.tag)throw Error(a(170));var c=n;do{switch(c.tag){case 3:c=c.stateNode.context;break t;case 1:if(vr(c.type)){c=c.stateNode.__reactInternalMemoizedMergedChildContext;break t}}c=c.return}while(null!==c);throw Error(a(171))}if(1===n.tag){var d=n.type;if(vr(d)){n=wr(n,d,c);break e}}n=c}else n=pr;return null===t.context?t.context=n:t.pendingContext=n,(t=li(i,s)).payload={element:e},null!==(o=void 0===o?null:o)&&(t.callback=o),ui(r,t),fc(r,s,i),s}function ed(e){return(e=e.current).child?(e.child.tag,e.child.stateNode):null}function td(e,t){if(null!==(e=e.memoizedState)&&null!==e.dehydrated){var n=e.retryLane;e.retryLane=0!==n&&n<t?n:t}}function nd(e,t){td(e,t),(e=e.alternate)&&td(e,t)}function od(e,t,n){var o=null!=n&&null!=n.hydrationOptions&&n.hydrationOptions.mutableSources||null;if(n=new Xc(e,t,null!=n&&!0===n.hydrate),t=Hc(3,null,null,2===t?7:1===t?3:0),n.current=t,t.stateNode=n,ci(t),e[er]=n.current,No(8===e.nodeType?e.parentNode:e),o)for(e=0;e<o.length;e++){var r=(t=o[e])._getVersion;r=r(t._source),null==n.mutableSourceEagerHydrationData?n.mutableSourceEagerHydrationData=[t,r]:n.mutableSourceEagerHydrationData.push(t,r)}this._internalRoot=n}function rd(e){return!(!e||1!==e.nodeType&&9!==e.nodeType&&11!==e.nodeType&&(8!==e.nodeType||" react-mount-point-unstable "!==e.nodeValue))}function id(e,t,n,o,r){var i=n._reactRootContainer;if(i){var a=i._internalRoot;if("function"==typeof r){var s=r;r=function(){var e=ed(a);s.call(e)}}Jc(t,a,e,r)}else{if(i=n._reactRootContainer=function(e,t){if(t||(t=!(!(t=e?9===e.nodeType?e.documentElement:e.firstChild:null)||1!==t.nodeType||!t.hasAttribute("data-reactroot"))),!t)for(var n;n=e.lastChild;)e.removeChild(n);return new od(e,0,t?{hydrate:!0}:void 0)}(n,o),a=i._internalRoot,"function"==typeof r){var c=r;r=function(){var e=ed(a);c.call(e)}}_c((function(){Jc(t,a,e,r)}))}return ed(a)}function ad(e,t){var n=2<arguments.length&&void 0!==arguments[2]?arguments[2]:null;if(!rd(t))throw Error(a(200));return function(e,t,n){var o=3<arguments.length&&void 0!==arguments[3]?arguments[3]:null;return{$$typeof:S,key:null==o?null:""+o,children:e,containerInfo:t,implementation:n}}(e,t,null,n)}Ws=function(e,t,n){var o=t.lanes;if(null!==e)if(e.memoizedProps!==t.pendingProps||fr.current)Ma=!0;else{if(0==(n&o)){switch(Ma=!1,t.tag){case 3:Za(t),Vi();break;case 5:Di(t);break;case 1:vr(t.type)&&_r(t);break;case 4:Oi(t,t.stateNode.containerInfo);break;case 10:o=t.memoizedProps.value;var r=t.type._context;ur(Xr,r._currentValue),r._currentValue=o;break;case 13:if(null!==t.memoizedState)return 0!=(n&t.child.childLanes)?Xa(e,t,n):(ur(Bi,1&Bi.current),null!==(t=is(e,t,n))?t.sibling:null);ur(Bi,1&Bi.current);break;case 19:if(o=0!=(n&t.childLanes),0!=(64&e.flags)){if(o)return rs(e,t,n);t.flags|=64}if(null!==(r=t.memoizedState)&&(r.rendering=null,r.tail=null,r.lastEffect=null),ur(Bi,Bi.current),o)break;return null;case 23:case 24:return t.lanes=0,Ua(e,t,n)}return is(e,t,n)}Ma=0!=(16384&e.flags)}else Ma=!1;switch(t.lanes=0,t.tag){case 2:if(o=t.type,null!==e&&(e.alternate=null,t.alternate=null,t.flags|=2),e=t.pendingProps,r=hr(t,mr.current),ii(t,n),r=aa(null,t,o,e,r,n),t.flags|=1,"object"==typeof r&&null!==r&&"function"==typeof r.render&&void 0===r.$$typeof){if(t.tag=1,t.memoizedState=null,t.updateQueue=null,vr(o)){var i=!0;_r(t)}else i=!1;t.memoizedState=null!==r.state&&void 0!==r.state?r.state:null,ci(t);var s=o.getDerivedStateFromProps;"function"==typeof s&&hi(t,o,s,e),r.updater=vi,t.stateNode=r,r._reactInternals=t,_i(t,o,e,n),t=Ga(null,t,o,!0,i,n)}else t.tag=0,Ba(null,t,r,n),t=t.child;return t;case 16:r=t.elementType;e:{switch(null!==e&&(e.alternate=null,t.alternate=null,t.flags|=2),e=t.pendingProps,r=(i=r._init)(r._payload),t.type=r,i=t.tag=function(e){if("function"==typeof e)return Gc(e)?1:0;if(null!=e){if((e=e.$$typeof)===A)return 11;if(e===N)return 14}return 2}(r),e=Qr(r,e),i){case 0:t=qa(null,t,r,e,n);break e;case 1:t=Ha(null,t,r,e,n);break e;case 11:t=Fa(null,t,r,e,n);break e;case 14:t=za(null,t,r,Qr(r.type,e),o,n);break e}throw Error(a(306,r,""))}return t;case 0:return o=t.type,r=t.pendingProps,qa(e,t,o,r=t.elementType===o?r:Qr(o,r),n);case 1:return o=t.type,r=t.pendingProps,Ha(e,t,o,r=t.elementType===o?r:Qr(o,r),n);case 3:if(Za(t),o=t.updateQueue,null===e||null===o)throw Error(a(282));if(o=t.pendingProps,r=null!==(r=t.memoizedState)?r.element:null,di(e,t),mi(t,o,null,n),(o=t.memoizedState.element)===r)Vi(),t=is(e,t,n);else{if((i=(r=t.stateNode).hydrate)&&(ji=Wo(t.stateNode.containerInfo.firstChild),zi=t,i=Ui=!0),i){if(null!=(e=r.mutableSourceEagerHydrationData))for(r=0;r<e.length;r+=2)(i=e[r])._workInProgressVersionPrimary=e[r+1],Wi.push(i);for(n=Ti(t,null,o,n),t.child=n;n;)n.flags=-3&n.flags|1024,n=n.sibling}else Ba(e,t,o,n),Vi();t=t.child}return t;case 5:return Di(t),null===e&&Hi(t),o=t.type,r=t.pendingProps,i=null!==e?e.memoizedProps:null,s=r.children,Ho(o,r)?s=null:null!==i&&Ho(o,i)&&(t.flags|=16),$a(e,t),Ba(e,t,s,n),t.child;case 6:return null===e&&Hi(t),null;case 13:return Xa(e,t,n);case 4:return Oi(t,t.stateNode.containerInfo),o=t.pendingProps,null===e?t.child=Ci(t,null,o,n):Ba(e,t,o,n),t.child;case 11:return o=t.type,r=t.pendingProps,Fa(e,t,o,r=t.elementType===o?r:Qr(o,r),n);case 7:return Ba(e,t,t.pendingProps,n),t.child;case 8:case 12:return Ba(e,t,t.pendingProps.children,n),t.child;case 10:e:{o=t.type._context,r=t.pendingProps,s=t.memoizedProps,i=r.value;var c=t.type._context;if(ur(Xr,c._currentValue),c._currentValue=i,null!==s)if(c=s.value,0===(i=lo(c,i)?0:0|("function"==typeof o._calculateChangedBits?o._calculateChangedBits(c,i):1073741823))){if(s.children===r.children&&!fr.current){t=is(e,t,n);break e}}else for(null!==(c=t.child)&&(c.return=t);null!==c;){var d=c.dependencies;if(null!==d){s=c.child;for(var l=d.firstContext;null!==l;){if(l.context===o&&0!=(l.observedBits&i)){1===c.tag&&((l=li(-1,n&-n)).tag=2,ui(c,l)),c.lanes|=n,null!==(l=c.alternate)&&(l.lanes|=n),ri(c.return,n),d.lanes|=n;break}l=l.next}}else s=10===c.tag&&c.type===t.type?null:c.child;if(null!==s)s.return=c;else for(s=c;null!==s;){if(s===t){s=null;break}if(null!==(c=s.sibling)){c.return=s.return,s=c;break}s=s.return}c=s}Ba(e,t,r.children,n),t=t.child}return t;case 9:return r=t.type,o=(i=t.pendingProps).children,ii(t,n),o=o(r=ai(r,i.unstable_observedBits)),t.flags|=1,Ba(e,t,o,n),t.child;case 14:return i=Qr(r=t.type,t.pendingProps),za(e,t,r,i=Qr(r.type,i),o,n);case 15:return ja(e,t,t.type,t.pendingProps,o,n);case 17:return o=t.type,r=t.pendingProps,r=t.elementType===o?r:Qr(o,r),null!==e&&(e.alternate=null,t.alternate=null,t.flags|=2),t.tag=1,vr(o)?(e=!0,_r(t)):e=!1,ii(t,n),yi(t,o,r),_i(t,o,r,n),Ga(null,t,o,!0,e,n);case 19:return rs(e,t,n);case 23:case 24:return Ua(e,t,n)}throw Error(a(156,t.tag))},od.prototype.render=function(e){Jc(e,this._internalRoot,null,null)},od.prototype.unmount=function(){var e=this._internalRoot,t=e.containerInfo;Jc(null,e,null,(function(){t[er]=null}))},et=function(e){13===e.tag&&(fc(e,4,pc()),nd(e,4))},tt=function(e){13===e.tag&&(fc(e,67108864,pc()),nd(e,67108864))},nt=function(e){if(13===e.tag){var t=pc(),n=mc(e);fc(e,n,t),nd(e,n)}},ot=function(e,t){return t()},Ce=function(e,t,n){switch(t){case"input":if(ne(e,n),t=n.name,"radio"===n.type&&null!=t){for(n=e;n.parentNode;)n=n.parentNode;for(n=n.querySelectorAll("input[name="+JSON.stringify(""+t)+'][type="radio"]'),t=0;t<n.length;t++){var o=n[t];if(o!==e&&o.form===e.form){var r=ir(o);if(!r)throw Error(a(90));Q(o),ne(o,r)}}}break;case"textarea":de(e,n);break;case"select":null!=(t=n.value)&&ae(e,!!n.multiple,t,!1)}},Ne=wc,Oe=function(e,t,n,o,r){var i=Ns;Ns|=4;try{return Zr(98,e.bind(null,t,n,o,r))}finally{0===(Ns=i)&&(Vs(),Wr())}},Ie=function(){0==(49&Ns)&&(function(){if(null!==rc){var e=rc;rc=null,e.forEach((function(e){e.expiredLanes|=24&e.pendingLanes,hc(e,qr())}))}Wr()}(),Dc())},De=function(e,t){var n=Ns;Ns|=2;try{return e(t)}finally{0===(Ns=n)&&(Vs(),Wr())}};var sd={Events:[or,rr,ir,Le,Re,Dc,{current:!1}]},cd={findFiberByHostInstance:nr,bundleType:0,version:"17.0.2",rendererPackageName:"react-dom"},dd={bundleType:cd.bundleType,version:cd.version,rendererPackageName:cd.rendererPackageName,rendererConfig:cd.rendererConfig,overrideHookState:null,overrideHookStateDeletePath:null,overrideHookStateRenamePath:null,overrideProps:null,overridePropsDeletePath:null,overridePropsRenamePath:null,setSuspenseHandler:null,scheduleUpdate:null,currentDispatcherRef:_.ReactCurrentDispatcher,findHostInstanceByFiber:function(e){return null===(e=Xe(e))?null:e.stateNode},findFiberByHostInstance:cd.findFiberByHostInstance||function(){return null},findHostInstancesForRefresh:null,scheduleRefresh:null,scheduleRoot:null,setRefreshHandler:null,getCurrentFiber:null};if("undefined"!=typeof __REACT_DEVTOOLS_GLOBAL_HOOK__){var ld=__REACT_DEVTOOLS_GLOBAL_HOOK__;if(!ld.isDisabled&&ld.supportsFiber)try{Sr=ld.inject(dd),xr=ld}catch(be){}}t.hydrate=function(e,t,n){if(!rd(t))throw Error(a(200));return id(null,e,t,!0,n)}},73935:function(e,t,n){"use strict";!function e(){if("undefined"!=typeof __REACT_DEVTOOLS_GLOBAL_HOOK__&&"function"==typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE)try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(e)}catch(t){console.error(t)}}(),e.exports=n(64448)},69590:function(e){var t="undefined"!=typeof Element,n="function"==typeof Map,o="function"==typeof Set,r="function"==typeof ArrayBuffer&&!!ArrayBuffer.isView;function i(e,a){if(e===a)return!0;if(e&&a&&"object"==typeof e&&"object"==typeof a){if(e.constructor!==a.constructor)return!1;var s,c,d,l;if(Array.isArray(e)){if((s=e.length)!=a.length)return!1;for(c=s;0!=c--;)if(!i(e[c],a[c]))return!1;return!0}if(n&&e instanceof Map&&a instanceof Map){if(e.size!==a.size)return!1;for(l=e.entries();!(c=l.next()).done;)if(!a.has(c.value[0]))return!1;for(l=e.entries();!(c=l.next()).done;)if(!i(c.value[1],a.get(c.value[0])))return!1;return!0}if(o&&e instanceof Set&&a instanceof Set){if(e.size!==a.size)return!1;for(l=e.entries();!(c=l.next()).done;)if(!a.has(c.value[0]))return!1;return!0}if(r&&ArrayBuffer.isView(e)&&ArrayBuffer.isView(a)){if((s=e.length)!=a.length)return!1;for(c=s;0!=c--;)if(e[c]!==a[c])return!1;return!0}if(e.constructor===RegExp)return e.source===a.source&&e.flags===a.flags;if(e.valueOf!==Object.prototype.valueOf)return e.valueOf()===a.valueOf();if(e.toString!==Object.prototype.toString)return e.toString()===a.toString();if((s=(d=Object.keys(e)).length)!==Object.keys(a).length)return!1;for(c=s;0!=c--;)if(!Object.prototype.hasOwnProperty.call(a,d[c]))return!1;if(t&&e instanceof Element)return!1;for(c=s;0!=c--;)if(("_owner"!==d[c]&&"__v"!==d[c]&&"__o"!==d[c]||!e.$$typeof)&&!i(e[d[c]],a[d[c]]))return!1;return!0}return e!=e&&a!=a}e.exports=function(e,t){try{return i(e,t)}catch(n){if((n.message||"").match(/stack|recursion/i))return console.warn("react-fast-compare cannot handle circular refs"),!1;throw n}}},70405:function(e,t,n){"use strict";n.d(t,{B6:function(){return G},ql:function(){return J}});var o=n(67294),r=n(45697),i=n.n(r),a=n(69590),s=n.n(a),c=n(41143),d=n.n(c),l=n(96774),u=n.n(l);function p(){return p=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var o in n)Object.prototype.hasOwnProperty.call(n,o)&&(e[o]=n[o])}return e},p.apply(this,arguments)}function m(e,t){e.prototype=Object.create(t.prototype),e.prototype.constructor=e,f(e,t)}function f(e,t){return f=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e},f(e,t)}function b(e,t){if(null==e)return{};var n,o,r={},i=Object.keys(e);for(o=0;o<i.length;o++)t.indexOf(n=i[o])>=0||(r[n]=e[n]);return r}var h={BASE:"base",BODY:"body",HEAD:"head",HTML:"html",LINK:"link",META:"meta",NOSCRIPT:"noscript",SCRIPT:"script",STYLE:"style",TITLE:"title",FRAGMENT:"Symbol(react.fragment)"},v={rel:["amphtml","canonical","alternate"]},g={type:["application/ld+json"]},y={charset:"",name:["robots","description"],property:["og:type","og:title","og:url","og:image","og:image:alt","og:description","twitter:url","twitter:title","twitter:description","twitter:image","twitter:image:alt","twitter:card","twitter:site"]},w=Object.keys(h).map((function(e){return h[e]})),_={accesskey:"accessKey",charset:"charSet",class:"className",contenteditable:"contentEditable",contextmenu:"contextMenu","http-equiv":"httpEquiv",itemprop:"itemProp",tabindex:"tabIndex"},k=Object.keys(_).reduce((function(e,t){return e[_[t]]=t,e}),{}),S=function(e,t){for(var n=e.length-1;n>=0;n-=1){var o=e[n];if(Object.prototype.hasOwnProperty.call(o,t))return o[t]}return null},x=function(e){var t=S(e,h.TITLE),n=S(e,"titleTemplate");if(Array.isArray(t)&&(t=t.join("")),n&&t)return n.replace(/%s/g,(function(){return t}));var o=S(e,"defaultTitle");return t||o||void 0},E=function(e){return S(e,"onChangeClientState")||function(){}},C=function(e,t){return t.filter((function(t){return void 0!==t[e]})).map((function(t){return t[e]})).reduce((function(e,t){return p({},e,t)}),{})},T=function(e,t){return t.filter((function(e){return void 0!==e[h.BASE]})).map((function(e){return e[h.BASE]})).reverse().reduce((function(t,n){if(!t.length)for(var o=Object.keys(n),r=0;r<o.length;r+=1){var i=o[r].toLowerCase();if(-1!==e.indexOf(i)&&n[i])return t.concat(n)}return t}),[])},P=function(e,t,n){var o={};return n.filter((function(t){return!!Array.isArray(t[e])||(void 0!==t[e]&&console&&"function"==typeof console.warn&&console.warn("Helmet: "+e+' should be of type "Array". Instead found type "'+typeof t[e]+'"'),!1)})).map((function(t){return t[e]})).reverse().reduce((function(e,n){var r={};n.filter((function(e){for(var n,i=Object.keys(e),a=0;a<i.length;a+=1){var s=i[a],c=s.toLowerCase();-1===t.indexOf(c)||"rel"===n&&"canonical"===e[n].toLowerCase()||"rel"===c&&"stylesheet"===e[c].toLowerCase()||(n=c),-1===t.indexOf(s)||"innerHTML"!==s&&"cssText"!==s&&"itemprop"!==s||(n=s)}if(!n||!e[n])return!1;var d=e[n].toLowerCase();return o[n]||(o[n]={}),r[n]||(r[n]={}),!o[n][d]&&(r[n][d]=!0,!0)})).reverse().forEach((function(t){return e.push(t)}));for(var i=Object.keys(r),a=0;a<i.length;a+=1){var s=i[a],c=p({},o[s],r[s]);o[s]=c}return e}),[]).reverse()},A=function(e,t){if(Array.isArray(e)&&e.length)for(var n=0;n<e.length;n+=1)if(e[n][t])return!0;return!1},L=function(e){return Array.isArray(e)?e.join(""):e},R=function(e,t){return Array.isArray(e)?e.reduce((function(e,n){return function(e,t){for(var n=Object.keys(e),o=0;o<n.length;o+=1)if(t[n[o]]&&t[n[o]].includes(e[n[o]]))return!0;return!1}(n,t)?e.priority.push(n):e.default.push(n),e}),{priority:[],default:[]}):{default:e}},N=function(e,t){var n;return p({},e,((n={})[t]=void 0,n))},O=[h.NOSCRIPT,h.SCRIPT,h.STYLE],I=function(e,t){return void 0===t&&(t=!0),!1===t?String(e):String(e).replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;").replace(/'/g,"&#x27;")},D=function(e){return Object.keys(e).reduce((function(t,n){var o=void 0!==e[n]?n+'="'+e[n]+'"':""+n;return t?t+" "+o:o}),"")},M=function(e,t){return void 0===t&&(t={}),Object.keys(e).reduce((function(t,n){return t[_[n]||n]=e[n],t}),t)},B=function(e,t){return t.map((function(t,n){var r,i=((r={key:n})["data-rh"]=!0,r);return Object.keys(t).forEach((function(e){var n=_[e]||e;"innerHTML"===n||"cssText"===n?i.dangerouslySetInnerHTML={__html:t.innerHTML||t.cssText}:i[n]=t[e]})),o.createElement(e,i)}))},F=function(e,t,n){switch(e){case h.TITLE:return{toComponent:function(){return n=t.titleAttributes,(r={key:e=t.title})["data-rh"]=!0,i=M(n,r),[o.createElement(h.TITLE,i,e)];var e,n,r,i},toString:function(){return function(e,t,n,o){var r=D(n),i=L(t);return r?"<"+e+' data-rh="true" '+r+">"+I(i,o)+"</"+e+">":"<"+e+' data-rh="true">'+I(i,o)+"</"+e+">"}(e,t.title,t.titleAttributes,n)}};case"bodyAttributes":case"htmlAttributes":return{toComponent:function(){return M(t)},toString:function(){return D(t)}};default:return{toComponent:function(){return B(e,t)},toString:function(){return function(e,t,n){return t.reduce((function(t,o){var r=Object.keys(o).filter((function(e){return!("innerHTML"===e||"cssText"===e)})).reduce((function(e,t){var r=void 0===o[t]?t:t+'="'+I(o[t],n)+'"';return e?e+" "+r:r}),""),i=o.innerHTML||o.cssText||"",a=-1===O.indexOf(e);return t+"<"+e+' data-rh="true" '+r+(a?"/>":">"+i+"</"+e+">")}),"")}(e,t,n)}}}},z=function(e){var t=e.baseTag,n=e.bodyAttributes,o=e.encode,r=e.htmlAttributes,i=e.noscriptTags,a=e.styleTags,s=e.title,c=void 0===s?"":s,d=e.titleAttributes,l=e.linkTags,u=e.metaTags,p=e.scriptTags,m={toComponent:function(){},toString:function(){return""}};if(e.prioritizeSeoTags){var f=function(e){var t=e.linkTags,n=e.scriptTags,o=e.encode,r=R(e.metaTags,y),i=R(t,v),a=R(n,g);return{priorityMethods:{toComponent:function(){return[].concat(B(h.META,r.priority),B(h.LINK,i.priority),B(h.SCRIPT,a.priority))},toString:function(){return F(h.META,r.priority,o)+" "+F(h.LINK,i.priority,o)+" "+F(h.SCRIPT,a.priority,o)}},metaTags:r.default,linkTags:i.default,scriptTags:a.default}}(e);m=f.priorityMethods,l=f.linkTags,u=f.metaTags,p=f.scriptTags}return{priority:m,base:F(h.BASE,t,o),bodyAttributes:F("bodyAttributes",n,o),htmlAttributes:F("htmlAttributes",r,o),link:F(h.LINK,l,o),meta:F(h.META,u,o),noscript:F(h.NOSCRIPT,i,o),script:F(h.SCRIPT,p,o),style:F(h.STYLE,a,o),title:F(h.TITLE,{title:c,titleAttributes:d},o)}},j=[],U=function(e,t){var n=this;void 0===t&&(t="undefined"!=typeof document),this.instances=[],this.value={setHelmet:function(e){n.context.helmet=e},helmetInstances:{get:function(){return n.canUseDOM?j:n.instances},add:function(e){(n.canUseDOM?j:n.instances).push(e)},remove:function(e){var t=(n.canUseDOM?j:n.instances).indexOf(e);(n.canUseDOM?j:n.instances).splice(t,1)}}},this.context=e,this.canUseDOM=t,t||(e.helmet=z({baseTag:[],bodyAttributes:{},encodeSpecialCharacters:!0,htmlAttributes:{},linkTags:[],metaTags:[],noscriptTags:[],scriptTags:[],styleTags:[],title:"",titleAttributes:{}}))},$=o.createContext({}),q=i().shape({setHelmet:i().func,helmetInstances:i().shape({get:i().func,add:i().func,remove:i().func})}),H="undefined"!=typeof document,G=function(e){function t(n){var o;return(o=e.call(this,n)||this).helmetData=new U(o.props.context,t.canUseDOM),o}return m(t,e),t.prototype.render=function(){return o.createElement($.Provider,{value:this.helmetData.value},this.props.children)},t}(o.Component);G.canUseDOM=H,G.propTypes={context:i().shape({helmet:i().shape()}),children:i().node.isRequired},G.defaultProps={context:{}},G.displayName="HelmetProvider";var Z=function(e,t){var n,o=document.head||document.querySelector(h.HEAD),r=o.querySelectorAll(e+"[data-rh]"),i=[].slice.call(r),a=[];return t&&t.length&&t.forEach((function(t){var o=document.createElement(e);for(var r in t)Object.prototype.hasOwnProperty.call(t,r)&&("innerHTML"===r?o.innerHTML=t.innerHTML:"cssText"===r?o.styleSheet?o.styleSheet.cssText=t.cssText:o.appendChild(document.createTextNode(t.cssText)):o.setAttribute(r,void 0===t[r]?"":t[r]));o.setAttribute("data-rh","true"),i.some((function(e,t){return n=t,o.isEqualNode(e)}))?i.splice(n,1):a.push(o)})),i.forEach((function(e){return e.parentNode.removeChild(e)})),a.forEach((function(e){return o.appendChild(e)})),{oldTags:i,newTags:a}},V=function(e,t){var n=document.getElementsByTagName(e)[0];if(n){for(var o=n.getAttribute("data-rh"),r=o?o.split(","):[],i=[].concat(r),a=Object.keys(t),s=0;s<a.length;s+=1){var c=a[s],d=t[c]||"";n.getAttribute(c)!==d&&n.setAttribute(c,d),-1===r.indexOf(c)&&r.push(c);var l=i.indexOf(c);-1!==l&&i.splice(l,1)}for(var u=i.length-1;u>=0;u-=1)n.removeAttribute(i[u]);r.length===i.length?n.removeAttribute("data-rh"):n.getAttribute("data-rh")!==a.join(",")&&n.setAttribute("data-rh",a.join(","))}},W=function(e,t){var n=e.baseTag,o=e.htmlAttributes,r=e.linkTags,i=e.metaTags,a=e.noscriptTags,s=e.onChangeClientState,c=e.scriptTags,d=e.styleTags,l=e.title,u=e.titleAttributes;V(h.BODY,e.bodyAttributes),V(h.HTML,o),function(e,t){void 0!==e&&document.title!==e&&(document.title=L(e)),V(h.TITLE,t)}(l,u);var p={baseTag:Z(h.BASE,n),linkTags:Z(h.LINK,r),metaTags:Z(h.META,i),noscriptTags:Z(h.NOSCRIPT,a),scriptTags:Z(h.SCRIPT,c),styleTags:Z(h.STYLE,d)},m={},f={};Object.keys(p).forEach((function(e){var t=p[e],n=t.newTags,o=t.oldTags;n.length&&(m[e]=n),o.length&&(f[e]=p[e].oldTags)})),t&&t(),s(e,m,f)},K=null,Y=function(e){function t(){for(var t,n=arguments.length,o=new Array(n),r=0;r<n;r++)o[r]=arguments[r];return(t=e.call.apply(e,[this].concat(o))||this).rendered=!1,t}m(t,e);var n=t.prototype;return n.shouldComponentUpdate=function(e){return!u()(e,this.props)},n.componentDidUpdate=function(){this.emitChange()},n.componentWillUnmount=function(){this.props.context.helmetInstances.remove(this),this.emitChange()},n.emitChange=function(){var e,t,n=this.props.context,o=n.setHelmet,r=null,i=(e=n.helmetInstances.get().map((function(e){var t=p({},e.props);return delete t.context,t})),{baseTag:T(["href"],e),bodyAttributes:C("bodyAttributes",e),defer:S(e,"defer"),encode:S(e,"encodeSpecialCharacters"),htmlAttributes:C("htmlAttributes",e),linkTags:P(h.LINK,["rel","href"],e),metaTags:P(h.META,["name","charset","http-equiv","property","itemprop"],e),noscriptTags:P(h.NOSCRIPT,["innerHTML"],e),onChangeClientState:E(e),scriptTags:P(h.SCRIPT,["src","innerHTML"],e),styleTags:P(h.STYLE,["cssText"],e),title:x(e),titleAttributes:C("titleAttributes",e),prioritizeSeoTags:A(e,"prioritizeSeoTags")});G.canUseDOM?(t=i,K&&cancelAnimationFrame(K),t.defer?K=requestAnimationFrame((function(){W(t,(function(){K=null}))})):(W(t),K=null)):z&&(r=z(i)),o(r)},n.init=function(){this.rendered||(this.rendered=!0,this.props.context.helmetInstances.add(this),this.emitChange())},n.render=function(){return this.init(),null},t}(o.Component);Y.propTypes={context:q.isRequired},Y.displayName="HelmetDispatcher";var Q=["children"],X=["children"],J=function(e){function t(){return e.apply(this,arguments)||this}m(t,e);var n=t.prototype;return n.shouldComponentUpdate=function(e){return!s()(N(this.props,"helmetData"),N(e,"helmetData"))},n.mapNestedChildrenToProps=function(e,t){if(!t)return null;switch(e.type){case h.SCRIPT:case h.NOSCRIPT:return{innerHTML:t};case h.STYLE:return{cssText:t};default:throw new Error("<"+e.type+" /> elements are self-closing and can not contain children. Refer to our API for more information.")}},n.flattenArrayTypeChildren=function(e){var t,n=e.child,o=e.arrayTypeChildren;return p({},o,((t={})[n.type]=[].concat(o[n.type]||[],[p({},e.newChildProps,this.mapNestedChildrenToProps(n,e.nestedChildren))]),t))},n.mapObjectTypeChildren=function(e){var t,n,o=e.child,r=e.newProps,i=e.newChildProps,a=e.nestedChildren;switch(o.type){case h.TITLE:return p({},r,((t={})[o.type]=a,t.titleAttributes=p({},i),t));case h.BODY:return p({},r,{bodyAttributes:p({},i)});case h.HTML:return p({},r,{htmlAttributes:p({},i)});default:return p({},r,((n={})[o.type]=p({},i),n))}},n.mapArrayTypeChildrenToProps=function(e,t){var n=p({},t);return Object.keys(e).forEach((function(t){var o;n=p({},n,((o={})[t]=e[t],o))})),n},n.warnOnInvalidChildren=function(e,t){return d()(w.some((function(t){return e.type===t})),"function"==typeof e.type?"You may be attempting to nest <Helmet> components within each other, which is not allowed. Refer to our API for more information.":"Only elements types "+w.join(", ")+" are allowed. Helmet does not support rendering <"+e.type+"> elements. Refer to our API for more information."),d()(!t||"string"==typeof t||Array.isArray(t)&&!t.some((function(e){return"string"!=typeof e})),"Helmet expects a string as a child of <"+e.type+">. Did you forget to wrap your children in braces? ( <"+e.type+">{``}</"+e.type+"> ) Refer to our API for more information."),!0},n.mapChildrenToProps=function(e,t){var n=this,r={};return o.Children.forEach(e,(function(e){if(e&&e.props){var o=e.props,i=o.children,a=b(o,Q),s=Object.keys(a).reduce((function(e,t){return e[k[t]||t]=a[t],e}),{}),c=e.type;switch("symbol"==typeof c?c=c.toString():n.warnOnInvalidChildren(e,i),c){case h.FRAGMENT:t=n.mapChildrenToProps(i,t);break;case h.LINK:case h.META:case h.NOSCRIPT:case h.SCRIPT:case h.STYLE:r=n.flattenArrayTypeChildren({child:e,arrayTypeChildren:r,newChildProps:s,nestedChildren:i});break;default:t=n.mapObjectTypeChildren({child:e,newProps:t,newChildProps:s,nestedChildren:i})}}})),this.mapArrayTypeChildrenToProps(r,t)},n.render=function(){var e=this.props,t=e.children,n=b(e,X),r=p({},n),i=n.helmetData;return t&&(r=this.mapChildrenToProps(t,r)),!i||i instanceof U||(i=new U(i.context,i.instances)),i?o.createElement(Y,p({},r,{context:i.value,helmetData:void 0})):o.createElement($.Consumer,null,(function(e){return o.createElement(Y,p({},r,{context:e}))}))},t}(o.Component);J.propTypes={base:i().object,bodyAttributes:i().object,children:i().oneOfType([i().arrayOf(i().node),i().node]),defaultTitle:i().string,defer:i().bool,encodeSpecialCharacters:i().bool,htmlAttributes:i().object,link:i().arrayOf(i().object),meta:i().arrayOf(i().object),noscript:i().arrayOf(i().object),onChangeClientState:i().func,script:i().arrayOf(i().object),style:i().arrayOf(i().object),title:i().string,titleAttributes:i().object,titleTemplate:i().string,prioritizeSeoTags:i().bool,helmetData:i().object},J.defaultProps={defer:!0,encodeSpecialCharacters:!0,prioritizeSeoTags:!1},J.displayName="Helmet"},69921:function(e,t){"use strict";var n="function"==typeof Symbol&&Symbol.for,o=n?Symbol.for("react.element"):60103,r=n?Symbol.for("react.portal"):60106,i=n?Symbol.for("react.fragment"):60107,a=n?Symbol.for("react.strict_mode"):60108,s=n?Symbol.for("react.profiler"):60114,c=n?Symbol.for("react.provider"):60109,d=n?Symbol.for("react.context"):60110,l=n?Symbol.for("react.async_mode"):60111,u=n?Symbol.for("react.concurrent_mode"):60111,p=n?Symbol.for("react.forward_ref"):60112,m=n?Symbol.for("react.suspense"):60113,f=n?Symbol.for("react.suspense_list"):60120,b=n?Symbol.for("react.memo"):60115,h=n?Symbol.for("react.lazy"):60116,v=n?Symbol.for("react.block"):60121,g=n?Symbol.for("react.fundamental"):60117,y=n?Symbol.for("react.responder"):60118,w=n?Symbol.for("react.scope"):60119;function _(e){if("object"==typeof e&&null!==e){var t=e.$$typeof;switch(t){case o:switch(e=e.type){case l:case u:case i:case s:case a:case m:return e;default:switch(e=e&&e.$$typeof){case d:case p:case h:case b:case c:return e;default:return t}}case r:return t}}}function k(e){return _(e)===u}t.AsyncMode=l,t.ConcurrentMode=u,t.ContextConsumer=d,t.ContextProvider=c,t.Element=o,t.ForwardRef=p,t.Fragment=i,t.Lazy=h,t.Memo=b,t.Portal=r,t.Profiler=s,t.StrictMode=a,t.Suspense=m,t.isAsyncMode=function(e){return k(e)||_(e)===l},t.isConcurrentMode=k,t.isContextConsumer=function(e){return _(e)===d},t.isContextProvider=function(e){return _(e)===c},t.isElement=function(e){return"object"==typeof e&&null!==e&&e.$$typeof===o},t.isForwardRef=function(e){return _(e)===p},t.isFragment=function(e){return _(e)===i},t.isLazy=function(e){return _(e)===h},t.isMemo=function(e){return _(e)===b},t.isPortal=function(e){return _(e)===r},t.isProfiler=function(e){return _(e)===s},t.isStrictMode=function(e){return _(e)===a},t.isSuspense=function(e){return _(e)===m},t.isValidElementType=function(e){return"string"==typeof e||"function"==typeof e||e===i||e===u||e===s||e===a||e===m||e===f||"object"==typeof e&&null!==e&&(e.$$typeof===h||e.$$typeof===b||e.$$typeof===c||e.$$typeof===d||e.$$typeof===p||e.$$typeof===g||e.$$typeof===y||e.$$typeof===w||e.$$typeof===v)},t.typeOf=_},59864:function(e,t,n){"use strict";e.exports=n(69921)},68356:function(e,t,n){"use strict";function o(e,t){e.prototype=Object.create(t.prototype),e.prototype.constructor=e,e.__proto__=t}function r(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function i(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function a(){return a=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var o in n)Object.prototype.hasOwnProperty.call(n,o)&&(e[o]=n[o])}return e},a.apply(this,arguments)}var s=n(67294),c=n(45697),d=[],l=[];function u(e){var t=e(),n={loading:!0,loaded:null,error:null};return n.promise=t.then((function(e){return n.loading=!1,n.loaded=e,e})).catch((function(e){throw n.loading=!1,n.error=e,e})),n}function p(e){var t={loading:!1,loaded:{},error:null},n=[];try{Object.keys(e).forEach((function(o){var r=u(e[o]);r.loading?t.loading=!0:(t.loaded[o]=r.loaded,t.error=r.error),n.push(r.promise),r.promise.then((function(e){t.loaded[o]=e})).catch((function(e){t.error=e}))}))}catch(o){t.error=o}return t.promise=Promise.all(n).then((function(e){return t.loading=!1,e})).catch((function(e){throw t.loading=!1,e})),t}function m(e,t){return s.createElement((n=e)&&n.__esModule?n.default:n,t);var n}function f(e,t){var u,p;if(!t.loading)throw new Error("react-loadable requires a `loading` component");var f=a({loader:null,loading:null,delay:200,timeout:null,render:m,webpack:null,modules:null},t),b=null;function h(){return b||(b=e(f.loader)),b.promise}return d.push(h),"function"==typeof f.webpack&&l.push((function(){if((0,f.webpack)().every((function(e){return void 0!==e&&void 0!==n.m[e]})))return h()})),p=u=function(t){function n(n){var o;return i(r(r(o=t.call(this,n)||this)),"retry",(function(){o.setState({error:null,loading:!0,timedOut:!1}),b=e(f.loader),o._loadModule()})),h(),o.state={error:b.error,pastDelay:!1,timedOut:!1,loading:b.loading,loaded:b.loaded},o}o(n,t),n.preload=function(){return h()};var a=n.prototype;return a.UNSAFE_componentWillMount=function(){this._loadModule()},a.componentDidMount=function(){this._mounted=!0},a._loadModule=function(){var e=this;if(this.context.loadable&&Array.isArray(f.modules)&&f.modules.forEach((function(t){e.context.loadable.report(t)})),b.loading){var t=function(t){e._mounted&&e.setState(t)};"number"==typeof f.delay&&(0===f.delay?this.setState({pastDelay:!0}):this._delay=setTimeout((function(){t({pastDelay:!0})}),f.delay)),"number"==typeof f.timeout&&(this._timeout=setTimeout((function(){t({timedOut:!0})}),f.timeout));var n=function(){t({error:b.error,loaded:b.loaded,loading:b.loading}),e._clearTimeouts()};b.promise.then((function(){return n(),null})).catch((function(e){return n(),null}))}},a.componentWillUnmount=function(){this._mounted=!1,this._clearTimeouts()},a._clearTimeouts=function(){clearTimeout(this._delay),clearTimeout(this._timeout)},a.render=function(){return this.state.loading||this.state.error?s.createElement(f.loading,{isLoading:this.state.loading,pastDelay:this.state.pastDelay,timedOut:this.state.timedOut,error:this.state.error,retry:this.retry}):this.state.loaded?f.render(this.state.loaded,this.props):null},n}(s.Component),i(u,"contextTypes",{loadable:c.shape({report:c.func.isRequired})}),p}function b(e){return f(u,e)}b.Map=function(e){if("function"!=typeof e.render)throw new Error("LoadableMap requires a `render(loaded, props)` function");return f(p,e)};var h=function(e){function t(){return e.apply(this,arguments)||this}o(t,e);var n=t.prototype;return n.getChildContext=function(){return{loadable:{report:this.props.report}}},n.render=function(){return s.Children.only(this.props.children)},t}(s.Component);function v(e){for(var t=[];e.length;){var n=e.pop();t.push(n())}return Promise.all(t).then((function(){if(e.length)return v(e)}))}i(h,"propTypes",{report:c.func.isRequired}),i(h,"childContextTypes",{loadable:c.shape({report:c.func.isRequired}).isRequired}),b.Capture=h,b.preloadAll=function(){return new Promise((function(e,t){v(d).then(e,t)}))},b.preloadReady=function(){return new Promise((function(e,t){v(l).then(e,e)}))},e.exports=b},18790:function(e,t,n){"use strict";n.d(t,{H:function(){return s},f:function(){return a}});var o=n(16550),r=n(83117),i=n(67294);function a(e,t,n){return void 0===n&&(n=[]),e.some((function(e){var r=e.path?(0,o.LX)(t,e):n.length?n[n.length-1].match:o.F0.computeRootMatch(t);return r&&(n.push({route:e,match:r}),e.routes&&a(e.routes,t,n)),r})),n}function s(e,t,n){return void 0===t&&(t={}),void 0===n&&(n={}),e?i.createElement(o.rs,n,e.map((function(e,n){return i.createElement(o.AW,{key:e.key||n,path:e.path,exact:e.exact,strict:e.strict,render:function(n){return e.render?e.render((0,r.Z)({},n,{},t,{route:e})):i.createElement(e.component,(0,r.Z)({},n,t,{route:e}))}})}))):null}},73727:function(e,t,n){"use strict";n.d(t,{OL:function(){return y},VK:function(){return l},rU:function(){return h}});var o=n(16550),r=n(90144),i=n(67294),a=n(99318),s=n(83117),c=n(80102),d=n(2177),l=function(e){function t(){for(var t,n=arguments.length,o=new Array(n),r=0;r<n;r++)o[r]=arguments[r];return(t=e.call.apply(e,[this].concat(o))||this).history=(0,a.lX)(t.props),t}return(0,r.Z)(t,e),t.prototype.render=function(){return i.createElement(o.F0,{history:this.history,children:this.props.children})},t}(i.Component);i.Component;var u=function(e,t){return"function"==typeof e?e(t):e},p=function(e,t){return"string"==typeof e?(0,a.ob)(e,null,null,t):e},m=function(e){return e},f=i.forwardRef;void 0===f&&(f=m);var b=f((function(e,t){var n=e.innerRef,o=e.navigate,r=e.onClick,a=(0,c.Z)(e,["innerRef","navigate","onClick"]),d=a.target,l=(0,s.Z)({},a,{onClick:function(e){try{r&&r(e)}catch(t){throw e.preventDefault(),t}e.defaultPrevented||0!==e.button||d&&"_self"!==d||function(e){return!!(e.metaKey||e.altKey||e.ctrlKey||e.shiftKey)}(e)||(e.preventDefault(),o())}});return l.ref=m!==f&&t||n,i.createElement("a",l)}));var h=f((function(e,t){var n=e.component,r=void 0===n?b:n,l=e.replace,h=e.to,v=e.innerRef,g=(0,c.Z)(e,["component","replace","to","innerRef"]);return i.createElement(o.s6.Consumer,null,(function(e){e||(0,d.Z)(!1);var n=e.history,o=p(u(h,e.location),e.location),c=o?n.createHref(o):"",b=(0,s.Z)({},g,{href:c,navigate:function(){var t=u(h,e.location),o=(0,a.Ep)(e.location)===(0,a.Ep)(p(t));(l||o?n.replace:n.push)(t)}});return m!==f?b.ref=t||v:b.innerRef=v,i.createElement(r,b)}))})),v=function(e){return e},g=i.forwardRef;void 0===g&&(g=v);var y=g((function(e,t){var n=e["aria-current"],r=void 0===n?"page":n,a=e.activeClassName,l=void 0===a?"active":a,m=e.activeStyle,f=e.className,b=e.exact,y=e.isActive,w=e.location,_=e.sensitive,k=e.strict,S=e.style,x=e.to,E=e.innerRef,C=(0,c.Z)(e,["aria-current","activeClassName","activeStyle","className","exact","isActive","location","sensitive","strict","style","to","innerRef"]);return i.createElement(o.s6.Consumer,null,(function(e){e||(0,d.Z)(!1);var n=w||e.location,a=p(u(x,n),n),c=a.pathname,T=c&&c.replace(/([.+*?=^!:${}()[\]|/\\])/g,"\\$1"),P=T?(0,o.LX)(n.pathname,{path:T,exact:b,sensitive:_,strict:k}):null,A=!!(y?y(P,n):P),L="function"==typeof f?f(A):f,R="function"==typeof S?S(A):S;A&&(L=function(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];return t.filter((function(e){return e})).join(" ")}(L,l),R=(0,s.Z)({},R,m));var N=(0,s.Z)({"aria-current":A&&r||null,className:L,style:R,to:a},C);return v!==g?N.ref=t||E:N.innerRef=E,i.createElement(h,N)}))}))},16550:function(e,t,n){"use strict";n.d(t,{AW:function(){return x},F0:function(){return y},LX:function(){return S},TH:function(){return O},k6:function(){return N},rs:function(){return L},s6:function(){return g}});var o=n(90144),r=n(67294),i=n(45697),a=n.n(i),s=n(99318),c=n(2177),d=n(83117),l=n(39658),u=n.n(l),p=(n(59864),n(80102)),m=(n(8679),1073741823),f="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:void 0!==n.g?n.g:{};var b=r.createContext||function(e,t){var n,i,s="__create-react-context-"+function(){var e="__global_unique_id__";return f[e]=(f[e]||0)+1}()+"__",c=function(e){function n(){for(var t,n,o,r=arguments.length,i=new Array(r),a=0;a<r;a++)i[a]=arguments[a];return(t=e.call.apply(e,[this].concat(i))||this).emitter=(n=t.props.value,o=[],{on:function(e){o.push(e)},off:function(e){o=o.filter((function(t){return t!==e}))},get:function(){return n},set:function(e,t){n=e,o.forEach((function(e){return e(n,t)}))}}),t}(0,o.Z)(n,e);var r=n.prototype;return r.getChildContext=function(){var e;return(e={})[s]=this.emitter,e},r.componentWillReceiveProps=function(e){if(this.props.value!==e.value){var n,o=this.props.value,r=e.value;((i=o)===(a=r)?0!==i||1/i==1/a:i!=i&&a!=a)?n=0:(n="function"==typeof t?t(o,r):m,0!==(n|=0)&&this.emitter.set(e.value,n))}var i,a},r.render=function(){return this.props.children},n}(r.Component);c.childContextTypes=((n={})[s]=a().object.isRequired,n);var d=function(t){function n(){for(var e,n=arguments.length,o=new Array(n),r=0;r<n;r++)o[r]=arguments[r];return(e=t.call.apply(t,[this].concat(o))||this).observedBits=void 0,e.state={value:e.getValue()},e.onUpdate=function(t,n){0!=((0|e.observedBits)&n)&&e.setState({value:e.getValue()})},e}(0,o.Z)(n,t);var r=n.prototype;return r.componentWillReceiveProps=function(e){var t=e.observedBits;this.observedBits=null==t?m:t},r.componentDidMount=function(){this.context[s]&&this.context[s].on(this.onUpdate);var e=this.props.observedBits;this.observedBits=null==e?m:e},r.componentWillUnmount=function(){this.context[s]&&this.context[s].off(this.onUpdate)},r.getValue=function(){return this.context[s]?this.context[s].get():e},r.render=function(){return(e=this.props.children,Array.isArray(e)?e[0]:e)(this.state.value);var e},n}(r.Component);return d.contextTypes=((i={})[s]=a().object,i),{Provider:c,Consumer:d}},h=function(e){var t=b();return t.displayName=e,t},v=h("Router-History"),g=h("Router"),y=function(e){function t(t){var n;return(n=e.call(this,t)||this).state={location:t.history.location},n._isMounted=!1,n._pendingLocation=null,t.staticContext||(n.unlisten=t.history.listen((function(e){n._pendingLocation=e}))),n}(0,o.Z)(t,e),t.computeRootMatch=function(e){return{path:"/",url:"/",params:{},isExact:"/"===e}};var n=t.prototype;return n.componentDidMount=function(){var e=this;this._isMounted=!0,this.unlisten&&this.unlisten(),this.props.staticContext||(this.unlisten=this.props.history.listen((function(t){e._isMounted&&e.setState({location:t})}))),this._pendingLocation&&this.setState({location:this._pendingLocation})},n.componentWillUnmount=function(){this.unlisten&&(this.unlisten(),this._isMounted=!1,this._pendingLocation=null)},n.render=function(){return r.createElement(g.Provider,{value:{history:this.props.history,location:this.state.location,match:t.computeRootMatch(this.state.location.pathname),staticContext:this.props.staticContext}},r.createElement(v.Provider,{children:this.props.children||null,value:this.props.history}))},t}(r.Component);r.Component;r.Component;var w={},_=1e4,k=0;function S(e,t){void 0===t&&(t={}),("string"==typeof t||Array.isArray(t))&&(t={path:t});var n=t,o=n.path,r=n.exact,i=void 0!==r&&r,a=n.strict,s=void 0!==a&&a,c=n.sensitive,d=void 0!==c&&c;return[].concat(o).reduce((function(t,n){if(!n&&""!==n)return null;if(t)return t;var o=function(e,t){var n=""+t.end+t.strict+t.sensitive,o=w[n]||(w[n]={});if(o[e])return o[e];var r=[],i={regexp:u()(e,r,t),keys:r};return k<_&&(o[e]=i,k++),i}(n,{end:i,strict:s,sensitive:d}),r=o.regexp,a=o.keys,c=r.exec(e);if(!c)return null;var l=c[0],p=c.slice(1),m=e===l;return i&&!m?null:{path:n,url:"/"===n&&""===l?"/":l,isExact:m,params:a.reduce((function(e,t,n){return e[t.name]=p[n],e}),{})}}),null)}var x=function(e){function t(){return e.apply(this,arguments)||this}return(0,o.Z)(t,e),t.prototype.render=function(){var e=this;return r.createElement(g.Consumer,null,(function(t){t||(0,c.Z)(!1);var n=e.props.location||t.location,o=e.props.computedMatch?e.props.computedMatch:e.props.path?S(n.pathname,e.props):t.match,i=(0,d.Z)({},t,{location:n,match:o}),a=e.props,s=a.children,l=a.component,u=a.render;return Array.isArray(s)&&function(e){return 0===r.Children.count(e)}(s)&&(s=null),r.createElement(g.Provider,{value:i},i.match?s?"function"==typeof s?s(i):s:l?r.createElement(l,i):u?u(i):null:"function"==typeof s?s(i):null)}))},t}(r.Component);function E(e){return"/"===e.charAt(0)?e:"/"+e}function C(e,t){if(!e)return t;var n=E(e);return 0!==t.pathname.indexOf(n)?t:(0,d.Z)({},t,{pathname:t.pathname.substr(n.length)})}function T(e){return"string"==typeof e?e:(0,s.Ep)(e)}function P(e){return function(){(0,c.Z)(!1)}}function A(){}r.Component;var L=function(e){function t(){return e.apply(this,arguments)||this}return(0,o.Z)(t,e),t.prototype.render=function(){var e=this;return r.createElement(g.Consumer,null,(function(t){t||(0,c.Z)(!1);var n,o,i=e.props.location||t.location;return r.Children.forEach(e.props.children,(function(e){if(null==o&&r.isValidElement(e)){n=e;var a=e.props.path||e.props.from;o=a?S(i.pathname,(0,d.Z)({},e.props,{path:a})):t.match}})),o?r.cloneElement(n,{location:i,computedMatch:o}):null}))},t}(r.Component);var R=r.useContext;function N(){return R(v)}function O(){return R(g).location}},39658:function(e,t,n){var o=n(5826);e.exports=m,e.exports.parse=i,e.exports.compile=function(e,t){return s(i(e,t),t)},e.exports.tokensToFunction=s,e.exports.tokensToRegExp=p;var r=new RegExp(["(\\\\.)","([\\/.])?(?:(?:\\:(\\w+)(?:\\(((?:\\\\.|[^\\\\()])+)\\))?|\\(((?:\\\\.|[^\\\\()])+)\\))([+*?])?|(\\*))"].join("|"),"g");function i(e,t){for(var n,o=[],i=0,a=0,s="",l=t&&t.delimiter||"/";null!=(n=r.exec(e));){var u=n[0],p=n[1],m=n.index;if(s+=e.slice(a,m),a=m+u.length,p)s+=p[1];else{var f=e[a],b=n[2],h=n[3],v=n[4],g=n[5],y=n[6],w=n[7];s&&(o.push(s),s="");var _=null!=b&&null!=f&&f!==b,k="+"===y||"*"===y,S="?"===y||"*"===y,x=n[2]||l,E=v||g;o.push({name:h||i++,prefix:b||"",delimiter:x,optional:S,repeat:k,partial:_,asterisk:!!w,pattern:E?d(E):w?".*":"[^"+c(x)+"]+?"})}}return a<e.length&&(s+=e.substr(a)),s&&o.push(s),o}function a(e){return encodeURI(e).replace(/[\/?#]/g,(function(e){return"%"+e.charCodeAt(0).toString(16).toUpperCase()}))}function s(e,t){for(var n=new Array(e.length),r=0;r<e.length;r++)"object"==typeof e[r]&&(n[r]=new RegExp("^(?:"+e[r].pattern+")$",u(t)));return function(t,r){for(var i="",s=t||{},c=(r||{}).pretty?a:encodeURIComponent,d=0;d<e.length;d++){var l=e[d];if("string"!=typeof l){var u,p=s[l.name];if(null==p){if(l.optional){l.partial&&(i+=l.prefix);continue}throw new TypeError('Expected "'+l.name+'" to be defined')}if(o(p)){if(!l.repeat)throw new TypeError('Expected "'+l.name+'" to not repeat, but received `'+JSON.stringify(p)+"`");if(0===p.length){if(l.optional)continue;throw new TypeError('Expected "'+l.name+'" to not be empty')}for(var m=0;m<p.length;m++){if(u=c(p[m]),!n[d].test(u))throw new TypeError('Expected all "'+l.name+'" to match "'+l.pattern+'", but received `'+JSON.stringify(u)+"`");i+=(0===m?l.prefix:l.delimiter)+u}}else{if(u=l.asterisk?encodeURI(p).replace(/[?#]/g,(function(e){return"%"+e.charCodeAt(0).toString(16).toUpperCase()})):c(p),!n[d].test(u))throw new TypeError('Expected "'+l.name+'" to match "'+l.pattern+'", but received "'+u+'"');i+=l.prefix+u}}else i+=l}return i}}function c(e){return e.replace(/([.+*?=^!:${}()[\]|\/\\])/g,"\\$1")}function d(e){return e.replace(/([=!:$\/()])/g,"\\$1")}function l(e,t){return e.keys=t,e}function u(e){return e&&e.sensitive?"":"i"}function p(e,t,n){o(t)||(n=t||n,t=[]);for(var r=(n=n||{}).strict,i=!1!==n.end,a="",s=0;s<e.length;s++){var d=e[s];if("string"==typeof d)a+=c(d);else{var p=c(d.prefix),m="(?:"+d.pattern+")";t.push(d),d.repeat&&(m+="(?:"+p+m+")*"),a+=m=d.optional?d.partial?p+"("+m+")?":"(?:"+p+"("+m+"))?":p+"("+m+")"}}var f=c(n.delimiter||"/"),b=a.slice(-f.length)===f;return r||(a=(b?a.slice(0,-f.length):a)+"(?:"+f+"(?=$))?"),a+=i?"$":r&&b?"":"(?="+f+"|$)",l(new RegExp("^"+a,u(n)),t)}function m(e,t,n){return o(t)||(n=t||n,t=[]),n=n||{},e instanceof RegExp?function(e,t){var n=e.source.match(/\((?!\?)/g);if(n)for(var o=0;o<n.length;o++)t.push({name:o,prefix:null,delimiter:null,optional:!1,repeat:!1,partial:!1,asterisk:!1,pattern:null});return l(e,t)}(e,t):o(e)?function(e,t,n){for(var o=[],r=0;r<e.length;r++)o.push(m(e[r],t,n).source);return l(new RegExp("(?:"+o.join("|")+")",u(n)),t)}(e,t,n):function(e,t,n){return p(i(e,n),t,n)}(e,t,n)}},72408:function(e,t,n){"use strict";var o=n(27418),r=60103,i=60106;t.Fragment=60107,t.StrictMode=60108,t.Profiler=60114;var a=60109,s=60110,c=60112;t.Suspense=60113;var d=60115,l=60116;if("function"==typeof Symbol&&Symbol.for){var u=Symbol.for;r=u("react.element"),i=u("react.portal"),t.Fragment=u("react.fragment"),t.StrictMode=u("react.strict_mode"),t.Profiler=u("react.profiler"),a=u("react.provider"),s=u("react.context"),c=u("react.forward_ref"),t.Suspense=u("react.suspense"),d=u("react.memo"),l=u("react.lazy")}var p="function"==typeof Symbol&&Symbol.iterator;function m(e){for(var t="https://reactjs.org/docs/error-decoder.html?invariant="+e,n=1;n<arguments.length;n++)t+="&args[]="+encodeURIComponent(arguments[n]);return"Minified React error #"+e+"; visit "+t+" for the full message or use the non-minified dev environment for full errors and additional helpful warnings."}var f={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},b={};function h(e,t,n){this.props=e,this.context=t,this.refs=b,this.updater=n||f}function v(){}function g(e,t,n){this.props=e,this.context=t,this.refs=b,this.updater=n||f}h.prototype.isReactComponent={},h.prototype.setState=function(e,t){if("object"!=typeof e&&"function"!=typeof e&&null!=e)throw Error(m(85));this.updater.enqueueSetState(this,e,t,"setState")},h.prototype.forceUpdate=function(e){this.updater.enqueueForceUpdate(this,e,"forceUpdate")},v.prototype=h.prototype;var y=g.prototype=new v;y.constructor=g,o(y,h.prototype),y.isPureReactComponent=!0;var w={current:null},_=Object.prototype.hasOwnProperty,k={key:!0,ref:!0,__self:!0,__source:!0};function S(e,t,n){var o,i={},a=null,s=null;if(null!=t)for(o in void 0!==t.ref&&(s=t.ref),void 0!==t.key&&(a=""+t.key),t)_.call(t,o)&&!k.hasOwnProperty(o)&&(i[o]=t[o]);var c=arguments.length-2;if(1===c)i.children=n;else if(1<c){for(var d=Array(c),l=0;l<c;l++)d[l]=arguments[l+2];i.children=d}if(e&&e.defaultProps)for(o in c=e.defaultProps)void 0===i[o]&&(i[o]=c[o]);return{$$typeof:r,type:e,key:a,ref:s,props:i,_owner:w.current}}function x(e){return"object"==typeof e&&null!==e&&e.$$typeof===r}var E=/\/+/g;function C(e,t){return"object"==typeof e&&null!==e&&null!=e.key?function(e){var t={"=":"=0",":":"=2"};return"$"+e.replace(/[=:]/g,(function(e){return t[e]}))}(""+e.key):t.toString(36)}function T(e,t,n,o,a){var s=typeof e;"undefined"!==s&&"boolean"!==s||(e=null);var c=!1;if(null===e)c=!0;else switch(s){case"string":case"number":c=!0;break;case"object":switch(e.$$typeof){case r:case i:c=!0}}if(c)return a=a(c=e),e=""===o?"."+C(c,0):o,Array.isArray(a)?(n="",null!=e&&(n=e.replace(E,"$&/")+"/"),T(a,t,n,"",(function(e){return e}))):null!=a&&(x(a)&&(a=function(e,t){return{$$typeof:r,type:e.type,key:t,ref:e.ref,props:e.props,_owner:e._owner}}(a,n+(!a.key||c&&c.key===a.key?"":(""+a.key).replace(E,"$&/")+"/")+e)),t.push(a)),1;if(c=0,o=""===o?".":o+":",Array.isArray(e))for(var d=0;d<e.length;d++){var l=o+C(s=e[d],d);c+=T(s,t,n,l,a)}else if(l=function(e){return null===e||"object"!=typeof e?null:"function"==typeof(e=p&&e[p]||e["@@iterator"])?e:null}(e),"function"==typeof l)for(e=l.call(e),d=0;!(s=e.next()).done;)c+=T(s=s.value,t,n,l=o+C(s,d++),a);else if("object"===s)throw t=""+e,Error(m(31,"[object Object]"===t?"object with keys {"+Object.keys(e).join(", ")+"}":t));return c}function P(e,t,n){if(null==e)return e;var o=[],r=0;return T(e,o,"","",(function(e){return t.call(n,e,r++)})),o}function A(e){if(-1===e._status){var t=e._result;t=t(),e._status=0,e._result=t,t.then((function(t){0===e._status&&(t=t.default,e._status=1,e._result=t)}),(function(t){0===e._status&&(e._status=2,e._result=t)}))}if(1===e._status)return e._result;throw e._result}var L={current:null};function R(){var e=L.current;if(null===e)throw Error(m(321));return e}var N={ReactCurrentDispatcher:L,ReactCurrentBatchConfig:{transition:0},ReactCurrentOwner:w,IsSomeRendererActing:{current:!1},assign:o};t.Children={map:P,forEach:function(e,t,n){P(e,(function(){t.apply(this,arguments)}),n)},count:function(e){var t=0;return P(e,(function(){t++})),t},toArray:function(e){return P(e,(function(e){return e}))||[]},only:function(e){if(!x(e))throw Error(m(143));return e}},t.Component=h,t.PureComponent=g,t.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED=N,t.cloneElement=function(e,t,n){if(null==e)throw Error(m(267,e));var i=o({},e.props),a=e.key,s=e.ref,c=e._owner;if(null!=t){if(void 0!==t.ref&&(s=t.ref,c=w.current),void 0!==t.key&&(a=""+t.key),e.type&&e.type.defaultProps)var d=e.type.defaultProps;for(l in t)_.call(t,l)&&!k.hasOwnProperty(l)&&(i[l]=void 0===t[l]&&void 0!==d?d[l]:t[l])}var l=arguments.length-2;if(1===l)i.children=n;else if(1<l){d=Array(l);for(var u=0;u<l;u++)d[u]=arguments[u+2];i.children=d}return{$$typeof:r,type:e.type,key:a,ref:s,props:i,_owner:c}},t.createContext=function(e,t){return void 0===t&&(t=null),(e={$$typeof:s,_calculateChangedBits:t,_currentValue:e,_currentValue2:e,_threadCount:0,Provider:null,Consumer:null}).Provider={$$typeof:a,_context:e},e.Consumer=e},t.createElement=S,t.createFactory=function(e){var t=S.bind(null,e);return t.type=e,t},t.createRef=function(){return{current:null}},t.forwardRef=function(e){return{$$typeof:c,render:e}},t.isValidElement=x,t.lazy=function(e){return{$$typeof:l,_payload:{_status:-1,_result:e},_init:A}},t.memo=function(e,t){return{$$typeof:d,type:e,compare:void 0===t?null:t}},t.useCallback=function(e,t){return R().useCallback(e,t)},t.useContext=function(e,t){return R().useContext(e,t)},t.useDebugValue=function(){},t.useEffect=function(e,t){return R().useEffect(e,t)},t.useImperativeHandle=function(e,t,n){return R().useImperativeHandle(e,t,n)},t.useLayoutEffect=function(e,t){return R().useLayoutEffect(e,t)},t.useMemo=function(e,t){return R().useMemo(e,t)},t.useReducer=function(e,t,n){return R().useReducer(e,t,n)},t.useRef=function(e){return R().useRef(e)},t.useState=function(e){return R().useState(e)},t.version="17.0.2"},67294:function(e,t,n){"use strict";e.exports=n(72408)},60053:function(e,t){"use strict";var n,o,r,i;if("object"==typeof performance&&"function"==typeof performance.now){var a=performance;t.unstable_now=function(){return a.now()}}else{var s=Date,c=s.now();t.unstable_now=function(){return s.now()-c}}if("undefined"==typeof window||"function"!=typeof MessageChannel){var d=null,l=null,u=function(){if(null!==d)try{var e=t.unstable_now();d(!0,e),d=null}catch(n){throw setTimeout(u,0),n}};n=function(e){null!==d?setTimeout(n,0,e):(d=e,setTimeout(u,0))},o=function(e,t){l=setTimeout(e,t)},r=function(){clearTimeout(l)},t.unstable_shouldYield=function(){return!1},i=t.unstable_forceFrameRate=function(){}}else{var p=window.setTimeout,m=window.clearTimeout;if("undefined"!=typeof console){var f=window.cancelAnimationFrame;"function"!=typeof window.requestAnimationFrame&&console.error("This browser doesn't support requestAnimationFrame. Make sure that you load a polyfill in older browsers. https://reactjs.org/link/react-polyfills"),"function"!=typeof f&&console.error("This browser doesn't support cancelAnimationFrame. Make sure that you load a polyfill in older browsers. https://reactjs.org/link/react-polyfills")}var b=!1,h=null,v=-1,g=5,y=0;t.unstable_shouldYield=function(){return t.unstable_now()>=y},i=function(){},t.unstable_forceFrameRate=function(e){0>e||125<e?console.error("forceFrameRate takes a positive int between 0 and 125, forcing frame rates higher than 125 fps is not supported"):g=0<e?Math.floor(1e3/e):5};var w=new MessageChannel,_=w.port2;w.port1.onmessage=function(){if(null!==h){var e=t.unstable_now();y=e+g;try{h(!0,e)?_.postMessage(null):(b=!1,h=null)}catch(n){throw _.postMessage(null),n}}else b=!1},n=function(e){h=e,b||(b=!0,_.postMessage(null))},o=function(e,n){v=p((function(){e(t.unstable_now())}),n)},r=function(){m(v),v=-1}}function k(e,t){var n=e.length;e.push(t);e:for(;;){var o=n-1>>>1,r=e[o];if(!(void 0!==r&&0<E(r,t)))break e;e[o]=t,e[n]=r,n=o}}function S(e){return void 0===(e=e[0])?null:e}function x(e){var t=e[0];if(void 0!==t){var n=e.pop();if(n!==t){e[0]=n;e:for(var o=0,r=e.length;o<r;){var i=2*(o+1)-1,a=e[i],s=i+1,c=e[s];if(void 0!==a&&0>E(a,n))void 0!==c&&0>E(c,a)?(e[o]=c,e[s]=n,o=s):(e[o]=a,e[i]=n,o=i);else{if(!(void 0!==c&&0>E(c,n)))break e;e[o]=c,e[s]=n,o=s}}}return t}return null}function E(e,t){var n=e.sortIndex-t.sortIndex;return 0!==n?n:e.id-t.id}var C=[],T=[],P=1,A=null,L=3,R=!1,N=!1,O=!1;function I(e){for(var t=S(T);null!==t;){if(null===t.callback)x(T);else{if(!(t.startTime<=e))break;x(T),t.sortIndex=t.expirationTime,k(C,t)}t=S(T)}}function D(e){if(O=!1,I(e),!N)if(null!==S(C))N=!0,n(M);else{var t=S(T);null!==t&&o(D,t.startTime-e)}}function M(e,n){N=!1,O&&(O=!1,r()),R=!0;var i=L;try{for(I(n),A=S(C);null!==A&&(!(A.expirationTime>n)||e&&!t.unstable_shouldYield());){var a=A.callback;if("function"==typeof a){A.callback=null,L=A.priorityLevel;var s=a(A.expirationTime<=n);n=t.unstable_now(),"function"==typeof s?A.callback=s:A===S(C)&&x(C),I(n)}else x(C);A=S(C)}if(null!==A)var c=!0;else{var d=S(T);null!==d&&o(D,d.startTime-n),c=!1}return c}finally{A=null,L=i,R=!1}}var B=i;t.unstable_IdlePriority=5,t.unstable_ImmediatePriority=1,t.unstable_LowPriority=4,t.unstable_NormalPriority=3,t.unstable_Profiling=null,t.unstable_UserBlockingPriority=2,t.unstable_cancelCallback=function(e){e.callback=null},t.unstable_continueExecution=function(){N||R||(N=!0,n(M))},t.unstable_getCurrentPriorityLevel=function(){return L},t.unstable_getFirstCallbackNode=function(){return S(C)},t.unstable_next=function(e){switch(L){case 1:case 2:case 3:var t=3;break;default:t=L}var n=L;L=t;try{return e()}finally{L=n}},t.unstable_pauseExecution=function(){},t.unstable_requestPaint=B,t.unstable_runWithPriority=function(e,t){switch(e){case 1:case 2:case 3:case 4:case 5:break;default:e=3}var n=L;L=e;try{return t()}finally{L=n}},t.unstable_scheduleCallback=function(e,i,a){var s=t.unstable_now();switch("object"==typeof a&&null!==a?a="number"==typeof(a=a.delay)&&0<a?s+a:s:a=s,e){case 1:var c=-1;break;case 2:c=250;break;case 5:c=1073741823;break;case 4:c=1e4;break;default:c=5e3}return e={id:P++,callback:i,priorityLevel:e,startTime:a,expirationTime:c=a+c,sortIndex:-1},a>s?(e.sortIndex=a,k(T,e),null===S(C)&&e===S(T)&&(O?r():O=!0,o(D,a-s))):(e.sortIndex=c,k(C,e),N||R||(N=!0,n(M))),e},t.unstable_wrapCallback=function(e){var t=L;return function(){var n=L;L=t;try{return e.apply(this,arguments)}finally{L=n}}}},63840:function(e,t,n){"use strict";e.exports=n(60053)},96774:function(e){e.exports=function(e,t,n,o){var r=n?n.call(o,e,t):void 0;if(void 0!==r)return!!r;if(e===t)return!0;if("object"!=typeof e||!e||"object"!=typeof t||!t)return!1;var i=Object.keys(e),a=Object.keys(t);if(i.length!==a.length)return!1;for(var s=Object.prototype.hasOwnProperty.bind(t),c=0;c<i.length;c++){var d=i[c];if(!s(d))return!1;var l=e[d],u=t[d];if(!1===(r=n?n.call(o,l,u,d):void 0)||void 0===r&&l!==u)return!1}return!0}},2177:function(e,t,n){"use strict";n.d(t,{Z:function(){return i}});var o=!0,r="Invariant failed";function i(e,t){if(!e){if(o)throw new Error(r);var n="function"==typeof t?t():t;throw new Error(n?r+": "+n:r)}}},53250:function(e,t,n){"use strict";var o=n(67294);var r="function"==typeof Object.is?Object.is:function(e,t){return e===t&&(0!==e||1/e==1/t)||e!=e&&t!=t},i=o.useState,a=o.useEffect,s=o.useLayoutEffect,c=o.useDebugValue;function d(e){var t=e.getSnapshot;e=e.value;try{var n=t();return!r(e,n)}catch(o){return!0}}var l="undefined"==typeof window||void 0===window.document||void 0===window.document.createElement?function(e,t){return t()}:function(e,t){var n=t(),o=i({inst:{value:n,getSnapshot:t}}),r=o[0].inst,l=o[1];return s((function(){r.value=n,r.getSnapshot=t,d(r)&&l({inst:r})}),[e,n,t]),a((function(){return d(r)&&l({inst:r}),e((function(){d(r)&&l({inst:r})}))}),[e]),c(n),n};void 0!==o.useSyncExternalStore&&o.useSyncExternalStore},61688:function(e,t,n){"use strict";n(53250)},36809:function(e,t,n){"use strict";n.r(t),t.default={title:"Apache BookKeeper",url:"https://bookkeeper.apache.org",baseUrl:"/",onBrokenLinks:"throw",onBrokenMarkdownLinks:"warn",favicon:"img/favicon.ico",organizationName:"apache",projectName:"bookkeeper",plugins:["docusaurus-plugin-sass"],presets:[["classic",{docs:{sidebarPath:"/home/runner/work/bookkeeper/bookkeeper/site3/website/sidebars.json",breadcrumbs:!1},blog:{showReadingTime:!0},theme:{customCss:"/home/runner/work/bookkeeper/bookkeeper/site3/website/src/sass/index.scss"}}]],themeConfig:{navbar:{title:"Apache BookKeeper",logo:{alt:"Apache Bookkeeper",src:"img/bk-logo.svg"},items:[{type:"doc",docId:"overview/overview",position:"left",label:"Documentation"},{position:"left",label:"Community",items:[{label:"Mailing lists",to:"community/mailing-lists"},{label:"Slack",to:"community/slack"},{label:"Github issues",href:"https://github.com/apache/bookkeeper/issues"},{label:"Release management",to:"community/releases"},{label:"Community meetings",to:"community/meeting"},{label:"Contribution guide",to:"community/contributing"},{label:"Coding guide",to:"community/coding-guide"},{label:"Testing guide",to:"community/testing"},{label:"Issue report guide",to:"community/issue-report"},{label:"Release guide",to:"community/release-guide"},{label:"Presentations",to:"community/presentations"},{label:"BookKeeper proposals (BP)",to:"community/bookkeeper-proposals"}]},{position:"left",label:"Project",items:[{label:"Who are we?",to:"project/who"},{label:"Bylaws",to:"project/bylaws"},{label:"License",href:"https://apache.org/licenses"},{label:"Privacy policy",to:"project/privacy"},{label:"Sponsorship",href:"https://www.apache.org/foundation/sponsorship.html"},{label:"Thanks",href:"https://www.apache.org/foundation/thanks.html"}]},{type:"docsVersionDropdown",position:"right",dropdownItemsBefore:[],dropdownItemsAfter:[]},{to:"releases",label:"Download",position:"right"}],hideOnScroll:!1},footer:{style:"dark",copyright:'<footer class="footer">\n        <div class="container">\n          <div class="content has-text-centered">\n            <p>\n              Copyright &copy; 2016 - 2024 <a href="https://www.apache.org/">The Apache Software Foundation</a>,<br /> licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, version 2.0</a>.\n            </p>\n            <p>\n              Apache BookKeeper, BookKeeper\xae, Apache\xae, the Apache feature logo, and the Apache BookKeeper logo are either registered trademarks or trademarks of The Apache Software Foundation.\n            </p>\n          </div>\n        </div>\n      </footer>\n      ',links:[{title:"Documentation",items:[{label:"Overview",to:"docs/overview"},{label:"Getting started",to:"docs/getting-started/installation"},{label:"Deployment",to:"docs/deployment/manual"},{label:"Administration",to:"docs/admin/bookies"},{label:"API",to:"docs/api/overview"},{label:"Security",to:"docs/security/overview"},{label:"Development",to:"docs/development/protocol"},{label:"Reference",to:"docs/reference/config"}]},{title:"Community",items:[{label:"Mailing lists",to:"community/mailing-lists"},{label:"Slack",to:"community/slack"},{label:"Github",href:"https://github.com/apache/bookkeeper"},{label:"Twitter",href:"https://twitter.com/asfbookkeeper"}]},{title:"Project",items:[{label:"Who are we?",to:"project/who"},{label:"Bylaws",to:"project/bylaws"},{label:"License",href:"https://apache.org/licenses"},{label:"Privacy policy",to:"project/privacy"},{label:"Sponsorship",href:"https://www.apache.org/foundation/sponsorship.html"},{label:"Thanks",href:"https://www.apache.org/foundation/thanks.html"}]}]},prism:{theme:{plain:{color:"#393A34",backgroundColor:"#f6f8fa"},styles:[{types:["comment","prolog","doctype","cdata"],style:{color:"#999988",fontStyle:"italic"}},{types:["namespace"],style:{opacity:.7}},{types:["string","attr-value"],style:{color:"#e3116c"}},{types:["punctuation","operator"],style:{color:"#393A34"}},{types:["entity","url","symbol","number","boolean","variable","constant","property","regex","inserted"],style:{color:"#36acaa"}},{types:["atrule","keyword","attr-name","selector"],style:{color:"#00a4db"}},{types:["function","deleted","tag"],style:{color:"#d73a49"}},{types:["function-variable"],style:{color:"#6f42c1"}},{types:["tag","selector","keyword"],style:{color:"#00009f"}}]},darkTheme:{plain:{color:"#F8F8F2",backgroundColor:"#282A36"},styles:[{types:["prolog","constant","builtin"],style:{color:"rgb(189, 147, 249)"}},{types:["inserted","function"],style:{color:"rgb(80, 250, 123)"}},{types:["deleted"],style:{color:"rgb(255, 85, 85)"}},{types:["changed"],style:{color:"rgb(255, 184, 108)"}},{types:["punctuation","symbol"],style:{color:"rgb(248, 248, 242)"}},{types:["string","char","tag","selector"],style:{color:"rgb(255, 121, 198)"}},{types:["keyword","variable"],style:{color:"rgb(189, 147, 249)",fontStyle:"italic"}},{types:["comment"],style:{color:"rgb(98, 114, 164)"}},{types:["attr-name"],style:{color:"rgb(241, 250, 140)"}}]},additionalLanguages:[],magicComments:[{className:"theme-code-block-highlighted-line",line:"highlight-next-line",block:{start:"highlight-start",end:"highlight-end"}}]},colorMode:{defaultMode:"light",disableSwitch:!1,respectPrefersColorScheme:!1},docs:{versionPersistence:"localStorage",sidebar:{hideable:!1,autoCollapseCategories:!1}},metadata:[],tableOfContents:{minHeadingLevel:2,maxHeadingLevel:3}},customFields:{latest_release:"4.16.4",stable_release:"4.14.8",github_repo:"https://github.com/apache/bookkeeper",github_master:"https://github.com/apache/bookkeeper/tree/master",mirror_base_url:"https://www.apache.org/dyn/closer.lua/bookkeeper",dist_base_url:"https://www.apache.org/dist/bookkeeper",javadoc_base_url:"https://bookkeeper.apache.org//docs/latest/api/javadoc",archive_releases_base_url:"https://bookkeeper.apache.org//archives"},baseUrlIssueBanner:!0,i18n:{defaultLocale:"en",path:"i18n",locales:["en"],localeConfigs:{}},onDuplicateRoutes:"warn",staticDirectories:["static"],themes:[],scripts:[],headTags:[],stylesheets:[],clientModules:[],tagline:"",titleDelimiter:"|",noIndex:!1,markdown:{mermaid:!1}}},83117:function(e,t,n){"use strict";function o(){return o=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var o in n)Object.prototype.hasOwnProperty.call(n,o)&&(e[o]=n[o])}return e},o.apply(this,arguments)}n.d(t,{Z:function(){return o}})},90144:function(e,t,n){"use strict";function o(e,t){return o=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},o(e,t)}function r(e,t){e.prototype=Object.create(t.prototype),e.prototype.constructor=e,o(e,t)}n.d(t,{Z:function(){return r}})},80102:function(e,t,n){"use strict";function o(e,t){if(null==e)return{};var n,o,r={},i=Object.keys(e);for(o=0;o<i.length;o++)n=i[o],t.indexOf(n)>=0||(r[n]=e[n]);return r}n.d(t,{Z:function(){return o}})},57529:function(e){"use strict";e.exports={}},16887:function(e){"use strict";e.exports=JSON.parse('{"/bps/BP-20-github-workflow-for-bookkeeper-proposals-638":{"__comp":"1f391b9e","__context":{"plugin":"beeb3fc3"},"content":"92fa1062"},"/bps/BP-21-new-api-close-inconsistencies-6ec":{"__comp":"1f391b9e","__context":{"plugin":"beeb3fc3"},"content":"8372258a"},"/bps/BP-22-separate-closing-ledgers-from-opening-ledgers-423":{"__comp":"1f391b9e","__context":{"plugin":"beeb3fc3"},"content":"05c61b00"},"/bps/BP-25-MovingChecksumToProto-5ff":{"__comp":"1f391b9e","__context":{"plugin":"beeb3fc3"},"content":"e54bfd1f"},"/bps/BP-26-move-distributedlog-core-library-1a6":{"__comp":"1f391b9e","__context":{"plugin":"beeb3fc3"},"content":"b3c11919"},"/bps/BP-27-new-bookkeeper-cli-d9d":{"__comp":"1f391b9e","__context":{"plugin":"beeb3fc3"},"content":"7e8ff14f"},"/bps/BP-28-etcd-as-metadata-store-83f":{"__comp":"1f391b9e","__context":{"plugin":"beeb3fc3"},"content":"3f07749a"},"/bps/BP-29-metadata-store-api-module-458":{"__comp":"1f391b9e","__context":{"plugin":"beeb3fc3"},"content":"dc0ec182"},"/bps/BP-31-durability-111":{"__comp":"1f391b9e","__context":{"plugin":"beeb3fc3"},"content":"86a6f4a6"},"/bps/BP-32-advisory-write-close-711":{"__comp":"1f391b9e","__context":{"plugin":"beeb3fc3"},"content":"b800115e"},"/bps/BP-33-building-official-docker-imags-a4a":{"__comp":"1f391b9e","__context":{"plugin":"beeb3fc3"},"content":"e1e94bbc"},"/bps/BP-34-cluster-metadata-checker-0df":{"__comp":"1f391b9e","__context":{"plugin":"beeb3fc3"},"content":"62a0d553"},"/bps/BP-35-128-bits-support-afb":{"__comp":"1f391b9e","__context":{"plugin":"beeb3fc3"},"content":"137061ef"},"/bps/BP-36-stats-documentation-annotation-149":{"__comp":"1f391b9e","__context":{"plugin":"beeb3fc3"},"content":"c7f18df2"},"/bps/BP-37-conf-documentation-59e":{"__comp":"1f391b9e","__context":{"plugin":"beeb3fc3"},"content":"bf69fc30"},"/bps/BP-38-bookie-endpoint-discovery-4fa":{"__comp":"1f391b9e","__context":{"plugin":"beeb3fc3"},"content":"41168d35"},"/bps/BP-41-bookieid-999":{"__comp":"1f391b9e","__context":{"plugin":"beeb3fc3"},"content":"7f23633c"},"/bps/BP-42-new-api-list-ledgers-411":{"__comp":"1f391b9e","__context":{"plugin":"beeb3fc3"},"content":"22d76b2d"},"/bps/BP-43-gradle-migration-da1":{"__comp":"1f391b9e","__context":{"plugin":"beeb3fc3"},"content":"e39bc689"},"/bps/BP-44-use-metrics-502":{"__comp":"1f391b9e","__context":{"plugin":"beeb3fc3"},"content":"6789c389"},"/bps/BP-46-run-without-journal-15a":{"__comp":"1f391b9e","__context":{"plugin":"beeb3fc3"},"content":"3bb6078f"},"/bps/BP-62-new-API-for-batched-reads-498":{"__comp":"1f391b9e","__context":{"plugin":"beeb3fc3"},"content":"816774dc"},"/bps/BP-66-support-throttling-for-zookeeper-read-during-rereplication-2c6":{"__comp":"1f391b9e","__context":{"plugin":"beeb3fc3"},"content":"ba18db30"},"/bps/BP-template-26a":{"__comp":"1f391b9e","__context":{"plugin":"beeb3fc3"},"content":"026a1d69"},"/community/bookkeeper-proposals-dbc":{"__comp":"1f391b9e","__context":{"plugin":"beeb3fc3"},"content":"5531b81f"},"/community/coding-guide-a5f":{"__comp":"1f391b9e","__context":{"plugin":"beeb3fc3"},"content":"e2a8767f"},"/community/contributing-acc":{"__comp":"1f391b9e","__context":{"plugin":"beeb3fc3"},"content":"7c8189eb"},"/community/issue-report-2b9":{"__comp":"1f391b9e","__context":{"plugin":"beeb3fc3"},"content":"8d5383ff"},"/community/licensing-fd3":{"__comp":"1f391b9e","__context":{"plugin":"beeb3fc3"},"content":"3521ddbf"},"/community/mailing-lists-2c5":{"__comp":"1f391b9e","__context":{"plugin":"beeb3fc3"},"content":"f1c1c644"},"/community/meeting-889":{"__comp":"1f391b9e","__context":{"plugin":"beeb3fc3"},"content":"a19a348a"},"/community/presentations-c9d":{"__comp":"1f391b9e","__context":{"plugin":"beeb3fc3"},"content":"d70b4d73"},"/community/release-guide-85f":{"__comp":"1f391b9e","__context":{"plugin":"beeb3fc3"},"content":"cf9c4b04"},"/community/releases-8e0":{"__comp":"1f391b9e","__context":{"plugin":"beeb3fc3"},"content":"c90cac61"},"/community/slack-cb9":{"__comp":"1f391b9e","__context":{"plugin":"beeb3fc3"},"content":"a647d08a"},"/community/testing-656":{"__comp":"1f391b9e","__context":{"plugin":"beeb3fc3"},"content":"2d24b11b"},"/project/bylaws-894":{"__comp":"1f391b9e","__context":{"plugin":"beeb3fc3"},"content":"13a7da5f"},"/project/privacy-330":{"__comp":"1f391b9e","__context":{"plugin":"beeb3fc3"},"content":"b929e89b"},"/project/who-500":{"__comp":"1f391b9e","__context":{"plugin":"beeb3fc3"},"content":"d288ceb1"},"/release-notes-18c":{"__comp":"1f391b9e","__context":{"plugin":"beeb3fc3"},"content":"14609be1"},"/releases-aaf":{"__comp":"1f391b9e","__context":{"plugin":"beeb3fc3"},"content":"7ef71a47"},"/docs/4.10.0-c04":{"__comp":"1be78505","__context":{"plugin":"d96302cc"},"versionMetadata":"87d8598c"},"/docs/4.10.0/admin/autorecovery-a34":{"__comp":"17896441","content":"896baf8c"},"/docs/4.10.0/admin/bookies-4bf":{"__comp":"17896441","content":"f2d5ac7e"},"/docs/4.10.0/admin/geo-replication-ada":{"__comp":"17896441","content":"5a1d798c"},"/docs/4.10.0/admin/http-850":{"__comp":"17896441","content":"4cf33c28"},"/docs/4.10.0/admin/metrics-92d":{"__comp":"17896441","content":"0d2aa02e"},"/docs/4.10.0/admin/perf-edf":{"__comp":"17896441","content":"e526d9fb"},"/docs/4.10.0/admin/placement-13f":{"__comp":"17896441","content":"58efeb0f"},"/docs/4.10.0/admin/upgrade-156":{"__comp":"17896441","content":"a34b52ce"},"/docs/4.10.0/api/distributedlog-api-c65":{"__comp":"17896441","content":"da284785"},"/docs/4.10.0/api/ledger-adv-api-549":{"__comp":"17896441","content":"d2113218"},"/docs/4.10.0/api/ledger-api-5d3":{"__comp":"17896441","content":"5f20ae4e"},"/docs/4.10.0/api/overview-659":{"__comp":"17896441","content":"00099f85"},"/docs/4.10.0/deployment/kubernetes-63b":{"__comp":"17896441","content":"b68c61f5"},"/docs/4.10.0/deployment/manual-221":{"__comp":"17896441","content":"8e8026e2"},"/docs/4.10.0/development/codebase-316":{"__comp":"17896441","content":"1ddcee41"},"/docs/4.10.0/development/protocol-6de":{"__comp":"17896441","content":"3f883def"},"/docs/4.10.0/getting-started/concepts-4d2":{"__comp":"17896441","content":"ff260964"},"/docs/4.10.0/getting-started/installation-dbe":{"__comp":"17896441","content":"ed08832e"},"/docs/4.10.0/getting-started/run-locally-cd6":{"__comp":"17896441","content":"1c223750"},"/docs/4.10.0/overview/-9af":{"__comp":"17896441","content":"73d377e5"},"/docs/4.10.0/reference/cli-444":{"__comp":"17896441","content":"bf29d81a"},"/docs/4.10.0/reference/config-c64":{"__comp":"17896441","content":"0d0fc48b"},"/docs/4.10.0/reference/metrics-c8e":{"__comp":"17896441","content":"d91115c6"},"/docs/4.10.0/security/overview-984":{"__comp":"17896441","content":"e6a6cdb5"},"/docs/4.10.0/security/sasl-8f4":{"__comp":"17896441","content":"28655793"},"/docs/4.10.0/security/tls-6ba":{"__comp":"17896441","content":"3ec050b2"},"/docs/4.10.0/security/zookeeper-e6e":{"__comp":"17896441","content":"a3d44527"},"/docs/4.11.1-d06":{"__comp":"1be78505","__context":{"plugin":"d96302cc"},"versionMetadata":"0187783a"},"/docs/4.11.1/admin/autorecovery-e4d":{"__comp":"17896441","content":"0a998885"},"/docs/4.11.1/admin/bookies-913":{"__comp":"17896441","content":"612db47a"},"/docs/4.11.1/admin/decomission-84f":{"__comp":"17896441","content":"4882bd62"},"/docs/4.11.1/admin/geo-replication-662":{"__comp":"17896441","content":"83e74c48"},"/docs/4.11.1/admin/http-678":{"__comp":"17896441","content":"313a661a"},"/docs/4.11.1/admin/metrics-2a8":{"__comp":"17896441","content":"1bb26576"},"/docs/4.11.1/admin/perf-407":{"__comp":"17896441","content":"5d50bbf1"},"/docs/4.11.1/admin/placement-73e":{"__comp":"17896441","content":"a4f4c0c8"},"/docs/4.11.1/admin/upgrade-af2":{"__comp":"17896441","content":"5b83d837"},"/docs/4.11.1/api/distributedlog-api-cf6":{"__comp":"17896441","content":"2d2c1853"},"/docs/4.11.1/api/ledger-adv-api-cde":{"__comp":"17896441","content":"9c5aab0e"},"/docs/4.11.1/api/ledger-api-78a":{"__comp":"17896441","content":"b217b1df"},"/docs/4.11.1/api/overview-4cc":{"__comp":"17896441","content":"d67b6402"},"/docs/4.11.1/deployment/kubernetes-d54":{"__comp":"17896441","content":"1e033391"},"/docs/4.11.1/deployment/manual-7c6":{"__comp":"17896441","content":"09c5a1ad"},"/docs/4.11.1/development/codebase-a9d":{"__comp":"17896441","content":"8d306d14"},"/docs/4.11.1/development/protocol-407":{"__comp":"17896441","content":"6cdfbbfb"},"/docs/4.11.1/getting-started/concepts-89a":{"__comp":"17896441","content":"8e901aa8"},"/docs/4.11.1/getting-started/installation-695":{"__comp":"17896441","content":"638e6f40"},"/docs/4.11.1/getting-started/run-locally-59f":{"__comp":"17896441","content":"48e6979d"},"/docs/4.11.1/overview/-b2f":{"__comp":"17896441","content":"db1d00c4"},"/docs/4.11.1/reference/cli-a8b":{"__comp":"17896441","content":"7f6538f4"},"/docs/4.11.1/reference/config-deb":{"__comp":"17896441","content":"86ab4954"},"/docs/4.11.1/reference/metrics-29e":{"__comp":"17896441","content":"bb7ded3b"},"/docs/4.11.1/security/overview-507":{"__comp":"17896441","content":"50f3a74f"},"/docs/4.11.1/security/sasl-dc2":{"__comp":"17896441","content":"a5854c89"},"/docs/4.11.1/security/tls-52e":{"__comp":"17896441","content":"9a26ec38"},"/docs/4.11.1/security/zookeeper-864":{"__comp":"17896441","content":"fca08244"},"/docs/4.12.1-071":{"__comp":"1be78505","__context":{"plugin":"d96302cc"},"versionMetadata":"f1ec30d1"},"/docs/4.12.1/admin/autorecovery-89b":{"__comp":"17896441","content":"818526b6"},"/docs/4.12.1/admin/bookies-0d6":{"__comp":"17896441","content":"f51846fe"},"/docs/4.12.1/admin/decomission-7be":{"__comp":"17896441","content":"e52fe1ed"},"/docs/4.12.1/admin/geo-replication-d2d":{"__comp":"17896441","content":"3630fad3"},"/docs/4.12.1/admin/http-fe4":{"__comp":"17896441","content":"561b6265"},"/docs/4.12.1/admin/metrics-c89":{"__comp":"17896441","content":"4bfd050d"},"/docs/4.12.1/admin/perf-ec4":{"__comp":"17896441","content":"17fed085"},"/docs/4.12.1/admin/placement-726":{"__comp":"17896441","content":"b26f55a5"},"/docs/4.12.1/admin/upgrade-dda":{"__comp":"17896441","content":"492440dc"},"/docs/4.12.1/api/distributedlog-api-fa6":{"__comp":"17896441","content":"7b3ecbf1"},"/docs/4.12.1/api/ledger-adv-api-e2f":{"__comp":"17896441","content":"b4baf230"},"/docs/4.12.1/api/ledger-api-5a5":{"__comp":"17896441","content":"87726f30"},"/docs/4.12.1/api/overview-3ed":{"__comp":"17896441","content":"1c4211eb"},"/docs/4.12.1/deployment/kubernetes-6a6":{"__comp":"17896441","content":"39a4b53d"},"/docs/4.12.1/deployment/manual-7e5":{"__comp":"17896441","content":"20c15017"},"/docs/4.12.1/development/codebase-916":{"__comp":"17896441","content":"3411c643"},"/docs/4.12.1/development/protocol-5a5":{"__comp":"17896441","content":"b672ebd6"},"/docs/4.12.1/getting-started/concepts-b6d":{"__comp":"17896441","content":"c9cfd710"},"/docs/4.12.1/getting-started/installation-e37":{"__comp":"17896441","content":"e2a686c7"},"/docs/4.12.1/getting-started/run-locally-06e":{"__comp":"17896441","content":"c767f061"},"/docs/4.12.1/overview/-bfe":{"__comp":"17896441","content":"c2065ba5"},"/docs/4.12.1/reference/cli-abd":{"__comp":"17896441","content":"6ff4dfcf"},"/docs/4.12.1/reference/config-33c":{"__comp":"17896441","content":"1547da37"},"/docs/4.12.1/reference/metrics-607":{"__comp":"17896441","content":"cbfa528b"},"/docs/4.12.1/security/overview-471":{"__comp":"17896441","content":"c87023c4"},"/docs/4.12.1/security/sasl-829":{"__comp":"17896441","content":"76097a60"},"/docs/4.12.1/security/tls-dcc":{"__comp":"17896441","content":"421258aa"},"/docs/4.12.1/security/zookeeper-709":{"__comp":"17896441","content":"ffb1bb68"},"/docs/4.13.0-fb3":{"__comp":"1be78505","__context":{"plugin":"d96302cc"},"versionMetadata":"3c400ed9"},"/docs/4.13.0/admin/autorecovery-3d4":{"__comp":"17896441","content":"a9e28e86"},"/docs/4.13.0/admin/bookies-058":{"__comp":"17896441","content":"2246c66d"},"/docs/4.13.0/admin/decomission-67b":{"__comp":"17896441","content":"724151f0"},"/docs/4.13.0/admin/geo-replication-1cf":{"__comp":"17896441","content":"aede75d4"},"/docs/4.13.0/admin/http-a06":{"__comp":"17896441","content":"f9a9d4c2"},"/docs/4.13.0/admin/metrics-ce7":{"__comp":"17896441","content":"c142e639"},"/docs/4.13.0/admin/perf-427":{"__comp":"17896441","content":"a363edce"},"/docs/4.13.0/admin/placement-b86":{"__comp":"17896441","content":"40712b22"},"/docs/4.13.0/admin/upgrade-4e5":{"__comp":"17896441","content":"80055ea8"},"/docs/4.13.0/api/distributedlog-api-a2e":{"__comp":"17896441","content":"dd523e5f"},"/docs/4.13.0/api/ledger-adv-api-89f":{"__comp":"17896441","content":"b022ea46"},"/docs/4.13.0/api/ledger-api-9b0":{"__comp":"17896441","content":"561c0d70"},"/docs/4.13.0/api/overview-5f4":{"__comp":"17896441","content":"a43fb5c1"},"/docs/4.13.0/deployment/kubernetes-65d":{"__comp":"17896441","content":"3a07cdee"},"/docs/4.13.0/deployment/manual-8b0":{"__comp":"17896441","content":"3f753b27"},"/docs/4.13.0/development/codebase-f91":{"__comp":"17896441","content":"ea5d6149"},"/docs/4.13.0/development/protocol-08a":{"__comp":"17896441","content":"5acc7ccb"},"/docs/4.13.0/getting-started/concepts-bc4":{"__comp":"17896441","content":"730767f4"},"/docs/4.13.0/getting-started/installation-b39":{"__comp":"17896441","content":"7e8a1336"},"/docs/4.13.0/getting-started/run-locally-e66":{"__comp":"17896441","content":"dca334c0"},"/docs/4.13.0/overview/-18d":{"__comp":"17896441","content":"eba79e96"},"/docs/4.13.0/reference/cli-12e":{"__comp":"17896441","content":"f74a5a7b"},"/docs/4.13.0/reference/config-455":{"__comp":"17896441","content":"d0a2eb8e"},"/docs/4.13.0/reference/metrics-5ca":{"__comp":"17896441","content":"effdd252"},"/docs/4.13.0/security/overview-d78":{"__comp":"17896441","content":"7cefa220"},"/docs/4.13.0/security/sasl-132":{"__comp":"17896441","content":"e0d9e15f"},"/docs/4.13.0/security/tls-6e8":{"__comp":"17896441","content":"b7fafd37"},"/docs/4.13.0/security/zookeeper-c16":{"__comp":"17896441","content":"c56769ee"},"/docs/4.14.8-855":{"__comp":"1be78505","__context":{"plugin":"d96302cc"},"versionMetadata":"4a224a91"},"/docs/4.14.8/admin/autorecovery-a10":{"__comp":"17896441","content":"5ae0edee"},"/docs/4.14.8/admin/bookies-7b1":{"__comp":"17896441","content":"3cef618a"},"/docs/4.14.8/admin/decomission-c2f":{"__comp":"17896441","content":"07497906"},"/docs/4.14.8/admin/geo-replication-4d1":{"__comp":"17896441","content":"1ecfc0b9"},"/docs/4.14.8/admin/http-996":{"__comp":"17896441","content":"79615c67"},"/docs/4.14.8/admin/metrics-d75":{"__comp":"17896441","content":"f35ad539"},"/docs/4.14.8/admin/perf-ee9":{"__comp":"17896441","content":"f963ea94"},"/docs/4.14.8/admin/placement-985":{"__comp":"17896441","content":"f6ba9a4b"},"/docs/4.14.8/admin/upgrade-169":{"__comp":"17896441","content":"65650ba2"},"/docs/4.14.8/api/distributedlog-api-53e":{"__comp":"17896441","content":"bd384662"},"/docs/4.14.8/api/ledger-adv-api-fb8":{"__comp":"17896441","content":"e66d8aa5"},"/docs/4.14.8/api/ledger-api-717":{"__comp":"17896441","content":"edb7b4da"},"/docs/4.14.8/api/overview-54b":{"__comp":"17896441","content":"66ba8f65"},"/docs/4.14.8/deployment/kubernetes-4d3":{"__comp":"17896441","content":"1fe02719"},"/docs/4.14.8/deployment/manual-551":{"__comp":"17896441","content":"ef3f5cc8"},"/docs/4.14.8/development/codebase-728":{"__comp":"17896441","content":"1791646b"},"/docs/4.14.8/development/protocol-151":{"__comp":"17896441","content":"824fb3c0"},"/docs/4.14.8/getting-started/concepts-570":{"__comp":"17896441","content":"b3100f29"},"/docs/4.14.8/getting-started/installation-0db":{"__comp":"17896441","content":"35534a6f"},"/docs/4.14.8/getting-started/run-locally-603":{"__comp":"17896441","content":"aa2b1be2"},"/docs/4.14.8/overview/-f6f":{"__comp":"17896441","content":"c23b53d6"},"/docs/4.14.8/reference/cli-579":{"__comp":"17896441","content":"f47db9e6"},"/docs/4.14.8/reference/config-bb1":{"__comp":"17896441","content":"73663191"},"/docs/4.14.8/reference/metrics-2f9":{"__comp":"17896441","content":"9b42fb08"},"/docs/4.14.8/security/overview-8ad":{"__comp":"17896441","content":"2ff57c08"},"/docs/4.14.8/security/sasl-97b":{"__comp":"17896441","content":"c3a4d6bc"},"/docs/4.14.8/security/tls-fab":{"__comp":"17896441","content":"cb881008"},"/docs/4.14.8/security/zookeeper-21c":{"__comp":"17896441","content":"69138a9b"},"/docs/4.15.5-d97":{"__comp":"1be78505","__context":{"plugin":"d96302cc"},"versionMetadata":"064c7463"},"/docs/4.15.5/admin/autorecovery-35e":{"__comp":"17896441","content":"7b53c4c5"},"/docs/4.15.5/admin/bookies-e1f":{"__comp":"17896441","content":"c93357d8"},"/docs/4.15.5/admin/decomission-0aa":{"__comp":"17896441","content":"662da30f"},"/docs/4.15.5/admin/geo-replication-77b":{"__comp":"17896441","content":"8b73681b"},"/docs/4.15.5/admin/http-ca2":{"__comp":"17896441","content":"6beda70c"},"/docs/4.15.5/admin/metrics-509":{"__comp":"17896441","content":"95ce3d34"},"/docs/4.15.5/admin/perf-c38":{"__comp":"17896441","content":"07c6cf68"},"/docs/4.15.5/admin/placement-5ef":{"__comp":"17896441","content":"0066c128"},"/docs/4.15.5/admin/upgrade-976":{"__comp":"17896441","content":"9e5743fa"},"/docs/4.15.5/api/distributedlog-api-925":{"__comp":"17896441","content":"b2f83641"},"/docs/4.15.5/api/ledger-adv-api-0c7":{"__comp":"17896441","content":"a1b73db9"},"/docs/4.15.5/api/ledger-api-597":{"__comp":"17896441","content":"4e6f80aa"},"/docs/4.15.5/api/overview-1aa":{"__comp":"17896441","content":"7c48a47e"},"/docs/4.15.5/deployment/kubernetes-068":{"__comp":"17896441","content":"286c567a"},"/docs/4.15.5/deployment/manual-35d":{"__comp":"17896441","content":"037dd35f"},"/docs/4.15.5/development/codebase-76c":{"__comp":"17896441","content":"ae4d2163"},"/docs/4.15.5/development/protocol-a75":{"__comp":"17896441","content":"94320cd8"},"/docs/4.15.5/getting-started/concepts-45a":{"__comp":"17896441","content":"0d73263b"},"/docs/4.15.5/getting-started/installation-62b":{"__comp":"17896441","content":"03f88f06"},"/docs/4.15.5/getting-started/run-locally-119":{"__comp":"17896441","content":"2afb7445"},"/docs/4.15.5/overview/-e0b":{"__comp":"17896441","content":"d78c0d88"},"/docs/4.15.5/reference/cli-7b3":{"__comp":"17896441","content":"25be17b9"},"/docs/4.15.5/reference/config-228":{"__comp":"17896441","content":"f8bf4ac5"},"/docs/4.15.5/security/overview-bc6":{"__comp":"17896441","content":"f4dc42ca"},"/docs/4.15.5/security/sasl-145":{"__comp":"17896441","content":"1e371f09"},"/docs/4.15.5/security/tls-819":{"__comp":"17896441","content":"52fd9c79"},"/docs/4.15.5/security/zookeeper-40e":{"__comp":"17896441","content":"213de9a1"},"/docs/4.16.5-8c2":{"__comp":"1be78505","__context":{"plugin":"d96302cc"},"versionMetadata":"af1e75d9"},"/docs/4.16.5/admin/autorecovery-935":{"__comp":"17896441","content":"b9567f41"},"/docs/4.16.5/admin/bookies-48e":{"__comp":"17896441","content":"4bf870c6"},"/docs/4.16.5/admin/decomission-e96":{"__comp":"17896441","content":"7bf77d86"},"/docs/4.16.5/admin/geo-replication-96d":{"__comp":"17896441","content":"58753608"},"/docs/4.16.5/admin/http-18d":{"__comp":"17896441","content":"e0128c32"},"/docs/4.16.5/admin/metrics-181":{"__comp":"17896441","content":"c4b0d767"},"/docs/4.16.5/admin/perf-8e8":{"__comp":"17896441","content":"0c3f6a2e"},"/docs/4.16.5/admin/placement-a06":{"__comp":"17896441","content":"35216708"},"/docs/4.16.5/admin/upgrade-558":{"__comp":"17896441","content":"ebf8c8a4"},"/docs/4.16.5/api/distributedlog-api-2c3":{"__comp":"17896441","content":"8607f33a"},"/docs/4.16.5/api/ledger-adv-api-1cd":{"__comp":"17896441","content":"f440e5d3"},"/docs/4.16.5/api/ledger-api-02a":{"__comp":"17896441","content":"6b366f12"},"/docs/4.16.5/api/overview-1e1":{"__comp":"17896441","content":"c0fb62f3"},"/docs/4.16.5/deployment/kubernetes-4d8":{"__comp":"17896441","content":"96616036"},"/docs/4.16.5/deployment/manual-8df":{"__comp":"17896441","content":"014f04cc"},"/docs/4.16.5/development/codebase-4de":{"__comp":"17896441","content":"a3335d39"},"/docs/4.16.5/development/protocol-804":{"__comp":"17896441","content":"724e3ad7"},"/docs/4.16.5/getting-started/concepts-5a7":{"__comp":"17896441","content":"5684741f"},"/docs/4.16.5/getting-started/installation-d54":{"__comp":"17896441","content":"7dcbb8ba"},"/docs/4.16.5/getting-started/run-locally-b4f":{"__comp":"17896441","content":"943eb5d2"},"/docs/4.16.5/overview/-495":{"__comp":"17896441","content":"6e0bb75c"},"/docs/4.16.5/reference/cli-e54":{"__comp":"17896441","content":"df1f2a65"},"/docs/4.16.5/reference/config-eeb":{"__comp":"17896441","content":"3bd732bb"},"/docs/4.16.5/security/overview-1af":{"__comp":"17896441","content":"a6fce498"},"/docs/4.16.5/security/sasl-1f7":{"__comp":"17896441","content":"17b33b39"},"/docs/4.16.5/security/tls-476":{"__comp":"17896441","content":"97cfc084"},"/docs/4.16.5/security/zookeeper-ce9":{"__comp":"17896441","content":"70ab0033"},"/docs/4.5.1-a83":{"__comp":"1be78505","__context":{"plugin":"d96302cc"},"versionMetadata":"ef1ef56c"},"/docs/4.5.1/admin/autorecovery-f9f":{"__comp":"17896441","content":"c34c1aa0"},"/docs/4.5.1/admin/bookies-daa":{"__comp":"17896441","content":"2ba8ffb1"},"/docs/4.5.1/admin/geo-replication-23b":{"__comp":"17896441","content":"850e3a3d"},"/docs/4.5.1/admin/metrics-552":{"__comp":"17896441","content":"8cc504e2"},"/docs/4.5.1/admin/perf-705":{"__comp":"17896441","content":"ca9e19a0"},"/docs/4.5.1/admin/placement-e73":{"__comp":"17896441","content":"fb18728e"},"/docs/4.5.1/admin/upgrade-200":{"__comp":"17896441","content":"2440862d"},"/docs/4.5.1/api/distributedlog-api-1e9":{"__comp":"17896441","content":"7fa58592"},"/docs/4.5.1/api/ledger-adv-api-fee":{"__comp":"17896441","content":"2c6e2254"},"/docs/4.5.1/api/ledger-api-d9e":{"__comp":"17896441","content":"4808995b"},"/docs/4.5.1/api/overview-c15":{"__comp":"17896441","content":"685312ca"},"/docs/4.5.1/deployment/kubernetes-bf3":{"__comp":"17896441","content":"c53b1d90"},"/docs/4.5.1/deployment/manual-51c":{"__comp":"17896441","content":"4d70f3cf"},"/docs/4.5.1/development/codebase-8ad":{"__comp":"17896441","content":"bc5400c9"},"/docs/4.5.1/development/protocol-982":{"__comp":"17896441","content":"ac63e720"},"/docs/4.5.1/getting-started/concepts-d33":{"__comp":"17896441","content":"c78e0dfd"},"/docs/4.5.1/getting-started/installation-1e6":{"__comp":"17896441","content":"485f610c"},"/docs/4.5.1/getting-started/run-locally-b39":{"__comp":"17896441","content":"5b25eae8"},"/docs/4.5.1/overview/-c22":{"__comp":"17896441","content":"e151506d"},"/docs/4.5.1/reference/cli-46a":{"__comp":"17896441","content":"739e861c"},"/docs/4.5.1/reference/config-b7e":{"__comp":"17896441","content":"05d43200"},"/docs/4.5.1/reference/metrics-fad":{"__comp":"17896441","content":"342215bd"},"/docs/4.5.1/security/overview-aa7":{"__comp":"17896441","content":"21e4306c"},"/docs/4.5.1/security/sasl-fef":{"__comp":"17896441","content":"5ccf8bb0"},"/docs/4.5.1/security/tls-e2b":{"__comp":"17896441","content":"5e6a0b05"},"/docs/4.5.1/security/zookeeper-a5f":{"__comp":"17896441","content":"3d9fe30f"},"/docs/4.6.2-9c8":{"__comp":"1be78505","__context":{"plugin":"d96302cc"},"versionMetadata":"43a0a41f"},"/docs/4.6.2/admin/autorecovery-1c6":{"__comp":"17896441","content":"4698369b"},"/docs/4.6.2/admin/bookies-a55":{"__comp":"17896441","content":"c3917577"},"/docs/4.6.2/admin/geo-replication-f19":{"__comp":"17896441","content":"ee4ead70"},"/docs/4.6.2/admin/http-ecb":{"__comp":"17896441","content":"425c25af"},"/docs/4.6.2/admin/metrics-d4d":{"__comp":"17896441","content":"e1797e98"},"/docs/4.6.2/admin/perf-7b2":{"__comp":"17896441","content":"deffa85b"},"/docs/4.6.2/admin/placement-6e2":{"__comp":"17896441","content":"2b1d6972"},"/docs/4.6.2/admin/upgrade-fae":{"__comp":"17896441","content":"d86f913f"},"/docs/4.6.2/api/distributedlog-api-df6":{"__comp":"17896441","content":"ded32efe"},"/docs/4.6.2/api/ledger-adv-api-9d0":{"__comp":"17896441","content":"c29dbf77"},"/docs/4.6.2/api/ledger-api-75c":{"__comp":"17896441","content":"0012aeda"},"/docs/4.6.2/api/overview-97a":{"__comp":"17896441","content":"a47a33ba"},"/docs/4.6.2/deployment/kubernetes-b9d":{"__comp":"17896441","content":"30c186c7"},"/docs/4.6.2/deployment/manual-552":{"__comp":"17896441","content":"abbc0c33"},"/docs/4.6.2/development/codebase-d3c":{"__comp":"17896441","content":"2ec0be4c"},"/docs/4.6.2/development/protocol-999":{"__comp":"17896441","content":"72c0ad31"},"/docs/4.6.2/getting-started/concepts-177":{"__comp":"17896441","content":"af30b71e"},"/docs/4.6.2/getting-started/installation-c8f":{"__comp":"17896441","content":"11829f95"},"/docs/4.6.2/getting-started/run-locally-393":{"__comp":"17896441","content":"b218484e"},"/docs/4.6.2/overview/-31b":{"__comp":"17896441","content":"da8fb6e6"},"/docs/4.6.2/reference/cli-942":{"__comp":"17896441","content":"24e8d336"},"/docs/4.6.2/reference/config-5e1":{"__comp":"17896441","content":"0de1e94b"},"/docs/4.6.2/reference/metrics-3d0":{"__comp":"17896441","content":"bbef9193"},"/docs/4.6.2/security/overview-ecd":{"__comp":"17896441","content":"136f9a14"},"/docs/4.6.2/security/sasl-586":{"__comp":"17896441","content":"2956de9a"},"/docs/4.6.2/security/tls-22c":{"__comp":"17896441","content":"caa6cc64"},"/docs/4.6.2/security/zookeeper-fef":{"__comp":"17896441","content":"61a001f8"},"/docs/4.7.3-ab6":{"__comp":"1be78505","__context":{"plugin":"d96302cc"},"versionMetadata":"f7a674b2"},"/docs/4.7.3/admin/autorecovery-b0d":{"__comp":"17896441","content":"87d315c4"},"/docs/4.7.3/admin/bookies-29e":{"__comp":"17896441","content":"df9d0e7b"},"/docs/4.7.3/admin/geo-replication-27b":{"__comp":"17896441","content":"d1a9d15c"},"/docs/4.7.3/admin/http-b3c":{"__comp":"17896441","content":"14a50b22"},"/docs/4.7.3/admin/metrics-dcf":{"__comp":"17896441","content":"dff2692f"},"/docs/4.7.3/admin/perf-b7b":{"__comp":"17896441","content":"1268352f"},"/docs/4.7.3/admin/placement-2a0":{"__comp":"17896441","content":"07b748cc"},"/docs/4.7.3/admin/upgrade-786":{"__comp":"17896441","content":"cb1fb814"},"/docs/4.7.3/api/distributedlog-api-c83":{"__comp":"17896441","content":"bc29171d"},"/docs/4.7.3/api/ledger-adv-api-bfb":{"__comp":"17896441","content":"f61db2e5"},"/docs/4.7.3/api/ledger-api-3d2":{"__comp":"17896441","content":"0537c41d"},"/docs/4.7.3/api/overview-745":{"__comp":"17896441","content":"9f61d8e1"},"/docs/4.7.3/deployment/kubernetes-822":{"__comp":"17896441","content":"ea0aa512"},"/docs/4.7.3/deployment/manual-037":{"__comp":"17896441","content":"9050039c"},"/docs/4.7.3/development/codebase-ded":{"__comp":"17896441","content":"b7d359f1"},"/docs/4.7.3/development/protocol-003":{"__comp":"17896441","content":"491836cf"},"/docs/4.7.3/getting-started/concepts-613":{"__comp":"17896441","content":"de2333f9"},"/docs/4.7.3/getting-started/installation-75e":{"__comp":"17896441","content":"fd1c180b"},"/docs/4.7.3/getting-started/run-locally-176":{"__comp":"17896441","content":"1a41bcf4"},"/docs/4.7.3/overview/-d3c":{"__comp":"17896441","content":"257152cd"},"/docs/4.7.3/reference/cli-d3c":{"__comp":"17896441","content":"0843cb03"},"/docs/4.7.3/reference/config-dfc":{"__comp":"17896441","content":"bbd70f53"},"/docs/4.7.3/reference/metrics-acb":{"__comp":"17896441","content":"7589009a"},"/docs/4.7.3/security/overview-bc8":{"__comp":"17896441","content":"035695b8"},"/docs/4.7.3/security/sasl-f67":{"__comp":"17896441","content":"0aaf5a35"},"/docs/4.7.3/security/tls-118":{"__comp":"17896441","content":"fcea3b45"},"/docs/4.7.3/security/zookeeper-476":{"__comp":"17896441","content":"cb952911"},"/docs/4.8.2-795":{"__comp":"1be78505","__context":{"plugin":"d96302cc"},"versionMetadata":"abb3dda4"},"/docs/4.8.2/admin/autorecovery-9e2":{"__comp":"17896441","content":"33c915ea"},"/docs/4.8.2/admin/bookies-6e8":{"__comp":"17896441","content":"71605a32"},"/docs/4.8.2/admin/geo-replication-383":{"__comp":"17896441","content":"1cb4afcc"},"/docs/4.8.2/admin/http-b5c":{"__comp":"17896441","content":"2e50ccc4"},"/docs/4.8.2/admin/metrics-5e6":{"__comp":"17896441","content":"d8aef0aa"},"/docs/4.8.2/admin/perf-bb1":{"__comp":"17896441","content":"6ee89642"},"/docs/4.8.2/admin/placement-256":{"__comp":"17896441","content":"186b8a18"},"/docs/4.8.2/admin/upgrade-958":{"__comp":"17896441","content":"0d53d5be"},"/docs/4.8.2/api/distributedlog-api-4a7":{"__comp":"17896441","content":"7917e5c5"},"/docs/4.8.2/api/ledger-adv-api-4e5":{"__comp":"17896441","content":"a386696c"},"/docs/4.8.2/api/ledger-api-0e6":{"__comp":"17896441","content":"f9a3b6b7"},"/docs/4.8.2/api/overview-fd5":{"__comp":"17896441","content":"ca99f506"},"/docs/4.8.2/deployment/kubernetes-ee8":{"__comp":"17896441","content":"31b6813e"},"/docs/4.8.2/deployment/manual-d27":{"__comp":"17896441","content":"7e9c80a9"},"/docs/4.8.2/development/codebase-acd":{"__comp":"17896441","content":"9fedf7e0"},"/docs/4.8.2/development/protocol-a69":{"__comp":"17896441","content":"629b6576"},"/docs/4.8.2/getting-started/concepts-8f6":{"__comp":"17896441","content":"985bff7a"},"/docs/4.8.2/getting-started/installation-531":{"__comp":"17896441","content":"1d91761b"},"/docs/4.8.2/getting-started/run-locally-1bc":{"__comp":"17896441","content":"1ac84465"},"/docs/4.8.2/overview/-671":{"__comp":"17896441","content":"131f50d0"},"/docs/4.8.2/reference/cli-0fc":{"__comp":"17896441","content":"5cf2c6e0"},"/docs/4.8.2/reference/config-8fb":{"__comp":"17896441","content":"9260b226"},"/docs/4.8.2/reference/metrics-bb3":{"__comp":"17896441","content":"3cff1016"},"/docs/4.8.2/security/overview-2f9":{"__comp":"17896441","content":"ffbf113e"},"/docs/4.8.2/security/sasl-e03":{"__comp":"17896441","content":"c6ff1e84"},"/docs/4.8.2/security/tls-b5f":{"__comp":"17896441","content":"2cc56763"},"/docs/4.8.2/security/zookeeper-5e7":{"__comp":"17896441","content":"7472e927"},"/docs/4.9.2-78f":{"__comp":"1be78505","__context":{"plugin":"d96302cc"},"versionMetadata":"331b2a3d"},"/docs/4.9.2/admin/autorecovery-180":{"__comp":"17896441","content":"7815c2d3"},"/docs/4.9.2/admin/bookies-d85":{"__comp":"17896441","content":"f2d60081"},"/docs/4.9.2/admin/geo-replication-08a":{"__comp":"17896441","content":"b54aa47d"},"/docs/4.9.2/admin/http-363":{"__comp":"17896441","content":"3f48ad20"},"/docs/4.9.2/admin/metrics-852":{"__comp":"17896441","content":"6f4e447b"},"/docs/4.9.2/admin/perf-10c":{"__comp":"17896441","content":"772e10c8"},"/docs/4.9.2/admin/placement-8d5":{"__comp":"17896441","content":"4ce92582"},"/docs/4.9.2/admin/upgrade-279":{"__comp":"17896441","content":"f51baf8e"},"/docs/4.9.2/api/distributedlog-api-d27":{"__comp":"17896441","content":"db40a819"},"/docs/4.9.2/api/ledger-adv-api-0cf":{"__comp":"17896441","content":"91a9c488"},"/docs/4.9.2/api/ledger-api-d7f":{"__comp":"17896441","content":"83a4731b"},"/docs/4.9.2/api/overview-634":{"__comp":"17896441","content":"4a8bd1f6"},"/docs/4.9.2/deployment/kubernetes-b21":{"__comp":"17896441","content":"8296c7ad"},"/docs/4.9.2/deployment/manual-e27":{"__comp":"17896441","content":"11433b40"},"/docs/4.9.2/development/codebase-e4e":{"__comp":"17896441","content":"93eb8f00"},"/docs/4.9.2/development/protocol-021":{"__comp":"17896441","content":"78cfffe1"},"/docs/4.9.2/getting-started/concepts-4df":{"__comp":"17896441","content":"be9b1ba5"},"/docs/4.9.2/getting-started/installation-2bd":{"__comp":"17896441","content":"b6c885a5"},"/docs/4.9.2/getting-started/run-locally-7e7":{"__comp":"17896441","content":"14da3ce7"},"/docs/4.9.2/overview/-25b":{"__comp":"17896441","content":"9ca9b220"},"/docs/4.9.2/reference/cli-3f7":{"__comp":"17896441","content":"6eb9aa01"},"/docs/4.9.2/reference/config-fd7":{"__comp":"17896441","content":"e494340d"},"/docs/4.9.2/reference/metrics-b05":{"__comp":"17896441","content":"634aee6c"},"/docs/4.9.2/security/overview-03c":{"__comp":"17896441","content":"3d7bb4e0"},"/docs/4.9.2/security/sasl-704":{"__comp":"17896441","content":"d9c8eb9a"},"/docs/4.9.2/security/tls-a88":{"__comp":"17896441","content":"4831039f"},"/docs/4.9.2/security/zookeeper-868":{"__comp":"17896441","content":"e2886f4d"},"/docs/next-497":{"__comp":"1be78505","__context":{"plugin":"d96302cc"},"versionMetadata":"935f2afb"},"/docs/next/admin/autorecovery-1fa":{"__comp":"17896441","content":"8df24095"},"/docs/next/admin/bookies-b7c":{"__comp":"17896441","content":"8af1d301"},"/docs/next/admin/decomission-9b8":{"__comp":"17896441","content":"9edca4e9"},"/docs/next/admin/geo-replication-0f1":{"__comp":"17896441","content":"4cd56fdb"},"/docs/next/admin/http-b7d":{"__comp":"17896441","content":"f69994f3"},"/docs/next/admin/metrics-f98":{"__comp":"17896441","content":"318dfdf9"},"/docs/next/admin/perf-717":{"__comp":"17896441","content":"a7a77925"},"/docs/next/admin/placement-748":{"__comp":"17896441","content":"ba628d47"},"/docs/next/admin/upgrade-e1c":{"__comp":"17896441","content":"6766c2ba"},"/docs/next/api/distributedlog-api-de6":{"__comp":"17896441","content":"23200584"},"/docs/next/api/ledger-adv-api-044":{"__comp":"17896441","content":"089cefec"},"/docs/next/api/ledger-api-0b1":{"__comp":"17896441","content":"9dbc92a7"},"/docs/next/api/overview-e7d":{"__comp":"17896441","content":"65df3d35"},"/docs/next/deployment/kubernetes-b39":{"__comp":"17896441","content":"04da809a"},"/docs/next/deployment/manual-683":{"__comp":"17896441","content":"d09aafa8"},"/docs/next/development/codebase-647":{"__comp":"17896441","content":"ed30e49e"},"/docs/next/development/protocol-aba":{"__comp":"17896441","content":"bbde899b"},"/docs/next/getting-started/concepts-b19":{"__comp":"17896441","content":"7b3ed863"},"/docs/next/getting-started/installation-109":{"__comp":"17896441","content":"54f44165"},"/docs/next/getting-started/run-locally-6bb":{"__comp":"17896441","content":"ebba64f8"},"/docs/next/overview/-0ea":{"__comp":"17896441","content":"e94dfc49"},"/docs/next/reference/cli-431":{"__comp":"17896441","content":"91c76d4c"},"/docs/next/reference/config-d41":{"__comp":"17896441","content":"9a9953e7"},"/docs/next/security/overview-52d":{"__comp":"17896441","content":"3592d2f2"},"/docs/next/security/sasl-b25":{"__comp":"17896441","content":"9c4aba92"},"/docs/next/security/tls-5e9":{"__comp":"17896441","content":"8fde3252"},"/docs/next/security/zookeeper-14c":{"__comp":"17896441","content":"8ef2f9fb"},"/docs-a26":{"__comp":"1be78505","__context":{"plugin":"d96302cc"},"versionMetadata":"7537e02a"},"/docs/admin/autorecovery-658":{"__comp":"17896441","content":"d972a432"},"/docs/admin/bookies-f84":{"__comp":"17896441","content":"e64000bb"},"/docs/admin/decomission-687":{"__comp":"17896441","content":"1020a002"},"/docs/admin/geo-replication-a4c":{"__comp":"17896441","content":"4f98aae6"},"/docs/admin/http-8df":{"__comp":"17896441","content":"951f283b"},"/docs/admin/metrics-fff":{"__comp":"17896441","content":"76831a2f"},"/docs/admin/perf-b56":{"__comp":"17896441","content":"7381f606"},"/docs/admin/placement-f07":{"__comp":"17896441","content":"1b641edf"},"/docs/admin/upgrade-931":{"__comp":"17896441","content":"cfc9ccfa"},"/docs/api/distributedlog-api-8e7":{"__comp":"17896441","content":"7a19cc40"},"/docs/api/ledger-adv-api-f98":{"__comp":"17896441","content":"84741dfb"},"/docs/api/ledger-api-b65":{"__comp":"17896441","content":"c25ed854"},"/docs/api/overview-b7b":{"__comp":"17896441","content":"34dce56b"},"/docs/deployment/kubernetes-96e":{"__comp":"17896441","content":"b5173ce4"},"/docs/deployment/manual-bb0":{"__comp":"17896441","content":"196689c8"},"/docs/development/codebase-cee":{"__comp":"17896441","content":"ee8b4f50"},"/docs/development/protocol-cc7":{"__comp":"17896441","content":"d1db332c"},"/docs/getting-started/concepts-dde":{"__comp":"17896441","content":"46fd0908"},"/docs/getting-started/installation-00b":{"__comp":"17896441","content":"3044fa47"},"/docs/getting-started/run-locally-4e4":{"__comp":"17896441","content":"736b32a3"},"/docs/overview/-586":{"__comp":"17896441","content":"87cc2ef4"},"/docs/reference/cli-0c5":{"__comp":"17896441","content":"a363e5d2"},"/docs/reference/config-716":{"__comp":"17896441","content":"213d6dd2"},"/docs/security/overview-657":{"__comp":"17896441","content":"f6025ed5"},"/docs/security/sasl-0d6":{"__comp":"17896441","content":"0e2af38d"},"/docs/security/tls-dda":{"__comp":"17896441","content":"59304d55"},"/docs/security/zookeeper-6a8":{"__comp":"17896441","content":"976110e4"},"/-577":{"__comp":"c4f5d8e4","__context":{"plugin":"beeb3fc3"},"config":"5e9f5e1a"}}')}},function(e){e.O(0,[532],(function(){return t=49383,e(e.s=t);var t}));e.O()}]);
\ No newline at end of file
diff --git a/content/assets/js/main.287687b3.js.LICENSE.txt b/content/assets/js/main.287687b3.js.LICENSE.txt
new file mode 100644
index 0000000..eb75d69
--- /dev/null
+++ b/content/assets/js/main.287687b3.js.LICENSE.txt
@@ -0,0 +1,63 @@
+/*
+object-assign
+(c) Sindre Sorhus
+@license MIT
+*/
+
+/* NProgress, (c) 2013, 2014 Rico Sta. Cruz - http://ricostacruz.com/nprogress
+ * @license MIT */
+
+/**
+ * @license React
+ * use-sync-external-store-shim.production.min.js
+ *
+ * Copyright (c) Facebook, Inc. and its affiliates.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+/**
+ * Prism: Lightweight, robust, elegant syntax highlighting
+ *
+ * @license MIT <https://opensource.org/licenses/MIT>
+ * @author Lea Verou <https://lea.verou.me>
+ * @namespace
+ * @public
+ */
+
+/** @license React v0.20.2
+ * scheduler.production.min.js
+ *
+ * Copyright (c) Facebook, Inc. and its affiliates.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+/** @license React v16.13.1
+ * react-is.production.min.js
+ *
+ * Copyright (c) Facebook, Inc. and its affiliates.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+/** @license React v17.0.2
+ * react-dom.production.min.js
+ *
+ * Copyright (c) Facebook, Inc. and its affiliates.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+/** @license React v17.0.2
+ * react.production.min.js
+ *
+ * Copyright (c) Facebook, Inc. and its affiliates.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
diff --git a/content/assets/js/runtime~main.380b5a99.js b/content/assets/js/runtime~main.380b5a99.js
new file mode 100644
index 0000000..621e5eb
--- /dev/null
+++ b/content/assets/js/runtime~main.380b5a99.js
@@ -0,0 +1 @@
+!function(){"use strict";var e,f,c,a,b,d={},t={};function n(e){var f=t[e];if(void 0!==f)return f.exports;var c=t[e]={id:e,loaded:!1,exports:{}};return d[e].call(c.exports,c,c.exports,n),c.loaded=!0,c.exports}n.m=d,n.c=t,e=[],n.O=function(f,c,a,b){if(!c){var d=1/0;for(u=0;u<e.length;u++){c=e[u][0],a=e[u][1],b=e[u][2];for(var t=!0,r=0;r<c.length;r++)(!1&b||d>=b)&&Object.keys(n.O).every((function(e){return n.O[e](c[r])}))?c.splice(r--,1):(t=!1,b<d&&(d=b));if(t){e.splice(u--,1);var o=a();void 0!==o&&(f=o)}}return f}b=b||0;for(var u=e.length;u>0&&e[u-1][2]>b;u--)e[u]=e[u-1];e[u]=[c,a,b]},n.n=function(e){var f=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(f,{a:f}),f},c=Object.getPrototypeOf?function(e){return Object.getPrototypeOf(e)}:function(e){return e.__proto__},n.t=function(e,a){if(1&a&&(e=this(e)),8&a)return e;if("object"==typeof e&&e){if(4&a&&e.__esModule)return e;if(16&a&&"function"==typeof e.then)return e}var b=Object.create(null);n.r(b);var d={};f=f||[null,c({}),c([]),c(c)];for(var t=2&a&&e;"object"==typeof t&&!~f.indexOf(t);t=c(t))Object.getOwnPropertyNames(t).forEach((function(f){d[f]=function(){return e[f]}}));return d.default=function(){return e},n.d(b,d),b},n.d=function(e,f){for(var c in f)n.o(f,c)&&!n.o(e,c)&&Object.defineProperty(e,c,{enumerable:!0,get:f[c]})},n.f={},n.e=function(e){return Promise.all(Object.keys(n.f).reduce((function(f,c){return n.f[c](e,f),f}),[]))},n.u=function(e){return"assets/js/"+({5:"ed30e49e",10:"da284785",11:"4bfd050d",24:"4a8bd1f6",53:"935f2afb",60:"b4baf230",63:"d972a432",115:"73d377e5",119:"e494340d",122:"1268352f",123:"ff260964",152:"54f44165",157:"6ee89642",166:"1a41bcf4",205:"7c8189eb",248:"2ff57c08",253:"1c4211eb",289:"131f50d0",325:"213de9a1",338:"a1b73db9",349:"3c400ed9",355:"f51846fe",363:"7e9c80a9",368:"c23b53d6",372:"b3c11919",426:"a363edce",440:"07b748cc",453:"95ce3d34",478:"af1e75d9",520:"0187783a",534:"196689c8",609:"7fa58592",622:"cb952911",637:"87cc2ef4",643:"ffb1bb68",657:"a6fce498",659:"2ba8ffb1",663:"f69994f3",678:"3cef618a",724:"a386696c",741:"dca334c0",762:"35534a6f",771:"d67b6402",792:"816774dc",796:"eba79e96",833:"6beda70c",879:"2956de9a",906:"3d7bb4e0",908:"9dbc92a7",931:"07497906",937:"e39bc689",960:"91c76d4c",975:"c142e639",983:"485f610c",989:"f1ec30d1",1007:"035695b8",1059:"b5173ce4",1080:"05c61b00",1173:"313a661a",1181:"f4dc42ca",1209:"bbde899b",1227:"e66d8aa5",1271:"f51baf8e",1293:"edb7b4da",1310:"dd523e5f",1335:"9b42fb08",1359:"f2d60081",1361:"943eb5d2",1401:"9edca4e9",1406:"71605a32",1423:"28655793",1435:"af30b71e",1441:"421258aa",1467:"41168d35",1488:"a19a348a",1493:"896baf8c",1514:"2afb7445",1527:"cfc9ccfa",1536:"2b1d6972",1573:"7917e5c5",1594:"4808995b",1614:"739e861c",1626:"4e6f80aa",1631:"48e6979d",1666:"f9a3b6b7",1682:"fca08244",1689:"96616036",1708:"724151f0",1717:"78cfffe1",1744:"213d6dd2",1751:"7e8ff14f",1765:"b3100f29",1831:"aede75d4",1845:"a3335d39",1870:"7cefa220",1896:"2d24b11b",1898:"4cd56fdb",1922:"4882bd62",1948:"818526b6",1951:"0d53d5be",1963:"62a0d553",2009:"724e3ad7",2018:"52fd9c79",2047:"ac63e720",2049:"f47db9e6",2057:"f2d5ac7e",2128:"7bf77d86",2179:"257152cd",2207:"4a224a91",2211:"effdd252",2215:"31b6813e",2253:"a7a77925",2279:"f1c1c644",2288:"5ae0edee",2320:"662da30f",2329:"30c186c7",2354:"3a07cdee",2370:"4f98aae6",2407:"561b6265",2418:"9e5743fa",2422:"cb881008",2442:"3f883def",2493:"e151506d",2561:"492440dc",2572:"c93357d8",2575:"985bff7a",2609:"561c0d70",2657:"7b3ed863",2662:"c34c1aa0",2682:"e52fe1ed",2686:"e1797e98",2824:"d1a9d15c",2855:"e0128c32",2867:"772e10c8",2882:"4831039f",2893:"db40a819",2913:"9fedf7e0",2974:"df1f2a65",2993:"1bb26576",3011:"ba628d47",3012:"dff2692f",3035:"aa2b1be2",3066:"ea5d6149",3085:"1f391b9e",3096:"089cefec",3132:"7589009a",3133:"b2f83641",3159:"6ff4dfcf",3164:"4d70f3cf",3171:"1e033391",3200:"4bf870c6",3209:"79615c67",3239:"d2113218",3258:"43a0a41f",3310:"d8aef0aa",3323:"8b73681b",3331:"7e8a1336",3349:"0d2aa02e",3351:"5ccf8bb0",3390:"8cc504e2",3391:"c53b1d90",3404:"46fd0908",3413:"824fb3c0",3498:"bbef9193",3508:"d91115c6",3515:"8d5383ff",3523:"70ab0033",3577:"342215bd",3609:"65650ba2",3615:"8e8026e2",3617:"59304d55",3641:"8e901aa8",3676:"1b641edf",3690:"09c5a1ad",3699:"0537c41d",3757:"83e74c48",3758:"3cff1016",3782:"0aaf5a35",3786:"685312ca",3845:"1e371f09",3852:"5a1d798c",3877:"e2a8767f",3898:"fb18728e",3902:"d96302cc",3912:"f74a5a7b",3937:"b7fafd37",3958:"5f20ae4e",4010:"58753608",4014:"951f283b",4026:"bc5400c9",4050:"0d0fc48b",4051:"7537e02a",4061:"61a001f8",4107:"3d9fe30f",4110:"7472e927",4123:"f963ea94",4138:"84741dfb",4150:"20c15017",4152:"9f61d8e1",4186:"7dcbb8ba",4195:"c4f5d8e4",4203:"3bd732bb",4258:"39a4b53d",4377:"e2886f4d",4378:"9ca9b220",4380:"d1db332c",4392:"c56769ee",4539:"1791646b",4546:"9a9953e7",4579:"e526d9fb",4592:"8fde3252",4612:"e64000bb",4624:"be9b1ba5",4643:"65df3d35",4651:"6cdfbbfb",4670:"86a6f4a6",4696:"0d73263b",4756:"c9cfd710",4779:"caa6cc64",4840:"9c4aba92",4845:"a43fb5c1",4846:"ebba64f8",4849:"6b366f12",4869:"e6a6cdb5",4871:"91a9c488",4876:"8ef2f9fb",4887:"9260b226",4900:"bc29171d",4923:"3f753b27",4980:"ba18db30",5056:"fd1c180b",5156:"83a4731b",5178:"0843cb03",5181:"3ec050b2",5211:"c767f061",5221:"86ab4954",5232:"ea0aa512",5251:"ef3f5cc8",5268:"40712b22",5297:"97cfc084",5446:"037dd35f",5451:"9c5aab0e",5500:"1d91761b",5578:"04da809a",5585:"87d8598c",5593:"8af1d301",5616:"d0a2eb8e",5617:"f6025ed5",5631:"50f3a74f",5638:"7f23633c",5646:"d09aafa8",5694:"f7a674b2",5701:"00099f85",5729:"9a26ec38",5733:"13a7da5f",5777:"064c7463",5792:"5e6a0b05",5848:"c78e0dfd",5860:"bd384662",5866:"76097a60",5870:"1c223750",5904:"6f4e447b",5947:"137061ef",6004:"34dce56b",6016:"f6ba9a4b",6055:"638e6f40",6057:"014f04cc",6066:"23200584",6082:"03f88f06",6111:"bbd70f53",6114:"425c25af",6146:"22d76b2d",6174:"c3917577",6181:"beeb3fc3",6187:"5b25eae8",6192:"b54aa47d",6197:"736b32a3",6268:"e54bfd1f",6303:"f35ad539",6324:"c25ed854",6346:"612db47a",6395:"2e50ccc4",6405:"331b2a3d",6406:"72c0ad31",6415:"850e3a3d",6469:"ca9e19a0",6522:"5684741f",6525:"c87023c4",6552:"136f9a14",6572:"14a50b22",6583:"0012aeda",6643:"d9c8eb9a",6657:"1fe02719",6669:"2440862d",6696:"1ecfc0b9",6763:"1cb4afcc",6775:"6766c2ba",6783:"d78c0d88",6820:"2cc56763",6885:"b7d359f1",6902:"c2065ba5",6950:"24e8d336",6960:"7a19cc40",6994:"1ac84465",7030:"b68c61f5",7031:"11829f95",7053:"e0d9e15f",7055:"8df24095",7068:"bf29d81a",7071:"66ba8f65",7106:"de2333f9",7150:"0c3f6a2e",7211:"cb1fb814",7218:"b217b1df",7281:"b9567f41",7285:"93eb8f00",7307:"14609be1",7322:"3044fa47",7356:"634aee6c",7367:"a5854c89",7374:"3bb6078f",7378:"c29dbf77",7397:"976110e4",7399:"deffa85b",7406:"da8fb6e6",7474:"8d306d14",7590:"69138a9b",7595:"db1d00c4",7599:"7ef71a47",7626:"33c915ea",7666:"14da3ce7",7732:"b672ebd6",7741:"5d50bbf1",7743:"c0fb62f3",7753:"73663191",7764:"f440e5d3",7781:"b929e89b",7844:"abb3dda4",7845:"a4f4c0c8",7886:"026a1d69",7903:"b218484e",7909:"7b3ecbf1",7916:"7815c2d3",7918:"17896441",7934:"5acc7ccb",7942:"fcea3b45",7992:"3592d2f2",8001:"6789c389",8031:"e2a686c7",8037:"186b8a18",8049:"ed08832e",8095:"7f6538f4",8108:"c3a4d6bc",8130:"ded32efe",8136:"80055ea8",8173:"a647d08a",8211:"21e4306c",8262:"0066c128",8282:"491836cf",8308:"e94dfc49",8335:"5531b81f",8339:"ee8b4f50",8342:"4ce92582",8351:"2ec0be4c",8357:"3411c643",8385:"d70b4d73",8441:"c4b0d767",8461:"6eb9aa01",8473:"d86f913f",8502:"a9e28e86",8522:"b800115e",8540:"9050039c",8550:"8607f33a",8562:"c90cac61",8598:"05d43200",8629:"11433b40",8654:"1ddcee41",8663:"ffbf113e",8669:"f61db2e5",8682:"c6ff1e84",8687:"17b33b39",8743:"730767f4",8756:"35216708",8791:"5cf2c6e0",8805:"f8bf4ac5",8846:"a363e5d2",8859:"7c48a47e",8951:"f9a9d4c2",8969:"b022ea46",8986:"2246c66d",8991:"3f48ad20",9006:"17fed085",9023:"87726f30",9035:"a34b52ce",9041:"0e2af38d",9076:"8372258a",9084:"4cf33c28",9113:"bf69fc30",9122:"c7f18df2",9138:"abbc0c33",9178:"6e0bb75c",9192:"ebf8c8a4",9196:"629b6576",9199:"3f07749a",9211:"cf9c4b04",9232:"0a998885",9249:"cbfa528b",9263:"e1e94bbc",9272:"2c6e2254",9290:"b6c885a5",9295:"ee4ead70",9342:"92fa1062",9389:"25be17b9",9412:"ae4d2163",9418:"b26f55a5",9421:"7381f606",9433:"318dfdf9",9441:"94320cd8",9444:"7b53c4c5",9514:"1be78505",9521:"a47a33ba",9522:"dc0ec182",9547:"bb7ded3b",9550:"ef1ef56c",9552:"58efeb0f",9562:"76831a2f",9578:"ca99f506",9609:"a3d44527",9632:"5b83d837",9685:"1547da37",9693:"df9d0e7b",9694:"1020a002",9716:"87d315c4",9773:"4698369b",9782:"286c567a",9815:"07c6cf68",9861:"3630fad3",9877:"2d2c1853",9905:"3521ddbf",9940:"0de1e94b",9946:"8296c7ad",9999:"d288ceb1"}[e]||e)+"."+{5:"a1267848",10:"1f44f71c",11:"2596a5d0",24:"34ea5b58",53:"504357c9",60:"586a2416",63:"b894eaf4",115:"ca7aecfb",119:"b0027d71",122:"76523668",123:"e2bc9139",152:"2d015a9b",157:"3d798173",166:"0409860f",205:"9df7bc5e",248:"7c3781a1",253:"3e16fd76",289:"428b0007",325:"193d4a95",338:"8ebc84a4",349:"6628f470",355:"17596908",363:"b6b3daad",368:"3a4db739",372:"43468393",426:"5246b47c",440:"36737b71",453:"c2f26e06",478:"3918027f",520:"bd4c3f40",534:"3b710a0b",609:"c59ff461",622:"6e72a5a3",637:"2ec5bbee",643:"f089df53",657:"13780526",659:"fc1b31ab",663:"c1880411",678:"daae6f38",724:"122001bf",741:"4c68083c",762:"1c06cffb",771:"b41ad58a",792:"5c09cf5c",796:"0fbf194a",833:"f4ce4984",879:"65abbd15",906:"b4dc97f1",908:"469e378f",931:"c8800cb1",937:"6c223f02",960:"788e13c3",975:"13821c7f",983:"041ea4c4",989:"a0aa68c2",1007:"b54e48d3",1059:"8c41b00f",1080:"8a22eefb",1173:"3724c827",1181:"f42bfe77",1209:"9bf80bb5",1227:"a9ee1c9f",1271:"af9efe7e",1293:"309716dc",1310:"6d0df198",1335:"32af4ba7",1359:"70dcff65",1361:"f1c80bb8",1401:"5ea9817b",1406:"97e515a3",1423:"35f59c27",1435:"efd9791e",1441:"e04adf0b",1467:"7d4689a4",1488:"27ae49ec",1493:"6c161e01",1514:"01b33d9b",1527:"553ca6af",1536:"5f83b2ef",1573:"12dd326e",1594:"8cca9da0",1614:"fa7801c1",1626:"a6c552bb",1631:"b56566fe",1666:"eace3019",1682:"18bb3945",1689:"46e25dde",1708:"19a709c7",1717:"578bbb9f",1744:"6c686d1e",1751:"e879614e",1765:"59c23538",1831:"561b0889",1845:"a5c4ec1f",1870:"2e401a7c",1896:"b15ede0f",1898:"9f620df1",1922:"8c32f656",1948:"73444937",1951:"3777119c",1963:"fd8b2bb4",2009:"b230d116",2018:"1de61a2f",2047:"6fd6719d",2049:"f751fcb9",2057:"90f1855d",2128:"cb08c121",2179:"f442e509",2207:"9401e76c",2211:"873e0f19",2215:"99ad868e",2253:"60211fde",2279:"38fda5d4",2288:"cf174016",2320:"d17d4e5d",2329:"4caae9d2",2354:"944ec00c",2370:"78fc63c9",2407:"7c9c780f",2418:"e0aff4dd",2422:"ac67b058",2442:"86523870",2493:"0cb78d24",2561:"3e7cf672",2572:"82e17009",2575:"c0d976b8",2609:"57dff077",2657:"b5830e31",2662:"4887151e",2682:"85962fcb",2686:"1c5402c7",2824:"d7fadb76",2855:"c5743b54",2867:"f45a7d65",2882:"d1f6bbbb",2893:"58a0c3c5",2913:"67bf80c3",2974:"12d920b8",2993:"bb5125c7",3011:"e54456ce",3012:"ace7798a",3035:"1976c23c",3066:"0be8279e",3085:"0fb5cf8b",3096:"5f98b03f",3132:"c48f0291",3133:"772bf96b",3159:"4775c98f",3164:"3d471605",3171:"6c0c6532",3200:"3ec99cc3",3209:"2f97966c",3239:"757b846f",3258:"e9eb475d",3310:"1207c541",3323:"bc11c21e",3331:"de9bf7ea",3349:"47d40a08",3351:"b6e917d2",3390:"4aff2f61",3391:"7d275d8e",3404:"15025e08",3413:"26d4c894",3498:"5379d0b1",3508:"dbd7c419",3515:"c5f48ac5",3523:"5c73bddd",3577:"c32ac965",3609:"6ace7d45",3615:"902ec583",3617:"f75a7e6d",3641:"e65e1835",3676:"b280220b",3690:"05ac8e86",3699:"42d7b120",3757:"e040ffa1",3758:"e25aa81f",3782:"46df78be",3786:"c465d3f5",3845:"30b311b2",3852:"b5e3c244",3877:"66b6e945",3898:"be66cb5c",3902:"f00604f7",3912:"fb91e6b4",3937:"df779e3f",3958:"18224033",4010:"91ad30c0",4014:"7ccb826b",4026:"cd8729eb",4050:"66a02789",4051:"cd38eb5e",4061:"5f8ffa47",4107:"e46f7e11",4110:"d6b6a4b3",4123:"6e046f79",4138:"f62e770a",4150:"2eb64447",4152:"70206ba4",4186:"ca4b2351",4195:"05607b4e",4203:"62702f0d",4258:"9c7460c3",4377:"6ea746c5",4378:"7b3230f6",4380:"5a078b97",4392:"21ec65cb",4539:"bde49175",4546:"bc62b328",4579:"7f0bff70",4592:"fc529619",4612:"cbf0dfe5",4624:"1b158035",4643:"88eb8427",4651:"3ab894a8",4670:"6c426c64",4696:"53f131d6",4756:"6646b229",4779:"0ff0b4d2",4840:"5f512aed",4845:"cef13eaf",4846:"29930b6c",4849:"1aa505f3",4869:"3d9152ea",4871:"04da5e72",4876:"966d3748",4887:"f3a428f5",4900:"43563054",4923:"77d573dc",4972:"4efb9969",4980:"cca82da0",5056:"b560c725",5156:"f1eee1a7",5178:"896cd70b",5181:"ffbc52c8",5211:"e2420c5e",5221:"6e71a597",5232:"7d5c1e0a",5251:"a8e6633f",5268:"b3e39516",5297:"df055502",5430:"59f55404",5446:"e89fe8a9",5451:"69432f73",5500:"6b087361",5578:"ef7f54be",5585:"ebd7f880",5593:"570ae555",5616:"88a0b466",5617:"0ab72057",5631:"85ae0442",5638:"dfe3fccd",5646:"f85c5c6c",5694:"89e8abe8",5701:"5e9f1997",5729:"4b3fdc93",5733:"355741a9",5777:"22a29e45",5792:"bf87f2dc",5848:"6dad332f",5860:"ad31de6c",5866:"df3082b2",5870:"91e087e4",5904:"79fee0c8",5947:"3ce93cec",6004:"39bbb192",6016:"2784fdcd",6055:"7b996c32",6057:"d0728b5e",6066:"a80ad9f7",6082:"c4b3dd21",6111:"82b6d9e6",6114:"fe6f3420",6146:"5af7c9ff",6174:"55dd15fa",6181:"8f0853f4",6187:"8f496247",6192:"a1018d47",6197:"f2a6c34e",6268:"9053ba4d",6303:"db09ef14",6324:"411dd627",6346:"f35def59",6395:"5e72b52f",6405:"96473883",6406:"48b68d03",6415:"32f24f3e",6469:"8942fcb5",6522:"f7fdabfa",6525:"39c59091",6552:"aebb3045",6572:"2d2f728f",6583:"0f33e774",6643:"6a291df4",6657:"82d71ed9",6669:"0d6b9669",6696:"b1caf9d1",6763:"370332f2",6775:"1bfb31fe",6783:"1ff1e6f1",6820:"37ec1364",6885:"a9bd9606",6902:"06dd2182",6950:"f03f3dc3",6960:"c9bd9016",6994:"1fd253bc",7030:"16cd516a",7031:"e1baad54",7053:"2e4b87f1",7055:"87050eb7",7068:"af9f28c1",7071:"3b470e7e",7106:"7419a4a2",7150:"5eb8aab2",7211:"7b6712cf",7218:"f4544666",7281:"c26713dc",7285:"c2c80a79",7307:"98b9c2b5",7322:"876a19ed",7356:"6e5a1bd7",7367:"501134f1",7374:"38ba318b",7378:"6f25d42e",7397:"291b6630",7399:"8127469c",7406:"2657ead8",7474:"46da60cf",7590:"2ac30950",7595:"9c8629a8",7599:"787a0f87",7626:"4188a719",7666:"1bc34ee2",7732:"cbd725b6",7741:"cdee7eaf",7743:"a0b7d57d",7753:"6afc653b",7764:"20f04df9",7781:"a0de2c3b",7844:"515b40b2",7845:"6a705c80",7886:"1bbc6a2d",7903:"a83de0c2",7909:"3fd00ed3",7916:"d604549c",7918:"6c174508",7934:"389617ba",7942:"601a77ba",7992:"90797ba9",8001:"e5f433ae",8031:"7dbfb182",8037:"da278053",8049:"45fa32c7",8095:"929dd7e9",8108:"0d907cd0",8130:"04a93c74",8136:"2f6d0026",8173:"ea4a3701",8211:"25ba90f9",8262:"df0fb6af",8282:"5fb18a79",8308:"7a0b84d4",8335:"69339167",8339:"36c7b387",8342:"2e414aa7",8351:"9be93492",8357:"29baa3fa",8385:"22ad7ea4",8441:"ff28aebd",8461:"4c5370d1",8473:"9ab8123b",8502:"881211c9",8522:"b936cf4b",8540:"86e66e60",8550:"53e47b26",8562:"7d94221f",8598:"c7dbb0be",8629:"063eba33",8654:"d60848fc",8663:"6534dff6",8669:"7ef5716b",8682:"502cad7f",8687:"3790c3ca",8743:"7c561917",8756:"a353df92",8791:"7b1f1e09",8805:"742ad44a",8846:"2b4efa60",8859:"99b0a643",8951:"ff73a56d",8969:"ffb06d7b",8986:"40bfe885",8991:"61fd22d7",9006:"5694d907",9023:"c82fc8a7",9035:"7291ea3f",9041:"5b77f36e",9076:"0fda46ea",9084:"7e57a85a",9113:"13c585c8",9122:"84d80e98",9138:"e7cfff0d",9178:"16d207f5",9192:"6994b314",9196:"77e6e114",9199:"45696df7",9211:"8ae45ec8",9232:"c6464417",9249:"5f038984",9263:"f7b48baa",9272:"14d54b52",9290:"07ddf17e",9295:"506bca2c",9342:"f2519dfe",9389:"577ee14f",9412:"2cfa90b7",9418:"c695a148",9421:"71cff605",9433:"f4d79510",9441:"897d4fff",9444:"3d70c4d6",9514:"2e8a360b",9521:"dcce292d",9522:"9d5e3074",9547:"219cc36c",9550:"728ff610",9552:"2a19eb7b",9562:"645ef5ff",9578:"cd8ac626",9609:"8a4ce392",9632:"1037bbf8",9685:"74aa1a51",9693:"56ccff9b",9694:"f31a5bac",9716:"707acd30",9773:"e5467673",9782:"36df117d",9815:"618baf7d",9861:"925d9181",9877:"2aa4cf48",9905:"652aae66",9940:"b6f0b372",9946:"3b859552",9999:"f68eafd8"}[e]+".js"},n.miniCssF=function(e){},n.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),n.o=function(e,f){return Object.prototype.hasOwnProperty.call(e,f)},a={},b="site-3:",n.l=function(e,f,c,d){if(a[e])a[e].push(f);else{var t,r;if(void 0!==c)for(var o=document.getElementsByTagName("script"),u=0;u<o.length;u++){var i=o[u];if(i.getAttribute("src")==e||i.getAttribute("data-webpack")==b+c){t=i;break}}t||(r=!0,(t=document.createElement("script")).charset="utf-8",t.timeout=120,n.nc&&t.setAttribute("nonce",n.nc),t.setAttribute("data-webpack",b+c),t.src=e),a[e]=[f];var l=function(f,c){t.onerror=t.onload=null,clearTimeout(s);var b=a[e];if(delete a[e],t.parentNode&&t.parentNode.removeChild(t),b&&b.forEach((function(e){return e(c)})),f)return f(c)},s=setTimeout(l.bind(null,void 0,{type:"timeout",target:t}),12e4);t.onerror=l.bind(null,t.onerror),t.onload=l.bind(null,t.onload),r&&document.head.appendChild(t)}},n.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.p="/",n.gca=function(e){return e={17896441:"7918",23200584:"6066",28655793:"1423",35216708:"8756",58753608:"4010",73663191:"7753",96616036:"1689",ed30e49e:"5",da284785:"10","4bfd050d":"11","4a8bd1f6":"24","935f2afb":"53",b4baf230:"60",d972a432:"63","73d377e5":"115",e494340d:"119","1268352f":"122",ff260964:"123","54f44165":"152","6ee89642":"157","1a41bcf4":"166","7c8189eb":"205","2ff57c08":"248","1c4211eb":"253","131f50d0":"289","213de9a1":"325",a1b73db9:"338","3c400ed9":"349",f51846fe:"355","7e9c80a9":"363",c23b53d6:"368",b3c11919:"372",a363edce:"426","07b748cc":"440","95ce3d34":"453",af1e75d9:"478","0187783a":"520","196689c8":"534","7fa58592":"609",cb952911:"622","87cc2ef4":"637",ffb1bb68:"643",a6fce498:"657","2ba8ffb1":"659",f69994f3:"663","3cef618a":"678",a386696c:"724",dca334c0:"741","35534a6f":"762",d67b6402:"771","816774dc":"792",eba79e96:"796","6beda70c":"833","2956de9a":"879","3d7bb4e0":"906","9dbc92a7":"908","07497906":"931",e39bc689:"937","91c76d4c":"960",c142e639:"975","485f610c":"983",f1ec30d1:"989","035695b8":"1007",b5173ce4:"1059","05c61b00":"1080","313a661a":"1173",f4dc42ca:"1181",bbde899b:"1209",e66d8aa5:"1227",f51baf8e:"1271",edb7b4da:"1293",dd523e5f:"1310","9b42fb08":"1335",f2d60081:"1359","943eb5d2":"1361","9edca4e9":"1401","71605a32":"1406",af30b71e:"1435","421258aa":"1441","41168d35":"1467",a19a348a:"1488","896baf8c":"1493","2afb7445":"1514",cfc9ccfa:"1527","2b1d6972":"1536","7917e5c5":"1573","4808995b":"1594","739e861c":"1614","4e6f80aa":"1626","48e6979d":"1631",f9a3b6b7:"1666",fca08244:"1682","724151f0":"1708","78cfffe1":"1717","213d6dd2":"1744","7e8ff14f":"1751",b3100f29:"1765",aede75d4:"1831",a3335d39:"1845","7cefa220":"1870","2d24b11b":"1896","4cd56fdb":"1898","4882bd62":"1922","818526b6":"1948","0d53d5be":"1951","62a0d553":"1963","724e3ad7":"2009","52fd9c79":"2018",ac63e720:"2047",f47db9e6:"2049",f2d5ac7e:"2057","7bf77d86":"2128","257152cd":"2179","4a224a91":"2207",effdd252:"2211","31b6813e":"2215",a7a77925:"2253",f1c1c644:"2279","5ae0edee":"2288","662da30f":"2320","30c186c7":"2329","3a07cdee":"2354","4f98aae6":"2370","561b6265":"2407","9e5743fa":"2418",cb881008:"2422","3f883def":"2442",e151506d:"2493","492440dc":"2561",c93357d8:"2572","985bff7a":"2575","561c0d70":"2609","7b3ed863":"2657",c34c1aa0:"2662",e52fe1ed:"2682",e1797e98:"2686",d1a9d15c:"2824",e0128c32:"2855","772e10c8":"2867","4831039f":"2882",db40a819:"2893","9fedf7e0":"2913",df1f2a65:"2974","1bb26576":"2993",ba628d47:"3011",dff2692f:"3012",aa2b1be2:"3035",ea5d6149:"3066","1f391b9e":"3085","089cefec":"3096","7589009a":"3132",b2f83641:"3133","6ff4dfcf":"3159","4d70f3cf":"3164","1e033391":"3171","4bf870c6":"3200","79615c67":"3209",d2113218:"3239","43a0a41f":"3258",d8aef0aa:"3310","8b73681b":"3323","7e8a1336":"3331","0d2aa02e":"3349","5ccf8bb0":"3351","8cc504e2":"3390",c53b1d90:"3391","46fd0908":"3404","824fb3c0":"3413",bbef9193:"3498",d91115c6:"3508","8d5383ff":"3515","70ab0033":"3523","342215bd":"3577","65650ba2":"3609","8e8026e2":"3615","59304d55":"3617","8e901aa8":"3641","1b641edf":"3676","09c5a1ad":"3690","0537c41d":"3699","83e74c48":"3757","3cff1016":"3758","0aaf5a35":"3782","685312ca":"3786","1e371f09":"3845","5a1d798c":"3852",e2a8767f:"3877",fb18728e:"3898",d96302cc:"3902",f74a5a7b:"3912",b7fafd37:"3937","5f20ae4e":"3958","951f283b":"4014",bc5400c9:"4026","0d0fc48b":"4050","7537e02a":"4051","61a001f8":"4061","3d9fe30f":"4107","7472e927":"4110",f963ea94:"4123","84741dfb":"4138","20c15017":"4150","9f61d8e1":"4152","7dcbb8ba":"4186",c4f5d8e4:"4195","3bd732bb":"4203","39a4b53d":"4258",e2886f4d:"4377","9ca9b220":"4378",d1db332c:"4380",c56769ee:"4392","1791646b":"4539","9a9953e7":"4546",e526d9fb:"4579","8fde3252":"4592",e64000bb:"4612",be9b1ba5:"4624","65df3d35":"4643","6cdfbbfb":"4651","86a6f4a6":"4670","0d73263b":"4696",c9cfd710:"4756",caa6cc64:"4779","9c4aba92":"4840",a43fb5c1:"4845",ebba64f8:"4846","6b366f12":"4849",e6a6cdb5:"4869","91a9c488":"4871","8ef2f9fb":"4876","9260b226":"4887",bc29171d:"4900","3f753b27":"4923",ba18db30:"4980",fd1c180b:"5056","83a4731b":"5156","0843cb03":"5178","3ec050b2":"5181",c767f061:"5211","86ab4954":"5221",ea0aa512:"5232",ef3f5cc8:"5251","40712b22":"5268","97cfc084":"5297","037dd35f":"5446","9c5aab0e":"5451","1d91761b":"5500","04da809a":"5578","87d8598c":"5585","8af1d301":"5593",d0a2eb8e:"5616",f6025ed5:"5617","50f3a74f":"5631","7f23633c":"5638",d09aafa8:"5646",f7a674b2:"5694","00099f85":"5701","9a26ec38":"5729","13a7da5f":"5733","064c7463":"5777","5e6a0b05":"5792",c78e0dfd:"5848",bd384662:"5860","76097a60":"5866","1c223750":"5870","6f4e447b":"5904","137061ef":"5947","34dce56b":"6004",f6ba9a4b:"6016","638e6f40":"6055","014f04cc":"6057","03f88f06":"6082",bbd70f53:"6111","425c25af":"6114","22d76b2d":"6146",c3917577:"6174",beeb3fc3:"6181","5b25eae8":"6187",b54aa47d:"6192","736b32a3":"6197",e54bfd1f:"6268",f35ad539:"6303",c25ed854:"6324","612db47a":"6346","2e50ccc4":"6395","331b2a3d":"6405","72c0ad31":"6406","850e3a3d":"6415",ca9e19a0:"6469","5684741f":"6522",c87023c4:"6525","136f9a14":"6552","14a50b22":"6572","0012aeda":"6583",d9c8eb9a:"6643","1fe02719":"6657","2440862d":"6669","1ecfc0b9":"6696","1cb4afcc":"6763","6766c2ba":"6775",d78c0d88:"6783","2cc56763":"6820",b7d359f1:"6885",c2065ba5:"6902","24e8d336":"6950","7a19cc40":"6960","1ac84465":"6994",b68c61f5:"7030","11829f95":"7031",e0d9e15f:"7053","8df24095":"7055",bf29d81a:"7068","66ba8f65":"7071",de2333f9:"7106","0c3f6a2e":"7150",cb1fb814:"7211",b217b1df:"7218",b9567f41:"7281","93eb8f00":"7285","14609be1":"7307","3044fa47":"7322","634aee6c":"7356",a5854c89:"7367","3bb6078f":"7374",c29dbf77:"7378","976110e4":"7397",deffa85b:"7399",da8fb6e6:"7406","8d306d14":"7474","69138a9b":"7590",db1d00c4:"7595","7ef71a47":"7599","33c915ea":"7626","14da3ce7":"7666",b672ebd6:"7732","5d50bbf1":"7741",c0fb62f3:"7743",f440e5d3:"7764",b929e89b:"7781",abb3dda4:"7844",a4f4c0c8:"7845","026a1d69":"7886",b218484e:"7903","7b3ecbf1":"7909","7815c2d3":"7916","5acc7ccb":"7934",fcea3b45:"7942","3592d2f2":"7992","6789c389":"8001",e2a686c7:"8031","186b8a18":"8037",ed08832e:"8049","7f6538f4":"8095",c3a4d6bc:"8108",ded32efe:"8130","80055ea8":"8136",a647d08a:"8173","21e4306c":"8211","0066c128":"8262","491836cf":"8282",e94dfc49:"8308","5531b81f":"8335",ee8b4f50:"8339","4ce92582":"8342","2ec0be4c":"8351","3411c643":"8357",d70b4d73:"8385",c4b0d767:"8441","6eb9aa01":"8461",d86f913f:"8473",a9e28e86:"8502",b800115e:"8522","9050039c":"8540","8607f33a":"8550",c90cac61:"8562","05d43200":"8598","11433b40":"8629","1ddcee41":"8654",ffbf113e:"8663",f61db2e5:"8669",c6ff1e84:"8682","17b33b39":"8687","730767f4":"8743","5cf2c6e0":"8791",f8bf4ac5:"8805",a363e5d2:"8846","7c48a47e":"8859",f9a9d4c2:"8951",b022ea46:"8969","2246c66d":"8986","3f48ad20":"8991","17fed085":"9006","87726f30":"9023",a34b52ce:"9035","0e2af38d":"9041","8372258a":"9076","4cf33c28":"9084",bf69fc30:"9113",c7f18df2:"9122",abbc0c33:"9138","6e0bb75c":"9178",ebf8c8a4:"9192","629b6576":"9196","3f07749a":"9199",cf9c4b04:"9211","0a998885":"9232",cbfa528b:"9249",e1e94bbc:"9263","2c6e2254":"9272",b6c885a5:"9290",ee4ead70:"9295","92fa1062":"9342","25be17b9":"9389",ae4d2163:"9412",b26f55a5:"9418","7381f606":"9421","318dfdf9":"9433","94320cd8":"9441","7b53c4c5":"9444","1be78505":"9514",a47a33ba:"9521",dc0ec182:"9522",bb7ded3b:"9547",ef1ef56c:"9550","58efeb0f":"9552","76831a2f":"9562",ca99f506:"9578",a3d44527:"9609","5b83d837":"9632","1547da37":"9685",df9d0e7b:"9693","1020a002":"9694","87d315c4":"9716","4698369b":"9773","286c567a":"9782","07c6cf68":"9815","3630fad3":"9861","2d2c1853":"9877","3521ddbf":"9905","0de1e94b":"9940","8296c7ad":"9946",d288ceb1:"9999"}[e]||e,n.p+n.u(e)},function(){var e={1303:0,532:0};n.f.j=function(f,c){var a=n.o(e,f)?e[f]:void 0;if(0!==a)if(a)c.push(a[2]);else if(/^(1303|532)$/.test(f))e[f]=0;else{var b=new Promise((function(c,b){a=e[f]=[c,b]}));c.push(a[2]=b);var d=n.p+n.u(f),t=new Error;n.l(d,(function(c){if(n.o(e,f)&&(0!==(a=e[f])&&(e[f]=void 0),a)){var b=c&&("load"===c.type?"missing":c.type),d=c&&c.target&&c.target.src;t.message="Loading chunk "+f+" failed.\n("+b+": "+d+")",t.name="ChunkLoadError",t.type=b,t.request=d,a[1](t)}}),"chunk-"+f,f)}},n.O.j=function(f){return 0===e[f]};var f=function(f,c){var a,b,d=c[0],t=c[1],r=c[2],o=0;if(d.some((function(f){return 0!==e[f]}))){for(a in t)n.o(t,a)&&(n.m[a]=t[a]);if(r)var u=r(n)}for(f&&f(c);o<d.length;o++)b=d[o],n.o(e,b)&&e[b]&&e[b][0](),e[b]=0;return n.O(u)},c=self.webpackChunksite_3=self.webpackChunksite_3||[];c.forEach(f.bind(null,0)),c.push=f.bind(null,c.push.bind(c))}()}();
\ No newline at end of file
diff --git a/content/bps/BP-20-github-workflow-for-bookkeeper-proposals/index.html b/content/bps/BP-20-github-workflow-for-bookkeeper-proposals/index.html
index d3280c1..3e371b5 100644
--- a/content/bps/BP-20-github-workflow-for-bookkeeper-proposals/index.html
+++ b/content/bps/BP-20-github-workflow-for-bookkeeper-proposals/index.html
@@ -4,12 +4,12 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">BP-20: github workflow for bookkeeper proposals | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/bps/BP-20-github-workflow-for-bookkeeper-proposals"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docusaurus_tag" content="default"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docsearch:docusaurus_tag" content="default"><meta data-rh="true" property="og:title" content="BP-20: github workflow for bookkeeper proposals | Apache BookKeeper"><meta data-rh="true" name="description" content="Motivation"><meta data-rh="true" property="og:description" content="Motivation"><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/bps/BP-20-github-workflow-for-bookkeeper-proposals"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/bps/BP-20-github-workflow-for-bookkeeper-proposals" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/bps/BP-20-github-workflow-for-bookkeeper-proposals" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
-<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navbar__brand" href="/"><div class="navbar__logo"><img src="/img/bk-logo.svg" alt="Apache Bookkeeper" class="themedImage_ToTc themedImage--light_HNdA"><img src="/img/bk-logo.svg" alt="Apache Bookkeeper" class="themedImage_ToTc themedImage--dark_i4oU"></div><b class="navbar__title text--truncate">Apache BookKeeper</b></a><a class="navbar__item navbar__link" href="/docs/overview/">Documentation</a><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Community</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/community/mailing-lists">Mailing lists</a></li><li><a class="dropdown__link" href="/community/slack">Slack</a></li><li><a href="https://github.com/apache/bookkeeper/issues" target="_blank" rel="noopener noreferrer" class="dropdown__link">Github issues<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a class="dropdown__link" href="/community/releases">Release management</a></li><li><a class="dropdown__link" href="/community/meeting">Community meetings</a></li><li><a class="dropdown__link" href="/community/contributing">Contribution guide</a></li><li><a class="dropdown__link" href="/community/coding-guide">Coding guide</a></li><li><a class="dropdown__link" href="/community/testing">Testing guide</a></li><li><a class="dropdown__link" href="/community/issue-report">Issue report guide</a></li><li><a class="dropdown__link" href="/community/release-guide">Release guide</a></li><li><a class="dropdown__link" href="/community/presentations">Presentations</a></li><li><a class="dropdown__link" href="/community/bookkeeper-proposals">BookKeeper proposals (BP)</a></li></ul></div><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Project</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/project/who">Who are we?</a></li><li><a class="dropdown__link" href="/project/bylaws">Bylaws</a></li><li><a href="https://apache.org/licenses" target="_blank" rel="noopener noreferrer" class="dropdown__link">License<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a class="dropdown__link" href="/project/privacy">Privacy policy</a></li><li><a href="https://www.apache.org/foundation/sponsorship.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Sponsorship<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a href="https://www.apache.org/foundation/thanks.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Thanks<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div></div><div class="navbar__items navbar__items--right"><div class="navbar__item dropdown dropdown--hoverable dropdown--right"><a class="navbar__link" aria-haspopup="true" aria-expanded="false" role="button" href="/docs/admin/autorecovery">4.17.0</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/docs/next/overview/">Next</a></li><li><a class="dropdown__link" href="/docs/admin/autorecovery">4.17.0</a></li><li><a class="dropdown__link" href="/docs/4.16.5/overview/">4.16.5</a></li><li><a class="dropdown__link" href="/docs/4.15.5/overview/">4.15.5</a></li><li><a class="dropdown__link" href="/docs/4.14.8/overview/">4.14.8</a></li><li><a class="dropdown__link" href="/docs/4.13.0/overview/">4.13.0</a></li><li><a class="dropdown__link" href="/docs/4.12.1/overview/">4.12.1</a></li><li><a class="dropdown__link" href="/docs/4.11.1/overview/">4.11.1</a></li><li><a class="dropdown__link" href="/docs/4.10.0/overview/">4.10.0</a></li><li><a class="dropdown__link" href="/docs/4.9.2/overview/">4.9.2</a></li><li><a class="dropdown__link" href="/docs/4.8.2/overview/">4.8.2</a></li><li><a class="dropdown__link" href="/docs/4.7.3/overview/">4.7.3</a></li><li><a class="dropdown__link" href="/docs/4.6.2/overview/">4.6.2</a></li><li><a class="dropdown__link" href="/docs/4.5.1/overview/">4.5.1</a></li></ul></div><a class="navbar__item navbar__link" href="/releases">Download</a><div class="toggle_vylO colorModeToggle_DEke"><button class="clean-btn toggleButton_gllP toggleButtonDisabled_aARS" type="button" disabled="" title="Switch between dark and light mode (currently light mode)" aria-label="Switch between dark and light mode (currently light mode)" aria-live="polite"><svg viewBox="0 0 24 24" width="24" height="24" class="lightToggleIcon_pyhR"><path fill="currentColor" d="M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"></path></svg><svg viewBox="0 0 24 24" width="24" height="24" class="darkToggleIcon_wfgR"><path fill="currentColor" d="M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"></path></svg></button></div><div class="searchBox_ZlJk"></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div></nav><div id="docusaurus_skipToContent_fallback" class="main-wrapper mainWrapper_z2l0"><main class="container container--fluid margin-vert--lg"><div class="row mdxPageWrapper_j9I6"><div class="col col--8"><article><h1>BP-20: github workflow for bookkeeper proposals</h1><h3 class="anchor anchorWithStickyNavbar_LWe7" id="motivation">Motivation<a href="#motivation" class="hash-link" aria-label="Direct link to Motivation" title="Direct link to Motivation">​</a></h3><p>We have a good BP process for introducing enhancements, features. However, this process is not well integrated with our github review process, and the content of a BP
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navbar__brand" href="/"><div class="navbar__logo"><img src="/img/bk-logo.svg" alt="Apache Bookkeeper" class="themedImage_ToTc themedImage--light_HNdA"><img src="/img/bk-logo.svg" alt="Apache Bookkeeper" class="themedImage_ToTc themedImage--dark_i4oU"></div><b class="navbar__title text--truncate">Apache BookKeeper</b></a><a class="navbar__item navbar__link" href="/docs/overview/">Documentation</a><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Community</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/community/mailing-lists">Mailing lists</a></li><li><a class="dropdown__link" href="/community/slack">Slack</a></li><li><a href="https://github.com/apache/bookkeeper/issues" target="_blank" rel="noopener noreferrer" class="dropdown__link">Github issues<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a class="dropdown__link" href="/community/releases">Release management</a></li><li><a class="dropdown__link" href="/community/meeting">Community meetings</a></li><li><a class="dropdown__link" href="/community/contributing">Contribution guide</a></li><li><a class="dropdown__link" href="/community/coding-guide">Coding guide</a></li><li><a class="dropdown__link" href="/community/testing">Testing guide</a></li><li><a class="dropdown__link" href="/community/issue-report">Issue report guide</a></li><li><a class="dropdown__link" href="/community/release-guide">Release guide</a></li><li><a class="dropdown__link" href="/community/presentations">Presentations</a></li><li><a class="dropdown__link" href="/community/bookkeeper-proposals">BookKeeper proposals (BP)</a></li></ul></div><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Project</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/project/who">Who are we?</a></li><li><a class="dropdown__link" href="/project/bylaws">Bylaws</a></li><li><a href="https://apache.org/licenses" target="_blank" rel="noopener noreferrer" class="dropdown__link">License<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a class="dropdown__link" href="/project/privacy">Privacy policy</a></li><li><a href="https://www.apache.org/foundation/sponsorship.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Sponsorship<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a href="https://www.apache.org/foundation/thanks.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Thanks<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div></div><div class="navbar__items navbar__items--right"><div class="navbar__item dropdown dropdown--hoverable dropdown--right"><a class="navbar__link" aria-haspopup="true" aria-expanded="false" role="button" href="/docs/overview/">4.17.0</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/docs/next/overview/">Next</a></li><li><a class="dropdown__link" href="/docs/overview/">4.17.0</a></li><li><a class="dropdown__link" href="/docs/4.16.5/overview/">4.16.5</a></li><li><a class="dropdown__link" href="/docs/4.15.5/overview/">4.15.5</a></li><li><a class="dropdown__link" href="/docs/4.14.8/overview/">4.14.8</a></li><li><a class="dropdown__link" href="/docs/4.13.0/overview/">4.13.0</a></li><li><a class="dropdown__link" href="/docs/4.12.1/overview/">4.12.1</a></li><li><a class="dropdown__link" href="/docs/4.11.1/overview/">4.11.1</a></li><li><a class="dropdown__link" href="/docs/4.10.0/overview/">4.10.0</a></li><li><a class="dropdown__link" href="/docs/4.9.2/overview/">4.9.2</a></li><li><a class="dropdown__link" href="/docs/4.8.2/overview/">4.8.2</a></li><li><a class="dropdown__link" href="/docs/4.7.3/overview/">4.7.3</a></li><li><a class="dropdown__link" href="/docs/4.6.2/overview/">4.6.2</a></li><li><a class="dropdown__link" href="/docs/4.5.1/overview/">4.5.1</a></li></ul></div><a class="navbar__item navbar__link" href="/releases">Download</a><div class="toggle_vylO colorModeToggle_DEke"><button class="clean-btn toggleButton_gllP toggleButtonDisabled_aARS" type="button" disabled="" title="Switch between dark and light mode (currently light mode)" aria-label="Switch between dark and light mode (currently light mode)" aria-live="polite"><svg viewBox="0 0 24 24" width="24" height="24" class="lightToggleIcon_pyhR"><path fill="currentColor" d="M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"></path></svg><svg viewBox="0 0 24 24" width="24" height="24" class="darkToggleIcon_wfgR"><path fill="currentColor" d="M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"></path></svg></button></div><div class="searchBox_ZlJk"></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div></nav><div id="docusaurus_skipToContent_fallback" class="main-wrapper mainWrapper_z2l0"><main class="container container--fluid margin-vert--lg"><div class="row mdxPageWrapper_j9I6"><div class="col col--8"><article><h1>BP-20: github workflow for bookkeeper proposals</h1><h3 class="anchor anchorWithStickyNavbar_LWe7" id="motivation">Motivation<a href="#motivation" class="hash-link" aria-label="Direct link to Motivation" title="Direct link to Motivation">​</a></h3><p>We have a good BP process for introducing enhancements, features. However, this process is not well integrated with our github review process, and the content of a BP
 is not used for documentation. This proposal is to propose moving the BP workflow from ASF wiki to Github. There are a couple of reasons for making this change:</p><ul><li>the ASF cwiki is disconnected from Github, and usually becomes out of date quickly. It isn&#x27;t really caught up with the code changes.
 Most of the content (documentation, contribution/release guides) are already in website, the ASF wiki is only used for tracking BPs and community meeting notes at this point.</li><li>Moving BP workflow from wiki to github will leverage the same github review process as code changes. So developers are easier to review BPs and make comments.</li><li>The BPs can eventually be used as a basis for documentation.</li></ul><h3 class="anchor anchorWithStickyNavbar_LWe7" id="proposed-changes">Proposed Changes<a href="#proposed-changes" class="hash-link" aria-label="Direct link to Proposed Changes" title="Direct link to Proposed Changes">​</a></h3><p>All the BPs are maintained in <code>site/bps</code> directory. To make a bookkeeper proposal, a developer does following steps:</p><ol><li>Create an issue <code>BP-&lt;number&gt;: [capation of bookkeeper proposal]</code>. E.g. <code>BP-1: 64 bits ledger id support</code>.<ul><li>Take the next available BP number from this page.</li><li>Write a brief description about what BP is for in this issue. This issue will be the master issue for tracking the status of this BP and its implementations.
 All the implementations of this BP should be listed and linked to this master issues.</li></ul></li><li>Write the proposal for this BP.<ul><li>Make a copy of the <a href="https://github.com/apache/bookkeeper/tree/master/site/bps/BP-template.md" target="_blank" rel="noopener noreferrer">BP-Template</a>. Name the BP file as <code>BP-&lt;number&gt;-[caption-of-proposal].md</code>.</li></ul><div class="language-shell codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-shell codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">$ </span><span class="token function" style="color:#d73a49">cp</span><span class="token plain"> site/bps/BP-template.md site/bps/BP-xyz-capation-of-proposal.md</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><ul><li>Fill the sections listed in the BP template.<ul><li>issue: replace <code>&lt;issue-number&gt;</code> with the issue number.</li><li>state: &quot;Under Discussion&quot;</li><li>release: leave the release to <code>N/A</code>. you can only mark a release after a BP is implemented.</li></ul></li></ul></li><li>Send a PR for this BP. Following the instructions in the pull request template.<ul><li>add <code>BP</code> label to this BP</li><li>don&#x27;t associate this PR with any release or milestone</li></ul></li><li>You can tag committers on this RP for reviewers, or start a <code>[DISCUSS]</code> thread on Apache mailing list. If you are sending an email, please make sure that the subject
@@ -27,7 +27,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/bps/BP-21-new-api-close-inconsistencies/index.html b/content/bps/BP-21-new-api-close-inconsistencies/index.html
index f3144d8..dc09860 100644
--- a/content/bps/BP-21-new-api-close-inconsistencies/index.html
+++ b/content/bps/BP-21-new-api-close-inconsistencies/index.html
@@ -4,12 +4,12 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">BP-21: New API close inconsistencies | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/bps/BP-21-new-api-close-inconsistencies"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docusaurus_tag" content="default"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docsearch:docusaurus_tag" content="default"><meta data-rh="true" property="og:title" content="BP-21: New API close inconsistencies | Apache BookKeeper"><meta data-rh="true" name="description" content="Rejected due to lack of agreement that the issues raised in the motivation are valid."><meta data-rh="true" property="og:description" content="Rejected due to lack of agreement that the issues raised in the motivation are valid."><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/bps/BP-21-new-api-close-inconsistencies"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/bps/BP-21-new-api-close-inconsistencies" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/bps/BP-21-new-api-close-inconsistencies" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
-<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navbar__brand" href="/"><div class="navbar__logo"><img src="/img/bk-logo.svg" alt="Apache Bookkeeper" class="themedImage_ToTc themedImage--light_HNdA"><img src="/img/bk-logo.svg" alt="Apache Bookkeeper" class="themedImage_ToTc themedImage--dark_i4oU"></div><b class="navbar__title text--truncate">Apache BookKeeper</b></a><a class="navbar__item navbar__link" href="/docs/overview/">Documentation</a><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Community</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/community/mailing-lists">Mailing lists</a></li><li><a class="dropdown__link" href="/community/slack">Slack</a></li><li><a href="https://github.com/apache/bookkeeper/issues" target="_blank" rel="noopener noreferrer" class="dropdown__link">Github issues<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a class="dropdown__link" href="/community/releases">Release management</a></li><li><a class="dropdown__link" href="/community/meeting">Community meetings</a></li><li><a class="dropdown__link" href="/community/contributing">Contribution guide</a></li><li><a class="dropdown__link" href="/community/coding-guide">Coding guide</a></li><li><a class="dropdown__link" href="/community/testing">Testing guide</a></li><li><a class="dropdown__link" href="/community/issue-report">Issue report guide</a></li><li><a class="dropdown__link" href="/community/release-guide">Release guide</a></li><li><a class="dropdown__link" href="/community/presentations">Presentations</a></li><li><a class="dropdown__link" href="/community/bookkeeper-proposals">BookKeeper proposals (BP)</a></li></ul></div><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Project</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/project/who">Who are we?</a></li><li><a class="dropdown__link" href="/project/bylaws">Bylaws</a></li><li><a href="https://apache.org/licenses" target="_blank" rel="noopener noreferrer" class="dropdown__link">License<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a class="dropdown__link" href="/project/privacy">Privacy policy</a></li><li><a href="https://www.apache.org/foundation/sponsorship.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Sponsorship<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a href="https://www.apache.org/foundation/thanks.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Thanks<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div></div><div class="navbar__items navbar__items--right"><div class="navbar__item dropdown dropdown--hoverable dropdown--right"><a class="navbar__link" aria-haspopup="true" aria-expanded="false" role="button" href="/docs/admin/autorecovery">4.17.0</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/docs/next/overview/">Next</a></li><li><a class="dropdown__link" href="/docs/admin/autorecovery">4.17.0</a></li><li><a class="dropdown__link" href="/docs/4.16.5/overview/">4.16.5</a></li><li><a class="dropdown__link" href="/docs/4.15.5/overview/">4.15.5</a></li><li><a class="dropdown__link" href="/docs/4.14.8/overview/">4.14.8</a></li><li><a class="dropdown__link" href="/docs/4.13.0/overview/">4.13.0</a></li><li><a class="dropdown__link" href="/docs/4.12.1/overview/">4.12.1</a></li><li><a class="dropdown__link" href="/docs/4.11.1/overview/">4.11.1</a></li><li><a class="dropdown__link" href="/docs/4.10.0/overview/">4.10.0</a></li><li><a class="dropdown__link" href="/docs/4.9.2/overview/">4.9.2</a></li><li><a class="dropdown__link" href="/docs/4.8.2/overview/">4.8.2</a></li><li><a class="dropdown__link" href="/docs/4.7.3/overview/">4.7.3</a></li><li><a class="dropdown__link" href="/docs/4.6.2/overview/">4.6.2</a></li><li><a class="dropdown__link" href="/docs/4.5.1/overview/">4.5.1</a></li></ul></div><a class="navbar__item navbar__link" href="/releases">Download</a><div class="toggle_vylO colorModeToggle_DEke"><button class="clean-btn toggleButton_gllP toggleButtonDisabled_aARS" type="button" disabled="" title="Switch between dark and light mode (currently light mode)" aria-label="Switch between dark and light mode (currently light mode)" aria-live="polite"><svg viewBox="0 0 24 24" width="24" height="24" class="lightToggleIcon_pyhR"><path fill="currentColor" d="M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"></path></svg><svg viewBox="0 0 24 24" width="24" height="24" class="darkToggleIcon_wfgR"><path fill="currentColor" d="M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"></path></svg></button></div><div class="searchBox_ZlJk"></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div></nav><div id="docusaurus_skipToContent_fallback" class="main-wrapper mainWrapper_z2l0"><main class="container container--fluid margin-vert--lg"><div class="row mdxPageWrapper_j9I6"><div class="col col--8"><article><h1>BP-21: New API close inconsistencies</h1><p>Rejected due to lack of agreement that the issues raised in the motivation are valid.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="motivation">Motivation<a href="#motivation" class="hash-link" aria-label="Direct link to Motivation" title="Direct link to Motivation">​</a></h3><p>The <a href="https://bookkeeper.apache.org/docs/api/javadoc/org/apache/bookkeeper/client/api/Handle.html" target="_blank" rel="noopener noreferrer">Handle</a> interface provides two methods, #asyncClose and #close (overriding AutoCloseable). </p><p>#close is implemented in both <a href="https://bookkeeper.apache.org/docs/api/javadoc/org/apache/bookkeeper/client/api/ReadHandle.html" target="_blank" rel="noopener noreferrer">ReadHandle</a> and <a href="https://bookkeeper.apache.org/docs/api/javadoc/org/apache/bookkeeper/client/api/WriteHandle.html" target="_blank" rel="noopener noreferrer">WriteHandle</a>. </p><ol><li><p>The implementations in ReadHandle and WriteHandle do vastly different things. In ReadHandle, #close unregisters listeners from the ledger manager. This is local resource cleanup, which is in line with what AutoCloseable is designed for. In WriteHandle, #close calls #asyncClose which writes the lastAddConfirmed to the LedgerMetadata. This violates the principle of separation of concerns, and overloads the meaning of the term &quot;close&quot;.</p></li><li><p>#asyncClose is defined in Handle, but it only has any meaning in the WriteHandle. In ReadHandle, closing only cleans up local resources, there&#x27;s no network nor disk I/O involved. The implementation directly calls the callback. It&#x27;s only in WriteHandle that asyncClose has any meaning, and here it is completely different to in ReadHandle.</p></li><li><p>The name #asyncClose is inconsistent with every other method on the new api Handles (append, read, readLastAddConfirmed, etc).</p></li><li><p>#close is part of AutoClosable, so its not unreasonable for it to be used in a try-with-resource block. This means that a ledger closure (i.e. distributed state mutation) could be triggered by an exception within the block. This is nasty.</p></li></ol><p>Overloading the meaning of the term &quot;close&quot; is very problematic on its own. Closing a WriteHandle is a very important part of the BookKeeper protocol, so it should at least have it&#x27;s own <em>verb</em>. I propose that we stop using &quot;closing a ledger&quot; to describe setting the last entry of a ledger, and instead call it &quot;sealing a ledger&quot;.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="public-interfaces">Public Interfaces<a href="#public-interfaces" class="hash-link" aria-label="Direct link to Public Interfaces" title="Direct link to Public Interfaces">​</a></h3><ol><li>Remove Handle#asyncClose</li><li>Add new method WriteHandle#seal.</li></ol><div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">class WriteHandle {</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    CompletableFuture&lt;Void&gt; seal();</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">}</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><h3 class="anchor anchorWithStickyNavbar_LWe7" id="proposed-changes">Proposed Changes<a href="#proposed-changes" class="hash-link" aria-label="Direct link to Proposed Changes" title="Direct link to Proposed Changes">​</a></h3><p>The proposed change remove asyncClose from all handles and replaces it with a async #seal method on WriteHandle. WriteHandle will still have a #close method for cleaning up local resources. </p><p>The proposed usage would look like:</p><div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">try (WriteHandle writer = bk.newCreateLedgerOp().withPassword(&quot;bleh&quot;.getBytes()).execute().get()) {</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    for (int i = 0; i &lt; 100; i++) {</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        writer.append(&quot;foobar&quot;.getBytes());</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    }</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    writer.seal().get(); // no more entries can be added</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">}</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p><em>What if the user forgets to call #seal before closing the ledger?</em></p><p>The ledger is left unsealed. Readers will not read past the end of the unsealed ledger, and they will either try to recover the ledger or wait forever. In both cases, the consistency of the data is guaranteed as the writer would only acknowledge writes which have hit the full ack quorum, which will always be picked up by recovery. If the writer had made any writes that were not acknowledged, it would have halted and not moved onto writing a new ledger.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="compatibility-deprecation-and-migration-plan">Compatibility, Deprecation, and Migration Plan<a href="#compatibility-deprecation-and-migration-plan" class="hash-link" aria-label="Direct link to Compatibility, Deprecation, and Migration Plan" title="Direct link to Compatibility, Deprecation, and Migration Plan">​</a></h3><p>None, this only affects the new api.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="test-plan">Test Plan<a href="#test-plan" class="hash-link" aria-label="Direct link to Test Plan" title="Direct link to Test Plan">​</a></h3><p>The current tests for #asyncClose will be migrated to use #seal().</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="rejected-alternatives">Rejected Alternatives<a href="#rejected-alternatives" class="hash-link" aria-label="Direct link to Rejected Alternatives" title="Direct link to Rejected Alternatives">​</a></h3><p>The alternative is how it is now. The movitation section describes the problem with this.</p></article></div><div class="col col--2"><div class="tableOfContents_bqdL thin-scrollbar"><ul class="table-of-contents table-of-contents__left-border"><li><a href="#motivation" class="table-of-contents__link toc-highlight">Motivation</a></li><li><a href="#public-interfaces" class="table-of-contents__link toc-highlight">Public Interfaces</a></li><li><a href="#proposed-changes" class="table-of-contents__link toc-highlight">Proposed Changes</a></li><li><a href="#compatibility-deprecation-and-migration-plan" class="table-of-contents__link toc-highlight">Compatibility, Deprecation, and Migration Plan</a></li><li><a href="#test-plan" class="table-of-contents__link toc-highlight">Test Plan</a></li><li><a href="#rejected-alternatives" class="table-of-contents__link toc-highlight">Rejected Alternatives</a></li></ul></div></div></div></main></div><footer class="footer footer--dark"><div class="container container-fluid"><div class="row footer__links"><div class="col footer__col"><div class="footer__title">Documentation</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/docs/overview">Overview</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/getting-started/installation">Getting started</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/deployment/manual">Deployment</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/admin/bookies">Administration</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/api/overview">API</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/security/overview">Security</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/development/protocol">Development</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/reference/config">Reference</a></li></ul></div><div class="col footer__col"><div class="footer__title">Community</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/community/mailing-lists">Mailing lists</a></li><li class="footer__item"><a class="footer__link-item" href="/community/slack">Slack</a></li><li class="footer__item"><a href="https://github.com/apache/bookkeeper" target="_blank" rel="noopener noreferrer" class="footer__link-item">Github<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a href="https://twitter.com/asfbookkeeper" target="_blank" rel="noopener noreferrer" class="footer__link-item">Twitter<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div><div class="col footer__col"><div class="footer__title">Project</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/project/who">Who are we?</a></li><li class="footer__item"><a class="footer__link-item" href="/project/bylaws">Bylaws</a></li><li class="footer__item"><a href="https://apache.org/licenses" target="_blank" rel="noopener noreferrer" class="footer__link-item">License<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a class="footer__link-item" href="/project/privacy">Privacy policy</a></li><li class="footer__item"><a href="https://www.apache.org/foundation/sponsorship.html" target="_blank" rel="noopener noreferrer" class="footer__link-item">Sponsorship<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a href="https://www.apache.org/foundation/thanks.html" target="_blank" rel="noopener noreferrer" class="footer__link-item">Thanks<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div></div><div class="footer__bottom text--center"><div class="footer__copyright"><footer class="footer">
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navbar__brand" href="/"><div class="navbar__logo"><img src="/img/bk-logo.svg" alt="Apache Bookkeeper" class="themedImage_ToTc themedImage--light_HNdA"><img src="/img/bk-logo.svg" alt="Apache Bookkeeper" class="themedImage_ToTc themedImage--dark_i4oU"></div><b class="navbar__title text--truncate">Apache BookKeeper</b></a><a class="navbar__item navbar__link" href="/docs/overview/">Documentation</a><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Community</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/community/mailing-lists">Mailing lists</a></li><li><a class="dropdown__link" href="/community/slack">Slack</a></li><li><a href="https://github.com/apache/bookkeeper/issues" target="_blank" rel="noopener noreferrer" class="dropdown__link">Github issues<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a class="dropdown__link" href="/community/releases">Release management</a></li><li><a class="dropdown__link" href="/community/meeting">Community meetings</a></li><li><a class="dropdown__link" href="/community/contributing">Contribution guide</a></li><li><a class="dropdown__link" href="/community/coding-guide">Coding guide</a></li><li><a class="dropdown__link" href="/community/testing">Testing guide</a></li><li><a class="dropdown__link" href="/community/issue-report">Issue report guide</a></li><li><a class="dropdown__link" href="/community/release-guide">Release guide</a></li><li><a class="dropdown__link" href="/community/presentations">Presentations</a></li><li><a class="dropdown__link" href="/community/bookkeeper-proposals">BookKeeper proposals (BP)</a></li></ul></div><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Project</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/project/who">Who are we?</a></li><li><a class="dropdown__link" href="/project/bylaws">Bylaws</a></li><li><a href="https://apache.org/licenses" target="_blank" rel="noopener noreferrer" class="dropdown__link">License<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a class="dropdown__link" href="/project/privacy">Privacy policy</a></li><li><a href="https://www.apache.org/foundation/sponsorship.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Sponsorship<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a href="https://www.apache.org/foundation/thanks.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Thanks<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div></div><div class="navbar__items navbar__items--right"><div class="navbar__item dropdown dropdown--hoverable dropdown--right"><a class="navbar__link" aria-haspopup="true" aria-expanded="false" role="button" href="/docs/overview/">4.17.0</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/docs/next/overview/">Next</a></li><li><a class="dropdown__link" href="/docs/overview/">4.17.0</a></li><li><a class="dropdown__link" href="/docs/4.16.5/overview/">4.16.5</a></li><li><a class="dropdown__link" href="/docs/4.15.5/overview/">4.15.5</a></li><li><a class="dropdown__link" href="/docs/4.14.8/overview/">4.14.8</a></li><li><a class="dropdown__link" href="/docs/4.13.0/overview/">4.13.0</a></li><li><a class="dropdown__link" href="/docs/4.12.1/overview/">4.12.1</a></li><li><a class="dropdown__link" href="/docs/4.11.1/overview/">4.11.1</a></li><li><a class="dropdown__link" href="/docs/4.10.0/overview/">4.10.0</a></li><li><a class="dropdown__link" href="/docs/4.9.2/overview/">4.9.2</a></li><li><a class="dropdown__link" href="/docs/4.8.2/overview/">4.8.2</a></li><li><a class="dropdown__link" href="/docs/4.7.3/overview/">4.7.3</a></li><li><a class="dropdown__link" href="/docs/4.6.2/overview/">4.6.2</a></li><li><a class="dropdown__link" href="/docs/4.5.1/overview/">4.5.1</a></li></ul></div><a class="navbar__item navbar__link" href="/releases">Download</a><div class="toggle_vylO colorModeToggle_DEke"><button class="clean-btn toggleButton_gllP toggleButtonDisabled_aARS" type="button" disabled="" title="Switch between dark and light mode (currently light mode)" aria-label="Switch between dark and light mode (currently light mode)" aria-live="polite"><svg viewBox="0 0 24 24" width="24" height="24" class="lightToggleIcon_pyhR"><path fill="currentColor" d="M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"></path></svg><svg viewBox="0 0 24 24" width="24" height="24" class="darkToggleIcon_wfgR"><path fill="currentColor" d="M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"></path></svg></button></div><div class="searchBox_ZlJk"></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div></nav><div id="docusaurus_skipToContent_fallback" class="main-wrapper mainWrapper_z2l0"><main class="container container--fluid margin-vert--lg"><div class="row mdxPageWrapper_j9I6"><div class="col col--8"><article><h1>BP-21: New API close inconsistencies</h1><p>Rejected due to lack of agreement that the issues raised in the motivation are valid.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="motivation">Motivation<a href="#motivation" class="hash-link" aria-label="Direct link to Motivation" title="Direct link to Motivation">​</a></h3><p>The <a href="https://bookkeeper.apache.org/docs/api/javadoc/org/apache/bookkeeper/client/api/Handle.html" target="_blank" rel="noopener noreferrer">Handle</a> interface provides two methods, #asyncClose and #close (overriding AutoCloseable). </p><p>#close is implemented in both <a href="https://bookkeeper.apache.org/docs/api/javadoc/org/apache/bookkeeper/client/api/ReadHandle.html" target="_blank" rel="noopener noreferrer">ReadHandle</a> and <a href="https://bookkeeper.apache.org/docs/api/javadoc/org/apache/bookkeeper/client/api/WriteHandle.html" target="_blank" rel="noopener noreferrer">WriteHandle</a>. </p><ol><li><p>The implementations in ReadHandle and WriteHandle do vastly different things. In ReadHandle, #close unregisters listeners from the ledger manager. This is local resource cleanup, which is in line with what AutoCloseable is designed for. In WriteHandle, #close calls #asyncClose which writes the lastAddConfirmed to the LedgerMetadata. This violates the principle of separation of concerns, and overloads the meaning of the term &quot;close&quot;.</p></li><li><p>#asyncClose is defined in Handle, but it only has any meaning in the WriteHandle. In ReadHandle, closing only cleans up local resources, there&#x27;s no network nor disk I/O involved. The implementation directly calls the callback. It&#x27;s only in WriteHandle that asyncClose has any meaning, and here it is completely different to in ReadHandle.</p></li><li><p>The name #asyncClose is inconsistent with every other method on the new api Handles (append, read, readLastAddConfirmed, etc).</p></li><li><p>#close is part of AutoClosable, so its not unreasonable for it to be used in a try-with-resource block. This means that a ledger closure (i.e. distributed state mutation) could be triggered by an exception within the block. This is nasty.</p></li></ol><p>Overloading the meaning of the term &quot;close&quot; is very problematic on its own. Closing a WriteHandle is a very important part of the BookKeeper protocol, so it should at least have it&#x27;s own <em>verb</em>. I propose that we stop using &quot;closing a ledger&quot; to describe setting the last entry of a ledger, and instead call it &quot;sealing a ledger&quot;.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="public-interfaces">Public Interfaces<a href="#public-interfaces" class="hash-link" aria-label="Direct link to Public Interfaces" title="Direct link to Public Interfaces">​</a></h3><ol><li>Remove Handle#asyncClose</li><li>Add new method WriteHandle#seal.</li></ol><div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">class WriteHandle {</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    CompletableFuture&lt;Void&gt; seal();</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">}</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><h3 class="anchor anchorWithStickyNavbar_LWe7" id="proposed-changes">Proposed Changes<a href="#proposed-changes" class="hash-link" aria-label="Direct link to Proposed Changes" title="Direct link to Proposed Changes">​</a></h3><p>The proposed change remove asyncClose from all handles and replaces it with a async #seal method on WriteHandle. WriteHandle will still have a #close method for cleaning up local resources. </p><p>The proposed usage would look like:</p><div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">try (WriteHandle writer = bk.newCreateLedgerOp().withPassword(&quot;bleh&quot;.getBytes()).execute().get()) {</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    for (int i = 0; i &lt; 100; i++) {</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        writer.append(&quot;foobar&quot;.getBytes());</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    }</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    writer.seal().get(); // no more entries can be added</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">}</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p><em>What if the user forgets to call #seal before closing the ledger?</em></p><p>The ledger is left unsealed. Readers will not read past the end of the unsealed ledger, and they will either try to recover the ledger or wait forever. In both cases, the consistency of the data is guaranteed as the writer would only acknowledge writes which have hit the full ack quorum, which will always be picked up by recovery. If the writer had made any writes that were not acknowledged, it would have halted and not moved onto writing a new ledger.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="compatibility-deprecation-and-migration-plan">Compatibility, Deprecation, and Migration Plan<a href="#compatibility-deprecation-and-migration-plan" class="hash-link" aria-label="Direct link to Compatibility, Deprecation, and Migration Plan" title="Direct link to Compatibility, Deprecation, and Migration Plan">​</a></h3><p>None, this only affects the new api.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="test-plan">Test Plan<a href="#test-plan" class="hash-link" aria-label="Direct link to Test Plan" title="Direct link to Test Plan">​</a></h3><p>The current tests for #asyncClose will be migrated to use #seal().</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="rejected-alternatives">Rejected Alternatives<a href="#rejected-alternatives" class="hash-link" aria-label="Direct link to Rejected Alternatives" title="Direct link to Rejected Alternatives">​</a></h3><p>The alternative is how it is now. The movitation section describes the problem with this.</p></article></div><div class="col col--2"><div class="tableOfContents_bqdL thin-scrollbar"><ul class="table-of-contents table-of-contents__left-border"><li><a href="#motivation" class="table-of-contents__link toc-highlight">Motivation</a></li><li><a href="#public-interfaces" class="table-of-contents__link toc-highlight">Public Interfaces</a></li><li><a href="#proposed-changes" class="table-of-contents__link toc-highlight">Proposed Changes</a></li><li><a href="#compatibility-deprecation-and-migration-plan" class="table-of-contents__link toc-highlight">Compatibility, Deprecation, and Migration Plan</a></li><li><a href="#test-plan" class="table-of-contents__link toc-highlight">Test Plan</a></li><li><a href="#rejected-alternatives" class="table-of-contents__link toc-highlight">Rejected Alternatives</a></li></ul></div></div></div></main></div><footer class="footer footer--dark"><div class="container container-fluid"><div class="row footer__links"><div class="col footer__col"><div class="footer__title">Documentation</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/docs/overview">Overview</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/getting-started/installation">Getting started</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/deployment/manual">Deployment</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/admin/bookies">Administration</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/api/overview">API</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/security/overview">Security</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/development/protocol">Development</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/reference/config">Reference</a></li></ul></div><div class="col footer__col"><div class="footer__title">Community</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/community/mailing-lists">Mailing lists</a></li><li class="footer__item"><a class="footer__link-item" href="/community/slack">Slack</a></li><li class="footer__item"><a href="https://github.com/apache/bookkeeper" target="_blank" rel="noopener noreferrer" class="footer__link-item">Github<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a href="https://twitter.com/asfbookkeeper" target="_blank" rel="noopener noreferrer" class="footer__link-item">Twitter<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div><div class="col footer__col"><div class="footer__title">Project</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/project/who">Who are we?</a></li><li class="footer__item"><a class="footer__link-item" href="/project/bylaws">Bylaws</a></li><li class="footer__item"><a href="https://apache.org/licenses" target="_blank" rel="noopener noreferrer" class="footer__link-item">License<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a class="footer__link-item" href="/project/privacy">Privacy policy</a></li><li class="footer__item"><a href="https://www.apache.org/foundation/sponsorship.html" target="_blank" rel="noopener noreferrer" class="footer__link-item">Sponsorship<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a href="https://www.apache.org/foundation/thanks.html" target="_blank" rel="noopener noreferrer" class="footer__link-item">Thanks<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div></div><div class="footer__bottom text--center"><div class="footer__copyright"><footer class="footer">
         <div class="container">
           <div class="content has-text-centered">
             <p>
@@ -22,7 +22,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/bps/BP-22-separate-closing-ledgers-from-opening-ledgers/index.html b/content/bps/BP-22-separate-closing-ledgers-from-opening-ledgers/index.html
index c144633..e51b662 100644
--- a/content/bps/BP-22-separate-closing-ledgers-from-opening-ledgers/index.html
+++ b/content/bps/BP-22-separate-closing-ledgers-from-opening-ledgers/index.html
@@ -4,12 +4,12 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">BP-22: Separate closing ledgers from opening ledgers | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/bps/BP-22-separate-closing-ledgers-from-opening-ledgers"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docusaurus_tag" content="default"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docsearch:docusaurus_tag" content="default"><meta data-rh="true" property="og:title" content="BP-22: Separate closing ledgers from opening ledgers | Apache BookKeeper"><meta data-rh="true" name="description" content="Rejected due to lack of agreement that the issues raised in the motivation are valid."><meta data-rh="true" property="og:description" content="Rejected due to lack of agreement that the issues raised in the motivation are valid."><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/bps/BP-22-separate-closing-ledgers-from-opening-ledgers"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/bps/BP-22-separate-closing-ledgers-from-opening-ledgers" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/bps/BP-22-separate-closing-ledgers-from-opening-ledgers" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
-<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navbar__brand" href="/"><div class="navbar__logo"><img src="/img/bk-logo.svg" alt="Apache Bookkeeper" class="themedImage_ToTc themedImage--light_HNdA"><img src="/img/bk-logo.svg" alt="Apache Bookkeeper" class="themedImage_ToTc themedImage--dark_i4oU"></div><b class="navbar__title text--truncate">Apache BookKeeper</b></a><a class="navbar__item navbar__link" href="/docs/overview/">Documentation</a><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Community</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/community/mailing-lists">Mailing lists</a></li><li><a class="dropdown__link" href="/community/slack">Slack</a></li><li><a href="https://github.com/apache/bookkeeper/issues" target="_blank" rel="noopener noreferrer" class="dropdown__link">Github issues<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a class="dropdown__link" href="/community/releases">Release management</a></li><li><a class="dropdown__link" href="/community/meeting">Community meetings</a></li><li><a class="dropdown__link" href="/community/contributing">Contribution guide</a></li><li><a class="dropdown__link" href="/community/coding-guide">Coding guide</a></li><li><a class="dropdown__link" href="/community/testing">Testing guide</a></li><li><a class="dropdown__link" href="/community/issue-report">Issue report guide</a></li><li><a class="dropdown__link" href="/community/release-guide">Release guide</a></li><li><a class="dropdown__link" href="/community/presentations">Presentations</a></li><li><a class="dropdown__link" href="/community/bookkeeper-proposals">BookKeeper proposals (BP)</a></li></ul></div><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Project</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/project/who">Who are we?</a></li><li><a class="dropdown__link" href="/project/bylaws">Bylaws</a></li><li><a href="https://apache.org/licenses" target="_blank" rel="noopener noreferrer" class="dropdown__link">License<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a class="dropdown__link" href="/project/privacy">Privacy policy</a></li><li><a href="https://www.apache.org/foundation/sponsorship.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Sponsorship<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a href="https://www.apache.org/foundation/thanks.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Thanks<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div></div><div class="navbar__items navbar__items--right"><div class="navbar__item dropdown dropdown--hoverable dropdown--right"><a class="navbar__link" aria-haspopup="true" aria-expanded="false" role="button" href="/docs/admin/autorecovery">4.17.0</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/docs/next/overview/">Next</a></li><li><a class="dropdown__link" href="/docs/admin/autorecovery">4.17.0</a></li><li><a class="dropdown__link" href="/docs/4.16.5/overview/">4.16.5</a></li><li><a class="dropdown__link" href="/docs/4.15.5/overview/">4.15.5</a></li><li><a class="dropdown__link" href="/docs/4.14.8/overview/">4.14.8</a></li><li><a class="dropdown__link" href="/docs/4.13.0/overview/">4.13.0</a></li><li><a class="dropdown__link" href="/docs/4.12.1/overview/">4.12.1</a></li><li><a class="dropdown__link" href="/docs/4.11.1/overview/">4.11.1</a></li><li><a class="dropdown__link" href="/docs/4.10.0/overview/">4.10.0</a></li><li><a class="dropdown__link" href="/docs/4.9.2/overview/">4.9.2</a></li><li><a class="dropdown__link" href="/docs/4.8.2/overview/">4.8.2</a></li><li><a class="dropdown__link" href="/docs/4.7.3/overview/">4.7.3</a></li><li><a class="dropdown__link" href="/docs/4.6.2/overview/">4.6.2</a></li><li><a class="dropdown__link" href="/docs/4.5.1/overview/">4.5.1</a></li></ul></div><a class="navbar__item navbar__link" href="/releases">Download</a><div class="toggle_vylO colorModeToggle_DEke"><button class="clean-btn toggleButton_gllP toggleButtonDisabled_aARS" type="button" disabled="" title="Switch between dark and light mode (currently light mode)" aria-label="Switch between dark and light mode (currently light mode)" aria-live="polite"><svg viewBox="0 0 24 24" width="24" height="24" class="lightToggleIcon_pyhR"><path fill="currentColor" d="M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"></path></svg><svg viewBox="0 0 24 24" width="24" height="24" class="darkToggleIcon_wfgR"><path fill="currentColor" d="M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"></path></svg></button></div><div class="searchBox_ZlJk"></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div></nav><div id="docusaurus_skipToContent_fallback" class="main-wrapper mainWrapper_z2l0"><main class="container container--fluid margin-vert--lg"><div class="row mdxPageWrapper_j9I6"><div class="col col--8"><article><h1>BP-22: Separate closing ledgers from opening ledgers</h1><p>Rejected due to lack of agreement that the issues raised in the motivation are valid.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="motivation">Motivation<a href="#motivation" class="hash-link" aria-label="Direct link to Motivation" title="Direct link to Motivation">​</a></h3><p>In the beginning there was openLedger. Opening a ledger meant also figuring out what the last entry of a ledger should be, and writing it to ZooKeeper. For a long time this was the only way to read a ledger. If a writer was writing to the ledger, then anything it wrote after this point would be lost (fencing was added later). The open operation was the natural place to put recovery, as at this point it was only possible to read a recovered ledger.</p><p>openLedgerNoRecovery was added in 2011. This allowed users to read from a ledger as it was being written to, which opened up a bunch of tailing uses cases. Recovery was still the default, because that was what it had always been, and tailing was still considered a secondary usecase. If the user wanted to skip recovery, they&#x27;d have to explicitly call the no recovery method.</p><p>Then the new API arrived. In the new API, tailing is the primary read use case, and recovery has been demoted to a boolean flag on a builder for the open operation. The user is for the most part unaware of recovery.</p><p>However, recovery is still one of the most important aspects of BookKeeper. It is the mechanism on which our Total Order Atomic Broadcast guarantees are built. It deserves to be a bit more prominent than a boolean flag in a builder. It also doesn&#x27;t help that the terminology is inconsistent. The flag is called withRecovery, while the to check if recovery is needed, we call isClosed. Closed itself is ambiguous because it may refer to the local handle, or it may refer to the state of the ledger.</p><p>As tailing is now the primary usecase, we expect that if a writer fails, then whichever node takes over as writer already has a non-recovered ReadHandle open. It would be nice to be able to continue using this Handle to read to the end of the ledger.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="public-interfaces">Public Interfaces<a href="#public-interfaces" class="hash-link" aria-label="Direct link to Public Interfaces" title="Direct link to Public Interfaces">​</a></h3><p>I proposes the removal of OpenOpBuilder#withRecovery()</p><p>A new method on BookKeeper:</p><div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">interface BookKeeper {</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    ...</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    CompletableFuture&lt;Void&gt; seal(ReadHandle handle);</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">}</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><h3 class="anchor anchorWithStickyNavbar_LWe7" id="proposed-changes">Proposed Changes<a href="#proposed-changes" class="hash-link" aria-label="Direct link to Proposed Changes" title="Direct link to Proposed Changes">​</a></h3><p>With the proposed interface changes, every ReadHandle will be opened without recovery. For the tailing usecase, usage will look like.</p><div class="language-java codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-java codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">ReadHandle reader = bk.newOpenLedgerOp().withLedgerId(X).execute().get();</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">long lastReadEntry = -1;</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">while (!leader) {</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    long lac = reader.getLastAddConfirmed();</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    if (lac &gt; lastReadEntry) {</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        LedgerEntries entries = reader.read(lastReadEntry+1, lac).get();</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        doSomethingWithEntries(entries);</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        lastReadEntry = lac;</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    }</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">}</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">assert (leader);</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">bk.seal(reader).get();</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">long lac = reader.readLastAddConfirmed().get();</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">if (lac &gt; lastReadEntry) {</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    LedgerEntries entries = reader.read(lastReadEntry+1, lac).get();</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    doSomethingWithEntries(entries);</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">}</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">WriteHandle writer = bk.newCreateLedgerOp().execute().get();</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>Constrast this with how it is with the current recovery on open mechanism.</p><div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">ReadHandle reader = bk.newOpenLedgerOp().withLedgerId(X).execute().get();</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">long lastReadEntry = -1;</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">while (!leader) {</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    long lac = reader.getLastAddConfirmed();</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    if (lac &gt; lastReadEntry) {</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        LedgerEntries entries = reader.read(lastReadEntry+1, lac).get();</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        doSomethingWithEntries(entries);</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        lastReadEntry = lac;</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    }</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">}</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">assert (leader);</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">reader.close();</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">reader = bk.newOpenLedgerOp().withLedgerId(reader.getId()).withRecovery(true).execute.get();</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">long lac = reader.readLastAddConfirmed().get();</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">if (lac &gt; lastReadEntry) {</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    LedgerEntries entries = reader.read(lastReadEntry+1, lac).get();</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    doSomethingWithEntries(entries);</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">}</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">WriteHandle writer = bk.newCreateLedgerOp().execute().get();</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>The second one is more code, you need to remember to close the previous handle, and the intent of the operation is less clear.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="compatibility-deprecation-and-migration-plan">Compatibility, Deprecation, and Migration Plan<a href="#compatibility-deprecation-and-migration-plan" class="hash-link" aria-label="Direct link to Compatibility, Deprecation, and Migration Plan" title="Direct link to Compatibility, Deprecation, and Migration Plan">​</a></h3><p>This change is only on the new API, so there&#x27;s no promise of compatibility.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="test-plan">Test Plan<a href="#test-plan" class="hash-link" aria-label="Direct link to Test Plan" title="Direct link to Test Plan">​</a></h3><p>This change replaces #withRecovery() with #seal(), so anyplace withRecovery was tested, should be replaced with #seal().</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="rejected-alternatives">Rejected Alternatives<a href="#rejected-alternatives" class="hash-link" aria-label="Direct link to Rejected Alternatives" title="Direct link to Rejected Alternatives">​</a></h3><ul><li>ReadHandle#seal: Rejected as ReadHandle should be side effect free</li><li>OpenOpBuilder#withRecovery(true): Rejected as we want tailing to be default usecase.</li><li>ReadHandle#forceClosed() or BookKeeper#forceClosed(ReadHandle): Rejected as unclear what the state of handle would be after (has ReadHandle#close been called).</li></ul></article></div><div class="col col--2"><div class="tableOfContents_bqdL thin-scrollbar"><ul class="table-of-contents table-of-contents__left-border"><li><a href="#motivation" class="table-of-contents__link toc-highlight">Motivation</a></li><li><a href="#public-interfaces" class="table-of-contents__link toc-highlight">Public Interfaces</a></li><li><a href="#proposed-changes" class="table-of-contents__link toc-highlight">Proposed Changes</a></li><li><a href="#compatibility-deprecation-and-migration-plan" class="table-of-contents__link toc-highlight">Compatibility, Deprecation, and Migration Plan</a></li><li><a href="#test-plan" class="table-of-contents__link toc-highlight">Test Plan</a></li><li><a href="#rejected-alternatives" class="table-of-contents__link toc-highlight">Rejected Alternatives</a></li></ul></div></div></div></main></div><footer class="footer footer--dark"><div class="container container-fluid"><div class="row footer__links"><div class="col footer__col"><div class="footer__title">Documentation</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/docs/overview">Overview</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/getting-started/installation">Getting started</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/deployment/manual">Deployment</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/admin/bookies">Administration</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/api/overview">API</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/security/overview">Security</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/development/protocol">Development</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/reference/config">Reference</a></li></ul></div><div class="col footer__col"><div class="footer__title">Community</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/community/mailing-lists">Mailing lists</a></li><li class="footer__item"><a class="footer__link-item" href="/community/slack">Slack</a></li><li class="footer__item"><a href="https://github.com/apache/bookkeeper" target="_blank" rel="noopener noreferrer" class="footer__link-item">Github<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a href="https://twitter.com/asfbookkeeper" target="_blank" rel="noopener noreferrer" class="footer__link-item">Twitter<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div><div class="col footer__col"><div class="footer__title">Project</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/project/who">Who are we?</a></li><li class="footer__item"><a class="footer__link-item" href="/project/bylaws">Bylaws</a></li><li class="footer__item"><a href="https://apache.org/licenses" target="_blank" rel="noopener noreferrer" class="footer__link-item">License<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a class="footer__link-item" href="/project/privacy">Privacy policy</a></li><li class="footer__item"><a href="https://www.apache.org/foundation/sponsorship.html" target="_blank" rel="noopener noreferrer" class="footer__link-item">Sponsorship<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a href="https://www.apache.org/foundation/thanks.html" target="_blank" rel="noopener noreferrer" class="footer__link-item">Thanks<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div></div><div class="footer__bottom text--center"><div class="footer__copyright"><footer class="footer">
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navbar__brand" href="/"><div class="navbar__logo"><img src="/img/bk-logo.svg" alt="Apache Bookkeeper" class="themedImage_ToTc themedImage--light_HNdA"><img src="/img/bk-logo.svg" alt="Apache Bookkeeper" class="themedImage_ToTc themedImage--dark_i4oU"></div><b class="navbar__title text--truncate">Apache BookKeeper</b></a><a class="navbar__item navbar__link" href="/docs/overview/">Documentation</a><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Community</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/community/mailing-lists">Mailing lists</a></li><li><a class="dropdown__link" href="/community/slack">Slack</a></li><li><a href="https://github.com/apache/bookkeeper/issues" target="_blank" rel="noopener noreferrer" class="dropdown__link">Github issues<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a class="dropdown__link" href="/community/releases">Release management</a></li><li><a class="dropdown__link" href="/community/meeting">Community meetings</a></li><li><a class="dropdown__link" href="/community/contributing">Contribution guide</a></li><li><a class="dropdown__link" href="/community/coding-guide">Coding guide</a></li><li><a class="dropdown__link" href="/community/testing">Testing guide</a></li><li><a class="dropdown__link" href="/community/issue-report">Issue report guide</a></li><li><a class="dropdown__link" href="/community/release-guide">Release guide</a></li><li><a class="dropdown__link" href="/community/presentations">Presentations</a></li><li><a class="dropdown__link" href="/community/bookkeeper-proposals">BookKeeper proposals (BP)</a></li></ul></div><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Project</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/project/who">Who are we?</a></li><li><a class="dropdown__link" href="/project/bylaws">Bylaws</a></li><li><a href="https://apache.org/licenses" target="_blank" rel="noopener noreferrer" class="dropdown__link">License<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a class="dropdown__link" href="/project/privacy">Privacy policy</a></li><li><a href="https://www.apache.org/foundation/sponsorship.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Sponsorship<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a href="https://www.apache.org/foundation/thanks.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Thanks<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div></div><div class="navbar__items navbar__items--right"><div class="navbar__item dropdown dropdown--hoverable dropdown--right"><a class="navbar__link" aria-haspopup="true" aria-expanded="false" role="button" href="/docs/overview/">4.17.0</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/docs/next/overview/">Next</a></li><li><a class="dropdown__link" href="/docs/overview/">4.17.0</a></li><li><a class="dropdown__link" href="/docs/4.16.5/overview/">4.16.5</a></li><li><a class="dropdown__link" href="/docs/4.15.5/overview/">4.15.5</a></li><li><a class="dropdown__link" href="/docs/4.14.8/overview/">4.14.8</a></li><li><a class="dropdown__link" href="/docs/4.13.0/overview/">4.13.0</a></li><li><a class="dropdown__link" href="/docs/4.12.1/overview/">4.12.1</a></li><li><a class="dropdown__link" href="/docs/4.11.1/overview/">4.11.1</a></li><li><a class="dropdown__link" href="/docs/4.10.0/overview/">4.10.0</a></li><li><a class="dropdown__link" href="/docs/4.9.2/overview/">4.9.2</a></li><li><a class="dropdown__link" href="/docs/4.8.2/overview/">4.8.2</a></li><li><a class="dropdown__link" href="/docs/4.7.3/overview/">4.7.3</a></li><li><a class="dropdown__link" href="/docs/4.6.2/overview/">4.6.2</a></li><li><a class="dropdown__link" href="/docs/4.5.1/overview/">4.5.1</a></li></ul></div><a class="navbar__item navbar__link" href="/releases">Download</a><div class="toggle_vylO colorModeToggle_DEke"><button class="clean-btn toggleButton_gllP toggleButtonDisabled_aARS" type="button" disabled="" title="Switch between dark and light mode (currently light mode)" aria-label="Switch between dark and light mode (currently light mode)" aria-live="polite"><svg viewBox="0 0 24 24" width="24" height="24" class="lightToggleIcon_pyhR"><path fill="currentColor" d="M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"></path></svg><svg viewBox="0 0 24 24" width="24" height="24" class="darkToggleIcon_wfgR"><path fill="currentColor" d="M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"></path></svg></button></div><div class="searchBox_ZlJk"></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div></nav><div id="docusaurus_skipToContent_fallback" class="main-wrapper mainWrapper_z2l0"><main class="container container--fluid margin-vert--lg"><div class="row mdxPageWrapper_j9I6"><div class="col col--8"><article><h1>BP-22: Separate closing ledgers from opening ledgers</h1><p>Rejected due to lack of agreement that the issues raised in the motivation are valid.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="motivation">Motivation<a href="#motivation" class="hash-link" aria-label="Direct link to Motivation" title="Direct link to Motivation">​</a></h3><p>In the beginning there was openLedger. Opening a ledger meant also figuring out what the last entry of a ledger should be, and writing it to ZooKeeper. For a long time this was the only way to read a ledger. If a writer was writing to the ledger, then anything it wrote after this point would be lost (fencing was added later). The open operation was the natural place to put recovery, as at this point it was only possible to read a recovered ledger.</p><p>openLedgerNoRecovery was added in 2011. This allowed users to read from a ledger as it was being written to, which opened up a bunch of tailing uses cases. Recovery was still the default, because that was what it had always been, and tailing was still considered a secondary usecase. If the user wanted to skip recovery, they&#x27;d have to explicitly call the no recovery method.</p><p>Then the new API arrived. In the new API, tailing is the primary read use case, and recovery has been demoted to a boolean flag on a builder for the open operation. The user is for the most part unaware of recovery.</p><p>However, recovery is still one of the most important aspects of BookKeeper. It is the mechanism on which our Total Order Atomic Broadcast guarantees are built. It deserves to be a bit more prominent than a boolean flag in a builder. It also doesn&#x27;t help that the terminology is inconsistent. The flag is called withRecovery, while the to check if recovery is needed, we call isClosed. Closed itself is ambiguous because it may refer to the local handle, or it may refer to the state of the ledger.</p><p>As tailing is now the primary usecase, we expect that if a writer fails, then whichever node takes over as writer already has a non-recovered ReadHandle open. It would be nice to be able to continue using this Handle to read to the end of the ledger.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="public-interfaces">Public Interfaces<a href="#public-interfaces" class="hash-link" aria-label="Direct link to Public Interfaces" title="Direct link to Public Interfaces">​</a></h3><p>I proposes the removal of OpenOpBuilder#withRecovery()</p><p>A new method on BookKeeper:</p><div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">interface BookKeeper {</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    ...</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    CompletableFuture&lt;Void&gt; seal(ReadHandle handle);</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">}</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><h3 class="anchor anchorWithStickyNavbar_LWe7" id="proposed-changes">Proposed Changes<a href="#proposed-changes" class="hash-link" aria-label="Direct link to Proposed Changes" title="Direct link to Proposed Changes">​</a></h3><p>With the proposed interface changes, every ReadHandle will be opened without recovery. For the tailing usecase, usage will look like.</p><div class="language-java codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-java codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">ReadHandle reader = bk.newOpenLedgerOp().withLedgerId(X).execute().get();</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">long lastReadEntry = -1;</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">while (!leader) {</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    long lac = reader.getLastAddConfirmed();</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    if (lac &gt; lastReadEntry) {</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        LedgerEntries entries = reader.read(lastReadEntry+1, lac).get();</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        doSomethingWithEntries(entries);</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        lastReadEntry = lac;</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    }</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">}</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">assert (leader);</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">bk.seal(reader).get();</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">long lac = reader.readLastAddConfirmed().get();</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">if (lac &gt; lastReadEntry) {</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    LedgerEntries entries = reader.read(lastReadEntry+1, lac).get();</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    doSomethingWithEntries(entries);</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">}</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">WriteHandle writer = bk.newCreateLedgerOp().execute().get();</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>Constrast this with how it is with the current recovery on open mechanism.</p><div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">ReadHandle reader = bk.newOpenLedgerOp().withLedgerId(X).execute().get();</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">long lastReadEntry = -1;</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">while (!leader) {</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    long lac = reader.getLastAddConfirmed();</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    if (lac &gt; lastReadEntry) {</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        LedgerEntries entries = reader.read(lastReadEntry+1, lac).get();</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        doSomethingWithEntries(entries);</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        lastReadEntry = lac;</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    }</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">}</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">assert (leader);</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">reader.close();</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">reader = bk.newOpenLedgerOp().withLedgerId(reader.getId()).withRecovery(true).execute.get();</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">long lac = reader.readLastAddConfirmed().get();</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">if (lac &gt; lastReadEntry) {</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    LedgerEntries entries = reader.read(lastReadEntry+1, lac).get();</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    doSomethingWithEntries(entries);</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">}</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">WriteHandle writer = bk.newCreateLedgerOp().execute().get();</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>The second one is more code, you need to remember to close the previous handle, and the intent of the operation is less clear.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="compatibility-deprecation-and-migration-plan">Compatibility, Deprecation, and Migration Plan<a href="#compatibility-deprecation-and-migration-plan" class="hash-link" aria-label="Direct link to Compatibility, Deprecation, and Migration Plan" title="Direct link to Compatibility, Deprecation, and Migration Plan">​</a></h3><p>This change is only on the new API, so there&#x27;s no promise of compatibility.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="test-plan">Test Plan<a href="#test-plan" class="hash-link" aria-label="Direct link to Test Plan" title="Direct link to Test Plan">​</a></h3><p>This change replaces #withRecovery() with #seal(), so anyplace withRecovery was tested, should be replaced with #seal().</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="rejected-alternatives">Rejected Alternatives<a href="#rejected-alternatives" class="hash-link" aria-label="Direct link to Rejected Alternatives" title="Direct link to Rejected Alternatives">​</a></h3><ul><li>ReadHandle#seal: Rejected as ReadHandle should be side effect free</li><li>OpenOpBuilder#withRecovery(true): Rejected as we want tailing to be default usecase.</li><li>ReadHandle#forceClosed() or BookKeeper#forceClosed(ReadHandle): Rejected as unclear what the state of handle would be after (has ReadHandle#close been called).</li></ul></article></div><div class="col col--2"><div class="tableOfContents_bqdL thin-scrollbar"><ul class="table-of-contents table-of-contents__left-border"><li><a href="#motivation" class="table-of-contents__link toc-highlight">Motivation</a></li><li><a href="#public-interfaces" class="table-of-contents__link toc-highlight">Public Interfaces</a></li><li><a href="#proposed-changes" class="table-of-contents__link toc-highlight">Proposed Changes</a></li><li><a href="#compatibility-deprecation-and-migration-plan" class="table-of-contents__link toc-highlight">Compatibility, Deprecation, and Migration Plan</a></li><li><a href="#test-plan" class="table-of-contents__link toc-highlight">Test Plan</a></li><li><a href="#rejected-alternatives" class="table-of-contents__link toc-highlight">Rejected Alternatives</a></li></ul></div></div></div></main></div><footer class="footer footer--dark"><div class="container container-fluid"><div class="row footer__links"><div class="col footer__col"><div class="footer__title">Documentation</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/docs/overview">Overview</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/getting-started/installation">Getting started</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/deployment/manual">Deployment</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/admin/bookies">Administration</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/api/overview">API</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/security/overview">Security</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/development/protocol">Development</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/reference/config">Reference</a></li></ul></div><div class="col footer__col"><div class="footer__title">Community</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/community/mailing-lists">Mailing lists</a></li><li class="footer__item"><a class="footer__link-item" href="/community/slack">Slack</a></li><li class="footer__item"><a href="https://github.com/apache/bookkeeper" target="_blank" rel="noopener noreferrer" class="footer__link-item">Github<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a href="https://twitter.com/asfbookkeeper" target="_blank" rel="noopener noreferrer" class="footer__link-item">Twitter<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div><div class="col footer__col"><div class="footer__title">Project</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/project/who">Who are we?</a></li><li class="footer__item"><a class="footer__link-item" href="/project/bylaws">Bylaws</a></li><li class="footer__item"><a href="https://apache.org/licenses" target="_blank" rel="noopener noreferrer" class="footer__link-item">License<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a class="footer__link-item" href="/project/privacy">Privacy policy</a></li><li class="footer__item"><a href="https://www.apache.org/foundation/sponsorship.html" target="_blank" rel="noopener noreferrer" class="footer__link-item">Sponsorship<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a href="https://www.apache.org/foundation/thanks.html" target="_blank" rel="noopener noreferrer" class="footer__link-item">Thanks<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div></div><div class="footer__bottom text--center"><div class="footer__copyright"><footer class="footer">
         <div class="container">
           <div class="content has-text-centered">
             <p>
@@ -22,7 +22,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/bps/BP-25-MovingChecksumToProto/index.html b/content/bps/BP-25-MovingChecksumToProto/index.html
index b6f2eb6..5b6cc92 100644
--- a/content/bps/BP-25-MovingChecksumToProto/index.html
+++ b/content/bps/BP-25-MovingChecksumToProto/index.html
@@ -4,12 +4,12 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">BP-25: MovingChecksumToProto--Refactor the checksum part of bookkeeper | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/bps/BP-25-MovingChecksumToProto"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docusaurus_tag" content="default"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docsearch:docusaurus_tag" content="default"><meta data-rh="true" property="og:title" content="BP-25: MovingChecksumToProto--Refactor the checksum part of bookkeeper | Apache BookKeeper"><meta data-rh="true" name="description" content="Motivation"><meta data-rh="true" property="og:description" content="Motivation"><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/bps/BP-25-MovingChecksumToProto"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/bps/BP-25-MovingChecksumToProto" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/bps/BP-25-MovingChecksumToProto" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
-<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navbar__brand" href="/"><div class="navbar__logo"><img src="/img/bk-logo.svg" alt="Apache Bookkeeper" class="themedImage_ToTc themedImage--light_HNdA"><img src="/img/bk-logo.svg" alt="Apache Bookkeeper" class="themedImage_ToTc themedImage--dark_i4oU"></div><b class="navbar__title text--truncate">Apache BookKeeper</b></a><a class="navbar__item navbar__link" href="/docs/overview/">Documentation</a><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Community</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/community/mailing-lists">Mailing lists</a></li><li><a class="dropdown__link" href="/community/slack">Slack</a></li><li><a href="https://github.com/apache/bookkeeper/issues" target="_blank" rel="noopener noreferrer" class="dropdown__link">Github issues<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a class="dropdown__link" href="/community/releases">Release management</a></li><li><a class="dropdown__link" href="/community/meeting">Community meetings</a></li><li><a class="dropdown__link" href="/community/contributing">Contribution guide</a></li><li><a class="dropdown__link" href="/community/coding-guide">Coding guide</a></li><li><a class="dropdown__link" href="/community/testing">Testing guide</a></li><li><a class="dropdown__link" href="/community/issue-report">Issue report guide</a></li><li><a class="dropdown__link" href="/community/release-guide">Release guide</a></li><li><a class="dropdown__link" href="/community/presentations">Presentations</a></li><li><a class="dropdown__link" href="/community/bookkeeper-proposals">BookKeeper proposals (BP)</a></li></ul></div><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Project</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/project/who">Who are we?</a></li><li><a class="dropdown__link" href="/project/bylaws">Bylaws</a></li><li><a href="https://apache.org/licenses" target="_blank" rel="noopener noreferrer" class="dropdown__link">License<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a class="dropdown__link" href="/project/privacy">Privacy policy</a></li><li><a href="https://www.apache.org/foundation/sponsorship.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Sponsorship<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a href="https://www.apache.org/foundation/thanks.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Thanks<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div></div><div class="navbar__items navbar__items--right"><div class="navbar__item dropdown dropdown--hoverable dropdown--right"><a class="navbar__link" aria-haspopup="true" aria-expanded="false" role="button" href="/docs/admin/autorecovery">4.17.0</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/docs/next/overview/">Next</a></li><li><a class="dropdown__link" href="/docs/admin/autorecovery">4.17.0</a></li><li><a class="dropdown__link" href="/docs/4.16.5/overview/">4.16.5</a></li><li><a class="dropdown__link" href="/docs/4.15.5/overview/">4.15.5</a></li><li><a class="dropdown__link" href="/docs/4.14.8/overview/">4.14.8</a></li><li><a class="dropdown__link" href="/docs/4.13.0/overview/">4.13.0</a></li><li><a class="dropdown__link" href="/docs/4.12.1/overview/">4.12.1</a></li><li><a class="dropdown__link" href="/docs/4.11.1/overview/">4.11.1</a></li><li><a class="dropdown__link" href="/docs/4.10.0/overview/">4.10.0</a></li><li><a class="dropdown__link" href="/docs/4.9.2/overview/">4.9.2</a></li><li><a class="dropdown__link" href="/docs/4.8.2/overview/">4.8.2</a></li><li><a class="dropdown__link" href="/docs/4.7.3/overview/">4.7.3</a></li><li><a class="dropdown__link" href="/docs/4.6.2/overview/">4.6.2</a></li><li><a class="dropdown__link" href="/docs/4.5.1/overview/">4.5.1</a></li></ul></div><a class="navbar__item navbar__link" href="/releases">Download</a><div class="toggle_vylO colorModeToggle_DEke"><button class="clean-btn toggleButton_gllP toggleButtonDisabled_aARS" type="button" disabled="" title="Switch between dark and light mode (currently light mode)" aria-label="Switch between dark and light mode (currently light mode)" aria-live="polite"><svg viewBox="0 0 24 24" width="24" height="24" class="lightToggleIcon_pyhR"><path fill="currentColor" d="M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"></path></svg><svg viewBox="0 0 24 24" width="24" height="24" class="darkToggleIcon_wfgR"><path fill="currentColor" d="M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"></path></svg></button></div><div class="searchBox_ZlJk"></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div></nav><div id="docusaurus_skipToContent_fallback" class="main-wrapper mainWrapper_z2l0"><main class="container container--fluid margin-vert--lg"><div class="row mdxPageWrapper_j9I6"><div class="col col--8"><article><h1>BP-25: MovingChecksumToProto--Refactor the checksum part of bookkeeper</h1><h3 class="anchor anchorWithStickyNavbar_LWe7" id="motivation">Motivation<a href="#motivation" class="hash-link" aria-label="Direct link to Motivation" title="Direct link to Motivation">​</a></h3><p>Current the checksum implementation is in client module while the checksum semantic is more close to protocol. Moreover, moving the checksum implementation to protocol will avoid server module&#x27;s dependency to client module when doing checksum in server side.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="public-interfaces">Public Interfaces<a href="#public-interfaces" class="hash-link" aria-label="Direct link to Public Interfaces" title="Direct link to Public Interfaces">​</a></h3><p>An internal refactor not affecting public interfaces.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="proposed-changes">Proposed Changes<a href="#proposed-changes" class="hash-link" aria-label="Direct link to Proposed Changes" title="Direct link to Proposed Changes">​</a></h3><p>Move the DigestManager and related classes to proto module</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="compatibility-deprecation-and-migration-plan">Compatibility, Deprecation, and Migration Plan<a href="#compatibility-deprecation-and-migration-plan" class="hash-link" aria-label="Direct link to Compatibility, Deprecation, and Migration Plan" title="Direct link to Compatibility, Deprecation, and Migration Plan">​</a></h3><p>N/A</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="test-plan">Test Plan<a href="#test-plan" class="hash-link" aria-label="Direct link to Test Plan" title="Direct link to Test Plan">​</a></h3><p>The original all tests should work as before.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="rejected-alternatives">Rejected Alternatives<a href="#rejected-alternatives" class="hash-link" aria-label="Direct link to Rejected Alternatives" title="Direct link to Rejected Alternatives">​</a></h3><p>N/A</p></article></div><div class="col col--2"><div class="tableOfContents_bqdL thin-scrollbar"><ul class="table-of-contents table-of-contents__left-border"><li><a href="#motivation" class="table-of-contents__link toc-highlight">Motivation</a></li><li><a href="#public-interfaces" class="table-of-contents__link toc-highlight">Public Interfaces</a></li><li><a href="#proposed-changes" class="table-of-contents__link toc-highlight">Proposed Changes</a></li><li><a href="#compatibility-deprecation-and-migration-plan" class="table-of-contents__link toc-highlight">Compatibility, Deprecation, and Migration Plan</a></li><li><a href="#test-plan" class="table-of-contents__link toc-highlight">Test Plan</a></li><li><a href="#rejected-alternatives" class="table-of-contents__link toc-highlight">Rejected Alternatives</a></li></ul></div></div></div></main></div><footer class="footer footer--dark"><div class="container container-fluid"><div class="row footer__links"><div class="col footer__col"><div class="footer__title">Documentation</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/docs/overview">Overview</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/getting-started/installation">Getting started</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/deployment/manual">Deployment</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/admin/bookies">Administration</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/api/overview">API</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/security/overview">Security</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/development/protocol">Development</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/reference/config">Reference</a></li></ul></div><div class="col footer__col"><div class="footer__title">Community</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/community/mailing-lists">Mailing lists</a></li><li class="footer__item"><a class="footer__link-item" href="/community/slack">Slack</a></li><li class="footer__item"><a href="https://github.com/apache/bookkeeper" target="_blank" rel="noopener noreferrer" class="footer__link-item">Github<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a href="https://twitter.com/asfbookkeeper" target="_blank" rel="noopener noreferrer" class="footer__link-item">Twitter<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div><div class="col footer__col"><div class="footer__title">Project</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/project/who">Who are we?</a></li><li class="footer__item"><a class="footer__link-item" href="/project/bylaws">Bylaws</a></li><li class="footer__item"><a href="https://apache.org/licenses" target="_blank" rel="noopener noreferrer" class="footer__link-item">License<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a class="footer__link-item" href="/project/privacy">Privacy policy</a></li><li class="footer__item"><a href="https://www.apache.org/foundation/sponsorship.html" target="_blank" rel="noopener noreferrer" class="footer__link-item">Sponsorship<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a href="https://www.apache.org/foundation/thanks.html" target="_blank" rel="noopener noreferrer" class="footer__link-item">Thanks<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div></div><div class="footer__bottom text--center"><div class="footer__copyright"><footer class="footer">
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navbar__brand" href="/"><div class="navbar__logo"><img src="/img/bk-logo.svg" alt="Apache Bookkeeper" class="themedImage_ToTc themedImage--light_HNdA"><img src="/img/bk-logo.svg" alt="Apache Bookkeeper" class="themedImage_ToTc themedImage--dark_i4oU"></div><b class="navbar__title text--truncate">Apache BookKeeper</b></a><a class="navbar__item navbar__link" href="/docs/overview/">Documentation</a><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Community</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/community/mailing-lists">Mailing lists</a></li><li><a class="dropdown__link" href="/community/slack">Slack</a></li><li><a href="https://github.com/apache/bookkeeper/issues" target="_blank" rel="noopener noreferrer" class="dropdown__link">Github issues<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a class="dropdown__link" href="/community/releases">Release management</a></li><li><a class="dropdown__link" href="/community/meeting">Community meetings</a></li><li><a class="dropdown__link" href="/community/contributing">Contribution guide</a></li><li><a class="dropdown__link" href="/community/coding-guide">Coding guide</a></li><li><a class="dropdown__link" href="/community/testing">Testing guide</a></li><li><a class="dropdown__link" href="/community/issue-report">Issue report guide</a></li><li><a class="dropdown__link" href="/community/release-guide">Release guide</a></li><li><a class="dropdown__link" href="/community/presentations">Presentations</a></li><li><a class="dropdown__link" href="/community/bookkeeper-proposals">BookKeeper proposals (BP)</a></li></ul></div><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Project</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/project/who">Who are we?</a></li><li><a class="dropdown__link" href="/project/bylaws">Bylaws</a></li><li><a href="https://apache.org/licenses" target="_blank" rel="noopener noreferrer" class="dropdown__link">License<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a class="dropdown__link" href="/project/privacy">Privacy policy</a></li><li><a href="https://www.apache.org/foundation/sponsorship.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Sponsorship<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a href="https://www.apache.org/foundation/thanks.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Thanks<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div></div><div class="navbar__items navbar__items--right"><div class="navbar__item dropdown dropdown--hoverable dropdown--right"><a class="navbar__link" aria-haspopup="true" aria-expanded="false" role="button" href="/docs/overview/">4.17.0</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/docs/next/overview/">Next</a></li><li><a class="dropdown__link" href="/docs/overview/">4.17.0</a></li><li><a class="dropdown__link" href="/docs/4.16.5/overview/">4.16.5</a></li><li><a class="dropdown__link" href="/docs/4.15.5/overview/">4.15.5</a></li><li><a class="dropdown__link" href="/docs/4.14.8/overview/">4.14.8</a></li><li><a class="dropdown__link" href="/docs/4.13.0/overview/">4.13.0</a></li><li><a class="dropdown__link" href="/docs/4.12.1/overview/">4.12.1</a></li><li><a class="dropdown__link" href="/docs/4.11.1/overview/">4.11.1</a></li><li><a class="dropdown__link" href="/docs/4.10.0/overview/">4.10.0</a></li><li><a class="dropdown__link" href="/docs/4.9.2/overview/">4.9.2</a></li><li><a class="dropdown__link" href="/docs/4.8.2/overview/">4.8.2</a></li><li><a class="dropdown__link" href="/docs/4.7.3/overview/">4.7.3</a></li><li><a class="dropdown__link" href="/docs/4.6.2/overview/">4.6.2</a></li><li><a class="dropdown__link" href="/docs/4.5.1/overview/">4.5.1</a></li></ul></div><a class="navbar__item navbar__link" href="/releases">Download</a><div class="toggle_vylO colorModeToggle_DEke"><button class="clean-btn toggleButton_gllP toggleButtonDisabled_aARS" type="button" disabled="" title="Switch between dark and light mode (currently light mode)" aria-label="Switch between dark and light mode (currently light mode)" aria-live="polite"><svg viewBox="0 0 24 24" width="24" height="24" class="lightToggleIcon_pyhR"><path fill="currentColor" d="M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"></path></svg><svg viewBox="0 0 24 24" width="24" height="24" class="darkToggleIcon_wfgR"><path fill="currentColor" d="M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"></path></svg></button></div><div class="searchBox_ZlJk"></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div></nav><div id="docusaurus_skipToContent_fallback" class="main-wrapper mainWrapper_z2l0"><main class="container container--fluid margin-vert--lg"><div class="row mdxPageWrapper_j9I6"><div class="col col--8"><article><h1>BP-25: MovingChecksumToProto--Refactor the checksum part of bookkeeper</h1><h3 class="anchor anchorWithStickyNavbar_LWe7" id="motivation">Motivation<a href="#motivation" class="hash-link" aria-label="Direct link to Motivation" title="Direct link to Motivation">​</a></h3><p>Current the checksum implementation is in client module while the checksum semantic is more close to protocol. Moreover, moving the checksum implementation to protocol will avoid server module&#x27;s dependency to client module when doing checksum in server side.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="public-interfaces">Public Interfaces<a href="#public-interfaces" class="hash-link" aria-label="Direct link to Public Interfaces" title="Direct link to Public Interfaces">​</a></h3><p>An internal refactor not affecting public interfaces.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="proposed-changes">Proposed Changes<a href="#proposed-changes" class="hash-link" aria-label="Direct link to Proposed Changes" title="Direct link to Proposed Changes">​</a></h3><p>Move the DigestManager and related classes to proto module</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="compatibility-deprecation-and-migration-plan">Compatibility, Deprecation, and Migration Plan<a href="#compatibility-deprecation-and-migration-plan" class="hash-link" aria-label="Direct link to Compatibility, Deprecation, and Migration Plan" title="Direct link to Compatibility, Deprecation, and Migration Plan">​</a></h3><p>N/A</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="test-plan">Test Plan<a href="#test-plan" class="hash-link" aria-label="Direct link to Test Plan" title="Direct link to Test Plan">​</a></h3><p>The original all tests should work as before.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="rejected-alternatives">Rejected Alternatives<a href="#rejected-alternatives" class="hash-link" aria-label="Direct link to Rejected Alternatives" title="Direct link to Rejected Alternatives">​</a></h3><p>N/A</p></article></div><div class="col col--2"><div class="tableOfContents_bqdL thin-scrollbar"><ul class="table-of-contents table-of-contents__left-border"><li><a href="#motivation" class="table-of-contents__link toc-highlight">Motivation</a></li><li><a href="#public-interfaces" class="table-of-contents__link toc-highlight">Public Interfaces</a></li><li><a href="#proposed-changes" class="table-of-contents__link toc-highlight">Proposed Changes</a></li><li><a href="#compatibility-deprecation-and-migration-plan" class="table-of-contents__link toc-highlight">Compatibility, Deprecation, and Migration Plan</a></li><li><a href="#test-plan" class="table-of-contents__link toc-highlight">Test Plan</a></li><li><a href="#rejected-alternatives" class="table-of-contents__link toc-highlight">Rejected Alternatives</a></li></ul></div></div></div></main></div><footer class="footer footer--dark"><div class="container container-fluid"><div class="row footer__links"><div class="col footer__col"><div class="footer__title">Documentation</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/docs/overview">Overview</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/getting-started/installation">Getting started</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/deployment/manual">Deployment</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/admin/bookies">Administration</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/api/overview">API</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/security/overview">Security</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/development/protocol">Development</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/reference/config">Reference</a></li></ul></div><div class="col footer__col"><div class="footer__title">Community</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/community/mailing-lists">Mailing lists</a></li><li class="footer__item"><a class="footer__link-item" href="/community/slack">Slack</a></li><li class="footer__item"><a href="https://github.com/apache/bookkeeper" target="_blank" rel="noopener noreferrer" class="footer__link-item">Github<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a href="https://twitter.com/asfbookkeeper" target="_blank" rel="noopener noreferrer" class="footer__link-item">Twitter<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div><div class="col footer__col"><div class="footer__title">Project</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/project/who">Who are we?</a></li><li class="footer__item"><a class="footer__link-item" href="/project/bylaws">Bylaws</a></li><li class="footer__item"><a href="https://apache.org/licenses" target="_blank" rel="noopener noreferrer" class="footer__link-item">License<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a class="footer__link-item" href="/project/privacy">Privacy policy</a></li><li class="footer__item"><a href="https://www.apache.org/foundation/sponsorship.html" target="_blank" rel="noopener noreferrer" class="footer__link-item">Sponsorship<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a href="https://www.apache.org/foundation/thanks.html" target="_blank" rel="noopener noreferrer" class="footer__link-item">Thanks<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div></div><div class="footer__bottom text--center"><div class="footer__copyright"><footer class="footer">
         <div class="container">
           <div class="content has-text-centered">
             <p>
@@ -22,7 +22,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/bps/BP-26-move-distributedlog-core-library/index.html b/content/bps/BP-26-move-distributedlog-core-library/index.html
index 3a06de2..8cc5fce 100644
--- a/content/bps/BP-26-move-distributedlog-core-library/index.html
+++ b/content/bps/BP-26-move-distributedlog-core-library/index.html
@@ -4,12 +4,12 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">BP-26: Move distributedlog library as part of bookkeeper | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/bps/BP-26-move-distributedlog-core-library"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docusaurus_tag" content="default"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docsearch:docusaurus_tag" content="default"><meta data-rh="true" property="og:title" content="BP-26: Move distributedlog library as part of bookkeeper | Apache BookKeeper"><meta data-rh="true" name="description" content="Motivation"><meta data-rh="true" property="og:description" content="Motivation"><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/bps/BP-26-move-distributedlog-core-library"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/bps/BP-26-move-distributedlog-core-library" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/bps/BP-26-move-distributedlog-core-library" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
-<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navbar__brand" href="/"><div class="navbar__logo"><img src="/img/bk-logo.svg" alt="Apache Bookkeeper" class="themedImage_ToTc themedImage--light_HNdA"><img src="/img/bk-logo.svg" alt="Apache Bookkeeper" class="themedImage_ToTc themedImage--dark_i4oU"></div><b class="navbar__title text--truncate">Apache BookKeeper</b></a><a class="navbar__item navbar__link" href="/docs/overview/">Documentation</a><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Community</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/community/mailing-lists">Mailing lists</a></li><li><a class="dropdown__link" href="/community/slack">Slack</a></li><li><a href="https://github.com/apache/bookkeeper/issues" target="_blank" rel="noopener noreferrer" class="dropdown__link">Github issues<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a class="dropdown__link" href="/community/releases">Release management</a></li><li><a class="dropdown__link" href="/community/meeting">Community meetings</a></li><li><a class="dropdown__link" href="/community/contributing">Contribution guide</a></li><li><a class="dropdown__link" href="/community/coding-guide">Coding guide</a></li><li><a class="dropdown__link" href="/community/testing">Testing guide</a></li><li><a class="dropdown__link" href="/community/issue-report">Issue report guide</a></li><li><a class="dropdown__link" href="/community/release-guide">Release guide</a></li><li><a class="dropdown__link" href="/community/presentations">Presentations</a></li><li><a class="dropdown__link" href="/community/bookkeeper-proposals">BookKeeper proposals (BP)</a></li></ul></div><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Project</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/project/who">Who are we?</a></li><li><a class="dropdown__link" href="/project/bylaws">Bylaws</a></li><li><a href="https://apache.org/licenses" target="_blank" rel="noopener noreferrer" class="dropdown__link">License<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a class="dropdown__link" href="/project/privacy">Privacy policy</a></li><li><a href="https://www.apache.org/foundation/sponsorship.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Sponsorship<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a href="https://www.apache.org/foundation/thanks.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Thanks<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div></div><div class="navbar__items navbar__items--right"><div class="navbar__item dropdown dropdown--hoverable dropdown--right"><a class="navbar__link" aria-haspopup="true" aria-expanded="false" role="button" href="/docs/admin/autorecovery">4.17.0</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/docs/next/overview/">Next</a></li><li><a class="dropdown__link" href="/docs/admin/autorecovery">4.17.0</a></li><li><a class="dropdown__link" href="/docs/4.16.5/overview/">4.16.5</a></li><li><a class="dropdown__link" href="/docs/4.15.5/overview/">4.15.5</a></li><li><a class="dropdown__link" href="/docs/4.14.8/overview/">4.14.8</a></li><li><a class="dropdown__link" href="/docs/4.13.0/overview/">4.13.0</a></li><li><a class="dropdown__link" href="/docs/4.12.1/overview/">4.12.1</a></li><li><a class="dropdown__link" href="/docs/4.11.1/overview/">4.11.1</a></li><li><a class="dropdown__link" href="/docs/4.10.0/overview/">4.10.0</a></li><li><a class="dropdown__link" href="/docs/4.9.2/overview/">4.9.2</a></li><li><a class="dropdown__link" href="/docs/4.8.2/overview/">4.8.2</a></li><li><a class="dropdown__link" href="/docs/4.7.3/overview/">4.7.3</a></li><li><a class="dropdown__link" href="/docs/4.6.2/overview/">4.6.2</a></li><li><a class="dropdown__link" href="/docs/4.5.1/overview/">4.5.1</a></li></ul></div><a class="navbar__item navbar__link" href="/releases">Download</a><div class="toggle_vylO colorModeToggle_DEke"><button class="clean-btn toggleButton_gllP toggleButtonDisabled_aARS" type="button" disabled="" title="Switch between dark and light mode (currently light mode)" aria-label="Switch between dark and light mode (currently light mode)" aria-live="polite"><svg viewBox="0 0 24 24" width="24" height="24" class="lightToggleIcon_pyhR"><path fill="currentColor" d="M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"></path></svg><svg viewBox="0 0 24 24" width="24" height="24" class="darkToggleIcon_wfgR"><path fill="currentColor" d="M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"></path></svg></button></div><div class="searchBox_ZlJk"></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div></nav><div id="docusaurus_skipToContent_fallback" class="main-wrapper mainWrapper_z2l0"><main class="container container--fluid margin-vert--lg"><div class="row mdxPageWrapper_j9I6"><div class="col col--8"><article><h1>BP-26: Move distributedlog library as part of bookkeeper</h1><h3 class="anchor anchorWithStickyNavbar_LWe7" id="motivation">Motivation<a href="#motivation" class="hash-link" aria-label="Direct link to Motivation" title="Direct link to Motivation">​</a></h3><p>DistributedLog is an extension of Apache BookKeeper, which offers <em>reopenable</em> log streams as its storage primitives.
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navbar__brand" href="/"><div class="navbar__logo"><img src="/img/bk-logo.svg" alt="Apache Bookkeeper" class="themedImage_ToTc themedImage--light_HNdA"><img src="/img/bk-logo.svg" alt="Apache Bookkeeper" class="themedImage_ToTc themedImage--dark_i4oU"></div><b class="navbar__title text--truncate">Apache BookKeeper</b></a><a class="navbar__item navbar__link" href="/docs/overview/">Documentation</a><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Community</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/community/mailing-lists">Mailing lists</a></li><li><a class="dropdown__link" href="/community/slack">Slack</a></li><li><a href="https://github.com/apache/bookkeeper/issues" target="_blank" rel="noopener noreferrer" class="dropdown__link">Github issues<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a class="dropdown__link" href="/community/releases">Release management</a></li><li><a class="dropdown__link" href="/community/meeting">Community meetings</a></li><li><a class="dropdown__link" href="/community/contributing">Contribution guide</a></li><li><a class="dropdown__link" href="/community/coding-guide">Coding guide</a></li><li><a class="dropdown__link" href="/community/testing">Testing guide</a></li><li><a class="dropdown__link" href="/community/issue-report">Issue report guide</a></li><li><a class="dropdown__link" href="/community/release-guide">Release guide</a></li><li><a class="dropdown__link" href="/community/presentations">Presentations</a></li><li><a class="dropdown__link" href="/community/bookkeeper-proposals">BookKeeper proposals (BP)</a></li></ul></div><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Project</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/project/who">Who are we?</a></li><li><a class="dropdown__link" href="/project/bylaws">Bylaws</a></li><li><a href="https://apache.org/licenses" target="_blank" rel="noopener noreferrer" class="dropdown__link">License<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a class="dropdown__link" href="/project/privacy">Privacy policy</a></li><li><a href="https://www.apache.org/foundation/sponsorship.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Sponsorship<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a href="https://www.apache.org/foundation/thanks.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Thanks<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div></div><div class="navbar__items navbar__items--right"><div class="navbar__item dropdown dropdown--hoverable dropdown--right"><a class="navbar__link" aria-haspopup="true" aria-expanded="false" role="button" href="/docs/overview/">4.17.0</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/docs/next/overview/">Next</a></li><li><a class="dropdown__link" href="/docs/overview/">4.17.0</a></li><li><a class="dropdown__link" href="/docs/4.16.5/overview/">4.16.5</a></li><li><a class="dropdown__link" href="/docs/4.15.5/overview/">4.15.5</a></li><li><a class="dropdown__link" href="/docs/4.14.8/overview/">4.14.8</a></li><li><a class="dropdown__link" href="/docs/4.13.0/overview/">4.13.0</a></li><li><a class="dropdown__link" href="/docs/4.12.1/overview/">4.12.1</a></li><li><a class="dropdown__link" href="/docs/4.11.1/overview/">4.11.1</a></li><li><a class="dropdown__link" href="/docs/4.10.0/overview/">4.10.0</a></li><li><a class="dropdown__link" href="/docs/4.9.2/overview/">4.9.2</a></li><li><a class="dropdown__link" href="/docs/4.8.2/overview/">4.8.2</a></li><li><a class="dropdown__link" href="/docs/4.7.3/overview/">4.7.3</a></li><li><a class="dropdown__link" href="/docs/4.6.2/overview/">4.6.2</a></li><li><a class="dropdown__link" href="/docs/4.5.1/overview/">4.5.1</a></li></ul></div><a class="navbar__item navbar__link" href="/releases">Download</a><div class="toggle_vylO colorModeToggle_DEke"><button class="clean-btn toggleButton_gllP toggleButtonDisabled_aARS" type="button" disabled="" title="Switch between dark and light mode (currently light mode)" aria-label="Switch between dark and light mode (currently light mode)" aria-live="polite"><svg viewBox="0 0 24 24" width="24" height="24" class="lightToggleIcon_pyhR"><path fill="currentColor" d="M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"></path></svg><svg viewBox="0 0 24 24" width="24" height="24" class="darkToggleIcon_wfgR"><path fill="currentColor" d="M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"></path></svg></button></div><div class="searchBox_ZlJk"></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div></nav><div id="docusaurus_skipToContent_fallback" class="main-wrapper mainWrapper_z2l0"><main class="container container--fluid margin-vert--lg"><div class="row mdxPageWrapper_j9I6"><div class="col col--8"><article><h1>BP-26: Move distributedlog library as part of bookkeeper</h1><h3 class="anchor anchorWithStickyNavbar_LWe7" id="motivation">Motivation<a href="#motivation" class="hash-link" aria-label="Direct link to Motivation" title="Direct link to Motivation">​</a></h3><p>DistributedLog is an extension of Apache BookKeeper, which offers <em>reopenable</em> log streams as its storage primitives.
 It is tightly built over bookkeeper ledgers, and provides an easier-to-use abstraction and api to use. Applications
 can use <em>named</em> log streams rather than <em>numbered</em> ledgers to store their data. For example, users can use log streams
 as files to storge objects, checkpoints and other more general filesystem related use cases.</p><p>Moving the distributedlog core library as part of bookkeeper would have following benefits:</p><ul><li>It provides more generic &quot;reopenable&quot; log abstraction. It lowers the barrier for people to use bookkeeper to store
@@ -33,7 +33,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/bps/BP-27-new-bookkeeper-cli/index.html b/content/bps/BP-27-new-bookkeeper-cli/index.html
index b516829..becde3f 100644
--- a/content/bps/BP-27-new-bookkeeper-cli/index.html
+++ b/content/bps/BP-27-new-bookkeeper-cli/index.html
@@ -4,12 +4,12 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">BP-27: New BookKeeper CLI | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/bps/BP-27-new-bookkeeper-cli"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docusaurus_tag" content="default"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docsearch:docusaurus_tag" content="default"><meta data-rh="true" property="og:title" content="BP-27: New BookKeeper CLI | Apache BookKeeper"><meta data-rh="true" name="description" content="Motivation"><meta data-rh="true" property="og:description" content="Motivation"><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/bps/BP-27-new-bookkeeper-cli"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/bps/BP-27-new-bookkeeper-cli" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/bps/BP-27-new-bookkeeper-cli" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
-<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navbar__brand" href="/"><div class="navbar__logo"><img src="/img/bk-logo.svg" alt="Apache Bookkeeper" class="themedImage_ToTc themedImage--light_HNdA"><img src="/img/bk-logo.svg" alt="Apache Bookkeeper" class="themedImage_ToTc themedImage--dark_i4oU"></div><b class="navbar__title text--truncate">Apache BookKeeper</b></a><a class="navbar__item navbar__link" href="/docs/overview/">Documentation</a><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Community</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/community/mailing-lists">Mailing lists</a></li><li><a class="dropdown__link" href="/community/slack">Slack</a></li><li><a href="https://github.com/apache/bookkeeper/issues" target="_blank" rel="noopener noreferrer" class="dropdown__link">Github issues<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a class="dropdown__link" href="/community/releases">Release management</a></li><li><a class="dropdown__link" href="/community/meeting">Community meetings</a></li><li><a class="dropdown__link" href="/community/contributing">Contribution guide</a></li><li><a class="dropdown__link" href="/community/coding-guide">Coding guide</a></li><li><a class="dropdown__link" href="/community/testing">Testing guide</a></li><li><a class="dropdown__link" href="/community/issue-report">Issue report guide</a></li><li><a class="dropdown__link" href="/community/release-guide">Release guide</a></li><li><a class="dropdown__link" href="/community/presentations">Presentations</a></li><li><a class="dropdown__link" href="/community/bookkeeper-proposals">BookKeeper proposals (BP)</a></li></ul></div><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Project</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/project/who">Who are we?</a></li><li><a class="dropdown__link" href="/project/bylaws">Bylaws</a></li><li><a href="https://apache.org/licenses" target="_blank" rel="noopener noreferrer" class="dropdown__link">License<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a class="dropdown__link" href="/project/privacy">Privacy policy</a></li><li><a href="https://www.apache.org/foundation/sponsorship.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Sponsorship<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a href="https://www.apache.org/foundation/thanks.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Thanks<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div></div><div class="navbar__items navbar__items--right"><div class="navbar__item dropdown dropdown--hoverable dropdown--right"><a class="navbar__link" aria-haspopup="true" aria-expanded="false" role="button" href="/docs/admin/autorecovery">4.17.0</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/docs/next/overview/">Next</a></li><li><a class="dropdown__link" href="/docs/admin/autorecovery">4.17.0</a></li><li><a class="dropdown__link" href="/docs/4.16.5/overview/">4.16.5</a></li><li><a class="dropdown__link" href="/docs/4.15.5/overview/">4.15.5</a></li><li><a class="dropdown__link" href="/docs/4.14.8/overview/">4.14.8</a></li><li><a class="dropdown__link" href="/docs/4.13.0/overview/">4.13.0</a></li><li><a class="dropdown__link" href="/docs/4.12.1/overview/">4.12.1</a></li><li><a class="dropdown__link" href="/docs/4.11.1/overview/">4.11.1</a></li><li><a class="dropdown__link" href="/docs/4.10.0/overview/">4.10.0</a></li><li><a class="dropdown__link" href="/docs/4.9.2/overview/">4.9.2</a></li><li><a class="dropdown__link" href="/docs/4.8.2/overview/">4.8.2</a></li><li><a class="dropdown__link" href="/docs/4.7.3/overview/">4.7.3</a></li><li><a class="dropdown__link" href="/docs/4.6.2/overview/">4.6.2</a></li><li><a class="dropdown__link" href="/docs/4.5.1/overview/">4.5.1</a></li></ul></div><a class="navbar__item navbar__link" href="/releases">Download</a><div class="toggle_vylO colorModeToggle_DEke"><button class="clean-btn toggleButton_gllP toggleButtonDisabled_aARS" type="button" disabled="" title="Switch between dark and light mode (currently light mode)" aria-label="Switch between dark and light mode (currently light mode)" aria-live="polite"><svg viewBox="0 0 24 24" width="24" height="24" class="lightToggleIcon_pyhR"><path fill="currentColor" d="M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"></path></svg><svg viewBox="0 0 24 24" width="24" height="24" class="darkToggleIcon_wfgR"><path fill="currentColor" d="M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"></path></svg></button></div><div class="searchBox_ZlJk"></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div></nav><div id="docusaurus_skipToContent_fallback" class="main-wrapper mainWrapper_z2l0"><main class="container container--fluid margin-vert--lg"><div class="row mdxPageWrapper_j9I6"><div class="col col--8"><article><h1>BP-27: New BookKeeper CLI</h1><h3 class="anchor anchorWithStickyNavbar_LWe7" id="motivation">Motivation<a href="#motivation" class="hash-link" aria-label="Direct link to Motivation" title="Direct link to Motivation">​</a></h3><p><code>BookieShell</code> is the current bookkeeper cli for interacting and operating a bookkeeper cluster. However, this class is getting bigger with more commands added to it. It is facing a few problems for maintenance and extensibility.</p><ul><li>All commands sit in one gaint shell class. It is hard to tell if a command is used for managing a bookie only or if a command is used for managing a cluster.</li><li>Lack of unit tests. This class has very few test coverage. Most of the commands (introduced in early days) don&#x27;t have a unit test.</li><li>Lack of extensibility. If a new function component (for example, dlog) is introduced, it is a bit hard to extend this CLI to have commands for new function component.</li></ul><p>All these problems lead to the proposal here. This proposal is to propose refactoring/redesigning the bookkeeper CLI to allow better managebility for maintenance, better test coverage and better extensibility for new function components.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="public-interfaces">Public Interfaces<a href="#public-interfaces" class="hash-link" aria-label="Direct link to Public Interfaces" title="Direct link to Public Interfaces">​</a></h3><p>This proposal will not change existing <code>BookieShell</code>. All functionalities will remain as same when using <code>bin/bookkeeper shell</code>.
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navbar__brand" href="/"><div class="navbar__logo"><img src="/img/bk-logo.svg" alt="Apache Bookkeeper" class="themedImage_ToTc themedImage--light_HNdA"><img src="/img/bk-logo.svg" alt="Apache Bookkeeper" class="themedImage_ToTc themedImage--dark_i4oU"></div><b class="navbar__title text--truncate">Apache BookKeeper</b></a><a class="navbar__item navbar__link" href="/docs/overview/">Documentation</a><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Community</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/community/mailing-lists">Mailing lists</a></li><li><a class="dropdown__link" href="/community/slack">Slack</a></li><li><a href="https://github.com/apache/bookkeeper/issues" target="_blank" rel="noopener noreferrer" class="dropdown__link">Github issues<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a class="dropdown__link" href="/community/releases">Release management</a></li><li><a class="dropdown__link" href="/community/meeting">Community meetings</a></li><li><a class="dropdown__link" href="/community/contributing">Contribution guide</a></li><li><a class="dropdown__link" href="/community/coding-guide">Coding guide</a></li><li><a class="dropdown__link" href="/community/testing">Testing guide</a></li><li><a class="dropdown__link" href="/community/issue-report">Issue report guide</a></li><li><a class="dropdown__link" href="/community/release-guide">Release guide</a></li><li><a class="dropdown__link" href="/community/presentations">Presentations</a></li><li><a class="dropdown__link" href="/community/bookkeeper-proposals">BookKeeper proposals (BP)</a></li></ul></div><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Project</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/project/who">Who are we?</a></li><li><a class="dropdown__link" href="/project/bylaws">Bylaws</a></li><li><a href="https://apache.org/licenses" target="_blank" rel="noopener noreferrer" class="dropdown__link">License<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a class="dropdown__link" href="/project/privacy">Privacy policy</a></li><li><a href="https://www.apache.org/foundation/sponsorship.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Sponsorship<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a href="https://www.apache.org/foundation/thanks.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Thanks<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div></div><div class="navbar__items navbar__items--right"><div class="navbar__item dropdown dropdown--hoverable dropdown--right"><a class="navbar__link" aria-haspopup="true" aria-expanded="false" role="button" href="/docs/overview/">4.17.0</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/docs/next/overview/">Next</a></li><li><a class="dropdown__link" href="/docs/overview/">4.17.0</a></li><li><a class="dropdown__link" href="/docs/4.16.5/overview/">4.16.5</a></li><li><a class="dropdown__link" href="/docs/4.15.5/overview/">4.15.5</a></li><li><a class="dropdown__link" href="/docs/4.14.8/overview/">4.14.8</a></li><li><a class="dropdown__link" href="/docs/4.13.0/overview/">4.13.0</a></li><li><a class="dropdown__link" href="/docs/4.12.1/overview/">4.12.1</a></li><li><a class="dropdown__link" href="/docs/4.11.1/overview/">4.11.1</a></li><li><a class="dropdown__link" href="/docs/4.10.0/overview/">4.10.0</a></li><li><a class="dropdown__link" href="/docs/4.9.2/overview/">4.9.2</a></li><li><a class="dropdown__link" href="/docs/4.8.2/overview/">4.8.2</a></li><li><a class="dropdown__link" href="/docs/4.7.3/overview/">4.7.3</a></li><li><a class="dropdown__link" href="/docs/4.6.2/overview/">4.6.2</a></li><li><a class="dropdown__link" href="/docs/4.5.1/overview/">4.5.1</a></li></ul></div><a class="navbar__item navbar__link" href="/releases">Download</a><div class="toggle_vylO colorModeToggle_DEke"><button class="clean-btn toggleButton_gllP toggleButtonDisabled_aARS" type="button" disabled="" title="Switch between dark and light mode (currently light mode)" aria-label="Switch between dark and light mode (currently light mode)" aria-live="polite"><svg viewBox="0 0 24 24" width="24" height="24" class="lightToggleIcon_pyhR"><path fill="currentColor" d="M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"></path></svg><svg viewBox="0 0 24 24" width="24" height="24" class="darkToggleIcon_wfgR"><path fill="currentColor" d="M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"></path></svg></button></div><div class="searchBox_ZlJk"></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div></nav><div id="docusaurus_skipToContent_fallback" class="main-wrapper mainWrapper_z2l0"><main class="container container--fluid margin-vert--lg"><div class="row mdxPageWrapper_j9I6"><div class="col col--8"><article><h1>BP-27: New BookKeeper CLI</h1><h3 class="anchor anchorWithStickyNavbar_LWe7" id="motivation">Motivation<a href="#motivation" class="hash-link" aria-label="Direct link to Motivation" title="Direct link to Motivation">​</a></h3><p><code>BookieShell</code> is the current bookkeeper cli for interacting and operating a bookkeeper cluster. However, this class is getting bigger with more commands added to it. It is facing a few problems for maintenance and extensibility.</p><ul><li>All commands sit in one gaint shell class. It is hard to tell if a command is used for managing a bookie only or if a command is used for managing a cluster.</li><li>Lack of unit tests. This class has very few test coverage. Most of the commands (introduced in early days) don&#x27;t have a unit test.</li><li>Lack of extensibility. If a new function component (for example, dlog) is introduced, it is a bit hard to extend this CLI to have commands for new function component.</li></ul><p>All these problems lead to the proposal here. This proposal is to propose refactoring/redesigning the bookkeeper CLI to allow better managebility for maintenance, better test coverage and better extensibility for new function components.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="public-interfaces">Public Interfaces<a href="#public-interfaces" class="hash-link" aria-label="Direct link to Public Interfaces" title="Direct link to Public Interfaces">​</a></h3><p>This proposal will not change existing <code>BookieShell</code>. All functionalities will remain as same when using <code>bin/bookkeeper shell</code>.
 Instead a new module <code>bookkeeper-tools</code> will be introduced for developing the new BookKeeper CLI and a new script <code>bin/bookkeeper-cli</code> for executing CLI commands.</p><p>The new bookkeeper CLI follows the pattern that pulsar-admin is using. The CLI commandline format would be:</p><div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">$ bookkeeper-cli [general options] &lt;command-group&gt; &lt;command&gt; [options of command]</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><h4 class="anchor anchorWithStickyNavbar_LWe7" id="commandgroup-and-command">CommandGroup and Command<a href="#commandgroup-and-command" class="hash-link" aria-label="Direct link to CommandGroup and Command" title="Direct link to CommandGroup and Command">​</a></h4><p><code>&lt;command-group&gt;</code> and <code>&lt;command&gt;</code> are introduced for categorizing the commands into groups. So the commands within same group have same operation scope (e.g. whether a command is applied to a cluster or a command is applied to a bookie).</p><p>When a new function component is introduced, all its related commands can be managed in its own command group and register the group to CLI. This would allow flexible extensibility and make maintenance easier and clearer.</p><p>The proposed command groups are:</p><ul><li>&quot;cluster&quot;: commands that operate on a cluster</li><li>&quot;bookie&quot;: commands that operate on a single bookie</li><li>&quot;metadata&quot;: commands that operate with metadata store</li><li>&quot;client&quot;: commands that use a bookkeeper client for interacting with a cluster.</li></ul><p>Example Outputs for the new BookKeeper CLI:</p><ul><li>Show all command groups: <code>bookkeeper-cli --help</code></li></ul><div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">Usage: bookkeeper-cli [options] [command] [command options]</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  Options:</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    -c, --conf</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">       Bookie Configuration File</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    -h, --help</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">       Show this help message</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">       Default: false</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  Commands:</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    bookie      Commands on operating a single bookie</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      Usage: bookie [options]</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    client      Commands that interact with a cluster</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      Usage: client [options]</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    cluster      Commands that operate a cluster</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      Usage: cluster [options]</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    metadata      Commands that interact with metadata storage</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      Usage: metadata [options]</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><ul><li>Show commands under <code>cluster</code>: <code>bookkeeper-cli cluster --help</code></li></ul><div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">Usage: bookie-shell cluster [options] [command] [command options]</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  Commands:</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    listbookies      List the bookies, which are running as either readwrite or readonly mode.</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      Usage: listbookies [options]</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        Options:</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">          -ro, --readonly</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">             Print readonly bookies</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">             Default: false</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">          -rw, --readwrite</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">             Print readwrite bookies</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">             Default: false</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><h3 class="anchor anchorWithStickyNavbar_LWe7" id="proposed-changes">Proposed Changes<a href="#proposed-changes" class="hash-link" aria-label="Direct link to Proposed Changes" title="Direct link to Proposed Changes">​</a></h3><ul><li>Introduced a new module called <code>bookkeeper-tools</code> for developing the new CLI.</li><li>The new CLI will use <a href="http://jcommander.org" target="_blank" rel="noopener noreferrer">JCommander</a> for parse command line paramters: better on supporting this proposal commandline syntax.</li><li>All the actual logic of the commands will be organized under <code>org.apache.bookkeeper.tools.cli.commands</code>. Each command group has its own subpackage and each command will be a class file under that command-group subpackage.
 Doing this provides better testability, since the command logic is limited in one file rather than in a gaint shell class. Proposed layout can be found <a href="https://github.com/apache/bookkeeper/tree/master/bookkeeper-server/src/main/java/org/apache/bookkeeper/tools/cli/commands" target="_blank" rel="noopener noreferrer">here</a>.</li><li>For each command: the logic of a command will be moved out of <code>BookieShell</code> to its own class <code>org.apache.bookkeeper.tools.cli.commands.&lt;command-group&gt;.&lt;CommandClass&gt;.java</code>. The old BookieShell will use the new Command class and delegate the actual logic.</li></ul><p>An initial prototype is available: <a href="https://github.com/sijie/bookkeeper/tree/bookie_shell_refactor" target="_blank" rel="noopener noreferrer">https://github.com/sijie/bookkeeper/tree/bookie_shell_refactor</a></p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="compatibility-deprecation-and-migration-plan">Compatibility, Deprecation, and Migration Plan<a href="#compatibility-deprecation-and-migration-plan" class="hash-link" aria-label="Direct link to Compatibility, Deprecation, and Migration Plan" title="Direct link to Compatibility, Deprecation, and Migration Plan">​</a></h3><p><code>bin/bookkeeper shell</code> and <code>bin/bookkeeper-cli</code> will co-exist for a few releases. After <code>bin/bookkeeper-cli</code> takes over all the functionalities of <code>BookieShell</code>, we will consider deprecating the old <code>BookieShell</code>.</p><p>So no compatibility concern at this moment.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="test-plan">Test Plan<a href="#test-plan" class="hash-link" aria-label="Direct link to Test Plan" title="Direct link to Test Plan">​</a></h3><p>When a command is moved from BookieShell to <code>org.apache.bookkeeper.tools.cli</code>, several unit tests should be added:</p><ul><li>Unit tests for the command logic itself.</li><li>Unit tests in new CLI for this command.</li><li>Unit tests in old BookieShell for this command.</li></ul><h3 class="anchor anchorWithStickyNavbar_LWe7" id="rejected-alternatives">Rejected Alternatives<a href="#rejected-alternatives" class="hash-link" aria-label="Direct link to Rejected Alternatives" title="Direct link to Rejected Alternatives">​</a></h3><p>Another proposal is to redesign the bookkeeper CLI using admin REST api. This is not considered at this moment because some of the commands are not well supported in admin REST api (for example, metaformat, bookieformat, and most of the commands
 used for troubleshooting individual bookies). If we want to support a CLI using admin REST api, we can have a separate CLI called <code>bookkeeper-rest-ci</code> to use admin REST api for operating the cluster.</p></article></div><div class="col col--2"><div class="tableOfContents_bqdL thin-scrollbar"><ul class="table-of-contents table-of-contents__left-border"><li><a href="#motivation" class="table-of-contents__link toc-highlight">Motivation</a></li><li><a href="#public-interfaces" class="table-of-contents__link toc-highlight">Public Interfaces</a></li><li><a href="#proposed-changes" class="table-of-contents__link toc-highlight">Proposed Changes</a></li><li><a href="#compatibility-deprecation-and-migration-plan" class="table-of-contents__link toc-highlight">Compatibility, Deprecation, and Migration Plan</a></li><li><a href="#test-plan" class="table-of-contents__link toc-highlight">Test Plan</a></li><li><a href="#rejected-alternatives" class="table-of-contents__link toc-highlight">Rejected Alternatives</a></li></ul></div></div></div></main></div><footer class="footer footer--dark"><div class="container container-fluid"><div class="row footer__links"><div class="col footer__col"><div class="footer__title">Documentation</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/docs/overview">Overview</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/getting-started/installation">Getting started</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/deployment/manual">Deployment</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/admin/bookies">Administration</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/api/overview">API</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/security/overview">Security</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/development/protocol">Development</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/reference/config">Reference</a></li></ul></div><div class="col footer__col"><div class="footer__title">Community</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/community/mailing-lists">Mailing lists</a></li><li class="footer__item"><a class="footer__link-item" href="/community/slack">Slack</a></li><li class="footer__item"><a href="https://github.com/apache/bookkeeper" target="_blank" rel="noopener noreferrer" class="footer__link-item">Github<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a href="https://twitter.com/asfbookkeeper" target="_blank" rel="noopener noreferrer" class="footer__link-item">Twitter<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div><div class="col footer__col"><div class="footer__title">Project</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/project/who">Who are we?</a></li><li class="footer__item"><a class="footer__link-item" href="/project/bylaws">Bylaws</a></li><li class="footer__item"><a href="https://apache.org/licenses" target="_blank" rel="noopener noreferrer" class="footer__link-item">License<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a class="footer__link-item" href="/project/privacy">Privacy policy</a></li><li class="footer__item"><a href="https://www.apache.org/foundation/sponsorship.html" target="_blank" rel="noopener noreferrer" class="footer__link-item">Sponsorship<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a href="https://www.apache.org/foundation/thanks.html" target="_blank" rel="noopener noreferrer" class="footer__link-item">Thanks<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div></div><div class="footer__bottom text--center"><div class="footer__copyright"><footer class="footer">
@@ -25,7 +25,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/bps/BP-28-etcd-as-metadata-store/index.html b/content/bps/BP-28-etcd-as-metadata-store/index.html
index b711312..ad4d0f1 100644
--- a/content/bps/BP-28-etcd-as-metadata-store/index.html
+++ b/content/bps/BP-28-etcd-as-metadata-store/index.html
@@ -4,12 +4,12 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">BP-28: use etcd as metadata store | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/bps/BP-28-etcd-as-metadata-store"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docusaurus_tag" content="default"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docsearch:docusaurus_tag" content="default"><meta data-rh="true" property="og:title" content="BP-28: use etcd as metadata store | Apache BookKeeper"><meta data-rh="true" name="description" content="Motivation"><meta data-rh="true" property="og:description" content="Motivation"><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/bps/BP-28-etcd-as-metadata-store"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/bps/BP-28-etcd-as-metadata-store" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/bps/BP-28-etcd-as-metadata-store" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
-<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navbar__brand" href="/"><div class="navbar__logo"><img src="/img/bk-logo.svg" alt="Apache Bookkeeper" class="themedImage_ToTc themedImage--light_HNdA"><img src="/img/bk-logo.svg" alt="Apache Bookkeeper" class="themedImage_ToTc themedImage--dark_i4oU"></div><b class="navbar__title text--truncate">Apache BookKeeper</b></a><a class="navbar__item navbar__link" href="/docs/overview/">Documentation</a><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Community</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/community/mailing-lists">Mailing lists</a></li><li><a class="dropdown__link" href="/community/slack">Slack</a></li><li><a href="https://github.com/apache/bookkeeper/issues" target="_blank" rel="noopener noreferrer" class="dropdown__link">Github issues<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a class="dropdown__link" href="/community/releases">Release management</a></li><li><a class="dropdown__link" href="/community/meeting">Community meetings</a></li><li><a class="dropdown__link" href="/community/contributing">Contribution guide</a></li><li><a class="dropdown__link" href="/community/coding-guide">Coding guide</a></li><li><a class="dropdown__link" href="/community/testing">Testing guide</a></li><li><a class="dropdown__link" href="/community/issue-report">Issue report guide</a></li><li><a class="dropdown__link" href="/community/release-guide">Release guide</a></li><li><a class="dropdown__link" href="/community/presentations">Presentations</a></li><li><a class="dropdown__link" href="/community/bookkeeper-proposals">BookKeeper proposals (BP)</a></li></ul></div><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Project</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/project/who">Who are we?</a></li><li><a class="dropdown__link" href="/project/bylaws">Bylaws</a></li><li><a href="https://apache.org/licenses" target="_blank" rel="noopener noreferrer" class="dropdown__link">License<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a class="dropdown__link" href="/project/privacy">Privacy policy</a></li><li><a href="https://www.apache.org/foundation/sponsorship.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Sponsorship<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a href="https://www.apache.org/foundation/thanks.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Thanks<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div></div><div class="navbar__items navbar__items--right"><div class="navbar__item dropdown dropdown--hoverable dropdown--right"><a class="navbar__link" aria-haspopup="true" aria-expanded="false" role="button" href="/docs/admin/autorecovery">4.17.0</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/docs/next/overview/">Next</a></li><li><a class="dropdown__link" href="/docs/admin/autorecovery">4.17.0</a></li><li><a class="dropdown__link" href="/docs/4.16.5/overview/">4.16.5</a></li><li><a class="dropdown__link" href="/docs/4.15.5/overview/">4.15.5</a></li><li><a class="dropdown__link" href="/docs/4.14.8/overview/">4.14.8</a></li><li><a class="dropdown__link" href="/docs/4.13.0/overview/">4.13.0</a></li><li><a class="dropdown__link" href="/docs/4.12.1/overview/">4.12.1</a></li><li><a class="dropdown__link" href="/docs/4.11.1/overview/">4.11.1</a></li><li><a class="dropdown__link" href="/docs/4.10.0/overview/">4.10.0</a></li><li><a class="dropdown__link" href="/docs/4.9.2/overview/">4.9.2</a></li><li><a class="dropdown__link" href="/docs/4.8.2/overview/">4.8.2</a></li><li><a class="dropdown__link" href="/docs/4.7.3/overview/">4.7.3</a></li><li><a class="dropdown__link" href="/docs/4.6.2/overview/">4.6.2</a></li><li><a class="dropdown__link" href="/docs/4.5.1/overview/">4.5.1</a></li></ul></div><a class="navbar__item navbar__link" href="/releases">Download</a><div class="toggle_vylO colorModeToggle_DEke"><button class="clean-btn toggleButton_gllP toggleButtonDisabled_aARS" type="button" disabled="" title="Switch between dark and light mode (currently light mode)" aria-label="Switch between dark and light mode (currently light mode)" aria-live="polite"><svg viewBox="0 0 24 24" width="24" height="24" class="lightToggleIcon_pyhR"><path fill="currentColor" d="M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"></path></svg><svg viewBox="0 0 24 24" width="24" height="24" class="darkToggleIcon_wfgR"><path fill="currentColor" d="M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"></path></svg></button></div><div class="searchBox_ZlJk"></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div></nav><div id="docusaurus_skipToContent_fallback" class="main-wrapper mainWrapper_z2l0"><main class="container container--fluid margin-vert--lg"><div class="row mdxPageWrapper_j9I6"><div class="col col--8"><article><h1>BP-28: use etcd as metadata store</h1><h3 class="anchor anchorWithStickyNavbar_LWe7" id="motivation">Motivation<a href="#motivation" class="hash-link" aria-label="Direct link to Motivation" title="Direct link to Motivation">​</a></h3><p>Currently bookkeeper uses zookeeper as the metadata store. However there is a couple of issues with current approach, especially using zookeeper.</p><p>These issues includes:</p><ol><li>You need to allocate special nodes for zookeeper. These nodes need to be treated specially, and have their own monitoring.
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navbar__brand" href="/"><div class="navbar__logo"><img src="/img/bk-logo.svg" alt="Apache Bookkeeper" class="themedImage_ToTc themedImage--light_HNdA"><img src="/img/bk-logo.svg" alt="Apache Bookkeeper" class="themedImage_ToTc themedImage--dark_i4oU"></div><b class="navbar__title text--truncate">Apache BookKeeper</b></a><a class="navbar__item navbar__link" href="/docs/overview/">Documentation</a><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Community</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/community/mailing-lists">Mailing lists</a></li><li><a class="dropdown__link" href="/community/slack">Slack</a></li><li><a href="https://github.com/apache/bookkeeper/issues" target="_blank" rel="noopener noreferrer" class="dropdown__link">Github issues<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a class="dropdown__link" href="/community/releases">Release management</a></li><li><a class="dropdown__link" href="/community/meeting">Community meetings</a></li><li><a class="dropdown__link" href="/community/contributing">Contribution guide</a></li><li><a class="dropdown__link" href="/community/coding-guide">Coding guide</a></li><li><a class="dropdown__link" href="/community/testing">Testing guide</a></li><li><a class="dropdown__link" href="/community/issue-report">Issue report guide</a></li><li><a class="dropdown__link" href="/community/release-guide">Release guide</a></li><li><a class="dropdown__link" href="/community/presentations">Presentations</a></li><li><a class="dropdown__link" href="/community/bookkeeper-proposals">BookKeeper proposals (BP)</a></li></ul></div><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Project</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/project/who">Who are we?</a></li><li><a class="dropdown__link" href="/project/bylaws">Bylaws</a></li><li><a href="https://apache.org/licenses" target="_blank" rel="noopener noreferrer" class="dropdown__link">License<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a class="dropdown__link" href="/project/privacy">Privacy policy</a></li><li><a href="https://www.apache.org/foundation/sponsorship.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Sponsorship<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a href="https://www.apache.org/foundation/thanks.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Thanks<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div></div><div class="navbar__items navbar__items--right"><div class="navbar__item dropdown dropdown--hoverable dropdown--right"><a class="navbar__link" aria-haspopup="true" aria-expanded="false" role="button" href="/docs/overview/">4.17.0</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/docs/next/overview/">Next</a></li><li><a class="dropdown__link" href="/docs/overview/">4.17.0</a></li><li><a class="dropdown__link" href="/docs/4.16.5/overview/">4.16.5</a></li><li><a class="dropdown__link" href="/docs/4.15.5/overview/">4.15.5</a></li><li><a class="dropdown__link" href="/docs/4.14.8/overview/">4.14.8</a></li><li><a class="dropdown__link" href="/docs/4.13.0/overview/">4.13.0</a></li><li><a class="dropdown__link" href="/docs/4.12.1/overview/">4.12.1</a></li><li><a class="dropdown__link" href="/docs/4.11.1/overview/">4.11.1</a></li><li><a class="dropdown__link" href="/docs/4.10.0/overview/">4.10.0</a></li><li><a class="dropdown__link" href="/docs/4.9.2/overview/">4.9.2</a></li><li><a class="dropdown__link" href="/docs/4.8.2/overview/">4.8.2</a></li><li><a class="dropdown__link" href="/docs/4.7.3/overview/">4.7.3</a></li><li><a class="dropdown__link" href="/docs/4.6.2/overview/">4.6.2</a></li><li><a class="dropdown__link" href="/docs/4.5.1/overview/">4.5.1</a></li></ul></div><a class="navbar__item navbar__link" href="/releases">Download</a><div class="toggle_vylO colorModeToggle_DEke"><button class="clean-btn toggleButton_gllP toggleButtonDisabled_aARS" type="button" disabled="" title="Switch between dark and light mode (currently light mode)" aria-label="Switch between dark and light mode (currently light mode)" aria-live="polite"><svg viewBox="0 0 24 24" width="24" height="24" class="lightToggleIcon_pyhR"><path fill="currentColor" d="M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"></path></svg><svg viewBox="0 0 24 24" width="24" height="24" class="darkToggleIcon_wfgR"><path fill="currentColor" d="M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"></path></svg></button></div><div class="searchBox_ZlJk"></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div></nav><div id="docusaurus_skipToContent_fallback" class="main-wrapper mainWrapper_z2l0"><main class="container container--fluid margin-vert--lg"><div class="row mdxPageWrapper_j9I6"><div class="col col--8"><article><h1>BP-28: use etcd as metadata store</h1><h3 class="anchor anchorWithStickyNavbar_LWe7" id="motivation">Motivation<a href="#motivation" class="hash-link" aria-label="Direct link to Motivation" title="Direct link to Motivation">​</a></h3><p>Currently bookkeeper uses zookeeper as the metadata store. However there is a couple of issues with current approach, especially using zookeeper.</p><p>These issues includes:</p><ol><li>You need to allocate special nodes for zookeeper. These nodes need to be treated specially, and have their own monitoring.
 Ops need to understand both bookies and zookeeper.</li><li>ZooKeeper is the scalability bottleneck. ZooKeeper doesn’t scale writes as you add nodes. This means that if your bookkeeper
 cluster reaches the maximum write throughput that ZK can sustain, you’ve reached the maximum capacity of your cluster, and there’s nothing you
 can do (except buy bigger hardware for your special nodes).</li><li>ZooKeeper enforces you into its programming model. In general, its programming model is not too bad. However it becomes problematic when
@@ -29,7 +29,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/bps/BP-29-metadata-store-api-module/index.html b/content/bps/BP-29-metadata-store-api-module/index.html
index c97e8e7..c3b6b89 100644
--- a/content/bps/BP-29-metadata-store-api-module/index.html
+++ b/content/bps/BP-29-metadata-store-api-module/index.html
@@ -4,12 +4,12 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">BP-29: Metadata API module | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/bps/BP-29-metadata-store-api-module"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docusaurus_tag" content="default"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docsearch:docusaurus_tag" content="default"><meta data-rh="true" property="og:title" content="BP-29: Metadata API module | Apache BookKeeper"><meta data-rh="true" name="description" content="Motivation"><meta data-rh="true" property="og:description" content="Motivation"><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/bps/BP-29-metadata-store-api-module"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/bps/BP-29-metadata-store-api-module" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/bps/BP-29-metadata-store-api-module" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
-<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navbar__brand" href="/"><div class="navbar__logo"><img src="/img/bk-logo.svg" alt="Apache Bookkeeper" class="themedImage_ToTc themedImage--light_HNdA"><img src="/img/bk-logo.svg" alt="Apache Bookkeeper" class="themedImage_ToTc themedImage--dark_i4oU"></div><b class="navbar__title text--truncate">Apache BookKeeper</b></a><a class="navbar__item navbar__link" href="/docs/overview/">Documentation</a><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Community</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/community/mailing-lists">Mailing lists</a></li><li><a class="dropdown__link" href="/community/slack">Slack</a></li><li><a href="https://github.com/apache/bookkeeper/issues" target="_blank" rel="noopener noreferrer" class="dropdown__link">Github issues<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a class="dropdown__link" href="/community/releases">Release management</a></li><li><a class="dropdown__link" href="/community/meeting">Community meetings</a></li><li><a class="dropdown__link" href="/community/contributing">Contribution guide</a></li><li><a class="dropdown__link" href="/community/coding-guide">Coding guide</a></li><li><a class="dropdown__link" href="/community/testing">Testing guide</a></li><li><a class="dropdown__link" href="/community/issue-report">Issue report guide</a></li><li><a class="dropdown__link" href="/community/release-guide">Release guide</a></li><li><a class="dropdown__link" href="/community/presentations">Presentations</a></li><li><a class="dropdown__link" href="/community/bookkeeper-proposals">BookKeeper proposals (BP)</a></li></ul></div><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Project</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/project/who">Who are we?</a></li><li><a class="dropdown__link" href="/project/bylaws">Bylaws</a></li><li><a href="https://apache.org/licenses" target="_blank" rel="noopener noreferrer" class="dropdown__link">License<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a class="dropdown__link" href="/project/privacy">Privacy policy</a></li><li><a href="https://www.apache.org/foundation/sponsorship.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Sponsorship<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a href="https://www.apache.org/foundation/thanks.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Thanks<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div></div><div class="navbar__items navbar__items--right"><div class="navbar__item dropdown dropdown--hoverable dropdown--right"><a class="navbar__link" aria-haspopup="true" aria-expanded="false" role="button" href="/docs/admin/autorecovery">4.17.0</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/docs/next/overview/">Next</a></li><li><a class="dropdown__link" href="/docs/admin/autorecovery">4.17.0</a></li><li><a class="dropdown__link" href="/docs/4.16.5/overview/">4.16.5</a></li><li><a class="dropdown__link" href="/docs/4.15.5/overview/">4.15.5</a></li><li><a class="dropdown__link" href="/docs/4.14.8/overview/">4.14.8</a></li><li><a class="dropdown__link" href="/docs/4.13.0/overview/">4.13.0</a></li><li><a class="dropdown__link" href="/docs/4.12.1/overview/">4.12.1</a></li><li><a class="dropdown__link" href="/docs/4.11.1/overview/">4.11.1</a></li><li><a class="dropdown__link" href="/docs/4.10.0/overview/">4.10.0</a></li><li><a class="dropdown__link" href="/docs/4.9.2/overview/">4.9.2</a></li><li><a class="dropdown__link" href="/docs/4.8.2/overview/">4.8.2</a></li><li><a class="dropdown__link" href="/docs/4.7.3/overview/">4.7.3</a></li><li><a class="dropdown__link" href="/docs/4.6.2/overview/">4.6.2</a></li><li><a class="dropdown__link" href="/docs/4.5.1/overview/">4.5.1</a></li></ul></div><a class="navbar__item navbar__link" href="/releases">Download</a><div class="toggle_vylO colorModeToggle_DEke"><button class="clean-btn toggleButton_gllP toggleButtonDisabled_aARS" type="button" disabled="" title="Switch between dark and light mode (currently light mode)" aria-label="Switch between dark and light mode (currently light mode)" aria-live="polite"><svg viewBox="0 0 24 24" width="24" height="24" class="lightToggleIcon_pyhR"><path fill="currentColor" d="M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"></path></svg><svg viewBox="0 0 24 24" width="24" height="24" class="darkToggleIcon_wfgR"><path fill="currentColor" d="M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"></path></svg></button></div><div class="searchBox_ZlJk"></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div></nav><div id="docusaurus_skipToContent_fallback" class="main-wrapper mainWrapper_z2l0"><main class="container container--fluid margin-vert--lg"><div class="row mdxPageWrapper_j9I6"><div class="col col--8"><article><h1>BP-29: Metadata API module</h1><h3 class="anchor anchorWithStickyNavbar_LWe7" id="motivation">Motivation<a href="#motivation" class="hash-link" aria-label="Direct link to Motivation" title="Direct link to Motivation">​</a></h3><p>We have already abstracted all the metadata operations into interfaces. And all the bookkeeper implementations only reply on metadata interfaces,
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navbar__brand" href="/"><div class="navbar__logo"><img src="/img/bk-logo.svg" alt="Apache Bookkeeper" class="themedImage_ToTc themedImage--light_HNdA"><img src="/img/bk-logo.svg" alt="Apache Bookkeeper" class="themedImage_ToTc themedImage--dark_i4oU"></div><b class="navbar__title text--truncate">Apache BookKeeper</b></a><a class="navbar__item navbar__link" href="/docs/overview/">Documentation</a><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Community</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/community/mailing-lists">Mailing lists</a></li><li><a class="dropdown__link" href="/community/slack">Slack</a></li><li><a href="https://github.com/apache/bookkeeper/issues" target="_blank" rel="noopener noreferrer" class="dropdown__link">Github issues<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a class="dropdown__link" href="/community/releases">Release management</a></li><li><a class="dropdown__link" href="/community/meeting">Community meetings</a></li><li><a class="dropdown__link" href="/community/contributing">Contribution guide</a></li><li><a class="dropdown__link" href="/community/coding-guide">Coding guide</a></li><li><a class="dropdown__link" href="/community/testing">Testing guide</a></li><li><a class="dropdown__link" href="/community/issue-report">Issue report guide</a></li><li><a class="dropdown__link" href="/community/release-guide">Release guide</a></li><li><a class="dropdown__link" href="/community/presentations">Presentations</a></li><li><a class="dropdown__link" href="/community/bookkeeper-proposals">BookKeeper proposals (BP)</a></li></ul></div><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Project</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/project/who">Who are we?</a></li><li><a class="dropdown__link" href="/project/bylaws">Bylaws</a></li><li><a href="https://apache.org/licenses" target="_blank" rel="noopener noreferrer" class="dropdown__link">License<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a class="dropdown__link" href="/project/privacy">Privacy policy</a></li><li><a href="https://www.apache.org/foundation/sponsorship.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Sponsorship<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a href="https://www.apache.org/foundation/thanks.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Thanks<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div></div><div class="navbar__items navbar__items--right"><div class="navbar__item dropdown dropdown--hoverable dropdown--right"><a class="navbar__link" aria-haspopup="true" aria-expanded="false" role="button" href="/docs/overview/">4.17.0</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/docs/next/overview/">Next</a></li><li><a class="dropdown__link" href="/docs/overview/">4.17.0</a></li><li><a class="dropdown__link" href="/docs/4.16.5/overview/">4.16.5</a></li><li><a class="dropdown__link" href="/docs/4.15.5/overview/">4.15.5</a></li><li><a class="dropdown__link" href="/docs/4.14.8/overview/">4.14.8</a></li><li><a class="dropdown__link" href="/docs/4.13.0/overview/">4.13.0</a></li><li><a class="dropdown__link" href="/docs/4.12.1/overview/">4.12.1</a></li><li><a class="dropdown__link" href="/docs/4.11.1/overview/">4.11.1</a></li><li><a class="dropdown__link" href="/docs/4.10.0/overview/">4.10.0</a></li><li><a class="dropdown__link" href="/docs/4.9.2/overview/">4.9.2</a></li><li><a class="dropdown__link" href="/docs/4.8.2/overview/">4.8.2</a></li><li><a class="dropdown__link" href="/docs/4.7.3/overview/">4.7.3</a></li><li><a class="dropdown__link" href="/docs/4.6.2/overview/">4.6.2</a></li><li><a class="dropdown__link" href="/docs/4.5.1/overview/">4.5.1</a></li></ul></div><a class="navbar__item navbar__link" href="/releases">Download</a><div class="toggle_vylO colorModeToggle_DEke"><button class="clean-btn toggleButton_gllP toggleButtonDisabled_aARS" type="button" disabled="" title="Switch between dark and light mode (currently light mode)" aria-label="Switch between dark and light mode (currently light mode)" aria-live="polite"><svg viewBox="0 0 24 24" width="24" height="24" class="lightToggleIcon_pyhR"><path fill="currentColor" d="M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"></path></svg><svg viewBox="0 0 24 24" width="24" height="24" class="darkToggleIcon_wfgR"><path fill="currentColor" d="M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"></path></svg></button></div><div class="searchBox_ZlJk"></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div></nav><div id="docusaurus_skipToContent_fallback" class="main-wrapper mainWrapper_z2l0"><main class="container container--fluid margin-vert--lg"><div class="row mdxPageWrapper_j9I6"><div class="col col--8"><article><h1>BP-29: Metadata API module</h1><h3 class="anchor anchorWithStickyNavbar_LWe7" id="motivation">Motivation<a href="#motivation" class="hash-link" aria-label="Direct link to Motivation" title="Direct link to Motivation">​</a></h3><p>We have already abstracted all the metadata operations into interfaces. And all the bookkeeper implementations only reply on metadata interfaces,
 rather than depending on zookeeper. This proposal is to organize the metadata interfaces and its implementations in a separate module and make
 bookkeeper implementation only depends on metadata interfaces, not depends on zookeeper. This would a few benefits:</p><ul><li>It allows supporting different metadata storages, without bringing in dependencies of metadata store implementation directly into
 bookkeeper-server module. The development of different metadata storage can be done without interleaving with each other.</li><li>It would define a clean module dependency between bookkeeper implementation and metadata api, and how bookkeeper load a different metadata
@@ -39,7 +39,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/bps/BP-31-durability/index.html b/content/bps/BP-31-durability/index.html
index 5bb56e0..3514111 100644
--- a/content/bps/BP-31-durability/index.html
+++ b/content/bps/BP-31-durability/index.html
@@ -4,12 +4,12 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">BP-31: BookKeeper Durability (Anchor) | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/bps/BP-31-durability"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docusaurus_tag" content="default"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docsearch:docusaurus_tag" content="default"><meta data-rh="true" property="og:title" content="BP-31: BookKeeper Durability (Anchor) | Apache BookKeeper"><meta data-rh="true" name="description" content="Motivation"><meta data-rh="true" property="og:description" content="Motivation"><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/bps/BP-31-durability"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/bps/BP-31-durability" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/bps/BP-31-durability" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
-<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navbar__brand" href="/"><div class="navbar__logo"><img src="/img/bk-logo.svg" alt="Apache Bookkeeper" class="themedImage_ToTc themedImage--light_HNdA"><img src="/img/bk-logo.svg" alt="Apache Bookkeeper" class="themedImage_ToTc themedImage--dark_i4oU"></div><b class="navbar__title text--truncate">Apache BookKeeper</b></a><a class="navbar__item navbar__link" href="/docs/overview/">Documentation</a><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Community</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/community/mailing-lists">Mailing lists</a></li><li><a class="dropdown__link" href="/community/slack">Slack</a></li><li><a href="https://github.com/apache/bookkeeper/issues" target="_blank" rel="noopener noreferrer" class="dropdown__link">Github issues<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a class="dropdown__link" href="/community/releases">Release management</a></li><li><a class="dropdown__link" href="/community/meeting">Community meetings</a></li><li><a class="dropdown__link" href="/community/contributing">Contribution guide</a></li><li><a class="dropdown__link" href="/community/coding-guide">Coding guide</a></li><li><a class="dropdown__link" href="/community/testing">Testing guide</a></li><li><a class="dropdown__link" href="/community/issue-report">Issue report guide</a></li><li><a class="dropdown__link" href="/community/release-guide">Release guide</a></li><li><a class="dropdown__link" href="/community/presentations">Presentations</a></li><li><a class="dropdown__link" href="/community/bookkeeper-proposals">BookKeeper proposals (BP)</a></li></ul></div><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Project</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/project/who">Who are we?</a></li><li><a class="dropdown__link" href="/project/bylaws">Bylaws</a></li><li><a href="https://apache.org/licenses" target="_blank" rel="noopener noreferrer" class="dropdown__link">License<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a class="dropdown__link" href="/project/privacy">Privacy policy</a></li><li><a href="https://www.apache.org/foundation/sponsorship.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Sponsorship<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a href="https://www.apache.org/foundation/thanks.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Thanks<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div></div><div class="navbar__items navbar__items--right"><div class="navbar__item dropdown dropdown--hoverable dropdown--right"><a class="navbar__link" aria-haspopup="true" aria-expanded="false" role="button" href="/docs/admin/autorecovery">4.17.0</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/docs/next/overview/">Next</a></li><li><a class="dropdown__link" href="/docs/admin/autorecovery">4.17.0</a></li><li><a class="dropdown__link" href="/docs/4.16.5/overview/">4.16.5</a></li><li><a class="dropdown__link" href="/docs/4.15.5/overview/">4.15.5</a></li><li><a class="dropdown__link" href="/docs/4.14.8/overview/">4.14.8</a></li><li><a class="dropdown__link" href="/docs/4.13.0/overview/">4.13.0</a></li><li><a class="dropdown__link" href="/docs/4.12.1/overview/">4.12.1</a></li><li><a class="dropdown__link" href="/docs/4.11.1/overview/">4.11.1</a></li><li><a class="dropdown__link" href="/docs/4.10.0/overview/">4.10.0</a></li><li><a class="dropdown__link" href="/docs/4.9.2/overview/">4.9.2</a></li><li><a class="dropdown__link" href="/docs/4.8.2/overview/">4.8.2</a></li><li><a class="dropdown__link" href="/docs/4.7.3/overview/">4.7.3</a></li><li><a class="dropdown__link" href="/docs/4.6.2/overview/">4.6.2</a></li><li><a class="dropdown__link" href="/docs/4.5.1/overview/">4.5.1</a></li></ul></div><a class="navbar__item navbar__link" href="/releases">Download</a><div class="toggle_vylO colorModeToggle_DEke"><button class="clean-btn toggleButton_gllP toggleButtonDisabled_aARS" type="button" disabled="" title="Switch between dark and light mode (currently light mode)" aria-label="Switch between dark and light mode (currently light mode)" aria-live="polite"><svg viewBox="0 0 24 24" width="24" height="24" class="lightToggleIcon_pyhR"><path fill="currentColor" d="M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"></path></svg><svg viewBox="0 0 24 24" width="24" height="24" class="darkToggleIcon_wfgR"><path fill="currentColor" d="M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"></path></svg></button></div><div class="searchBox_ZlJk"></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div></nav><div id="docusaurus_skipToContent_fallback" class="main-wrapper mainWrapper_z2l0"><main class="container container--fluid margin-vert--lg"><div class="row mdxPageWrapper_j9I6"><div class="col col--8"><article><h1>BP-31: BookKeeper Durability (Anchor)</h1><h2 class="anchor anchorWithStickyNavbar_LWe7" id="motivation">Motivation<a href="#motivation" class="hash-link" aria-label="Direct link to Motivation" title="Direct link to Motivation">​</a></h2><p>Apache BookKeeper is transitioning into a full fledged distributed storage that can keep the data for long term. Durability is paramount to achieve the status of trusted store. This Anchor BP discusses many gaps and areas of improvement.  Each issue listed here will have another issue and this BP is expected to be updated when that issue is created.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="durability-contract">Durability Contract<a href="#durability-contract" class="hash-link" aria-label="Direct link to Durability Contract" title="Direct link to Durability Contract">​</a></h2><ol><li><strong>Maintain WQ copies all the time</strong>. If any ledger falls into under replicated state, there needs to be an SLA on how quickly the replication levels can be brought back to normal levels.</li><li><strong>Enforce Placement Policy</strong> strictly during write and replication.</li><li><strong>Protect the data</strong> against corruption on the wire or at rest.</li></ol><h2 class="anchor anchorWithStickyNavbar_LWe7" id="work-grouping-in-the-order-of-priority">Work Grouping (In the order of priority)<a href="#work-grouping-in-the-order-of-priority" class="hash-link" aria-label="Direct link to Work Grouping (In the order of priority)" title="Direct link to Work Grouping (In the order of priority)">​</a></h2><h3 class="anchor anchorWithStickyNavbar_LWe7" id="detect-durability-validation">Detect Durability Validation<a href="#detect-durability-validation" class="hash-link" aria-label="Direct link to Detect Durability Validation" title="Direct link to Detect Durability Validation">​</a></h3><p>First step is to understand the areas of durability breaches. Design metrics that record durability contract violations. </p><ul><li>At the Creation: Validate durability contract when the ledger is being created</li><li>At the Deletion: Validate durability contract when ledger is deleted</li><li>During lifetime: Validate durability contract during the lifetime of the ledger.(periodic validator)</li><li>During Read: IO or Checksum errors in the read path</li></ul><h3 class="anchor anchorWithStickyNavbar_LWe7" id="delete-discipline">Delete Discipline<a href="#delete-discipline" class="hash-link" aria-label="Direct link to Delete Discipline" title="Direct link to Delete Discipline">​</a></h3><ul><li>Build a single delete choke point with stringent validations</li><li>Archival bit in the metadata to assist Two phase Deletes</li><li>Stateful/Explicit Deletes</li></ul><h3 class="anchor anchorWithStickyNavbar_LWe7" id="metadata-recovery">Metadata Recovery<a href="#metadata-recovery" class="hash-link" aria-label="Direct link to Metadata Recovery" title="Direct link to Metadata Recovery">​</a></h3><ul><li>Metadata recovery tool to reconstruct the metadata if the metadata server gets wiped out. This tool need to make sure that the data is readable even if we can&#x27;t get all the metadata (ex: ctime) back.</li></ul><h3 class="anchor anchorWithStickyNavbar_LWe7" id="plug-durability-violations">Plug Durability Violations<a href="#plug-durability-violations" class="hash-link" aria-label="Direct link to Plug Durability Violations" title="Direct link to Plug Durability Violations">​</a></h3><p>Our first step is to identify durability viloations. That gives us the magnitude of the problem and areas that we need to focus. In this phase, fix high impact areas.</p><ul><li>Identify source of problems detected by the work we did in step-1 above (Detect Durability Validation)</li><li>Rereplicate under replicated ledgers detected during write</li><li>Rereplicate under replicated / corrupted ledgers detected during read</li><li>Replicated under replicated ledgers identified by periodic validator.</li></ul><h3 class="anchor anchorWithStickyNavbar_LWe7" id="durability-test">Durability Test<a href="#durability-test" class="hash-link" aria-label="Direct link to Durability Test" title="Direct link to Durability Test">​</a></h3><ul><li>Test plan, new tests and integrating it into CI pipeline. </li></ul><h3 class="anchor anchorWithStickyNavbar_LWe7" id="introduce-bookie-incarnation">Introduce bookie incarnation<a href="#introduce-bookie-incarnation" class="hash-link" aria-label="Direct link to Introduce bookie incarnation" title="Direct link to Introduce bookie incarnation">​</a></h3><ul><li>Design/Implement bookie incarnation mechanism </li></ul><h3 class="anchor anchorWithStickyNavbar_LWe7" id="end-2-end-checksum">End 2 End Checksum<a href="#end-2-end-checksum" class="hash-link" aria-label="Direct link to End 2 End Checksum" title="Direct link to End 2 End Checksum">​</a></h3><ul><li>Efficient checksum implementation (crc32c?)</li><li>Implement checksum validation on bookies in the write path. </li></ul><h3 class="anchor anchorWithStickyNavbar_LWe7" id="soft-deletes">Soft Deletes<a href="#soft-deletes" class="hash-link" aria-label="Direct link to Soft Deletes" title="Direct link to Soft Deletes">​</a></h3><ul><li>Design and implement soft delete feature</li></ul><h3 class="anchor anchorWithStickyNavbar_LWe7" id="bitrot-detection">BitRot detection<a href="#bitrot-detection" class="hash-link" aria-label="Direct link to BitRot detection" title="Direct link to BitRot detection">​</a></h3><ul><li>Design and implement bitrot detection/correction.</li></ul><h2 class="anchor anchorWithStickyNavbar_LWe7" id="durability-contract-violations">Durability Contract Violations<a href="#durability-contract-violations" class="hash-link" aria-label="Direct link to Durability Contract Violations" title="Direct link to Durability Contract Violations">​</a></h2><h3 class="anchor anchorWithStickyNavbar_LWe7" id="write-errors-beyond-aq-are-ignored">Write errors beyond AQ are ignored.<a href="#write-errors-beyond-aq-are-ignored" class="hash-link" aria-label="Direct link to Write errors beyond AQ are ignored." title="Direct link to Write errors beyond AQ are ignored.">​</a></h3><p>BK client library transparently corrects any write errors while writing to bookie by changing the ensemble. Take a case where <code>WQ:3 and AQ:2</code>. This works fine only if the write fails to the bookie before it gets 2 successful responses. But if the 3rd bookie write fails <strong>after</strong> 2 successful responses and the response sent to client, this error is logged and no immediate action is taken to bring up the replication of the entry.
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navbar__brand" href="/"><div class="navbar__logo"><img src="/img/bk-logo.svg" alt="Apache Bookkeeper" class="themedImage_ToTc themedImage--light_HNdA"><img src="/img/bk-logo.svg" alt="Apache Bookkeeper" class="themedImage_ToTc themedImage--dark_i4oU"></div><b class="navbar__title text--truncate">Apache BookKeeper</b></a><a class="navbar__item navbar__link" href="/docs/overview/">Documentation</a><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Community</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/community/mailing-lists">Mailing lists</a></li><li><a class="dropdown__link" href="/community/slack">Slack</a></li><li><a href="https://github.com/apache/bookkeeper/issues" target="_blank" rel="noopener noreferrer" class="dropdown__link">Github issues<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a class="dropdown__link" href="/community/releases">Release management</a></li><li><a class="dropdown__link" href="/community/meeting">Community meetings</a></li><li><a class="dropdown__link" href="/community/contributing">Contribution guide</a></li><li><a class="dropdown__link" href="/community/coding-guide">Coding guide</a></li><li><a class="dropdown__link" href="/community/testing">Testing guide</a></li><li><a class="dropdown__link" href="/community/issue-report">Issue report guide</a></li><li><a class="dropdown__link" href="/community/release-guide">Release guide</a></li><li><a class="dropdown__link" href="/community/presentations">Presentations</a></li><li><a class="dropdown__link" href="/community/bookkeeper-proposals">BookKeeper proposals (BP)</a></li></ul></div><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Project</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/project/who">Who are we?</a></li><li><a class="dropdown__link" href="/project/bylaws">Bylaws</a></li><li><a href="https://apache.org/licenses" target="_blank" rel="noopener noreferrer" class="dropdown__link">License<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a class="dropdown__link" href="/project/privacy">Privacy policy</a></li><li><a href="https://www.apache.org/foundation/sponsorship.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Sponsorship<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a href="https://www.apache.org/foundation/thanks.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Thanks<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div></div><div class="navbar__items navbar__items--right"><div class="navbar__item dropdown dropdown--hoverable dropdown--right"><a class="navbar__link" aria-haspopup="true" aria-expanded="false" role="button" href="/docs/overview/">4.17.0</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/docs/next/overview/">Next</a></li><li><a class="dropdown__link" href="/docs/overview/">4.17.0</a></li><li><a class="dropdown__link" href="/docs/4.16.5/overview/">4.16.5</a></li><li><a class="dropdown__link" href="/docs/4.15.5/overview/">4.15.5</a></li><li><a class="dropdown__link" href="/docs/4.14.8/overview/">4.14.8</a></li><li><a class="dropdown__link" href="/docs/4.13.0/overview/">4.13.0</a></li><li><a class="dropdown__link" href="/docs/4.12.1/overview/">4.12.1</a></li><li><a class="dropdown__link" href="/docs/4.11.1/overview/">4.11.1</a></li><li><a class="dropdown__link" href="/docs/4.10.0/overview/">4.10.0</a></li><li><a class="dropdown__link" href="/docs/4.9.2/overview/">4.9.2</a></li><li><a class="dropdown__link" href="/docs/4.8.2/overview/">4.8.2</a></li><li><a class="dropdown__link" href="/docs/4.7.3/overview/">4.7.3</a></li><li><a class="dropdown__link" href="/docs/4.6.2/overview/">4.6.2</a></li><li><a class="dropdown__link" href="/docs/4.5.1/overview/">4.5.1</a></li></ul></div><a class="navbar__item navbar__link" href="/releases">Download</a><div class="toggle_vylO colorModeToggle_DEke"><button class="clean-btn toggleButton_gllP toggleButtonDisabled_aARS" type="button" disabled="" title="Switch between dark and light mode (currently light mode)" aria-label="Switch between dark and light mode (currently light mode)" aria-live="polite"><svg viewBox="0 0 24 24" width="24" height="24" class="lightToggleIcon_pyhR"><path fill="currentColor" d="M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"></path></svg><svg viewBox="0 0 24 24" width="24" height="24" class="darkToggleIcon_wfgR"><path fill="currentColor" d="M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"></path></svg></button></div><div class="searchBox_ZlJk"></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div></nav><div id="docusaurus_skipToContent_fallback" class="main-wrapper mainWrapper_z2l0"><main class="container container--fluid margin-vert--lg"><div class="row mdxPageWrapper_j9I6"><div class="col col--8"><article><h1>BP-31: BookKeeper Durability (Anchor)</h1><h2 class="anchor anchorWithStickyNavbar_LWe7" id="motivation">Motivation<a href="#motivation" class="hash-link" aria-label="Direct link to Motivation" title="Direct link to Motivation">​</a></h2><p>Apache BookKeeper is transitioning into a full fledged distributed storage that can keep the data for long term. Durability is paramount to achieve the status of trusted store. This Anchor BP discusses many gaps and areas of improvement.  Each issue listed here will have another issue and this BP is expected to be updated when that issue is created.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="durability-contract">Durability Contract<a href="#durability-contract" class="hash-link" aria-label="Direct link to Durability Contract" title="Direct link to Durability Contract">​</a></h2><ol><li><strong>Maintain WQ copies all the time</strong>. If any ledger falls into under replicated state, there needs to be an SLA on how quickly the replication levels can be brought back to normal levels.</li><li><strong>Enforce Placement Policy</strong> strictly during write and replication.</li><li><strong>Protect the data</strong> against corruption on the wire or at rest.</li></ol><h2 class="anchor anchorWithStickyNavbar_LWe7" id="work-grouping-in-the-order-of-priority">Work Grouping (In the order of priority)<a href="#work-grouping-in-the-order-of-priority" class="hash-link" aria-label="Direct link to Work Grouping (In the order of priority)" title="Direct link to Work Grouping (In the order of priority)">​</a></h2><h3 class="anchor anchorWithStickyNavbar_LWe7" id="detect-durability-validation">Detect Durability Validation<a href="#detect-durability-validation" class="hash-link" aria-label="Direct link to Detect Durability Validation" title="Direct link to Detect Durability Validation">​</a></h3><p>First step is to understand the areas of durability breaches. Design metrics that record durability contract violations. </p><ul><li>At the Creation: Validate durability contract when the ledger is being created</li><li>At the Deletion: Validate durability contract when ledger is deleted</li><li>During lifetime: Validate durability contract during the lifetime of the ledger.(periodic validator)</li><li>During Read: IO or Checksum errors in the read path</li></ul><h3 class="anchor anchorWithStickyNavbar_LWe7" id="delete-discipline">Delete Discipline<a href="#delete-discipline" class="hash-link" aria-label="Direct link to Delete Discipline" title="Direct link to Delete Discipline">​</a></h3><ul><li>Build a single delete choke point with stringent validations</li><li>Archival bit in the metadata to assist Two phase Deletes</li><li>Stateful/Explicit Deletes</li></ul><h3 class="anchor anchorWithStickyNavbar_LWe7" id="metadata-recovery">Metadata Recovery<a href="#metadata-recovery" class="hash-link" aria-label="Direct link to Metadata Recovery" title="Direct link to Metadata Recovery">​</a></h3><ul><li>Metadata recovery tool to reconstruct the metadata if the metadata server gets wiped out. This tool need to make sure that the data is readable even if we can&#x27;t get all the metadata (ex: ctime) back.</li></ul><h3 class="anchor anchorWithStickyNavbar_LWe7" id="plug-durability-violations">Plug Durability Violations<a href="#plug-durability-violations" class="hash-link" aria-label="Direct link to Plug Durability Violations" title="Direct link to Plug Durability Violations">​</a></h3><p>Our first step is to identify durability viloations. That gives us the magnitude of the problem and areas that we need to focus. In this phase, fix high impact areas.</p><ul><li>Identify source of problems detected by the work we did in step-1 above (Detect Durability Validation)</li><li>Rereplicate under replicated ledgers detected during write</li><li>Rereplicate under replicated / corrupted ledgers detected during read</li><li>Replicated under replicated ledgers identified by periodic validator.</li></ul><h3 class="anchor anchorWithStickyNavbar_LWe7" id="durability-test">Durability Test<a href="#durability-test" class="hash-link" aria-label="Direct link to Durability Test" title="Direct link to Durability Test">​</a></h3><ul><li>Test plan, new tests and integrating it into CI pipeline. </li></ul><h3 class="anchor anchorWithStickyNavbar_LWe7" id="introduce-bookie-incarnation">Introduce bookie incarnation<a href="#introduce-bookie-incarnation" class="hash-link" aria-label="Direct link to Introduce bookie incarnation" title="Direct link to Introduce bookie incarnation">​</a></h3><ul><li>Design/Implement bookie incarnation mechanism </li></ul><h3 class="anchor anchorWithStickyNavbar_LWe7" id="end-2-end-checksum">End 2 End Checksum<a href="#end-2-end-checksum" class="hash-link" aria-label="Direct link to End 2 End Checksum" title="Direct link to End 2 End Checksum">​</a></h3><ul><li>Efficient checksum implementation (crc32c?)</li><li>Implement checksum validation on bookies in the write path. </li></ul><h3 class="anchor anchorWithStickyNavbar_LWe7" id="soft-deletes">Soft Deletes<a href="#soft-deletes" class="hash-link" aria-label="Direct link to Soft Deletes" title="Direct link to Soft Deletes">​</a></h3><ul><li>Design and implement soft delete feature</li></ul><h3 class="anchor anchorWithStickyNavbar_LWe7" id="bitrot-detection">BitRot detection<a href="#bitrot-detection" class="hash-link" aria-label="Direct link to BitRot detection" title="Direct link to BitRot detection">​</a></h3><ul><li>Design and implement bitrot detection/correction.</li></ul><h2 class="anchor anchorWithStickyNavbar_LWe7" id="durability-contract-violations">Durability Contract Violations<a href="#durability-contract-violations" class="hash-link" aria-label="Direct link to Durability Contract Violations" title="Direct link to Durability Contract Violations">​</a></h2><h3 class="anchor anchorWithStickyNavbar_LWe7" id="write-errors-beyond-aq-are-ignored">Write errors beyond AQ are ignored.<a href="#write-errors-beyond-aq-are-ignored" class="hash-link" aria-label="Direct link to Write errors beyond AQ are ignored." title="Direct link to Write errors beyond AQ are ignored.">​</a></h3><p>BK client library transparently corrects any write errors while writing to bookie by changing the ensemble. Take a case where <code>WQ:3 and AQ:2</code>. This works fine only if the write fails to the bookie before it gets 2 successful responses. But if the 3rd bookie write fails <strong>after</strong> 2 successful responses and the response sent to client, this error is logged and no immediate action is taken to bring up the replication of the entry.
 This case <strong>may not be</strong>  detected by the auditor’s periodic ledger check. Given that we allow out of order write, that in the combination of 2 out of 3 to satisfy client, it is possible to have under replication in the middle of the ensemble entry. Hence ledgercheck is not going to find all under replication cases, on top of that,   periodic ledger check  is a complete sweep of the store, an very expensive and slow crawl hence defaulted to once a week run.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="strict-enforcement-of-placement-policy">Strict enforcement of placement policy<a href="#strict-enforcement-of-placement-policy" class="hash-link" aria-label="Direct link to Strict enforcement of placement policy" title="Direct link to Strict enforcement of placement policy">​</a></h3><p>The best effort placement policy increases the write availability but at the cost of durability. Due to this non-strict placement, BK can’t guarantee data availability when a fault domain (rack) is lost. This also makes rolling upgrade across fault domains more difficult/non possible. Need to enforce strict ensemble placement and fail the write if all WQ copies are not able to be placed across different fault domains.  Minor fix/enhancement if we agree to give placement higher priority than a successful write(availability)</p><p>The auditor re-replication uses client library to find a replacement bookie for each ledger in the lost bookie. But bookies are unaware of the ledger ensemble placement policy as this information is not part of metadata. </p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="detect-and-act-on-ledger-disk-problems">Detect and act on Ledger disk problems<a href="#detect-and-act-on-ledger-disk-problems" class="hash-link" aria-label="Direct link to Detect and act on Ledger disk problems" title="Direct link to Detect and act on Ledger disk problems">​</a></h3><p>While Auditor mechanism detects complete bookie crash, there is no mechanism to detect individual ledger disk errors. So if a ledger disk goes bad, bookie continues to run, and auditor can’t recognize under replication condition, until it runs the complete sweep, periodic ledger check. On the other hand bookie refuses to come up if it finds a bad disk, which is right thing to do. This is easy to fix, in the interleaved ledger manger bad disk handle.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="checksum-at-bookies-in-the-write-path">Checksum at bookies in the write path<a href="#checksum-at-bookies-in-the-write-path" class="hash-link" aria-label="Direct link to Checksum at bookies in the write path" title="Direct link to Checksum at bookies in the write path">​</a></h3><p>Lack of checksum calculations on the write path makes the store not to detect any corruption at the source issues. Imagine NIC issues on the client. If data gets corrupted at the client NIC’s level it safely gets stored on bookies (for the lack of crc calculations in the write path). This is a silent corruption of all 3 copies.  For additional durability guarantees we can add checksum verification on bookies in the write path. Checksum calculations are cpu intensive and will add to the latency. But Java9 is adding native support for CRC32-C - A hardware assisted CRC calculation. We can consider adding this additional during JAVA-9 port after evaluating performance tradeoffs. </p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="no-repair-in-the-read-path">No repair in the read path<a href="#no-repair-in-the-read-path" class="hash-link" aria-label="Direct link to No repair in the read path" title="Direct link to No repair in the read path">​</a></h3><p>When a checksum error is detected, in addition to finding good replica, sfstore need to repair(replace with good one) bad replica too.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="operations">Operations<a href="#operations" class="hash-link" aria-label="Direct link to Operations" title="Direct link to Operations">​</a></h2><h3 class="anchor anchorWithStickyNavbar_LWe7" id="no-bookie-incarnation-mechanism">No bookie incarnation mechanism<a href="#no-bookie-incarnation-mechanism" class="hash-link" aria-label="Direct link to No bookie incarnation mechanism" title="Direct link to No bookie incarnation mechanism">​</a></h3><p>A bookie <code>B1 at time t1</code> ; and same bookie <code>B1 at time t2</code> after bookie format are treated in the same way.
 For this to cause any durability issues:</p><ul><li>Replication/Auditor mechanism is stopped or not running for some reason. (A stuck auditor will start a new one due to ZK)</li><li>One of bookies(B1) went down (crash or something)</li><li>B1’s Journal dir and all ledger dir got wiped.</li><li>B1 came back to life as a fresh bookie</li><li>Auditor is enabled  monitoring again</li></ul><p>At this point auditor doesn’t have capability to know that the B1 in the cluster is not the same B1 that it used to be. Hence doesn’t consider it for under replication. This is a pathological scenario but we at least need to have a mechanism to identify and alert this scenario if not taking care of bookie incarnation issue.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="enhancements">Enhancements<a href="#enhancements" class="hash-link" aria-label="Direct link to Enhancements" title="Direct link to Enhancements">​</a></h2><h3 class="anchor anchorWithStickyNavbar_LWe7" id="delete-choke-points">Delete Choke Points<a href="#delete-choke-points" class="hash-link" aria-label="Direct link to Delete Choke Points" title="Direct link to Delete Choke Points">​</a></h3><p>Every delete must go through single routine/path in the code and that needs to implement additional checks to perform physical delete.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="archival-bit-in-the-metadata-to-assist-two-phase-deletes">Archival bit in the metadata to assist Two phase Deletes<a href="#archival-bit-in-the-metadata-to-assist-two-phase-deletes" class="hash-link" aria-label="Direct link to Archival bit in the metadata to assist Two phase Deletes" title="Direct link to Archival bit in the metadata to assist Two phase Deletes">​</a></h3><p>Main aim of this feature is to be as conservative as possible on the delete path. As explained in the stateful explicit deletes section, lack of ledgerId in the metadata means that ledger is deleted. A bug in the client code may erroneously delete the ledger. To protect from that, we want to introduce a archive/backedup bit. A separate backup/archival application can mark the bit after successfully backing up the ledger, and later on main client application will send the delete. If this feature is enabled, BK client will reject and throw an exception if it receives a delete request without archival/backed-up bit is not set. This protects the data from bugs and erroneous deletes.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="stateful-explicit-deltes">Stateful explicit deltes<a href="#stateful-explicit-deltes" class="hash-link" aria-label="Direct link to Stateful explicit deltes" title="Direct link to Stateful explicit deltes">​</a></h3><p>Current bookkeeper deletes synchronously deletes the metadata in the zookeeper. Bookies implicitly assume that a particular ledger is deleted if it is not present in the metadata. This process has no crosscheck if the ledger is actually deleted. Any ZK corruption or loss of the ledger path znodes will make bookies to delete data on the disk. No cross check. Even bugs in bookie code which ‘determines’ if a ledger is present on the zk or not, may lead to data deletion. </p><p>Right way to deal with this is to asynchronously delete metadata after each bookie explicitly checks that a particular ledger is deleted. This way each bookie explicitly checks the ‘delete state’ of the ledger before deleting on the disk data. One of the proposal is to move the deleted ledgers under /deleted/<!-- -->&lt;<!-- -->ledgerId<!-- -->&gt;<!-- --> other idea is to add a delete state, Open-&gt;Closed-&gt;Deleted.</p><p>As soon as we make the metadata deletions asynchronous, the immediate question is who will delete it?
 Option-1: A centralized process like auditor will be responsible for deleting metadata after each bookie deletes on disk data.
@@ -46,7 +46,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/bps/BP-32-advisory-write-close/index.html b/content/bps/BP-32-advisory-write-close/index.html
index 8ff48f7..226efc5 100644
--- a/content/bps/BP-32-advisory-write-close/index.html
+++ b/content/bps/BP-32-advisory-write-close/index.html
@@ -4,12 +4,12 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">BP-32: Advisory (optimistic) write close | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/bps/BP-32-advisory-write-close"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docusaurus_tag" content="default"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docsearch:docusaurus_tag" content="default"><meta data-rh="true" property="og:title" content="BP-32: Advisory (optimistic) write close | Apache BookKeeper"><meta data-rh="true" name="description" content="Motivation"><meta data-rh="true" property="og:description" content="Motivation"><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/bps/BP-32-advisory-write-close"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/bps/BP-32-advisory-write-close" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/bps/BP-32-advisory-write-close" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
-<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navbar__brand" href="/"><div class="navbar__logo"><img src="/img/bk-logo.svg" alt="Apache Bookkeeper" class="themedImage_ToTc themedImage--light_HNdA"><img src="/img/bk-logo.svg" alt="Apache Bookkeeper" class="themedImage_ToTc themedImage--dark_i4oU"></div><b class="navbar__title text--truncate">Apache BookKeeper</b></a><a class="navbar__item navbar__link" href="/docs/overview/">Documentation</a><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Community</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/community/mailing-lists">Mailing lists</a></li><li><a class="dropdown__link" href="/community/slack">Slack</a></li><li><a href="https://github.com/apache/bookkeeper/issues" target="_blank" rel="noopener noreferrer" class="dropdown__link">Github issues<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a class="dropdown__link" href="/community/releases">Release management</a></li><li><a class="dropdown__link" href="/community/meeting">Community meetings</a></li><li><a class="dropdown__link" href="/community/contributing">Contribution guide</a></li><li><a class="dropdown__link" href="/community/coding-guide">Coding guide</a></li><li><a class="dropdown__link" href="/community/testing">Testing guide</a></li><li><a class="dropdown__link" href="/community/issue-report">Issue report guide</a></li><li><a class="dropdown__link" href="/community/release-guide">Release guide</a></li><li><a class="dropdown__link" href="/community/presentations">Presentations</a></li><li><a class="dropdown__link" href="/community/bookkeeper-proposals">BookKeeper proposals (BP)</a></li></ul></div><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Project</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/project/who">Who are we?</a></li><li><a class="dropdown__link" href="/project/bylaws">Bylaws</a></li><li><a href="https://apache.org/licenses" target="_blank" rel="noopener noreferrer" class="dropdown__link">License<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a class="dropdown__link" href="/project/privacy">Privacy policy</a></li><li><a href="https://www.apache.org/foundation/sponsorship.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Sponsorship<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a href="https://www.apache.org/foundation/thanks.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Thanks<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div></div><div class="navbar__items navbar__items--right"><div class="navbar__item dropdown dropdown--hoverable dropdown--right"><a class="navbar__link" aria-haspopup="true" aria-expanded="false" role="button" href="/docs/admin/autorecovery">4.17.0</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/docs/next/overview/">Next</a></li><li><a class="dropdown__link" href="/docs/admin/autorecovery">4.17.0</a></li><li><a class="dropdown__link" href="/docs/4.16.5/overview/">4.16.5</a></li><li><a class="dropdown__link" href="/docs/4.15.5/overview/">4.15.5</a></li><li><a class="dropdown__link" href="/docs/4.14.8/overview/">4.14.8</a></li><li><a class="dropdown__link" href="/docs/4.13.0/overview/">4.13.0</a></li><li><a class="dropdown__link" href="/docs/4.12.1/overview/">4.12.1</a></li><li><a class="dropdown__link" href="/docs/4.11.1/overview/">4.11.1</a></li><li><a class="dropdown__link" href="/docs/4.10.0/overview/">4.10.0</a></li><li><a class="dropdown__link" href="/docs/4.9.2/overview/">4.9.2</a></li><li><a class="dropdown__link" href="/docs/4.8.2/overview/">4.8.2</a></li><li><a class="dropdown__link" href="/docs/4.7.3/overview/">4.7.3</a></li><li><a class="dropdown__link" href="/docs/4.6.2/overview/">4.6.2</a></li><li><a class="dropdown__link" href="/docs/4.5.1/overview/">4.5.1</a></li></ul></div><a class="navbar__item navbar__link" href="/releases">Download</a><div class="toggle_vylO colorModeToggle_DEke"><button class="clean-btn toggleButton_gllP toggleButtonDisabled_aARS" type="button" disabled="" title="Switch between dark and light mode (currently light mode)" aria-label="Switch between dark and light mode (currently light mode)" aria-live="polite"><svg viewBox="0 0 24 24" width="24" height="24" class="lightToggleIcon_pyhR"><path fill="currentColor" d="M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"></path></svg><svg viewBox="0 0 24 24" width="24" height="24" class="darkToggleIcon_wfgR"><path fill="currentColor" d="M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"></path></svg></button></div><div class="searchBox_ZlJk"></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div></nav><div id="docusaurus_skipToContent_fallback" class="main-wrapper mainWrapper_z2l0"><main class="container container--fluid margin-vert--lg"><div class="row mdxPageWrapper_j9I6"><div class="col col--8"><article><h1>BP-32: Advisory (optimistic) write close</h1><h3 class="anchor anchorWithStickyNavbar_LWe7" id="motivation">Motivation<a href="#motivation" class="hash-link" aria-label="Direct link to Motivation" title="Direct link to Motivation">​</a></h3><p>With <a href="https://github.com/apache/bookkeeper/issues/570" target="_blank" rel="noopener noreferrer">entrylog per ledger feature</a> there will be dedicated entrylog for each ledger and it provides EntryLogManagerForEntryLogPerLedger (EntryLogManager). Since there is going to be entrylog per ledger, with the current Bookie implementation there is no way for EntryLogManagerForEntryLogPerLedger (EntryLogManager) to know when the entrylog is writeclosed, so that entrylog for the active ledger can be rotated. So it would be ideal to have explicit call to EntryLogger when the write for this ledger is done and it is writeclosed, so that it can rotate the entrylog as soon as it is write closed. This will minimize the number of entrylogs/file descriptors that are open/active and also it will make progress in leastUnflushedLogId, so that GarbageCollectorThread can consider these entrylogs for garbage collection.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="proposed-changes">Proposed Changes<a href="#proposed-changes" class="hash-link" aria-label="Direct link to Proposed Changes" title="Direct link to Proposed Changes">​</a></h3><p>So in entrylog per ledger feature implementation, as a first step of handling this, expireAfterAccess (each entrylog should be automatically rotated from the current active entrylog list once a fixed duration has elapsed after the last access of entrylog for addEntry) will be implemented and also the maximum number of entrylogs that can be active at a given time (this is for limiting number of entrylogs/filedescriptors open at a given time).</p><p>The above mentioned approaches are preliminary ways of handling but it would be ideal to have explicit call to EntryLogger when the write for this ledger is done so that it can rotate the entrylog as soon as it is write closed. So to implement this following can be done</p><ul><li><p>have explicit write close request. This write close request should be sent to the current ensemble when the write handle is closed. This should be just optimistic write close operation and callback of this operation should be just logger, saying if it is succeeded / partially succeeded / failed. This should be done asynchronously and the write handle close operation should not be blocked for this response.</p></li><li><p>In the case of ledger recover open, readrequest (ReadEntryProcessorV3) with fence flag, can take care of calling appropriate methods in ledgerdescriptor / entry logger to rotate the entrylog for the ledger</p></li><li><p>in the case of auto-replication case, LedgerFragmentReplicator already uses bookieclient for addEntry (bkc.getBookieClient().addEntry), the same bookieClient instance can be used to call explicit writeClose method in bookieclient.</p></li><li><p>in the case of any write failure in bookie for an entry, then before sending error response to the client do entrylog rotation</p></li></ul><p>EntryLogManagerForEntryLogPerLedger is the class which is last layer in the stack to receive this writeClose call for a ledger, it would store this info in in-memory data structure and when next next checkpoint is called it would rotate entrylogs of these writeclosed ledgers.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="public-interfaces">Public Interfaces<a href="#public-interfaces" class="hash-link" aria-label="Direct link to Public Interfaces" title="Direct link to Public Interfaces">​</a></h3><p>As explained above, this advisory write close should be transparent to Bookkeeper API user, this should be piggybagged in writehandle close call and other internal Bookie / BookieClient internal class methods (ReadEntryProcessorV3.readrequest and LedgerFragmentReplicator). But this feature introduces new protobuf message between Client and Bookie.</p><div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">message WriteCloseRequest {</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    required int64 ledgerId = 1;</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    required bytes masterKey = 2;    </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">}</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">message WriteCloseResponse {</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    required StatusCode status = 1;</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    required int64 ledgerId = 2;  </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">}</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><h3 class="anchor anchorWithStickyNavbar_LWe7" id="compatibility-deprecation-and-migration-plan">Compatibility, Deprecation, and Migration Plan<a href="#compatibility-deprecation-and-migration-plan" class="hash-link" aria-label="Direct link to Compatibility, Deprecation, and Migration Plan" title="Direct link to Compatibility, Deprecation, and Migration Plan">​</a></h3><ul><li>With this feature we are introducing new protocol message. Will do the required Compatibility testing. But since it is going to be advisory (optimistic) in nature, failure in this request in anyway should not affect functioning in any way.</li><li>Also, possibly this explicit write close can be used in future for other purposes.</li></ul><h3 class="anchor anchorWithStickyNavbar_LWe7" id="test-plan">Test Plan<a href="#test-plan" class="hash-link" aria-label="Direct link to Test Plan" title="Direct link to Test Plan">​</a></h3><ul><li>unit tests for all the write/read handle close scenarios, recoveropen and replicator scenarios</li><li>end-to-end integrations tests.</li></ul><h3 class="anchor anchorWithStickyNavbar_LWe7" id="rejected-alternatives">Rejected Alternatives<a href="#rejected-alternatives" class="hash-link" aria-label="Direct link to Rejected Alternatives" title="Direct link to Rejected Alternatives">​</a></h3><p>N/A</p></article></div><div class="col col--2"><div class="tableOfContents_bqdL thin-scrollbar"><ul class="table-of-contents table-of-contents__left-border"><li><a href="#motivation" class="table-of-contents__link toc-highlight">Motivation</a></li><li><a href="#proposed-changes" class="table-of-contents__link toc-highlight">Proposed Changes</a></li><li><a href="#public-interfaces" class="table-of-contents__link toc-highlight">Public Interfaces</a></li><li><a href="#compatibility-deprecation-and-migration-plan" class="table-of-contents__link toc-highlight">Compatibility, Deprecation, and Migration Plan</a></li><li><a href="#test-plan" class="table-of-contents__link toc-highlight">Test Plan</a></li><li><a href="#rejected-alternatives" class="table-of-contents__link toc-highlight">Rejected Alternatives</a></li></ul></div></div></div></main></div><footer class="footer footer--dark"><div class="container container-fluid"><div class="row footer__links"><div class="col footer__col"><div class="footer__title">Documentation</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/docs/overview">Overview</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/getting-started/installation">Getting started</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/deployment/manual">Deployment</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/admin/bookies">Administration</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/api/overview">API</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/security/overview">Security</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/development/protocol">Development</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/reference/config">Reference</a></li></ul></div><div class="col footer__col"><div class="footer__title">Community</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/community/mailing-lists">Mailing lists</a></li><li class="footer__item"><a class="footer__link-item" href="/community/slack">Slack</a></li><li class="footer__item"><a href="https://github.com/apache/bookkeeper" target="_blank" rel="noopener noreferrer" class="footer__link-item">Github<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a href="https://twitter.com/asfbookkeeper" target="_blank" rel="noopener noreferrer" class="footer__link-item">Twitter<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div><div class="col footer__col"><div class="footer__title">Project</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/project/who">Who are we?</a></li><li class="footer__item"><a class="footer__link-item" href="/project/bylaws">Bylaws</a></li><li class="footer__item"><a href="https://apache.org/licenses" target="_blank" rel="noopener noreferrer" class="footer__link-item">License<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a class="footer__link-item" href="/project/privacy">Privacy policy</a></li><li class="footer__item"><a href="https://www.apache.org/foundation/sponsorship.html" target="_blank" rel="noopener noreferrer" class="footer__link-item">Sponsorship<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a href="https://www.apache.org/foundation/thanks.html" target="_blank" rel="noopener noreferrer" class="footer__link-item">Thanks<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div></div><div class="footer__bottom text--center"><div class="footer__copyright"><footer class="footer">
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navbar__brand" href="/"><div class="navbar__logo"><img src="/img/bk-logo.svg" alt="Apache Bookkeeper" class="themedImage_ToTc themedImage--light_HNdA"><img src="/img/bk-logo.svg" alt="Apache Bookkeeper" class="themedImage_ToTc themedImage--dark_i4oU"></div><b class="navbar__title text--truncate">Apache BookKeeper</b></a><a class="navbar__item navbar__link" href="/docs/overview/">Documentation</a><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Community</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/community/mailing-lists">Mailing lists</a></li><li><a class="dropdown__link" href="/community/slack">Slack</a></li><li><a href="https://github.com/apache/bookkeeper/issues" target="_blank" rel="noopener noreferrer" class="dropdown__link">Github issues<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a class="dropdown__link" href="/community/releases">Release management</a></li><li><a class="dropdown__link" href="/community/meeting">Community meetings</a></li><li><a class="dropdown__link" href="/community/contributing">Contribution guide</a></li><li><a class="dropdown__link" href="/community/coding-guide">Coding guide</a></li><li><a class="dropdown__link" href="/community/testing">Testing guide</a></li><li><a class="dropdown__link" href="/community/issue-report">Issue report guide</a></li><li><a class="dropdown__link" href="/community/release-guide">Release guide</a></li><li><a class="dropdown__link" href="/community/presentations">Presentations</a></li><li><a class="dropdown__link" href="/community/bookkeeper-proposals">BookKeeper proposals (BP)</a></li></ul></div><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Project</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/project/who">Who are we?</a></li><li><a class="dropdown__link" href="/project/bylaws">Bylaws</a></li><li><a href="https://apache.org/licenses" target="_blank" rel="noopener noreferrer" class="dropdown__link">License<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a class="dropdown__link" href="/project/privacy">Privacy policy</a></li><li><a href="https://www.apache.org/foundation/sponsorship.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Sponsorship<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a href="https://www.apache.org/foundation/thanks.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Thanks<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div></div><div class="navbar__items navbar__items--right"><div class="navbar__item dropdown dropdown--hoverable dropdown--right"><a class="navbar__link" aria-haspopup="true" aria-expanded="false" role="button" href="/docs/overview/">4.17.0</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/docs/next/overview/">Next</a></li><li><a class="dropdown__link" href="/docs/overview/">4.17.0</a></li><li><a class="dropdown__link" href="/docs/4.16.5/overview/">4.16.5</a></li><li><a class="dropdown__link" href="/docs/4.15.5/overview/">4.15.5</a></li><li><a class="dropdown__link" href="/docs/4.14.8/overview/">4.14.8</a></li><li><a class="dropdown__link" href="/docs/4.13.0/overview/">4.13.0</a></li><li><a class="dropdown__link" href="/docs/4.12.1/overview/">4.12.1</a></li><li><a class="dropdown__link" href="/docs/4.11.1/overview/">4.11.1</a></li><li><a class="dropdown__link" href="/docs/4.10.0/overview/">4.10.0</a></li><li><a class="dropdown__link" href="/docs/4.9.2/overview/">4.9.2</a></li><li><a class="dropdown__link" href="/docs/4.8.2/overview/">4.8.2</a></li><li><a class="dropdown__link" href="/docs/4.7.3/overview/">4.7.3</a></li><li><a class="dropdown__link" href="/docs/4.6.2/overview/">4.6.2</a></li><li><a class="dropdown__link" href="/docs/4.5.1/overview/">4.5.1</a></li></ul></div><a class="navbar__item navbar__link" href="/releases">Download</a><div class="toggle_vylO colorModeToggle_DEke"><button class="clean-btn toggleButton_gllP toggleButtonDisabled_aARS" type="button" disabled="" title="Switch between dark and light mode (currently light mode)" aria-label="Switch between dark and light mode (currently light mode)" aria-live="polite"><svg viewBox="0 0 24 24" width="24" height="24" class="lightToggleIcon_pyhR"><path fill="currentColor" d="M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"></path></svg><svg viewBox="0 0 24 24" width="24" height="24" class="darkToggleIcon_wfgR"><path fill="currentColor" d="M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"></path></svg></button></div><div class="searchBox_ZlJk"></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div></nav><div id="docusaurus_skipToContent_fallback" class="main-wrapper mainWrapper_z2l0"><main class="container container--fluid margin-vert--lg"><div class="row mdxPageWrapper_j9I6"><div class="col col--8"><article><h1>BP-32: Advisory (optimistic) write close</h1><h3 class="anchor anchorWithStickyNavbar_LWe7" id="motivation">Motivation<a href="#motivation" class="hash-link" aria-label="Direct link to Motivation" title="Direct link to Motivation">​</a></h3><p>With <a href="https://github.com/apache/bookkeeper/issues/570" target="_blank" rel="noopener noreferrer">entrylog per ledger feature</a> there will be dedicated entrylog for each ledger and it provides EntryLogManagerForEntryLogPerLedger (EntryLogManager). Since there is going to be entrylog per ledger, with the current Bookie implementation there is no way for EntryLogManagerForEntryLogPerLedger (EntryLogManager) to know when the entrylog is writeclosed, so that entrylog for the active ledger can be rotated. So it would be ideal to have explicit call to EntryLogger when the write for this ledger is done and it is writeclosed, so that it can rotate the entrylog as soon as it is write closed. This will minimize the number of entrylogs/file descriptors that are open/active and also it will make progress in leastUnflushedLogId, so that GarbageCollectorThread can consider these entrylogs for garbage collection.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="proposed-changes">Proposed Changes<a href="#proposed-changes" class="hash-link" aria-label="Direct link to Proposed Changes" title="Direct link to Proposed Changes">​</a></h3><p>So in entrylog per ledger feature implementation, as a first step of handling this, expireAfterAccess (each entrylog should be automatically rotated from the current active entrylog list once a fixed duration has elapsed after the last access of entrylog for addEntry) will be implemented and also the maximum number of entrylogs that can be active at a given time (this is for limiting number of entrylogs/filedescriptors open at a given time).</p><p>The above mentioned approaches are preliminary ways of handling but it would be ideal to have explicit call to EntryLogger when the write for this ledger is done so that it can rotate the entrylog as soon as it is write closed. So to implement this following can be done</p><ul><li><p>have explicit write close request. This write close request should be sent to the current ensemble when the write handle is closed. This should be just optimistic write close operation and callback of this operation should be just logger, saying if it is succeeded / partially succeeded / failed. This should be done asynchronously and the write handle close operation should not be blocked for this response.</p></li><li><p>In the case of ledger recover open, readrequest (ReadEntryProcessorV3) with fence flag, can take care of calling appropriate methods in ledgerdescriptor / entry logger to rotate the entrylog for the ledger</p></li><li><p>in the case of auto-replication case, LedgerFragmentReplicator already uses bookieclient for addEntry (bkc.getBookieClient().addEntry), the same bookieClient instance can be used to call explicit writeClose method in bookieclient.</p></li><li><p>in the case of any write failure in bookie for an entry, then before sending error response to the client do entrylog rotation</p></li></ul><p>EntryLogManagerForEntryLogPerLedger is the class which is last layer in the stack to receive this writeClose call for a ledger, it would store this info in in-memory data structure and when next next checkpoint is called it would rotate entrylogs of these writeclosed ledgers.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="public-interfaces">Public Interfaces<a href="#public-interfaces" class="hash-link" aria-label="Direct link to Public Interfaces" title="Direct link to Public Interfaces">​</a></h3><p>As explained above, this advisory write close should be transparent to Bookkeeper API user, this should be piggybagged in writehandle close call and other internal Bookie / BookieClient internal class methods (ReadEntryProcessorV3.readrequest and LedgerFragmentReplicator). But this feature introduces new protobuf message between Client and Bookie.</p><div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">message WriteCloseRequest {</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    required int64 ledgerId = 1;</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    required bytes masterKey = 2;    </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">}</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">message WriteCloseResponse {</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    required StatusCode status = 1;</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    required int64 ledgerId = 2;  </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">}</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><h3 class="anchor anchorWithStickyNavbar_LWe7" id="compatibility-deprecation-and-migration-plan">Compatibility, Deprecation, and Migration Plan<a href="#compatibility-deprecation-and-migration-plan" class="hash-link" aria-label="Direct link to Compatibility, Deprecation, and Migration Plan" title="Direct link to Compatibility, Deprecation, and Migration Plan">​</a></h3><ul><li>With this feature we are introducing new protocol message. Will do the required Compatibility testing. But since it is going to be advisory (optimistic) in nature, failure in this request in anyway should not affect functioning in any way.</li><li>Also, possibly this explicit write close can be used in future for other purposes.</li></ul><h3 class="anchor anchorWithStickyNavbar_LWe7" id="test-plan">Test Plan<a href="#test-plan" class="hash-link" aria-label="Direct link to Test Plan" title="Direct link to Test Plan">​</a></h3><ul><li>unit tests for all the write/read handle close scenarios, recoveropen and replicator scenarios</li><li>end-to-end integrations tests.</li></ul><h3 class="anchor anchorWithStickyNavbar_LWe7" id="rejected-alternatives">Rejected Alternatives<a href="#rejected-alternatives" class="hash-link" aria-label="Direct link to Rejected Alternatives" title="Direct link to Rejected Alternatives">​</a></h3><p>N/A</p></article></div><div class="col col--2"><div class="tableOfContents_bqdL thin-scrollbar"><ul class="table-of-contents table-of-contents__left-border"><li><a href="#motivation" class="table-of-contents__link toc-highlight">Motivation</a></li><li><a href="#proposed-changes" class="table-of-contents__link toc-highlight">Proposed Changes</a></li><li><a href="#public-interfaces" class="table-of-contents__link toc-highlight">Public Interfaces</a></li><li><a href="#compatibility-deprecation-and-migration-plan" class="table-of-contents__link toc-highlight">Compatibility, Deprecation, and Migration Plan</a></li><li><a href="#test-plan" class="table-of-contents__link toc-highlight">Test Plan</a></li><li><a href="#rejected-alternatives" class="table-of-contents__link toc-highlight">Rejected Alternatives</a></li></ul></div></div></div></main></div><footer class="footer footer--dark"><div class="container container-fluid"><div class="row footer__links"><div class="col footer__col"><div class="footer__title">Documentation</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/docs/overview">Overview</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/getting-started/installation">Getting started</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/deployment/manual">Deployment</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/admin/bookies">Administration</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/api/overview">API</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/security/overview">Security</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/development/protocol">Development</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/reference/config">Reference</a></li></ul></div><div class="col footer__col"><div class="footer__title">Community</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/community/mailing-lists">Mailing lists</a></li><li class="footer__item"><a class="footer__link-item" href="/community/slack">Slack</a></li><li class="footer__item"><a href="https://github.com/apache/bookkeeper" target="_blank" rel="noopener noreferrer" class="footer__link-item">Github<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a href="https://twitter.com/asfbookkeeper" target="_blank" rel="noopener noreferrer" class="footer__link-item">Twitter<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div><div class="col footer__col"><div class="footer__title">Project</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/project/who">Who are we?</a></li><li class="footer__item"><a class="footer__link-item" href="/project/bylaws">Bylaws</a></li><li class="footer__item"><a href="https://apache.org/licenses" target="_blank" rel="noopener noreferrer" class="footer__link-item">License<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a class="footer__link-item" href="/project/privacy">Privacy policy</a></li><li class="footer__item"><a href="https://www.apache.org/foundation/sponsorship.html" target="_blank" rel="noopener noreferrer" class="footer__link-item">Sponsorship<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a href="https://www.apache.org/foundation/thanks.html" target="_blank" rel="noopener noreferrer" class="footer__link-item">Thanks<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div></div><div class="footer__bottom text--center"><div class="footer__copyright"><footer class="footer">
         <div class="container">
           <div class="content has-text-centered">
             <p>
@@ -22,7 +22,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/bps/BP-33-building-official-docker-imags/index.html b/content/bps/BP-33-building-official-docker-imags/index.html
index a6322e7..3bcea0b 100644
--- a/content/bps/BP-33-building-official-docker-imags/index.html
+++ b/content/bps/BP-33-building-official-docker-imags/index.html
@@ -4,12 +4,12 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">BP-33: Move releasing official docker images out of main repo | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/bps/BP-33-building-official-docker-imags"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docusaurus_tag" content="default"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docsearch:docusaurus_tag" content="default"><meta data-rh="true" property="og:title" content="BP-33: Move releasing official docker images out of main repo | Apache BookKeeper"><meta data-rh="true" name="description" content="Motivation"><meta data-rh="true" property="og:description" content="Motivation"><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/bps/BP-33-building-official-docker-imags"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/bps/BP-33-building-official-docker-imags" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/bps/BP-33-building-official-docker-imags" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
-<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navbar__brand" href="/"><div class="navbar__logo"><img src="/img/bk-logo.svg" alt="Apache Bookkeeper" class="themedImage_ToTc themedImage--light_HNdA"><img src="/img/bk-logo.svg" alt="Apache Bookkeeper" class="themedImage_ToTc themedImage--dark_i4oU"></div><b class="navbar__title text--truncate">Apache BookKeeper</b></a><a class="navbar__item navbar__link" href="/docs/overview/">Documentation</a><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Community</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/community/mailing-lists">Mailing lists</a></li><li><a class="dropdown__link" href="/community/slack">Slack</a></li><li><a href="https://github.com/apache/bookkeeper/issues" target="_blank" rel="noopener noreferrer" class="dropdown__link">Github issues<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a class="dropdown__link" href="/community/releases">Release management</a></li><li><a class="dropdown__link" href="/community/meeting">Community meetings</a></li><li><a class="dropdown__link" href="/community/contributing">Contribution guide</a></li><li><a class="dropdown__link" href="/community/coding-guide">Coding guide</a></li><li><a class="dropdown__link" href="/community/testing">Testing guide</a></li><li><a class="dropdown__link" href="/community/issue-report">Issue report guide</a></li><li><a class="dropdown__link" href="/community/release-guide">Release guide</a></li><li><a class="dropdown__link" href="/community/presentations">Presentations</a></li><li><a class="dropdown__link" href="/community/bookkeeper-proposals">BookKeeper proposals (BP)</a></li></ul></div><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Project</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/project/who">Who are we?</a></li><li><a class="dropdown__link" href="/project/bylaws">Bylaws</a></li><li><a href="https://apache.org/licenses" target="_blank" rel="noopener noreferrer" class="dropdown__link">License<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a class="dropdown__link" href="/project/privacy">Privacy policy</a></li><li><a href="https://www.apache.org/foundation/sponsorship.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Sponsorship<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a href="https://www.apache.org/foundation/thanks.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Thanks<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div></div><div class="navbar__items navbar__items--right"><div class="navbar__item dropdown dropdown--hoverable dropdown--right"><a class="navbar__link" aria-haspopup="true" aria-expanded="false" role="button" href="/docs/admin/autorecovery">4.17.0</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/docs/next/overview/">Next</a></li><li><a class="dropdown__link" href="/docs/admin/autorecovery">4.17.0</a></li><li><a class="dropdown__link" href="/docs/4.16.5/overview/">4.16.5</a></li><li><a class="dropdown__link" href="/docs/4.15.5/overview/">4.15.5</a></li><li><a class="dropdown__link" href="/docs/4.14.8/overview/">4.14.8</a></li><li><a class="dropdown__link" href="/docs/4.13.0/overview/">4.13.0</a></li><li><a class="dropdown__link" href="/docs/4.12.1/overview/">4.12.1</a></li><li><a class="dropdown__link" href="/docs/4.11.1/overview/">4.11.1</a></li><li><a class="dropdown__link" href="/docs/4.10.0/overview/">4.10.0</a></li><li><a class="dropdown__link" href="/docs/4.9.2/overview/">4.9.2</a></li><li><a class="dropdown__link" href="/docs/4.8.2/overview/">4.8.2</a></li><li><a class="dropdown__link" href="/docs/4.7.3/overview/">4.7.3</a></li><li><a class="dropdown__link" href="/docs/4.6.2/overview/">4.6.2</a></li><li><a class="dropdown__link" href="/docs/4.5.1/overview/">4.5.1</a></li></ul></div><a class="navbar__item navbar__link" href="/releases">Download</a><div class="toggle_vylO colorModeToggle_DEke"><button class="clean-btn toggleButton_gllP toggleButtonDisabled_aARS" type="button" disabled="" title="Switch between dark and light mode (currently light mode)" aria-label="Switch between dark and light mode (currently light mode)" aria-live="polite"><svg viewBox="0 0 24 24" width="24" height="24" class="lightToggleIcon_pyhR"><path fill="currentColor" d="M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"></path></svg><svg viewBox="0 0 24 24" width="24" height="24" class="darkToggleIcon_wfgR"><path fill="currentColor" d="M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"></path></svg></button></div><div class="searchBox_ZlJk"></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div></nav><div id="docusaurus_skipToContent_fallback" class="main-wrapper mainWrapper_z2l0"><main class="container container--fluid margin-vert--lg"><div class="row mdxPageWrapper_j9I6"><div class="col col--8"><article><h1>BP-33: Move releasing official docker images out of main repo</h1><h3 class="anchor anchorWithStickyNavbar_LWe7" id="motivation">Motivation<a href="#motivation" class="hash-link" aria-label="Direct link to Motivation" title="Direct link to Motivation">​</a></h3><p>Current bookkeeper docker images are auto-built by apache docker account. However it becomes problematic in the release process:</p><p>Docker autobuild uses release tag for labeling the versions for docker images. But the <code>Dockerfile</code> can only be updated after
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navbar__brand" href="/"><div class="navbar__logo"><img src="/img/bk-logo.svg" alt="Apache Bookkeeper" class="themedImage_ToTc themedImage--light_HNdA"><img src="/img/bk-logo.svg" alt="Apache Bookkeeper" class="themedImage_ToTc themedImage--dark_i4oU"></div><b class="navbar__title text--truncate">Apache BookKeeper</b></a><a class="navbar__item navbar__link" href="/docs/overview/">Documentation</a><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Community</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/community/mailing-lists">Mailing lists</a></li><li><a class="dropdown__link" href="/community/slack">Slack</a></li><li><a href="https://github.com/apache/bookkeeper/issues" target="_blank" rel="noopener noreferrer" class="dropdown__link">Github issues<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a class="dropdown__link" href="/community/releases">Release management</a></li><li><a class="dropdown__link" href="/community/meeting">Community meetings</a></li><li><a class="dropdown__link" href="/community/contributing">Contribution guide</a></li><li><a class="dropdown__link" href="/community/coding-guide">Coding guide</a></li><li><a class="dropdown__link" href="/community/testing">Testing guide</a></li><li><a class="dropdown__link" href="/community/issue-report">Issue report guide</a></li><li><a class="dropdown__link" href="/community/release-guide">Release guide</a></li><li><a class="dropdown__link" href="/community/presentations">Presentations</a></li><li><a class="dropdown__link" href="/community/bookkeeper-proposals">BookKeeper proposals (BP)</a></li></ul></div><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Project</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/project/who">Who are we?</a></li><li><a class="dropdown__link" href="/project/bylaws">Bylaws</a></li><li><a href="https://apache.org/licenses" target="_blank" rel="noopener noreferrer" class="dropdown__link">License<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a class="dropdown__link" href="/project/privacy">Privacy policy</a></li><li><a href="https://www.apache.org/foundation/sponsorship.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Sponsorship<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a href="https://www.apache.org/foundation/thanks.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Thanks<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div></div><div class="navbar__items navbar__items--right"><div class="navbar__item dropdown dropdown--hoverable dropdown--right"><a class="navbar__link" aria-haspopup="true" aria-expanded="false" role="button" href="/docs/overview/">4.17.0</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/docs/next/overview/">Next</a></li><li><a class="dropdown__link" href="/docs/overview/">4.17.0</a></li><li><a class="dropdown__link" href="/docs/4.16.5/overview/">4.16.5</a></li><li><a class="dropdown__link" href="/docs/4.15.5/overview/">4.15.5</a></li><li><a class="dropdown__link" href="/docs/4.14.8/overview/">4.14.8</a></li><li><a class="dropdown__link" href="/docs/4.13.0/overview/">4.13.0</a></li><li><a class="dropdown__link" href="/docs/4.12.1/overview/">4.12.1</a></li><li><a class="dropdown__link" href="/docs/4.11.1/overview/">4.11.1</a></li><li><a class="dropdown__link" href="/docs/4.10.0/overview/">4.10.0</a></li><li><a class="dropdown__link" href="/docs/4.9.2/overview/">4.9.2</a></li><li><a class="dropdown__link" href="/docs/4.8.2/overview/">4.8.2</a></li><li><a class="dropdown__link" href="/docs/4.7.3/overview/">4.7.3</a></li><li><a class="dropdown__link" href="/docs/4.6.2/overview/">4.6.2</a></li><li><a class="dropdown__link" href="/docs/4.5.1/overview/">4.5.1</a></li></ul></div><a class="navbar__item navbar__link" href="/releases">Download</a><div class="toggle_vylO colorModeToggle_DEke"><button class="clean-btn toggleButton_gllP toggleButtonDisabled_aARS" type="button" disabled="" title="Switch between dark and light mode (currently light mode)" aria-label="Switch between dark and light mode (currently light mode)" aria-live="polite"><svg viewBox="0 0 24 24" width="24" height="24" class="lightToggleIcon_pyhR"><path fill="currentColor" d="M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"></path></svg><svg viewBox="0 0 24 24" width="24" height="24" class="darkToggleIcon_wfgR"><path fill="currentColor" d="M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"></path></svg></button></div><div class="searchBox_ZlJk"></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div></nav><div id="docusaurus_skipToContent_fallback" class="main-wrapper mainWrapper_z2l0"><main class="container container--fluid margin-vert--lg"><div class="row mdxPageWrapper_j9I6"><div class="col col--8"><article><h1>BP-33: Move releasing official docker images out of main repo</h1><h3 class="anchor anchorWithStickyNavbar_LWe7" id="motivation">Motivation<a href="#motivation" class="hash-link" aria-label="Direct link to Motivation" title="Direct link to Motivation">​</a></h3><p>Current bookkeeper docker images are auto-built by apache docker account. However it becomes problematic in the release process:</p><p>Docker autobuild uses release tag for labeling the versions for docker images. But the <code>Dockerfile</code> can only be updated after
 a release is successfully made. So we have to retag a release after a release, in order to update <code>Dockerfile</code> to build the docker
 image.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="proposed-changes">Proposed Changes<a href="#proposed-changes" class="hash-link" aria-label="Direct link to Proposed Changes" title="Direct link to Proposed Changes">​</a></h3><p>Follow what <code>flink</code> is doing, and maintain the docker files outside of the bookkeeper main repo.</p><ul><li>Create an organization <code>asfbookkeeper-ecosystem</code> for hosting repos that related bookkeeper but not necessarily needed to be put in main repo.</li><li>Create a repo <code>docker-bookkeeper</code> under <code>asfbookkeeper-ecosystem</code> for hosting the docker files following the suggested practices from making a docker official image.</li><li>Add a library definition file under <code>docker-library/official-images</code> for bookkeeper.</li><li>Add an image doc under <code>docker-library/docs</code> for bookkeeper.</li><li>Update the release guide on how to update docker images at the end of each release.</li><li>Remove <code>docker</code> dir from main repo or make it used for building <em>unreleased</em> docker images only.</li><li>Disable docker autobuild from apache account.</li></ul><p>Proposed docker file repo: <a href="https://github.com/asfbookkeeper-ecosystem/docker-bookkeeper" target="_blank" rel="noopener noreferrer">https://github.com/asfbookkeeper-ecosystem/docker-bookkeeper</a></p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="compatibility-deprecation-and-migration-plan">Compatibility, Deprecation, and Migration Plan<a href="#compatibility-deprecation-and-migration-plan" class="hash-link" aria-label="Direct link to Compatibility, Deprecation, and Migration Plan" title="Direct link to Compatibility, Deprecation, and Migration Plan">​</a></h3><p>N/A</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="test-plan">Test Plan<a href="#test-plan" class="hash-link" aria-label="Direct link to Test Plan" title="Direct link to Test Plan">​</a></h3><p>N/A</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="rejected-alternatives">Rejected Alternatives<a href="#rejected-alternatives" class="hash-link" aria-label="Direct link to Rejected Alternatives" title="Direct link to Rejected Alternatives">​</a></h3><p>N/A</p></article></div><div class="col col--2"><div class="tableOfContents_bqdL thin-scrollbar"><ul class="table-of-contents table-of-contents__left-border"><li><a href="#motivation" class="table-of-contents__link toc-highlight">Motivation</a></li><li><a href="#proposed-changes" class="table-of-contents__link toc-highlight">Proposed Changes</a></li><li><a href="#compatibility-deprecation-and-migration-plan" class="table-of-contents__link toc-highlight">Compatibility, Deprecation, and Migration Plan</a></li><li><a href="#test-plan" class="table-of-contents__link toc-highlight">Test Plan</a></li><li><a href="#rejected-alternatives" class="table-of-contents__link toc-highlight">Rejected Alternatives</a></li></ul></div></div></div></main></div><footer class="footer footer--dark"><div class="container container-fluid"><div class="row footer__links"><div class="col footer__col"><div class="footer__title">Documentation</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/docs/overview">Overview</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/getting-started/installation">Getting started</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/deployment/manual">Deployment</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/admin/bookies">Administration</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/api/overview">API</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/security/overview">Security</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/development/protocol">Development</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/reference/config">Reference</a></li></ul></div><div class="col footer__col"><div class="footer__title">Community</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/community/mailing-lists">Mailing lists</a></li><li class="footer__item"><a class="footer__link-item" href="/community/slack">Slack</a></li><li class="footer__item"><a href="https://github.com/apache/bookkeeper" target="_blank" rel="noopener noreferrer" class="footer__link-item">Github<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a href="https://twitter.com/asfbookkeeper" target="_blank" rel="noopener noreferrer" class="footer__link-item">Twitter<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div><div class="col footer__col"><div class="footer__title">Project</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/project/who">Who are we?</a></li><li class="footer__item"><a class="footer__link-item" href="/project/bylaws">Bylaws</a></li><li class="footer__item"><a href="https://apache.org/licenses" target="_blank" rel="noopener noreferrer" class="footer__link-item">License<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a class="footer__link-item" href="/project/privacy">Privacy policy</a></li><li class="footer__item"><a href="https://www.apache.org/foundation/sponsorship.html" target="_blank" rel="noopener noreferrer" class="footer__link-item">Sponsorship<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a href="https://www.apache.org/foundation/thanks.html" target="_blank" rel="noopener noreferrer" class="footer__link-item">Thanks<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div></div><div class="footer__bottom text--center"><div class="footer__copyright"><footer class="footer">
         <div class="container">
@@ -24,7 +24,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/bps/BP-34-cluster-metadata-checker/index.html b/content/bps/BP-34-cluster-metadata-checker/index.html
index 59c79b0..55d91d7 100644
--- a/content/bps/BP-34-cluster-metadata-checker/index.html
+++ b/content/bps/BP-34-cluster-metadata-checker/index.html
@@ -4,12 +4,12 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">BP-34: Cluster Metadata Checker | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/bps/BP-34-cluster-metadata-checker"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docusaurus_tag" content="default"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docsearch:docusaurus_tag" content="default"><meta data-rh="true" property="og:title" content="BP-34: Cluster Metadata Checker | Apache BookKeeper"><meta data-rh="true" name="description" content="Motivation"><meta data-rh="true" property="og:description" content="Motivation"><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/bps/BP-34-cluster-metadata-checker"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/bps/BP-34-cluster-metadata-checker" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/bps/BP-34-cluster-metadata-checker" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
-<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navbar__brand" href="/"><div class="navbar__logo"><img src="/img/bk-logo.svg" alt="Apache Bookkeeper" class="themedImage_ToTc themedImage--light_HNdA"><img src="/img/bk-logo.svg" alt="Apache Bookkeeper" class="themedImage_ToTc themedImage--dark_i4oU"></div><b class="navbar__title text--truncate">Apache BookKeeper</b></a><a class="navbar__item navbar__link" href="/docs/overview/">Documentation</a><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Community</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/community/mailing-lists">Mailing lists</a></li><li><a class="dropdown__link" href="/community/slack">Slack</a></li><li><a href="https://github.com/apache/bookkeeper/issues" target="_blank" rel="noopener noreferrer" class="dropdown__link">Github issues<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a class="dropdown__link" href="/community/releases">Release management</a></li><li><a class="dropdown__link" href="/community/meeting">Community meetings</a></li><li><a class="dropdown__link" href="/community/contributing">Contribution guide</a></li><li><a class="dropdown__link" href="/community/coding-guide">Coding guide</a></li><li><a class="dropdown__link" href="/community/testing">Testing guide</a></li><li><a class="dropdown__link" href="/community/issue-report">Issue report guide</a></li><li><a class="dropdown__link" href="/community/release-guide">Release guide</a></li><li><a class="dropdown__link" href="/community/presentations">Presentations</a></li><li><a class="dropdown__link" href="/community/bookkeeper-proposals">BookKeeper proposals (BP)</a></li></ul></div><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Project</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/project/who">Who are we?</a></li><li><a class="dropdown__link" href="/project/bylaws">Bylaws</a></li><li><a href="https://apache.org/licenses" target="_blank" rel="noopener noreferrer" class="dropdown__link">License<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a class="dropdown__link" href="/project/privacy">Privacy policy</a></li><li><a href="https://www.apache.org/foundation/sponsorship.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Sponsorship<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a href="https://www.apache.org/foundation/thanks.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Thanks<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div></div><div class="navbar__items navbar__items--right"><div class="navbar__item dropdown dropdown--hoverable dropdown--right"><a class="navbar__link" aria-haspopup="true" aria-expanded="false" role="button" href="/docs/admin/autorecovery">4.17.0</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/docs/next/overview/">Next</a></li><li><a class="dropdown__link" href="/docs/admin/autorecovery">4.17.0</a></li><li><a class="dropdown__link" href="/docs/4.16.5/overview/">4.16.5</a></li><li><a class="dropdown__link" href="/docs/4.15.5/overview/">4.15.5</a></li><li><a class="dropdown__link" href="/docs/4.14.8/overview/">4.14.8</a></li><li><a class="dropdown__link" href="/docs/4.13.0/overview/">4.13.0</a></li><li><a class="dropdown__link" href="/docs/4.12.1/overview/">4.12.1</a></li><li><a class="dropdown__link" href="/docs/4.11.1/overview/">4.11.1</a></li><li><a class="dropdown__link" href="/docs/4.10.0/overview/">4.10.0</a></li><li><a class="dropdown__link" href="/docs/4.9.2/overview/">4.9.2</a></li><li><a class="dropdown__link" href="/docs/4.8.2/overview/">4.8.2</a></li><li><a class="dropdown__link" href="/docs/4.7.3/overview/">4.7.3</a></li><li><a class="dropdown__link" href="/docs/4.6.2/overview/">4.6.2</a></li><li><a class="dropdown__link" href="/docs/4.5.1/overview/">4.5.1</a></li></ul></div><a class="navbar__item navbar__link" href="/releases">Download</a><div class="toggle_vylO colorModeToggle_DEke"><button class="clean-btn toggleButton_gllP toggleButtonDisabled_aARS" type="button" disabled="" title="Switch between dark and light mode (currently light mode)" aria-label="Switch between dark and light mode (currently light mode)" aria-live="polite"><svg viewBox="0 0 24 24" width="24" height="24" class="lightToggleIcon_pyhR"><path fill="currentColor" d="M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"></path></svg><svg viewBox="0 0 24 24" width="24" height="24" class="darkToggleIcon_wfgR"><path fill="currentColor" d="M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"></path></svg></button></div><div class="searchBox_ZlJk"></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div></nav><div id="docusaurus_skipToContent_fallback" class="main-wrapper mainWrapper_z2l0"><main class="container container--fluid margin-vert--lg"><div class="row mdxPageWrapper_j9I6"><div class="col col--8"><article><h1>BP-34: Cluster Metadata Checker</h1><h3 class="anchor anchorWithStickyNavbar_LWe7" id="motivation">Motivation<a href="#motivation" class="hash-link" aria-label="Direct link to Motivation" title="Direct link to Motivation">​</a></h3><p>Currently in the Auditor we have two checkers - Periodic Bookie Check and Periodic Ledger check. Bookie Check validates the availability of bookies and if it finds any lost bookies it will mark ledgers residing in the lost bookies to be under replicated. Ledger Check reads the first entry and last entry of the segment from all the corresponding bookies of the ensemble and if it fails to read any entry then it will mark that ledger under replicated.  By setting appropriate value to the conf - ‘auditorLedgerVerificationPercentage’ we can read upto 100% of entries of the ledger from all the corresponding bookies of the ensemble and any failure in reading will lead to mark ledger under replicated.</p><p>Ideally for having complete confidence on the date in the cluster, it is needed to have a new checker - validating ledger placement policy, durability contract, progress in handling under replication and availability of bookies of the ensemble of ledgers. Though by configuring &#x27;auditorLedgerVerificationPercentage&#x27; to 100% in periodic ledger check, we would get most of what we are intending to achieve. But this comes at heavy price since it involves reading all the entries from all the corresponding bookies in the ensemble, so it is not a performant solution.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="proposed-changes">Proposed Changes<a href="#proposed-changes" class="hash-link" aria-label="Direct link to Proposed Changes" title="Direct link to Proposed Changes">​</a></h3><p>Intention of this new checker is to validate following things</p><ul><li>ledger placement policy : Ensemble of each segment in Ledger should adhere to LedgerPlacementPolicy</li><li>durability contract : Every entry has WQ number of replicas and entries are replicated according to RoundRobinDistributionSchedule</li><li>progress in handling under replication : No ledger is marked underreplicated for more than acceptable time</li><li>availability of bookies of the ensemble of ledgers : If Auditor fails to get response from a Bookie, then that Bookie shouldn’t be registered to metadata server and Auditor should be aware of it unavailability or if it is a transient error in getting response from Bookie then subsequent calls to that Bookie should succeed.</li></ul><p>Roles and Responsibilities of the cluster metadata checker</p><ul><li>Police the durability contract and report violations. Its job is to make sure that the metadata server(zk) and the storage servers (bookies) are in sync. Simply put, check if bookies agree with the metadata server metadata and if not, raise an alert.</li><li>Scrutiny’s job is not to fix if it finds any inconsistency. Instead make a noise about it. If the scrutiny fails, it means that we have a potential hole(bug) in our service to meet the durability contract. Scrutiny exposes that hole with enough information the help identify the issue and fix it.</li><li>The Metadata Scrutiny needs to be light weighted esp., on Bookie and must run regularly giving the confidence that the cluster is in good state.</li></ul><p>High Level Logic</p><ul><li>Things would get complicated analyzing ledgers which are not closed because of several reasons, viz., unable to know lastEntryId by reading ZK metadata, possibility of change in ensemble because of write failure to a bookie, and other subtleties in dealing with last unclosed segment of the ledger. So for the sake of simplicity this checker should be limited to ledgers which are write closed/fenced.</li><li>This durability check for each ledger will be run as a processor in ledgerManager.asyncProcessLedgers and it would ignore ledgers which are still open for write.</li><li>first step is to check if this ledger is marked underreplicated already. If it is marked underreplicated for more than acceptable time then report it as violation otherwise skip this underreplicated ledger for this iteration of durability check. Since there is no point in further analyzing this ledger if it is already marked under replicated.</li><li>get the ledger metadata of the ledger from the metadata server</li><li>make sure that the ensemble of the ledger segments is in agreement with ledgerplacement policy. Any violation should be reported.</li><li>get the info about available entries of the ledger from the bookies of the ensemble. Bookie is expected to return list of entries it contains for a given ledger</li><li>Have to make sure that Bookies contain all the entries it is supposed to contain according to the RoundRobinDistributionSchedule and each entry has writequorum number of copies. Any violation should be reported.</li><li>If there is any failure in trying to get info. from Bookie of the ensembles of the ledger, then add this ledger to potentially faulty ledgers list (but don&#x27;t report it yet.)</li><li>(in previous steps, in case of any violation or bookie read error, before reporting violation, check if the ledger is marked underreplicated. If it is marked underreplicated then ignore this ledger for this iteration. If it is not marked underreplicated, then get the ledgermetadata of this ledger onemore time. Check if it is any different from the ledgermetadata we got initially then instead of reporting the violation, redo the analysis for this ledger because apparently something had changed in the metadata (esp. with ensemble) and hence it is better to reevaluate instead of false alarm.)</li><li>if there are potentially faulty ledgers because of unavailable/unreachable bookies, then schedule a new durability check task with time delay just for the potentially faulty ledgers. Even after subsequent delayed checks, if Auditor failed to get response from bookies then make sure that Bookie isn’t registered to metadata server and Auditor is aware of it unavailability, if not then report the violation.</li><li>Auditor is going to use existing mechanisms/frameworks to report the violations - bookkeeper-stats statslogger/counters and complementing information in logs.</li><li>It makes sense to group all the durability violations found in a scrutiny run according to the categories and report the aggregated count for each category after the end of the scrutiny run.</li><li>before reporting these violations, each violation should be logged with complete information, so that it can be used to understand what went wrong.</li></ul><h3 class="anchor anchorWithStickyNavbar_LWe7" id="public-interfaces">Public Interfaces<a href="#public-interfaces" class="hash-link" aria-label="Direct link to Public Interfaces" title="Direct link to Public Interfaces">​</a></h3><p>To know the entries of a ledger data persisted in a Bookie, currently there is no other way than reading the entry from bookie using BookieClient instance. So for auditor to know what entries of a ledger, Bookie contains we need to have a new on wire Bookkeeper protocol API as mentioned below.</p><div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">message GetListOfEntriesOfALedgerRequest {</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    required int64 ledgerId = 1;</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">}</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">message GetListOfEntriesOfALedgerResponse {</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    required StatusCode status = 1;</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    required int64 ledgerId = 2;</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    optional bytes availabilityOfEntriesOfLedger = 3; // explained below</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">}</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>For ‘availabilityOfEntriesOfLedger’ we can use following condensed encoding format, which helps in reducing the number of bytes needed to represent the list of entries.</p><p>(note: following representation is used just for understanding purpose, but this is not protobuf (or any other) representation)</p><div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">AvailabilityOfEntriesOfLedger {</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    OrderedCollection sequenceGroup;</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">}</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">SequenceGroup {</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    long firstSequenceStart;</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    long lastSequenceStart;</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    int sequenceSize;</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    int sequencePeriod;</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">}</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>Nomenclature:</p><ul><li>Continuous entries are grouped as a ’Sequence’.</li><li>Number of continuous entries in a ‘Sequence’ is called ‘sequenceSize’.</li><li>Gap between Consecutive sequences is called ‘sequencePeriod’.</li><li>Consecutive sequences with same sequenceSize and same sequencePeriod in between consecutive sequences are grouped as a SequenceGroup.</li><li>‘firstSequenceStart’ is the first entry in the first sequence of the SequenceGroup.</li><li>‘lastSequenceStart’ is the first entry in the last sequence of the SequenceGroup.</li><li>Ordered collection of such SequenceGroups will represent entries of a ledger residing in a bookie.</li></ul><p>(in the best case scenario there will be only one SequenceGroup, ‘sequencePeriod’ will be ensembleSize and ‘sequenceSize’ will be writeQuorumSize of the ledger).</p><p>for example,</p><p>example 1 (best case scenario):</p><p>1, 2, 4, 5, 7, 8, 10, 11</p><p>in this case (1, 2), (4, 5), (7, 8), (10, 11) are sequences and in this scenario there happens to be just one SequenceGroup, which can be represented like</p><p>{ firstSequenceStart - 1, lastSequenceStart - 10, sequenceSize - 2, sequencePeriod - 3 }</p><p>example 2 (an entry is missing):</p><p>1, 2, 3, 6, 7, 8, 11, 13, 16, 17, 18, 21, 22</p><p>(entry 12 is missing and in the last sequence there are only 2 entries 21, 22)
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navbar__brand" href="/"><div class="navbar__logo"><img src="/img/bk-logo.svg" alt="Apache Bookkeeper" class="themedImage_ToTc themedImage--light_HNdA"><img src="/img/bk-logo.svg" alt="Apache Bookkeeper" class="themedImage_ToTc themedImage--dark_i4oU"></div><b class="navbar__title text--truncate">Apache BookKeeper</b></a><a class="navbar__item navbar__link" href="/docs/overview/">Documentation</a><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Community</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/community/mailing-lists">Mailing lists</a></li><li><a class="dropdown__link" href="/community/slack">Slack</a></li><li><a href="https://github.com/apache/bookkeeper/issues" target="_blank" rel="noopener noreferrer" class="dropdown__link">Github issues<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a class="dropdown__link" href="/community/releases">Release management</a></li><li><a class="dropdown__link" href="/community/meeting">Community meetings</a></li><li><a class="dropdown__link" href="/community/contributing">Contribution guide</a></li><li><a class="dropdown__link" href="/community/coding-guide">Coding guide</a></li><li><a class="dropdown__link" href="/community/testing">Testing guide</a></li><li><a class="dropdown__link" href="/community/issue-report">Issue report guide</a></li><li><a class="dropdown__link" href="/community/release-guide">Release guide</a></li><li><a class="dropdown__link" href="/community/presentations">Presentations</a></li><li><a class="dropdown__link" href="/community/bookkeeper-proposals">BookKeeper proposals (BP)</a></li></ul></div><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Project</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/project/who">Who are we?</a></li><li><a class="dropdown__link" href="/project/bylaws">Bylaws</a></li><li><a href="https://apache.org/licenses" target="_blank" rel="noopener noreferrer" class="dropdown__link">License<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a class="dropdown__link" href="/project/privacy">Privacy policy</a></li><li><a href="https://www.apache.org/foundation/sponsorship.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Sponsorship<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a href="https://www.apache.org/foundation/thanks.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Thanks<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div></div><div class="navbar__items navbar__items--right"><div class="navbar__item dropdown dropdown--hoverable dropdown--right"><a class="navbar__link" aria-haspopup="true" aria-expanded="false" role="button" href="/docs/overview/">4.17.0</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/docs/next/overview/">Next</a></li><li><a class="dropdown__link" href="/docs/overview/">4.17.0</a></li><li><a class="dropdown__link" href="/docs/4.16.5/overview/">4.16.5</a></li><li><a class="dropdown__link" href="/docs/4.15.5/overview/">4.15.5</a></li><li><a class="dropdown__link" href="/docs/4.14.8/overview/">4.14.8</a></li><li><a class="dropdown__link" href="/docs/4.13.0/overview/">4.13.0</a></li><li><a class="dropdown__link" href="/docs/4.12.1/overview/">4.12.1</a></li><li><a class="dropdown__link" href="/docs/4.11.1/overview/">4.11.1</a></li><li><a class="dropdown__link" href="/docs/4.10.0/overview/">4.10.0</a></li><li><a class="dropdown__link" href="/docs/4.9.2/overview/">4.9.2</a></li><li><a class="dropdown__link" href="/docs/4.8.2/overview/">4.8.2</a></li><li><a class="dropdown__link" href="/docs/4.7.3/overview/">4.7.3</a></li><li><a class="dropdown__link" href="/docs/4.6.2/overview/">4.6.2</a></li><li><a class="dropdown__link" href="/docs/4.5.1/overview/">4.5.1</a></li></ul></div><a class="navbar__item navbar__link" href="/releases">Download</a><div class="toggle_vylO colorModeToggle_DEke"><button class="clean-btn toggleButton_gllP toggleButtonDisabled_aARS" type="button" disabled="" title="Switch between dark and light mode (currently light mode)" aria-label="Switch between dark and light mode (currently light mode)" aria-live="polite"><svg viewBox="0 0 24 24" width="24" height="24" class="lightToggleIcon_pyhR"><path fill="currentColor" d="M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"></path></svg><svg viewBox="0 0 24 24" width="24" height="24" class="darkToggleIcon_wfgR"><path fill="currentColor" d="M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"></path></svg></button></div><div class="searchBox_ZlJk"></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div></nav><div id="docusaurus_skipToContent_fallback" class="main-wrapper mainWrapper_z2l0"><main class="container container--fluid margin-vert--lg"><div class="row mdxPageWrapper_j9I6"><div class="col col--8"><article><h1>BP-34: Cluster Metadata Checker</h1><h3 class="anchor anchorWithStickyNavbar_LWe7" id="motivation">Motivation<a href="#motivation" class="hash-link" aria-label="Direct link to Motivation" title="Direct link to Motivation">​</a></h3><p>Currently in the Auditor we have two checkers - Periodic Bookie Check and Periodic Ledger check. Bookie Check validates the availability of bookies and if it finds any lost bookies it will mark ledgers residing in the lost bookies to be under replicated. Ledger Check reads the first entry and last entry of the segment from all the corresponding bookies of the ensemble and if it fails to read any entry then it will mark that ledger under replicated.  By setting appropriate value to the conf - ‘auditorLedgerVerificationPercentage’ we can read upto 100% of entries of the ledger from all the corresponding bookies of the ensemble and any failure in reading will lead to mark ledger under replicated.</p><p>Ideally for having complete confidence on the date in the cluster, it is needed to have a new checker - validating ledger placement policy, durability contract, progress in handling under replication and availability of bookies of the ensemble of ledgers. Though by configuring &#x27;auditorLedgerVerificationPercentage&#x27; to 100% in periodic ledger check, we would get most of what we are intending to achieve. But this comes at heavy price since it involves reading all the entries from all the corresponding bookies in the ensemble, so it is not a performant solution.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="proposed-changes">Proposed Changes<a href="#proposed-changes" class="hash-link" aria-label="Direct link to Proposed Changes" title="Direct link to Proposed Changes">​</a></h3><p>Intention of this new checker is to validate following things</p><ul><li>ledger placement policy : Ensemble of each segment in Ledger should adhere to LedgerPlacementPolicy</li><li>durability contract : Every entry has WQ number of replicas and entries are replicated according to RoundRobinDistributionSchedule</li><li>progress in handling under replication : No ledger is marked underreplicated for more than acceptable time</li><li>availability of bookies of the ensemble of ledgers : If Auditor fails to get response from a Bookie, then that Bookie shouldn’t be registered to metadata server and Auditor should be aware of it unavailability or if it is a transient error in getting response from Bookie then subsequent calls to that Bookie should succeed.</li></ul><p>Roles and Responsibilities of the cluster metadata checker</p><ul><li>Police the durability contract and report violations. Its job is to make sure that the metadata server(zk) and the storage servers (bookies) are in sync. Simply put, check if bookies agree with the metadata server metadata and if not, raise an alert.</li><li>Scrutiny’s job is not to fix if it finds any inconsistency. Instead make a noise about it. If the scrutiny fails, it means that we have a potential hole(bug) in our service to meet the durability contract. Scrutiny exposes that hole with enough information the help identify the issue and fix it.</li><li>The Metadata Scrutiny needs to be light weighted esp., on Bookie and must run regularly giving the confidence that the cluster is in good state.</li></ul><p>High Level Logic</p><ul><li>Things would get complicated analyzing ledgers which are not closed because of several reasons, viz., unable to know lastEntryId by reading ZK metadata, possibility of change in ensemble because of write failure to a bookie, and other subtleties in dealing with last unclosed segment of the ledger. So for the sake of simplicity this checker should be limited to ledgers which are write closed/fenced.</li><li>This durability check for each ledger will be run as a processor in ledgerManager.asyncProcessLedgers and it would ignore ledgers which are still open for write.</li><li>first step is to check if this ledger is marked underreplicated already. If it is marked underreplicated for more than acceptable time then report it as violation otherwise skip this underreplicated ledger for this iteration of durability check. Since there is no point in further analyzing this ledger if it is already marked under replicated.</li><li>get the ledger metadata of the ledger from the metadata server</li><li>make sure that the ensemble of the ledger segments is in agreement with ledgerplacement policy. Any violation should be reported.</li><li>get the info about available entries of the ledger from the bookies of the ensemble. Bookie is expected to return list of entries it contains for a given ledger</li><li>Have to make sure that Bookies contain all the entries it is supposed to contain according to the RoundRobinDistributionSchedule and each entry has writequorum number of copies. Any violation should be reported.</li><li>If there is any failure in trying to get info. from Bookie of the ensembles of the ledger, then add this ledger to potentially faulty ledgers list (but don&#x27;t report it yet.)</li><li>(in previous steps, in case of any violation or bookie read error, before reporting violation, check if the ledger is marked underreplicated. If it is marked underreplicated then ignore this ledger for this iteration. If it is not marked underreplicated, then get the ledgermetadata of this ledger onemore time. Check if it is any different from the ledgermetadata we got initially then instead of reporting the violation, redo the analysis for this ledger because apparently something had changed in the metadata (esp. with ensemble) and hence it is better to reevaluate instead of false alarm.)</li><li>if there are potentially faulty ledgers because of unavailable/unreachable bookies, then schedule a new durability check task with time delay just for the potentially faulty ledgers. Even after subsequent delayed checks, if Auditor failed to get response from bookies then make sure that Bookie isn’t registered to metadata server and Auditor is aware of it unavailability, if not then report the violation.</li><li>Auditor is going to use existing mechanisms/frameworks to report the violations - bookkeeper-stats statslogger/counters and complementing information in logs.</li><li>It makes sense to group all the durability violations found in a scrutiny run according to the categories and report the aggregated count for each category after the end of the scrutiny run.</li><li>before reporting these violations, each violation should be logged with complete information, so that it can be used to understand what went wrong.</li></ul><h3 class="anchor anchorWithStickyNavbar_LWe7" id="public-interfaces">Public Interfaces<a href="#public-interfaces" class="hash-link" aria-label="Direct link to Public Interfaces" title="Direct link to Public Interfaces">​</a></h3><p>To know the entries of a ledger data persisted in a Bookie, currently there is no other way than reading the entry from bookie using BookieClient instance. So for auditor to know what entries of a ledger, Bookie contains we need to have a new on wire Bookkeeper protocol API as mentioned below.</p><div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">message GetListOfEntriesOfALedgerRequest {</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    required int64 ledgerId = 1;</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">}</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">message GetListOfEntriesOfALedgerResponse {</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    required StatusCode status = 1;</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    required int64 ledgerId = 2;</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    optional bytes availabilityOfEntriesOfLedger = 3; // explained below</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">}</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>For ‘availabilityOfEntriesOfLedger’ we can use following condensed encoding format, which helps in reducing the number of bytes needed to represent the list of entries.</p><p>(note: following representation is used just for understanding purpose, but this is not protobuf (or any other) representation)</p><div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">AvailabilityOfEntriesOfLedger {</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    OrderedCollection sequenceGroup;</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">}</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">SequenceGroup {</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    long firstSequenceStart;</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    long lastSequenceStart;</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    int sequenceSize;</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    int sequencePeriod;</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">}</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>Nomenclature:</p><ul><li>Continuous entries are grouped as a ’Sequence’.</li><li>Number of continuous entries in a ‘Sequence’ is called ‘sequenceSize’.</li><li>Gap between Consecutive sequences is called ‘sequencePeriod’.</li><li>Consecutive sequences with same sequenceSize and same sequencePeriod in between consecutive sequences are grouped as a SequenceGroup.</li><li>‘firstSequenceStart’ is the first entry in the first sequence of the SequenceGroup.</li><li>‘lastSequenceStart’ is the first entry in the last sequence of the SequenceGroup.</li><li>Ordered collection of such SequenceGroups will represent entries of a ledger residing in a bookie.</li></ul><p>(in the best case scenario there will be only one SequenceGroup, ‘sequencePeriod’ will be ensembleSize and ‘sequenceSize’ will be writeQuorumSize of the ledger).</p><p>for example,</p><p>example 1 (best case scenario):</p><p>1, 2, 4, 5, 7, 8, 10, 11</p><p>in this case (1, 2), (4, 5), (7, 8), (10, 11) are sequences and in this scenario there happens to be just one SequenceGroup, which can be represented like</p><p>{ firstSequenceStart - 1, lastSequenceStart - 10, sequenceSize - 2, sequencePeriod - 3 }</p><p>example 2 (an entry is missing):</p><p>1, 2, 3, 6, 7, 8, 11, 13, 16, 17, 18, 21, 22</p><p>(entry 12 is missing and in the last sequence there are only 2 entries 21, 22)
 in this case (1, 2, 3), (6, 7, 8), (11), (13), (16, 17, 18), (21, 22) are the sequences
 so the sequence groups are</p><p>{ firstSequenceStart - 1, lastSequenceStart - 6, sequenceSize - 3, sequencePeriod - 5 }, { firstSequenceStart - 11, lastSequenceStart - 13, sequenceSize - 1, sequencePeriod - 2 }, { firstSequenceStart - 16, lastSequenceStart - 16, sequenceSize - 3, sequencePeriod - 0 }, { firstSequenceStart - 21, lastSequenceStart - 21, sequenceSize - 2, sequencePeriod - 0 }</p><p>As you can notice to represent a SequenceGroup, two long values and two int values are needed, so each SequenceGroup can be represented with (2 <em> 8 + 2 </em> 4 = 24 bytes).</p><p>In the ‘availabilityOfEntriesOfLedger’ byte array, for the sake of future extensibility it would be helpful to have reserved space for metadata at the beginning. So the first 64 bytes will be used for metadata, with the first four bytes specifying the int version number, next four bytes specifying the number of entries for now and the rest of the bytes in the reserved space will be 0&#x27;s. The encoded format will be represented after the first 64 bytes. The ordered collection of SequenceGroups will be appended sequentially to this byte array, with each SequenceGroup taking 24 bytes.</p><p>So for a ledger having thousands of entries, this condensed encoded format would need one or two SequenceGroups (in the best case, with no holes and no overreplication) 24/48 bytes, which would be much less than what is needed to represent using bit vector (array of bits indicating availability of entry at that particular index location)</p><p>Any encoded format needs encoder and decoder at the sending/receiving ends of the channel, so the encoding/decoding logic should be handled optimally from computation and memory perspective.</p><p>Here Bookie is expected to just attain index information (say from LedgerCache (Index Files) - IndexPersistenceMgr and IndexInMemPageMgr, unflushed entries in EntryMemTable in SortedLedgerStorage case and from rocksdb database in DBLedgerStorage case) but it doesn’t actually check the availability of this entry in Entrylogger. Since the intention of this checker is limited to do just metadata validation at cluster level.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="compatibility-deprecation-and-migration-plan">Compatibility, Deprecation, and Migration Plan<a href="#compatibility-deprecation-and-migration-plan" class="hash-link" aria-label="Direct link to Compatibility, Deprecation, and Migration Plan" title="Direct link to Compatibility, Deprecation, and Migration Plan">​</a></h3><ul><li>With this feature we are introducing new protocol message. Will do the required Compatibility testing.</li></ul><h3 class="anchor anchorWithStickyNavbar_LWe7" id="test-plan">Test Plan<a href="#test-plan" class="hash-link" aria-label="Direct link to Test Plan" title="Direct link to Test Plan">​</a></h3><ul><li>unit tests for newly introduced API/code at LedgerCache Level</li><li>end-to-end tests for the new Protocol request/response</li><li>validating the checker in all cases of violations</li></ul><h3 class="anchor anchorWithStickyNavbar_LWe7" id="rejected-alternatives">Rejected Alternatives<a href="#rejected-alternatives" class="hash-link" aria-label="Direct link to Rejected Alternatives" title="Direct link to Rejected Alternatives">​</a></h3><p>N/A</p></article></div><div class="col col--2"><div class="tableOfContents_bqdL thin-scrollbar"><ul class="table-of-contents table-of-contents__left-border"><li><a href="#motivation" class="table-of-contents__link toc-highlight">Motivation</a></li><li><a href="#proposed-changes" class="table-of-contents__link toc-highlight">Proposed Changes</a></li><li><a href="#public-interfaces" class="table-of-contents__link toc-highlight">Public Interfaces</a></li><li><a href="#compatibility-deprecation-and-migration-plan" class="table-of-contents__link toc-highlight">Compatibility, Deprecation, and Migration Plan</a></li><li><a href="#test-plan" class="table-of-contents__link toc-highlight">Test Plan</a></li><li><a href="#rejected-alternatives" class="table-of-contents__link toc-highlight">Rejected Alternatives</a></li></ul></div></div></div></main></div><footer class="footer footer--dark"><div class="container container-fluid"><div class="row footer__links"><div class="col footer__col"><div class="footer__title">Documentation</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/docs/overview">Overview</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/getting-started/installation">Getting started</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/deployment/manual">Deployment</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/admin/bookies">Administration</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/api/overview">API</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/security/overview">Security</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/development/protocol">Development</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/reference/config">Reference</a></li></ul></div><div class="col footer__col"><div class="footer__title">Community</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/community/mailing-lists">Mailing lists</a></li><li class="footer__item"><a class="footer__link-item" href="/community/slack">Slack</a></li><li class="footer__item"><a href="https://github.com/apache/bookkeeper" target="_blank" rel="noopener noreferrer" class="footer__link-item">Github<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a href="https://twitter.com/asfbookkeeper" target="_blank" rel="noopener noreferrer" class="footer__link-item">Twitter<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div><div class="col footer__col"><div class="footer__title">Project</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/project/who">Who are we?</a></li><li class="footer__item"><a class="footer__link-item" href="/project/bylaws">Bylaws</a></li><li class="footer__item"><a href="https://apache.org/licenses" target="_blank" rel="noopener noreferrer" class="footer__link-item">License<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a class="footer__link-item" href="/project/privacy">Privacy policy</a></li><li class="footer__item"><a href="https://www.apache.org/foundation/sponsorship.html" target="_blank" rel="noopener noreferrer" class="footer__link-item">Sponsorship<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a href="https://www.apache.org/foundation/thanks.html" target="_blank" rel="noopener noreferrer" class="footer__link-item">Thanks<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div></div><div class="footer__bottom text--center"><div class="footer__copyright"><footer class="footer">
         <div class="container">
@@ -24,7 +24,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/bps/BP-35-128-bits-support/index.html b/content/bps/BP-35-128-bits-support/index.html
index a6467ee..743aa8a 100644
--- a/content/bps/BP-35-128-bits-support/index.html
+++ b/content/bps/BP-35-128-bits-support/index.html
@@ -4,12 +4,12 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">BP-35: 128 bits support | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/bps/BP-35-128-bits-support"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docusaurus_tag" content="default"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docsearch:docusaurus_tag" content="default"><meta data-rh="true" property="og:title" content="BP-35: 128 bits support | Apache BookKeeper"><meta data-rh="true" name="description" content="Motivation"><meta data-rh="true" property="og:description" content="Motivation"><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/bps/BP-35-128-bits-support"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/bps/BP-35-128-bits-support" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/bps/BP-35-128-bits-support" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
-<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navbar__brand" href="/"><div class="navbar__logo"><img src="/img/bk-logo.svg" alt="Apache Bookkeeper" class="themedImage_ToTc themedImage--light_HNdA"><img src="/img/bk-logo.svg" alt="Apache Bookkeeper" class="themedImage_ToTc themedImage--dark_i4oU"></div><b class="navbar__title text--truncate">Apache BookKeeper</b></a><a class="navbar__item navbar__link" href="/docs/overview/">Documentation</a><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Community</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/community/mailing-lists">Mailing lists</a></li><li><a class="dropdown__link" href="/community/slack">Slack</a></li><li><a href="https://github.com/apache/bookkeeper/issues" target="_blank" rel="noopener noreferrer" class="dropdown__link">Github issues<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a class="dropdown__link" href="/community/releases">Release management</a></li><li><a class="dropdown__link" href="/community/meeting">Community meetings</a></li><li><a class="dropdown__link" href="/community/contributing">Contribution guide</a></li><li><a class="dropdown__link" href="/community/coding-guide">Coding guide</a></li><li><a class="dropdown__link" href="/community/testing">Testing guide</a></li><li><a class="dropdown__link" href="/community/issue-report">Issue report guide</a></li><li><a class="dropdown__link" href="/community/release-guide">Release guide</a></li><li><a class="dropdown__link" href="/community/presentations">Presentations</a></li><li><a class="dropdown__link" href="/community/bookkeeper-proposals">BookKeeper proposals (BP)</a></li></ul></div><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Project</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/project/who">Who are we?</a></li><li><a class="dropdown__link" href="/project/bylaws">Bylaws</a></li><li><a href="https://apache.org/licenses" target="_blank" rel="noopener noreferrer" class="dropdown__link">License<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a class="dropdown__link" href="/project/privacy">Privacy policy</a></li><li><a href="https://www.apache.org/foundation/sponsorship.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Sponsorship<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a href="https://www.apache.org/foundation/thanks.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Thanks<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div></div><div class="navbar__items navbar__items--right"><div class="navbar__item dropdown dropdown--hoverable dropdown--right"><a class="navbar__link" aria-haspopup="true" aria-expanded="false" role="button" href="/docs/admin/autorecovery">4.17.0</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/docs/next/overview/">Next</a></li><li><a class="dropdown__link" href="/docs/admin/autorecovery">4.17.0</a></li><li><a class="dropdown__link" href="/docs/4.16.5/overview/">4.16.5</a></li><li><a class="dropdown__link" href="/docs/4.15.5/overview/">4.15.5</a></li><li><a class="dropdown__link" href="/docs/4.14.8/overview/">4.14.8</a></li><li><a class="dropdown__link" href="/docs/4.13.0/overview/">4.13.0</a></li><li><a class="dropdown__link" href="/docs/4.12.1/overview/">4.12.1</a></li><li><a class="dropdown__link" href="/docs/4.11.1/overview/">4.11.1</a></li><li><a class="dropdown__link" href="/docs/4.10.0/overview/">4.10.0</a></li><li><a class="dropdown__link" href="/docs/4.9.2/overview/">4.9.2</a></li><li><a class="dropdown__link" href="/docs/4.8.2/overview/">4.8.2</a></li><li><a class="dropdown__link" href="/docs/4.7.3/overview/">4.7.3</a></li><li><a class="dropdown__link" href="/docs/4.6.2/overview/">4.6.2</a></li><li><a class="dropdown__link" href="/docs/4.5.1/overview/">4.5.1</a></li></ul></div><a class="navbar__item navbar__link" href="/releases">Download</a><div class="toggle_vylO colorModeToggle_DEke"><button class="clean-btn toggleButton_gllP toggleButtonDisabled_aARS" type="button" disabled="" title="Switch between dark and light mode (currently light mode)" aria-label="Switch between dark and light mode (currently light mode)" aria-live="polite"><svg viewBox="0 0 24 24" width="24" height="24" class="lightToggleIcon_pyhR"><path fill="currentColor" d="M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"></path></svg><svg viewBox="0 0 24 24" width="24" height="24" class="darkToggleIcon_wfgR"><path fill="currentColor" d="M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"></path></svg></button></div><div class="searchBox_ZlJk"></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div></nav><div id="docusaurus_skipToContent_fallback" class="main-wrapper mainWrapper_z2l0"><main class="container container--fluid margin-vert--lg"><div class="row mdxPageWrapper_j9I6"><div class="col col--8"><article><h1>BP-35: 128 bits support</h1><h3 class="anchor anchorWithStickyNavbar_LWe7" id="motivation">Motivation<a href="#motivation" class="hash-link" aria-label="Direct link to Motivation" title="Direct link to Motivation">​</a></h3><p>BookKeeper coordinates with a metadata store to generate a cluster wide <code>ledgerId</code>.
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navbar__brand" href="/"><div class="navbar__logo"><img src="/img/bk-logo.svg" alt="Apache Bookkeeper" class="themedImage_ToTc themedImage--light_HNdA"><img src="/img/bk-logo.svg" alt="Apache Bookkeeper" class="themedImage_ToTc themedImage--dark_i4oU"></div><b class="navbar__title text--truncate">Apache BookKeeper</b></a><a class="navbar__item navbar__link" href="/docs/overview/">Documentation</a><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Community</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/community/mailing-lists">Mailing lists</a></li><li><a class="dropdown__link" href="/community/slack">Slack</a></li><li><a href="https://github.com/apache/bookkeeper/issues" target="_blank" rel="noopener noreferrer" class="dropdown__link">Github issues<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a class="dropdown__link" href="/community/releases">Release management</a></li><li><a class="dropdown__link" href="/community/meeting">Community meetings</a></li><li><a class="dropdown__link" href="/community/contributing">Contribution guide</a></li><li><a class="dropdown__link" href="/community/coding-guide">Coding guide</a></li><li><a class="dropdown__link" href="/community/testing">Testing guide</a></li><li><a class="dropdown__link" href="/community/issue-report">Issue report guide</a></li><li><a class="dropdown__link" href="/community/release-guide">Release guide</a></li><li><a class="dropdown__link" href="/community/presentations">Presentations</a></li><li><a class="dropdown__link" href="/community/bookkeeper-proposals">BookKeeper proposals (BP)</a></li></ul></div><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Project</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/project/who">Who are we?</a></li><li><a class="dropdown__link" href="/project/bylaws">Bylaws</a></li><li><a href="https://apache.org/licenses" target="_blank" rel="noopener noreferrer" class="dropdown__link">License<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a class="dropdown__link" href="/project/privacy">Privacy policy</a></li><li><a href="https://www.apache.org/foundation/sponsorship.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Sponsorship<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a href="https://www.apache.org/foundation/thanks.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Thanks<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div></div><div class="navbar__items navbar__items--right"><div class="navbar__item dropdown dropdown--hoverable dropdown--right"><a class="navbar__link" aria-haspopup="true" aria-expanded="false" role="button" href="/docs/overview/">4.17.0</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/docs/next/overview/">Next</a></li><li><a class="dropdown__link" href="/docs/overview/">4.17.0</a></li><li><a class="dropdown__link" href="/docs/4.16.5/overview/">4.16.5</a></li><li><a class="dropdown__link" href="/docs/4.15.5/overview/">4.15.5</a></li><li><a class="dropdown__link" href="/docs/4.14.8/overview/">4.14.8</a></li><li><a class="dropdown__link" href="/docs/4.13.0/overview/">4.13.0</a></li><li><a class="dropdown__link" href="/docs/4.12.1/overview/">4.12.1</a></li><li><a class="dropdown__link" href="/docs/4.11.1/overview/">4.11.1</a></li><li><a class="dropdown__link" href="/docs/4.10.0/overview/">4.10.0</a></li><li><a class="dropdown__link" href="/docs/4.9.2/overview/">4.9.2</a></li><li><a class="dropdown__link" href="/docs/4.8.2/overview/">4.8.2</a></li><li><a class="dropdown__link" href="/docs/4.7.3/overview/">4.7.3</a></li><li><a class="dropdown__link" href="/docs/4.6.2/overview/">4.6.2</a></li><li><a class="dropdown__link" href="/docs/4.5.1/overview/">4.5.1</a></li></ul></div><a class="navbar__item navbar__link" href="/releases">Download</a><div class="toggle_vylO colorModeToggle_DEke"><button class="clean-btn toggleButton_gllP toggleButtonDisabled_aARS" type="button" disabled="" title="Switch between dark and light mode (currently light mode)" aria-label="Switch between dark and light mode (currently light mode)" aria-live="polite"><svg viewBox="0 0 24 24" width="24" height="24" class="lightToggleIcon_pyhR"><path fill="currentColor" d="M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"></path></svg><svg viewBox="0 0 24 24" width="24" height="24" class="darkToggleIcon_wfgR"><path fill="currentColor" d="M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"></path></svg></button></div><div class="searchBox_ZlJk"></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div></nav><div id="docusaurus_skipToContent_fallback" class="main-wrapper mainWrapper_z2l0"><main class="container container--fluid margin-vert--lg"><div class="row mdxPageWrapper_j9I6"><div class="col col--8"><article><h1>BP-35: 128 bits support</h1><h3 class="anchor anchorWithStickyNavbar_LWe7" id="motivation">Motivation<a href="#motivation" class="hash-link" aria-label="Direct link to Motivation" title="Direct link to Motivation">​</a></h3><p>BookKeeper coordinates with a metadata store to generate a cluster wide <code>ledgerId</code>.
 Currently this is a signed <code>64 bit</code> number (effectively 63 bits). This method works
 great because we have a centralized metadata store for coordinating the id generation.
 However this method may not scale as the cluster size and number of ledgers grow.</p><p><a href="https://en.wikipedia.org/wiki/Globally_unique_identifier" target="_blank" rel="noopener noreferrer">Universally unique identifier - Wikipedia</a>
@@ -85,7 +85,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/bps/BP-36-stats-documentation-annotation/index.html b/content/bps/BP-36-stats-documentation-annotation/index.html
index 6767953..de68f1e 100644
--- a/content/bps/BP-36-stats-documentation-annotation/index.html
+++ b/content/bps/BP-36-stats-documentation-annotation/index.html
@@ -4,12 +4,12 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">BP-36: Stats documentation annotation | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/bps/BP-36-stats-documentation-annotation"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docusaurus_tag" content="default"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docsearch:docusaurus_tag" content="default"><meta data-rh="true" property="og:title" content="BP-36: Stats documentation annotation | Apache BookKeeper"><meta data-rh="true" name="description" content="Motivation"><meta data-rh="true" property="og:description" content="Motivation"><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/bps/BP-36-stats-documentation-annotation"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/bps/BP-36-stats-documentation-annotation" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/bps/BP-36-stats-documentation-annotation" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
-<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navbar__brand" href="/"><div class="navbar__logo"><img src="/img/bk-logo.svg" alt="Apache Bookkeeper" class="themedImage_ToTc themedImage--light_HNdA"><img src="/img/bk-logo.svg" alt="Apache Bookkeeper" class="themedImage_ToTc themedImage--dark_i4oU"></div><b class="navbar__title text--truncate">Apache BookKeeper</b></a><a class="navbar__item navbar__link" href="/docs/overview/">Documentation</a><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Community</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/community/mailing-lists">Mailing lists</a></li><li><a class="dropdown__link" href="/community/slack">Slack</a></li><li><a href="https://github.com/apache/bookkeeper/issues" target="_blank" rel="noopener noreferrer" class="dropdown__link">Github issues<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a class="dropdown__link" href="/community/releases">Release management</a></li><li><a class="dropdown__link" href="/community/meeting">Community meetings</a></li><li><a class="dropdown__link" href="/community/contributing">Contribution guide</a></li><li><a class="dropdown__link" href="/community/coding-guide">Coding guide</a></li><li><a class="dropdown__link" href="/community/testing">Testing guide</a></li><li><a class="dropdown__link" href="/community/issue-report">Issue report guide</a></li><li><a class="dropdown__link" href="/community/release-guide">Release guide</a></li><li><a class="dropdown__link" href="/community/presentations">Presentations</a></li><li><a class="dropdown__link" href="/community/bookkeeper-proposals">BookKeeper proposals (BP)</a></li></ul></div><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Project</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/project/who">Who are we?</a></li><li><a class="dropdown__link" href="/project/bylaws">Bylaws</a></li><li><a href="https://apache.org/licenses" target="_blank" rel="noopener noreferrer" class="dropdown__link">License<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a class="dropdown__link" href="/project/privacy">Privacy policy</a></li><li><a href="https://www.apache.org/foundation/sponsorship.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Sponsorship<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a href="https://www.apache.org/foundation/thanks.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Thanks<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div></div><div class="navbar__items navbar__items--right"><div class="navbar__item dropdown dropdown--hoverable dropdown--right"><a class="navbar__link" aria-haspopup="true" aria-expanded="false" role="button" href="/docs/admin/autorecovery">4.17.0</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/docs/next/overview/">Next</a></li><li><a class="dropdown__link" href="/docs/admin/autorecovery">4.17.0</a></li><li><a class="dropdown__link" href="/docs/4.16.5/overview/">4.16.5</a></li><li><a class="dropdown__link" href="/docs/4.15.5/overview/">4.15.5</a></li><li><a class="dropdown__link" href="/docs/4.14.8/overview/">4.14.8</a></li><li><a class="dropdown__link" href="/docs/4.13.0/overview/">4.13.0</a></li><li><a class="dropdown__link" href="/docs/4.12.1/overview/">4.12.1</a></li><li><a class="dropdown__link" href="/docs/4.11.1/overview/">4.11.1</a></li><li><a class="dropdown__link" href="/docs/4.10.0/overview/">4.10.0</a></li><li><a class="dropdown__link" href="/docs/4.9.2/overview/">4.9.2</a></li><li><a class="dropdown__link" href="/docs/4.8.2/overview/">4.8.2</a></li><li><a class="dropdown__link" href="/docs/4.7.3/overview/">4.7.3</a></li><li><a class="dropdown__link" href="/docs/4.6.2/overview/">4.6.2</a></li><li><a class="dropdown__link" href="/docs/4.5.1/overview/">4.5.1</a></li></ul></div><a class="navbar__item navbar__link" href="/releases">Download</a><div class="toggle_vylO colorModeToggle_DEke"><button class="clean-btn toggleButton_gllP toggleButtonDisabled_aARS" type="button" disabled="" title="Switch between dark and light mode (currently light mode)" aria-label="Switch between dark and light mode (currently light mode)" aria-live="polite"><svg viewBox="0 0 24 24" width="24" height="24" class="lightToggleIcon_pyhR"><path fill="currentColor" d="M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"></path></svg><svg viewBox="0 0 24 24" width="24" height="24" class="darkToggleIcon_wfgR"><path fill="currentColor" d="M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"></path></svg></button></div><div class="searchBox_ZlJk"></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div></nav><div id="docusaurus_skipToContent_fallback" class="main-wrapper mainWrapper_z2l0"><main class="container container--fluid margin-vert--lg"><div class="row mdxPageWrapper_j9I6"><div class="col col--8"><article><h1>BP-36: Stats documentation annotation</h1><h3 class="anchor anchorWithStickyNavbar_LWe7" id="motivation">Motivation<a href="#motivation" class="hash-link" aria-label="Direct link to Motivation" title="Direct link to Motivation">​</a></h3><p>A common ask from people using bookkeeper is how they can monitor bookies and bookkeeper clients, what kind of metrics that bookkeeper exposes
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navbar__brand" href="/"><div class="navbar__logo"><img src="/img/bk-logo.svg" alt="Apache Bookkeeper" class="themedImage_ToTc themedImage--light_HNdA"><img src="/img/bk-logo.svg" alt="Apache Bookkeeper" class="themedImage_ToTc themedImage--dark_i4oU"></div><b class="navbar__title text--truncate">Apache BookKeeper</b></a><a class="navbar__item navbar__link" href="/docs/overview/">Documentation</a><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Community</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/community/mailing-lists">Mailing lists</a></li><li><a class="dropdown__link" href="/community/slack">Slack</a></li><li><a href="https://github.com/apache/bookkeeper/issues" target="_blank" rel="noopener noreferrer" class="dropdown__link">Github issues<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a class="dropdown__link" href="/community/releases">Release management</a></li><li><a class="dropdown__link" href="/community/meeting">Community meetings</a></li><li><a class="dropdown__link" href="/community/contributing">Contribution guide</a></li><li><a class="dropdown__link" href="/community/coding-guide">Coding guide</a></li><li><a class="dropdown__link" href="/community/testing">Testing guide</a></li><li><a class="dropdown__link" href="/community/issue-report">Issue report guide</a></li><li><a class="dropdown__link" href="/community/release-guide">Release guide</a></li><li><a class="dropdown__link" href="/community/presentations">Presentations</a></li><li><a class="dropdown__link" href="/community/bookkeeper-proposals">BookKeeper proposals (BP)</a></li></ul></div><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Project</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/project/who">Who are we?</a></li><li><a class="dropdown__link" href="/project/bylaws">Bylaws</a></li><li><a href="https://apache.org/licenses" target="_blank" rel="noopener noreferrer" class="dropdown__link">License<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a class="dropdown__link" href="/project/privacy">Privacy policy</a></li><li><a href="https://www.apache.org/foundation/sponsorship.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Sponsorship<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a href="https://www.apache.org/foundation/thanks.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Thanks<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div></div><div class="navbar__items navbar__items--right"><div class="navbar__item dropdown dropdown--hoverable dropdown--right"><a class="navbar__link" aria-haspopup="true" aria-expanded="false" role="button" href="/docs/overview/">4.17.0</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/docs/next/overview/">Next</a></li><li><a class="dropdown__link" href="/docs/overview/">4.17.0</a></li><li><a class="dropdown__link" href="/docs/4.16.5/overview/">4.16.5</a></li><li><a class="dropdown__link" href="/docs/4.15.5/overview/">4.15.5</a></li><li><a class="dropdown__link" href="/docs/4.14.8/overview/">4.14.8</a></li><li><a class="dropdown__link" href="/docs/4.13.0/overview/">4.13.0</a></li><li><a class="dropdown__link" href="/docs/4.12.1/overview/">4.12.1</a></li><li><a class="dropdown__link" href="/docs/4.11.1/overview/">4.11.1</a></li><li><a class="dropdown__link" href="/docs/4.10.0/overview/">4.10.0</a></li><li><a class="dropdown__link" href="/docs/4.9.2/overview/">4.9.2</a></li><li><a class="dropdown__link" href="/docs/4.8.2/overview/">4.8.2</a></li><li><a class="dropdown__link" href="/docs/4.7.3/overview/">4.7.3</a></li><li><a class="dropdown__link" href="/docs/4.6.2/overview/">4.6.2</a></li><li><a class="dropdown__link" href="/docs/4.5.1/overview/">4.5.1</a></li></ul></div><a class="navbar__item navbar__link" href="/releases">Download</a><div class="toggle_vylO colorModeToggle_DEke"><button class="clean-btn toggleButton_gllP toggleButtonDisabled_aARS" type="button" disabled="" title="Switch between dark and light mode (currently light mode)" aria-label="Switch between dark and light mode (currently light mode)" aria-live="polite"><svg viewBox="0 0 24 24" width="24" height="24" class="lightToggleIcon_pyhR"><path fill="currentColor" d="M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"></path></svg><svg viewBox="0 0 24 24" width="24" height="24" class="darkToggleIcon_wfgR"><path fill="currentColor" d="M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"></path></svg></button></div><div class="searchBox_ZlJk"></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div></nav><div id="docusaurus_skipToContent_fallback" class="main-wrapper mainWrapper_z2l0"><main class="container container--fluid margin-vert--lg"><div class="row mdxPageWrapper_j9I6"><div class="col col--8"><article><h1>BP-36: Stats documentation annotation</h1><h3 class="anchor anchorWithStickyNavbar_LWe7" id="motivation">Motivation<a href="#motivation" class="hash-link" aria-label="Direct link to Motivation" title="Direct link to Motivation">​</a></h3><p>A common ask from people using bookkeeper is how they can monitor bookies and bookkeeper clients, what kind of metrics that bookkeeper exposes
 and what are the important metrics. Currently bookkeeper doesn&#x27;t provide any metrics page for guiding people on monitoring bookkeeper services.</p><p>In order to help people on this, we need to provide a few documentation pages about metrics. However if we just write such pages, those pages
 can quickly get out-of-dated when code is changed. The proposal here is to seek a programming way for generating metrics related pages.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="public-interfaces">Public Interfaces<a href="#public-interfaces" class="hash-link" aria-label="Direct link to Public Interfaces" title="Direct link to Public Interfaces">​</a></h3><p>Introduced a <code>StatsDoc</code> annotation.</p><div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">/**</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> * Documenting the stats.</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> */</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">@Retention</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">RetentionPolicy.RUNTIME</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">@Documented</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">public @interface StatsDoc </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    /**</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">     * The name of the category to group stats together.</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">     *</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">     * @return name of the stats category.</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">     */</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    String category</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> default </span><span class="token string" style="color:#e3116c">&quot;&quot;</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    /**</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">     * The scope of this stats.</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">     *</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">     * @return scope of this stats</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">     */</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    String scope</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> default </span><span class="token string" style="color:#e3116c">&quot;&quot;</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    /**</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">     * The name of this stats</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">     *</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">     * @return name of this stats</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">     */</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    String name</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    /**</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">     * The </span><span class="token builtin class-name">help</span><span class="token plain"> message of this stats</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">     *</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">     * @return </span><span class="token builtin class-name">help</span><span class="token plain"> message of this stats</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">     */</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    String help</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    /**</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">     * The parent metric name.</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">     *</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">     * </span><span class="token operator" style="color:#393A34">&lt;</span><span class="token plain">p</span><span class="token operator" style="color:#393A34">&gt;</span><span class="token plain">It can used </span><span class="token keyword" style="color:#00009f">for</span><span class="token plain"> analyzing the relationships</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">     * between the metrics, especially </span><span class="token keyword" style="color:#00009f">for</span><span class="token plain"> the latency metrics.</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">     *</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">     * @return the parent metric name</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">     */</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    default String </span><span class="token function-name function" style="color:#d73a49">parent</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"> </span><span class="token builtin class-name">return</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">&quot;&quot;</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    /**</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">     * The metric name of an operation that happens</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">     * after the operation of this metric.</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">     *</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">     * </span><span class="token operator" style="color:#393A34">&lt;</span><span class="token plain">p</span><span class="token operator" style="color:#393A34">&gt;</span><span class="token plain">similar as </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain">@link </span><span class="token comment" style="color:#999988;font-style:italic">#parent()}, it can be used for analyzing</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">     * the dependencies between metrics.</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">     *</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">     * @return the metric name of an operation that happens after the operation of this metric.</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">     */</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    default String </span><span class="token function-name function" style="color:#d73a49">happensAfter</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"> </span><span class="token builtin class-name">return</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">&quot;&quot;</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>The <code>StatsDoc</code> annotation provides a way to annotate metrics we added to bookkeeper.</p><ul><li>category: which category that the metric belongs to. e.g. server, or client.</li><li>scope: the scope of the metric. e.g. <code>bookie</code> scope.</li><li>name: the name of the metric.</li><li>help: the description of the metric.</li></ul><h3 class="anchor anchorWithStickyNavbar_LWe7" id="proposed-changes">Proposed Changes<a href="#proposed-changes" class="hash-link" aria-label="Direct link to Proposed Changes" title="Direct link to Proposed Changes">​</a></h3><p>In addition to the <code>StatsDoc</code> annotation, bookkeeper should provide a tool for generating the metrics yaml file
 for documenting all annotated metrics.</p><div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">bin/stats-doc-gen</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>Example output:</p><div class="language-yaml codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-yaml codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token key atrule" style="color:#00a4db">&quot;server&quot;</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token key atrule" style="color:#00a4db">&quot;bookie_BOOKIE_READ_ENTRY_BYTES&quot;</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token key atrule" style="color:#00a4db">&quot;description&quot;</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">|</span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      bytes stats of ReadEntry on a bookie</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token key atrule" style="color:#00a4db">&quot;type&quot;</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">|</span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      OPSTATS</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token key atrule" style="color:#00a4db">&quot;bookie_WRITE_BYTES&quot;</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token key atrule" style="color:#00a4db">&quot;description&quot;</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">|</span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      total bytes written to a bookie</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token key atrule" style="color:#00a4db">&quot;type&quot;</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">|</span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      COUNTER</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token key atrule" style="color:#00a4db">&quot;bookie_BOOKIE_ADD_ENTRY&quot;</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token key atrule" style="color:#00a4db">&quot;description&quot;</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">|</span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      operations stats of AddEntry on a bookie</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token key atrule" style="color:#00a4db">&quot;type&quot;</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">|</span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      OPSTATS</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token key atrule" style="color:#00a4db">&quot;bookie_BOOKIE_RECOVERY_ADD_ENTRY&quot;</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token key atrule" style="color:#00a4db">&quot;description&quot;</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">|</span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      operation stats of RecoveryAddEntry on a bookie</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token key atrule" style="color:#00a4db">&quot;type&quot;</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">|</span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      OPSTATS</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token key atrule" style="color:#00a4db">&quot;bookie_BOOKIE_ADD_ENTRY_BYTES&quot;</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token key atrule" style="color:#00a4db">&quot;description&quot;</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">|</span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      bytes stats of AddEntry on a bookie</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token key atrule" style="color:#00a4db">&quot;type&quot;</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">|</span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      OPSTATS</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token key atrule" style="color:#00a4db">&quot;bookie_BOOKIE_FORCE_LEDGER&quot;</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token key atrule" style="color:#00a4db">&quot;description&quot;</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">|</span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      total force operations occurred on a bookie</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token key atrule" style="color:#00a4db">&quot;type&quot;</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">|</span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      COUNTER</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token key atrule" style="color:#00a4db">&quot;bookie_READ_BYTES&quot;</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token key atrule" style="color:#00a4db">&quot;description&quot;</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">|</span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      total bytes read from a bookie</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token key atrule" style="color:#00a4db">&quot;type&quot;</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">|</span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      COUNTER</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token key atrule" style="color:#00a4db">&quot;bookie_BOOKIE_READ_ENTRY&quot;</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token key atrule" style="color:#00a4db">&quot;description&quot;</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">|</span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      operation stats of ReadEntry on a bookie</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token key atrule" style="color:#00a4db">&quot;type&quot;</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">|</span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      OPSTATS</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><h3 class="anchor anchorWithStickyNavbar_LWe7" id="compatibility-deprecation-and-migration-plan">Compatibility, Deprecation, and Migration Plan<a href="#compatibility-deprecation-and-migration-plan" class="hash-link" aria-label="Direct link to Compatibility, Deprecation, and Migration Plan" title="Direct link to Compatibility, Deprecation, and Migration Plan">​</a></h3><p>It is a new feature, which doesn&#x27;t have any compatibility impacts.</p><p>There is nothing deprecated.</p><p>There is nothing to migrate.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="test-plan">Test Plan<a href="#test-plan" class="hash-link" aria-label="Direct link to Test Plan" title="Direct link to Test Plan">​</a></h3><p>Existing testing is good enough to cover code changes. No new tests are needed.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="rejected-alternatives">Rejected Alternatives<a href="#rejected-alternatives" class="hash-link" aria-label="Direct link to Rejected Alternatives" title="Direct link to Rejected Alternatives">​</a></h3><p>Alternatively, we have to manually maintain the metrics page and update each time when a new metric is added.</p></article></div><div class="col col--2"><div class="tableOfContents_bqdL thin-scrollbar"><ul class="table-of-contents table-of-contents__left-border"><li><a href="#motivation" class="table-of-contents__link toc-highlight">Motivation</a></li><li><a href="#public-interfaces" class="table-of-contents__link toc-highlight">Public Interfaces</a></li><li><a href="#proposed-changes" class="table-of-contents__link toc-highlight">Proposed Changes</a></li><li><a href="#compatibility-deprecation-and-migration-plan" class="table-of-contents__link toc-highlight">Compatibility, Deprecation, and Migration Plan</a></li><li><a href="#test-plan" class="table-of-contents__link toc-highlight">Test Plan</a></li><li><a href="#rejected-alternatives" class="table-of-contents__link toc-highlight">Rejected Alternatives</a></li></ul></div></div></div></main></div><footer class="footer footer--dark"><div class="container container-fluid"><div class="row footer__links"><div class="col footer__col"><div class="footer__title">Documentation</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/docs/overview">Overview</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/getting-started/installation">Getting started</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/deployment/manual">Deployment</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/admin/bookies">Administration</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/api/overview">API</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/security/overview">Security</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/development/protocol">Development</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/reference/config">Reference</a></li></ul></div><div class="col footer__col"><div class="footer__title">Community</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/community/mailing-lists">Mailing lists</a></li><li class="footer__item"><a class="footer__link-item" href="/community/slack">Slack</a></li><li class="footer__item"><a href="https://github.com/apache/bookkeeper" target="_blank" rel="noopener noreferrer" class="footer__link-item">Github<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a href="https://twitter.com/asfbookkeeper" target="_blank" rel="noopener noreferrer" class="footer__link-item">Twitter<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div><div class="col footer__col"><div class="footer__title">Project</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/project/who">Who are we?</a></li><li class="footer__item"><a class="footer__link-item" href="/project/bylaws">Bylaws</a></li><li class="footer__item"><a href="https://apache.org/licenses" target="_blank" rel="noopener noreferrer" class="footer__link-item">License<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a class="footer__link-item" href="/project/privacy">Privacy policy</a></li><li class="footer__item"><a href="https://www.apache.org/foundation/sponsorship.html" target="_blank" rel="noopener noreferrer" class="footer__link-item">Sponsorship<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a href="https://www.apache.org/foundation/thanks.html" target="_blank" rel="noopener noreferrer" class="footer__link-item">Thanks<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div></div><div class="footer__bottom text--center"><div class="footer__copyright"><footer class="footer">
@@ -25,7 +25,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/bps/BP-37-conf-documentation/index.html b/content/bps/BP-37-conf-documentation/index.html
index 94e88e8..2be15bd 100644
--- a/content/bps/BP-37-conf-documentation/index.html
+++ b/content/bps/BP-37-conf-documentation/index.html
@@ -4,12 +4,12 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">BP-37: Improve configuration management for better documentation | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/bps/BP-37-conf-documentation"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docusaurus_tag" content="default"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docsearch:docusaurus_tag" content="default"><meta data-rh="true" property="og:title" content="BP-37: Improve configuration management for better documentation | Apache BookKeeper"><meta data-rh="true" name="description" content="Motivation"><meta data-rh="true" property="og:description" content="Motivation"><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/bps/BP-37-conf-documentation"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/bps/BP-37-conf-documentation" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/bps/BP-37-conf-documentation" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
-<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navbar__brand" href="/"><div class="navbar__logo"><img src="/img/bk-logo.svg" alt="Apache Bookkeeper" class="themedImage_ToTc themedImage--light_HNdA"><img src="/img/bk-logo.svg" alt="Apache Bookkeeper" class="themedImage_ToTc themedImage--dark_i4oU"></div><b class="navbar__title text--truncate">Apache BookKeeper</b></a><a class="navbar__item navbar__link" href="/docs/overview/">Documentation</a><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Community</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/community/mailing-lists">Mailing lists</a></li><li><a class="dropdown__link" href="/community/slack">Slack</a></li><li><a href="https://github.com/apache/bookkeeper/issues" target="_blank" rel="noopener noreferrer" class="dropdown__link">Github issues<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a class="dropdown__link" href="/community/releases">Release management</a></li><li><a class="dropdown__link" href="/community/meeting">Community meetings</a></li><li><a class="dropdown__link" href="/community/contributing">Contribution guide</a></li><li><a class="dropdown__link" href="/community/coding-guide">Coding guide</a></li><li><a class="dropdown__link" href="/community/testing">Testing guide</a></li><li><a class="dropdown__link" href="/community/issue-report">Issue report guide</a></li><li><a class="dropdown__link" href="/community/release-guide">Release guide</a></li><li><a class="dropdown__link" href="/community/presentations">Presentations</a></li><li><a class="dropdown__link" href="/community/bookkeeper-proposals">BookKeeper proposals (BP)</a></li></ul></div><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Project</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/project/who">Who are we?</a></li><li><a class="dropdown__link" href="/project/bylaws">Bylaws</a></li><li><a href="https://apache.org/licenses" target="_blank" rel="noopener noreferrer" class="dropdown__link">License<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a class="dropdown__link" href="/project/privacy">Privacy policy</a></li><li><a href="https://www.apache.org/foundation/sponsorship.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Sponsorship<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a href="https://www.apache.org/foundation/thanks.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Thanks<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div></div><div class="navbar__items navbar__items--right"><div class="navbar__item dropdown dropdown--hoverable dropdown--right"><a class="navbar__link" aria-haspopup="true" aria-expanded="false" role="button" href="/docs/admin/autorecovery">4.17.0</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/docs/next/overview/">Next</a></li><li><a class="dropdown__link" href="/docs/admin/autorecovery">4.17.0</a></li><li><a class="dropdown__link" href="/docs/4.16.5/overview/">4.16.5</a></li><li><a class="dropdown__link" href="/docs/4.15.5/overview/">4.15.5</a></li><li><a class="dropdown__link" href="/docs/4.14.8/overview/">4.14.8</a></li><li><a class="dropdown__link" href="/docs/4.13.0/overview/">4.13.0</a></li><li><a class="dropdown__link" href="/docs/4.12.1/overview/">4.12.1</a></li><li><a class="dropdown__link" href="/docs/4.11.1/overview/">4.11.1</a></li><li><a class="dropdown__link" href="/docs/4.10.0/overview/">4.10.0</a></li><li><a class="dropdown__link" href="/docs/4.9.2/overview/">4.9.2</a></li><li><a class="dropdown__link" href="/docs/4.8.2/overview/">4.8.2</a></li><li><a class="dropdown__link" href="/docs/4.7.3/overview/">4.7.3</a></li><li><a class="dropdown__link" href="/docs/4.6.2/overview/">4.6.2</a></li><li><a class="dropdown__link" href="/docs/4.5.1/overview/">4.5.1</a></li></ul></div><a class="navbar__item navbar__link" href="/releases">Download</a><div class="toggle_vylO colorModeToggle_DEke"><button class="clean-btn toggleButton_gllP toggleButtonDisabled_aARS" type="button" disabled="" title="Switch between dark and light mode (currently light mode)" aria-label="Switch between dark and light mode (currently light mode)" aria-live="polite"><svg viewBox="0 0 24 24" width="24" height="24" class="lightToggleIcon_pyhR"><path fill="currentColor" d="M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"></path></svg><svg viewBox="0 0 24 24" width="24" height="24" class="darkToggleIcon_wfgR"><path fill="currentColor" d="M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"></path></svg></button></div><div class="searchBox_ZlJk"></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div></nav><div id="docusaurus_skipToContent_fallback" class="main-wrapper mainWrapper_z2l0"><main class="container container--fluid margin-vert--lg"><div class="row mdxPageWrapper_j9I6"><div class="col col--8"><article><h1>BP-37: Improve configuration management for better documentation</h1><h3 class="anchor anchorWithStickyNavbar_LWe7" id="motivation">Motivation<a href="#motivation" class="hash-link" aria-label="Direct link to Motivation" title="Direct link to Motivation">​</a></h3><p>One common task in developing bookkeeper is to make sure all the configuration
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navbar__brand" href="/"><div class="navbar__logo"><img src="/img/bk-logo.svg" alt="Apache Bookkeeper" class="themedImage_ToTc themedImage--light_HNdA"><img src="/img/bk-logo.svg" alt="Apache Bookkeeper" class="themedImage_ToTc themedImage--dark_i4oU"></div><b class="navbar__title text--truncate">Apache BookKeeper</b></a><a class="navbar__item navbar__link" href="/docs/overview/">Documentation</a><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Community</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/community/mailing-lists">Mailing lists</a></li><li><a class="dropdown__link" href="/community/slack">Slack</a></li><li><a href="https://github.com/apache/bookkeeper/issues" target="_blank" rel="noopener noreferrer" class="dropdown__link">Github issues<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a class="dropdown__link" href="/community/releases">Release management</a></li><li><a class="dropdown__link" href="/community/meeting">Community meetings</a></li><li><a class="dropdown__link" href="/community/contributing">Contribution guide</a></li><li><a class="dropdown__link" href="/community/coding-guide">Coding guide</a></li><li><a class="dropdown__link" href="/community/testing">Testing guide</a></li><li><a class="dropdown__link" href="/community/issue-report">Issue report guide</a></li><li><a class="dropdown__link" href="/community/release-guide">Release guide</a></li><li><a class="dropdown__link" href="/community/presentations">Presentations</a></li><li><a class="dropdown__link" href="/community/bookkeeper-proposals">BookKeeper proposals (BP)</a></li></ul></div><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Project</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/project/who">Who are we?</a></li><li><a class="dropdown__link" href="/project/bylaws">Bylaws</a></li><li><a href="https://apache.org/licenses" target="_blank" rel="noopener noreferrer" class="dropdown__link">License<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a class="dropdown__link" href="/project/privacy">Privacy policy</a></li><li><a href="https://www.apache.org/foundation/sponsorship.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Sponsorship<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a href="https://www.apache.org/foundation/thanks.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Thanks<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div></div><div class="navbar__items navbar__items--right"><div class="navbar__item dropdown dropdown--hoverable dropdown--right"><a class="navbar__link" aria-haspopup="true" aria-expanded="false" role="button" href="/docs/overview/">4.17.0</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/docs/next/overview/">Next</a></li><li><a class="dropdown__link" href="/docs/overview/">4.17.0</a></li><li><a class="dropdown__link" href="/docs/4.16.5/overview/">4.16.5</a></li><li><a class="dropdown__link" href="/docs/4.15.5/overview/">4.15.5</a></li><li><a class="dropdown__link" href="/docs/4.14.8/overview/">4.14.8</a></li><li><a class="dropdown__link" href="/docs/4.13.0/overview/">4.13.0</a></li><li><a class="dropdown__link" href="/docs/4.12.1/overview/">4.12.1</a></li><li><a class="dropdown__link" href="/docs/4.11.1/overview/">4.11.1</a></li><li><a class="dropdown__link" href="/docs/4.10.0/overview/">4.10.0</a></li><li><a class="dropdown__link" href="/docs/4.9.2/overview/">4.9.2</a></li><li><a class="dropdown__link" href="/docs/4.8.2/overview/">4.8.2</a></li><li><a class="dropdown__link" href="/docs/4.7.3/overview/">4.7.3</a></li><li><a class="dropdown__link" href="/docs/4.6.2/overview/">4.6.2</a></li><li><a class="dropdown__link" href="/docs/4.5.1/overview/">4.5.1</a></li></ul></div><a class="navbar__item navbar__link" href="/releases">Download</a><div class="toggle_vylO colorModeToggle_DEke"><button class="clean-btn toggleButton_gllP toggleButtonDisabled_aARS" type="button" disabled="" title="Switch between dark and light mode (currently light mode)" aria-label="Switch between dark and light mode (currently light mode)" aria-live="polite"><svg viewBox="0 0 24 24" width="24" height="24" class="lightToggleIcon_pyhR"><path fill="currentColor" d="M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"></path></svg><svg viewBox="0 0 24 24" width="24" height="24" class="darkToggleIcon_wfgR"><path fill="currentColor" d="M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"></path></svg></button></div><div class="searchBox_ZlJk"></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div></nav><div id="docusaurus_skipToContent_fallback" class="main-wrapper mainWrapper_z2l0"><main class="container container--fluid margin-vert--lg"><div class="row mdxPageWrapper_j9I6"><div class="col col--8"><article><h1>BP-37: Improve configuration management for better documentation</h1><h3 class="anchor anchorWithStickyNavbar_LWe7" id="motivation">Motivation<a href="#motivation" class="hash-link" aria-label="Direct link to Motivation" title="Direct link to Motivation">​</a></h3><p>One common task in developing bookkeeper is to make sure all the configuration
 settings are well documented, and the configuration file we ship in each release
 is in-sync with the code itself.</p><p>However maintaining things in-sync is non-trivial. This proposal is exploring
 a new way to manage configuration settings for better documentation.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="public-interfaces">Public Interfaces<a href="#public-interfaces" class="hash-link" aria-label="Direct link to Public Interfaces" title="Direct link to Public Interfaces">​</a></h3><ol><li>Introduced <code>ConfigKey</code> for defining a configuration key. A configuration key
@@ -36,7 +36,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/bps/BP-38-bookie-endpoint-discovery/index.html b/content/bps/BP-38-bookie-endpoint-discovery/index.html
index cdad012..4ccc5bf 100644
--- a/content/bps/BP-38-bookie-endpoint-discovery/index.html
+++ b/content/bps/BP-38-bookie-endpoint-discovery/index.html
@@ -4,12 +4,12 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">BP-38: Publish Bookie Service Info on Metadata Service | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/bps/BP-38-bookie-endpoint-discovery"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docusaurus_tag" content="default"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docsearch:docusaurus_tag" content="default"><meta data-rh="true" property="og:title" content="BP-38: Publish Bookie Service Info on Metadata Service | Apache BookKeeper"><meta data-rh="true" name="description" content="Motivation"><meta data-rh="true" property="og:description" content="Motivation"><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/bps/BP-38-bookie-endpoint-discovery"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/bps/BP-38-bookie-endpoint-discovery" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/bps/BP-38-bookie-endpoint-discovery" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
-<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navbar__brand" href="/"><div class="navbar__logo"><img src="/img/bk-logo.svg" alt="Apache Bookkeeper" class="themedImage_ToTc themedImage--light_HNdA"><img src="/img/bk-logo.svg" alt="Apache Bookkeeper" class="themedImage_ToTc themedImage--dark_i4oU"></div><b class="navbar__title text--truncate">Apache BookKeeper</b></a><a class="navbar__item navbar__link" href="/docs/overview/">Documentation</a><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Community</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/community/mailing-lists">Mailing lists</a></li><li><a class="dropdown__link" href="/community/slack">Slack</a></li><li><a href="https://github.com/apache/bookkeeper/issues" target="_blank" rel="noopener noreferrer" class="dropdown__link">Github issues<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a class="dropdown__link" href="/community/releases">Release management</a></li><li><a class="dropdown__link" href="/community/meeting">Community meetings</a></li><li><a class="dropdown__link" href="/community/contributing">Contribution guide</a></li><li><a class="dropdown__link" href="/community/coding-guide">Coding guide</a></li><li><a class="dropdown__link" href="/community/testing">Testing guide</a></li><li><a class="dropdown__link" href="/community/issue-report">Issue report guide</a></li><li><a class="dropdown__link" href="/community/release-guide">Release guide</a></li><li><a class="dropdown__link" href="/community/presentations">Presentations</a></li><li><a class="dropdown__link" href="/community/bookkeeper-proposals">BookKeeper proposals (BP)</a></li></ul></div><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Project</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/project/who">Who are we?</a></li><li><a class="dropdown__link" href="/project/bylaws">Bylaws</a></li><li><a href="https://apache.org/licenses" target="_blank" rel="noopener noreferrer" class="dropdown__link">License<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a class="dropdown__link" href="/project/privacy">Privacy policy</a></li><li><a href="https://www.apache.org/foundation/sponsorship.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Sponsorship<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a href="https://www.apache.org/foundation/thanks.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Thanks<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div></div><div class="navbar__items navbar__items--right"><div class="navbar__item dropdown dropdown--hoverable dropdown--right"><a class="navbar__link" aria-haspopup="true" aria-expanded="false" role="button" href="/docs/admin/autorecovery">4.17.0</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/docs/next/overview/">Next</a></li><li><a class="dropdown__link" href="/docs/admin/autorecovery">4.17.0</a></li><li><a class="dropdown__link" href="/docs/4.16.5/overview/">4.16.5</a></li><li><a class="dropdown__link" href="/docs/4.15.5/overview/">4.15.5</a></li><li><a class="dropdown__link" href="/docs/4.14.8/overview/">4.14.8</a></li><li><a class="dropdown__link" href="/docs/4.13.0/overview/">4.13.0</a></li><li><a class="dropdown__link" href="/docs/4.12.1/overview/">4.12.1</a></li><li><a class="dropdown__link" href="/docs/4.11.1/overview/">4.11.1</a></li><li><a class="dropdown__link" href="/docs/4.10.0/overview/">4.10.0</a></li><li><a class="dropdown__link" href="/docs/4.9.2/overview/">4.9.2</a></li><li><a class="dropdown__link" href="/docs/4.8.2/overview/">4.8.2</a></li><li><a class="dropdown__link" href="/docs/4.7.3/overview/">4.7.3</a></li><li><a class="dropdown__link" href="/docs/4.6.2/overview/">4.6.2</a></li><li><a class="dropdown__link" href="/docs/4.5.1/overview/">4.5.1</a></li></ul></div><a class="navbar__item navbar__link" href="/releases">Download</a><div class="toggle_vylO colorModeToggle_DEke"><button class="clean-btn toggleButton_gllP toggleButtonDisabled_aARS" type="button" disabled="" title="Switch between dark and light mode (currently light mode)" aria-label="Switch between dark and light mode (currently light mode)" aria-live="polite"><svg viewBox="0 0 24 24" width="24" height="24" class="lightToggleIcon_pyhR"><path fill="currentColor" d="M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"></path></svg><svg viewBox="0 0 24 24" width="24" height="24" class="darkToggleIcon_wfgR"><path fill="currentColor" d="M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"></path></svg></button></div><div class="searchBox_ZlJk"></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div></nav><div id="docusaurus_skipToContent_fallback" class="main-wrapper mainWrapper_z2l0"><main class="container container--fluid margin-vert--lg"><div class="row mdxPageWrapper_j9I6"><div class="col col--8"><article><h1>BP-38: Publish Bookie Service Info on Metadata Service</h1><h3 class="anchor anchorWithStickyNavbar_LWe7" id="motivation">Motivation<a href="#motivation" class="hash-link" aria-label="Direct link to Motivation" title="Direct link to Motivation">​</a></h3><p>Bookie server exposes several services and some of them are optional: the binary BookKeeper protocol endpoint, the HTTP service, the StreamStorage service, a Metrics endpoint.</p><p>Currently (in BookKeeper 4.10) the client can only discover the main Bookie endpoint:
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navbar__brand" href="/"><div class="navbar__logo"><img src="/img/bk-logo.svg" alt="Apache Bookkeeper" class="themedImage_ToTc themedImage--light_HNdA"><img src="/img/bk-logo.svg" alt="Apache Bookkeeper" class="themedImage_ToTc themedImage--dark_i4oU"></div><b class="navbar__title text--truncate">Apache BookKeeper</b></a><a class="navbar__item navbar__link" href="/docs/overview/">Documentation</a><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Community</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/community/mailing-lists">Mailing lists</a></li><li><a class="dropdown__link" href="/community/slack">Slack</a></li><li><a href="https://github.com/apache/bookkeeper/issues" target="_blank" rel="noopener noreferrer" class="dropdown__link">Github issues<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a class="dropdown__link" href="/community/releases">Release management</a></li><li><a class="dropdown__link" href="/community/meeting">Community meetings</a></li><li><a class="dropdown__link" href="/community/contributing">Contribution guide</a></li><li><a class="dropdown__link" href="/community/coding-guide">Coding guide</a></li><li><a class="dropdown__link" href="/community/testing">Testing guide</a></li><li><a class="dropdown__link" href="/community/issue-report">Issue report guide</a></li><li><a class="dropdown__link" href="/community/release-guide">Release guide</a></li><li><a class="dropdown__link" href="/community/presentations">Presentations</a></li><li><a class="dropdown__link" href="/community/bookkeeper-proposals">BookKeeper proposals (BP)</a></li></ul></div><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Project</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/project/who">Who are we?</a></li><li><a class="dropdown__link" href="/project/bylaws">Bylaws</a></li><li><a href="https://apache.org/licenses" target="_blank" rel="noopener noreferrer" class="dropdown__link">License<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a class="dropdown__link" href="/project/privacy">Privacy policy</a></li><li><a href="https://www.apache.org/foundation/sponsorship.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Sponsorship<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a href="https://www.apache.org/foundation/thanks.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Thanks<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div></div><div class="navbar__items navbar__items--right"><div class="navbar__item dropdown dropdown--hoverable dropdown--right"><a class="navbar__link" aria-haspopup="true" aria-expanded="false" role="button" href="/docs/overview/">4.17.0</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/docs/next/overview/">Next</a></li><li><a class="dropdown__link" href="/docs/overview/">4.17.0</a></li><li><a class="dropdown__link" href="/docs/4.16.5/overview/">4.16.5</a></li><li><a class="dropdown__link" href="/docs/4.15.5/overview/">4.15.5</a></li><li><a class="dropdown__link" href="/docs/4.14.8/overview/">4.14.8</a></li><li><a class="dropdown__link" href="/docs/4.13.0/overview/">4.13.0</a></li><li><a class="dropdown__link" href="/docs/4.12.1/overview/">4.12.1</a></li><li><a class="dropdown__link" href="/docs/4.11.1/overview/">4.11.1</a></li><li><a class="dropdown__link" href="/docs/4.10.0/overview/">4.10.0</a></li><li><a class="dropdown__link" href="/docs/4.9.2/overview/">4.9.2</a></li><li><a class="dropdown__link" href="/docs/4.8.2/overview/">4.8.2</a></li><li><a class="dropdown__link" href="/docs/4.7.3/overview/">4.7.3</a></li><li><a class="dropdown__link" href="/docs/4.6.2/overview/">4.6.2</a></li><li><a class="dropdown__link" href="/docs/4.5.1/overview/">4.5.1</a></li></ul></div><a class="navbar__item navbar__link" href="/releases">Download</a><div class="toggle_vylO colorModeToggle_DEke"><button class="clean-btn toggleButton_gllP toggleButtonDisabled_aARS" type="button" disabled="" title="Switch between dark and light mode (currently light mode)" aria-label="Switch between dark and light mode (currently light mode)" aria-live="polite"><svg viewBox="0 0 24 24" width="24" height="24" class="lightToggleIcon_pyhR"><path fill="currentColor" d="M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"></path></svg><svg viewBox="0 0 24 24" width="24" height="24" class="darkToggleIcon_wfgR"><path fill="currentColor" d="M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"></path></svg></button></div><div class="searchBox_ZlJk"></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div></nav><div id="docusaurus_skipToContent_fallback" class="main-wrapper mainWrapper_z2l0"><main class="container container--fluid margin-vert--lg"><div class="row mdxPageWrapper_j9I6"><div class="col col--8"><article><h1>BP-38: Publish Bookie Service Info on Metadata Service</h1><h3 class="anchor anchorWithStickyNavbar_LWe7" id="motivation">Motivation<a href="#motivation" class="hash-link" aria-label="Direct link to Motivation" title="Direct link to Motivation">​</a></h3><p>Bookie server exposes several services and some of them are optional: the binary BookKeeper protocol endpoint, the HTTP service, the StreamStorage service, a Metrics endpoint.</p><p>Currently (in BookKeeper 4.10) the client can only discover the main Bookie endpoint:
 the main BookKeeper binary RPC service.
 Discovery of the TCP address is implicit, because the <em>id</em> of the bookie is made of the same host:port that point to the TCP address of the Bookie service.</p><p>With this proposal we are now introducing a way for the Bookie to advertise the services it exposes, basically the Bookie will be able to store on the Metadata Service a structure that describes the list of  <em>available services</em>.</p><p>We will also allow to publish a set of additional unstructured properties in form of a key-value pair that will be useful for futher implementations.</p><p>This information will be also useful for Monitoring and Management services as it will enable full discovery of the capabilities of all of the Bookies in a cluster just by having read access to the Metadata Service.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="public-interfaces">Public Interfaces<a href="#public-interfaces" class="hash-link" aria-label="Direct link to Public Interfaces" title="Direct link to Public Interfaces">​</a></h3><p>On the Registration API, we introduce a new data structure that describes the services
 exposed by a Bookie:</p><div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">interface BookieServiceInfo {</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    class Endpoint {</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        String name;</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        String hostname;</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        int port;</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        String protocol; // &quot;bookie-rpc&quot;, &quot;http&quot;, &quot;https&quot;....      </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    }</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    List&lt;Endpoint&gt; endpoints;</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    Map&lt;String, String&gt; properties; // additional properties</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">}</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>In RegistrationClient interface we expose a new method:</p><div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">CompletableFuture&lt;Versioned&lt;BookieServiceInfo&gt;&gt; getBookieServiceInfo(String bookieId)</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>The client can derive bookieId from a BookieSocketAddress. He can access the list of available bookies using <strong>RegistrationClient#getAllBookies()</strong> and then use this new method to get the details of the services exposed by the Bookie.</p><p>On the Bookie side we change the RegistrationManager interface in order to let the Bookie
@@ -40,7 +40,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/bps/BP-41-bookieid/index.html b/content/bps/BP-41-bookieid/index.html
index 6c2cbaa..3a8bdd3 100644
--- a/content/bps/BP-41-bookieid/index.html
+++ b/content/bps/BP-41-bookieid/index.html
@@ -4,12 +4,12 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">BP-41: Separate BookieId from Bookie Network Address | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/bps/BP-41-bookieid"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docusaurus_tag" content="default"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docsearch:docusaurus_tag" content="default"><meta data-rh="true" property="og:title" content="BP-41: Separate BookieId from Bookie Network Address | Apache BookKeeper"><meta data-rh="true" name="description" content="Motivation"><meta data-rh="true" property="og:description" content="Motivation"><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/bps/BP-41-bookieid"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/bps/BP-41-bookieid" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/bps/BP-41-bookieid" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
-<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navbar__brand" href="/"><div class="navbar__logo"><img src="/img/bk-logo.svg" alt="Apache Bookkeeper" class="themedImage_ToTc themedImage--light_HNdA"><img src="/img/bk-logo.svg" alt="Apache Bookkeeper" class="themedImage_ToTc themedImage--dark_i4oU"></div><b class="navbar__title text--truncate">Apache BookKeeper</b></a><a class="navbar__item navbar__link" href="/docs/overview/">Documentation</a><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Community</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/community/mailing-lists">Mailing lists</a></li><li><a class="dropdown__link" href="/community/slack">Slack</a></li><li><a href="https://github.com/apache/bookkeeper/issues" target="_blank" rel="noopener noreferrer" class="dropdown__link">Github issues<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a class="dropdown__link" href="/community/releases">Release management</a></li><li><a class="dropdown__link" href="/community/meeting">Community meetings</a></li><li><a class="dropdown__link" href="/community/contributing">Contribution guide</a></li><li><a class="dropdown__link" href="/community/coding-guide">Coding guide</a></li><li><a class="dropdown__link" href="/community/testing">Testing guide</a></li><li><a class="dropdown__link" href="/community/issue-report">Issue report guide</a></li><li><a class="dropdown__link" href="/community/release-guide">Release guide</a></li><li><a class="dropdown__link" href="/community/presentations">Presentations</a></li><li><a class="dropdown__link" href="/community/bookkeeper-proposals">BookKeeper proposals (BP)</a></li></ul></div><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Project</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/project/who">Who are we?</a></li><li><a class="dropdown__link" href="/project/bylaws">Bylaws</a></li><li><a href="https://apache.org/licenses" target="_blank" rel="noopener noreferrer" class="dropdown__link">License<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a class="dropdown__link" href="/project/privacy">Privacy policy</a></li><li><a href="https://www.apache.org/foundation/sponsorship.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Sponsorship<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a href="https://www.apache.org/foundation/thanks.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Thanks<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div></div><div class="navbar__items navbar__items--right"><div class="navbar__item dropdown dropdown--hoverable dropdown--right"><a class="navbar__link" aria-haspopup="true" aria-expanded="false" role="button" href="/docs/admin/autorecovery">4.17.0</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/docs/next/overview/">Next</a></li><li><a class="dropdown__link" href="/docs/admin/autorecovery">4.17.0</a></li><li><a class="dropdown__link" href="/docs/4.16.5/overview/">4.16.5</a></li><li><a class="dropdown__link" href="/docs/4.15.5/overview/">4.15.5</a></li><li><a class="dropdown__link" href="/docs/4.14.8/overview/">4.14.8</a></li><li><a class="dropdown__link" href="/docs/4.13.0/overview/">4.13.0</a></li><li><a class="dropdown__link" href="/docs/4.12.1/overview/">4.12.1</a></li><li><a class="dropdown__link" href="/docs/4.11.1/overview/">4.11.1</a></li><li><a class="dropdown__link" href="/docs/4.10.0/overview/">4.10.0</a></li><li><a class="dropdown__link" href="/docs/4.9.2/overview/">4.9.2</a></li><li><a class="dropdown__link" href="/docs/4.8.2/overview/">4.8.2</a></li><li><a class="dropdown__link" href="/docs/4.7.3/overview/">4.7.3</a></li><li><a class="dropdown__link" href="/docs/4.6.2/overview/">4.6.2</a></li><li><a class="dropdown__link" href="/docs/4.5.1/overview/">4.5.1</a></li></ul></div><a class="navbar__item navbar__link" href="/releases">Download</a><div class="toggle_vylO colorModeToggle_DEke"><button class="clean-btn toggleButton_gllP toggleButtonDisabled_aARS" type="button" disabled="" title="Switch between dark and light mode (currently light mode)" aria-label="Switch between dark and light mode (currently light mode)" aria-live="polite"><svg viewBox="0 0 24 24" width="24" height="24" class="lightToggleIcon_pyhR"><path fill="currentColor" d="M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"></path></svg><svg viewBox="0 0 24 24" width="24" height="24" class="darkToggleIcon_wfgR"><path fill="currentColor" d="M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"></path></svg></button></div><div class="searchBox_ZlJk"></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div></nav><div id="docusaurus_skipToContent_fallback" class="main-wrapper mainWrapper_z2l0"><main class="container container--fluid margin-vert--lg"><div class="row mdxPageWrapper_j9I6"><div class="col col--8"><article><h1>BP-41: Separate BookieId from Bookie Network Address</h1><h3 class="anchor anchorWithStickyNavbar_LWe7" id="motivation">Motivation<a href="#motivation" class="hash-link" aria-label="Direct link to Motivation" title="Direct link to Motivation">​</a></h3><p>We want to separate the concepts of <strong>BookieId</strong> from <strong>BookieSocketAddress</strong>.</p><p>Currently (up to 4.11.x) there is a too strict coupling from the ID of a Bookie (<strong>BookieId</strong>) and its network location (<strong>BookieSocketAddress</strong>).</p><p>The <strong>LedgerMetadata</strong> structure contains the location of the entries of a ledger, and it stores BookieSocketAddresses (simply a hostname:port or ip:port pair).
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navbar__brand" href="/"><div class="navbar__logo"><img src="/img/bk-logo.svg" alt="Apache Bookkeeper" class="themedImage_ToTc themedImage--light_HNdA"><img src="/img/bk-logo.svg" alt="Apache Bookkeeper" class="themedImage_ToTc themedImage--dark_i4oU"></div><b class="navbar__title text--truncate">Apache BookKeeper</b></a><a class="navbar__item navbar__link" href="/docs/overview/">Documentation</a><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Community</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/community/mailing-lists">Mailing lists</a></li><li><a class="dropdown__link" href="/community/slack">Slack</a></li><li><a href="https://github.com/apache/bookkeeper/issues" target="_blank" rel="noopener noreferrer" class="dropdown__link">Github issues<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a class="dropdown__link" href="/community/releases">Release management</a></li><li><a class="dropdown__link" href="/community/meeting">Community meetings</a></li><li><a class="dropdown__link" href="/community/contributing">Contribution guide</a></li><li><a class="dropdown__link" href="/community/coding-guide">Coding guide</a></li><li><a class="dropdown__link" href="/community/testing">Testing guide</a></li><li><a class="dropdown__link" href="/community/issue-report">Issue report guide</a></li><li><a class="dropdown__link" href="/community/release-guide">Release guide</a></li><li><a class="dropdown__link" href="/community/presentations">Presentations</a></li><li><a class="dropdown__link" href="/community/bookkeeper-proposals">BookKeeper proposals (BP)</a></li></ul></div><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Project</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/project/who">Who are we?</a></li><li><a class="dropdown__link" href="/project/bylaws">Bylaws</a></li><li><a href="https://apache.org/licenses" target="_blank" rel="noopener noreferrer" class="dropdown__link">License<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a class="dropdown__link" href="/project/privacy">Privacy policy</a></li><li><a href="https://www.apache.org/foundation/sponsorship.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Sponsorship<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a href="https://www.apache.org/foundation/thanks.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Thanks<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div></div><div class="navbar__items navbar__items--right"><div class="navbar__item dropdown dropdown--hoverable dropdown--right"><a class="navbar__link" aria-haspopup="true" aria-expanded="false" role="button" href="/docs/overview/">4.17.0</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/docs/next/overview/">Next</a></li><li><a class="dropdown__link" href="/docs/overview/">4.17.0</a></li><li><a class="dropdown__link" href="/docs/4.16.5/overview/">4.16.5</a></li><li><a class="dropdown__link" href="/docs/4.15.5/overview/">4.15.5</a></li><li><a class="dropdown__link" href="/docs/4.14.8/overview/">4.14.8</a></li><li><a class="dropdown__link" href="/docs/4.13.0/overview/">4.13.0</a></li><li><a class="dropdown__link" href="/docs/4.12.1/overview/">4.12.1</a></li><li><a class="dropdown__link" href="/docs/4.11.1/overview/">4.11.1</a></li><li><a class="dropdown__link" href="/docs/4.10.0/overview/">4.10.0</a></li><li><a class="dropdown__link" href="/docs/4.9.2/overview/">4.9.2</a></li><li><a class="dropdown__link" href="/docs/4.8.2/overview/">4.8.2</a></li><li><a class="dropdown__link" href="/docs/4.7.3/overview/">4.7.3</a></li><li><a class="dropdown__link" href="/docs/4.6.2/overview/">4.6.2</a></li><li><a class="dropdown__link" href="/docs/4.5.1/overview/">4.5.1</a></li></ul></div><a class="navbar__item navbar__link" href="/releases">Download</a><div class="toggle_vylO colorModeToggle_DEke"><button class="clean-btn toggleButton_gllP toggleButtonDisabled_aARS" type="button" disabled="" title="Switch between dark and light mode (currently light mode)" aria-label="Switch between dark and light mode (currently light mode)" aria-live="polite"><svg viewBox="0 0 24 24" width="24" height="24" class="lightToggleIcon_pyhR"><path fill="currentColor" d="M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"></path></svg><svg viewBox="0 0 24 24" width="24" height="24" class="darkToggleIcon_wfgR"><path fill="currentColor" d="M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"></path></svg></button></div><div class="searchBox_ZlJk"></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div></nav><div id="docusaurus_skipToContent_fallback" class="main-wrapper mainWrapper_z2l0"><main class="container container--fluid margin-vert--lg"><div class="row mdxPageWrapper_j9I6"><div class="col col--8"><article><h1>BP-41: Separate BookieId from Bookie Network Address</h1><h3 class="anchor anchorWithStickyNavbar_LWe7" id="motivation">Motivation<a href="#motivation" class="hash-link" aria-label="Direct link to Motivation" title="Direct link to Motivation">​</a></h3><p>We want to separate the concepts of <strong>BookieId</strong> from <strong>BookieSocketAddress</strong>.</p><p>Currently (up to 4.11.x) there is a too strict coupling from the ID of a Bookie (<strong>BookieId</strong>) and its network location (<strong>BookieSocketAddress</strong>).</p><p>The <strong>LedgerMetadata</strong> structure contains the location of the entries of a ledger, and it stores BookieSocketAddresses (simply a hostname:port or ip:port pair).
 The client uses this information to connect to the bookies and retrieve ledger data.</p><p>So <em>the identity of a bookie is bound to the network address</em> of the primary endpoint of the Bookie: the &#x27;<strong>bookie-rpc</strong>&#x27; endpoint in terms of <a href="/bps/BP-38-bookie-endpoint-discovery/">BP-38</a></p><p>Limits of current version, because:</p><ul><li>You cannot easily change the network address of a Bookie: a manual intervention is needed.</li><li>The Bookie cannot have a <strong>dynamic network address</strong> or DNS name.</li><li>You cannot use a custom Id for the bookie, something that is <strong>meaningful</strong> in the context of the deployment of the bookie.</li><li>In case of future implementations that will open <strong>multiple endpoints</strong> on the bookie it is not possible to decide which endpoint should be used as BookieId. </li></ul><p>This proposal addresses these problems by proposing to separate the concept of <strong>BookieId</strong> from <strong>BookieSocketAddress</strong>.</p><p>We will have to introduce a little break in the Client API, in order to switch from using BookieSocketAddress to a more opaque BookieId.</p><p>Fortunately we will be able to keep compatibility with old clients and old bookies are far as the Bookie continues to use a BookieId that looks like a BookieSocketAddress.
 See the paragraphs below for the details. </p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="public-interfaces">Public Interfaces<a href="#public-interfaces" class="hash-link" aria-label="Direct link to Public Interfaces" title="Direct link to Public Interfaces">​</a></h3><p>We are introducing a new class BookieId that is simply a wrapper for a String.</p><div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">final class BookieId {</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    private final String bookieId;</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    public String toString() {</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">         return bookieId;</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    }</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    public static BookieId parse(String bookieId) {</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">         // validation omitted...</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">         return new BookieId(bookieId);</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    }</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">}</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>Having a class instead of a simple String is better because it provides a strongly typed API.</p><p>The LedgerMetadata class will be changed to use BookieId instead of BookieSocketAddress.
 This will break source and binary compatibility for Java clients, applications that use LedgerMetadata (usually for debug or for tools) will have to be recompiled.</p><p>The serialized representation of a BookieSocketAddress, both for LedgerMetadata and Bookie Registration, is a simple String on ZooKeeper: this change is not about the format of data stored on Metadata Service.</p><p>It is simply a pure refactor of Java interfaces.</p><p>We have to introduce an internal API, <strong>BookieAddressResolver</strong>, that maps a <em>BookieId</em> to a <em>BookieSocketAddress</em>: the client connectes to a Bookie it looks up the <strong>current network address</strong> using BookieAddressResolver.</p><div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">interface BookieAddressResolver {</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    BookieSocketAddress resolve(BookieId id);</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">}</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>Initially it is not expected that the user provides a custom implementation of BookieAddressResolver.</p><p>It is expected that the implementation of this interface coordinates with the BookieWatcher and the RegistrationDriver in order to:</p><ul><li>map BookieId to BookieSocketAddress using <code>getBookieServiceInfo(BookieId id)</code> API</li><li>cache efficiently this mapping in order to do not have a significant impact on the hot paths (reads and writes), and to save resources on the Metadata Service</li></ul><p>We provide an utility method BookieSocketAddress#toBookieId that helps particularly in test cases, this method simply returns a BookieId
@@ -48,7 +48,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/bps/BP-42-new-api-list-ledgers/index.html b/content/bps/BP-42-new-api-list-ledgers/index.html
index 1d18e0c..ee431f0 100644
--- a/content/bps/BP-42-new-api-list-ledgers/index.html
+++ b/content/bps/BP-42-new-api-list-ledgers/index.html
@@ -4,12 +4,12 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">BP-42: New Client API - list ledgers | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/bps/BP-42-new-api-list-ledgers"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docusaurus_tag" content="default"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docsearch:docusaurus_tag" content="default"><meta data-rh="true" property="og:title" content="BP-42: New Client API - list ledgers | Apache BookKeeper"><meta data-rh="true" name="description" content="Motivation"><meta data-rh="true" property="og:description" content="Motivation"><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/bps/BP-42-new-api-list-ledgers"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/bps/BP-42-new-api-list-ledgers" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/bps/BP-42-new-api-list-ledgers" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
-<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navbar__brand" href="/"><div class="navbar__logo"><img src="/img/bk-logo.svg" alt="Apache Bookkeeper" class="themedImage_ToTc themedImage--light_HNdA"><img src="/img/bk-logo.svg" alt="Apache Bookkeeper" class="themedImage_ToTc themedImage--dark_i4oU"></div><b class="navbar__title text--truncate">Apache BookKeeper</b></a><a class="navbar__item navbar__link" href="/docs/overview/">Documentation</a><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Community</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/community/mailing-lists">Mailing lists</a></li><li><a class="dropdown__link" href="/community/slack">Slack</a></li><li><a href="https://github.com/apache/bookkeeper/issues" target="_blank" rel="noopener noreferrer" class="dropdown__link">Github issues<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a class="dropdown__link" href="/community/releases">Release management</a></li><li><a class="dropdown__link" href="/community/meeting">Community meetings</a></li><li><a class="dropdown__link" href="/community/contributing">Contribution guide</a></li><li><a class="dropdown__link" href="/community/coding-guide">Coding guide</a></li><li><a class="dropdown__link" href="/community/testing">Testing guide</a></li><li><a class="dropdown__link" href="/community/issue-report">Issue report guide</a></li><li><a class="dropdown__link" href="/community/release-guide">Release guide</a></li><li><a class="dropdown__link" href="/community/presentations">Presentations</a></li><li><a class="dropdown__link" href="/community/bookkeeper-proposals">BookKeeper proposals (BP)</a></li></ul></div><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Project</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/project/who">Who are we?</a></li><li><a class="dropdown__link" href="/project/bylaws">Bylaws</a></li><li><a href="https://apache.org/licenses" target="_blank" rel="noopener noreferrer" class="dropdown__link">License<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a class="dropdown__link" href="/project/privacy">Privacy policy</a></li><li><a href="https://www.apache.org/foundation/sponsorship.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Sponsorship<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a href="https://www.apache.org/foundation/thanks.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Thanks<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div></div><div class="navbar__items navbar__items--right"><div class="navbar__item dropdown dropdown--hoverable dropdown--right"><a class="navbar__link" aria-haspopup="true" aria-expanded="false" role="button" href="/docs/admin/autorecovery">4.17.0</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/docs/next/overview/">Next</a></li><li><a class="dropdown__link" href="/docs/admin/autorecovery">4.17.0</a></li><li><a class="dropdown__link" href="/docs/4.16.5/overview/">4.16.5</a></li><li><a class="dropdown__link" href="/docs/4.15.5/overview/">4.15.5</a></li><li><a class="dropdown__link" href="/docs/4.14.8/overview/">4.14.8</a></li><li><a class="dropdown__link" href="/docs/4.13.0/overview/">4.13.0</a></li><li><a class="dropdown__link" href="/docs/4.12.1/overview/">4.12.1</a></li><li><a class="dropdown__link" href="/docs/4.11.1/overview/">4.11.1</a></li><li><a class="dropdown__link" href="/docs/4.10.0/overview/">4.10.0</a></li><li><a class="dropdown__link" href="/docs/4.9.2/overview/">4.9.2</a></li><li><a class="dropdown__link" href="/docs/4.8.2/overview/">4.8.2</a></li><li><a class="dropdown__link" href="/docs/4.7.3/overview/">4.7.3</a></li><li><a class="dropdown__link" href="/docs/4.6.2/overview/">4.6.2</a></li><li><a class="dropdown__link" href="/docs/4.5.1/overview/">4.5.1</a></li></ul></div><a class="navbar__item navbar__link" href="/releases">Download</a><div class="toggle_vylO colorModeToggle_DEke"><button class="clean-btn toggleButton_gllP toggleButtonDisabled_aARS" type="button" disabled="" title="Switch between dark and light mode (currently light mode)" aria-label="Switch between dark and light mode (currently light mode)" aria-live="polite"><svg viewBox="0 0 24 24" width="24" height="24" class="lightToggleIcon_pyhR"><path fill="currentColor" d="M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"></path></svg><svg viewBox="0 0 24 24" width="24" height="24" class="darkToggleIcon_wfgR"><path fill="currentColor" d="M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"></path></svg></button></div><div class="searchBox_ZlJk"></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div></nav><div id="docusaurus_skipToContent_fallback" class="main-wrapper mainWrapper_z2l0"><main class="container container--fluid margin-vert--lg"><div class="row mdxPageWrapper_j9I6"><div class="col col--8"><article><h1>BP-42: New Client API - list ledgers</h1><h3 class="anchor anchorWithStickyNavbar_LWe7" id="motivation">Motivation<a href="#motivation" class="hash-link" aria-label="Direct link to Motivation" title="Direct link to Motivation">​</a></h3><p>The new Client API (<code>org.apache.bookkeeper.client.api.BookKeeper</code>) aims to replace obsolete BookKeeper API but some features are not implemented yet, like the functionalities provided by <code>BookKeeperAdmin</code>.
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navbar__brand" href="/"><div class="navbar__logo"><img src="/img/bk-logo.svg" alt="Apache Bookkeeper" class="themedImage_ToTc themedImage--light_HNdA"><img src="/img/bk-logo.svg" alt="Apache Bookkeeper" class="themedImage_ToTc themedImage--dark_i4oU"></div><b class="navbar__title text--truncate">Apache BookKeeper</b></a><a class="navbar__item navbar__link" href="/docs/overview/">Documentation</a><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Community</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/community/mailing-lists">Mailing lists</a></li><li><a class="dropdown__link" href="/community/slack">Slack</a></li><li><a href="https://github.com/apache/bookkeeper/issues" target="_blank" rel="noopener noreferrer" class="dropdown__link">Github issues<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a class="dropdown__link" href="/community/releases">Release management</a></li><li><a class="dropdown__link" href="/community/meeting">Community meetings</a></li><li><a class="dropdown__link" href="/community/contributing">Contribution guide</a></li><li><a class="dropdown__link" href="/community/coding-guide">Coding guide</a></li><li><a class="dropdown__link" href="/community/testing">Testing guide</a></li><li><a class="dropdown__link" href="/community/issue-report">Issue report guide</a></li><li><a class="dropdown__link" href="/community/release-guide">Release guide</a></li><li><a class="dropdown__link" href="/community/presentations">Presentations</a></li><li><a class="dropdown__link" href="/community/bookkeeper-proposals">BookKeeper proposals (BP)</a></li></ul></div><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Project</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/project/who">Who are we?</a></li><li><a class="dropdown__link" href="/project/bylaws">Bylaws</a></li><li><a href="https://apache.org/licenses" target="_blank" rel="noopener noreferrer" class="dropdown__link">License<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a class="dropdown__link" href="/project/privacy">Privacy policy</a></li><li><a href="https://www.apache.org/foundation/sponsorship.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Sponsorship<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a href="https://www.apache.org/foundation/thanks.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Thanks<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div></div><div class="navbar__items navbar__items--right"><div class="navbar__item dropdown dropdown--hoverable dropdown--right"><a class="navbar__link" aria-haspopup="true" aria-expanded="false" role="button" href="/docs/overview/">4.17.0</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/docs/next/overview/">Next</a></li><li><a class="dropdown__link" href="/docs/overview/">4.17.0</a></li><li><a class="dropdown__link" href="/docs/4.16.5/overview/">4.16.5</a></li><li><a class="dropdown__link" href="/docs/4.15.5/overview/">4.15.5</a></li><li><a class="dropdown__link" href="/docs/4.14.8/overview/">4.14.8</a></li><li><a class="dropdown__link" href="/docs/4.13.0/overview/">4.13.0</a></li><li><a class="dropdown__link" href="/docs/4.12.1/overview/">4.12.1</a></li><li><a class="dropdown__link" href="/docs/4.11.1/overview/">4.11.1</a></li><li><a class="dropdown__link" href="/docs/4.10.0/overview/">4.10.0</a></li><li><a class="dropdown__link" href="/docs/4.9.2/overview/">4.9.2</a></li><li><a class="dropdown__link" href="/docs/4.8.2/overview/">4.8.2</a></li><li><a class="dropdown__link" href="/docs/4.7.3/overview/">4.7.3</a></li><li><a class="dropdown__link" href="/docs/4.6.2/overview/">4.6.2</a></li><li><a class="dropdown__link" href="/docs/4.5.1/overview/">4.5.1</a></li></ul></div><a class="navbar__item navbar__link" href="/releases">Download</a><div class="toggle_vylO colorModeToggle_DEke"><button class="clean-btn toggleButton_gllP toggleButtonDisabled_aARS" type="button" disabled="" title="Switch between dark and light mode (currently light mode)" aria-label="Switch between dark and light mode (currently light mode)" aria-live="polite"><svg viewBox="0 0 24 24" width="24" height="24" class="lightToggleIcon_pyhR"><path fill="currentColor" d="M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"></path></svg><svg viewBox="0 0 24 24" width="24" height="24" class="darkToggleIcon_wfgR"><path fill="currentColor" d="M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"></path></svg></button></div><div class="searchBox_ZlJk"></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div></nav><div id="docusaurus_skipToContent_fallback" class="main-wrapper mainWrapper_z2l0"><main class="container container--fluid margin-vert--lg"><div class="row mdxPageWrapper_j9I6"><div class="col col--8"><article><h1>BP-42: New Client API - list ledgers</h1><h3 class="anchor anchorWithStickyNavbar_LWe7" id="motivation">Motivation<a href="#motivation" class="hash-link" aria-label="Direct link to Motivation" title="Direct link to Motivation">​</a></h3><p>The new Client API (<code>org.apache.bookkeeper.client.api.BookKeeper</code>) aims to replace obsolete BookKeeper API but some features are not implemented yet, like the functionalities provided by <code>BookKeeperAdmin</code>.
 For example, it does not expose a method to list available ledgers, comparable to <code>BookKeeperAdmin#listLedgers()</code>.</p><h4 class="anchor anchorWithStickyNavbar_LWe7" id="ledgers-listing">Ledgers listing<a href="#ledgers-listing" class="hash-link" aria-label="Direct link to Ledgers listing" title="Direct link to Ledgers listing">​</a></h4><p>The goal here is to extend the Client API for listing ledgers. Moreover current method  <code>BookKeeperAdmin#listLedgers()</code> does not report errors from the metadata driver; for instance, if an IOException occurs during iterator flow, the error is not visible to the caller and the iteration is stopped (e.g. hasNext will return false). However there is no intention to change this behaviour in this proposal.</p><h4 class="anchor anchorWithStickyNavbar_LWe7" id="simpler-access-to-ledgermetadata">Simpler access to LedgerMetadata<a href="#simpler-access-to-ledgermetadata" class="hash-link" aria-label="Direct link to Simpler access to LedgerMetadata" title="Direct link to Simpler access to LedgerMetadata">​</a></h4><p>The goal here is to streamline the access to <code>LedgerMetadata</code>, directly from BookKeeper interface.</p><h4 class="anchor anchorWithStickyNavbar_LWe7" id="ledger-id-inside-ledgermetadata">Ledger id inside LedgerMetadata<a href="#ledger-id-inside-ledgermetadata" class="hash-link" aria-label="Direct link to Ledger id inside LedgerMetadata" title="Direct link to Ledger id inside LedgerMetadata">​</a></h4><p>Currently there is no <code>ledgerId</code> property inside <code>LedgerMetadata</code> interface, this can be helpful in some contexts.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="public-interfaces">Public Interfaces<a href="#public-interfaces" class="hash-link" aria-label="Direct link to Public Interfaces" title="Direct link to Public Interfaces">​</a></h3><p>This proposal adds new interfaces to <code>org.apache.bookkeeper.client.api</code> package, similar to <code>org.apache.bookkeeper.client.api.BookKeeper</code> methods. </p><div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">// new interface</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">interface LedgersIterator {</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    boolean hasNext() throws IOException;</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    long next() throws IOException;</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">}</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">// new interface</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">interface ListLedgersResult extends AutoCloseable {</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    LedgersIterator iterator();</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    Iterable&lt;Long&gt; toIterable();</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">}</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">// new interface</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">interface ListLedgersResultBuilder extends OpBuilder&lt;Void&gt;{</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    // empty now, maybe some filters in future</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">}</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">interface BookKeeper {</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    ....</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    ListLedgersResultBuilder newListLedgersOp();</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    CompleatableFuture&lt;LedgerMetadata&gt; getLedgerMetadata(long ledgerId);</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">}</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">interface LedgerMetadata {</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    ....</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    long getLedgerId();</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">}</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><h3 class="anchor anchorWithStickyNavbar_LWe7" id="proposed-changes">Proposed Changes<a href="#proposed-changes" class="hash-link" aria-label="Direct link to Proposed Changes" title="Direct link to Proposed Changes">​</a></h3><h4 class="anchor anchorWithStickyNavbar_LWe7" id="ledgers-listing-1">Ledgers listing<a href="#ledgers-listing-1" class="hash-link" aria-label="Direct link to Ledgers listing" title="Direct link to Ledgers listing">​</a></h4><p>The implementation is pretty similar to <code>BookKeeperAdmin#listLedgers()</code> but there are few enhancements:</p><ul><li>Handle metadata driver errors, since the IOException is directly thrown up to caller, allowing user to handle network errors in a more suitable way.</li><li>Leave the possibility to restrict/filter returned ledgers in future, without API breaking changes   </li><li>Dispose some resources needed to retrieve ledgers (<code>ListLedgersResult</code> extends <code>AutoCloseable</code>)) (will be empty for current implementations)</li></ul><p>The implementation will be the same used in BookKeeperAdmin, iterating over <code>LedgerRangeIterator</code>, which already handles ledgers search properly.</p><h4 class="anchor anchorWithStickyNavbar_LWe7" id="simpler-access-to-ledgermetadata-1">Simpler access to LedgerMetadata<a href="#simpler-access-to-ledgermetadata-1" class="hash-link" aria-label="Direct link to Simpler access to LedgerMetadata" title="Direct link to Simpler access to LedgerMetadata">​</a></h4><p>The implementation will use LedgerManager to retrieve metadata for a specified ledgerId.  </p><h4 class="anchor anchorWithStickyNavbar_LWe7" id="ledger-id-inside-ledgermetadata-1">Ledger id inside LedgerMetadata<a href="#ledger-id-inside-ledgermetadata-1" class="hash-link" aria-label="Direct link to Ledger id inside LedgerMetadata" title="Direct link to Ledger id inside LedgerMetadata">​</a></h4><p>Each time a LedgerMetadata instance is created, the ledgerId is known, so it is trivial to set it in the instance.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="compatibility-deprecation-and-migration-plan">Compatibility, Deprecation, and Migration Plan<a href="#compatibility-deprecation-and-migration-plan" class="hash-link" aria-label="Direct link to Compatibility, Deprecation, and Migration Plan" title="Direct link to Compatibility, Deprecation, and Migration Plan">​</a></h3><p>No impact for current API, the proposal does not aim to explicit deprecate <code>BookKeeperAdmin#listLedgers()</code> method.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="test-plan">Test Plan<a href="#test-plan" class="hash-link" aria-label="Direct link to Test Plan" title="Direct link to Test Plan">​</a></h3><p>This proposal needs only new unit tests, other tests must continue pass without any changes.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="rejected-alternatives">Rejected Alternatives<a href="#rejected-alternatives" class="hash-link" aria-label="Direct link to Rejected Alternatives" title="Direct link to Rejected Alternatives">​</a></h3><p>An alternative could be creates a new API similar to BookKeeperAdmin but it is better to invest enhancing <code>org.apache.bookkeeper.client.api.BookKeeper</code> API.</p></article></div><div class="col col--2"><div class="tableOfContents_bqdL thin-scrollbar"><ul class="table-of-contents table-of-contents__left-border"><li><a href="#motivation" class="table-of-contents__link toc-highlight">Motivation</a></li><li><a href="#public-interfaces" class="table-of-contents__link toc-highlight">Public Interfaces</a></li><li><a href="#proposed-changes" class="table-of-contents__link toc-highlight">Proposed Changes</a></li><li><a href="#compatibility-deprecation-and-migration-plan" class="table-of-contents__link toc-highlight">Compatibility, Deprecation, and Migration Plan</a></li><li><a href="#test-plan" class="table-of-contents__link toc-highlight">Test Plan</a></li><li><a href="#rejected-alternatives" class="table-of-contents__link toc-highlight">Rejected Alternatives</a></li></ul></div></div></div></main></div><footer class="footer footer--dark"><div class="container container-fluid"><div class="row footer__links"><div class="col footer__col"><div class="footer__title">Documentation</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/docs/overview">Overview</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/getting-started/installation">Getting started</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/deployment/manual">Deployment</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/admin/bookies">Administration</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/api/overview">API</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/security/overview">Security</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/development/protocol">Development</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/reference/config">Reference</a></li></ul></div><div class="col footer__col"><div class="footer__title">Community</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/community/mailing-lists">Mailing lists</a></li><li class="footer__item"><a class="footer__link-item" href="/community/slack">Slack</a></li><li class="footer__item"><a href="https://github.com/apache/bookkeeper" target="_blank" rel="noopener noreferrer" class="footer__link-item">Github<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a href="https://twitter.com/asfbookkeeper" target="_blank" rel="noopener noreferrer" class="footer__link-item">Twitter<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div><div class="col footer__col"><div class="footer__title">Project</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/project/who">Who are we?</a></li><li class="footer__item"><a class="footer__link-item" href="/project/bylaws">Bylaws</a></li><li class="footer__item"><a href="https://apache.org/licenses" target="_blank" rel="noopener noreferrer" class="footer__link-item">License<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a class="footer__link-item" href="/project/privacy">Privacy policy</a></li><li class="footer__item"><a href="https://www.apache.org/foundation/sponsorship.html" target="_blank" rel="noopener noreferrer" class="footer__link-item">Sponsorship<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a href="https://www.apache.org/foundation/thanks.html" target="_blank" rel="noopener noreferrer" class="footer__link-item">Thanks<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div></div><div class="footer__bottom text--center"><div class="footer__copyright"><footer class="footer">
         <div class="container">
           <div class="content has-text-centered">
@@ -23,7 +23,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/bps/BP-43-gradle-migration/index.html b/content/bps/BP-43-gradle-migration/index.html
index 78b3d92..76e118c 100644
--- a/content/bps/BP-43-gradle-migration/index.html
+++ b/content/bps/BP-43-gradle-migration/index.html
@@ -4,12 +4,12 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">BP-43: Gradle migration | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/bps/BP-43-gradle-migration"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docusaurus_tag" content="default"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docsearch:docusaurus_tag" content="default"><meta data-rh="true" property="og:title" content="BP-43: Gradle migration | Apache BookKeeper"><meta data-rh="true" name="description" content="Motivation"><meta data-rh="true" property="og:description" content="Motivation"><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/bps/BP-43-gradle-migration"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/bps/BP-43-gradle-migration" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/bps/BP-43-gradle-migration" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
-<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navbar__brand" href="/"><div class="navbar__logo"><img src="/img/bk-logo.svg" alt="Apache Bookkeeper" class="themedImage_ToTc themedImage--light_HNdA"><img src="/img/bk-logo.svg" alt="Apache Bookkeeper" class="themedImage_ToTc themedImage--dark_i4oU"></div><b class="navbar__title text--truncate">Apache BookKeeper</b></a><a class="navbar__item navbar__link" href="/docs/overview/">Documentation</a><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Community</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/community/mailing-lists">Mailing lists</a></li><li><a class="dropdown__link" href="/community/slack">Slack</a></li><li><a href="https://github.com/apache/bookkeeper/issues" target="_blank" rel="noopener noreferrer" class="dropdown__link">Github issues<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a class="dropdown__link" href="/community/releases">Release management</a></li><li><a class="dropdown__link" href="/community/meeting">Community meetings</a></li><li><a class="dropdown__link" href="/community/contributing">Contribution guide</a></li><li><a class="dropdown__link" href="/community/coding-guide">Coding guide</a></li><li><a class="dropdown__link" href="/community/testing">Testing guide</a></li><li><a class="dropdown__link" href="/community/issue-report">Issue report guide</a></li><li><a class="dropdown__link" href="/community/release-guide">Release guide</a></li><li><a class="dropdown__link" href="/community/presentations">Presentations</a></li><li><a class="dropdown__link" href="/community/bookkeeper-proposals">BookKeeper proposals (BP)</a></li></ul></div><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Project</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/project/who">Who are we?</a></li><li><a class="dropdown__link" href="/project/bylaws">Bylaws</a></li><li><a href="https://apache.org/licenses" target="_blank" rel="noopener noreferrer" class="dropdown__link">License<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a class="dropdown__link" href="/project/privacy">Privacy policy</a></li><li><a href="https://www.apache.org/foundation/sponsorship.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Sponsorship<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a href="https://www.apache.org/foundation/thanks.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Thanks<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div></div><div class="navbar__items navbar__items--right"><div class="navbar__item dropdown dropdown--hoverable dropdown--right"><a class="navbar__link" aria-haspopup="true" aria-expanded="false" role="button" href="/docs/admin/autorecovery">4.17.0</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/docs/next/overview/">Next</a></li><li><a class="dropdown__link" href="/docs/admin/autorecovery">4.17.0</a></li><li><a class="dropdown__link" href="/docs/4.16.5/overview/">4.16.5</a></li><li><a class="dropdown__link" href="/docs/4.15.5/overview/">4.15.5</a></li><li><a class="dropdown__link" href="/docs/4.14.8/overview/">4.14.8</a></li><li><a class="dropdown__link" href="/docs/4.13.0/overview/">4.13.0</a></li><li><a class="dropdown__link" href="/docs/4.12.1/overview/">4.12.1</a></li><li><a class="dropdown__link" href="/docs/4.11.1/overview/">4.11.1</a></li><li><a class="dropdown__link" href="/docs/4.10.0/overview/">4.10.0</a></li><li><a class="dropdown__link" href="/docs/4.9.2/overview/">4.9.2</a></li><li><a class="dropdown__link" href="/docs/4.8.2/overview/">4.8.2</a></li><li><a class="dropdown__link" href="/docs/4.7.3/overview/">4.7.3</a></li><li><a class="dropdown__link" href="/docs/4.6.2/overview/">4.6.2</a></li><li><a class="dropdown__link" href="/docs/4.5.1/overview/">4.5.1</a></li></ul></div><a class="navbar__item navbar__link" href="/releases">Download</a><div class="toggle_vylO colorModeToggle_DEke"><button class="clean-btn toggleButton_gllP toggleButtonDisabled_aARS" type="button" disabled="" title="Switch between dark and light mode (currently light mode)" aria-label="Switch between dark and light mode (currently light mode)" aria-live="polite"><svg viewBox="0 0 24 24" width="24" height="24" class="lightToggleIcon_pyhR"><path fill="currentColor" d="M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"></path></svg><svg viewBox="0 0 24 24" width="24" height="24" class="darkToggleIcon_wfgR"><path fill="currentColor" d="M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"></path></svg></button></div><div class="searchBox_ZlJk"></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div></nav><div id="docusaurus_skipToContent_fallback" class="main-wrapper mainWrapper_z2l0"><main class="container container--fluid margin-vert--lg"><div class="row mdxPageWrapper_j9I6"><div class="col col--8"><article><h1>BP-43: Gradle migration</h1><h3 class="anchor anchorWithStickyNavbar_LWe7" id="motivation">Motivation<a href="#motivation" class="hash-link" aria-label="Direct link to Motivation" title="Direct link to Motivation">​</a></h3><ul><li>Current maven based build system is very slow. It takes about 4m30 to execute
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navbar__brand" href="/"><div class="navbar__logo"><img src="/img/bk-logo.svg" alt="Apache Bookkeeper" class="themedImage_ToTc themedImage--light_HNdA"><img src="/img/bk-logo.svg" alt="Apache Bookkeeper" class="themedImage_ToTc themedImage--dark_i4oU"></div><b class="navbar__title text--truncate">Apache BookKeeper</b></a><a class="navbar__item navbar__link" href="/docs/overview/">Documentation</a><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Community</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/community/mailing-lists">Mailing lists</a></li><li><a class="dropdown__link" href="/community/slack">Slack</a></li><li><a href="https://github.com/apache/bookkeeper/issues" target="_blank" rel="noopener noreferrer" class="dropdown__link">Github issues<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a class="dropdown__link" href="/community/releases">Release management</a></li><li><a class="dropdown__link" href="/community/meeting">Community meetings</a></li><li><a class="dropdown__link" href="/community/contributing">Contribution guide</a></li><li><a class="dropdown__link" href="/community/coding-guide">Coding guide</a></li><li><a class="dropdown__link" href="/community/testing">Testing guide</a></li><li><a class="dropdown__link" href="/community/issue-report">Issue report guide</a></li><li><a class="dropdown__link" href="/community/release-guide">Release guide</a></li><li><a class="dropdown__link" href="/community/presentations">Presentations</a></li><li><a class="dropdown__link" href="/community/bookkeeper-proposals">BookKeeper proposals (BP)</a></li></ul></div><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Project</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/project/who">Who are we?</a></li><li><a class="dropdown__link" href="/project/bylaws">Bylaws</a></li><li><a href="https://apache.org/licenses" target="_blank" rel="noopener noreferrer" class="dropdown__link">License<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a class="dropdown__link" href="/project/privacy">Privacy policy</a></li><li><a href="https://www.apache.org/foundation/sponsorship.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Sponsorship<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a href="https://www.apache.org/foundation/thanks.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Thanks<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div></div><div class="navbar__items navbar__items--right"><div class="navbar__item dropdown dropdown--hoverable dropdown--right"><a class="navbar__link" aria-haspopup="true" aria-expanded="false" role="button" href="/docs/overview/">4.17.0</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/docs/next/overview/">Next</a></li><li><a class="dropdown__link" href="/docs/overview/">4.17.0</a></li><li><a class="dropdown__link" href="/docs/4.16.5/overview/">4.16.5</a></li><li><a class="dropdown__link" href="/docs/4.15.5/overview/">4.15.5</a></li><li><a class="dropdown__link" href="/docs/4.14.8/overview/">4.14.8</a></li><li><a class="dropdown__link" href="/docs/4.13.0/overview/">4.13.0</a></li><li><a class="dropdown__link" href="/docs/4.12.1/overview/">4.12.1</a></li><li><a class="dropdown__link" href="/docs/4.11.1/overview/">4.11.1</a></li><li><a class="dropdown__link" href="/docs/4.10.0/overview/">4.10.0</a></li><li><a class="dropdown__link" href="/docs/4.9.2/overview/">4.9.2</a></li><li><a class="dropdown__link" href="/docs/4.8.2/overview/">4.8.2</a></li><li><a class="dropdown__link" href="/docs/4.7.3/overview/">4.7.3</a></li><li><a class="dropdown__link" href="/docs/4.6.2/overview/">4.6.2</a></li><li><a class="dropdown__link" href="/docs/4.5.1/overview/">4.5.1</a></li></ul></div><a class="navbar__item navbar__link" href="/releases">Download</a><div class="toggle_vylO colorModeToggle_DEke"><button class="clean-btn toggleButton_gllP toggleButtonDisabled_aARS" type="button" disabled="" title="Switch between dark and light mode (currently light mode)" aria-label="Switch between dark and light mode (currently light mode)" aria-live="polite"><svg viewBox="0 0 24 24" width="24" height="24" class="lightToggleIcon_pyhR"><path fill="currentColor" d="M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"></path></svg><svg viewBox="0 0 24 24" width="24" height="24" class="darkToggleIcon_wfgR"><path fill="currentColor" d="M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"></path></svg></button></div><div class="searchBox_ZlJk"></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div></nav><div id="docusaurus_skipToContent_fallback" class="main-wrapper mainWrapper_z2l0"><main class="container container--fluid margin-vert--lg"><div class="row mdxPageWrapper_j9I6"><div class="col col--8"><article><h1>BP-43: Gradle migration</h1><h3 class="anchor anchorWithStickyNavbar_LWe7" id="motivation">Motivation<a href="#motivation" class="hash-link" aria-label="Direct link to Motivation" title="Direct link to Motivation">​</a></h3><ul><li>Current maven based build system is very slow. It takes about 4m30 to execute
 mvn clean package -DskipTests while a gradle counterpart
 <code>./gradlew clean jar</code> completes in 40 seconds on the same hardware. Using the gradle build cache.</li><li>Incremental build- Gradle provides better incremental build support. Subsequent builds run in very little time.</li><li>Caching of tests execution - Gradle build cache also keeps track of test successes with respect to the dependencies and can do test retries of just what has failed.</li><li>Better handling of multi module projects - Bookkeeper is a multi module project where bookkeeper-server module for an example depends on following modules <ul><li>bookkeeper-stats</li><li>cpu-affinity</li><li>bookkeeper-common</li><li>bookkeeper-common-allocator</li><li>bookkeeper-http:http-server</li><li>bookkeeper-proto</li><li>circe-checksum</li><li>bookkeeper-tools-framework</li></ul>If change is made on any of the above mentioned dependent modules, building module <code>bookkeeper-server</code> will pick up those changes.
 While in case of maven changed modules had to be built explicitly in order for the changes to be picked up.
@@ -33,7 +33,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/bps/BP-44-use-metrics/index.html b/content/bps/BP-44-use-metrics/index.html
index 61027ea..91fe53b 100644
--- a/content/bps/BP-44-use-metrics/index.html
+++ b/content/bps/BP-44-use-metrics/index.html
@@ -4,12 +4,12 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">BP-44: USE metrics | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/bps/BP-44-use-metrics"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docusaurus_tag" content="default"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docsearch:docusaurus_tag" content="default"><meta data-rh="true" property="og:title" content="BP-44: USE metrics | Apache BookKeeper"><meta data-rh="true" name="description" content="Motivation"><meta data-rh="true" property="og:description" content="Motivation"><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/bps/BP-44-use-metrics"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/bps/BP-44-use-metrics" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/bps/BP-44-use-metrics" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
-<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navbar__brand" href="/"><div class="navbar__logo"><img src="/img/bk-logo.svg" alt="Apache Bookkeeper" class="themedImage_ToTc themedImage--light_HNdA"><img src="/img/bk-logo.svg" alt="Apache Bookkeeper" class="themedImage_ToTc themedImage--dark_i4oU"></div><b class="navbar__title text--truncate">Apache BookKeeper</b></a><a class="navbar__item navbar__link" href="/docs/overview/">Documentation</a><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Community</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/community/mailing-lists">Mailing lists</a></li><li><a class="dropdown__link" href="/community/slack">Slack</a></li><li><a href="https://github.com/apache/bookkeeper/issues" target="_blank" rel="noopener noreferrer" class="dropdown__link">Github issues<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a class="dropdown__link" href="/community/releases">Release management</a></li><li><a class="dropdown__link" href="/community/meeting">Community meetings</a></li><li><a class="dropdown__link" href="/community/contributing">Contribution guide</a></li><li><a class="dropdown__link" href="/community/coding-guide">Coding guide</a></li><li><a class="dropdown__link" href="/community/testing">Testing guide</a></li><li><a class="dropdown__link" href="/community/issue-report">Issue report guide</a></li><li><a class="dropdown__link" href="/community/release-guide">Release guide</a></li><li><a class="dropdown__link" href="/community/presentations">Presentations</a></li><li><a class="dropdown__link" href="/community/bookkeeper-proposals">BookKeeper proposals (BP)</a></li></ul></div><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Project</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/project/who">Who are we?</a></li><li><a class="dropdown__link" href="/project/bylaws">Bylaws</a></li><li><a href="https://apache.org/licenses" target="_blank" rel="noopener noreferrer" class="dropdown__link">License<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a class="dropdown__link" href="/project/privacy">Privacy policy</a></li><li><a href="https://www.apache.org/foundation/sponsorship.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Sponsorship<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a href="https://www.apache.org/foundation/thanks.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Thanks<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div></div><div class="navbar__items navbar__items--right"><div class="navbar__item dropdown dropdown--hoverable dropdown--right"><a class="navbar__link" aria-haspopup="true" aria-expanded="false" role="button" href="/docs/admin/autorecovery">4.17.0</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/docs/next/overview/">Next</a></li><li><a class="dropdown__link" href="/docs/admin/autorecovery">4.17.0</a></li><li><a class="dropdown__link" href="/docs/4.16.5/overview/">4.16.5</a></li><li><a class="dropdown__link" href="/docs/4.15.5/overview/">4.15.5</a></li><li><a class="dropdown__link" href="/docs/4.14.8/overview/">4.14.8</a></li><li><a class="dropdown__link" href="/docs/4.13.0/overview/">4.13.0</a></li><li><a class="dropdown__link" href="/docs/4.12.1/overview/">4.12.1</a></li><li><a class="dropdown__link" href="/docs/4.11.1/overview/">4.11.1</a></li><li><a class="dropdown__link" href="/docs/4.10.0/overview/">4.10.0</a></li><li><a class="dropdown__link" href="/docs/4.9.2/overview/">4.9.2</a></li><li><a class="dropdown__link" href="/docs/4.8.2/overview/">4.8.2</a></li><li><a class="dropdown__link" href="/docs/4.7.3/overview/">4.7.3</a></li><li><a class="dropdown__link" href="/docs/4.6.2/overview/">4.6.2</a></li><li><a class="dropdown__link" href="/docs/4.5.1/overview/">4.5.1</a></li></ul></div><a class="navbar__item navbar__link" href="/releases">Download</a><div class="toggle_vylO colorModeToggle_DEke"><button class="clean-btn toggleButton_gllP toggleButtonDisabled_aARS" type="button" disabled="" title="Switch between dark and light mode (currently light mode)" aria-label="Switch between dark and light mode (currently light mode)" aria-live="polite"><svg viewBox="0 0 24 24" width="24" height="24" class="lightToggleIcon_pyhR"><path fill="currentColor" d="M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"></path></svg><svg viewBox="0 0 24 24" width="24" height="24" class="darkToggleIcon_wfgR"><path fill="currentColor" d="M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"></path></svg></button></div><div class="searchBox_ZlJk"></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div></nav><div id="docusaurus_skipToContent_fallback" class="main-wrapper mainWrapper_z2l0"><main class="container container--fluid margin-vert--lg"><div class="row mdxPageWrapper_j9I6"><div class="col col--8"><article><h1>BP-44: USE metrics</h1><h3 class="anchor anchorWithStickyNavbar_LWe7" id="motivation">Motivation<a href="#motivation" class="hash-link" aria-label="Direct link to Motivation" title="Direct link to Motivation">​</a></h3><p>Based on our experience (at Splunk) running many BookKeeper clusters in production, from very small to very large deployments (in terms of number of bookies, size of VMs and load) we have identified a number of short-comings with the current BookKeeper metrics that make it harder than it should be to identify bottlenecks in performance. The <a href="https://www.brendangregg.com/usemethod.html" target="_blank" rel="noopener noreferrer">USE method</a> (Utilization, Saturation, Errors) is an effective strategy for diagnosing where bottlenecks in a system lie but the current metrics do not always expose metrics related to utilization and saturation. Also, even if you have a good mental model for how BookKeeper works internally, there are blindspots in the metrics that make it difficult to know what is happening at times.</p><p>Finally, many of the metrics are aggregated, such as journal and DbLedgerStorage. When these components are configured with multiple directories, it is currently not possible to inspect the metrics of only a single journal or DbLedgerStorage instance. One bad volume can be hard to identify.</p><p>This BP proposes a number of improvements to help identify performance issues in production. The objective is for a human operator to rapidly see where a bottleneck exists and where it exists by using utilization and saturation metrics.</p><h4 class="anchor anchorWithStickyNavbar_LWe7" id="utilization">Utilization<a href="#utilization" class="hash-link" aria-label="Direct link to Utilization" title="Direct link to Utilization">​</a></h4><p>Ultimately all work in a bookie is performed by threads. Some operations are performed by only a single thread while others are spread out over multiple threads. Some threads play a core role in the critical path of reads and writes and when fully utilized indicate a bottleneck. We propose that each thread reports the time that it is busy which will allow time utilization to be calculated. Because all file i/o is synchronous, thread utilization is a very close approximation of resource utilization for a bookie. For a thread whose sole role is file i/o, if it is 100% utilized then it can take little to no more work.</p><p>For example, if the Force Write thread is reporting 100% time utilization we’ll know that it has become a bottleneck and to look further into the force write metrics.</p><p>Likewise, some operations are in the critical path that are executed across multiple threads. For example, with DbLedgerStorage, flushes are in the critical path for writes and the work is performed across at least two threads (Sync thread, DbStorage thread). Knowing the time utilization of the Sync Thread and the DbStorage thread is useful, but knowing the time utilization of flushes as a whole (regardless of thread) is even more useful in this particular case. Once flushes are being performed 100% of the time we know that we have a write bottleneck in DbLedgerStorage.</p><p>So utilization metrics of both threads and operations can be extremely useful and often combining the two give even more insight.</p><h4 class="anchor anchorWithStickyNavbar_LWe7" id="saturation">Saturation<a href="#saturation" class="hash-link" aria-label="Direct link to Saturation" title="Direct link to Saturation">​</a></h4><p>Metrics that indicate saturation are things like rejected requests, full queues/caches. We need to ensure that there are no blindspots for saturation metrics.</p><p>Once we start getting saturation indicators we have strong signals of a bottleneck existing. It may be a high level metric (rejected requests) which only tells us we have a problem, or a component level metric (journal queue length) that tells us the locality of a bottleneck. We also need to know things like the queue size bounds in order to detect when a component is fully saturated, so emitting metrics for certain configurations is useful.</p><h4 class="anchor anchorWithStickyNavbar_LWe7" id="component-and-thread-labels">Component and Thread Labels<a href="#component-and-thread-labels" class="hash-link" aria-label="Direct link to Component and Thread Labels" title="Direct link to Component and Thread Labels">​</a></h4><p>Work is parallelized by thread pools and by using multiple directories that allow for multiple journal instances and multiple ledger storage instances. We have seen in production cases where a single bad volume has a large negative impact on BookKeeper performance. Being able to pick apart metrics by the thread and component instance can be extremely helpful in diagnosing issues that only affect one journal/ledger storage instance or a subset of threads.</p><h4 class="anchor anchorWithStickyNavbar_LWe7" id="sub-operation-time">Sub-Operation Time<a href="#sub-operation-time" class="hash-link" aria-label="Direct link to Sub-Operation Time" title="Direct link to Sub-Operation Time">​</a></h4><p>In some cases a single operation can consist of multiple smaller operations. For example, a DbLedgerStorage flush involves flushing two RocksDB instances and entry log files. The only way to currently confirm whether RocksDB has gotten into a bad state is by profiling on the machine/pod.</p><p>Adding extra metrics to cover sub-operations can help to diagnose or rule-out an issue quickly.</p><h4 class="anchor anchorWithStickyNavbar_LWe7" id="read-cache-thrashing">Read Cache Thrashing<a href="#read-cache-thrashing" class="hash-link" aria-label="Direct link to Read Cache Thrashing" title="Direct link to Read Cache Thrashing">​</a></h4><p>Read cache thrashing can have a huge negative impact on bookie performance. We have most of the metrics already for detecting when it happens except for one problem: we don’t report read and write cache hits/misses separately.</p><p>When we separate out cache hits/misses, we can start calculating the actual read cache hit-to-miss rate and compare that to the readahead batch sizes and calculate that the miss rate is too high (indicating thrashing).</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="the-current-state-of-affairs">The Current State of Affairs<a href="#the-current-state-of-affairs" class="hash-link" aria-label="Direct link to The Current State of Affairs" title="Direct link to The Current State of Affairs">​</a></h3><h4 class="anchor anchorWithStickyNavbar_LWe7" id="utilization-1">Utilization<a href="#utilization-1" class="hash-link" aria-label="Direct link to Utilization" title="Direct link to Utilization">​</a></h4><p>The OpsStatsLogger gives us visibility into some time utilization metrics by using the “_sum” suffix metric for latency based OpStatsLogger metrics. We can’t see the utilization of each thread, just the thread pool as a whole. Knowing the number of threads in the pool allows us to calculate the % time utilization (given that each cluster may have a different size of thread pool this is inconvenient).</p><p>Operations such as journal flushes, journal force writes and DbLedgerStorage already record latencies with OpStatsLoggers which allows us to calculate utilization of IO operations as long as we know the number of journal/ledger storage directories (again, inconvenient).</p><p>Blindspots:</p><ul><li>Write/read/high priority thread pool</li><li>Utilization of each thread</li><li>Journal<ul><li>Drill-down by journal instance</li><li>Utilization of the threads (they do other work such as taking work from queues and placing work on queues)</li></ul></li><li>Ledger Storage<ul><li>Drill-down by ledger storage instance</li><li>Where is time spent on reads? Locations index, read from entry log, readahead?</li><li>Where is time spent on flushes? Ledger index, locations index, entry log files?</li></ul></li></ul><h4 class="anchor anchorWithStickyNavbar_LWe7" id="saturation-1">Saturation<a href="#saturation-1" class="hash-link" aria-label="Direct link to Saturation" title="Direct link to Saturation">​</a></h4><p>There are some existing indicators of saturation, such as the thread pool task queue lengths, journal queue length, force write queue length, DbLedgerStorage rejected writes. But there are some blindspots:</p><ul><li>Requests rejected due to full thread pool task queues are logged as request failures. More helpful is a specific metric for rejected read and write requests</li><li>Queue lengths are in aggregate, need to be able to drill-down by thread/journal/ledger storage instance.</li><li>We don’t have metrics for things like maximum queue/cache sizes so we can’t calculate when a queue or a cache is full.</li><li>Netty can become saturated, tracking the number of unwritable channels, bytes for unwritable can help diagnose Netty saturation</li></ul><h3 class="anchor anchorWithStickyNavbar_LWe7" id="public-interfaces">Public Interfaces<a href="#public-interfaces" class="hash-link" aria-label="Direct link to Public Interfaces" title="Direct link to Public Interfaces">​</a></h3><p>N/A</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="proposed-changes">Proposed Changes<a href="#proposed-changes" class="hash-link" aria-label="Direct link to Proposed Changes" title="Direct link to Proposed Changes">​</a></h3><h4 class="anchor anchorWithStickyNavbar_LWe7" id="thread-scoped-opstatslogger-and-counter">Thread scoped OpStatsLogger and Counter<a href="#thread-scoped-opstatslogger-and-counter" class="hash-link" aria-label="Direct link to Thread scoped OpStatsLogger and Counter" title="Direct link to Thread scoped OpStatsLogger and Counter">​</a></h4><p>Add a new “thread scoped” variant of the OpStatsLogger and the Counter where each adds labels:</p><ul><li>threadPool (or just the thread name for lone threads such as a journal thread)</li><li>thread (the thread ordinal, for example a read thread pool with four threads, they are numbers 0-3)</li></ul><p>The following methods are added to the StatsLogger interface:</p><div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">OpStatsLogger getThreadScopedOpStatsLogger(String name)</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">Counter getThreadScopedCounter(String name)</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>The OpStatsLogger and Counter interfaces remain unchanged.</p><p>For each thread that mutates a thread scoped OpStatsLogger, internally it will end up registering one OpStatsLogger per thread. For example, with four read threads, then the following metrics for successful task executions would be created:</p><div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">bookkeeper_server_BookieReadThreadPool_task_execution_sum{success=&quot;true&quot;, thread=&quot;0&quot;, threadPool=&quot;BookieReadThreadPool&quot;}</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">bookkeeper_server_BookieReadThreadPool_task_execution_sum{success=&quot;true&quot;, thread=&quot;1&quot;, threadPool=&quot;BookieReadThreadPool&quot;}</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">bookkeeper_server_BookieReadThreadPool_task_execution_sum{success=&quot;true&quot;, thread=&quot;2&quot;, threadPool=&quot;BookieReadThreadPool&quot;}</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">bookkeeper_server_BookieReadThreadPool_task_execution_sum{success=&quot;true&quot;, thread=&quot;3&quot;, threadPool=&quot;BookieReadThreadPool&quot;}</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>In order for thread scoped metrics to know which thread pool and thread ordinal the metrics of each thread should be labelled with, a thread registry is maintained. After each thread is started, the first work it performs is registering itself with a thread registry object that maps thread id -&gt; {threadPool, thread}. In some cases this work can be performed outside of the thread itself, such as in a thread factory.</p><p>Each thread scoped metric registers per-thread metrics lazily. For example, when a thread scoped counter is incremented by a given thread, the first time that occurs on that given thread the thread labels are retrieved from the thread registry and a counter for that thread is created with the right labels and registered with the provider. In the case that the calling thread is unregistered, a default metric is used. Per thread OpStatsLoggers/Counters are not visible externally and are stored inside the thread scoped metric using a thread-local variable.</p><p>With these new variants, we can now replace calls to <code>getCounter</code> with <code>getThreadScopedCounter</code> and <code>getOpsStatsLogger</code> with <code>getThreadScopedOpsStatsLogger</code> for the metrics where we want to be able to drill down by thread pool and thread.</p><h4 class="anchor anchorWithStickyNavbar_LWe7" id="how-to-report-time-spent-for-utilization-calculation">How to Report Time Spent (For utilization calculation)<a href="#how-to-report-time-spent-for-utilization-calculation" class="hash-link" aria-label="Direct link to How to Report Time Spent (For utilization calculation)" title="Direct link to How to Report Time Spent (For utilization calculation)">​</a></h4><p>We want to be able to report time spent by each thread as a whole, but also on operations and sub-operations. The simplest way to do this is simply measure elapsed time by taking a System.nanoTime() before the work and then logging the elapsed time via an OpStatsLogger or a Counter.</p><p>One challenge regarding this simple method is when operations take a long time, like a journal fsync or a ledger flush on a heavily overloaded bookie. Long execution times can cause per second calculations to go to 0 then to spike to very high levels (above 100% utilization). This can be mitigated by using larger windows (like 1 minute windows rather than 1 second windows) and heavily loaded systems don’t tend to fluctuate too much from second to second.</p><h5 class="anchor anchorWithStickyNavbar_LWe7" id="discarded-time-measurement-alternatives">Discarded time measurement alternatives:<a href="#discarded-time-measurement-alternatives" class="hash-link" aria-label="Direct link to Discarded time measurement alternatives:" title="Direct link to Discarded time measurement alternatives:">​</a></h5><p>Use a sampling technique: too costly and complex.
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navbar__brand" href="/"><div class="navbar__logo"><img src="/img/bk-logo.svg" alt="Apache Bookkeeper" class="themedImage_ToTc themedImage--light_HNdA"><img src="/img/bk-logo.svg" alt="Apache Bookkeeper" class="themedImage_ToTc themedImage--dark_i4oU"></div><b class="navbar__title text--truncate">Apache BookKeeper</b></a><a class="navbar__item navbar__link" href="/docs/overview/">Documentation</a><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Community</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/community/mailing-lists">Mailing lists</a></li><li><a class="dropdown__link" href="/community/slack">Slack</a></li><li><a href="https://github.com/apache/bookkeeper/issues" target="_blank" rel="noopener noreferrer" class="dropdown__link">Github issues<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a class="dropdown__link" href="/community/releases">Release management</a></li><li><a class="dropdown__link" href="/community/meeting">Community meetings</a></li><li><a class="dropdown__link" href="/community/contributing">Contribution guide</a></li><li><a class="dropdown__link" href="/community/coding-guide">Coding guide</a></li><li><a class="dropdown__link" href="/community/testing">Testing guide</a></li><li><a class="dropdown__link" href="/community/issue-report">Issue report guide</a></li><li><a class="dropdown__link" href="/community/release-guide">Release guide</a></li><li><a class="dropdown__link" href="/community/presentations">Presentations</a></li><li><a class="dropdown__link" href="/community/bookkeeper-proposals">BookKeeper proposals (BP)</a></li></ul></div><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Project</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/project/who">Who are we?</a></li><li><a class="dropdown__link" href="/project/bylaws">Bylaws</a></li><li><a href="https://apache.org/licenses" target="_blank" rel="noopener noreferrer" class="dropdown__link">License<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a class="dropdown__link" href="/project/privacy">Privacy policy</a></li><li><a href="https://www.apache.org/foundation/sponsorship.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Sponsorship<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a href="https://www.apache.org/foundation/thanks.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Thanks<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div></div><div class="navbar__items navbar__items--right"><div class="navbar__item dropdown dropdown--hoverable dropdown--right"><a class="navbar__link" aria-haspopup="true" aria-expanded="false" role="button" href="/docs/overview/">4.17.0</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/docs/next/overview/">Next</a></li><li><a class="dropdown__link" href="/docs/overview/">4.17.0</a></li><li><a class="dropdown__link" href="/docs/4.16.5/overview/">4.16.5</a></li><li><a class="dropdown__link" href="/docs/4.15.5/overview/">4.15.5</a></li><li><a class="dropdown__link" href="/docs/4.14.8/overview/">4.14.8</a></li><li><a class="dropdown__link" href="/docs/4.13.0/overview/">4.13.0</a></li><li><a class="dropdown__link" href="/docs/4.12.1/overview/">4.12.1</a></li><li><a class="dropdown__link" href="/docs/4.11.1/overview/">4.11.1</a></li><li><a class="dropdown__link" href="/docs/4.10.0/overview/">4.10.0</a></li><li><a class="dropdown__link" href="/docs/4.9.2/overview/">4.9.2</a></li><li><a class="dropdown__link" href="/docs/4.8.2/overview/">4.8.2</a></li><li><a class="dropdown__link" href="/docs/4.7.3/overview/">4.7.3</a></li><li><a class="dropdown__link" href="/docs/4.6.2/overview/">4.6.2</a></li><li><a class="dropdown__link" href="/docs/4.5.1/overview/">4.5.1</a></li></ul></div><a class="navbar__item navbar__link" href="/releases">Download</a><div class="toggle_vylO colorModeToggle_DEke"><button class="clean-btn toggleButton_gllP toggleButtonDisabled_aARS" type="button" disabled="" title="Switch between dark and light mode (currently light mode)" aria-label="Switch between dark and light mode (currently light mode)" aria-live="polite"><svg viewBox="0 0 24 24" width="24" height="24" class="lightToggleIcon_pyhR"><path fill="currentColor" d="M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"></path></svg><svg viewBox="0 0 24 24" width="24" height="24" class="darkToggleIcon_wfgR"><path fill="currentColor" d="M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"></path></svg></button></div><div class="searchBox_ZlJk"></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div></nav><div id="docusaurus_skipToContent_fallback" class="main-wrapper mainWrapper_z2l0"><main class="container container--fluid margin-vert--lg"><div class="row mdxPageWrapper_j9I6"><div class="col col--8"><article><h1>BP-44: USE metrics</h1><h3 class="anchor anchorWithStickyNavbar_LWe7" id="motivation">Motivation<a href="#motivation" class="hash-link" aria-label="Direct link to Motivation" title="Direct link to Motivation">​</a></h3><p>Based on our experience (at Splunk) running many BookKeeper clusters in production, from very small to very large deployments (in terms of number of bookies, size of VMs and load) we have identified a number of short-comings with the current BookKeeper metrics that make it harder than it should be to identify bottlenecks in performance. The <a href="https://www.brendangregg.com/usemethod.html" target="_blank" rel="noopener noreferrer">USE method</a> (Utilization, Saturation, Errors) is an effective strategy for diagnosing where bottlenecks in a system lie but the current metrics do not always expose metrics related to utilization and saturation. Also, even if you have a good mental model for how BookKeeper works internally, there are blindspots in the metrics that make it difficult to know what is happening at times.</p><p>Finally, many of the metrics are aggregated, such as journal and DbLedgerStorage. When these components are configured with multiple directories, it is currently not possible to inspect the metrics of only a single journal or DbLedgerStorage instance. One bad volume can be hard to identify.</p><p>This BP proposes a number of improvements to help identify performance issues in production. The objective is for a human operator to rapidly see where a bottleneck exists and where it exists by using utilization and saturation metrics.</p><h4 class="anchor anchorWithStickyNavbar_LWe7" id="utilization">Utilization<a href="#utilization" class="hash-link" aria-label="Direct link to Utilization" title="Direct link to Utilization">​</a></h4><p>Ultimately all work in a bookie is performed by threads. Some operations are performed by only a single thread while others are spread out over multiple threads. Some threads play a core role in the critical path of reads and writes and when fully utilized indicate a bottleneck. We propose that each thread reports the time that it is busy which will allow time utilization to be calculated. Because all file i/o is synchronous, thread utilization is a very close approximation of resource utilization for a bookie. For a thread whose sole role is file i/o, if it is 100% utilized then it can take little to no more work.</p><p>For example, if the Force Write thread is reporting 100% time utilization we’ll know that it has become a bottleneck and to look further into the force write metrics.</p><p>Likewise, some operations are in the critical path that are executed across multiple threads. For example, with DbLedgerStorage, flushes are in the critical path for writes and the work is performed across at least two threads (Sync thread, DbStorage thread). Knowing the time utilization of the Sync Thread and the DbStorage thread is useful, but knowing the time utilization of flushes as a whole (regardless of thread) is even more useful in this particular case. Once flushes are being performed 100% of the time we know that we have a write bottleneck in DbLedgerStorage.</p><p>So utilization metrics of both threads and operations can be extremely useful and often combining the two give even more insight.</p><h4 class="anchor anchorWithStickyNavbar_LWe7" id="saturation">Saturation<a href="#saturation" class="hash-link" aria-label="Direct link to Saturation" title="Direct link to Saturation">​</a></h4><p>Metrics that indicate saturation are things like rejected requests, full queues/caches. We need to ensure that there are no blindspots for saturation metrics.</p><p>Once we start getting saturation indicators we have strong signals of a bottleneck existing. It may be a high level metric (rejected requests) which only tells us we have a problem, or a component level metric (journal queue length) that tells us the locality of a bottleneck. We also need to know things like the queue size bounds in order to detect when a component is fully saturated, so emitting metrics for certain configurations is useful.</p><h4 class="anchor anchorWithStickyNavbar_LWe7" id="component-and-thread-labels">Component and Thread Labels<a href="#component-and-thread-labels" class="hash-link" aria-label="Direct link to Component and Thread Labels" title="Direct link to Component and Thread Labels">​</a></h4><p>Work is parallelized by thread pools and by using multiple directories that allow for multiple journal instances and multiple ledger storage instances. We have seen in production cases where a single bad volume has a large negative impact on BookKeeper performance. Being able to pick apart metrics by the thread and component instance can be extremely helpful in diagnosing issues that only affect one journal/ledger storage instance or a subset of threads.</p><h4 class="anchor anchorWithStickyNavbar_LWe7" id="sub-operation-time">Sub-Operation Time<a href="#sub-operation-time" class="hash-link" aria-label="Direct link to Sub-Operation Time" title="Direct link to Sub-Operation Time">​</a></h4><p>In some cases a single operation can consist of multiple smaller operations. For example, a DbLedgerStorage flush involves flushing two RocksDB instances and entry log files. The only way to currently confirm whether RocksDB has gotten into a bad state is by profiling on the machine/pod.</p><p>Adding extra metrics to cover sub-operations can help to diagnose or rule-out an issue quickly.</p><h4 class="anchor anchorWithStickyNavbar_LWe7" id="read-cache-thrashing">Read Cache Thrashing<a href="#read-cache-thrashing" class="hash-link" aria-label="Direct link to Read Cache Thrashing" title="Direct link to Read Cache Thrashing">​</a></h4><p>Read cache thrashing can have a huge negative impact on bookie performance. We have most of the metrics already for detecting when it happens except for one problem: we don’t report read and write cache hits/misses separately.</p><p>When we separate out cache hits/misses, we can start calculating the actual read cache hit-to-miss rate and compare that to the readahead batch sizes and calculate that the miss rate is too high (indicating thrashing).</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="the-current-state-of-affairs">The Current State of Affairs<a href="#the-current-state-of-affairs" class="hash-link" aria-label="Direct link to The Current State of Affairs" title="Direct link to The Current State of Affairs">​</a></h3><h4 class="anchor anchorWithStickyNavbar_LWe7" id="utilization-1">Utilization<a href="#utilization-1" class="hash-link" aria-label="Direct link to Utilization" title="Direct link to Utilization">​</a></h4><p>The OpsStatsLogger gives us visibility into some time utilization metrics by using the “_sum” suffix metric for latency based OpStatsLogger metrics. We can’t see the utilization of each thread, just the thread pool as a whole. Knowing the number of threads in the pool allows us to calculate the % time utilization (given that each cluster may have a different size of thread pool this is inconvenient).</p><p>Operations such as journal flushes, journal force writes and DbLedgerStorage already record latencies with OpStatsLoggers which allows us to calculate utilization of IO operations as long as we know the number of journal/ledger storage directories (again, inconvenient).</p><p>Blindspots:</p><ul><li>Write/read/high priority thread pool</li><li>Utilization of each thread</li><li>Journal<ul><li>Drill-down by journal instance</li><li>Utilization of the threads (they do other work such as taking work from queues and placing work on queues)</li></ul></li><li>Ledger Storage<ul><li>Drill-down by ledger storage instance</li><li>Where is time spent on reads? Locations index, read from entry log, readahead?</li><li>Where is time spent on flushes? Ledger index, locations index, entry log files?</li></ul></li></ul><h4 class="anchor anchorWithStickyNavbar_LWe7" id="saturation-1">Saturation<a href="#saturation-1" class="hash-link" aria-label="Direct link to Saturation" title="Direct link to Saturation">​</a></h4><p>There are some existing indicators of saturation, such as the thread pool task queue lengths, journal queue length, force write queue length, DbLedgerStorage rejected writes. But there are some blindspots:</p><ul><li>Requests rejected due to full thread pool task queues are logged as request failures. More helpful is a specific metric for rejected read and write requests</li><li>Queue lengths are in aggregate, need to be able to drill-down by thread/journal/ledger storage instance.</li><li>We don’t have metrics for things like maximum queue/cache sizes so we can’t calculate when a queue or a cache is full.</li><li>Netty can become saturated, tracking the number of unwritable channels, bytes for unwritable can help diagnose Netty saturation</li></ul><h3 class="anchor anchorWithStickyNavbar_LWe7" id="public-interfaces">Public Interfaces<a href="#public-interfaces" class="hash-link" aria-label="Direct link to Public Interfaces" title="Direct link to Public Interfaces">​</a></h3><p>N/A</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="proposed-changes">Proposed Changes<a href="#proposed-changes" class="hash-link" aria-label="Direct link to Proposed Changes" title="Direct link to Proposed Changes">​</a></h3><h4 class="anchor anchorWithStickyNavbar_LWe7" id="thread-scoped-opstatslogger-and-counter">Thread scoped OpStatsLogger and Counter<a href="#thread-scoped-opstatslogger-and-counter" class="hash-link" aria-label="Direct link to Thread scoped OpStatsLogger and Counter" title="Direct link to Thread scoped OpStatsLogger and Counter">​</a></h4><p>Add a new “thread scoped” variant of the OpStatsLogger and the Counter where each adds labels:</p><ul><li>threadPool (or just the thread name for lone threads such as a journal thread)</li><li>thread (the thread ordinal, for example a read thread pool with four threads, they are numbers 0-3)</li></ul><p>The following methods are added to the StatsLogger interface:</p><div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">OpStatsLogger getThreadScopedOpStatsLogger(String name)</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">Counter getThreadScopedCounter(String name)</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>The OpStatsLogger and Counter interfaces remain unchanged.</p><p>For each thread that mutates a thread scoped OpStatsLogger, internally it will end up registering one OpStatsLogger per thread. For example, with four read threads, then the following metrics for successful task executions would be created:</p><div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">bookkeeper_server_BookieReadThreadPool_task_execution_sum{success=&quot;true&quot;, thread=&quot;0&quot;, threadPool=&quot;BookieReadThreadPool&quot;}</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">bookkeeper_server_BookieReadThreadPool_task_execution_sum{success=&quot;true&quot;, thread=&quot;1&quot;, threadPool=&quot;BookieReadThreadPool&quot;}</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">bookkeeper_server_BookieReadThreadPool_task_execution_sum{success=&quot;true&quot;, thread=&quot;2&quot;, threadPool=&quot;BookieReadThreadPool&quot;}</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">bookkeeper_server_BookieReadThreadPool_task_execution_sum{success=&quot;true&quot;, thread=&quot;3&quot;, threadPool=&quot;BookieReadThreadPool&quot;}</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>In order for thread scoped metrics to know which thread pool and thread ordinal the metrics of each thread should be labelled with, a thread registry is maintained. After each thread is started, the first work it performs is registering itself with a thread registry object that maps thread id -&gt; {threadPool, thread}. In some cases this work can be performed outside of the thread itself, such as in a thread factory.</p><p>Each thread scoped metric registers per-thread metrics lazily. For example, when a thread scoped counter is incremented by a given thread, the first time that occurs on that given thread the thread labels are retrieved from the thread registry and a counter for that thread is created with the right labels and registered with the provider. In the case that the calling thread is unregistered, a default metric is used. Per thread OpStatsLoggers/Counters are not visible externally and are stored inside the thread scoped metric using a thread-local variable.</p><p>With these new variants, we can now replace calls to <code>getCounter</code> with <code>getThreadScopedCounter</code> and <code>getOpsStatsLogger</code> with <code>getThreadScopedOpsStatsLogger</code> for the metrics where we want to be able to drill down by thread pool and thread.</p><h4 class="anchor anchorWithStickyNavbar_LWe7" id="how-to-report-time-spent-for-utilization-calculation">How to Report Time Spent (For utilization calculation)<a href="#how-to-report-time-spent-for-utilization-calculation" class="hash-link" aria-label="Direct link to How to Report Time Spent (For utilization calculation)" title="Direct link to How to Report Time Spent (For utilization calculation)">​</a></h4><p>We want to be able to report time spent by each thread as a whole, but also on operations and sub-operations. The simplest way to do this is simply measure elapsed time by taking a System.nanoTime() before the work and then logging the elapsed time via an OpStatsLogger or a Counter.</p><p>One challenge regarding this simple method is when operations take a long time, like a journal fsync or a ledger flush on a heavily overloaded bookie. Long execution times can cause per second calculations to go to 0 then to spike to very high levels (above 100% utilization). This can be mitigated by using larger windows (like 1 minute windows rather than 1 second windows) and heavily loaded systems don’t tend to fluctuate too much from second to second.</p><h5 class="anchor anchorWithStickyNavbar_LWe7" id="discarded-time-measurement-alternatives">Discarded time measurement alternatives:<a href="#discarded-time-measurement-alternatives" class="hash-link" aria-label="Direct link to Discarded time measurement alternatives:" title="Direct link to Discarded time measurement alternatives:">​</a></h5><p>Use a sampling technique: too costly and complex.
 Use proc filesystem: not portable, only thread level utilization metrics.</p><h4 class="anchor anchorWithStickyNavbar_LWe7" id="per-component-instance-labels">Per Component Instance labels<a href="#per-component-instance-labels" class="hash-link" aria-label="Direct link to Per Component Instance labels" title="Direct link to Per Component Instance labels">​</a></h4><p>All journal metrics get the additional label of <code>journalIndex</code>.
 All DbLedgerStorage metrics get the additional label of <code>ledgerDir</code>.</p><p>This does not prevent aggregating metrics of the journal or DbLedgerStorage as a whole but does allow for drill-down.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="new-metrics-list">New Metrics List<a href="#new-metrics-list" class="hash-link" aria-label="Direct link to New Metrics List" title="Direct link to New Metrics List">​</a></h3><p>The following new metrics to be added to cover saturation/utilization or blindspots.</p><p>Saturation:</p><ul><li>bookkeeper_server_ADD_ENTRY_REJECTED (thread scoped counter)</li><li>bookkeeper_server_READ_ENTRY_REJECTED (thread scoped counter)</li></ul><p>Thread time utilization:</p><ul><li>bookie_sync_thread_time (thread scoped counter)</li><li>bookie_journal_journal_thread_time  (thread scoped counter, journalIndex label)</li><li>bookie_journal_force_write_thread_time (thread scoped counter, journalIndex label)</li><li>bookie_journal_callback_thread_time (thread scoped counter, journalIndex label)</li><li>bookie_db_storage_thread_time (thread scoped counter, ledgerDir label)</li></ul><p>Operation time spent. Counters for high frequency ops and OpStatsLoggers for less frequent ops:</p><ul><li>bookie_read_locations_index_time (thread scoped counter, ledgerDir label)</li><li>bookie_read_entrylog_time (thread scoped counter, ledgerDir label)</li><li>bookie_readahead_time (thread scoped counter, ledgerDir label)</li><li>bookie_flush_entrylog (thread scoped OpStatsLogger, ledgerDir label)</li><li>bookie_flush_locations_index(thread scoped OpStatsLogger, ledgerDir label)</li><li>bookie_flush_ledger_index(thread scoped OpStatsLogger, ledgerDir label)</li></ul><p>Queue/cache max sizes, number of dirs, thread counts (useful for calculations such as current queue length vs max size and useful for operators to see on dashboards). All gauges based on config values or calculated values such as write cache being 25% of direct memory:</p><ul><li>bookkeeper<em>server</em>&lt;<!-- -->OrderedExecutor name<!-- -->&gt;<!-- -->_threads</li><li>bookkeeper<em>server</em>&lt;<!-- -->OrderedExecutor name<!-- -->&gt;<!-- -->_max_queue_size</li><li>bookie_JOURNAL_DIRS</li><li>bookie_ledger_num_dirs</li><li>bookie_JOURNAL_QUEUE_MAX_SIZE</li><li>bookie_write_cache_max_size</li></ul><p>Other:</p><ul><li>bookie_write_cache_hits (thread scoped counter, ledgerDir label)</li><li>bookie_write_cache_misses (thread scoped counter, ledgerDir label)</li></ul><h4 class="anchor anchorWithStickyNavbar_LWe7" id="breaking-changes">Breaking Changes<a href="#breaking-changes" class="hash-link" aria-label="Direct link to Breaking Changes" title="Direct link to Breaking Changes">​</a></h4><p>Some proposed changes are breaking:</p><ol><li>Remove thread ordinal from OrderedExecutor based metric names and use the label “thread” instead. This makes it easier to work with when using modern observability tooling and inline with the rest of the proposed changes.</li><li>Replace cache hit and cache miss OpStatsLoggers with Counters. OpStatsLoggers are relatively expensive and cost far more CPU cycle than the actual accesses to the caches themselves. Latency for cache hits/misses is extremely low and recording these latencies is not worth the cost. Counters are far cheaper.</li></ol><h3 class="anchor anchorWithStickyNavbar_LWe7" id="compatibility-deprecation-and-migration-plan">Compatibility, Deprecation, and Migration Plan<a href="#compatibility-deprecation-and-migration-plan" class="hash-link" aria-label="Direct link to Compatibility, Deprecation, and Migration Plan" title="Direct link to Compatibility, Deprecation, and Migration Plan">​</a></h3><p>Two changes are breaking and will cause existing dashboards or alerts based on the affected metrics to stop working. The affected release should document this changes in order to warn operators of this impact.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="test-plan">Test Plan<a href="#test-plan" class="hash-link" aria-label="Direct link to Test Plan" title="Direct link to Test Plan">​</a></h3><p>These changes have been tested extensively using various sized deployments (including multi journal and ledger storage configurations) and loads to ensure that the utilization and saturation metrics are accurate and useful.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="rejected-alternatives">Rejected Alternatives<a href="#rejected-alternatives" class="hash-link" aria-label="Direct link to Rejected Alternatives" title="Direct link to Rejected Alternatives">​</a></h3><p>Time reporting alternatives discussed above.</p></article></div><div class="col col--2"><div class="tableOfContents_bqdL thin-scrollbar"><ul class="table-of-contents table-of-contents__left-border"><li><a href="#motivation" class="table-of-contents__link toc-highlight">Motivation</a></li><li><a href="#the-current-state-of-affairs" class="table-of-contents__link toc-highlight">The Current State of Affairs</a></li><li><a href="#public-interfaces" class="table-of-contents__link toc-highlight">Public Interfaces</a></li><li><a href="#proposed-changes" class="table-of-contents__link toc-highlight">Proposed Changes</a></li><li><a href="#new-metrics-list" class="table-of-contents__link toc-highlight">New Metrics List</a></li><li><a href="#compatibility-deprecation-and-migration-plan" class="table-of-contents__link toc-highlight">Compatibility, Deprecation, and Migration Plan</a></li><li><a href="#test-plan" class="table-of-contents__link toc-highlight">Test Plan</a></li><li><a href="#rejected-alternatives" class="table-of-contents__link toc-highlight">Rejected Alternatives</a></li></ul></div></div></div></main></div><footer class="footer footer--dark"><div class="container container-fluid"><div class="row footer__links"><div class="col footer__col"><div class="footer__title">Documentation</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/docs/overview">Overview</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/getting-started/installation">Getting started</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/deployment/manual">Deployment</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/admin/bookies">Administration</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/api/overview">API</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/security/overview">Security</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/development/protocol">Development</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/reference/config">Reference</a></li></ul></div><div class="col footer__col"><div class="footer__title">Community</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/community/mailing-lists">Mailing lists</a></li><li class="footer__item"><a class="footer__link-item" href="/community/slack">Slack</a></li><li class="footer__item"><a href="https://github.com/apache/bookkeeper" target="_blank" rel="noopener noreferrer" class="footer__link-item">Github<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a href="https://twitter.com/asfbookkeeper" target="_blank" rel="noopener noreferrer" class="footer__link-item">Twitter<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div><div class="col footer__col"><div class="footer__title">Project</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/project/who">Who are we?</a></li><li class="footer__item"><a class="footer__link-item" href="/project/bylaws">Bylaws</a></li><li class="footer__item"><a href="https://apache.org/licenses" target="_blank" rel="noopener noreferrer" class="footer__link-item">License<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a class="footer__link-item" href="/project/privacy">Privacy policy</a></li><li class="footer__item"><a href="https://www.apache.org/foundation/sponsorship.html" target="_blank" rel="noopener noreferrer" class="footer__link-item">Sponsorship<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a href="https://www.apache.org/foundation/thanks.html" target="_blank" rel="noopener noreferrer" class="footer__link-item">Thanks<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div></div><div class="footer__bottom text--center"><div class="footer__copyright"><footer class="footer">
         <div class="container">
@@ -24,7 +24,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/bps/BP-46-run-without-journal/index.html b/content/bps/BP-46-run-without-journal/index.html
index 98c61a1..a80e9e0 100644
--- a/content/bps/BP-46-run-without-journal/index.html
+++ b/content/bps/BP-46-run-without-journal/index.html
@@ -4,12 +4,12 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">BP-46: Running without the journal | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/bps/BP-46-run-without-journal"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docusaurus_tag" content="default"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docsearch:docusaurus_tag" content="default"><meta data-rh="true" property="og:title" content="BP-46: Running without the journal | Apache BookKeeper"><meta data-rh="true" name="description" content="Motivation"><meta data-rh="true" property="og:description" content="Motivation"><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/bps/BP-46-run-without-journal"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/bps/BP-46-run-without-journal" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/bps/BP-46-run-without-journal" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
-<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navbar__brand" href="/"><div class="navbar__logo"><img src="/img/bk-logo.svg" alt="Apache Bookkeeper" class="themedImage_ToTc themedImage--light_HNdA"><img src="/img/bk-logo.svg" alt="Apache Bookkeeper" class="themedImage_ToTc themedImage--dark_i4oU"></div><b class="navbar__title text--truncate">Apache BookKeeper</b></a><a class="navbar__item navbar__link" href="/docs/overview/">Documentation</a><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Community</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/community/mailing-lists">Mailing lists</a></li><li><a class="dropdown__link" href="/community/slack">Slack</a></li><li><a href="https://github.com/apache/bookkeeper/issues" target="_blank" rel="noopener noreferrer" class="dropdown__link">Github issues<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a class="dropdown__link" href="/community/releases">Release management</a></li><li><a class="dropdown__link" href="/community/meeting">Community meetings</a></li><li><a class="dropdown__link" href="/community/contributing">Contribution guide</a></li><li><a class="dropdown__link" href="/community/coding-guide">Coding guide</a></li><li><a class="dropdown__link" href="/community/testing">Testing guide</a></li><li><a class="dropdown__link" href="/community/issue-report">Issue report guide</a></li><li><a class="dropdown__link" href="/community/release-guide">Release guide</a></li><li><a class="dropdown__link" href="/community/presentations">Presentations</a></li><li><a class="dropdown__link" href="/community/bookkeeper-proposals">BookKeeper proposals (BP)</a></li></ul></div><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Project</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/project/who">Who are we?</a></li><li><a class="dropdown__link" href="/project/bylaws">Bylaws</a></li><li><a href="https://apache.org/licenses" target="_blank" rel="noopener noreferrer" class="dropdown__link">License<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a class="dropdown__link" href="/project/privacy">Privacy policy</a></li><li><a href="https://www.apache.org/foundation/sponsorship.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Sponsorship<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a href="https://www.apache.org/foundation/thanks.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Thanks<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div></div><div class="navbar__items navbar__items--right"><div class="navbar__item dropdown dropdown--hoverable dropdown--right"><a class="navbar__link" aria-haspopup="true" aria-expanded="false" role="button" href="/docs/admin/autorecovery">4.17.0</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/docs/next/overview/">Next</a></li><li><a class="dropdown__link" href="/docs/admin/autorecovery">4.17.0</a></li><li><a class="dropdown__link" href="/docs/4.16.5/overview/">4.16.5</a></li><li><a class="dropdown__link" href="/docs/4.15.5/overview/">4.15.5</a></li><li><a class="dropdown__link" href="/docs/4.14.8/overview/">4.14.8</a></li><li><a class="dropdown__link" href="/docs/4.13.0/overview/">4.13.0</a></li><li><a class="dropdown__link" href="/docs/4.12.1/overview/">4.12.1</a></li><li><a class="dropdown__link" href="/docs/4.11.1/overview/">4.11.1</a></li><li><a class="dropdown__link" href="/docs/4.10.0/overview/">4.10.0</a></li><li><a class="dropdown__link" href="/docs/4.9.2/overview/">4.9.2</a></li><li><a class="dropdown__link" href="/docs/4.8.2/overview/">4.8.2</a></li><li><a class="dropdown__link" href="/docs/4.7.3/overview/">4.7.3</a></li><li><a class="dropdown__link" href="/docs/4.6.2/overview/">4.6.2</a></li><li><a class="dropdown__link" href="/docs/4.5.1/overview/">4.5.1</a></li></ul></div><a class="navbar__item navbar__link" href="/releases">Download</a><div class="toggle_vylO colorModeToggle_DEke"><button class="clean-btn toggleButton_gllP toggleButtonDisabled_aARS" type="button" disabled="" title="Switch between dark and light mode (currently light mode)" aria-label="Switch between dark and light mode (currently light mode)" aria-live="polite"><svg viewBox="0 0 24 24" width="24" height="24" class="lightToggleIcon_pyhR"><path fill="currentColor" d="M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"></path></svg><svg viewBox="0 0 24 24" width="24" height="24" class="darkToggleIcon_wfgR"><path fill="currentColor" d="M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"></path></svg></button></div><div class="searchBox_ZlJk"></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div></nav><div id="docusaurus_skipToContent_fallback" class="main-wrapper mainWrapper_z2l0"><main class="container container--fluid margin-vert--lg"><div class="row mdxPageWrapper_j9I6"><div class="col col--8"><article><h1>BP-46: Running without the journal</h1><h3 class="anchor anchorWithStickyNavbar_LWe7" id="motivation">Motivation<a href="#motivation" class="hash-link" aria-label="Direct link to Motivation" title="Direct link to Motivation">​</a></h3><p>The journal allows for fast add operations that provide strong data safety guarantees. An add operation is only acked to a client once written to the journal and an fsync performed. This however means that every entry must be written twice: once to the journal and once to an entry log file.</p><p>This double write increases the cost of ownership as more disks must be provisioned to service requests and makes disk provisioning more complex (separating journal from entry log writes onto separate disks). Running without the journal would halve the disk IO required (ignoring indexes) thereby reducing costs and simplifying provisioning.</p><p>However, running without the journal would introduce data consistency problems as the BookKeeper Replication Protocol requires that all writes are persistent for correctness. Running without the journal introduces the possibility of lost writes. In order to continue to offer strong data safety and support running without the journal, changes to the protocol are required.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="a-note-on-response-codes">A note on Response Codes<a href="#a-note-on-response-codes" class="hash-link" aria-label="Direct link to A note on Response Codes" title="Direct link to A note on Response Codes">​</a></h3><p>The following categories are relevant:</p><ul><li>Positive: OK</li><li>Explicit Negative: NoSuchEntry/NoSuchLedger</li><li>Unknown: Any other non-success response that is not an explicit negative.</li></ul><p>For correctness explicit negatives must be treated differently than other errors.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="a-note-on-quorums">A note on Quorums<a href="#a-note-on-quorums" class="hash-link" aria-label="Direct link to A note on Quorums" title="Direct link to A note on Quorums">​</a></h3><p>In order to explain the protocol changes, it is useful to first consider how quorums are used for safety. We have the following relevant quorums:</p><ul><li>Single bookie (S)</li><li>Ack quorum (AQ)</li><li>Write quorum (WQ)</li><li>Quorum Coverage (QC) where QC = (WQ - AQ) + 1</li><li>Ensemble Coverage (EC) where EC = (E - AQ) + 1</li><li>Whole Ensemble</li></ul><p>Quorum Coverage (QC) and Ensemble Coverage (EC) are both defined by the following, only the cohorts differ: </p><ul><li>A given property is satisfied by at least one bookie from every possible ack quorum within the cohort.</li><li>There exists no ack quorum of bookies that do not satisfy the property within the cohort.</li></ul><p>For QC, the cohort is the writeset of a given entry, and therefore QC is only used when we need guarantees regarding a single entry. For EC, the cohort is the ensemble of bookies of the current fragment. EC is required when we need a guarantee across an entire fragment.</p><p>For example:</p><ul><li>For fencing, we need to ensure that no AQ of bookies is unfenced before starting the read/write phase of recovery. This is true once EC successful fencing responses have been received.</li><li>For a recovery read, a read is only negative once we know that no AQ of bookies could exist that might have the entry. Doing otherwise could truncate committed entries from a ledger. A read is negative once NoSuchEntry responses reach QC.</li></ul><p>Different protocol actions require different quorums:</p><ul><li>Add entry: AQ success responses</li><li>Read entry:<ul><li>Positive when positive response from a single bookie</li><li>Negative when explicit negative from all bookies</li><li>Unknown: when at least one unknown and no positive from all bookies</li></ul></li><li>Fencing phase, LAC read (sent to ensemble of current fragment):<ul><li>Complete when EC positive responses</li><li>Unknown (cannot make progress) when AQ unknown responses (fencing LAC reads cannot cause an explicit negative as fencing creates the ledger on the bookie if it doesn’t exist)</li></ul></li><li>Recovery read (sent to writeset of entry):<ul><li>Entry recoverable: AQ positive read responses</li><li>Entry Unrecoverable: QC negative read responses</li><li>Unknown (cannot make progress):<ul><li>QC unknown responses or</li><li>All responses received, but not enough for either a positive or negative</li></ul></li></ul></li></ul><h3 class="anchor anchorWithStickyNavbar_LWe7" id="impact-of-undetected-data-loss-on-consistency">Impact of Undetected Data Loss on Consistency<a href="#impact-of-undetected-data-loss-on-consistency" class="hash-link" aria-label="Direct link to Impact of Undetected Data Loss on Consistency" title="Direct link to Impact of Undetected Data Loss on Consistency">​</a></h3><p>The ledger recovery process assumes that ledger entries are never arbitrarily lost. In the event of the loss of an entry, the recovery process can:</p><ul><li>allow the original client to keep writing entries to a ledger that has just been fenced and closed, thus losing those entries </li><li>allow the recovery client to truncate the ledger too soon, closing it with a last entry id lower than that of previously acknowledged entries - thus losing data.</li></ul><p>The following scenarios assume existing behaviour but simply skipping the writing of entries and fencing ops to the journal.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="scenario-1---lost-fenced-status-allows-writes-after-ledger-close">Scenario 1 - Lost Fenced Status Allows Writes After Ledger Close<a href="#scenario-1---lost-fenced-status-allows-writes-after-ledger-close" class="hash-link" aria-label="Direct link to Scenario 1 - Lost Fenced Status Allows Writes After Ledger Close" title="Direct link to Scenario 1 - Lost Fenced Status Allows Writes After Ledger Close">​</a></h3><ol><li>3 bookies, B1, B2 &amp; B3</li><li>2 clients, C1 &amp; C2</li><li>1 ledger, L1, with e3:w3:a2 configuration.</li><li>C1 writes entry E1 to L1. The write hits all three bookies.</li><li>C1 hangs for an indeterminate length of time. </li><li>C2 sees that C1 is unresponsive, and assumes it has failed. C2 tries to recover the ledger L1.</li><li>L1 sends a fencing message to all bookies in the ensemble.</li><li>The fencing message succeeds in arriving at B1 &amp; B2 and is acknowledged by both. The message to B3 is lost. </li><li>C2 sees that at least one bookie in each possible ack quorum has acknowledged the fencing message (EC threshold reached), so continues with the read/write phase of recovery, finding that E1 is the last entry of the ledger, and committing the endpoint of the ledger in the ZK.</li><li>B2 crashes and boots again with all unflushed operations lost. </li><li>C1 wakes up and writes entry E2 to all bookies. B2 &amp; B3 acknowledge positively, so C1 considers E2 as persisted. B1 rejects the message as the ledger is fenced, but since ack quorum is 2, B2 &amp; B3 are enough to consider the entry written.</li></ol><h3 class="anchor anchorWithStickyNavbar_LWe7" id="scenario-2---recovery-truncates-previously-acknowledged-entries">Scenario 2 - Recovery Truncates Previously Acknowledged Entries<a href="#scenario-2---recovery-truncates-previously-acknowledged-entries" class="hash-link" aria-label="Direct link to Scenario 2 - Recovery Truncates Previously Acknowledged Entries" title="Direct link to Scenario 2 - Recovery Truncates Previously Acknowledged Entries">​</a></h3><ol><li>C1 adds E0 to B1, B2, B3</li><li>B1 and B3 confirms. C1 confirms the write to its client.</li><li>C2 starts recovery</li><li>B2 fails to respond. C1 tries to change ensemble but gets a metadata version conflict.</li><li>B1 crashes and restarts, has lost E0 (undetected)</li><li>C2 fences the ledger on B1, B2, B3</li><li>C2 sends Read E0 to B1, B2, B3</li><li>B1 responds with NoSuchEntry</li><li>B2 responds with NoSuchEntry</li><li>QC negative response threshold reached. C2 closes the ledger as empty. Losing E0.</li></ol><p>The problem is that without the journal (and syncing to entry log files before acknowledgement) a bookie can:</p><ul><li>lose the fenced status of a previously existing ledger</li><li>respond with an explicit negative even though it had previously seen an entry. </li></ul><p>Undetected data loss could occur when running without the journal. Bookie crashes and loses most recent entries and fence statuses that had not yet been written and synced to disk.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="a-note-on-cookies">A note on cookies<a href="#a-note-on-cookies" class="hash-link" aria-label="Direct link to A note on cookies" title="Direct link to A note on cookies">​</a></h3><p>Cookies play an essential part in the bookkeeper replication protocol, but their purpose is often unclear. </p><p>When a bookie boots for the first time, it generates a cookie. The cookie encapsulates the identity of the bookie and should be considered immutable. This identity contains the advertised address of the bookie, the disks used for the journal, index, and ledger storage, and a unique ID. The bookie writes the cookie to ZK and each of the disks in use. On all subsequent boots, if the cookie is missing from any of these places, the bookie fails to boot.</p><p>The absence of a disk&#x27;s cookie implies that the rest of the disk&#x27;s data is also missing. Cookie validation is performed on boot-up and prevents the boot from succeeding if the validation fails, thus preventing the bookie starting with undetected data loss. </p><p>This proposal improves the cookie mechanism by automating the resolution of a cookie validation error which currently requires human intervention to resolve. This automated feature will be configurable (enabled or disabled) and additionally a CLI command will be made available so an admin can manually run the operation (for when this feature is disabled - likely to be the default). </p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="proposed-changes">Proposed Changes<a href="#proposed-changes" class="hash-link" aria-label="Direct link to Proposed Changes" title="Direct link to Proposed Changes">​</a></h3><p>The proposed changes involve:</p><ul><li>A new config that controls whether add operations go into the journal</li><li>Detecting possible data loss on boot</li><li>Prevent explicit negative responses when data loss may have occurred, instead reply with unknown code, until data is repaired.</li><li>Repair data loss</li><li>Auto fix cookies (with new config to enable or disable the feature)</li><li>CLI command for admin to run fix cookie logic in the case that auto fix is disabled</li></ul><p>In these proposed changes, when running &quot;without&quot; the journal, the journal still exists, but add entry operations skip the addition to the journal. The boot-up sequence still replays the journal.</p><p>Add operations can be configured to be written to the journal or not based on the config <code>journalWriteData</code>. When set to <code>false</code>, add operations are not added to the journal.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="detecting-data-loss-on-boot">Detecting Data Loss On Boot<a href="#detecting-data-loss-on-boot" class="hash-link" aria-label="Direct link to Detecting Data Loss On Boot" title="Direct link to Detecting Data Loss On Boot">​</a></h3><p>The new mechanism for data loss detection is checking for an unclean shutdown (aka a crash or abrupt termination of the bookie). When an unclean shutdown is detected further measures are taken to prevent data inconsistency.</p><p>The unclean shutdown detection will consist of setting a bit in the index on start-up and clearing it on shutdown. On subsequent start-up, the value will be checked and if it remains set, it knows that the prior shutdown was not clean.</p><p>Cookie validation will continue to be used to detect booting with one or more missing or empty disks (that once existed and contained a cookie).</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="protection-mechanism">Protection Mechanism<a href="#protection-mechanism" class="hash-link" aria-label="Direct link to Protection Mechanism" title="Direct link to Protection Mechanism">​</a></h3><p>Once possible data loss has been detected the following protection mechanism is carried out during the boot:</p><ul><li>Fencing: Ledger metadata for all ledgers of the cluster are obtained and all those ledgers are fenced on this bookie. This prevents data loss scenario 1.</li><li>Limbo: All open ledgers are placed in the limbo status. Limbo ledgers can serve read requests, but never respond with an explicit negative, all explicit negatives are converted to unknowns (with the use of a new code EUNKNOWN).</li><li>Recovery: All open ledgers are opened and recovered.</li><li>Repair: Each ledger is scanned and any missing entries are sourced from peers.</li><li>Limbo ledgers that have been repaired have their limbo status cleared.</li></ul><h3 class="anchor anchorWithStickyNavbar_LWe7" id="the-full-boot-up-sequence">The Full Boot-Up Sequence<a href="#the-full-boot-up-sequence" class="hash-link" aria-label="Direct link to The Full Boot-Up Sequence" title="Direct link to The Full Boot-Up Sequence">​</a></h3><p>This mechanism of limbo ledgers and self-repair needs to work hand-in hand with the cookie validation check. Combining everything together:</p><p>On boot:</p><ol><li>Check for unclean shutdown and validate cookies</li><li>Fetch the metadata for all ledgers in the cluster from ZK where the bookie is a member of its ensemble.</li><li>Phase one:<ul><li>If the cookie check fails or unclean shutdown is detected:<ul><li>For each non-closed ledger, mark the ledger as fenced and in-limbo in the index.</li><li>Update the cookie if it was a cookie failure</li></ul></li></ul></li><li>Phase two<ul><li>For each ledger<ol><li>If the ledger is in-limbo, open and recover the ledger.</li><li>Check that all entries assigned to this bookie exist in the index.</li><li>For any entries that are missing, copy from another bookie.</li><li>Clear limbo status if set</li></ol></li></ul></li></ol><p>When booting a bookie with empty disks, only phase one needs to be complete before the bookie makes itself available for client requests. </p><p>In phase one, if the cookie check fails, we mark all non-closed ledgers as “fenced”. This prevents any future writes to these ledgers on this bookie. This solves the problem of an empty bookie disk allowing writes to closed ledgers (Scenario 1).</p><p>Given that the algorithm solves both the issues that cookies are designed to solve, we can now allow the bookie to update its cookie without operator intervention. </p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="formal-verification-of-proposed-changes">Formal Verification of Proposed Changes<a href="#formal-verification-of-proposed-changes" class="hash-link" aria-label="Direct link to Formal Verification of Proposed Changes" title="Direct link to Formal Verification of Proposed Changes">​</a></h3><p>The use of the limbo status and fencing of all ledgers on boot-up when detecting an unclean shutdown has been modelled in TLA+. It does not model the whole boot-up sequence but a simplified version with only fencing and limbo status. </p><p>The specification models the lifetime of a single ledger and includes a single bookie crashing, losing all data. The specification allows the testing of:</p><ul><li>enabling/disabling the fencing</li><li>enabling/disabling the limbo status.</li></ul><p>When running without limbo status, the model checker finds the counterexample of scenario 2. When running without fencing of all ledgers, the model checker finds the counterexample of scenario 1. When running with both enabled, the model checker finds no invariant violation.</p><p>The specification can be found here: <a href="https://github.com/Vanlightly/bookkeeper-tlaplus" target="_blank" rel="noopener noreferrer">https://github.com/Vanlightly/bookkeeper-tlaplus</a></p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="public-interfaces">Public Interfaces<a href="#public-interfaces" class="hash-link" aria-label="Direct link to Public Interfaces" title="Direct link to Public Interfaces">​</a></h3><ul><li>Return codes. Addition of a new return code: <code>EUNKNOWN</code> which is returned when a read hits an in-limbo ledger and that ledger not contain the requested entry id.</li><li>Bookie ledger metadata format (LedgerData). Addition of the limbo status.</li></ul><h3 class="anchor anchorWithStickyNavbar_LWe7" id="compatibility-deprecation-and-migration-plan">Compatibility, Deprecation, and Migration Plan<a href="#compatibility-deprecation-and-migration-plan" class="hash-link" aria-label="Direct link to Compatibility, Deprecation, and Migration Plan" title="Direct link to Compatibility, Deprecation, and Migration Plan">​</a></h3><ul><li>Because we only skip the journal for add operations, there is no impact on existing deployments. When a bookie is booted with the new version, and <code>journalWriteData</code> is set to false, the journal is still replayed on boot-up causing no risk of data loss in the transition.</li></ul><h3 class="anchor anchorWithStickyNavbar_LWe7" id="test-plan">Test Plan<a href="#test-plan" class="hash-link" aria-label="Direct link to Test Plan" title="Direct link to Test Plan">​</a></h3><ul><li>There is confidence in the design due to the modelling in TLA+ but this model does not include the full boot sequence.</li><li>The implementation will require aggressive chaos testing to ensure correctness.</li></ul><h3 class="anchor anchorWithStickyNavbar_LWe7" id="rejected-alternatives">Rejected Alternatives<a href="#rejected-alternatives" class="hash-link" aria-label="Direct link to Rejected Alternatives" title="Direct link to Rejected Alternatives">​</a></h3><p>Entry Log Per Ledger (ELPL) without the journal. From our performance testing of ELPL, performance degrades significantly with a large number of active ledgers and syncing to disk multiple times a second (which is required to offer low latency writes).</p><p>In the future this design could be extended to offer ledger level configuration of journal use. The scope of this BP is limited to cluster level.</p></article></div><div class="col col--2"><div class="tableOfContents_bqdL thin-scrollbar"><ul class="table-of-contents table-of-contents__left-border"><li><a href="#motivation" class="table-of-contents__link toc-highlight">Motivation</a></li><li><a href="#a-note-on-response-codes" class="table-of-contents__link toc-highlight">A note on Response Codes</a></li><li><a href="#a-note-on-quorums" class="table-of-contents__link toc-highlight">A note on Quorums</a></li><li><a href="#impact-of-undetected-data-loss-on-consistency" class="table-of-contents__link toc-highlight">Impact of Undetected Data Loss on Consistency</a></li><li><a href="#scenario-1---lost-fenced-status-allows-writes-after-ledger-close" class="table-of-contents__link toc-highlight">Scenario 1 - Lost Fenced Status Allows Writes After Ledger Close</a></li><li><a href="#scenario-2---recovery-truncates-previously-acknowledged-entries" class="table-of-contents__link toc-highlight">Scenario 2 - Recovery Truncates Previously Acknowledged Entries</a></li><li><a href="#a-note-on-cookies" class="table-of-contents__link toc-highlight">A note on cookies</a></li><li><a href="#proposed-changes" class="table-of-contents__link toc-highlight">Proposed Changes</a></li><li><a href="#detecting-data-loss-on-boot" class="table-of-contents__link toc-highlight">Detecting Data Loss On Boot</a></li><li><a href="#protection-mechanism" class="table-of-contents__link toc-highlight">Protection Mechanism</a></li><li><a href="#the-full-boot-up-sequence" class="table-of-contents__link toc-highlight">The Full Boot-Up Sequence</a></li><li><a href="#formal-verification-of-proposed-changes" class="table-of-contents__link toc-highlight">Formal Verification of Proposed Changes</a></li><li><a href="#public-interfaces" class="table-of-contents__link toc-highlight">Public Interfaces</a></li><li><a href="#compatibility-deprecation-and-migration-plan" class="table-of-contents__link toc-highlight">Compatibility, Deprecation, and Migration Plan</a></li><li><a href="#test-plan" class="table-of-contents__link toc-highlight">Test Plan</a></li><li><a href="#rejected-alternatives" class="table-of-contents__link toc-highlight">Rejected Alternatives</a></li></ul></div></div></div></main></div><footer class="footer footer--dark"><div class="container container-fluid"><div class="row footer__links"><div class="col footer__col"><div class="footer__title">Documentation</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/docs/overview">Overview</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/getting-started/installation">Getting started</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/deployment/manual">Deployment</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/admin/bookies">Administration</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/api/overview">API</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/security/overview">Security</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/development/protocol">Development</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/reference/config">Reference</a></li></ul></div><div class="col footer__col"><div class="footer__title">Community</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/community/mailing-lists">Mailing lists</a></li><li class="footer__item"><a class="footer__link-item" href="/community/slack">Slack</a></li><li class="footer__item"><a href="https://github.com/apache/bookkeeper" target="_blank" rel="noopener noreferrer" class="footer__link-item">Github<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a href="https://twitter.com/asfbookkeeper" target="_blank" rel="noopener noreferrer" class="footer__link-item">Twitter<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div><div class="col footer__col"><div class="footer__title">Project</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/project/who">Who are we?</a></li><li class="footer__item"><a class="footer__link-item" href="/project/bylaws">Bylaws</a></li><li class="footer__item"><a href="https://apache.org/licenses" target="_blank" rel="noopener noreferrer" class="footer__link-item">License<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a class="footer__link-item" href="/project/privacy">Privacy policy</a></li><li class="footer__item"><a href="https://www.apache.org/foundation/sponsorship.html" target="_blank" rel="noopener noreferrer" class="footer__link-item">Sponsorship<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a href="https://www.apache.org/foundation/thanks.html" target="_blank" rel="noopener noreferrer" class="footer__link-item">Thanks<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div></div><div class="footer__bottom text--center"><div class="footer__copyright"><footer class="footer">
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navbar__brand" href="/"><div class="navbar__logo"><img src="/img/bk-logo.svg" alt="Apache Bookkeeper" class="themedImage_ToTc themedImage--light_HNdA"><img src="/img/bk-logo.svg" alt="Apache Bookkeeper" class="themedImage_ToTc themedImage--dark_i4oU"></div><b class="navbar__title text--truncate">Apache BookKeeper</b></a><a class="navbar__item navbar__link" href="/docs/overview/">Documentation</a><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Community</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/community/mailing-lists">Mailing lists</a></li><li><a class="dropdown__link" href="/community/slack">Slack</a></li><li><a href="https://github.com/apache/bookkeeper/issues" target="_blank" rel="noopener noreferrer" class="dropdown__link">Github issues<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a class="dropdown__link" href="/community/releases">Release management</a></li><li><a class="dropdown__link" href="/community/meeting">Community meetings</a></li><li><a class="dropdown__link" href="/community/contributing">Contribution guide</a></li><li><a class="dropdown__link" href="/community/coding-guide">Coding guide</a></li><li><a class="dropdown__link" href="/community/testing">Testing guide</a></li><li><a class="dropdown__link" href="/community/issue-report">Issue report guide</a></li><li><a class="dropdown__link" href="/community/release-guide">Release guide</a></li><li><a class="dropdown__link" href="/community/presentations">Presentations</a></li><li><a class="dropdown__link" href="/community/bookkeeper-proposals">BookKeeper proposals (BP)</a></li></ul></div><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Project</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/project/who">Who are we?</a></li><li><a class="dropdown__link" href="/project/bylaws">Bylaws</a></li><li><a href="https://apache.org/licenses" target="_blank" rel="noopener noreferrer" class="dropdown__link">License<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a class="dropdown__link" href="/project/privacy">Privacy policy</a></li><li><a href="https://www.apache.org/foundation/sponsorship.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Sponsorship<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a href="https://www.apache.org/foundation/thanks.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Thanks<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div></div><div class="navbar__items navbar__items--right"><div class="navbar__item dropdown dropdown--hoverable dropdown--right"><a class="navbar__link" aria-haspopup="true" aria-expanded="false" role="button" href="/docs/overview/">4.17.0</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/docs/next/overview/">Next</a></li><li><a class="dropdown__link" href="/docs/overview/">4.17.0</a></li><li><a class="dropdown__link" href="/docs/4.16.5/overview/">4.16.5</a></li><li><a class="dropdown__link" href="/docs/4.15.5/overview/">4.15.5</a></li><li><a class="dropdown__link" href="/docs/4.14.8/overview/">4.14.8</a></li><li><a class="dropdown__link" href="/docs/4.13.0/overview/">4.13.0</a></li><li><a class="dropdown__link" href="/docs/4.12.1/overview/">4.12.1</a></li><li><a class="dropdown__link" href="/docs/4.11.1/overview/">4.11.1</a></li><li><a class="dropdown__link" href="/docs/4.10.0/overview/">4.10.0</a></li><li><a class="dropdown__link" href="/docs/4.9.2/overview/">4.9.2</a></li><li><a class="dropdown__link" href="/docs/4.8.2/overview/">4.8.2</a></li><li><a class="dropdown__link" href="/docs/4.7.3/overview/">4.7.3</a></li><li><a class="dropdown__link" href="/docs/4.6.2/overview/">4.6.2</a></li><li><a class="dropdown__link" href="/docs/4.5.1/overview/">4.5.1</a></li></ul></div><a class="navbar__item navbar__link" href="/releases">Download</a><div class="toggle_vylO colorModeToggle_DEke"><button class="clean-btn toggleButton_gllP toggleButtonDisabled_aARS" type="button" disabled="" title="Switch between dark and light mode (currently light mode)" aria-label="Switch between dark and light mode (currently light mode)" aria-live="polite"><svg viewBox="0 0 24 24" width="24" height="24" class="lightToggleIcon_pyhR"><path fill="currentColor" d="M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"></path></svg><svg viewBox="0 0 24 24" width="24" height="24" class="darkToggleIcon_wfgR"><path fill="currentColor" d="M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"></path></svg></button></div><div class="searchBox_ZlJk"></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div></nav><div id="docusaurus_skipToContent_fallback" class="main-wrapper mainWrapper_z2l0"><main class="container container--fluid margin-vert--lg"><div class="row mdxPageWrapper_j9I6"><div class="col col--8"><article><h1>BP-46: Running without the journal</h1><h3 class="anchor anchorWithStickyNavbar_LWe7" id="motivation">Motivation<a href="#motivation" class="hash-link" aria-label="Direct link to Motivation" title="Direct link to Motivation">​</a></h3><p>The journal allows for fast add operations that provide strong data safety guarantees. An add operation is only acked to a client once written to the journal and an fsync performed. This however means that every entry must be written twice: once to the journal and once to an entry log file.</p><p>This double write increases the cost of ownership as more disks must be provisioned to service requests and makes disk provisioning more complex (separating journal from entry log writes onto separate disks). Running without the journal would halve the disk IO required (ignoring indexes) thereby reducing costs and simplifying provisioning.</p><p>However, running without the journal would introduce data consistency problems as the BookKeeper Replication Protocol requires that all writes are persistent for correctness. Running without the journal introduces the possibility of lost writes. In order to continue to offer strong data safety and support running without the journal, changes to the protocol are required.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="a-note-on-response-codes">A note on Response Codes<a href="#a-note-on-response-codes" class="hash-link" aria-label="Direct link to A note on Response Codes" title="Direct link to A note on Response Codes">​</a></h3><p>The following categories are relevant:</p><ul><li>Positive: OK</li><li>Explicit Negative: NoSuchEntry/NoSuchLedger</li><li>Unknown: Any other non-success response that is not an explicit negative.</li></ul><p>For correctness explicit negatives must be treated differently than other errors.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="a-note-on-quorums">A note on Quorums<a href="#a-note-on-quorums" class="hash-link" aria-label="Direct link to A note on Quorums" title="Direct link to A note on Quorums">​</a></h3><p>In order to explain the protocol changes, it is useful to first consider how quorums are used for safety. We have the following relevant quorums:</p><ul><li>Single bookie (S)</li><li>Ack quorum (AQ)</li><li>Write quorum (WQ)</li><li>Quorum Coverage (QC) where QC = (WQ - AQ) + 1</li><li>Ensemble Coverage (EC) where EC = (E - AQ) + 1</li><li>Whole Ensemble</li></ul><p>Quorum Coverage (QC) and Ensemble Coverage (EC) are both defined by the following, only the cohorts differ: </p><ul><li>A given property is satisfied by at least one bookie from every possible ack quorum within the cohort.</li><li>There exists no ack quorum of bookies that do not satisfy the property within the cohort.</li></ul><p>For QC, the cohort is the writeset of a given entry, and therefore QC is only used when we need guarantees regarding a single entry. For EC, the cohort is the ensemble of bookies of the current fragment. EC is required when we need a guarantee across an entire fragment.</p><p>For example:</p><ul><li>For fencing, we need to ensure that no AQ of bookies is unfenced before starting the read/write phase of recovery. This is true once EC successful fencing responses have been received.</li><li>For a recovery read, a read is only negative once we know that no AQ of bookies could exist that might have the entry. Doing otherwise could truncate committed entries from a ledger. A read is negative once NoSuchEntry responses reach QC.</li></ul><p>Different protocol actions require different quorums:</p><ul><li>Add entry: AQ success responses</li><li>Read entry:<ul><li>Positive when positive response from a single bookie</li><li>Negative when explicit negative from all bookies</li><li>Unknown: when at least one unknown and no positive from all bookies</li></ul></li><li>Fencing phase, LAC read (sent to ensemble of current fragment):<ul><li>Complete when EC positive responses</li><li>Unknown (cannot make progress) when AQ unknown responses (fencing LAC reads cannot cause an explicit negative as fencing creates the ledger on the bookie if it doesn’t exist)</li></ul></li><li>Recovery read (sent to writeset of entry):<ul><li>Entry recoverable: AQ positive read responses</li><li>Entry Unrecoverable: QC negative read responses</li><li>Unknown (cannot make progress):<ul><li>QC unknown responses or</li><li>All responses received, but not enough for either a positive or negative</li></ul></li></ul></li></ul><h3 class="anchor anchorWithStickyNavbar_LWe7" id="impact-of-undetected-data-loss-on-consistency">Impact of Undetected Data Loss on Consistency<a href="#impact-of-undetected-data-loss-on-consistency" class="hash-link" aria-label="Direct link to Impact of Undetected Data Loss on Consistency" title="Direct link to Impact of Undetected Data Loss on Consistency">​</a></h3><p>The ledger recovery process assumes that ledger entries are never arbitrarily lost. In the event of the loss of an entry, the recovery process can:</p><ul><li>allow the original client to keep writing entries to a ledger that has just been fenced and closed, thus losing those entries </li><li>allow the recovery client to truncate the ledger too soon, closing it with a last entry id lower than that of previously acknowledged entries - thus losing data.</li></ul><p>The following scenarios assume existing behaviour but simply skipping the writing of entries and fencing ops to the journal.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="scenario-1---lost-fenced-status-allows-writes-after-ledger-close">Scenario 1 - Lost Fenced Status Allows Writes After Ledger Close<a href="#scenario-1---lost-fenced-status-allows-writes-after-ledger-close" class="hash-link" aria-label="Direct link to Scenario 1 - Lost Fenced Status Allows Writes After Ledger Close" title="Direct link to Scenario 1 - Lost Fenced Status Allows Writes After Ledger Close">​</a></h3><ol><li>3 bookies, B1, B2 &amp; B3</li><li>2 clients, C1 &amp; C2</li><li>1 ledger, L1, with e3:w3:a2 configuration.</li><li>C1 writes entry E1 to L1. The write hits all three bookies.</li><li>C1 hangs for an indeterminate length of time. </li><li>C2 sees that C1 is unresponsive, and assumes it has failed. C2 tries to recover the ledger L1.</li><li>L1 sends a fencing message to all bookies in the ensemble.</li><li>The fencing message succeeds in arriving at B1 &amp; B2 and is acknowledged by both. The message to B3 is lost. </li><li>C2 sees that at least one bookie in each possible ack quorum has acknowledged the fencing message (EC threshold reached), so continues with the read/write phase of recovery, finding that E1 is the last entry of the ledger, and committing the endpoint of the ledger in the ZK.</li><li>B2 crashes and boots again with all unflushed operations lost. </li><li>C1 wakes up and writes entry E2 to all bookies. B2 &amp; B3 acknowledge positively, so C1 considers E2 as persisted. B1 rejects the message as the ledger is fenced, but since ack quorum is 2, B2 &amp; B3 are enough to consider the entry written.</li></ol><h3 class="anchor anchorWithStickyNavbar_LWe7" id="scenario-2---recovery-truncates-previously-acknowledged-entries">Scenario 2 - Recovery Truncates Previously Acknowledged Entries<a href="#scenario-2---recovery-truncates-previously-acknowledged-entries" class="hash-link" aria-label="Direct link to Scenario 2 - Recovery Truncates Previously Acknowledged Entries" title="Direct link to Scenario 2 - Recovery Truncates Previously Acknowledged Entries">​</a></h3><ol><li>C1 adds E0 to B1, B2, B3</li><li>B1 and B3 confirms. C1 confirms the write to its client.</li><li>C2 starts recovery</li><li>B2 fails to respond. C1 tries to change ensemble but gets a metadata version conflict.</li><li>B1 crashes and restarts, has lost E0 (undetected)</li><li>C2 fences the ledger on B1, B2, B3</li><li>C2 sends Read E0 to B1, B2, B3</li><li>B1 responds with NoSuchEntry</li><li>B2 responds with NoSuchEntry</li><li>QC negative response threshold reached. C2 closes the ledger as empty. Losing E0.</li></ol><p>The problem is that without the journal (and syncing to entry log files before acknowledgement) a bookie can:</p><ul><li>lose the fenced status of a previously existing ledger</li><li>respond with an explicit negative even though it had previously seen an entry. </li></ul><p>Undetected data loss could occur when running without the journal. Bookie crashes and loses most recent entries and fence statuses that had not yet been written and synced to disk.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="a-note-on-cookies">A note on cookies<a href="#a-note-on-cookies" class="hash-link" aria-label="Direct link to A note on cookies" title="Direct link to A note on cookies">​</a></h3><p>Cookies play an essential part in the bookkeeper replication protocol, but their purpose is often unclear. </p><p>When a bookie boots for the first time, it generates a cookie. The cookie encapsulates the identity of the bookie and should be considered immutable. This identity contains the advertised address of the bookie, the disks used for the journal, index, and ledger storage, and a unique ID. The bookie writes the cookie to ZK and each of the disks in use. On all subsequent boots, if the cookie is missing from any of these places, the bookie fails to boot.</p><p>The absence of a disk&#x27;s cookie implies that the rest of the disk&#x27;s data is also missing. Cookie validation is performed on boot-up and prevents the boot from succeeding if the validation fails, thus preventing the bookie starting with undetected data loss. </p><p>This proposal improves the cookie mechanism by automating the resolution of a cookie validation error which currently requires human intervention to resolve. This automated feature will be configurable (enabled or disabled) and additionally a CLI command will be made available so an admin can manually run the operation (for when this feature is disabled - likely to be the default). </p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="proposed-changes">Proposed Changes<a href="#proposed-changes" class="hash-link" aria-label="Direct link to Proposed Changes" title="Direct link to Proposed Changes">​</a></h3><p>The proposed changes involve:</p><ul><li>A new config that controls whether add operations go into the journal</li><li>Detecting possible data loss on boot</li><li>Prevent explicit negative responses when data loss may have occurred, instead reply with unknown code, until data is repaired.</li><li>Repair data loss</li><li>Auto fix cookies (with new config to enable or disable the feature)</li><li>CLI command for admin to run fix cookie logic in the case that auto fix is disabled</li></ul><p>In these proposed changes, when running &quot;without&quot; the journal, the journal still exists, but add entry operations skip the addition to the journal. The boot-up sequence still replays the journal.</p><p>Add operations can be configured to be written to the journal or not based on the config <code>journalWriteData</code>. When set to <code>false</code>, add operations are not added to the journal.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="detecting-data-loss-on-boot">Detecting Data Loss On Boot<a href="#detecting-data-loss-on-boot" class="hash-link" aria-label="Direct link to Detecting Data Loss On Boot" title="Direct link to Detecting Data Loss On Boot">​</a></h3><p>The new mechanism for data loss detection is checking for an unclean shutdown (aka a crash or abrupt termination of the bookie). When an unclean shutdown is detected further measures are taken to prevent data inconsistency.</p><p>The unclean shutdown detection will consist of setting a bit in the index on start-up and clearing it on shutdown. On subsequent start-up, the value will be checked and if it remains set, it knows that the prior shutdown was not clean.</p><p>Cookie validation will continue to be used to detect booting with one or more missing or empty disks (that once existed and contained a cookie).</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="protection-mechanism">Protection Mechanism<a href="#protection-mechanism" class="hash-link" aria-label="Direct link to Protection Mechanism" title="Direct link to Protection Mechanism">​</a></h3><p>Once possible data loss has been detected the following protection mechanism is carried out during the boot:</p><ul><li>Fencing: Ledger metadata for all ledgers of the cluster are obtained and all those ledgers are fenced on this bookie. This prevents data loss scenario 1.</li><li>Limbo: All open ledgers are placed in the limbo status. Limbo ledgers can serve read requests, but never respond with an explicit negative, all explicit negatives are converted to unknowns (with the use of a new code EUNKNOWN).</li><li>Recovery: All open ledgers are opened and recovered.</li><li>Repair: Each ledger is scanned and any missing entries are sourced from peers.</li><li>Limbo ledgers that have been repaired have their limbo status cleared.</li></ul><h3 class="anchor anchorWithStickyNavbar_LWe7" id="the-full-boot-up-sequence">The Full Boot-Up Sequence<a href="#the-full-boot-up-sequence" class="hash-link" aria-label="Direct link to The Full Boot-Up Sequence" title="Direct link to The Full Boot-Up Sequence">​</a></h3><p>This mechanism of limbo ledgers and self-repair needs to work hand-in hand with the cookie validation check. Combining everything together:</p><p>On boot:</p><ol><li>Check for unclean shutdown and validate cookies</li><li>Fetch the metadata for all ledgers in the cluster from ZK where the bookie is a member of its ensemble.</li><li>Phase one:<ul><li>If the cookie check fails or unclean shutdown is detected:<ul><li>For each non-closed ledger, mark the ledger as fenced and in-limbo in the index.</li><li>Update the cookie if it was a cookie failure</li></ul></li></ul></li><li>Phase two<ul><li>For each ledger<ol><li>If the ledger is in-limbo, open and recover the ledger.</li><li>Check that all entries assigned to this bookie exist in the index.</li><li>For any entries that are missing, copy from another bookie.</li><li>Clear limbo status if set</li></ol></li></ul></li></ol><p>When booting a bookie with empty disks, only phase one needs to be complete before the bookie makes itself available for client requests. </p><p>In phase one, if the cookie check fails, we mark all non-closed ledgers as “fenced”. This prevents any future writes to these ledgers on this bookie. This solves the problem of an empty bookie disk allowing writes to closed ledgers (Scenario 1).</p><p>Given that the algorithm solves both the issues that cookies are designed to solve, we can now allow the bookie to update its cookie without operator intervention. </p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="formal-verification-of-proposed-changes">Formal Verification of Proposed Changes<a href="#formal-verification-of-proposed-changes" class="hash-link" aria-label="Direct link to Formal Verification of Proposed Changes" title="Direct link to Formal Verification of Proposed Changes">​</a></h3><p>The use of the limbo status and fencing of all ledgers on boot-up when detecting an unclean shutdown has been modelled in TLA+. It does not model the whole boot-up sequence but a simplified version with only fencing and limbo status. </p><p>The specification models the lifetime of a single ledger and includes a single bookie crashing, losing all data. The specification allows the testing of:</p><ul><li>enabling/disabling the fencing</li><li>enabling/disabling the limbo status.</li></ul><p>When running without limbo status, the model checker finds the counterexample of scenario 2. When running without fencing of all ledgers, the model checker finds the counterexample of scenario 1. When running with both enabled, the model checker finds no invariant violation.</p><p>The specification can be found here: <a href="https://github.com/Vanlightly/bookkeeper-tlaplus" target="_blank" rel="noopener noreferrer">https://github.com/Vanlightly/bookkeeper-tlaplus</a></p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="public-interfaces">Public Interfaces<a href="#public-interfaces" class="hash-link" aria-label="Direct link to Public Interfaces" title="Direct link to Public Interfaces">​</a></h3><ul><li>Return codes. Addition of a new return code: <code>EUNKNOWN</code> which is returned when a read hits an in-limbo ledger and that ledger not contain the requested entry id.</li><li>Bookie ledger metadata format (LedgerData). Addition of the limbo status.</li></ul><h3 class="anchor anchorWithStickyNavbar_LWe7" id="compatibility-deprecation-and-migration-plan">Compatibility, Deprecation, and Migration Plan<a href="#compatibility-deprecation-and-migration-plan" class="hash-link" aria-label="Direct link to Compatibility, Deprecation, and Migration Plan" title="Direct link to Compatibility, Deprecation, and Migration Plan">​</a></h3><ul><li>Because we only skip the journal for add operations, there is no impact on existing deployments. When a bookie is booted with the new version, and <code>journalWriteData</code> is set to false, the journal is still replayed on boot-up causing no risk of data loss in the transition.</li></ul><h3 class="anchor anchorWithStickyNavbar_LWe7" id="test-plan">Test Plan<a href="#test-plan" class="hash-link" aria-label="Direct link to Test Plan" title="Direct link to Test Plan">​</a></h3><ul><li>There is confidence in the design due to the modelling in TLA+ but this model does not include the full boot sequence.</li><li>The implementation will require aggressive chaos testing to ensure correctness.</li></ul><h3 class="anchor anchorWithStickyNavbar_LWe7" id="rejected-alternatives">Rejected Alternatives<a href="#rejected-alternatives" class="hash-link" aria-label="Direct link to Rejected Alternatives" title="Direct link to Rejected Alternatives">​</a></h3><p>Entry Log Per Ledger (ELPL) without the journal. From our performance testing of ELPL, performance degrades significantly with a large number of active ledgers and syncing to disk multiple times a second (which is required to offer low latency writes).</p><p>In the future this design could be extended to offer ledger level configuration of journal use. The scope of this BP is limited to cluster level.</p></article></div><div class="col col--2"><div class="tableOfContents_bqdL thin-scrollbar"><ul class="table-of-contents table-of-contents__left-border"><li><a href="#motivation" class="table-of-contents__link toc-highlight">Motivation</a></li><li><a href="#a-note-on-response-codes" class="table-of-contents__link toc-highlight">A note on Response Codes</a></li><li><a href="#a-note-on-quorums" class="table-of-contents__link toc-highlight">A note on Quorums</a></li><li><a href="#impact-of-undetected-data-loss-on-consistency" class="table-of-contents__link toc-highlight">Impact of Undetected Data Loss on Consistency</a></li><li><a href="#scenario-1---lost-fenced-status-allows-writes-after-ledger-close" class="table-of-contents__link toc-highlight">Scenario 1 - Lost Fenced Status Allows Writes After Ledger Close</a></li><li><a href="#scenario-2---recovery-truncates-previously-acknowledged-entries" class="table-of-contents__link toc-highlight">Scenario 2 - Recovery Truncates Previously Acknowledged Entries</a></li><li><a href="#a-note-on-cookies" class="table-of-contents__link toc-highlight">A note on cookies</a></li><li><a href="#proposed-changes" class="table-of-contents__link toc-highlight">Proposed Changes</a></li><li><a href="#detecting-data-loss-on-boot" class="table-of-contents__link toc-highlight">Detecting Data Loss On Boot</a></li><li><a href="#protection-mechanism" class="table-of-contents__link toc-highlight">Protection Mechanism</a></li><li><a href="#the-full-boot-up-sequence" class="table-of-contents__link toc-highlight">The Full Boot-Up Sequence</a></li><li><a href="#formal-verification-of-proposed-changes" class="table-of-contents__link toc-highlight">Formal Verification of Proposed Changes</a></li><li><a href="#public-interfaces" class="table-of-contents__link toc-highlight">Public Interfaces</a></li><li><a href="#compatibility-deprecation-and-migration-plan" class="table-of-contents__link toc-highlight">Compatibility, Deprecation, and Migration Plan</a></li><li><a href="#test-plan" class="table-of-contents__link toc-highlight">Test Plan</a></li><li><a href="#rejected-alternatives" class="table-of-contents__link toc-highlight">Rejected Alternatives</a></li></ul></div></div></div></main></div><footer class="footer footer--dark"><div class="container container-fluid"><div class="row footer__links"><div class="col footer__col"><div class="footer__title">Documentation</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/docs/overview">Overview</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/getting-started/installation">Getting started</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/deployment/manual">Deployment</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/admin/bookies">Administration</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/api/overview">API</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/security/overview">Security</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/development/protocol">Development</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/reference/config">Reference</a></li></ul></div><div class="col footer__col"><div class="footer__title">Community</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/community/mailing-lists">Mailing lists</a></li><li class="footer__item"><a class="footer__link-item" href="/community/slack">Slack</a></li><li class="footer__item"><a href="https://github.com/apache/bookkeeper" target="_blank" rel="noopener noreferrer" class="footer__link-item">Github<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a href="https://twitter.com/asfbookkeeper" target="_blank" rel="noopener noreferrer" class="footer__link-item">Twitter<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div><div class="col footer__col"><div class="footer__title">Project</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/project/who">Who are we?</a></li><li class="footer__item"><a class="footer__link-item" href="/project/bylaws">Bylaws</a></li><li class="footer__item"><a href="https://apache.org/licenses" target="_blank" rel="noopener noreferrer" class="footer__link-item">License<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a class="footer__link-item" href="/project/privacy">Privacy policy</a></li><li class="footer__item"><a href="https://www.apache.org/foundation/sponsorship.html" target="_blank" rel="noopener noreferrer" class="footer__link-item">Sponsorship<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a href="https://www.apache.org/foundation/thanks.html" target="_blank" rel="noopener noreferrer" class="footer__link-item">Thanks<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div></div><div class="footer__bottom text--center"><div class="footer__copyright"><footer class="footer">
         <div class="container">
           <div class="content has-text-centered">
             <p>
@@ -22,7 +22,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/bps/BP-62-new-API-for-batched-reads/index.html b/content/bps/BP-62-new-API-for-batched-reads/index.html
index 5df8831..453972e 100644
--- a/content/bps/BP-62-new-API-for-batched-reads/index.html
+++ b/content/bps/BP-62-new-API-for-batched-reads/index.html
@@ -4,12 +4,12 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">BP-62 New API for batched reads | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/bps/BP-62-new-API-for-batched-reads"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docusaurus_tag" content="default"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docsearch:docusaurus_tag" content="default"><meta data-rh="true" property="og:title" content="BP-62 New API for batched reads | Apache BookKeeper"><meta data-rh="true" name="description" content="The BookKeeper client has provided an API [0] that allows for the efficient reading of entries [1] from bookies."><meta data-rh="true" property="og:description" content="The BookKeeper client has provided an API [0] that allows for the efficient reading of entries [1] from bookies."><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/bps/BP-62-new-API-for-batched-reads"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/bps/BP-62-new-API-for-batched-reads" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/bps/BP-62-new-API-for-batched-reads" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
-<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navbar__brand" href="/"><div class="navbar__logo"><img src="/img/bk-logo.svg" alt="Apache Bookkeeper" class="themedImage_ToTc themedImage--light_HNdA"><img src="/img/bk-logo.svg" alt="Apache Bookkeeper" class="themedImage_ToTc themedImage--dark_i4oU"></div><b class="navbar__title text--truncate">Apache BookKeeper</b></a><a class="navbar__item navbar__link" href="/docs/overview/">Documentation</a><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Community</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/community/mailing-lists">Mailing lists</a></li><li><a class="dropdown__link" href="/community/slack">Slack</a></li><li><a href="https://github.com/apache/bookkeeper/issues" target="_blank" rel="noopener noreferrer" class="dropdown__link">Github issues<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a class="dropdown__link" href="/community/releases">Release management</a></li><li><a class="dropdown__link" href="/community/meeting">Community meetings</a></li><li><a class="dropdown__link" href="/community/contributing">Contribution guide</a></li><li><a class="dropdown__link" href="/community/coding-guide">Coding guide</a></li><li><a class="dropdown__link" href="/community/testing">Testing guide</a></li><li><a class="dropdown__link" href="/community/issue-report">Issue report guide</a></li><li><a class="dropdown__link" href="/community/release-guide">Release guide</a></li><li><a class="dropdown__link" href="/community/presentations">Presentations</a></li><li><a class="dropdown__link" href="/community/bookkeeper-proposals">BookKeeper proposals (BP)</a></li></ul></div><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Project</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/project/who">Who are we?</a></li><li><a class="dropdown__link" href="/project/bylaws">Bylaws</a></li><li><a href="https://apache.org/licenses" target="_blank" rel="noopener noreferrer" class="dropdown__link">License<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a class="dropdown__link" href="/project/privacy">Privacy policy</a></li><li><a href="https://www.apache.org/foundation/sponsorship.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Sponsorship<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a href="https://www.apache.org/foundation/thanks.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Thanks<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div></div><div class="navbar__items navbar__items--right"><div class="navbar__item dropdown dropdown--hoverable dropdown--right"><a class="navbar__link" aria-haspopup="true" aria-expanded="false" role="button" href="/docs/admin/autorecovery">4.17.0</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/docs/next/overview/">Next</a></li><li><a class="dropdown__link" href="/docs/admin/autorecovery">4.17.0</a></li><li><a class="dropdown__link" href="/docs/4.16.5/overview/">4.16.5</a></li><li><a class="dropdown__link" href="/docs/4.15.5/overview/">4.15.5</a></li><li><a class="dropdown__link" href="/docs/4.14.8/overview/">4.14.8</a></li><li><a class="dropdown__link" href="/docs/4.13.0/overview/">4.13.0</a></li><li><a class="dropdown__link" href="/docs/4.12.1/overview/">4.12.1</a></li><li><a class="dropdown__link" href="/docs/4.11.1/overview/">4.11.1</a></li><li><a class="dropdown__link" href="/docs/4.10.0/overview/">4.10.0</a></li><li><a class="dropdown__link" href="/docs/4.9.2/overview/">4.9.2</a></li><li><a class="dropdown__link" href="/docs/4.8.2/overview/">4.8.2</a></li><li><a class="dropdown__link" href="/docs/4.7.3/overview/">4.7.3</a></li><li><a class="dropdown__link" href="/docs/4.6.2/overview/">4.6.2</a></li><li><a class="dropdown__link" href="/docs/4.5.1/overview/">4.5.1</a></li></ul></div><a class="navbar__item navbar__link" href="/releases">Download</a><div class="toggle_vylO colorModeToggle_DEke"><button class="clean-btn toggleButton_gllP toggleButtonDisabled_aARS" type="button" disabled="" title="Switch between dark and light mode (currently light mode)" aria-label="Switch between dark and light mode (currently light mode)" aria-live="polite"><svg viewBox="0 0 24 24" width="24" height="24" class="lightToggleIcon_pyhR"><path fill="currentColor" d="M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"></path></svg><svg viewBox="0 0 24 24" width="24" height="24" class="darkToggleIcon_wfgR"><path fill="currentColor" d="M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"></path></svg></button></div><div class="searchBox_ZlJk"></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div></nav><div id="docusaurus_skipToContent_fallback" class="main-wrapper mainWrapper_z2l0"><main class="container container--fluid margin-vert--lg"><div class="row mdxPageWrapper_j9I6"><div class="col col--8"><article><h1>BP-62 New API for batched reads</h1><h1>Motivation</h1><p>The BookKeeper client has provided an API <!-- -->[0]<!-- --> that allows for the efficient reading of entries <!-- -->[1]<!-- --> from bookies.
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navbar__brand" href="/"><div class="navbar__logo"><img src="/img/bk-logo.svg" alt="Apache Bookkeeper" class="themedImage_ToTc themedImage--light_HNdA"><img src="/img/bk-logo.svg" alt="Apache Bookkeeper" class="themedImage_ToTc themedImage--dark_i4oU"></div><b class="navbar__title text--truncate">Apache BookKeeper</b></a><a class="navbar__item navbar__link" href="/docs/overview/">Documentation</a><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Community</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/community/mailing-lists">Mailing lists</a></li><li><a class="dropdown__link" href="/community/slack">Slack</a></li><li><a href="https://github.com/apache/bookkeeper/issues" target="_blank" rel="noopener noreferrer" class="dropdown__link">Github issues<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a class="dropdown__link" href="/community/releases">Release management</a></li><li><a class="dropdown__link" href="/community/meeting">Community meetings</a></li><li><a class="dropdown__link" href="/community/contributing">Contribution guide</a></li><li><a class="dropdown__link" href="/community/coding-guide">Coding guide</a></li><li><a class="dropdown__link" href="/community/testing">Testing guide</a></li><li><a class="dropdown__link" href="/community/issue-report">Issue report guide</a></li><li><a class="dropdown__link" href="/community/release-guide">Release guide</a></li><li><a class="dropdown__link" href="/community/presentations">Presentations</a></li><li><a class="dropdown__link" href="/community/bookkeeper-proposals">BookKeeper proposals (BP)</a></li></ul></div><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Project</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/project/who">Who are we?</a></li><li><a class="dropdown__link" href="/project/bylaws">Bylaws</a></li><li><a href="https://apache.org/licenses" target="_blank" rel="noopener noreferrer" class="dropdown__link">License<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a class="dropdown__link" href="/project/privacy">Privacy policy</a></li><li><a href="https://www.apache.org/foundation/sponsorship.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Sponsorship<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a href="https://www.apache.org/foundation/thanks.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Thanks<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div></div><div class="navbar__items navbar__items--right"><div class="navbar__item dropdown dropdown--hoverable dropdown--right"><a class="navbar__link" aria-haspopup="true" aria-expanded="false" role="button" href="/docs/overview/">4.17.0</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/docs/next/overview/">Next</a></li><li><a class="dropdown__link" href="/docs/overview/">4.17.0</a></li><li><a class="dropdown__link" href="/docs/4.16.5/overview/">4.16.5</a></li><li><a class="dropdown__link" href="/docs/4.15.5/overview/">4.15.5</a></li><li><a class="dropdown__link" href="/docs/4.14.8/overview/">4.14.8</a></li><li><a class="dropdown__link" href="/docs/4.13.0/overview/">4.13.0</a></li><li><a class="dropdown__link" href="/docs/4.12.1/overview/">4.12.1</a></li><li><a class="dropdown__link" href="/docs/4.11.1/overview/">4.11.1</a></li><li><a class="dropdown__link" href="/docs/4.10.0/overview/">4.10.0</a></li><li><a class="dropdown__link" href="/docs/4.9.2/overview/">4.9.2</a></li><li><a class="dropdown__link" href="/docs/4.8.2/overview/">4.8.2</a></li><li><a class="dropdown__link" href="/docs/4.7.3/overview/">4.7.3</a></li><li><a class="dropdown__link" href="/docs/4.6.2/overview/">4.6.2</a></li><li><a class="dropdown__link" href="/docs/4.5.1/overview/">4.5.1</a></li></ul></div><a class="navbar__item navbar__link" href="/releases">Download</a><div class="toggle_vylO colorModeToggle_DEke"><button class="clean-btn toggleButton_gllP toggleButtonDisabled_aARS" type="button" disabled="" title="Switch between dark and light mode (currently light mode)" aria-label="Switch between dark and light mode (currently light mode)" aria-live="polite"><svg viewBox="0 0 24 24" width="24" height="24" class="lightToggleIcon_pyhR"><path fill="currentColor" d="M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"></path></svg><svg viewBox="0 0 24 24" width="24" height="24" class="darkToggleIcon_wfgR"><path fill="currentColor" d="M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"></path></svg></button></div><div class="searchBox_ZlJk"></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div></nav><div id="docusaurus_skipToContent_fallback" class="main-wrapper mainWrapper_z2l0"><main class="container container--fluid margin-vert--lg"><div class="row mdxPageWrapper_j9I6"><div class="col col--8"><article><h1>BP-62 New API for batched reads</h1><h1>Motivation</h1><p>The BookKeeper client has provided an API <!-- -->[0]<!-- --> that allows for the efficient reading of entries <!-- -->[1]<!-- --> from bookies.
 While users can specify a start and end entry ID for a ledger <!-- -->[2]<!-- --> according to the API&#x27;s definition,
 the reality is that the bookie server can only read a single entry at a time. Consequently, the BookKeeper client is
 required to send a request for each entry to the bookies based on the user-specified start and end entry IDs.
@@ -109,7 +109,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/bps/BP-66-support-throttling-for-zookeeper-read-during-rereplication/index.html b/content/bps/BP-66-support-throttling-for-zookeeper-read-during-rereplication/index.html
index 4fdc2cd..8bc68ac 100644
--- a/content/bps/BP-66-support-throttling-for-zookeeper-read-during-rereplication/index.html
+++ b/content/bps/BP-66-support-throttling-for-zookeeper-read-during-rereplication/index.html
@@ -4,12 +4,12 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">BP-66: support throttling for zookeeper read during rereplication | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/bps/BP-66-support-throttling-for-zookeeper-read-during-rereplication"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docusaurus_tag" content="default"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docsearch:docusaurus_tag" content="default"><meta data-rh="true" property="og:title" content="BP-66: support throttling for zookeeper read during rereplication | Apache BookKeeper"><meta data-rh="true" name="description" content="Motivation"><meta data-rh="true" property="og:description" content="Motivation"><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/bps/BP-66-support-throttling-for-zookeeper-read-during-rereplication"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/bps/BP-66-support-throttling-for-zookeeper-read-during-rereplication" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/bps/BP-66-support-throttling-for-zookeeper-read-during-rereplication" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
-<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navbar__brand" href="/"><div class="navbar__logo"><img src="/img/bk-logo.svg" alt="Apache Bookkeeper" class="themedImage_ToTc themedImage--light_HNdA"><img src="/img/bk-logo.svg" alt="Apache Bookkeeper" class="themedImage_ToTc themedImage--dark_i4oU"></div><b class="navbar__title text--truncate">Apache BookKeeper</b></a><a class="navbar__item navbar__link" href="/docs/overview/">Documentation</a><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Community</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/community/mailing-lists">Mailing lists</a></li><li><a class="dropdown__link" href="/community/slack">Slack</a></li><li><a href="https://github.com/apache/bookkeeper/issues" target="_blank" rel="noopener noreferrer" class="dropdown__link">Github issues<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a class="dropdown__link" href="/community/releases">Release management</a></li><li><a class="dropdown__link" href="/community/meeting">Community meetings</a></li><li><a class="dropdown__link" href="/community/contributing">Contribution guide</a></li><li><a class="dropdown__link" href="/community/coding-guide">Coding guide</a></li><li><a class="dropdown__link" href="/community/testing">Testing guide</a></li><li><a class="dropdown__link" href="/community/issue-report">Issue report guide</a></li><li><a class="dropdown__link" href="/community/release-guide">Release guide</a></li><li><a class="dropdown__link" href="/community/presentations">Presentations</a></li><li><a class="dropdown__link" href="/community/bookkeeper-proposals">BookKeeper proposals (BP)</a></li></ul></div><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Project</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/project/who">Who are we?</a></li><li><a class="dropdown__link" href="/project/bylaws">Bylaws</a></li><li><a href="https://apache.org/licenses" target="_blank" rel="noopener noreferrer" class="dropdown__link">License<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a class="dropdown__link" href="/project/privacy">Privacy policy</a></li><li><a href="https://www.apache.org/foundation/sponsorship.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Sponsorship<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a href="https://www.apache.org/foundation/thanks.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Thanks<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div></div><div class="navbar__items navbar__items--right"><div class="navbar__item dropdown dropdown--hoverable dropdown--right"><a class="navbar__link" aria-haspopup="true" aria-expanded="false" role="button" href="/docs/admin/autorecovery">4.17.0</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/docs/next/overview/">Next</a></li><li><a class="dropdown__link" href="/docs/admin/autorecovery">4.17.0</a></li><li><a class="dropdown__link" href="/docs/4.16.5/overview/">4.16.5</a></li><li><a class="dropdown__link" href="/docs/4.15.5/overview/">4.15.5</a></li><li><a class="dropdown__link" href="/docs/4.14.8/overview/">4.14.8</a></li><li><a class="dropdown__link" href="/docs/4.13.0/overview/">4.13.0</a></li><li><a class="dropdown__link" href="/docs/4.12.1/overview/">4.12.1</a></li><li><a class="dropdown__link" href="/docs/4.11.1/overview/">4.11.1</a></li><li><a class="dropdown__link" href="/docs/4.10.0/overview/">4.10.0</a></li><li><a class="dropdown__link" href="/docs/4.9.2/overview/">4.9.2</a></li><li><a class="dropdown__link" href="/docs/4.8.2/overview/">4.8.2</a></li><li><a class="dropdown__link" href="/docs/4.7.3/overview/">4.7.3</a></li><li><a class="dropdown__link" href="/docs/4.6.2/overview/">4.6.2</a></li><li><a class="dropdown__link" href="/docs/4.5.1/overview/">4.5.1</a></li></ul></div><a class="navbar__item navbar__link" href="/releases">Download</a><div class="toggle_vylO colorModeToggle_DEke"><button class="clean-btn toggleButton_gllP toggleButtonDisabled_aARS" type="button" disabled="" title="Switch between dark and light mode (currently light mode)" aria-label="Switch between dark and light mode (currently light mode)" aria-live="polite"><svg viewBox="0 0 24 24" width="24" height="24" class="lightToggleIcon_pyhR"><path fill="currentColor" d="M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"></path></svg><svg viewBox="0 0 24 24" width="24" height="24" class="darkToggleIcon_wfgR"><path fill="currentColor" d="M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"></path></svg></button></div><div class="searchBox_ZlJk"></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div></nav><div id="docusaurus_skipToContent_fallback" class="main-wrapper mainWrapper_z2l0"><main class="container container--fluid margin-vert--lg"><div class="row mdxPageWrapper_j9I6"><div class="col col--8"><article><h1>BP-66: support throttling for zookeeper read during rereplication</h1><h3 class="anchor anchorWithStickyNavbar_LWe7" id="motivation">Motivation<a href="#motivation" class="hash-link" aria-label="Direct link to Motivation" title="Direct link to Motivation">​</a></h3><p>Each time the cluster triggers the re-replication, all replicators will read data from zookeeper. This can cause a great
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navbar__brand" href="/"><div class="navbar__logo"><img src="/img/bk-logo.svg" alt="Apache Bookkeeper" class="themedImage_ToTc themedImage--light_HNdA"><img src="/img/bk-logo.svg" alt="Apache Bookkeeper" class="themedImage_ToTc themedImage--dark_i4oU"></div><b class="navbar__title text--truncate">Apache BookKeeper</b></a><a class="navbar__item navbar__link" href="/docs/overview/">Documentation</a><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Community</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/community/mailing-lists">Mailing lists</a></li><li><a class="dropdown__link" href="/community/slack">Slack</a></li><li><a href="https://github.com/apache/bookkeeper/issues" target="_blank" rel="noopener noreferrer" class="dropdown__link">Github issues<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a class="dropdown__link" href="/community/releases">Release management</a></li><li><a class="dropdown__link" href="/community/meeting">Community meetings</a></li><li><a class="dropdown__link" href="/community/contributing">Contribution guide</a></li><li><a class="dropdown__link" href="/community/coding-guide">Coding guide</a></li><li><a class="dropdown__link" href="/community/testing">Testing guide</a></li><li><a class="dropdown__link" href="/community/issue-report">Issue report guide</a></li><li><a class="dropdown__link" href="/community/release-guide">Release guide</a></li><li><a class="dropdown__link" href="/community/presentations">Presentations</a></li><li><a class="dropdown__link" href="/community/bookkeeper-proposals">BookKeeper proposals (BP)</a></li></ul></div><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Project</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/project/who">Who are we?</a></li><li><a class="dropdown__link" href="/project/bylaws">Bylaws</a></li><li><a href="https://apache.org/licenses" target="_blank" rel="noopener noreferrer" class="dropdown__link">License<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a class="dropdown__link" href="/project/privacy">Privacy policy</a></li><li><a href="https://www.apache.org/foundation/sponsorship.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Sponsorship<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a href="https://www.apache.org/foundation/thanks.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Thanks<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div></div><div class="navbar__items navbar__items--right"><div class="navbar__item dropdown dropdown--hoverable dropdown--right"><a class="navbar__link" aria-haspopup="true" aria-expanded="false" role="button" href="/docs/overview/">4.17.0</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/docs/next/overview/">Next</a></li><li><a class="dropdown__link" href="/docs/overview/">4.17.0</a></li><li><a class="dropdown__link" href="/docs/4.16.5/overview/">4.16.5</a></li><li><a class="dropdown__link" href="/docs/4.15.5/overview/">4.15.5</a></li><li><a class="dropdown__link" href="/docs/4.14.8/overview/">4.14.8</a></li><li><a class="dropdown__link" href="/docs/4.13.0/overview/">4.13.0</a></li><li><a class="dropdown__link" href="/docs/4.12.1/overview/">4.12.1</a></li><li><a class="dropdown__link" href="/docs/4.11.1/overview/">4.11.1</a></li><li><a class="dropdown__link" href="/docs/4.10.0/overview/">4.10.0</a></li><li><a class="dropdown__link" href="/docs/4.9.2/overview/">4.9.2</a></li><li><a class="dropdown__link" href="/docs/4.8.2/overview/">4.8.2</a></li><li><a class="dropdown__link" href="/docs/4.7.3/overview/">4.7.3</a></li><li><a class="dropdown__link" href="/docs/4.6.2/overview/">4.6.2</a></li><li><a class="dropdown__link" href="/docs/4.5.1/overview/">4.5.1</a></li></ul></div><a class="navbar__item navbar__link" href="/releases">Download</a><div class="toggle_vylO colorModeToggle_DEke"><button class="clean-btn toggleButton_gllP toggleButtonDisabled_aARS" type="button" disabled="" title="Switch between dark and light mode (currently light mode)" aria-label="Switch between dark and light mode (currently light mode)" aria-live="polite"><svg viewBox="0 0 24 24" width="24" height="24" class="lightToggleIcon_pyhR"><path fill="currentColor" d="M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"></path></svg><svg viewBox="0 0 24 24" width="24" height="24" class="darkToggleIcon_wfgR"><path fill="currentColor" d="M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"></path></svg></button></div><div class="searchBox_ZlJk"></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div></nav><div id="docusaurus_skipToContent_fallback" class="main-wrapper mainWrapper_z2l0"><main class="container container--fluid margin-vert--lg"><div class="row mdxPageWrapper_j9I6"><div class="col col--8"><article><h1>BP-66: support throttling for zookeeper read during rereplication</h1><h3 class="anchor anchorWithStickyNavbar_LWe7" id="motivation">Motivation<a href="#motivation" class="hash-link" aria-label="Direct link to Motivation" title="Direct link to Motivation">​</a></h3><p>Each time the cluster triggers the re-replication, all replicators will read data from zookeeper. This can cause a great
 pressure on Zookeeper. We need to support throttling for zookeeper read of re-replication.</p><p>For example, in a Pulsar cluster, we enable auto-recovery for every bookie. There are 400 bookies in a cluster, which
 means there are 400 replicators in the cluster.
 And there are about 3000 ledgers in each bookie, 1/3 of them are small ledgers, whose size is less than 0.1MB, that is
@@ -30,7 +30,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/bps/BP-template/index.html b/content/bps/BP-template/index.html
index 63a1ae4..7acc97d 100644
--- a/content/bps/BP-template/index.html
+++ b/content/bps/BP-template/index.html
@@ -4,12 +4,12 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">BP-XYZ: caption of bookkeeper proposal | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/bps/BP-template"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docusaurus_tag" content="default"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docsearch:docusaurus_tag" content="default"><meta data-rh="true" property="og:title" content="BP-XYZ: caption of bookkeeper proposal | Apache BookKeeper"><meta data-rh="true" name="description" content="Motivation"><meta data-rh="true" property="og:description" content="Motivation"><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/bps/BP-template"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/bps/BP-template" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/bps/BP-template" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
-<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navbar__brand" href="/"><div class="navbar__logo"><img src="/img/bk-logo.svg" alt="Apache Bookkeeper" class="themedImage_ToTc themedImage--light_HNdA"><img src="/img/bk-logo.svg" alt="Apache Bookkeeper" class="themedImage_ToTc themedImage--dark_i4oU"></div><b class="navbar__title text--truncate">Apache BookKeeper</b></a><a class="navbar__item navbar__link" href="/docs/overview/">Documentation</a><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Community</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/community/mailing-lists">Mailing lists</a></li><li><a class="dropdown__link" href="/community/slack">Slack</a></li><li><a href="https://github.com/apache/bookkeeper/issues" target="_blank" rel="noopener noreferrer" class="dropdown__link">Github issues<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a class="dropdown__link" href="/community/releases">Release management</a></li><li><a class="dropdown__link" href="/community/meeting">Community meetings</a></li><li><a class="dropdown__link" href="/community/contributing">Contribution guide</a></li><li><a class="dropdown__link" href="/community/coding-guide">Coding guide</a></li><li><a class="dropdown__link" href="/community/testing">Testing guide</a></li><li><a class="dropdown__link" href="/community/issue-report">Issue report guide</a></li><li><a class="dropdown__link" href="/community/release-guide">Release guide</a></li><li><a class="dropdown__link" href="/community/presentations">Presentations</a></li><li><a class="dropdown__link" href="/community/bookkeeper-proposals">BookKeeper proposals (BP)</a></li></ul></div><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Project</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/project/who">Who are we?</a></li><li><a class="dropdown__link" href="/project/bylaws">Bylaws</a></li><li><a href="https://apache.org/licenses" target="_blank" rel="noopener noreferrer" class="dropdown__link">License<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a class="dropdown__link" href="/project/privacy">Privacy policy</a></li><li><a href="https://www.apache.org/foundation/sponsorship.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Sponsorship<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a href="https://www.apache.org/foundation/thanks.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Thanks<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div></div><div class="navbar__items navbar__items--right"><div class="navbar__item dropdown dropdown--hoverable dropdown--right"><a class="navbar__link" aria-haspopup="true" aria-expanded="false" role="button" href="/docs/admin/autorecovery">4.17.0</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/docs/next/overview/">Next</a></li><li><a class="dropdown__link" href="/docs/admin/autorecovery">4.17.0</a></li><li><a class="dropdown__link" href="/docs/4.16.5/overview/">4.16.5</a></li><li><a class="dropdown__link" href="/docs/4.15.5/overview/">4.15.5</a></li><li><a class="dropdown__link" href="/docs/4.14.8/overview/">4.14.8</a></li><li><a class="dropdown__link" href="/docs/4.13.0/overview/">4.13.0</a></li><li><a class="dropdown__link" href="/docs/4.12.1/overview/">4.12.1</a></li><li><a class="dropdown__link" href="/docs/4.11.1/overview/">4.11.1</a></li><li><a class="dropdown__link" href="/docs/4.10.0/overview/">4.10.0</a></li><li><a class="dropdown__link" href="/docs/4.9.2/overview/">4.9.2</a></li><li><a class="dropdown__link" href="/docs/4.8.2/overview/">4.8.2</a></li><li><a class="dropdown__link" href="/docs/4.7.3/overview/">4.7.3</a></li><li><a class="dropdown__link" href="/docs/4.6.2/overview/">4.6.2</a></li><li><a class="dropdown__link" href="/docs/4.5.1/overview/">4.5.1</a></li></ul></div><a class="navbar__item navbar__link" href="/releases">Download</a><div class="toggle_vylO colorModeToggle_DEke"><button class="clean-btn toggleButton_gllP toggleButtonDisabled_aARS" type="button" disabled="" title="Switch between dark and light mode (currently light mode)" aria-label="Switch between dark and light mode (currently light mode)" aria-live="polite"><svg viewBox="0 0 24 24" width="24" height="24" class="lightToggleIcon_pyhR"><path fill="currentColor" d="M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"></path></svg><svg viewBox="0 0 24 24" width="24" height="24" class="darkToggleIcon_wfgR"><path fill="currentColor" d="M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"></path></svg></button></div><div class="searchBox_ZlJk"></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div></nav><div id="docusaurus_skipToContent_fallback" class="main-wrapper mainWrapper_z2l0"><main class="container container--fluid margin-vert--lg"><div class="row mdxPageWrapper_j9I6"><div class="col col--8"><article><h1>BP-XYZ: caption of bookkeeper proposal</h1><h3 class="anchor anchorWithStickyNavbar_LWe7" id="motivation">Motivation<a href="#motivation" class="hash-link" aria-label="Direct link to Motivation" title="Direct link to Motivation">​</a></h3><p><em>Describe the problems you are trying to solve</em></p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="public-interfaces">Public Interfaces<a href="#public-interfaces" class="hash-link" aria-label="Direct link to Public Interfaces" title="Direct link to Public Interfaces">​</a></h3><p><em>Briefly list any new interfaces that will be introduced as part of this proposal or any existing interfaces that will be removed or changed. The purpose of this section is to concisely call out the public contract that will come along with this feature.</em></p><p>A public interface is any change to the following:</p><ul><li>Data format, Metadata format</li><li>The wire protocol and api behavior</li><li>Any class in the public packages</li><li>Monitoring</li><li>Command line tools and arguments</li><li>Anything else that will likely break existing users in some way when they upgrade</li></ul><h3 class="anchor anchorWithStickyNavbar_LWe7" id="proposed-changes">Proposed Changes<a href="#proposed-changes" class="hash-link" aria-label="Direct link to Proposed Changes" title="Direct link to Proposed Changes">​</a></h3><p><em>Describe the new thing you want to do in appropriate detail. This may be fairly extensive and have large subsections of its own. Or it may be a few sentences. Use judgement based on the scope of the change.</em></p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="compatibility-deprecation-and-migration-plan">Compatibility, Deprecation, and Migration Plan<a href="#compatibility-deprecation-and-migration-plan" class="hash-link" aria-label="Direct link to Compatibility, Deprecation, and Migration Plan" title="Direct link to Compatibility, Deprecation, and Migration Plan">​</a></h3><ul><li>What impact (if any) will there be on existing users? </li><li>If we are changing behavior how will we phase out the older behavior? </li><li>If we need special migration tools, describe them here.</li><li>When will we remove the existing behavior?</li></ul><h3 class="anchor anchorWithStickyNavbar_LWe7" id="test-plan">Test Plan<a href="#test-plan" class="hash-link" aria-label="Direct link to Test Plan" title="Direct link to Test Plan">​</a></h3><p><em>Describe in few sentences how the BP will be tested. We are mostly interested in system tests (since unit-tests are specific to implementation details). How will we know that the implementation works as expected? How will we know nothing broke?</em></p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="rejected-alternatives">Rejected Alternatives<a href="#rejected-alternatives" class="hash-link" aria-label="Direct link to Rejected Alternatives" title="Direct link to Rejected Alternatives">​</a></h3><p><em>If there are alternative ways of accomplishing the same thing, what were they? The purpose of this section is to motivate why the design is the way it is and not some other way.</em></p></article></div><div class="col col--2"><div class="tableOfContents_bqdL thin-scrollbar"><ul class="table-of-contents table-of-contents__left-border"><li><a href="#motivation" class="table-of-contents__link toc-highlight">Motivation</a></li><li><a href="#public-interfaces" class="table-of-contents__link toc-highlight">Public Interfaces</a></li><li><a href="#proposed-changes" class="table-of-contents__link toc-highlight">Proposed Changes</a></li><li><a href="#compatibility-deprecation-and-migration-plan" class="table-of-contents__link toc-highlight">Compatibility, Deprecation, and Migration Plan</a></li><li><a href="#test-plan" class="table-of-contents__link toc-highlight">Test Plan</a></li><li><a href="#rejected-alternatives" class="table-of-contents__link toc-highlight">Rejected Alternatives</a></li></ul></div></div></div></main></div><footer class="footer footer--dark"><div class="container container-fluid"><div class="row footer__links"><div class="col footer__col"><div class="footer__title">Documentation</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/docs/overview">Overview</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/getting-started/installation">Getting started</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/deployment/manual">Deployment</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/admin/bookies">Administration</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/api/overview">API</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/security/overview">Security</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/development/protocol">Development</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/reference/config">Reference</a></li></ul></div><div class="col footer__col"><div class="footer__title">Community</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/community/mailing-lists">Mailing lists</a></li><li class="footer__item"><a class="footer__link-item" href="/community/slack">Slack</a></li><li class="footer__item"><a href="https://github.com/apache/bookkeeper" target="_blank" rel="noopener noreferrer" class="footer__link-item">Github<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a href="https://twitter.com/asfbookkeeper" target="_blank" rel="noopener noreferrer" class="footer__link-item">Twitter<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div><div class="col footer__col"><div class="footer__title">Project</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/project/who">Who are we?</a></li><li class="footer__item"><a class="footer__link-item" href="/project/bylaws">Bylaws</a></li><li class="footer__item"><a href="https://apache.org/licenses" target="_blank" rel="noopener noreferrer" class="footer__link-item">License<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a class="footer__link-item" href="/project/privacy">Privacy policy</a></li><li class="footer__item"><a href="https://www.apache.org/foundation/sponsorship.html" target="_blank" rel="noopener noreferrer" class="footer__link-item">Sponsorship<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a href="https://www.apache.org/foundation/thanks.html" target="_blank" rel="noopener noreferrer" class="footer__link-item">Thanks<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div></div><div class="footer__bottom text--center"><div class="footer__copyright"><footer class="footer">
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navbar__brand" href="/"><div class="navbar__logo"><img src="/img/bk-logo.svg" alt="Apache Bookkeeper" class="themedImage_ToTc themedImage--light_HNdA"><img src="/img/bk-logo.svg" alt="Apache Bookkeeper" class="themedImage_ToTc themedImage--dark_i4oU"></div><b class="navbar__title text--truncate">Apache BookKeeper</b></a><a class="navbar__item navbar__link" href="/docs/overview/">Documentation</a><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Community</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/community/mailing-lists">Mailing lists</a></li><li><a class="dropdown__link" href="/community/slack">Slack</a></li><li><a href="https://github.com/apache/bookkeeper/issues" target="_blank" rel="noopener noreferrer" class="dropdown__link">Github issues<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a class="dropdown__link" href="/community/releases">Release management</a></li><li><a class="dropdown__link" href="/community/meeting">Community meetings</a></li><li><a class="dropdown__link" href="/community/contributing">Contribution guide</a></li><li><a class="dropdown__link" href="/community/coding-guide">Coding guide</a></li><li><a class="dropdown__link" href="/community/testing">Testing guide</a></li><li><a class="dropdown__link" href="/community/issue-report">Issue report guide</a></li><li><a class="dropdown__link" href="/community/release-guide">Release guide</a></li><li><a class="dropdown__link" href="/community/presentations">Presentations</a></li><li><a class="dropdown__link" href="/community/bookkeeper-proposals">BookKeeper proposals (BP)</a></li></ul></div><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Project</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/project/who">Who are we?</a></li><li><a class="dropdown__link" href="/project/bylaws">Bylaws</a></li><li><a href="https://apache.org/licenses" target="_blank" rel="noopener noreferrer" class="dropdown__link">License<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a class="dropdown__link" href="/project/privacy">Privacy policy</a></li><li><a href="https://www.apache.org/foundation/sponsorship.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Sponsorship<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a href="https://www.apache.org/foundation/thanks.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Thanks<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div></div><div class="navbar__items navbar__items--right"><div class="navbar__item dropdown dropdown--hoverable dropdown--right"><a class="navbar__link" aria-haspopup="true" aria-expanded="false" role="button" href="/docs/overview/">4.17.0</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/docs/next/overview/">Next</a></li><li><a class="dropdown__link" href="/docs/overview/">4.17.0</a></li><li><a class="dropdown__link" href="/docs/4.16.5/overview/">4.16.5</a></li><li><a class="dropdown__link" href="/docs/4.15.5/overview/">4.15.5</a></li><li><a class="dropdown__link" href="/docs/4.14.8/overview/">4.14.8</a></li><li><a class="dropdown__link" href="/docs/4.13.0/overview/">4.13.0</a></li><li><a class="dropdown__link" href="/docs/4.12.1/overview/">4.12.1</a></li><li><a class="dropdown__link" href="/docs/4.11.1/overview/">4.11.1</a></li><li><a class="dropdown__link" href="/docs/4.10.0/overview/">4.10.0</a></li><li><a class="dropdown__link" href="/docs/4.9.2/overview/">4.9.2</a></li><li><a class="dropdown__link" href="/docs/4.8.2/overview/">4.8.2</a></li><li><a class="dropdown__link" href="/docs/4.7.3/overview/">4.7.3</a></li><li><a class="dropdown__link" href="/docs/4.6.2/overview/">4.6.2</a></li><li><a class="dropdown__link" href="/docs/4.5.1/overview/">4.5.1</a></li></ul></div><a class="navbar__item navbar__link" href="/releases">Download</a><div class="toggle_vylO colorModeToggle_DEke"><button class="clean-btn toggleButton_gllP toggleButtonDisabled_aARS" type="button" disabled="" title="Switch between dark and light mode (currently light mode)" aria-label="Switch between dark and light mode (currently light mode)" aria-live="polite"><svg viewBox="0 0 24 24" width="24" height="24" class="lightToggleIcon_pyhR"><path fill="currentColor" d="M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"></path></svg><svg viewBox="0 0 24 24" width="24" height="24" class="darkToggleIcon_wfgR"><path fill="currentColor" d="M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"></path></svg></button></div><div class="searchBox_ZlJk"></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div></nav><div id="docusaurus_skipToContent_fallback" class="main-wrapper mainWrapper_z2l0"><main class="container container--fluid margin-vert--lg"><div class="row mdxPageWrapper_j9I6"><div class="col col--8"><article><h1>BP-XYZ: caption of bookkeeper proposal</h1><h3 class="anchor anchorWithStickyNavbar_LWe7" id="motivation">Motivation<a href="#motivation" class="hash-link" aria-label="Direct link to Motivation" title="Direct link to Motivation">​</a></h3><p><em>Describe the problems you are trying to solve</em></p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="public-interfaces">Public Interfaces<a href="#public-interfaces" class="hash-link" aria-label="Direct link to Public Interfaces" title="Direct link to Public Interfaces">​</a></h3><p><em>Briefly list any new interfaces that will be introduced as part of this proposal or any existing interfaces that will be removed or changed. The purpose of this section is to concisely call out the public contract that will come along with this feature.</em></p><p>A public interface is any change to the following:</p><ul><li>Data format, Metadata format</li><li>The wire protocol and api behavior</li><li>Any class in the public packages</li><li>Monitoring</li><li>Command line tools and arguments</li><li>Anything else that will likely break existing users in some way when they upgrade</li></ul><h3 class="anchor anchorWithStickyNavbar_LWe7" id="proposed-changes">Proposed Changes<a href="#proposed-changes" class="hash-link" aria-label="Direct link to Proposed Changes" title="Direct link to Proposed Changes">​</a></h3><p><em>Describe the new thing you want to do in appropriate detail. This may be fairly extensive and have large subsections of its own. Or it may be a few sentences. Use judgement based on the scope of the change.</em></p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="compatibility-deprecation-and-migration-plan">Compatibility, Deprecation, and Migration Plan<a href="#compatibility-deprecation-and-migration-plan" class="hash-link" aria-label="Direct link to Compatibility, Deprecation, and Migration Plan" title="Direct link to Compatibility, Deprecation, and Migration Plan">​</a></h3><ul><li>What impact (if any) will there be on existing users? </li><li>If we are changing behavior how will we phase out the older behavior? </li><li>If we need special migration tools, describe them here.</li><li>When will we remove the existing behavior?</li></ul><h3 class="anchor anchorWithStickyNavbar_LWe7" id="test-plan">Test Plan<a href="#test-plan" class="hash-link" aria-label="Direct link to Test Plan" title="Direct link to Test Plan">​</a></h3><p><em>Describe in few sentences how the BP will be tested. We are mostly interested in system tests (since unit-tests are specific to implementation details). How will we know that the implementation works as expected? How will we know nothing broke?</em></p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="rejected-alternatives">Rejected Alternatives<a href="#rejected-alternatives" class="hash-link" aria-label="Direct link to Rejected Alternatives" title="Direct link to Rejected Alternatives">​</a></h3><p><em>If there are alternative ways of accomplishing the same thing, what were they? The purpose of this section is to motivate why the design is the way it is and not some other way.</em></p></article></div><div class="col col--2"><div class="tableOfContents_bqdL thin-scrollbar"><ul class="table-of-contents table-of-contents__left-border"><li><a href="#motivation" class="table-of-contents__link toc-highlight">Motivation</a></li><li><a href="#public-interfaces" class="table-of-contents__link toc-highlight">Public Interfaces</a></li><li><a href="#proposed-changes" class="table-of-contents__link toc-highlight">Proposed Changes</a></li><li><a href="#compatibility-deprecation-and-migration-plan" class="table-of-contents__link toc-highlight">Compatibility, Deprecation, and Migration Plan</a></li><li><a href="#test-plan" class="table-of-contents__link toc-highlight">Test Plan</a></li><li><a href="#rejected-alternatives" class="table-of-contents__link toc-highlight">Rejected Alternatives</a></li></ul></div></div></div></main></div><footer class="footer footer--dark"><div class="container container-fluid"><div class="row footer__links"><div class="col footer__col"><div class="footer__title">Documentation</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/docs/overview">Overview</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/getting-started/installation">Getting started</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/deployment/manual">Deployment</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/admin/bookies">Administration</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/api/overview">API</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/security/overview">Security</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/development/protocol">Development</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/reference/config">Reference</a></li></ul></div><div class="col footer__col"><div class="footer__title">Community</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/community/mailing-lists">Mailing lists</a></li><li class="footer__item"><a class="footer__link-item" href="/community/slack">Slack</a></li><li class="footer__item"><a href="https://github.com/apache/bookkeeper" target="_blank" rel="noopener noreferrer" class="footer__link-item">Github<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a href="https://twitter.com/asfbookkeeper" target="_blank" rel="noopener noreferrer" class="footer__link-item">Twitter<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div><div class="col footer__col"><div class="footer__title">Project</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/project/who">Who are we?</a></li><li class="footer__item"><a class="footer__link-item" href="/project/bylaws">Bylaws</a></li><li class="footer__item"><a href="https://apache.org/licenses" target="_blank" rel="noopener noreferrer" class="footer__link-item">License<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a class="footer__link-item" href="/project/privacy">Privacy policy</a></li><li class="footer__item"><a href="https://www.apache.org/foundation/sponsorship.html" target="_blank" rel="noopener noreferrer" class="footer__link-item">Sponsorship<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a href="https://www.apache.org/foundation/thanks.html" target="_blank" rel="noopener noreferrer" class="footer__link-item">Thanks<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div></div><div class="footer__bottom text--center"><div class="footer__copyright"><footer class="footer">
         <div class="container">
           <div class="content has-text-centered">
             <p>
@@ -22,7 +22,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/community/bookkeeper-proposals/index.html b/content/community/bookkeeper-proposals/index.html
index 077d123..ab1b9d2 100644
--- a/content/community/bookkeeper-proposals/index.html
+++ b/content/community/bookkeeper-proposals/index.html
@@ -4,12 +4,12 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">BookKeeper Proposals | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/community/bookkeeper-proposals"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docusaurus_tag" content="default"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docsearch:docusaurus_tag" content="default"><meta data-rh="true" property="og:title" content="BookKeeper Proposals | Apache BookKeeper"><meta data-rh="true" name="description" content="This page describes a proposed BookKeeper Proposal (BP) process for proposing a major change to BookKeeper."><meta data-rh="true" property="og:description" content="This page describes a proposed BookKeeper Proposal (BP) process for proposing a major change to BookKeeper."><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/community/bookkeeper-proposals"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/community/bookkeeper-proposals" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/community/bookkeeper-proposals" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
-<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navbar__brand" href="/"><div class="navbar__logo"><img src="/img/bk-logo.svg" alt="Apache Bookkeeper" class="themedImage_ToTc themedImage--light_HNdA"><img src="/img/bk-logo.svg" alt="Apache Bookkeeper" class="themedImage_ToTc themedImage--dark_i4oU"></div><b class="navbar__title text--truncate">Apache BookKeeper</b></a><a class="navbar__item navbar__link" href="/docs/overview/">Documentation</a><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Community</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/community/mailing-lists">Mailing lists</a></li><li><a class="dropdown__link" href="/community/slack">Slack</a></li><li><a href="https://github.com/apache/bookkeeper/issues" target="_blank" rel="noopener noreferrer" class="dropdown__link">Github issues<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a class="dropdown__link" href="/community/releases">Release management</a></li><li><a class="dropdown__link" href="/community/meeting">Community meetings</a></li><li><a class="dropdown__link" href="/community/contributing">Contribution guide</a></li><li><a class="dropdown__link" href="/community/coding-guide">Coding guide</a></li><li><a class="dropdown__link" href="/community/testing">Testing guide</a></li><li><a class="dropdown__link" href="/community/issue-report">Issue report guide</a></li><li><a class="dropdown__link" href="/community/release-guide">Release guide</a></li><li><a class="dropdown__link" href="/community/presentations">Presentations</a></li><li><a aria-current="page" class="dropdown__link dropdown__link--active" href="/community/bookkeeper-proposals">BookKeeper proposals (BP)</a></li></ul></div><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Project</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/project/who">Who are we?</a></li><li><a class="dropdown__link" href="/project/bylaws">Bylaws</a></li><li><a href="https://apache.org/licenses" target="_blank" rel="noopener noreferrer" class="dropdown__link">License<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a class="dropdown__link" href="/project/privacy">Privacy policy</a></li><li><a href="https://www.apache.org/foundation/sponsorship.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Sponsorship<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a href="https://www.apache.org/foundation/thanks.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Thanks<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div></div><div class="navbar__items navbar__items--right"><div class="navbar__item dropdown dropdown--hoverable dropdown--right"><a class="navbar__link" aria-haspopup="true" aria-expanded="false" role="button" href="/docs/admin/autorecovery">4.17.0</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/docs/next/overview/">Next</a></li><li><a class="dropdown__link" href="/docs/admin/autorecovery">4.17.0</a></li><li><a class="dropdown__link" href="/docs/4.16.5/overview/">4.16.5</a></li><li><a class="dropdown__link" href="/docs/4.15.5/overview/">4.15.5</a></li><li><a class="dropdown__link" href="/docs/4.14.8/overview/">4.14.8</a></li><li><a class="dropdown__link" href="/docs/4.13.0/overview/">4.13.0</a></li><li><a class="dropdown__link" href="/docs/4.12.1/overview/">4.12.1</a></li><li><a class="dropdown__link" href="/docs/4.11.1/overview/">4.11.1</a></li><li><a class="dropdown__link" href="/docs/4.10.0/overview/">4.10.0</a></li><li><a class="dropdown__link" href="/docs/4.9.2/overview/">4.9.2</a></li><li><a class="dropdown__link" href="/docs/4.8.2/overview/">4.8.2</a></li><li><a class="dropdown__link" href="/docs/4.7.3/overview/">4.7.3</a></li><li><a class="dropdown__link" href="/docs/4.6.2/overview/">4.6.2</a></li><li><a class="dropdown__link" href="/docs/4.5.1/overview/">4.5.1</a></li></ul></div><a class="navbar__item navbar__link" href="/releases">Download</a><div class="toggle_vylO colorModeToggle_DEke"><button class="clean-btn toggleButton_gllP toggleButtonDisabled_aARS" type="button" disabled="" title="Switch between dark and light mode (currently light mode)" aria-label="Switch between dark and light mode (currently light mode)" aria-live="polite"><svg viewBox="0 0 24 24" width="24" height="24" class="lightToggleIcon_pyhR"><path fill="currentColor" d="M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"></path></svg><svg viewBox="0 0 24 24" width="24" height="24" class="darkToggleIcon_wfgR"><path fill="currentColor" d="M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"></path></svg></button></div><div class="searchBox_ZlJk"></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div></nav><div id="docusaurus_skipToContent_fallback" class="main-wrapper mainWrapper_z2l0"><main class="container container--fluid margin-vert--lg"><div class="row mdxPageWrapper_j9I6"><div class="col col--8"><article><h1>BookKeeper Proposals</h1><p>This page describes a proposed <em>BookKeeper Proposal (BP)</em> process for proposing a major change to BookKeeper.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="process">Process<a href="#process" class="hash-link" aria-label="Direct link to Process" title="Direct link to Process">​</a></h2><h3 class="anchor anchorWithStickyNavbar_LWe7" id="what-is-considered-a-major-change-that-needs-a-bp">What is considered a &quot;major change&quot; that needs a BP?<a href="#what-is-considered-a-major-change-that-needs-a-bp" class="hash-link" aria-label="Direct link to What is considered a &quot;major change&quot; that needs a BP?" title="Direct link to What is considered a &quot;major change&quot; that needs a BP?">​</a></h3><p>Any of the following should be considered a major change:</p><ul><li>Any major new feature, subsystem, or piece of functionality</li><li>Any change that impacts the public interfaces of the project</li><li>Any change that impacts developer workflow of the project</li></ul><p>All the following are public interfaces that people build around:</p><ul><li>Binary log format</li><li>The network protocol and api behavior</li><li>Configuration, especially client configuration</li><li>Monitoring/Stats provider</li><li>Command line tools and arguments</li></ul><h3 class="anchor anchorWithStickyNavbar_LWe7" id="what-should-be-included-in-a-bp">What should be included in a BP?<a href="#what-should-be-included-in-a-bp" class="hash-link" aria-label="Direct link to What should be included in a BP?" title="Direct link to What should be included in a BP?">​</a></h3><p>A BP should contain the following sections:</p><ul><li><em>Motivation</em>: describe the problem to be solved</li><li><em>Proposed Change</em>: describe the new thing you want to do. This may be fairly extensive and have large subsections of its own. Or it may be a few sentences, depending on the scope of the change.</li><li><em>New or Changed Public Interfaces</em>: impact to any of the &quot;compatibility commitments&quot; described above. We want to call these out in particular so everyone thinks about them.</li><li><em>Migration Plan and Compatibility</em>: if this feature requires additional support for a no-downtime upgrade describe how that will work</li><li><em>Rejected Alternatives</em>: What are the other alternatives you considered and why are they worse? The goal of this section is to help people understand why this is the best solution now, and also to prevent churn in the future when old alternatives are reconsidered.</li></ul><h3 class="anchor anchorWithStickyNavbar_LWe7" id="who-should-initiate-the-bp">Who should initiate the BP?<a href="#who-should-initiate-the-bp" class="hash-link" aria-label="Direct link to Who should initiate the BP?" title="Direct link to Who should initiate the BP?">​</a></h3><p>Anyone can initiate a BP but you shouldn&#x27;t do it unless you have an intention of getting the work done to implement it (otherwise it is silly).</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="how-to-make-a-bp">How to make a BP?<a href="#how-to-make-a-bp" class="hash-link" aria-label="Direct link to How to make a BP?" title="Direct link to How to make a BP?">​</a></h3><p>Here is the process for making a BP:</p><ol><li>Create an issue <code>BP-&lt;number&gt;: [capation of bookkeeper proposal]</code>. E.g. <code>BP-1: 64 bits ledger id support</code>.<ul><li>Take the next available BP number from this page.</li><li>Write a brief description about what BP is for in this issue. This issue will be the master issue for tracking the status of this BP and its implementations.
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navbar__brand" href="/"><div class="navbar__logo"><img src="/img/bk-logo.svg" alt="Apache Bookkeeper" class="themedImage_ToTc themedImage--light_HNdA"><img src="/img/bk-logo.svg" alt="Apache Bookkeeper" class="themedImage_ToTc themedImage--dark_i4oU"></div><b class="navbar__title text--truncate">Apache BookKeeper</b></a><a class="navbar__item navbar__link" href="/docs/overview/">Documentation</a><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Community</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/community/mailing-lists">Mailing lists</a></li><li><a class="dropdown__link" href="/community/slack">Slack</a></li><li><a href="https://github.com/apache/bookkeeper/issues" target="_blank" rel="noopener noreferrer" class="dropdown__link">Github issues<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a class="dropdown__link" href="/community/releases">Release management</a></li><li><a class="dropdown__link" href="/community/meeting">Community meetings</a></li><li><a class="dropdown__link" href="/community/contributing">Contribution guide</a></li><li><a class="dropdown__link" href="/community/coding-guide">Coding guide</a></li><li><a class="dropdown__link" href="/community/testing">Testing guide</a></li><li><a class="dropdown__link" href="/community/issue-report">Issue report guide</a></li><li><a class="dropdown__link" href="/community/release-guide">Release guide</a></li><li><a class="dropdown__link" href="/community/presentations">Presentations</a></li><li><a aria-current="page" class="dropdown__link dropdown__link--active" href="/community/bookkeeper-proposals">BookKeeper proposals (BP)</a></li></ul></div><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Project</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/project/who">Who are we?</a></li><li><a class="dropdown__link" href="/project/bylaws">Bylaws</a></li><li><a href="https://apache.org/licenses" target="_blank" rel="noopener noreferrer" class="dropdown__link">License<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a class="dropdown__link" href="/project/privacy">Privacy policy</a></li><li><a href="https://www.apache.org/foundation/sponsorship.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Sponsorship<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a href="https://www.apache.org/foundation/thanks.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Thanks<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div></div><div class="navbar__items navbar__items--right"><div class="navbar__item dropdown dropdown--hoverable dropdown--right"><a class="navbar__link" aria-haspopup="true" aria-expanded="false" role="button" href="/docs/overview/">4.17.0</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/docs/next/overview/">Next</a></li><li><a class="dropdown__link" href="/docs/overview/">4.17.0</a></li><li><a class="dropdown__link" href="/docs/4.16.5/overview/">4.16.5</a></li><li><a class="dropdown__link" href="/docs/4.15.5/overview/">4.15.5</a></li><li><a class="dropdown__link" href="/docs/4.14.8/overview/">4.14.8</a></li><li><a class="dropdown__link" href="/docs/4.13.0/overview/">4.13.0</a></li><li><a class="dropdown__link" href="/docs/4.12.1/overview/">4.12.1</a></li><li><a class="dropdown__link" href="/docs/4.11.1/overview/">4.11.1</a></li><li><a class="dropdown__link" href="/docs/4.10.0/overview/">4.10.0</a></li><li><a class="dropdown__link" href="/docs/4.9.2/overview/">4.9.2</a></li><li><a class="dropdown__link" href="/docs/4.8.2/overview/">4.8.2</a></li><li><a class="dropdown__link" href="/docs/4.7.3/overview/">4.7.3</a></li><li><a class="dropdown__link" href="/docs/4.6.2/overview/">4.6.2</a></li><li><a class="dropdown__link" href="/docs/4.5.1/overview/">4.5.1</a></li></ul></div><a class="navbar__item navbar__link" href="/releases">Download</a><div class="toggle_vylO colorModeToggle_DEke"><button class="clean-btn toggleButton_gllP toggleButtonDisabled_aARS" type="button" disabled="" title="Switch between dark and light mode (currently light mode)" aria-label="Switch between dark and light mode (currently light mode)" aria-live="polite"><svg viewBox="0 0 24 24" width="24" height="24" class="lightToggleIcon_pyhR"><path fill="currentColor" d="M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"></path></svg><svg viewBox="0 0 24 24" width="24" height="24" class="darkToggleIcon_wfgR"><path fill="currentColor" d="M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"></path></svg></button></div><div class="searchBox_ZlJk"></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div></nav><div id="docusaurus_skipToContent_fallback" class="main-wrapper mainWrapper_z2l0"><main class="container container--fluid margin-vert--lg"><div class="row mdxPageWrapper_j9I6"><div class="col col--8"><article><h1>BookKeeper Proposals</h1><p>This page describes a proposed <em>BookKeeper Proposal (BP)</em> process for proposing a major change to BookKeeper.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="process">Process<a href="#process" class="hash-link" aria-label="Direct link to Process" title="Direct link to Process">​</a></h2><h3 class="anchor anchorWithStickyNavbar_LWe7" id="what-is-considered-a-major-change-that-needs-a-bp">What is considered a &quot;major change&quot; that needs a BP?<a href="#what-is-considered-a-major-change-that-needs-a-bp" class="hash-link" aria-label="Direct link to What is considered a &quot;major change&quot; that needs a BP?" title="Direct link to What is considered a &quot;major change&quot; that needs a BP?">​</a></h3><p>Any of the following should be considered a major change:</p><ul><li>Any major new feature, subsystem, or piece of functionality</li><li>Any change that impacts the public interfaces of the project</li><li>Any change that impacts developer workflow of the project</li></ul><p>All the following are public interfaces that people build around:</p><ul><li>Binary log format</li><li>The network protocol and api behavior</li><li>Configuration, especially client configuration</li><li>Monitoring/Stats provider</li><li>Command line tools and arguments</li></ul><h3 class="anchor anchorWithStickyNavbar_LWe7" id="what-should-be-included-in-a-bp">What should be included in a BP?<a href="#what-should-be-included-in-a-bp" class="hash-link" aria-label="Direct link to What should be included in a BP?" title="Direct link to What should be included in a BP?">​</a></h3><p>A BP should contain the following sections:</p><ul><li><em>Motivation</em>: describe the problem to be solved</li><li><em>Proposed Change</em>: describe the new thing you want to do. This may be fairly extensive and have large subsections of its own. Or it may be a few sentences, depending on the scope of the change.</li><li><em>New or Changed Public Interfaces</em>: impact to any of the &quot;compatibility commitments&quot; described above. We want to call these out in particular so everyone thinks about them.</li><li><em>Migration Plan and Compatibility</em>: if this feature requires additional support for a no-downtime upgrade describe how that will work</li><li><em>Rejected Alternatives</em>: What are the other alternatives you considered and why are they worse? The goal of this section is to help people understand why this is the best solution now, and also to prevent churn in the future when old alternatives are reconsidered.</li></ul><h3 class="anchor anchorWithStickyNavbar_LWe7" id="who-should-initiate-the-bp">Who should initiate the BP?<a href="#who-should-initiate-the-bp" class="hash-link" aria-label="Direct link to Who should initiate the BP?" title="Direct link to Who should initiate the BP?">​</a></h3><p>Anyone can initiate a BP but you shouldn&#x27;t do it unless you have an intention of getting the work done to implement it (otherwise it is silly).</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="how-to-make-a-bp">How to make a BP?<a href="#how-to-make-a-bp" class="hash-link" aria-label="Direct link to How to make a BP?" title="Direct link to How to make a BP?">​</a></h3><p>Here is the process for making a BP:</p><ol><li>Create an issue <code>BP-&lt;number&gt;: [capation of bookkeeper proposal]</code>. E.g. <code>BP-1: 64 bits ledger id support</code>.<ul><li>Take the next available BP number from this page.</li><li>Write a brief description about what BP is for in this issue. This issue will be the master issue for tracking the status of this BP and its implementations.
 All the implementations of this BP should be listed and linked to this master issues.</li></ul></li><li>Write the proposal for this BP. There are two ways to write a bookkeeper proposal. You can choose to write a BP using markdown, or write a BP
 using Google Doc.<div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">- Markdown</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    - Make a copy of the [BP-Template](https://github.com/apache/bookkeeper/tree/master/site/bps/BP-template.md). Name the BP file as `BP-&lt;number&gt;-[caption-of-proposal].md`.</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    ```shell</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    $ cp site/bps/BP-template.md site/bps/BP-xyz-capation-of-proposal.md</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    ```</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    - Fill the sections listed in the BP template.</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        - issue: replace `&lt;issue-number&gt;` with the issue number.</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        - state: &quot;Under Discussion&quot;</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        - release: leave the release to `N/A`. you can only mark a release after a BP is implemented.</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">- Google Doc</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    - Make a copy of the [BP-Template](https://docs.google.com/document/d/1DsmH54LoohgwqnEjESPQNtIYxxcOy2rwonZ_TJCwws0). Name the BP file as `BP-&lt;number&gt;-[caption-of-proposal]`.</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    - Fill the sections listed in the BP template.</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div></li><li>Send a PR for this BP. Following the instructions in the pull request template.<ul><li>add <code>BP</code> label to this PR</li><li>attach the google doc link in the PR description if the BP is written in google doc</li><li>don&#x27;t associate this PR with any release or milestone</li><li>edit <code>site/community/bookkeeper-proposals.md</code>:<ul><li>bump the next bp number</li><li>add this BP to <code>Inprogress</code> section</li></ul></li></ul></li><li>You can tag committers on this RP for reviewers, or start a <code>[DISCUSS]</code> thread on Apache mailing list. If you are sending an email, please make sure that the subject
 of the thread is of the format <code>[DISCUSS] BP-&lt;number&gt;: capation of bookkeeper proposal</code>.</li><li>Once the BP is finalized, reviewed and approved by committers, the BP is accepted. The criteria for acceptance is <a href="https://bookkeeper.apache.org/project/bylaws" target="_blank" rel="noopener noreferrer">lazy majority</a>.<ol><li>Committers merge the PR after a BP is accepted. The development for this BP moves forward with implementations. The BP should be updated if there is anything changed during implementing it.</li><li>After all the implementations for a given BP are completed, a new PR should be sent for changing the state of a BP:<ul><li>state: &quot;Adopted&quot;</li><li>release: set to the release that includes this BP.</li><li>moving the BP from <code>Inprogress</code> to <code>Adopted</code>.</li></ul></li><li>The final PR for changing BP state will be used as the criteria for marking a BP as completed.</li></ol></li><li>If a BP is failed or rejected:<ol><li>Update the PR to change the state of a BP<ul><li>state: &quot;Discarded&quot;</li><li>add a paragraph at the first paragraph of this BP for describing the reasons.</li><li>moving the BP from <code>Inprogress</code> to <code>Discarded</code>.</li></ul></li><li>Once the PR is updated, committers can merge this proposal PR and close the master issue of this BP.</li></ol></li></ol><h2 class="anchor anchorWithStickyNavbar_LWe7" id="all-proposals">All Proposals<a href="#all-proposals" class="hash-link" aria-label="Direct link to All Proposals" title="Direct link to All Proposals">​</a></h2><p>This section lists all the <em>bookkeeper proposals</em> made to BookKeeper.</p><p><em>Next Proposal Number: 43</em></p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="inprogress">Inprogress<a href="#inprogress" class="hash-link" aria-label="Direct link to Inprogress" title="Direct link to Inprogress">​</a></h3><table><thead><tr><th align="left">Proposal</th><th align="left">State</th></tr></thead><tbody><tr><td align="left"><a href="https://cwiki.apache.org/confluence/display/BOOKKEEPER/BP-4+-+BookKeeper+Lifecycle+Management" target="_blank" rel="noopener noreferrer">BP-4 - BookKeeper Lifecycle Management</a></td><td align="left">Draft</td></tr><tr><td align="left"><a href="https://cwiki.apache.org/confluence/display/BOOKKEEPER/BP-8+-+Queue+based+auto+rereplicator" target="_blank" rel="noopener noreferrer">BP-8 - Queue based auto rereplicator</a></td><td align="left">Draft</td></tr><tr><td align="left"><a href="https://cwiki.apache.org/confluence/display/BOOKKEEPER/BP-12+-+Improve+documentation" target="_blank" rel="noopener noreferrer">BP-12 - Improve documentation</a></td><td align="left">Accepted</td></tr><tr><td align="left"><a href="https://cwiki.apache.org/confluence/display/BOOKKEEPER/BP-14+Relax+durability" target="_blank" rel="noopener noreferrer">BP-14 Relax durability</a></td><td align="left">Accepted</td></tr><tr><td align="left"><a href="https://cwiki.apache.org/confluence/display/BOOKKEEPER/BP-16%3A+Thin+Client+-+Remove+direct+metadata+storage+access+from+clients" target="_blank" rel="noopener noreferrer">BP-16: Thin Client - Remove direct metadata storage access from clients</a></td><td align="left">Draft</td></tr><tr><td align="left"><a href="https://cwiki.apache.org/confluence/display/BOOKKEEPER/BP-18%3A+LedgerType%2C+Flags+and+StorageHints" target="_blank" rel="noopener noreferrer">BP-18: LedgerType, Flags and StorageHints</a></td><td align="left">Accepted</td></tr><tr><td align="left"><a href="/bps/BP-26-move-distributedlog-core-library">BP-26: Move distributedlog library as part of bookkeeper</a></td><td align="left">Accepted</td></tr><tr><td align="left"><a href="/bps/BP-27-new-bookkeeper-cli">BP-27: New BookKeeper CLI</a></td><td align="left">Accepted</td></tr><tr><td align="left"><a href="/bps/BP-28-etcd-as-metadata-store">BP-28: use etcd as metadata store</a></td><td align="left">Accepted</td></tr><tr><td align="left"><a href="/bps/BP-29-metadata-store-api-module">BP-29: Metadata API module</a></td><td align="left">Accepted</td></tr><tr><td align="left"><a href="https://docs.google.com/document/d/155xAwWv5IdOitHh1NVMEwCMGgB28M3FyMiQSxEpjE-Y/edit#heading=h.56rbh52koe3f" target="_blank" rel="noopener noreferrer">BP-30: BookKeeper Table Service</a></td><td align="left">Accepted</td></tr><tr><td align="left"><a href="/bps/BP-31-durability">BP-31: BookKeeper Durability Anchor</a></td><td align="left">Accepted</td></tr><tr><td align="left"><a href="/bps/BP-32-advisory-write-close">BP-32: Advisory (optimistic) write close</a></td><td align="left">Accepted</td></tr><tr><td align="left"><a href="/bps/BP-33-building-official-docker-imags">BP-33: Move releasing docker images out of main repo</a></td><td align="left">Draft</td></tr><tr><td align="left"><a href="/bps/BP-34-cluster-metadata-checker">BP-34: Cluster Metadata Checker</a></td><td align="left">Accepted</td></tr><tr><td align="left"><a href="/bps/BP-35-128-bits-support">BP-35: 128 bits support</a></td><td align="left">Accepted</td></tr><tr><td align="left"><a href="/bps/BP-36-stats-documentation-annotation">BP-36: Stats documentation annotation</a></td><td align="left">Accepted</td></tr><tr><td align="left"><a href="/bps/BP-37-conf-documentation">BP-37: Improve configuration management for better documentation</a></td><td align="left">Accepted</td></tr><tr><td align="left"><a href="/bps/BP-41-bookieid">BP-41: Separate BookieId from Separate BookieId from Bookie Network Address</a></td><td align="left">Accepted</td></tr><tr><td align="left"><a href="/bps/BP-42-new-api-list-ledgers">BP-42: New Client API - list ledgers</a></td><td align="left">Accepted</td></tr><tr><td align="left"><a href="/bps/BP-43-gradle-migration">BP-43: Migration to gradle</a></td><td align="left">Draft</td></tr></tbody></table><h3 class="anchor anchorWithStickyNavbar_LWe7" id="adopted">Adopted<a href="#adopted" class="hash-link" aria-label="Direct link to Adopted" title="Direct link to Adopted">​</a></h3><table><thead><tr><th align="left">Proposal</th><th align="left">Release</th></tr></thead><tbody><tr><td align="left"><a href="https://cwiki.apache.org/confluence/display/BOOKKEEPER/BP-1+-+64+bits+ledger+id+support" target="_blank" rel="noopener noreferrer">BP-1 - 64 bits ledger id support</a></td><td align="left">4.5.0</td></tr><tr><td align="left"><a href="https://cwiki.apache.org/confluence/display/BOOKKEEPER/BP-2+-+Resource+aware+data+placement" target="_blank" rel="noopener noreferrer">BP-2 - Resource aware data placement</a></td><td align="left">4.5.0</td></tr><tr><td align="left"><a href="https://cwiki.apache.org/confluence/display/BOOKKEEPER/BP-3+-+Security+support" target="_blank" rel="noopener noreferrer">BP-3 - Security support</a></td><td align="left">4.5.0</td></tr><tr><td align="left"><a href="https://cwiki.apache.org/confluence/display/BOOKKEEPER/BP-5+Allow+reads+outside+the+LAC+Protocol" target="_blank" rel="noopener noreferrer">BP-5 - Allow reads outside the LAC Protocol</a></td><td align="left">4.5.0</td></tr><tr><td align="left"><a href="https://cwiki.apache.org/confluence/display/BOOKKEEPER/BP-6+-+Use+separate+log+for+compaction" target="_blank" rel="noopener noreferrer">BP-6 - Use separate log for compaction</a></td><td align="left">4.6.0</td></tr><tr><td align="left"><a href="https://cwiki.apache.org/confluence/display/BOOKKEEPER/BP-9+-+Github+issues+for+Issue+Tracking" target="_blank" rel="noopener noreferrer">BP-9 - Github issues for Issue Tracking</a></td><td align="left">4.5.0</td></tr><tr><td align="left"><a href="https://cwiki.apache.org/confluence/display/BOOKKEEPER/BP-10+-+Official+Bookkeeper+Docker+Image" target="_blank" rel="noopener noreferrer">BP-10 - Official Bookkeeper Docker Image</a></td><td align="left">4.5.0</td></tr><tr><td align="left"><a href="https://cwiki.apache.org/confluence/pages/viewpage.action?pageId=71012301" target="_blank" rel="noopener noreferrer">BP-11 - Move website/documentation to Jekyll based site</a></td><td align="left">4.5.0</td></tr><tr><td align="left"><a href="https://cwiki.apache.org/confluence/display/BOOKKEEPER/BP-13+-+Time+Based+Release+Plan" target="_blank" rel="noopener noreferrer">BP-13 - Time Based Release Plan</a></td><td align="left">4.6.0</td></tr><tr><td align="left"><a href="https://cwiki.apache.org/confluence/display/BOOKKEEPER/BP-15+New+CreateLedger+API" target="_blank" rel="noopener noreferrer">BP-15 - New CreateLedger API</a></td><td align="left">4.6.0</td></tr><tr><td align="left"><a href="https://cwiki.apache.org/confluence/display/BOOKKEEPER/BP-17%3A+Define+BookKeeper+public+http+endpoints" target="_blank" rel="noopener noreferrer">BP-17 - Define BookKeeper public http endpoints</a></td><td align="left">4.6.0</td></tr><tr><td align="left"><a href="/bps/BP-20-github-workflow-for-bookkeeper-proposals">BP-20: Github workflow for bookkeeper proposals</a></td><td align="left">4.7.0</td></tr><tr><td align="left"><a href="/bps/BP-25-MovingChecksumToProto">BP-25: Move checksum to proto</a></td><td align="left">4.7.0</td></tr><tr><td align="left"><a href="/bps/BP-38-bookie-endpoint-discovery">BP-38: Publish Bookie Service Info on Metadata Service</a></td><td align="left">4.11.0</td></tr></tbody></table><h3 class="anchor anchorWithStickyNavbar_LWe7" id="discarded">Discarded<a href="#discarded" class="hash-link" aria-label="Direct link to Discarded" title="Direct link to Discarded">​</a></h3><table><thead><tr><th align="left">Proposal</th><th align="left">Reason</th></tr></thead><tbody><tr><td align="left"><a href="https://cwiki.apache.org/confluence/display/BOOKKEEPER/BP-7+-+Explicit+LAC+on+addEntry" target="_blank" rel="noopener noreferrer">BP-7 - Explicit LAC on addEntry</a></td><td align="left">Not A Problem</td></tr><tr><td align="left"><a href="/bps/BP-21-new-api-close-inconsistencies">BP-21: New API close inconsistencies</a></td><td align="left">Not A Problem</td></tr><tr><td align="left"><a href="/bps/BP-22-separate-closing-ledgers-from-opening-ledgers">BP-22: Separate closing ledgers from opening ledgers</a></td><td align="left">Not A Problem</td></tr></tbody></table></article></div><div class="col col--2"><div class="tableOfContents_bqdL thin-scrollbar"><ul class="table-of-contents table-of-contents__left-border"><li><a href="#process" class="table-of-contents__link toc-highlight">Process</a><ul><li><a href="#what-is-considered-a-major-change-that-needs-a-bp" class="table-of-contents__link toc-highlight">What is considered a &quot;major change&quot; that needs a BP?</a></li><li><a href="#what-should-be-included-in-a-bp" class="table-of-contents__link toc-highlight">What should be included in a BP?</a></li><li><a href="#who-should-initiate-the-bp" class="table-of-contents__link toc-highlight">Who should initiate the BP?</a></li><li><a href="#how-to-make-a-bp" class="table-of-contents__link toc-highlight">How to make a BP?</a></li></ul></li><li><a href="#all-proposals" class="table-of-contents__link toc-highlight">All Proposals</a><ul><li><a href="#inprogress" class="table-of-contents__link toc-highlight">Inprogress</a></li><li><a href="#adopted" class="table-of-contents__link toc-highlight">Adopted</a></li><li><a href="#discarded" class="table-of-contents__link toc-highlight">Discarded</a></li></ul></li></ul></div></div></div></main></div><footer class="footer footer--dark"><div class="container container-fluid"><div class="row footer__links"><div class="col footer__col"><div class="footer__title">Documentation</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/docs/overview">Overview</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/getting-started/installation">Getting started</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/deployment/manual">Deployment</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/admin/bookies">Administration</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/api/overview">API</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/security/overview">Security</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/development/protocol">Development</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/reference/config">Reference</a></li></ul></div><div class="col footer__col"><div class="footer__title">Community</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/community/mailing-lists">Mailing lists</a></li><li class="footer__item"><a class="footer__link-item" href="/community/slack">Slack</a></li><li class="footer__item"><a href="https://github.com/apache/bookkeeper" target="_blank" rel="noopener noreferrer" class="footer__link-item">Github<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a href="https://twitter.com/asfbookkeeper" target="_blank" rel="noopener noreferrer" class="footer__link-item">Twitter<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div><div class="col footer__col"><div class="footer__title">Project</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/project/who">Who are we?</a></li><li class="footer__item"><a class="footer__link-item" href="/project/bylaws">Bylaws</a></li><li class="footer__item"><a href="https://apache.org/licenses" target="_blank" rel="noopener noreferrer" class="footer__link-item">License<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a class="footer__link-item" href="/project/privacy">Privacy policy</a></li><li class="footer__item"><a href="https://www.apache.org/foundation/sponsorship.html" target="_blank" rel="noopener noreferrer" class="footer__link-item">Sponsorship<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a href="https://www.apache.org/foundation/thanks.html" target="_blank" rel="noopener noreferrer" class="footer__link-item">Thanks<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div></div><div class="footer__bottom text--center"><div class="footer__copyright"><footer class="footer">
@@ -25,7 +25,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/community/coding-guide/index.html b/content/community/coding-guide/index.html
index c6577fd..2fbf547 100644
--- a/content/community/coding-guide/index.html
+++ b/content/community/coding-guide/index.html
@@ -4,12 +4,12 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">Coding guide | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/community/coding-guide"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docusaurus_tag" content="default"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docsearch:docusaurus_tag" content="default"><meta data-rh="true" property="og:title" content="Coding guide | Apache BookKeeper"><meta data-rh="true" name="description" content="These guidelines are meant to encourage consistency and best practices among people working on Apache BookKeeper code base."><meta data-rh="true" property="og:description" content="These guidelines are meant to encourage consistency and best practices among people working on Apache BookKeeper code base."><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/community/coding-guide"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/community/coding-guide" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/community/coding-guide" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
-<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navbar__brand" href="/"><div class="navbar__logo"><img src="/img/bk-logo.svg" alt="Apache Bookkeeper" class="themedImage_ToTc themedImage--light_HNdA"><img src="/img/bk-logo.svg" alt="Apache Bookkeeper" class="themedImage_ToTc themedImage--dark_i4oU"></div><b class="navbar__title text--truncate">Apache BookKeeper</b></a><a class="navbar__item navbar__link" href="/docs/overview/">Documentation</a><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Community</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/community/mailing-lists">Mailing lists</a></li><li><a class="dropdown__link" href="/community/slack">Slack</a></li><li><a href="https://github.com/apache/bookkeeper/issues" target="_blank" rel="noopener noreferrer" class="dropdown__link">Github issues<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a class="dropdown__link" href="/community/releases">Release management</a></li><li><a class="dropdown__link" href="/community/meeting">Community meetings</a></li><li><a class="dropdown__link" href="/community/contributing">Contribution guide</a></li><li><a aria-current="page" class="dropdown__link dropdown__link--active" href="/community/coding-guide">Coding guide</a></li><li><a class="dropdown__link" href="/community/testing">Testing guide</a></li><li><a class="dropdown__link" href="/community/issue-report">Issue report guide</a></li><li><a class="dropdown__link" href="/community/release-guide">Release guide</a></li><li><a class="dropdown__link" href="/community/presentations">Presentations</a></li><li><a class="dropdown__link" href="/community/bookkeeper-proposals">BookKeeper proposals (BP)</a></li></ul></div><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Project</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/project/who">Who are we?</a></li><li><a class="dropdown__link" href="/project/bylaws">Bylaws</a></li><li><a href="https://apache.org/licenses" target="_blank" rel="noopener noreferrer" class="dropdown__link">License<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a class="dropdown__link" href="/project/privacy">Privacy policy</a></li><li><a href="https://www.apache.org/foundation/sponsorship.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Sponsorship<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a href="https://www.apache.org/foundation/thanks.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Thanks<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div></div><div class="navbar__items navbar__items--right"><div class="navbar__item dropdown dropdown--hoverable dropdown--right"><a class="navbar__link" aria-haspopup="true" aria-expanded="false" role="button" href="/docs/admin/autorecovery">4.17.0</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/docs/next/overview/">Next</a></li><li><a class="dropdown__link" href="/docs/admin/autorecovery">4.17.0</a></li><li><a class="dropdown__link" href="/docs/4.16.5/overview/">4.16.5</a></li><li><a class="dropdown__link" href="/docs/4.15.5/overview/">4.15.5</a></li><li><a class="dropdown__link" href="/docs/4.14.8/overview/">4.14.8</a></li><li><a class="dropdown__link" href="/docs/4.13.0/overview/">4.13.0</a></li><li><a class="dropdown__link" href="/docs/4.12.1/overview/">4.12.1</a></li><li><a class="dropdown__link" href="/docs/4.11.1/overview/">4.11.1</a></li><li><a class="dropdown__link" href="/docs/4.10.0/overview/">4.10.0</a></li><li><a class="dropdown__link" href="/docs/4.9.2/overview/">4.9.2</a></li><li><a class="dropdown__link" href="/docs/4.8.2/overview/">4.8.2</a></li><li><a class="dropdown__link" href="/docs/4.7.3/overview/">4.7.3</a></li><li><a class="dropdown__link" href="/docs/4.6.2/overview/">4.6.2</a></li><li><a class="dropdown__link" href="/docs/4.5.1/overview/">4.5.1</a></li></ul></div><a class="navbar__item navbar__link" href="/releases">Download</a><div class="toggle_vylO colorModeToggle_DEke"><button class="clean-btn toggleButton_gllP toggleButtonDisabled_aARS" type="button" disabled="" title="Switch between dark and light mode (currently light mode)" aria-label="Switch between dark and light mode (currently light mode)" aria-live="polite"><svg viewBox="0 0 24 24" width="24" height="24" class="lightToggleIcon_pyhR"><path fill="currentColor" d="M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"></path></svg><svg viewBox="0 0 24 24" width="24" height="24" class="darkToggleIcon_wfgR"><path fill="currentColor" d="M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"></path></svg></button></div><div class="searchBox_ZlJk"></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div></nav><div id="docusaurus_skipToContent_fallback" class="main-wrapper mainWrapper_z2l0"><main class="container container--fluid margin-vert--lg"><div class="row mdxPageWrapper_j9I6"><div class="col col--8"><article><h1>Coding guide</h1><p>These guidelines are meant to encourage consistency and best practices among people working on <em>Apache BookKeeper</em> code base.
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navbar__brand" href="/"><div class="navbar__logo"><img src="/img/bk-logo.svg" alt="Apache Bookkeeper" class="themedImage_ToTc themedImage--light_HNdA"><img src="/img/bk-logo.svg" alt="Apache Bookkeeper" class="themedImage_ToTc themedImage--dark_i4oU"></div><b class="navbar__title text--truncate">Apache BookKeeper</b></a><a class="navbar__item navbar__link" href="/docs/overview/">Documentation</a><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Community</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/community/mailing-lists">Mailing lists</a></li><li><a class="dropdown__link" href="/community/slack">Slack</a></li><li><a href="https://github.com/apache/bookkeeper/issues" target="_blank" rel="noopener noreferrer" class="dropdown__link">Github issues<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a class="dropdown__link" href="/community/releases">Release management</a></li><li><a class="dropdown__link" href="/community/meeting">Community meetings</a></li><li><a class="dropdown__link" href="/community/contributing">Contribution guide</a></li><li><a aria-current="page" class="dropdown__link dropdown__link--active" href="/community/coding-guide">Coding guide</a></li><li><a class="dropdown__link" href="/community/testing">Testing guide</a></li><li><a class="dropdown__link" href="/community/issue-report">Issue report guide</a></li><li><a class="dropdown__link" href="/community/release-guide">Release guide</a></li><li><a class="dropdown__link" href="/community/presentations">Presentations</a></li><li><a class="dropdown__link" href="/community/bookkeeper-proposals">BookKeeper proposals (BP)</a></li></ul></div><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Project</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/project/who">Who are we?</a></li><li><a class="dropdown__link" href="/project/bylaws">Bylaws</a></li><li><a href="https://apache.org/licenses" target="_blank" rel="noopener noreferrer" class="dropdown__link">License<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a class="dropdown__link" href="/project/privacy">Privacy policy</a></li><li><a href="https://www.apache.org/foundation/sponsorship.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Sponsorship<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a href="https://www.apache.org/foundation/thanks.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Thanks<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div></div><div class="navbar__items navbar__items--right"><div class="navbar__item dropdown dropdown--hoverable dropdown--right"><a class="navbar__link" aria-haspopup="true" aria-expanded="false" role="button" href="/docs/overview/">4.17.0</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/docs/next/overview/">Next</a></li><li><a class="dropdown__link" href="/docs/overview/">4.17.0</a></li><li><a class="dropdown__link" href="/docs/4.16.5/overview/">4.16.5</a></li><li><a class="dropdown__link" href="/docs/4.15.5/overview/">4.15.5</a></li><li><a class="dropdown__link" href="/docs/4.14.8/overview/">4.14.8</a></li><li><a class="dropdown__link" href="/docs/4.13.0/overview/">4.13.0</a></li><li><a class="dropdown__link" href="/docs/4.12.1/overview/">4.12.1</a></li><li><a class="dropdown__link" href="/docs/4.11.1/overview/">4.11.1</a></li><li><a class="dropdown__link" href="/docs/4.10.0/overview/">4.10.0</a></li><li><a class="dropdown__link" href="/docs/4.9.2/overview/">4.9.2</a></li><li><a class="dropdown__link" href="/docs/4.8.2/overview/">4.8.2</a></li><li><a class="dropdown__link" href="/docs/4.7.3/overview/">4.7.3</a></li><li><a class="dropdown__link" href="/docs/4.6.2/overview/">4.6.2</a></li><li><a class="dropdown__link" href="/docs/4.5.1/overview/">4.5.1</a></li></ul></div><a class="navbar__item navbar__link" href="/releases">Download</a><div class="toggle_vylO colorModeToggle_DEke"><button class="clean-btn toggleButton_gllP toggleButtonDisabled_aARS" type="button" disabled="" title="Switch between dark and light mode (currently light mode)" aria-label="Switch between dark and light mode (currently light mode)" aria-live="polite"><svg viewBox="0 0 24 24" width="24" height="24" class="lightToggleIcon_pyhR"><path fill="currentColor" d="M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"></path></svg><svg viewBox="0 0 24 24" width="24" height="24" class="darkToggleIcon_wfgR"><path fill="currentColor" d="M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"></path></svg></button></div><div class="searchBox_ZlJk"></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div></nav><div id="docusaurus_skipToContent_fallback" class="main-wrapper mainWrapper_z2l0"><main class="container container--fluid margin-vert--lg"><div class="row mdxPageWrapper_j9I6"><div class="col col--8"><article><h1>Coding guide</h1><p>These guidelines are meant to encourage consistency and best practices among people working on <em>Apache BookKeeper</em> code base.
 They should be observed unless there is compelling reason to ignore them. We are also using checkstyle to enforce coding style.
 Please refer to our <a href="https://github.com/apache/bookkeeper/blob/master/buildtools/src/main/resources/bookkeeper/checkstyle.xml" target="_blank" rel="noopener noreferrer">checkstyle rules</a> for all enforced checkstyle rules.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="java">Java<a href="#java" class="hash-link" aria-label="Direct link to Java" title="Direct link to Java">​</a></h3><p>Apache BookKeeper code should follow the <a href="http://www.oracle.com/technetwork/java/javase/documentation/codeconvtoc-136057.html" target="_blank" rel="noopener noreferrer">Sun Java Coding Convention</a>, with the following additions.</p><ul><li>Lines can not be longer than 120 characters.</li><li>Indentation should be <strong>4 spaces</strong>. Tabs should never be used.</li><li>Use curly braces even for single-line ifs and elses.</li><li>No @author tags in any javadoc.</li><li>Use try-with-resources blocks whenever is possible.</li><li><strong>TODO</strong>s should be associated to at least one issue. E.g. <code>// TODO: make this parameter configurable (https://github.com/apache/bookkeeper/issues/280)</code></li></ul><h3 class="anchor anchorWithStickyNavbar_LWe7" id="dependencies">Dependencies<a href="#dependencies" class="hash-link" aria-label="Direct link to Dependencies" title="Direct link to Dependencies">​</a></h3><p>Apache BookKeeper uses following libraries a lot:</p><ul><li><a href="https://github.com/google/guava" target="_blank" rel="noopener noreferrer">Guava</a>: as a fundamental core library</li><li><a href="http://netty.io/" target="_blank" rel="noopener noreferrer">Netty</a>: for network communications and memory buffer management.</li></ul><p>Please use these libraries whenever possible rather than introducing more dependencies. </p><p>Dependencies are bundled with our binary distributions, so we need to attach the relevant licenses. See <a href="/community/licensing">Third party dependencies and licensing</a> for a guide on how to do this correctly.</p><h4 class="anchor anchorWithStickyNavbar_LWe7" id="future">Future<a href="#future" class="hash-link" aria-label="Direct link to Future" title="Direct link to Future">​</a></h4><p>We prefer Java-8 Future over Guava&#x27;s Listenable Future. Please use Java-8 Future whenever possible.</p><h4 class="anchor anchorWithStickyNavbar_LWe7" id="memory">Memory<a href="#memory" class="hash-link" aria-label="Direct link to Memory" title="Direct link to Memory">​</a></h4><p>We prefer using netty <em>ByteBuf</em> over java nio <em>ByteBuffer</em> for internal usage. As we are using Netty Buffer for memory management.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="logging">Logging<a href="#logging" class="hash-link" aria-label="Direct link to Logging" title="Direct link to Logging">​</a></h3><ul><li>Logging should be taken seriously. Please take the time to access the logs when making a change to ensure that the important things are getting logged and there is no junk there.</li><li>Logging statements should be complete sentences with proper capitalization that are written to be read by a person not necessarily familiar with the source code.</li><li>All loggings should be done with <strong>SLF4j</strong>, never <em>System.out</em> or <em>System.err</em>.</li></ul><h4 class="anchor anchorWithStickyNavbar_LWe7" id="logging-levels">Logging levels<a href="#logging-levels" class="hash-link" aria-label="Direct link to Logging levels" title="Direct link to Logging levels">​</a></h4><ul><li><em>INFO</em> is the level you should assume the software will be run in. INFO messages are things which are not bad but which the user will definitely want to know about every time they occur.</li><li><em>TRACE</em> and <em>DEBUG</em> are both things you turn on when something is wrong and you want to figure out what is going on. <em>DEBUG</em> should not be so fine grained that it will seriously affect performance of the program. <em>TRACE</em> can be anything. Both <em>DEBUG</em> and <em>TRACE</em> statements should be considered to be wrapped in an <em>if (logger.isDebugEnabled)</em> or <em>if (logger.isTraceEnabled)</em> check to avoid performance degradation.</li><li><em>WARN</em> and <em>ERROR</em> indicate something that is <strong>BAD</strong>. Use <em>WARN</em> if you aren&#x27;t totally sure it is bad, and <em>ERROR</em> if you are.</li></ul><p>Please log the <em>stack traces</em> at <strong>ERROR</strong> level, but never at <strong>INFO</strong> level or below. They can be logged at <strong>WARN</strong> level when they are interesting for debugging.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="monitoring">Monitoring<a href="#monitoring" class="hash-link" aria-label="Direct link to Monitoring" title="Direct link to Monitoring">​</a></h3><ul><li>Apache BookKeeper uses a pluggable <a href="https://github.com/apache/bookkeeper/tree/master/stats/bookkeeper-stats-providers" target="_blank" rel="noopener noreferrer">StatsProvider</a> on exporting metrics</li><li>Any new features should come with appropriate metrics for monitoring the feature is working correctly.</li><li>Those metrics should be taken seriously and only export useful metrics that would be used on production on monitoring/alerting healthy of the system, or troubleshooting problems.</li></ul><h3 class="anchor anchorWithStickyNavbar_LWe7" id="unit-tests">Unit Tests<a href="#unit-tests" class="hash-link" aria-label="Direct link to Unit Tests" title="Direct link to Unit Tests">​</a></h3><ul><li>New changes should come with unit tests that verify the functionality being added</li><li>Unit tests should test the least amount of code possible. Don&#x27;t start the whole server unless there is no other way to test a single class or small group of classes in isolation.</li><li>Tests should not depend on any external resources. They need to setup and teardown their own stuff.</li><li>It is okay to use the filesystem and network in tests since that&#x27;s our business but you need to clean up them after yourself.</li><li><em>Do not</em> use sleep or other timing assumptions in tests. It is always, always, wrong and will fail intermittently on any test server with other things going on that causes delays.</li><li>We are strongly recommending adding a <em>timeout</em> value to all our test cases, to prevent a build from completing indefinitely.
 <code>@Test(timeout=60000)</code></li></ul><h3 class="anchor anchorWithStickyNavbar_LWe7" id="configuration">Configuration<a href="#configuration" class="hash-link" aria-label="Direct link to Configuration" title="Direct link to Configuration">​</a></h3><ul><li>Names should be thought through from the point of view of the person using the config.</li><li>The default values should be thought as best value for people who runs the program without tuning parameters.</li><li>All configuration settings should be added to <a href="https://github.com/apache/bookkeeper/blob/master/conf/bk_server.conf" target="_blank" rel="noopener noreferrer">default configuration file</a> and <a href="https://github.com/apache/bookkeeper/blob/master/site/_data/config/bk_server.yaml" target="_blank" rel="noopener noreferrer">documented</a>.</li></ul><h3 class="anchor anchorWithStickyNavbar_LWe7" id="concurrency">Concurrency<a href="#concurrency" class="hash-link" aria-label="Direct link to Concurrency" title="Direct link to Concurrency">​</a></h3><p>Apache BookKeeper is a low latency system. So it is implemented as a purely asynchronous service. This is accomplished as follows:</p><ul><li>All public classes should be <strong>thread-safe</strong>.</li><li>We prefer using <a href="https://github.com/apache/bookkeeper/blob/master/bookkeeper-common/src/main/java/org/apache/bookkeeper/common/util/OrderedExecutor.java" target="_blank" rel="noopener noreferrer">OrderedExecutor</a> for executing any asynchronous actions. The mutations to same instance should be submitted to same thread to execute.</li><li>If synchronization and locking is required, they should be in a fine granularity way.</li><li>All threads should have proper meaningful name.</li><li>If a class is not threadsafe, it should be annotated <a href="https://github.com/misberner/jsr-305/blob/master/ri/src/main/java/javax/annotation/concurrent/NotThreadSafe.java" target="_blank" rel="noopener noreferrer">@NotThreadSafe</a>. The instances that use this class is responsible for its synchronization.</li></ul><h3 class="anchor anchorWithStickyNavbar_LWe7" id="backwards-compatibility">Backwards Compatibility<a href="#backwards-compatibility" class="hash-link" aria-label="Direct link to Backwards Compatibility" title="Direct link to Backwards Compatibility">​</a></h3><ul><li>Wire protocol should support backwards compatibility to enable no-downtime upgrades. This means the servers <strong>MUST</strong> be able to support requests from both old and new clients simultaneously.</li><li>Metadata formats and data formats should support backwards compatibility.</li></ul></article></div><div class="col col--2"><div class="tableOfContents_bqdL thin-scrollbar"><ul class="table-of-contents table-of-contents__left-border"><li><a href="#java" class="table-of-contents__link toc-highlight">Java</a></li><li><a href="#dependencies" class="table-of-contents__link toc-highlight">Dependencies</a></li><li><a href="#logging" class="table-of-contents__link toc-highlight">Logging</a></li><li><a href="#monitoring" class="table-of-contents__link toc-highlight">Monitoring</a></li><li><a href="#unit-tests" class="table-of-contents__link toc-highlight">Unit Tests</a></li><li><a href="#configuration" class="table-of-contents__link toc-highlight">Configuration</a></li><li><a href="#concurrency" class="table-of-contents__link toc-highlight">Concurrency</a></li><li><a href="#backwards-compatibility" class="table-of-contents__link toc-highlight">Backwards Compatibility</a></li></ul></div></div></div></main></div><footer class="footer footer--dark"><div class="container container-fluid"><div class="row footer__links"><div class="col footer__col"><div class="footer__title">Documentation</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/docs/overview">Overview</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/getting-started/installation">Getting started</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/deployment/manual">Deployment</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/admin/bookies">Administration</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/api/overview">API</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/security/overview">Security</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/development/protocol">Development</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/reference/config">Reference</a></li></ul></div><div class="col footer__col"><div class="footer__title">Community</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/community/mailing-lists">Mailing lists</a></li><li class="footer__item"><a class="footer__link-item" href="/community/slack">Slack</a></li><li class="footer__item"><a href="https://github.com/apache/bookkeeper" target="_blank" rel="noopener noreferrer" class="footer__link-item">Github<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a href="https://twitter.com/asfbookkeeper" target="_blank" rel="noopener noreferrer" class="footer__link-item">Twitter<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div><div class="col footer__col"><div class="footer__title">Project</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/project/who">Who are we?</a></li><li class="footer__item"><a class="footer__link-item" href="/project/bylaws">Bylaws</a></li><li class="footer__item"><a href="https://apache.org/licenses" target="_blank" rel="noopener noreferrer" class="footer__link-item">License<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a class="footer__link-item" href="/project/privacy">Privacy policy</a></li><li class="footer__item"><a href="https://www.apache.org/foundation/sponsorship.html" target="_blank" rel="noopener noreferrer" class="footer__link-item">Sponsorship<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a href="https://www.apache.org/foundation/thanks.html" target="_blank" rel="noopener noreferrer" class="footer__link-item">Thanks<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div></div><div class="footer__bottom text--center"><div class="footer__copyright"><footer class="footer">
@@ -25,7 +25,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/community/contributing/index.html b/content/community/contributing/index.html
index 38cbca6..aad2787 100644
--- a/content/community/contributing/index.html
+++ b/content/community/contributing/index.html
@@ -4,12 +4,12 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">Contribution guide | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/community/contributing"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docusaurus_tag" content="default"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docsearch:docusaurus_tag" content="default"><meta data-rh="true" property="og:title" content="Contribution guide | Apache BookKeeper"><meta data-rh="true" name="description" content="The Apache BookKeeper community welcomes contributions from anyone with a passion for distributed systems! BookKeeper has many different opportunities for contributions --"><meta data-rh="true" property="og:description" content="The Apache BookKeeper community welcomes contributions from anyone with a passion for distributed systems! BookKeeper has many different opportunities for contributions --"><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/community/contributing"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/community/contributing" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/community/contributing" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
-<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navbar__brand" href="/"><div class="navbar__logo"><img src="/img/bk-logo.svg" alt="Apache Bookkeeper" class="themedImage_ToTc themedImage--light_HNdA"><img src="/img/bk-logo.svg" alt="Apache Bookkeeper" class="themedImage_ToTc themedImage--dark_i4oU"></div><b class="navbar__title text--truncate">Apache BookKeeper</b></a><a class="navbar__item navbar__link" href="/docs/overview/">Documentation</a><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Community</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/community/mailing-lists">Mailing lists</a></li><li><a class="dropdown__link" href="/community/slack">Slack</a></li><li><a href="https://github.com/apache/bookkeeper/issues" target="_blank" rel="noopener noreferrer" class="dropdown__link">Github issues<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a class="dropdown__link" href="/community/releases">Release management</a></li><li><a class="dropdown__link" href="/community/meeting">Community meetings</a></li><li><a aria-current="page" class="dropdown__link dropdown__link--active" href="/community/contributing">Contribution guide</a></li><li><a class="dropdown__link" href="/community/coding-guide">Coding guide</a></li><li><a class="dropdown__link" href="/community/testing">Testing guide</a></li><li><a class="dropdown__link" href="/community/issue-report">Issue report guide</a></li><li><a class="dropdown__link" href="/community/release-guide">Release guide</a></li><li><a class="dropdown__link" href="/community/presentations">Presentations</a></li><li><a class="dropdown__link" href="/community/bookkeeper-proposals">BookKeeper proposals (BP)</a></li></ul></div><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Project</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/project/who">Who are we?</a></li><li><a class="dropdown__link" href="/project/bylaws">Bylaws</a></li><li><a href="https://apache.org/licenses" target="_blank" rel="noopener noreferrer" class="dropdown__link">License<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a class="dropdown__link" href="/project/privacy">Privacy policy</a></li><li><a href="https://www.apache.org/foundation/sponsorship.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Sponsorship<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a href="https://www.apache.org/foundation/thanks.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Thanks<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div></div><div class="navbar__items navbar__items--right"><div class="navbar__item dropdown dropdown--hoverable dropdown--right"><a class="navbar__link" aria-haspopup="true" aria-expanded="false" role="button" href="/docs/admin/autorecovery">4.17.0</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/docs/next/overview/">Next</a></li><li><a class="dropdown__link" href="/docs/admin/autorecovery">4.17.0</a></li><li><a class="dropdown__link" href="/docs/4.16.5/overview/">4.16.5</a></li><li><a class="dropdown__link" href="/docs/4.15.5/overview/">4.15.5</a></li><li><a class="dropdown__link" href="/docs/4.14.8/overview/">4.14.8</a></li><li><a class="dropdown__link" href="/docs/4.13.0/overview/">4.13.0</a></li><li><a class="dropdown__link" href="/docs/4.12.1/overview/">4.12.1</a></li><li><a class="dropdown__link" href="/docs/4.11.1/overview/">4.11.1</a></li><li><a class="dropdown__link" href="/docs/4.10.0/overview/">4.10.0</a></li><li><a class="dropdown__link" href="/docs/4.9.2/overview/">4.9.2</a></li><li><a class="dropdown__link" href="/docs/4.8.2/overview/">4.8.2</a></li><li><a class="dropdown__link" href="/docs/4.7.3/overview/">4.7.3</a></li><li><a class="dropdown__link" href="/docs/4.6.2/overview/">4.6.2</a></li><li><a class="dropdown__link" href="/docs/4.5.1/overview/">4.5.1</a></li></ul></div><a class="navbar__item navbar__link" href="/releases">Download</a><div class="toggle_vylO colorModeToggle_DEke"><button class="clean-btn toggleButton_gllP toggleButtonDisabled_aARS" type="button" disabled="" title="Switch between dark and light mode (currently light mode)" aria-label="Switch between dark and light mode (currently light mode)" aria-live="polite"><svg viewBox="0 0 24 24" width="24" height="24" class="lightToggleIcon_pyhR"><path fill="currentColor" d="M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"></path></svg><svg viewBox="0 0 24 24" width="24" height="24" class="darkToggleIcon_wfgR"><path fill="currentColor" d="M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"></path></svg></button></div><div class="searchBox_ZlJk"></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div></nav><div id="docusaurus_skipToContent_fallback" class="main-wrapper mainWrapper_z2l0"><main class="container container--fluid margin-vert--lg"><div class="row mdxPageWrapper_j9I6"><div class="col col--8"><article><h1>Contribution guide</h1><p>The Apache BookKeeper community welcomes contributions from anyone with a passion for distributed systems! BookKeeper has many different opportunities for contributions --
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navbar__brand" href="/"><div class="navbar__logo"><img src="/img/bk-logo.svg" alt="Apache Bookkeeper" class="themedImage_ToTc themedImage--light_HNdA"><img src="/img/bk-logo.svg" alt="Apache Bookkeeper" class="themedImage_ToTc themedImage--dark_i4oU"></div><b class="navbar__title text--truncate">Apache BookKeeper</b></a><a class="navbar__item navbar__link" href="/docs/overview/">Documentation</a><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Community</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/community/mailing-lists">Mailing lists</a></li><li><a class="dropdown__link" href="/community/slack">Slack</a></li><li><a href="https://github.com/apache/bookkeeper/issues" target="_blank" rel="noopener noreferrer" class="dropdown__link">Github issues<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a class="dropdown__link" href="/community/releases">Release management</a></li><li><a class="dropdown__link" href="/community/meeting">Community meetings</a></li><li><a aria-current="page" class="dropdown__link dropdown__link--active" href="/community/contributing">Contribution guide</a></li><li><a class="dropdown__link" href="/community/coding-guide">Coding guide</a></li><li><a class="dropdown__link" href="/community/testing">Testing guide</a></li><li><a class="dropdown__link" href="/community/issue-report">Issue report guide</a></li><li><a class="dropdown__link" href="/community/release-guide">Release guide</a></li><li><a class="dropdown__link" href="/community/presentations">Presentations</a></li><li><a class="dropdown__link" href="/community/bookkeeper-proposals">BookKeeper proposals (BP)</a></li></ul></div><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Project</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/project/who">Who are we?</a></li><li><a class="dropdown__link" href="/project/bylaws">Bylaws</a></li><li><a href="https://apache.org/licenses" target="_blank" rel="noopener noreferrer" class="dropdown__link">License<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a class="dropdown__link" href="/project/privacy">Privacy policy</a></li><li><a href="https://www.apache.org/foundation/sponsorship.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Sponsorship<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a href="https://www.apache.org/foundation/thanks.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Thanks<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div></div><div class="navbar__items navbar__items--right"><div class="navbar__item dropdown dropdown--hoverable dropdown--right"><a class="navbar__link" aria-haspopup="true" aria-expanded="false" role="button" href="/docs/overview/">4.17.0</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/docs/next/overview/">Next</a></li><li><a class="dropdown__link" href="/docs/overview/">4.17.0</a></li><li><a class="dropdown__link" href="/docs/4.16.5/overview/">4.16.5</a></li><li><a class="dropdown__link" href="/docs/4.15.5/overview/">4.15.5</a></li><li><a class="dropdown__link" href="/docs/4.14.8/overview/">4.14.8</a></li><li><a class="dropdown__link" href="/docs/4.13.0/overview/">4.13.0</a></li><li><a class="dropdown__link" href="/docs/4.12.1/overview/">4.12.1</a></li><li><a class="dropdown__link" href="/docs/4.11.1/overview/">4.11.1</a></li><li><a class="dropdown__link" href="/docs/4.10.0/overview/">4.10.0</a></li><li><a class="dropdown__link" href="/docs/4.9.2/overview/">4.9.2</a></li><li><a class="dropdown__link" href="/docs/4.8.2/overview/">4.8.2</a></li><li><a class="dropdown__link" href="/docs/4.7.3/overview/">4.7.3</a></li><li><a class="dropdown__link" href="/docs/4.6.2/overview/">4.6.2</a></li><li><a class="dropdown__link" href="/docs/4.5.1/overview/">4.5.1</a></li></ul></div><a class="navbar__item navbar__link" href="/releases">Download</a><div class="toggle_vylO colorModeToggle_DEke"><button class="clean-btn toggleButton_gllP toggleButtonDisabled_aARS" type="button" disabled="" title="Switch between dark and light mode (currently light mode)" aria-label="Switch between dark and light mode (currently light mode)" aria-live="polite"><svg viewBox="0 0 24 24" width="24" height="24" class="lightToggleIcon_pyhR"><path fill="currentColor" d="M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"></path></svg><svg viewBox="0 0 24 24" width="24" height="24" class="darkToggleIcon_wfgR"><path fill="currentColor" d="M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"></path></svg></button></div><div class="searchBox_ZlJk"></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div></nav><div id="docusaurus_skipToContent_fallback" class="main-wrapper mainWrapper_z2l0"><main class="container container--fluid margin-vert--lg"><div class="row mdxPageWrapper_j9I6"><div class="col col--8"><article><h1>Contribution guide</h1><p>The Apache BookKeeper community welcomes contributions from anyone with a passion for distributed systems! BookKeeper has many different opportunities for contributions --
 write new examples/tutorials, add new user-facing libraries, work on the core storage components, integrate with different metadata stores (ZooKeeper, Etcd etc), or
 participate on the documentation effort.</p><p>We use a review-then-commit workflow in BookKeeper for all contributions.</p><p><strong>For larger contributions or those that affect multiple components:</strong></p><ol><li><strong>Engage</strong>: We encourage you to work with the BookKeeper community on the <a href="https://github.com/apache/bookkeeper/issues" target="_blank" rel="noopener noreferrer">Github Issues</a> and <a href="/community/mailing-lists">developer’s mailing list</a> to identify good areas for contribution.</li><li><strong>Design:</strong> More complicated contributions will likely benefit from some early discussion in order to scope and design them well.</li></ol><p><strong>For all contributions:</strong></p><ol><li><strong>Code:</strong> The best part ;-)</li><li><strong>Review:</strong> Submit a pull request with your contribution to our <a href="https://github.com/apache/bookkeeper" target="_blank" rel="noopener noreferrer">GitHub Repo</a>. Work with a committer to review and iterate on the code, if needed.</li><li><strong>Commit:</strong> A BookKeeper committer merges the pull request into our <a href="https://github.com/apache/bookkeeper" target="_blank" rel="noopener noreferrer">GitHub Repo</a>.</li></ol><p>We look forward to working with you!</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="engage">Engage<a href="#engage" class="hash-link" aria-label="Direct link to Engage" title="Direct link to Engage">​</a></h2><h3 class="anchor anchorWithStickyNavbar_LWe7" id="mailing-lists">Mailing list(s)<a href="#mailing-lists" class="hash-link" aria-label="Direct link to Mailing list(s)" title="Direct link to Mailing list(s)">​</a></h3><p>We discuss design and implementation issues on the <a href="mailto:dev@bookkeeper.apache.org" target="_blank" rel="noopener noreferrer">dev@bookkeeper.apache.org</a> mailing list, which is archived <a href="https://lists.apache.org/list.html?dev@bookkeeper.apache.org" target="_blank" rel="noopener noreferrer">here</a>. Join by emailing <a href="mailto:dev-subscribe@bookkeeper.apache.org" target="_blank" rel="noopener noreferrer"><code>dev-subscribe@bookkeeper.apache.org</code></a>.</p><p>If interested, you can also join the other <a href="/community/mailing-lists">mailing lists</a>.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="github-issues">Github Issues<a href="#github-issues" class="hash-link" aria-label="Direct link to Github Issues" title="Direct link to Github Issues">​</a></h3><p>We are moving to use <a href="https://github.com/apache/bookkeeper/issues" target="_blank" rel="noopener noreferrer">Github Issues</a> as an issue tracking and project management tool, as well as a way to communicate among a very diverse and distributed set of contributors. To be able to gather feedback, avoid frustration, and avoid duplicated efforts all BookKeeper-related work should be tracked there.</p><p>If you do not already have an Github account, sign up <a href="https://github.com/join" target="_blank" rel="noopener noreferrer">here</a>.</p><p>If a quick <a href="https://github.com/apache/bookkeeper/issues?utf8=%E2%9C%93" target="_blank" rel="noopener noreferrer">search</a> doesn’t turn up an existing Github issue for the work you want to contribute, create it. Please discuss your idea with a committer in Github or, alternatively, on the developer mailing list.</p><p>If there’s an existing Github issue for your intended contribution, please comment about your intended work. Once the work is understood, a committer will assign the issue to you. If an issue is currently assigned, please check with the current assignee before reassigning.</p><p>For moderate or large contributions, you should not start coding or writing a design document unless there is a corresponding Github issue assigned to you for that work. Simple changes, like fixing typos, do not require an associated issue.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="online-discussions">Online discussions<a href="#online-discussions" class="hash-link" aria-label="Direct link to Online discussions" title="Direct link to Online discussions">​</a></h3><p>We are using <a href="https://apachebookkeeper.slack.com/" target="_blank" rel="noopener noreferrer">Apache BookKeeper Slack channel</a> for online discussions. You can self-invite yourself by accessing <a href="http://apachebookkeeper.slack.com/" target="_blank" rel="noopener noreferrer">this link</a>.</p><p>Slack channels are great for quick questions or discussions on specialized topics. Remember that we strongly encourage communication via the mailing lists, and we prefer to discuss more complex subjects by email. Developers should be careful to move or duplicate all the official or useful discussions to the issue tracking system and/or the dev mailing list.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="design">Design<a href="#design" class="hash-link" aria-label="Direct link to Design" title="Direct link to Design">​</a></h2><p>To avoid potential frustration during the code review cycle, we encourage you to clearly scope and design non-trivial contributions with the BookKeeper community before you start coding.</p><p>We are using <a href="https://bookkeeper.apache.org/community/bookkeeper-proposals/" target="_blank" rel="noopener noreferrer">BookKeeper Proposals</a> for managing major changes to BookKeeper.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="code">Code<a href="#code" class="hash-link" aria-label="Direct link to Code" title="Direct link to Code">​</a></h2><p>To contribute code to Apache BookKeeper, you’ll have to do a few administrative steps once, and then follow the <a href="/community/coding-guide">Coding Guide</a>.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="one-time-setup">One-time Setup<a href="#one-time-setup" class="hash-link" aria-label="Direct link to One-time Setup" title="Direct link to One-time Setup">​</a></h3><h4 class="anchor anchorWithStickyNavbar_LWe7" id="optionally-submit-contributor-license-agreement">[Optionally]<!-- --> Submit Contributor License Agreement<a href="#optionally-submit-contributor-license-agreement" class="hash-link" aria-label="Direct link to optionally-submit-contributor-license-agreement" title="Direct link to optionally-submit-contributor-license-agreement">​</a></h4><p>Apache Software Foundation (ASF) desires that all contributors of ideas, code, or documentation to the Apache projects complete, sign, and submit an <a href="https://www.apache.org/licenses/icla.pdf" target="_blank" rel="noopener noreferrer">Individual Contributor License Agreement</a> (ICLA). The purpose of this agreement is to clearly define the terms under which intellectual property has been contributed to the ASF and thereby allow us to defend the project should there be a legal dispute regarding the software at some future time.</p><p>We require you to have an ICLA on file with the Apache Secretary for larger contributions only. For smaller ones, however, we rely on <a href="http://www.apache.org/licenses/LICENSE-2.0#contributions" target="_blank" rel="noopener noreferrer">clause five</a> of the Apache License, Version 2.0, describing licensing of intentionally submitted contributions and do not require an ICLA in that case.</p><h4 class="anchor anchorWithStickyNavbar_LWe7" id="obtain-a-github-account">Obtain a GitHub account<a href="#obtain-a-github-account" class="hash-link" aria-label="Direct link to Obtain a GitHub account" title="Direct link to Obtain a GitHub account">​</a></h4><p>We use GitHub’s pull request functionality to review proposed code changes.</p><p>If you do not already have a personal GitHub account, sign up <a href="https://github.com/join" target="_blank" rel="noopener noreferrer">here</a>.</p><h4 class="anchor anchorWithStickyNavbar_LWe7" id="fork-the-repository-on-github">Fork the repository on GitHub<a href="#fork-the-repository-on-github" class="hash-link" aria-label="Direct link to Fork the repository on GitHub" title="Direct link to Fork the repository on GitHub">​</a></h4><p>Go to the <a href="https://github.com/apache/bookkeeper/" target="_blank" rel="noopener noreferrer">BookKeeper GitHub Repo</a> and fork the repository to your own private account. This will be your private workspace for staging changes.</p><h4 class="anchor anchorWithStickyNavbar_LWe7" id="clone-the-repository-locally">Clone the repository locally<a href="#clone-the-repository-locally" class="hash-link" aria-label="Direct link to Clone the repository locally" title="Direct link to Clone the repository locally">​</a></h4><p>You are now ready to create the development environment on your local machine. Feel free to repeat these steps on all machines that you want to use for development.</p><p>We assume you are using SSH-based authentication with GitHub. If necessary, exchange SSH keys with GitHub by following <a href="https://help.github.com/articles/generating-an-ssh-key/" target="_blank" rel="noopener noreferrer">their instructions</a>.</p><p>Clone your personal BookKeeper’s GitHub fork.</p><div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">$ git clone https://github.com/&lt;Github_user&gt;/bookkeeper.git</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">$ cd bookkeeper</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>Add Apache Repo as additional Git remotes, where you can sync the changes (for committers, you need these two remotes for pushing changes).</p><div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">$ git remote add apache https://github.com/apache/bookkeeper</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">$ git remote add apache-github https://github.com/apache/bookkeeper</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>You are now ready to start developing!</p><h4 class="anchor anchorWithStickyNavbar_LWe7" id="optional-ide-setup">[Optional]<!-- --> IDE Setup<a href="#optional-ide-setup" class="hash-link" aria-label="Direct link to optional-ide-setup" title="Direct link to optional-ide-setup">​</a></h4><p>Depending on your preferred development environment, you may need to prepare it to develop BookKeeper code.</p><h5 class="anchor anchorWithStickyNavbar_LWe7" id="intellij">IntelliJ<a href="#intellij" class="hash-link" aria-label="Direct link to IntelliJ" title="Direct link to IntelliJ">​</a></h5><h6 class="anchor anchorWithStickyNavbar_LWe7" id="checkstyle">Checkstyle<a href="#checkstyle" class="hash-link" aria-label="Direct link to Checkstyle" title="Direct link to Checkstyle">​</a></h6><p>IntelliJ supports checkstyle within the IDE using the Checkstyle-IDEA plugin.</p><ol><li>Install the &quot;Checkstyle-IDEA&quot; plugin from the IntelliJ plugin repository.</li><li>Configure the plugin by going to Settings -&gt; Other Settings -&gt; Checkstyle.</li><li>Set the &quot;Scan Scope&quot; to &quot;Only Java sources (including tests)&quot;.</li><li>In the &quot;Configuration File&quot; pane, add a new configuration using the plus icon:<ol><li>Set the &quot;Description&quot; to &quot;BookKeeper&quot;.</li><li>Select &quot;Use a local Checkstyle file&quot;, and point it to
 &quot;buildtools/src/main/resources/bookkeeper/checkstyle.xml&quot; within
@@ -37,7 +37,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/community/issue-report/index.html b/content/community/issue-report/index.html
index 2a14c67..ede0697 100644
--- a/content/community/issue-report/index.html
+++ b/content/community/issue-report/index.html
@@ -4,12 +4,12 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">Issue report | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/community/issue-report"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docusaurus_tag" content="default"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docsearch:docusaurus_tag" content="default"><meta data-rh="true" property="og:title" content="Issue report | Apache BookKeeper"><meta data-rh="true" name="description" content="To report an issue, you will need to create a New Issue."><meta data-rh="true" property="og:description" content="To report an issue, you will need to create a New Issue."><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/community/issue-report"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/community/issue-report" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/community/issue-report" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
-<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navbar__brand" href="/"><div class="navbar__logo"><img src="/img/bk-logo.svg" alt="Apache Bookkeeper" class="themedImage_ToTc themedImage--light_HNdA"><img src="/img/bk-logo.svg" alt="Apache Bookkeeper" class="themedImage_ToTc themedImage--dark_i4oU"></div><b class="navbar__title text--truncate">Apache BookKeeper</b></a><a class="navbar__item navbar__link" href="/docs/overview/">Documentation</a><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Community</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/community/mailing-lists">Mailing lists</a></li><li><a class="dropdown__link" href="/community/slack">Slack</a></li><li><a href="https://github.com/apache/bookkeeper/issues" target="_blank" rel="noopener noreferrer" class="dropdown__link">Github issues<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a class="dropdown__link" href="/community/releases">Release management</a></li><li><a class="dropdown__link" href="/community/meeting">Community meetings</a></li><li><a class="dropdown__link" href="/community/contributing">Contribution guide</a></li><li><a class="dropdown__link" href="/community/coding-guide">Coding guide</a></li><li><a class="dropdown__link" href="/community/testing">Testing guide</a></li><li><a aria-current="page" class="dropdown__link dropdown__link--active" href="/community/issue-report">Issue report guide</a></li><li><a class="dropdown__link" href="/community/release-guide">Release guide</a></li><li><a class="dropdown__link" href="/community/presentations">Presentations</a></li><li><a class="dropdown__link" href="/community/bookkeeper-proposals">BookKeeper proposals (BP)</a></li></ul></div><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Project</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/project/who">Who are we?</a></li><li><a class="dropdown__link" href="/project/bylaws">Bylaws</a></li><li><a href="https://apache.org/licenses" target="_blank" rel="noopener noreferrer" class="dropdown__link">License<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a class="dropdown__link" href="/project/privacy">Privacy policy</a></li><li><a href="https://www.apache.org/foundation/sponsorship.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Sponsorship<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a href="https://www.apache.org/foundation/thanks.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Thanks<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div></div><div class="navbar__items navbar__items--right"><div class="navbar__item dropdown dropdown--hoverable dropdown--right"><a class="navbar__link" aria-haspopup="true" aria-expanded="false" role="button" href="/docs/admin/autorecovery">4.17.0</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/docs/next/overview/">Next</a></li><li><a class="dropdown__link" href="/docs/admin/autorecovery">4.17.0</a></li><li><a class="dropdown__link" href="/docs/4.16.5/overview/">4.16.5</a></li><li><a class="dropdown__link" href="/docs/4.15.5/overview/">4.15.5</a></li><li><a class="dropdown__link" href="/docs/4.14.8/overview/">4.14.8</a></li><li><a class="dropdown__link" href="/docs/4.13.0/overview/">4.13.0</a></li><li><a class="dropdown__link" href="/docs/4.12.1/overview/">4.12.1</a></li><li><a class="dropdown__link" href="/docs/4.11.1/overview/">4.11.1</a></li><li><a class="dropdown__link" href="/docs/4.10.0/overview/">4.10.0</a></li><li><a class="dropdown__link" href="/docs/4.9.2/overview/">4.9.2</a></li><li><a class="dropdown__link" href="/docs/4.8.2/overview/">4.8.2</a></li><li><a class="dropdown__link" href="/docs/4.7.3/overview/">4.7.3</a></li><li><a class="dropdown__link" href="/docs/4.6.2/overview/">4.6.2</a></li><li><a class="dropdown__link" href="/docs/4.5.1/overview/">4.5.1</a></li></ul></div><a class="navbar__item navbar__link" href="/releases">Download</a><div class="toggle_vylO colorModeToggle_DEke"><button class="clean-btn toggleButton_gllP toggleButtonDisabled_aARS" type="button" disabled="" title="Switch between dark and light mode (currently light mode)" aria-label="Switch between dark and light mode (currently light mode)" aria-live="polite"><svg viewBox="0 0 24 24" width="24" height="24" class="lightToggleIcon_pyhR"><path fill="currentColor" d="M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"></path></svg><svg viewBox="0 0 24 24" width="24" height="24" class="darkToggleIcon_wfgR"><path fill="currentColor" d="M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"></path></svg></button></div><div class="searchBox_ZlJk"></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div></nav><div id="docusaurus_skipToContent_fallback" class="main-wrapper mainWrapper_z2l0"><main class="container container--fluid margin-vert--lg"><div class="row mdxPageWrapper_j9I6"><div class="col col--8"><article><h1>Issue report</h1><p>To report an issue, you will need to create a <strong><a href="https://github.com/apache/bookkeeper/issues/new" target="_blank" rel="noopener noreferrer">New Issue</a></strong>.
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navbar__brand" href="/"><div class="navbar__logo"><img src="/img/bk-logo.svg" alt="Apache Bookkeeper" class="themedImage_ToTc themedImage--light_HNdA"><img src="/img/bk-logo.svg" alt="Apache Bookkeeper" class="themedImage_ToTc themedImage--dark_i4oU"></div><b class="navbar__title text--truncate">Apache BookKeeper</b></a><a class="navbar__item navbar__link" href="/docs/overview/">Documentation</a><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Community</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/community/mailing-lists">Mailing lists</a></li><li><a class="dropdown__link" href="/community/slack">Slack</a></li><li><a href="https://github.com/apache/bookkeeper/issues" target="_blank" rel="noopener noreferrer" class="dropdown__link">Github issues<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a class="dropdown__link" href="/community/releases">Release management</a></li><li><a class="dropdown__link" href="/community/meeting">Community meetings</a></li><li><a class="dropdown__link" href="/community/contributing">Contribution guide</a></li><li><a class="dropdown__link" href="/community/coding-guide">Coding guide</a></li><li><a class="dropdown__link" href="/community/testing">Testing guide</a></li><li><a aria-current="page" class="dropdown__link dropdown__link--active" href="/community/issue-report">Issue report guide</a></li><li><a class="dropdown__link" href="/community/release-guide">Release guide</a></li><li><a class="dropdown__link" href="/community/presentations">Presentations</a></li><li><a class="dropdown__link" href="/community/bookkeeper-proposals">BookKeeper proposals (BP)</a></li></ul></div><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Project</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/project/who">Who are we?</a></li><li><a class="dropdown__link" href="/project/bylaws">Bylaws</a></li><li><a href="https://apache.org/licenses" target="_blank" rel="noopener noreferrer" class="dropdown__link">License<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a class="dropdown__link" href="/project/privacy">Privacy policy</a></li><li><a href="https://www.apache.org/foundation/sponsorship.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Sponsorship<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a href="https://www.apache.org/foundation/thanks.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Thanks<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div></div><div class="navbar__items navbar__items--right"><div class="navbar__item dropdown dropdown--hoverable dropdown--right"><a class="navbar__link" aria-haspopup="true" aria-expanded="false" role="button" href="/docs/overview/">4.17.0</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/docs/next/overview/">Next</a></li><li><a class="dropdown__link" href="/docs/overview/">4.17.0</a></li><li><a class="dropdown__link" href="/docs/4.16.5/overview/">4.16.5</a></li><li><a class="dropdown__link" href="/docs/4.15.5/overview/">4.15.5</a></li><li><a class="dropdown__link" href="/docs/4.14.8/overview/">4.14.8</a></li><li><a class="dropdown__link" href="/docs/4.13.0/overview/">4.13.0</a></li><li><a class="dropdown__link" href="/docs/4.12.1/overview/">4.12.1</a></li><li><a class="dropdown__link" href="/docs/4.11.1/overview/">4.11.1</a></li><li><a class="dropdown__link" href="/docs/4.10.0/overview/">4.10.0</a></li><li><a class="dropdown__link" href="/docs/4.9.2/overview/">4.9.2</a></li><li><a class="dropdown__link" href="/docs/4.8.2/overview/">4.8.2</a></li><li><a class="dropdown__link" href="/docs/4.7.3/overview/">4.7.3</a></li><li><a class="dropdown__link" href="/docs/4.6.2/overview/">4.6.2</a></li><li><a class="dropdown__link" href="/docs/4.5.1/overview/">4.5.1</a></li></ul></div><a class="navbar__item navbar__link" href="/releases">Download</a><div class="toggle_vylO colorModeToggle_DEke"><button class="clean-btn toggleButton_gllP toggleButtonDisabled_aARS" type="button" disabled="" title="Switch between dark and light mode (currently light mode)" aria-label="Switch between dark and light mode (currently light mode)" aria-live="polite"><svg viewBox="0 0 24 24" width="24" height="24" class="lightToggleIcon_pyhR"><path fill="currentColor" d="M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"></path></svg><svg viewBox="0 0 24 24" width="24" height="24" class="darkToggleIcon_wfgR"><path fill="currentColor" d="M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"></path></svg></button></div><div class="searchBox_ZlJk"></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div></nav><div id="docusaurus_skipToContent_fallback" class="main-wrapper mainWrapper_z2l0"><main class="container container--fluid margin-vert--lg"><div class="row mdxPageWrapper_j9I6"><div class="col col--8"><article><h1>Issue report</h1><p>To report an issue, you will need to create a <strong><a href="https://github.com/apache/bookkeeper/issues/new" target="_blank" rel="noopener noreferrer">New Issue</a></strong>.
 Be aware that resolving your issue may require <strong>your participation</strong>. Please be willing and prepared to aid the developers in finding the actual cause of the issue so that they can develop a comprehensive solution.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="before-creating-a-new-issue">Before creating a new Issue:<a href="#before-creating-a-new-issue" class="hash-link" aria-label="Direct link to Before creating a new Issue:" title="Direct link to Before creating a new Issue:">​</a></h2><ul><li>Search for the issue you want to report, it may already have been reported.</li><li>If you find a similar issue, add any new information you might have as a comment on the existing issue. If it&#x27;s different enough, you might decide it needs to be reported in a new issue.</li><li>If an issue you recently reported was closed, and you don&#x27;t agree with the reasoning for it being closed, you will need to reopen it to let us re-investigate the issue.</li><li>Do not reopen the tickets that are in a previously completed milestone. Instead, open a new issue.</li></ul><h2 class="anchor anchorWithStickyNavbar_LWe7" id="creating-a-issue">Creating a Issue:<a href="#creating-a-issue" class="hash-link" aria-label="Direct link to Creating a Issue:" title="Direct link to Creating a Issue:">​</a></h2><p>Here is an very useful artical <a href="http://www.chiark.greenend.org.uk/%7Esgtatham/bugs.html" target="_blank" rel="noopener noreferrer">How to report bugs effectively</a></p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="provide-useful-and-required-information">Provide useful and required information<a href="#provide-useful-and-required-information" class="hash-link" aria-label="Direct link to Provide useful and required information" title="Direct link to Provide useful and required information">​</a></h3><h4 class="anchor anchorWithStickyNavbar_LWe7" id="if-it-is-a-question">If it is a question<a href="#if-it-is-a-question" class="hash-link" aria-label="Direct link to If it is a question" title="Direct link to If it is a question">​</a></h4><ul><li>Please check our <a href="https://bookkeeper.apache.org/docs/next/overview/" target="_blank" rel="noopener noreferrer">documentation</a> first. </li><li>If you could not find an answer there, please consider asking your question in our community mailing list at <a href="mailto:dev@bookkeeper.apache.org" target="_blank" rel="noopener noreferrer">dev@bookkeeper.apache.org</a>, or reach out us on our <a href="/community/slack">Slack channel</a>.  It would benefit other members of our community.</li></ul><h4 class="anchor anchorWithStickyNavbar_LWe7" id="if-it-is-a-feature-request">If it is a <strong>FEATURE REQUEST</strong><a href="#if-it-is-a-feature-request" class="hash-link" aria-label="Direct link to if-it-is-a-feature-request" title="Direct link to if-it-is-a-feature-request">​</a></h4><ul><li>Please describe the feature you are requesting.</li><li>Indicate the importance of this issue to you (<em>blocker</em>, <em>must-have</em>, <em>should-have</em>, <em>nice-to-have</em>). Are you currently using any workarounds to address this issue?</li><li>Provide any additional detail on your proposed use case for this feature.</li><li>If it is a <a href="https://bookkeeper.apache.org/community/bookkeeper-proposals/" target="_blank" rel="noopener noreferrer">BookKeeper Proposal</a>, please label this issue as <code>BP</code>.</li></ul><h4 class="anchor anchorWithStickyNavbar_LWe7" id="if-it-is-a-bug-report">If it is a <strong>BUG REPORT</strong><a href="#if-it-is-a-bug-report" class="hash-link" aria-label="Direct link to if-it-is-a-bug-report" title="Direct link to if-it-is-a-bug-report">​</a></h4><p>Please describe the issue you observed:</p><ul><li>What did you do?</li><li>What did you expect to see?</li><li>What did you see instead?</li></ul><h3 class="anchor anchorWithStickyNavbar_LWe7" id="use-labels">Use Labels<a href="#use-labels" class="hash-link" aria-label="Direct link to Use Labels" title="Direct link to Use Labels">​</a></h3><p>Issue labels help to find issue reports and recognize the status of where an issue is in the lifecycle. An issue typically has the following 2 types of labels:</p><ol><li><strong>type</strong> identifying its type.</li><li><strong>area</strong> identifying the areas it belongs to.</li></ol><h4 class="anchor anchorWithStickyNavbar_LWe7" id="type">Type<a href="#type" class="hash-link" aria-label="Direct link to Type" title="Direct link to Type">​</a></h4><ul><li><strong>type/bug</strong>: The issue describes a product defect.</li><li><strong>type/feature</strong>: The issue describes a new feature, which requires extensive design and testing.</li><li><strong>type/question</strong>: The issue contains a user or contributor question requiring a response.</li><li><strong>type/task</strong>: The issue describes a new task, which requires extensive design and testing.</li></ul><h4 class="anchor anchorWithStickyNavbar_LWe7" id="area">Area<a href="#area" class="hash-link" aria-label="Direct link to Area" title="Direct link to Area">​</a></h4><ul><li><strong>area/bookie</strong>: Code changes related to bookie storage.</li><li><strong>area/build</strong>: Code changes related to project build.</li><li><strong>area/client</strong>: Code changes related to clients.</li><li><strong>area/docker</strong>: Code changes related to docker builds.</li><li><strong>area/documentation</strong>: Code changes related to documentation (including website changes).</li><li><strong>area/metadata</strong>: Code changes related to metadata management.</li><li><strong>area/protocol</strong>: Protocol changes.</li><li><strong>area/release</strong>: Release related tasks.</li><li><strong>area/security</strong>: Security related changes.</li><li><strong>area/tests</strong>: Tests related changes.</li></ul><h4 class="anchor anchorWithStickyNavbar_LWe7" id="priority">Priority<a href="#priority" class="hash-link" aria-label="Direct link to Priority" title="Direct link to Priority">​</a></h4><p>At most of the time, it is hard to find a right <code>priority</code> for issues. Currently we only have one label <code>priority/blocker</code> for marking an issue as a blocker
 for a given release. Please only mark this issue as <em>blocker</em> only when it is a real blocker for a given release. If you have no idea about this, just leave
 it as empty.</p><h4 class="anchor anchorWithStickyNavbar_LWe7" id="status">Status<a href="#status" class="hash-link" aria-label="Direct link to Status" title="Direct link to Status">​</a></h4><p>If an issue is assigned to a contributor, that means there is already a contributor working on it. If an issue is unassigned, you can pick this up by assigning
@@ -26,7 +26,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/community/licensing/index.html b/content/community/licensing/index.html
index 3a9effb..5e59530 100644
--- a/content/community/licensing/index.html
+++ b/content/community/licensing/index.html
@@ -4,12 +4,12 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">Third party dependencies and licensing | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/community/licensing"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docusaurus_tag" content="default"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docsearch:docusaurus_tag" content="default"><meta data-rh="true" property="og:title" content="Third party dependencies and licensing | Apache BookKeeper"><meta data-rh="true" name="description" content="The bookkeeper project ships one source distribution and two binary distributions."><meta data-rh="true" property="og:description" content="The bookkeeper project ships one source distribution and two binary distributions."><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/community/licensing"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/community/licensing" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/community/licensing" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
-<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navbar__brand" href="/"><div class="navbar__logo"><img src="/img/bk-logo.svg" alt="Apache Bookkeeper" class="themedImage_ToTc themedImage--light_HNdA"><img src="/img/bk-logo.svg" alt="Apache Bookkeeper" class="themedImage_ToTc themedImage--dark_i4oU"></div><b class="navbar__title text--truncate">Apache BookKeeper</b></a><a class="navbar__item navbar__link" href="/docs/overview/">Documentation</a><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Community</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/community/mailing-lists">Mailing lists</a></li><li><a class="dropdown__link" href="/community/slack">Slack</a></li><li><a href="https://github.com/apache/bookkeeper/issues" target="_blank" rel="noopener noreferrer" class="dropdown__link">Github issues<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a class="dropdown__link" href="/community/releases">Release management</a></li><li><a class="dropdown__link" href="/community/meeting">Community meetings</a></li><li><a class="dropdown__link" href="/community/contributing">Contribution guide</a></li><li><a class="dropdown__link" href="/community/coding-guide">Coding guide</a></li><li><a class="dropdown__link" href="/community/testing">Testing guide</a></li><li><a class="dropdown__link" href="/community/issue-report">Issue report guide</a></li><li><a class="dropdown__link" href="/community/release-guide">Release guide</a></li><li><a class="dropdown__link" href="/community/presentations">Presentations</a></li><li><a class="dropdown__link" href="/community/bookkeeper-proposals">BookKeeper proposals (BP)</a></li></ul></div><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Project</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/project/who">Who are we?</a></li><li><a class="dropdown__link" href="/project/bylaws">Bylaws</a></li><li><a href="https://apache.org/licenses" target="_blank" rel="noopener noreferrer" class="dropdown__link">License<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a class="dropdown__link" href="/project/privacy">Privacy policy</a></li><li><a href="https://www.apache.org/foundation/sponsorship.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Sponsorship<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a href="https://www.apache.org/foundation/thanks.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Thanks<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div></div><div class="navbar__items navbar__items--right"><div class="navbar__item dropdown dropdown--hoverable dropdown--right"><a class="navbar__link" aria-haspopup="true" aria-expanded="false" role="button" href="/docs/admin/autorecovery">4.17.0</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/docs/next/overview/">Next</a></li><li><a class="dropdown__link" href="/docs/admin/autorecovery">4.17.0</a></li><li><a class="dropdown__link" href="/docs/4.16.5/overview/">4.16.5</a></li><li><a class="dropdown__link" href="/docs/4.15.5/overview/">4.15.5</a></li><li><a class="dropdown__link" href="/docs/4.14.8/overview/">4.14.8</a></li><li><a class="dropdown__link" href="/docs/4.13.0/overview/">4.13.0</a></li><li><a class="dropdown__link" href="/docs/4.12.1/overview/">4.12.1</a></li><li><a class="dropdown__link" href="/docs/4.11.1/overview/">4.11.1</a></li><li><a class="dropdown__link" href="/docs/4.10.0/overview/">4.10.0</a></li><li><a class="dropdown__link" href="/docs/4.9.2/overview/">4.9.2</a></li><li><a class="dropdown__link" href="/docs/4.8.2/overview/">4.8.2</a></li><li><a class="dropdown__link" href="/docs/4.7.3/overview/">4.7.3</a></li><li><a class="dropdown__link" href="/docs/4.6.2/overview/">4.6.2</a></li><li><a class="dropdown__link" href="/docs/4.5.1/overview/">4.5.1</a></li></ul></div><a class="navbar__item navbar__link" href="/releases">Download</a><div class="toggle_vylO colorModeToggle_DEke"><button class="clean-btn toggleButton_gllP toggleButtonDisabled_aARS" type="button" disabled="" title="Switch between dark and light mode (currently light mode)" aria-label="Switch between dark and light mode (currently light mode)" aria-live="polite"><svg viewBox="0 0 24 24" width="24" height="24" class="lightToggleIcon_pyhR"><path fill="currentColor" d="M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"></path></svg><svg viewBox="0 0 24 24" width="24" height="24" class="darkToggleIcon_wfgR"><path fill="currentColor" d="M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"></path></svg></button></div><div class="searchBox_ZlJk"></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div></nav><div id="docusaurus_skipToContent_fallback" class="main-wrapper mainWrapper_z2l0"><main class="container container--fluid margin-vert--lg"><div class="row mdxPageWrapper_j9I6"><div class="col col--8"><article><h1>Third party dependencies and licensing</h1><p>The bookkeeper project ships one source distribution and two binary distributions.</p><ul><li><code>bookkeeper-&lt;version&gt;-src.tar.gz</code>, which contains the source code to build bookkeeper.</li><li><code>bookkeeper-all-&lt;version&gt;-bin.tar.gz</code>, which contains the bookkeeper server and all optional dependencies.</li><li><code>bookkeeper-server-&lt;version&gt;-bin.tar.gz</code>, which contains the bare minimum to run a bookkeeper server.</li></ul><p>The source distribution can contain source code copied from third parties. The binaries ship with third party dependencies in jar file form. </p><p>As the ASF may not own the copyright on the contents of this copied source code or third party jars, we may need to account for them in the LICENSE and/or NOTICE file of the distribution.</p><p>The LICENSE and NOTICE files for the source distribution are found at:</p><ul><li><a href="https://github.com/apache/bookkeeper/blob/master/LICENSE" target="_blank" rel="noopener noreferrer">bookkeeper/LICENSE</a></li><li><a href="https://github.com/apache/bookkeeper/blob/master/NOTICE" target="_blank" rel="noopener noreferrer">bookkeeper/NOTICE</a></li></ul><p>The LICENSE and NOTICE files for the binary distribution are found at:</p><ul><li><a href="https://github.com/apache/bookkeeper/blob/master/bookkeeper-dist/src/main/resources/LICENSE-all.bin.txt" target="_blank" rel="noopener noreferrer">bookkeeper/bookkeeper-dist/src/main/resources/LICENSE-all.bin.txt (for -all package)</a></li><li><a href="https://github.com/apache/bookkeeper/blob/master/bookkeeper-dist/src/main/resources/NOTICE-all.bin.txt" target="_blank" rel="noopener noreferrer">bookkeeper/bookkeeper-dist/src/main/resources/NOTICE-all.bin.txt (for -all package)</a></li><li><a href="https://github.com/apache/bookkeeper/blob/master/bookkeeper-dist/src/main/resources/LICENSE-server.bin.txt" target="_blank" rel="noopener noreferrer">bookkeeper/bookkeeper-dist/src/main/resources/LICENSE-server.bin.txt (for -server package)</a></li><li><a href="https://github.com/apache/bookkeeper/blob/master/bookkeeper-dist/src/main/resources/NOTICE-server.bin.txt" target="_blank" rel="noopener noreferrer">bookkeeper/bookkeeper-dist/src/main/resources/NOTICE-server.bin.txt (for -server package)</a></li></ul><p>When updating these files, use the following rules of thumb:</p><ul><li>BSD/MIT-style dependencies should be covered in LICENSE.</li><li>Apache Software License dependences should be covered in NOTICE, but only if they themselves contain a NOTICE file.</li><li>NOTICE should be kept to a minimum, and only contain what is legally required.</li><li>The LICENSE and NOTICE files for the binary packages should contains everything in source LICENSE and NOTICE packages, unless the source code being referred to does not ship in the binary packages (for example, if it was copied in only for tests).</li><li>All shipped dependencies should be mentioned in LICENSE for completeness, along with a link to their source code if available.</li><li>Any license other than BSD/MIT-style or ASL should be discussed on <a href="/community/mailing-lists">the dev list</a>.</li><li>If you have any doubts, raise them on <a href="/community/mailing-lists">the dev list</a>.</li></ul><h1>Handling new/updated source dependencies</h1><p>For bookkeeper, a source dependency is any code which has been copied in code form into our source tree. An example of this is <a href="https://github.com/apache/bookkeeper/tree/master/circe-checksum" target="_blank" rel="noopener noreferrer">circe-checksum</a> which was copied into our codebase and modified. Depending on the license of source code, you may need to update the source distribution LICENSE and NOTICE files.</p><p>In the case of circe-checksum, the original code is under the Apache Software License, Version 2 (ASLv2), and there is no NOTICE file, so neither LICENSE nor NOTICE need to be updated.</p><p>If, for example, we were to copy code from <a href="https://github.com/apache/hadoop" target="_blank" rel="noopener noreferrer">Hadoop</a>, and the code in question was originally written for Hadoop, then we would not need to update LICENSE or NOTICE, as Hadoop is also licensed under the ASLv2, and while it has a NOTICE file, the part covering code originally written for Hadoop is covered by the line, &quot;This product includes software developed by The <a href="https://www.apache.org/" target="_blank" rel="noopener noreferrer">Apache Software Foundation</a>.&quot;, which already exists in our NOTICE. However, if we were to copy code from Hadoop that originally originated elsewhere, such as their <a href="https://github.com/apache/hadoop/blob/f67237cbe7bc48a1b9088e990800b37529f1db2a/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/util/PureJavaCrc32C.java" target="_blank" rel="noopener noreferrer">pure java CRC library</a>, this code is originally from Intel, under a BSD style license, so you would have to track down the original license, add it to <a href="https://github.com/apache/bookkeeper/blob/master/bookkeeper-dist/src/main/resources/" target="_blank" rel="noopener noreferrer">deps/</a> and link it from our LICENSE file.</p><p>If we were to copy code from <a href="https://github.com/netty/netty/" target="_blank" rel="noopener noreferrer">Netty</a>, and the code in question was originally written for Netty, then we would need to update NOTICE with the relevant portions (i.e. the first section) from the <a href="https://github.com/netty/netty/blob/4.1/NOTICE.txt" target="_blank" rel="noopener noreferrer">Netty NOTICE file</a>, as Netty is licensed under the ASLv2 and it <em>does</em> contain a NOTICE file. If we were to copy code from Netty which originally originated elsewhere, but had also been modified by Netty, for example <a href="https://github.com/netty/netty/blob/b60e0b6a51d59fb9a98918c8783265b30531de57/common/src/main/java/io/netty/logging/CommonsLogger.java" target="_blank" rel="noopener noreferrer">their SLF4J modifications</a>, we would need to update our NOTICE with the relevant portions (i.e. the first section) from Netty&#x27;s NOTICE, and also add the SLF4J license to <a href="https://github.com/apache/bookkeeper/blob/master/bookkeeper-dist/src/main/resources/" target="_blank" rel="noopener noreferrer">deps/</a> and link it from our LICENSE file (as it has an MIT-style license).</p><p>If we were to copy code from <a href="https://github.com/google/protobuf" target="_blank" rel="noopener noreferrer">Protobuf</a> or <a href="https://www.slf4j.org/" target="_blank" rel="noopener noreferrer">SLF4J</a> into our code base, then we would have to copy their license to <a href="https://github.com/apache/bookkeeper/blob/master/bookkeeper-dist/src/main/resources/" target="_blank" rel="noopener noreferrer">deps/</a> and link it from our LICENSE file, as these projects are under <a href="https://github.com/google/protobuf/blob/master/LICENSE" target="_blank" rel="noopener noreferrer">BSD-style</a> and <a href="https://www.slf4j.org/license.html" target="_blank" rel="noopener noreferrer">MIT-style</a> licenses respectively.</p><h1>Handling new/updated binary dependencies</h1><p>When a new binary dependency is added, or a dependency version is updated, we need to update the LICENSE and NOTICE files for our binary packages. There is a separate version of each of these files for both the -all tarball and the -server tarball. The files can be found at <code>bookkeeper-dist/src/main/resources</code>.</p><p>How you update the files depends on the licensing of the dependency. Most dependencies come under either the Apache Software License, Version 2, or an MIT/BSD style license. If the software comes under anything else, it&#x27;s best to ask for advice on the <a href="/community/mailing-lists">dev@ list</a>.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="devcheck-binary-license-script">dev/check-binary-license script<a href="#devcheck-binary-license-script" class="hash-link" aria-label="Direct link to dev/check-binary-license script" title="Direct link to dev/check-binary-license script">​</a></h2><p>We provide a script which will check if the LICENSE file attached to a binary tarball matches the jar files distributed in that tarball. The goal of the script is to ensure that all shipped binaries are accounted for, and that nothing else is mentioned in the LICENSE or NOTICE files.</p><p>To check that licensing is correct, generate the tarball and run the script against it as follows (in this example I&#x27;ve removed references to protobuf from the LICENSE file).</p><div class="language-shell codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-shell codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">~/src/bookkeeper $ mvn clean package -DskipTests</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">..</span><span class="token plain">.</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">~/src/bookkeeper $ dev/check-binary-license bookkeeper-dist/server/target/bookkeeper-server-4.7.0-SNAPSHOT-bin.tar.gz</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">com.google.protobuf-protobuf-java-3.4.0.jar unaccounted </span><span class="token keyword" style="color:#00009f">for</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">in</span><span class="token plain"> LICENSE</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">deps/protobuf-3.4.0/LICENSE bundled, but not linked from LICENSE</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">~/src/bookkeeper $ </span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>The script checks the following:</p><ol><li>If a jar file is included in the tarball, this file must be mentioned in the LICENSE file.</li><li>If a jar file is mentioned in LICENSE or NOTICE, then this jar file must exist in the tarball.</li><li>If a license exists under deps/ in the tarball, this is license must be linked in the LICENSE file.</li><li>If a license is linked from the LICENSE file, it must exist under deps/ in the tarball.</li></ol><p>This script will fail the check even if only the version of the dependency has changed. This is intentional. The licensing requirements of a dependency can change between versions, so if a dependency version changes, we should check that the entries for that dependency are correct in our LICENSE and NOTICE files.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="apache-software-license-version-2-binary-dependencies">Apache Software License, Version 2 binary dependencies<a href="#apache-software-license-version-2-binary-dependencies" class="hash-link" aria-label="Direct link to Apache Software License, Version 2 binary dependencies" title="Direct link to Apache Software License, Version 2 binary dependencies">​</a></h2><ol><li>Add the jar under &quot;The following bundled 3rd party jars are distributed under the Apache Software License, Version 2.&quot;</li><li>Add a link to the source code of this dependency if available. This will help anyone updating the license in the future.</li><li>Check the LICENSE file of the dependency.</li></ol><ul><li>If it only contains the Apache Software License, Version 2, nothing needs to be copied into our LICENSE file.</li><li>If there is something other than the ASLv2, then you must figure out if it refers to code that is actually shipped in the jar. If it is shipped in the jar, then check the license of that code and apply the rules to it as you would if it was a first order dependency.</li></ul><ol start="4"><li>Check the NOTICE file of the dependency, if there is one.</li></ol><ul><li>Copy any copyright notices to our NOTICE, unless they are for Apache Software Foundation (already covered by our own copyright notice), or they are refer to code covered by a BSD/MIT style license (some projects mistakenly put these in the NOTICE file, but these should be noted in the <em>LICENSE</em> file).</li><li>Ensure that anything copies from the NOTICE file refers to code which is actually shipped with our tarball. Some projects put optional dependencies in their NOTICE, which are not actually pulled into our distribution, so we should not include these.</li></ul><h2 class="anchor anchorWithStickyNavbar_LWe7" id="bsdmit-style-license-binary-dependencies">BSD/MIT style license binary dependencies<a href="#bsdmit-style-license-binary-dependencies" class="hash-link" aria-label="Direct link to BSD/MIT style license binary dependencies" title="Direct link to BSD/MIT style license binary dependencies">​</a></h2><ol><li>Add a section to the LICENSE file, stating that &quot;This product bundles X, which is available under X&quot;.</li><li>Add the license to <code>bookkeeper-dist/src/main/resources/deps/</code> and add a link to this file from the LICENSE file.</li><li>Ensure that the deps/ license is in the inclusion lists for the correct package assembly specs (<code>bookkeeper-dist/src/assemble/</code>).</li><li>The section must state the path of the jar that is covered by the license, so that the tool can pick it up.</li><li>Add a link to the source code of the dependency if available, to make it easier to update the dependency in future.</li><li>Sometimes the LICENSE of a dependency refers to a dependency which they themselves has bundled. These references should be copied to our LICENSE file, as if they were first order dependencies.</li></ol><h2 class="anchor anchorWithStickyNavbar_LWe7" id="further-resources">Further resources<a href="#further-resources" class="hash-link" aria-label="Direct link to Further resources" title="Direct link to Further resources">​</a></h2><ul><li><a href="http://www.apache.org/dev/licensing-howto.html" target="_blank" rel="noopener noreferrer">Assembling LICENSE and NOTICE</a></li><li><a href="http://apache.org/legal/src-headers.html" target="_blank" rel="noopener noreferrer">ASF Source Header and Copyright Notice Policy</a></li></ul></article></div><div class="col col--2"><div class="tableOfContents_bqdL thin-scrollbar"><ul class="table-of-contents table-of-contents__left-border"><li><a href="#devcheck-binary-license-script" class="table-of-contents__link toc-highlight">dev/check-binary-license script</a></li><li><a href="#apache-software-license-version-2-binary-dependencies" class="table-of-contents__link toc-highlight">Apache Software License, Version 2 binary dependencies</a></li><li><a href="#bsdmit-style-license-binary-dependencies" class="table-of-contents__link toc-highlight">BSD/MIT style license binary dependencies</a></li><li><a href="#further-resources" class="table-of-contents__link toc-highlight">Further resources</a></li></ul></div></div></div></main></div><footer class="footer footer--dark"><div class="container container-fluid"><div class="row footer__links"><div class="col footer__col"><div class="footer__title">Documentation</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/docs/overview">Overview</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/getting-started/installation">Getting started</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/deployment/manual">Deployment</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/admin/bookies">Administration</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/api/overview">API</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/security/overview">Security</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/development/protocol">Development</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/reference/config">Reference</a></li></ul></div><div class="col footer__col"><div class="footer__title">Community</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/community/mailing-lists">Mailing lists</a></li><li class="footer__item"><a class="footer__link-item" href="/community/slack">Slack</a></li><li class="footer__item"><a href="https://github.com/apache/bookkeeper" target="_blank" rel="noopener noreferrer" class="footer__link-item">Github<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a href="https://twitter.com/asfbookkeeper" target="_blank" rel="noopener noreferrer" class="footer__link-item">Twitter<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div><div class="col footer__col"><div class="footer__title">Project</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/project/who">Who are we?</a></li><li class="footer__item"><a class="footer__link-item" href="/project/bylaws">Bylaws</a></li><li class="footer__item"><a href="https://apache.org/licenses" target="_blank" rel="noopener noreferrer" class="footer__link-item">License<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a class="footer__link-item" href="/project/privacy">Privacy policy</a></li><li class="footer__item"><a href="https://www.apache.org/foundation/sponsorship.html" target="_blank" rel="noopener noreferrer" class="footer__link-item">Sponsorship<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a href="https://www.apache.org/foundation/thanks.html" target="_blank" rel="noopener noreferrer" class="footer__link-item">Thanks<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div></div><div class="footer__bottom text--center"><div class="footer__copyright"><footer class="footer">
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navbar__brand" href="/"><div class="navbar__logo"><img src="/img/bk-logo.svg" alt="Apache Bookkeeper" class="themedImage_ToTc themedImage--light_HNdA"><img src="/img/bk-logo.svg" alt="Apache Bookkeeper" class="themedImage_ToTc themedImage--dark_i4oU"></div><b class="navbar__title text--truncate">Apache BookKeeper</b></a><a class="navbar__item navbar__link" href="/docs/overview/">Documentation</a><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Community</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/community/mailing-lists">Mailing lists</a></li><li><a class="dropdown__link" href="/community/slack">Slack</a></li><li><a href="https://github.com/apache/bookkeeper/issues" target="_blank" rel="noopener noreferrer" class="dropdown__link">Github issues<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a class="dropdown__link" href="/community/releases">Release management</a></li><li><a class="dropdown__link" href="/community/meeting">Community meetings</a></li><li><a class="dropdown__link" href="/community/contributing">Contribution guide</a></li><li><a class="dropdown__link" href="/community/coding-guide">Coding guide</a></li><li><a class="dropdown__link" href="/community/testing">Testing guide</a></li><li><a class="dropdown__link" href="/community/issue-report">Issue report guide</a></li><li><a class="dropdown__link" href="/community/release-guide">Release guide</a></li><li><a class="dropdown__link" href="/community/presentations">Presentations</a></li><li><a class="dropdown__link" href="/community/bookkeeper-proposals">BookKeeper proposals (BP)</a></li></ul></div><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Project</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/project/who">Who are we?</a></li><li><a class="dropdown__link" href="/project/bylaws">Bylaws</a></li><li><a href="https://apache.org/licenses" target="_blank" rel="noopener noreferrer" class="dropdown__link">License<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a class="dropdown__link" href="/project/privacy">Privacy policy</a></li><li><a href="https://www.apache.org/foundation/sponsorship.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Sponsorship<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a href="https://www.apache.org/foundation/thanks.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Thanks<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div></div><div class="navbar__items navbar__items--right"><div class="navbar__item dropdown dropdown--hoverable dropdown--right"><a class="navbar__link" aria-haspopup="true" aria-expanded="false" role="button" href="/docs/overview/">4.17.0</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/docs/next/overview/">Next</a></li><li><a class="dropdown__link" href="/docs/overview/">4.17.0</a></li><li><a class="dropdown__link" href="/docs/4.16.5/overview/">4.16.5</a></li><li><a class="dropdown__link" href="/docs/4.15.5/overview/">4.15.5</a></li><li><a class="dropdown__link" href="/docs/4.14.8/overview/">4.14.8</a></li><li><a class="dropdown__link" href="/docs/4.13.0/overview/">4.13.0</a></li><li><a class="dropdown__link" href="/docs/4.12.1/overview/">4.12.1</a></li><li><a class="dropdown__link" href="/docs/4.11.1/overview/">4.11.1</a></li><li><a class="dropdown__link" href="/docs/4.10.0/overview/">4.10.0</a></li><li><a class="dropdown__link" href="/docs/4.9.2/overview/">4.9.2</a></li><li><a class="dropdown__link" href="/docs/4.8.2/overview/">4.8.2</a></li><li><a class="dropdown__link" href="/docs/4.7.3/overview/">4.7.3</a></li><li><a class="dropdown__link" href="/docs/4.6.2/overview/">4.6.2</a></li><li><a class="dropdown__link" href="/docs/4.5.1/overview/">4.5.1</a></li></ul></div><a class="navbar__item navbar__link" href="/releases">Download</a><div class="toggle_vylO colorModeToggle_DEke"><button class="clean-btn toggleButton_gllP toggleButtonDisabled_aARS" type="button" disabled="" title="Switch between dark and light mode (currently light mode)" aria-label="Switch between dark and light mode (currently light mode)" aria-live="polite"><svg viewBox="0 0 24 24" width="24" height="24" class="lightToggleIcon_pyhR"><path fill="currentColor" d="M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"></path></svg><svg viewBox="0 0 24 24" width="24" height="24" class="darkToggleIcon_wfgR"><path fill="currentColor" d="M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"></path></svg></button></div><div class="searchBox_ZlJk"></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div></nav><div id="docusaurus_skipToContent_fallback" class="main-wrapper mainWrapper_z2l0"><main class="container container--fluid margin-vert--lg"><div class="row mdxPageWrapper_j9I6"><div class="col col--8"><article><h1>Third party dependencies and licensing</h1><p>The bookkeeper project ships one source distribution and two binary distributions.</p><ul><li><code>bookkeeper-&lt;version&gt;-src.tar.gz</code>, which contains the source code to build bookkeeper.</li><li><code>bookkeeper-all-&lt;version&gt;-bin.tar.gz</code>, which contains the bookkeeper server and all optional dependencies.</li><li><code>bookkeeper-server-&lt;version&gt;-bin.tar.gz</code>, which contains the bare minimum to run a bookkeeper server.</li></ul><p>The source distribution can contain source code copied from third parties. The binaries ship with third party dependencies in jar file form. </p><p>As the ASF may not own the copyright on the contents of this copied source code or third party jars, we may need to account for them in the LICENSE and/or NOTICE file of the distribution.</p><p>The LICENSE and NOTICE files for the source distribution are found at:</p><ul><li><a href="https://github.com/apache/bookkeeper/blob/master/LICENSE" target="_blank" rel="noopener noreferrer">bookkeeper/LICENSE</a></li><li><a href="https://github.com/apache/bookkeeper/blob/master/NOTICE" target="_blank" rel="noopener noreferrer">bookkeeper/NOTICE</a></li></ul><p>The LICENSE and NOTICE files for the binary distribution are found at:</p><ul><li><a href="https://github.com/apache/bookkeeper/blob/master/bookkeeper-dist/src/main/resources/LICENSE-all.bin.txt" target="_blank" rel="noopener noreferrer">bookkeeper/bookkeeper-dist/src/main/resources/LICENSE-all.bin.txt (for -all package)</a></li><li><a href="https://github.com/apache/bookkeeper/blob/master/bookkeeper-dist/src/main/resources/NOTICE-all.bin.txt" target="_blank" rel="noopener noreferrer">bookkeeper/bookkeeper-dist/src/main/resources/NOTICE-all.bin.txt (for -all package)</a></li><li><a href="https://github.com/apache/bookkeeper/blob/master/bookkeeper-dist/src/main/resources/LICENSE-server.bin.txt" target="_blank" rel="noopener noreferrer">bookkeeper/bookkeeper-dist/src/main/resources/LICENSE-server.bin.txt (for -server package)</a></li><li><a href="https://github.com/apache/bookkeeper/blob/master/bookkeeper-dist/src/main/resources/NOTICE-server.bin.txt" target="_blank" rel="noopener noreferrer">bookkeeper/bookkeeper-dist/src/main/resources/NOTICE-server.bin.txt (for -server package)</a></li></ul><p>When updating these files, use the following rules of thumb:</p><ul><li>BSD/MIT-style dependencies should be covered in LICENSE.</li><li>Apache Software License dependences should be covered in NOTICE, but only if they themselves contain a NOTICE file.</li><li>NOTICE should be kept to a minimum, and only contain what is legally required.</li><li>The LICENSE and NOTICE files for the binary packages should contains everything in source LICENSE and NOTICE packages, unless the source code being referred to does not ship in the binary packages (for example, if it was copied in only for tests).</li><li>All shipped dependencies should be mentioned in LICENSE for completeness, along with a link to their source code if available.</li><li>Any license other than BSD/MIT-style or ASL should be discussed on <a href="/community/mailing-lists">the dev list</a>.</li><li>If you have any doubts, raise them on <a href="/community/mailing-lists">the dev list</a>.</li></ul><h1>Handling new/updated source dependencies</h1><p>For bookkeeper, a source dependency is any code which has been copied in code form into our source tree. An example of this is <a href="https://github.com/apache/bookkeeper/tree/master/circe-checksum" target="_blank" rel="noopener noreferrer">circe-checksum</a> which was copied into our codebase and modified. Depending on the license of source code, you may need to update the source distribution LICENSE and NOTICE files.</p><p>In the case of circe-checksum, the original code is under the Apache Software License, Version 2 (ASLv2), and there is no NOTICE file, so neither LICENSE nor NOTICE need to be updated.</p><p>If, for example, we were to copy code from <a href="https://github.com/apache/hadoop" target="_blank" rel="noopener noreferrer">Hadoop</a>, and the code in question was originally written for Hadoop, then we would not need to update LICENSE or NOTICE, as Hadoop is also licensed under the ASLv2, and while it has a NOTICE file, the part covering code originally written for Hadoop is covered by the line, &quot;This product includes software developed by The <a href="https://www.apache.org/" target="_blank" rel="noopener noreferrer">Apache Software Foundation</a>.&quot;, which already exists in our NOTICE. However, if we were to copy code from Hadoop that originally originated elsewhere, such as their <a href="https://github.com/apache/hadoop/blob/f67237cbe7bc48a1b9088e990800b37529f1db2a/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/util/PureJavaCrc32C.java" target="_blank" rel="noopener noreferrer">pure java CRC library</a>, this code is originally from Intel, under a BSD style license, so you would have to track down the original license, add it to <a href="https://github.com/apache/bookkeeper/blob/master/bookkeeper-dist/src/main/resources/" target="_blank" rel="noopener noreferrer">deps/</a> and link it from our LICENSE file.</p><p>If we were to copy code from <a href="https://github.com/netty/netty/" target="_blank" rel="noopener noreferrer">Netty</a>, and the code in question was originally written for Netty, then we would need to update NOTICE with the relevant portions (i.e. the first section) from the <a href="https://github.com/netty/netty/blob/4.1/NOTICE.txt" target="_blank" rel="noopener noreferrer">Netty NOTICE file</a>, as Netty is licensed under the ASLv2 and it <em>does</em> contain a NOTICE file. If we were to copy code from Netty which originally originated elsewhere, but had also been modified by Netty, for example <a href="https://github.com/netty/netty/blob/b60e0b6a51d59fb9a98918c8783265b30531de57/common/src/main/java/io/netty/logging/CommonsLogger.java" target="_blank" rel="noopener noreferrer">their SLF4J modifications</a>, we would need to update our NOTICE with the relevant portions (i.e. the first section) from Netty&#x27;s NOTICE, and also add the SLF4J license to <a href="https://github.com/apache/bookkeeper/blob/master/bookkeeper-dist/src/main/resources/" target="_blank" rel="noopener noreferrer">deps/</a> and link it from our LICENSE file (as it has an MIT-style license).</p><p>If we were to copy code from <a href="https://github.com/google/protobuf" target="_blank" rel="noopener noreferrer">Protobuf</a> or <a href="https://www.slf4j.org/" target="_blank" rel="noopener noreferrer">SLF4J</a> into our code base, then we would have to copy their license to <a href="https://github.com/apache/bookkeeper/blob/master/bookkeeper-dist/src/main/resources/" target="_blank" rel="noopener noreferrer">deps/</a> and link it from our LICENSE file, as these projects are under <a href="https://github.com/google/protobuf/blob/master/LICENSE" target="_blank" rel="noopener noreferrer">BSD-style</a> and <a href="https://www.slf4j.org/license.html" target="_blank" rel="noopener noreferrer">MIT-style</a> licenses respectively.</p><h1>Handling new/updated binary dependencies</h1><p>When a new binary dependency is added, or a dependency version is updated, we need to update the LICENSE and NOTICE files for our binary packages. There is a separate version of each of these files for both the -all tarball and the -server tarball. The files can be found at <code>bookkeeper-dist/src/main/resources</code>.</p><p>How you update the files depends on the licensing of the dependency. Most dependencies come under either the Apache Software License, Version 2, or an MIT/BSD style license. If the software comes under anything else, it&#x27;s best to ask for advice on the <a href="/community/mailing-lists">dev@ list</a>.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="devcheck-binary-license-script">dev/check-binary-license script<a href="#devcheck-binary-license-script" class="hash-link" aria-label="Direct link to dev/check-binary-license script" title="Direct link to dev/check-binary-license script">​</a></h2><p>We provide a script which will check if the LICENSE file attached to a binary tarball matches the jar files distributed in that tarball. The goal of the script is to ensure that all shipped binaries are accounted for, and that nothing else is mentioned in the LICENSE or NOTICE files.</p><p>To check that licensing is correct, generate the tarball and run the script against it as follows (in this example I&#x27;ve removed references to protobuf from the LICENSE file).</p><div class="language-shell codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-shell codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">~/src/bookkeeper $ mvn clean package -DskipTests</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">..</span><span class="token plain">.</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">~/src/bookkeeper $ dev/check-binary-license bookkeeper-dist/server/target/bookkeeper-server-4.7.0-SNAPSHOT-bin.tar.gz</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">com.google.protobuf-protobuf-java-3.4.0.jar unaccounted </span><span class="token keyword" style="color:#00009f">for</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">in</span><span class="token plain"> LICENSE</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">deps/protobuf-3.4.0/LICENSE bundled, but not linked from LICENSE</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">~/src/bookkeeper $ </span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>The script checks the following:</p><ol><li>If a jar file is included in the tarball, this file must be mentioned in the LICENSE file.</li><li>If a jar file is mentioned in LICENSE or NOTICE, then this jar file must exist in the tarball.</li><li>If a license exists under deps/ in the tarball, this is license must be linked in the LICENSE file.</li><li>If a license is linked from the LICENSE file, it must exist under deps/ in the tarball.</li></ol><p>This script will fail the check even if only the version of the dependency has changed. This is intentional. The licensing requirements of a dependency can change between versions, so if a dependency version changes, we should check that the entries for that dependency are correct in our LICENSE and NOTICE files.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="apache-software-license-version-2-binary-dependencies">Apache Software License, Version 2 binary dependencies<a href="#apache-software-license-version-2-binary-dependencies" class="hash-link" aria-label="Direct link to Apache Software License, Version 2 binary dependencies" title="Direct link to Apache Software License, Version 2 binary dependencies">​</a></h2><ol><li>Add the jar under &quot;The following bundled 3rd party jars are distributed under the Apache Software License, Version 2.&quot;</li><li>Add a link to the source code of this dependency if available. This will help anyone updating the license in the future.</li><li>Check the LICENSE file of the dependency.</li></ol><ul><li>If it only contains the Apache Software License, Version 2, nothing needs to be copied into our LICENSE file.</li><li>If there is something other than the ASLv2, then you must figure out if it refers to code that is actually shipped in the jar. If it is shipped in the jar, then check the license of that code and apply the rules to it as you would if it was a first order dependency.</li></ul><ol start="4"><li>Check the NOTICE file of the dependency, if there is one.</li></ol><ul><li>Copy any copyright notices to our NOTICE, unless they are for Apache Software Foundation (already covered by our own copyright notice), or they are refer to code covered by a BSD/MIT style license (some projects mistakenly put these in the NOTICE file, but these should be noted in the <em>LICENSE</em> file).</li><li>Ensure that anything copies from the NOTICE file refers to code which is actually shipped with our tarball. Some projects put optional dependencies in their NOTICE, which are not actually pulled into our distribution, so we should not include these.</li></ul><h2 class="anchor anchorWithStickyNavbar_LWe7" id="bsdmit-style-license-binary-dependencies">BSD/MIT style license binary dependencies<a href="#bsdmit-style-license-binary-dependencies" class="hash-link" aria-label="Direct link to BSD/MIT style license binary dependencies" title="Direct link to BSD/MIT style license binary dependencies">​</a></h2><ol><li>Add a section to the LICENSE file, stating that &quot;This product bundles X, which is available under X&quot;.</li><li>Add the license to <code>bookkeeper-dist/src/main/resources/deps/</code> and add a link to this file from the LICENSE file.</li><li>Ensure that the deps/ license is in the inclusion lists for the correct package assembly specs (<code>bookkeeper-dist/src/assemble/</code>).</li><li>The section must state the path of the jar that is covered by the license, so that the tool can pick it up.</li><li>Add a link to the source code of the dependency if available, to make it easier to update the dependency in future.</li><li>Sometimes the LICENSE of a dependency refers to a dependency which they themselves has bundled. These references should be copied to our LICENSE file, as if they were first order dependencies.</li></ol><h2 class="anchor anchorWithStickyNavbar_LWe7" id="further-resources">Further resources<a href="#further-resources" class="hash-link" aria-label="Direct link to Further resources" title="Direct link to Further resources">​</a></h2><ul><li><a href="http://www.apache.org/dev/licensing-howto.html" target="_blank" rel="noopener noreferrer">Assembling LICENSE and NOTICE</a></li><li><a href="http://apache.org/legal/src-headers.html" target="_blank" rel="noopener noreferrer">ASF Source Header and Copyright Notice Policy</a></li></ul></article></div><div class="col col--2"><div class="tableOfContents_bqdL thin-scrollbar"><ul class="table-of-contents table-of-contents__left-border"><li><a href="#devcheck-binary-license-script" class="table-of-contents__link toc-highlight">dev/check-binary-license script</a></li><li><a href="#apache-software-license-version-2-binary-dependencies" class="table-of-contents__link toc-highlight">Apache Software License, Version 2 binary dependencies</a></li><li><a href="#bsdmit-style-license-binary-dependencies" class="table-of-contents__link toc-highlight">BSD/MIT style license binary dependencies</a></li><li><a href="#further-resources" class="table-of-contents__link toc-highlight">Further resources</a></li></ul></div></div></div></main></div><footer class="footer footer--dark"><div class="container container-fluid"><div class="row footer__links"><div class="col footer__col"><div class="footer__title">Documentation</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/docs/overview">Overview</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/getting-started/installation">Getting started</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/deployment/manual">Deployment</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/admin/bookies">Administration</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/api/overview">API</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/security/overview">Security</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/development/protocol">Development</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/reference/config">Reference</a></li></ul></div><div class="col footer__col"><div class="footer__title">Community</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/community/mailing-lists">Mailing lists</a></li><li class="footer__item"><a class="footer__link-item" href="/community/slack">Slack</a></li><li class="footer__item"><a href="https://github.com/apache/bookkeeper" target="_blank" rel="noopener noreferrer" class="footer__link-item">Github<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a href="https://twitter.com/asfbookkeeper" target="_blank" rel="noopener noreferrer" class="footer__link-item">Twitter<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div><div class="col footer__col"><div class="footer__title">Project</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/project/who">Who are we?</a></li><li class="footer__item"><a class="footer__link-item" href="/project/bylaws">Bylaws</a></li><li class="footer__item"><a href="https://apache.org/licenses" target="_blank" rel="noopener noreferrer" class="footer__link-item">License<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a class="footer__link-item" href="/project/privacy">Privacy policy</a></li><li class="footer__item"><a href="https://www.apache.org/foundation/sponsorship.html" target="_blank" rel="noopener noreferrer" class="footer__link-item">Sponsorship<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a href="https://www.apache.org/foundation/thanks.html" target="_blank" rel="noopener noreferrer" class="footer__link-item">Thanks<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div></div><div class="footer__bottom text--center"><div class="footer__copyright"><footer class="footer">
         <div class="container">
           <div class="content has-text-centered">
             <p>
@@ -22,7 +22,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/community/mailing-lists/index.html b/content/community/mailing-lists/index.html
index 1ac2411..10df316 100644
--- a/content/community/mailing-lists/index.html
+++ b/content/community/mailing-lists/index.html
@@ -4,12 +4,12 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">Mailing lists | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/community/mailing-lists"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docusaurus_tag" content="default"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docsearch:docusaurus_tag" content="default"><meta data-rh="true" property="og:title" content="Mailing lists | Apache BookKeeper"><meta data-rh="true" name="description" content="Apache BookKeeper has several mailing lists that you can participate in."><meta data-rh="true" property="og:description" content="Apache BookKeeper has several mailing lists that you can participate in."><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/community/mailing-lists"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/community/mailing-lists" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/community/mailing-lists" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
-<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navbar__brand" href="/"><div class="navbar__logo"><img src="/img/bk-logo.svg" alt="Apache Bookkeeper" class="themedImage_ToTc themedImage--light_HNdA"><img src="/img/bk-logo.svg" alt="Apache Bookkeeper" class="themedImage_ToTc themedImage--dark_i4oU"></div><b class="navbar__title text--truncate">Apache BookKeeper</b></a><a class="navbar__item navbar__link" href="/docs/overview/">Documentation</a><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Community</a><ul class="dropdown__menu"><li><a aria-current="page" class="dropdown__link dropdown__link--active" href="/community/mailing-lists">Mailing lists</a></li><li><a class="dropdown__link" href="/community/slack">Slack</a></li><li><a href="https://github.com/apache/bookkeeper/issues" target="_blank" rel="noopener noreferrer" class="dropdown__link">Github issues<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a class="dropdown__link" href="/community/releases">Release management</a></li><li><a class="dropdown__link" href="/community/meeting">Community meetings</a></li><li><a class="dropdown__link" href="/community/contributing">Contribution guide</a></li><li><a class="dropdown__link" href="/community/coding-guide">Coding guide</a></li><li><a class="dropdown__link" href="/community/testing">Testing guide</a></li><li><a class="dropdown__link" href="/community/issue-report">Issue report guide</a></li><li><a class="dropdown__link" href="/community/release-guide">Release guide</a></li><li><a class="dropdown__link" href="/community/presentations">Presentations</a></li><li><a class="dropdown__link" href="/community/bookkeeper-proposals">BookKeeper proposals (BP)</a></li></ul></div><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Project</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/project/who">Who are we?</a></li><li><a class="dropdown__link" href="/project/bylaws">Bylaws</a></li><li><a href="https://apache.org/licenses" target="_blank" rel="noopener noreferrer" class="dropdown__link">License<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a class="dropdown__link" href="/project/privacy">Privacy policy</a></li><li><a href="https://www.apache.org/foundation/sponsorship.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Sponsorship<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a href="https://www.apache.org/foundation/thanks.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Thanks<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div></div><div class="navbar__items navbar__items--right"><div class="navbar__item dropdown dropdown--hoverable dropdown--right"><a class="navbar__link" aria-haspopup="true" aria-expanded="false" role="button" href="/docs/admin/autorecovery">4.17.0</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/docs/next/overview/">Next</a></li><li><a class="dropdown__link" href="/docs/admin/autorecovery">4.17.0</a></li><li><a class="dropdown__link" href="/docs/4.16.5/overview/">4.16.5</a></li><li><a class="dropdown__link" href="/docs/4.15.5/overview/">4.15.5</a></li><li><a class="dropdown__link" href="/docs/4.14.8/overview/">4.14.8</a></li><li><a class="dropdown__link" href="/docs/4.13.0/overview/">4.13.0</a></li><li><a class="dropdown__link" href="/docs/4.12.1/overview/">4.12.1</a></li><li><a class="dropdown__link" href="/docs/4.11.1/overview/">4.11.1</a></li><li><a class="dropdown__link" href="/docs/4.10.0/overview/">4.10.0</a></li><li><a class="dropdown__link" href="/docs/4.9.2/overview/">4.9.2</a></li><li><a class="dropdown__link" href="/docs/4.8.2/overview/">4.8.2</a></li><li><a class="dropdown__link" href="/docs/4.7.3/overview/">4.7.3</a></li><li><a class="dropdown__link" href="/docs/4.6.2/overview/">4.6.2</a></li><li><a class="dropdown__link" href="/docs/4.5.1/overview/">4.5.1</a></li></ul></div><a class="navbar__item navbar__link" href="/releases">Download</a><div class="toggle_vylO colorModeToggle_DEke"><button class="clean-btn toggleButton_gllP toggleButtonDisabled_aARS" type="button" disabled="" title="Switch between dark and light mode (currently light mode)" aria-label="Switch between dark and light mode (currently light mode)" aria-live="polite"><svg viewBox="0 0 24 24" width="24" height="24" class="lightToggleIcon_pyhR"><path fill="currentColor" d="M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"></path></svg><svg viewBox="0 0 24 24" width="24" height="24" class="darkToggleIcon_wfgR"><path fill="currentColor" d="M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"></path></svg></button></div><div class="searchBox_ZlJk"></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div></nav><div id="docusaurus_skipToContent_fallback" class="main-wrapper mainWrapper_z2l0"><main class="container container--fluid margin-vert--lg"><div class="row mdxPageWrapper_j9I6"><div class="col col--8"><article><h1>Mailing lists</h1><p>Apache BookKeeper has several mailing lists that you can participate in.</p><blockquote><p>In order to post to a mailing list, you must first subscribe to it.</p></blockquote><h2 class="anchor anchorWithStickyNavbar_LWe7" id="users">Users<a href="#users" class="hash-link" aria-label="Direct link to Users" title="Direct link to Users">​</a></h2><p>If you use Apache BookKeeper, please subscribe to the BookKeeper user mailing list at <a href="mailto:user@bookkeeper.apache.org" target="_blank" rel="noopener noreferrer">user@bookkeeper.apache.org</a>.</p><ul><li><a href="mailto:user-subscribe@bookkeeper.apache.org" target="_blank" rel="noopener noreferrer">Subscribe</a></li><li><a href="mailto:user-unsubscribe@bookkeeper.apache.org" target="_blank" rel="noopener noreferrer">Unsubscribe</a></li><li><a href="https://lists.apache.org/list.html?user@bookkeeper.apache.org" target="_blank" rel="noopener noreferrer">Archives</a></li></ul><h2 class="anchor anchorWithStickyNavbar_LWe7" id="developers">Developers<a href="#developers" class="hash-link" aria-label="Direct link to Developers" title="Direct link to Developers">​</a></h2><p>If you&#x27;d like to contribute to the Apache BookKeeper project, please subscribe to the BookKeeper developer mailing list at <a href="mailto:dev@bookkeeper.apache.org" target="_blank" rel="noopener noreferrer">dev@bookkeeper.apache.org</a>.</p><ul><li><a href="mailto:dev-subscribe@bookkeeper.apache.org" target="_blank" rel="noopener noreferrer">Subscribe</a></li><li><a href="mailto:dev-unsubscribe@bookkeeper.apache.org" target="_blank" rel="noopener noreferrer">Unsubscribe</a></li><li><a href="https://lists.apache.org/list.html?dev@bookkeeper.apache.org" target="_blank" rel="noopener noreferrer">Archives</a></li></ul><h2 class="anchor anchorWithStickyNavbar_LWe7" id="issues">Issues<a href="#issues" class="hash-link" aria-label="Direct link to Issues" title="Direct link to Issues">​</a></h2><p>If you&#x27;d like to see updates from BookKeeper&#x27;s JIRA, Github and Jenkins and follow what&#x27;s happening in the community, please subscribe to the
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navbar__brand" href="/"><div class="navbar__logo"><img src="/img/bk-logo.svg" alt="Apache Bookkeeper" class="themedImage_ToTc themedImage--light_HNdA"><img src="/img/bk-logo.svg" alt="Apache Bookkeeper" class="themedImage_ToTc themedImage--dark_i4oU"></div><b class="navbar__title text--truncate">Apache BookKeeper</b></a><a class="navbar__item navbar__link" href="/docs/overview/">Documentation</a><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Community</a><ul class="dropdown__menu"><li><a aria-current="page" class="dropdown__link dropdown__link--active" href="/community/mailing-lists">Mailing lists</a></li><li><a class="dropdown__link" href="/community/slack">Slack</a></li><li><a href="https://github.com/apache/bookkeeper/issues" target="_blank" rel="noopener noreferrer" class="dropdown__link">Github issues<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a class="dropdown__link" href="/community/releases">Release management</a></li><li><a class="dropdown__link" href="/community/meeting">Community meetings</a></li><li><a class="dropdown__link" href="/community/contributing">Contribution guide</a></li><li><a class="dropdown__link" href="/community/coding-guide">Coding guide</a></li><li><a class="dropdown__link" href="/community/testing">Testing guide</a></li><li><a class="dropdown__link" href="/community/issue-report">Issue report guide</a></li><li><a class="dropdown__link" href="/community/release-guide">Release guide</a></li><li><a class="dropdown__link" href="/community/presentations">Presentations</a></li><li><a class="dropdown__link" href="/community/bookkeeper-proposals">BookKeeper proposals (BP)</a></li></ul></div><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Project</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/project/who">Who are we?</a></li><li><a class="dropdown__link" href="/project/bylaws">Bylaws</a></li><li><a href="https://apache.org/licenses" target="_blank" rel="noopener noreferrer" class="dropdown__link">License<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a class="dropdown__link" href="/project/privacy">Privacy policy</a></li><li><a href="https://www.apache.org/foundation/sponsorship.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Sponsorship<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a href="https://www.apache.org/foundation/thanks.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Thanks<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div></div><div class="navbar__items navbar__items--right"><div class="navbar__item dropdown dropdown--hoverable dropdown--right"><a class="navbar__link" aria-haspopup="true" aria-expanded="false" role="button" href="/docs/overview/">4.17.0</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/docs/next/overview/">Next</a></li><li><a class="dropdown__link" href="/docs/overview/">4.17.0</a></li><li><a class="dropdown__link" href="/docs/4.16.5/overview/">4.16.5</a></li><li><a class="dropdown__link" href="/docs/4.15.5/overview/">4.15.5</a></li><li><a class="dropdown__link" href="/docs/4.14.8/overview/">4.14.8</a></li><li><a class="dropdown__link" href="/docs/4.13.0/overview/">4.13.0</a></li><li><a class="dropdown__link" href="/docs/4.12.1/overview/">4.12.1</a></li><li><a class="dropdown__link" href="/docs/4.11.1/overview/">4.11.1</a></li><li><a class="dropdown__link" href="/docs/4.10.0/overview/">4.10.0</a></li><li><a class="dropdown__link" href="/docs/4.9.2/overview/">4.9.2</a></li><li><a class="dropdown__link" href="/docs/4.8.2/overview/">4.8.2</a></li><li><a class="dropdown__link" href="/docs/4.7.3/overview/">4.7.3</a></li><li><a class="dropdown__link" href="/docs/4.6.2/overview/">4.6.2</a></li><li><a class="dropdown__link" href="/docs/4.5.1/overview/">4.5.1</a></li></ul></div><a class="navbar__item navbar__link" href="/releases">Download</a><div class="toggle_vylO colorModeToggle_DEke"><button class="clean-btn toggleButton_gllP toggleButtonDisabled_aARS" type="button" disabled="" title="Switch between dark and light mode (currently light mode)" aria-label="Switch between dark and light mode (currently light mode)" aria-live="polite"><svg viewBox="0 0 24 24" width="24" height="24" class="lightToggleIcon_pyhR"><path fill="currentColor" d="M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"></path></svg><svg viewBox="0 0 24 24" width="24" height="24" class="darkToggleIcon_wfgR"><path fill="currentColor" d="M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"></path></svg></button></div><div class="searchBox_ZlJk"></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div></nav><div id="docusaurus_skipToContent_fallback" class="main-wrapper mainWrapper_z2l0"><main class="container container--fluid margin-vert--lg"><div class="row mdxPageWrapper_j9I6"><div class="col col--8"><article><h1>Mailing lists</h1><p>Apache BookKeeper has several mailing lists that you can participate in.</p><blockquote><p>In order to post to a mailing list, you must first subscribe to it.</p></blockquote><h2 class="anchor anchorWithStickyNavbar_LWe7" id="users">Users<a href="#users" class="hash-link" aria-label="Direct link to Users" title="Direct link to Users">​</a></h2><p>If you use Apache BookKeeper, please subscribe to the BookKeeper user mailing list at <a href="mailto:user@bookkeeper.apache.org" target="_blank" rel="noopener noreferrer">user@bookkeeper.apache.org</a>.</p><ul><li><a href="mailto:user-subscribe@bookkeeper.apache.org" target="_blank" rel="noopener noreferrer">Subscribe</a></li><li><a href="mailto:user-unsubscribe@bookkeeper.apache.org" target="_blank" rel="noopener noreferrer">Unsubscribe</a></li><li><a href="https://lists.apache.org/list.html?user@bookkeeper.apache.org" target="_blank" rel="noopener noreferrer">Archives</a></li></ul><h2 class="anchor anchorWithStickyNavbar_LWe7" id="developers">Developers<a href="#developers" class="hash-link" aria-label="Direct link to Developers" title="Direct link to Developers">​</a></h2><p>If you&#x27;d like to contribute to the Apache BookKeeper project, please subscribe to the BookKeeper developer mailing list at <a href="mailto:dev@bookkeeper.apache.org" target="_blank" rel="noopener noreferrer">dev@bookkeeper.apache.org</a>.</p><ul><li><a href="mailto:dev-subscribe@bookkeeper.apache.org" target="_blank" rel="noopener noreferrer">Subscribe</a></li><li><a href="mailto:dev-unsubscribe@bookkeeper.apache.org" target="_blank" rel="noopener noreferrer">Unsubscribe</a></li><li><a href="https://lists.apache.org/list.html?dev@bookkeeper.apache.org" target="_blank" rel="noopener noreferrer">Archives</a></li></ul><h2 class="anchor anchorWithStickyNavbar_LWe7" id="issues">Issues<a href="#issues" class="hash-link" aria-label="Direct link to Issues" title="Direct link to Issues">​</a></h2><p>If you&#x27;d like to see updates from BookKeeper&#x27;s JIRA, Github and Jenkins and follow what&#x27;s happening in the community, please subscribe to the
 BookKeeper issues mailing list at <a href="mailto:issues@bookkeeper.apache.org" target="_blank" rel="noopener noreferrer">issues@bookkeeper.apache.org</a>.</p><ul><li><a href="mailto:issues-subscribe@bookkeeper.apache.org" target="_blank" rel="noopener noreferrer">Subscribe</a></li><li><a href="mailto:issues-unsubscribe@bookkeeper.apache.org" target="_blank" rel="noopener noreferrer">Unsubscribe</a></li><li><a href="https://lists.apache.org/list.html?issues@bookkeeper.apache.org" target="_blank" rel="noopener noreferrer">Archives</a></li></ul><h3 class="anchor anchorWithStickyNavbar_LWe7" id="mail-filters">Mail Filters<a href="#mail-filters" class="hash-link" aria-label="Direct link to Mail Filters" title="Direct link to Mail Filters">​</a></h3><p>This mailing list contains notifications from different systems (JIRA, Github and Jenkins). Following filter rules are useful for organizing
 the emails in your inbox.</p><ul><li>from:(<a href="mailto:git@git.apache.org" target="_blank" rel="noopener noreferrer">git@git.apache.org</a>) to:(<a href="mailto:issues@bookkeeper.apache.org" target="_blank" rel="noopener noreferrer">issues@bookkeeper.apache.org</a>): all the notifications from github repo.</li><li>from:(<a href="mailto:jenkins@builds.apache.org" target="_blank" rel="noopener noreferrer">jenkins@builds.apache.org</a>) to:(<a href="mailto:issues@bookkeeper.apache.org" target="_blank" rel="noopener noreferrer">issues@bookkeeper.apache.org</a>): all the notifications from jenkins CI.</li><li>from:(<a href="mailto:jira@apache.org" target="_blank" rel="noopener noreferrer">jira@apache.org</a>) to:(<a href="mailto:dev@bookkeeper.apache.org" target="_blank" rel="noopener noreferrer">dev@bookkeeper.apache.org</a>): all the notifications from JIRA.</li><li>to:(<a href="mailto:bookkeeper@noreply.github.com" target="_blank" rel="noopener noreferrer">bookkeeper@noreply.github.com</a>, <a href="mailto:mention@noreply.github.com" target="_blank" rel="noopener noreferrer">mention@noreply.github.com</a>, ${user email}): all the notifications when you were tagged on github.</li></ul><h2 class="anchor anchorWithStickyNavbar_LWe7" id="commits">Commits<a href="#commits" class="hash-link" aria-label="Direct link to Commits" title="Direct link to Commits">​</a></h2><p>If you&#x27;d like to see changes made in BookKeeper&#x27;s version control system then subscribe to the BookKeeper commit mailing list.</p><ul><li><a href="mailto:commits-subscribe@bookkeeper.apache.org" target="_blank" rel="noopener noreferrer">Subscribe</a></li><li><a href="mailto:commits-unsubscribe@bookkeeper.apache.org" target="_blank" rel="noopener noreferrer">Unsubscribe</a></li><li><a href="https://lists.apache.org/list.html?commits@bookkeeper.apache.org" target="_blank" rel="noopener noreferrer">Archives</a></li></ul></article></div><div class="col col--2"><div class="tableOfContents_bqdL thin-scrollbar"><ul class="table-of-contents table-of-contents__left-border"><li><a href="#users" class="table-of-contents__link toc-highlight">Users</a></li><li><a href="#developers" class="table-of-contents__link toc-highlight">Developers</a></li><li><a href="#issues" class="table-of-contents__link toc-highlight">Issues</a><ul><li><a href="#mail-filters" class="table-of-contents__link toc-highlight">Mail Filters</a></li></ul></li><li><a href="#commits" class="table-of-contents__link toc-highlight">Commits</a></li></ul></div></div></div></main></div><footer class="footer footer--dark"><div class="container container-fluid"><div class="row footer__links"><div class="col footer__col"><div class="footer__title">Documentation</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/docs/overview">Overview</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/getting-started/installation">Getting started</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/deployment/manual">Deployment</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/admin/bookies">Administration</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/api/overview">API</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/security/overview">Security</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/development/protocol">Development</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/reference/config">Reference</a></li></ul></div><div class="col footer__col"><div class="footer__title">Community</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/community/mailing-lists">Mailing lists</a></li><li class="footer__item"><a class="footer__link-item" href="/community/slack">Slack</a></li><li class="footer__item"><a href="https://github.com/apache/bookkeeper" target="_blank" rel="noopener noreferrer" class="footer__link-item">Github<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a href="https://twitter.com/asfbookkeeper" target="_blank" rel="noopener noreferrer" class="footer__link-item">Twitter<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div><div class="col footer__col"><div class="footer__title">Project</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/project/who">Who are we?</a></li><li class="footer__item"><a class="footer__link-item" href="/project/bylaws">Bylaws</a></li><li class="footer__item"><a href="https://apache.org/licenses" target="_blank" rel="noopener noreferrer" class="footer__link-item">License<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a class="footer__link-item" href="/project/privacy">Privacy policy</a></li><li class="footer__item"><a href="https://www.apache.org/foundation/sponsorship.html" target="_blank" rel="noopener noreferrer" class="footer__link-item">Sponsorship<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a href="https://www.apache.org/foundation/thanks.html" target="_blank" rel="noopener noreferrer" class="footer__link-item">Thanks<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div></div><div class="footer__bottom text--center"><div class="footer__copyright"><footer class="footer">
         <div class="container">
@@ -24,7 +24,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/community/meeting/index.html b/content/community/meeting/index.html
index 05ac0e0..fcd0e2f 100644
--- a/content/community/meeting/index.html
+++ b/content/community/meeting/index.html
@@ -4,12 +4,12 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">Community meetings | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/community/meeting"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docusaurus_tag" content="default"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docsearch:docusaurus_tag" content="default"><meta data-rh="true" property="og:title" content="Community meetings | Apache BookKeeper"><meta data-rh="true" name="description" content="The community meeting runs bi-weekly on Thursday 8am - 9am PST."><meta data-rh="true" property="og:description" content="The community meeting runs bi-weekly on Thursday 8am - 9am PST."><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/community/meeting"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/community/meeting" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/community/meeting" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
-<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navbar__brand" href="/"><div class="navbar__logo"><img src="/img/bk-logo.svg" alt="Apache Bookkeeper" class="themedImage_ToTc themedImage--light_HNdA"><img src="/img/bk-logo.svg" alt="Apache Bookkeeper" class="themedImage_ToTc themedImage--dark_i4oU"></div><b class="navbar__title text--truncate">Apache BookKeeper</b></a><a class="navbar__item navbar__link" href="/docs/overview/">Documentation</a><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Community</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/community/mailing-lists">Mailing lists</a></li><li><a class="dropdown__link" href="/community/slack">Slack</a></li><li><a href="https://github.com/apache/bookkeeper/issues" target="_blank" rel="noopener noreferrer" class="dropdown__link">Github issues<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a class="dropdown__link" href="/community/releases">Release management</a></li><li><a aria-current="page" class="dropdown__link dropdown__link--active" href="/community/meeting">Community meetings</a></li><li><a class="dropdown__link" href="/community/contributing">Contribution guide</a></li><li><a class="dropdown__link" href="/community/coding-guide">Coding guide</a></li><li><a class="dropdown__link" href="/community/testing">Testing guide</a></li><li><a class="dropdown__link" href="/community/issue-report">Issue report guide</a></li><li><a class="dropdown__link" href="/community/release-guide">Release guide</a></li><li><a class="dropdown__link" href="/community/presentations">Presentations</a></li><li><a class="dropdown__link" href="/community/bookkeeper-proposals">BookKeeper proposals (BP)</a></li></ul></div><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Project</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/project/who">Who are we?</a></li><li><a class="dropdown__link" href="/project/bylaws">Bylaws</a></li><li><a href="https://apache.org/licenses" target="_blank" rel="noopener noreferrer" class="dropdown__link">License<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a class="dropdown__link" href="/project/privacy">Privacy policy</a></li><li><a href="https://www.apache.org/foundation/sponsorship.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Sponsorship<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a href="https://www.apache.org/foundation/thanks.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Thanks<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div></div><div class="navbar__items navbar__items--right"><div class="navbar__item dropdown dropdown--hoverable dropdown--right"><a class="navbar__link" aria-haspopup="true" aria-expanded="false" role="button" href="/docs/admin/autorecovery">4.17.0</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/docs/next/overview/">Next</a></li><li><a class="dropdown__link" href="/docs/admin/autorecovery">4.17.0</a></li><li><a class="dropdown__link" href="/docs/4.16.5/overview/">4.16.5</a></li><li><a class="dropdown__link" href="/docs/4.15.5/overview/">4.15.5</a></li><li><a class="dropdown__link" href="/docs/4.14.8/overview/">4.14.8</a></li><li><a class="dropdown__link" href="/docs/4.13.0/overview/">4.13.0</a></li><li><a class="dropdown__link" href="/docs/4.12.1/overview/">4.12.1</a></li><li><a class="dropdown__link" href="/docs/4.11.1/overview/">4.11.1</a></li><li><a class="dropdown__link" href="/docs/4.10.0/overview/">4.10.0</a></li><li><a class="dropdown__link" href="/docs/4.9.2/overview/">4.9.2</a></li><li><a class="dropdown__link" href="/docs/4.8.2/overview/">4.8.2</a></li><li><a class="dropdown__link" href="/docs/4.7.3/overview/">4.7.3</a></li><li><a class="dropdown__link" href="/docs/4.6.2/overview/">4.6.2</a></li><li><a class="dropdown__link" href="/docs/4.5.1/overview/">4.5.1</a></li></ul></div><a class="navbar__item navbar__link" href="/releases">Download</a><div class="toggle_vylO colorModeToggle_DEke"><button class="clean-btn toggleButton_gllP toggleButtonDisabled_aARS" type="button" disabled="" title="Switch between dark and light mode (currently light mode)" aria-label="Switch between dark and light mode (currently light mode)" aria-live="polite"><svg viewBox="0 0 24 24" width="24" height="24" class="lightToggleIcon_pyhR"><path fill="currentColor" d="M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"></path></svg><svg viewBox="0 0 24 24" width="24" height="24" class="darkToggleIcon_wfgR"><path fill="currentColor" d="M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"></path></svg></button></div><div class="searchBox_ZlJk"></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div></nav><div id="docusaurus_skipToContent_fallback" class="main-wrapper mainWrapper_z2l0"><main class="container container--fluid margin-vert--lg"><div class="row mdxPageWrapper_j9I6"><div class="col col--8"><article><h1>Community meetings</h1><p>The community meeting runs bi-weekly on Thursday 8am - 9am PST.</p><p>The meeting is typically comprised of 3 parts:</p><ul><li>Discuss <a href="https://bookkeeper.apache.org/community/bookkeeper-proposals/" target="_blank" rel="noopener noreferrer">BookKeeper Proposals</a>.</li><li>Review and address concerns for any open pull requests.</li><li>Open discussion.</li></ul><p>As a member of the BookKeeper community, you are welcome to join any of the meetings if you are interested in. No registration required.</p><p>Meeting planning can be found <a href="https://calendar.google.com/calendar/embed?src=cdph8n8a4bmmvkkghc81mvkd4c%40group.calendar.google.com&amp;ctz=America/Los_Angeles" target="_blank" rel="noopener noreferrer">here</a>.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="past-community-meetings">Past Community Meetings<a href="#past-community-meetings" class="hash-link" aria-label="Direct link to Past Community Meetings" title="Direct link to Past Community Meetings">​</a></h3><p>You can read the meeting notes from <a href="https://cwiki.apache.org/confluence/display/BOOKKEEPER/Community+Meetings" target="_blank" rel="noopener noreferrer">past community meetings</a>.</p></article></div><div class="col col--2"><div class="tableOfContents_bqdL thin-scrollbar"><ul class="table-of-contents table-of-contents__left-border"><li><a href="#past-community-meetings" class="table-of-contents__link toc-highlight">Past Community Meetings</a></li></ul></div></div></div></main></div><footer class="footer footer--dark"><div class="container container-fluid"><div class="row footer__links"><div class="col footer__col"><div class="footer__title">Documentation</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/docs/overview">Overview</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/getting-started/installation">Getting started</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/deployment/manual">Deployment</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/admin/bookies">Administration</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/api/overview">API</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/security/overview">Security</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/development/protocol">Development</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/reference/config">Reference</a></li></ul></div><div class="col footer__col"><div class="footer__title">Community</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/community/mailing-lists">Mailing lists</a></li><li class="footer__item"><a class="footer__link-item" href="/community/slack">Slack</a></li><li class="footer__item"><a href="https://github.com/apache/bookkeeper" target="_blank" rel="noopener noreferrer" class="footer__link-item">Github<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a href="https://twitter.com/asfbookkeeper" target="_blank" rel="noopener noreferrer" class="footer__link-item">Twitter<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div><div class="col footer__col"><div class="footer__title">Project</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/project/who">Who are we?</a></li><li class="footer__item"><a class="footer__link-item" href="/project/bylaws">Bylaws</a></li><li class="footer__item"><a href="https://apache.org/licenses" target="_blank" rel="noopener noreferrer" class="footer__link-item">License<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a class="footer__link-item" href="/project/privacy">Privacy policy</a></li><li class="footer__item"><a href="https://www.apache.org/foundation/sponsorship.html" target="_blank" rel="noopener noreferrer" class="footer__link-item">Sponsorship<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a href="https://www.apache.org/foundation/thanks.html" target="_blank" rel="noopener noreferrer" class="footer__link-item">Thanks<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div></div><div class="footer__bottom text--center"><div class="footer__copyright"><footer class="footer">
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navbar__brand" href="/"><div class="navbar__logo"><img src="/img/bk-logo.svg" alt="Apache Bookkeeper" class="themedImage_ToTc themedImage--light_HNdA"><img src="/img/bk-logo.svg" alt="Apache Bookkeeper" class="themedImage_ToTc themedImage--dark_i4oU"></div><b class="navbar__title text--truncate">Apache BookKeeper</b></a><a class="navbar__item navbar__link" href="/docs/overview/">Documentation</a><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Community</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/community/mailing-lists">Mailing lists</a></li><li><a class="dropdown__link" href="/community/slack">Slack</a></li><li><a href="https://github.com/apache/bookkeeper/issues" target="_blank" rel="noopener noreferrer" class="dropdown__link">Github issues<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a class="dropdown__link" href="/community/releases">Release management</a></li><li><a aria-current="page" class="dropdown__link dropdown__link--active" href="/community/meeting">Community meetings</a></li><li><a class="dropdown__link" href="/community/contributing">Contribution guide</a></li><li><a class="dropdown__link" href="/community/coding-guide">Coding guide</a></li><li><a class="dropdown__link" href="/community/testing">Testing guide</a></li><li><a class="dropdown__link" href="/community/issue-report">Issue report guide</a></li><li><a class="dropdown__link" href="/community/release-guide">Release guide</a></li><li><a class="dropdown__link" href="/community/presentations">Presentations</a></li><li><a class="dropdown__link" href="/community/bookkeeper-proposals">BookKeeper proposals (BP)</a></li></ul></div><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Project</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/project/who">Who are we?</a></li><li><a class="dropdown__link" href="/project/bylaws">Bylaws</a></li><li><a href="https://apache.org/licenses" target="_blank" rel="noopener noreferrer" class="dropdown__link">License<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a class="dropdown__link" href="/project/privacy">Privacy policy</a></li><li><a href="https://www.apache.org/foundation/sponsorship.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Sponsorship<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a href="https://www.apache.org/foundation/thanks.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Thanks<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div></div><div class="navbar__items navbar__items--right"><div class="navbar__item dropdown dropdown--hoverable dropdown--right"><a class="navbar__link" aria-haspopup="true" aria-expanded="false" role="button" href="/docs/overview/">4.17.0</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/docs/next/overview/">Next</a></li><li><a class="dropdown__link" href="/docs/overview/">4.17.0</a></li><li><a class="dropdown__link" href="/docs/4.16.5/overview/">4.16.5</a></li><li><a class="dropdown__link" href="/docs/4.15.5/overview/">4.15.5</a></li><li><a class="dropdown__link" href="/docs/4.14.8/overview/">4.14.8</a></li><li><a class="dropdown__link" href="/docs/4.13.0/overview/">4.13.0</a></li><li><a class="dropdown__link" href="/docs/4.12.1/overview/">4.12.1</a></li><li><a class="dropdown__link" href="/docs/4.11.1/overview/">4.11.1</a></li><li><a class="dropdown__link" href="/docs/4.10.0/overview/">4.10.0</a></li><li><a class="dropdown__link" href="/docs/4.9.2/overview/">4.9.2</a></li><li><a class="dropdown__link" href="/docs/4.8.2/overview/">4.8.2</a></li><li><a class="dropdown__link" href="/docs/4.7.3/overview/">4.7.3</a></li><li><a class="dropdown__link" href="/docs/4.6.2/overview/">4.6.2</a></li><li><a class="dropdown__link" href="/docs/4.5.1/overview/">4.5.1</a></li></ul></div><a class="navbar__item navbar__link" href="/releases">Download</a><div class="toggle_vylO colorModeToggle_DEke"><button class="clean-btn toggleButton_gllP toggleButtonDisabled_aARS" type="button" disabled="" title="Switch between dark and light mode (currently light mode)" aria-label="Switch between dark and light mode (currently light mode)" aria-live="polite"><svg viewBox="0 0 24 24" width="24" height="24" class="lightToggleIcon_pyhR"><path fill="currentColor" d="M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"></path></svg><svg viewBox="0 0 24 24" width="24" height="24" class="darkToggleIcon_wfgR"><path fill="currentColor" d="M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"></path></svg></button></div><div class="searchBox_ZlJk"></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div></nav><div id="docusaurus_skipToContent_fallback" class="main-wrapper mainWrapper_z2l0"><main class="container container--fluid margin-vert--lg"><div class="row mdxPageWrapper_j9I6"><div class="col col--8"><article><h1>Community meetings</h1><p>The community meeting runs bi-weekly on Thursday 8am - 9am PST.</p><p>The meeting is typically comprised of 3 parts:</p><ul><li>Discuss <a href="https://bookkeeper.apache.org/community/bookkeeper-proposals/" target="_blank" rel="noopener noreferrer">BookKeeper Proposals</a>.</li><li>Review and address concerns for any open pull requests.</li><li>Open discussion.</li></ul><p>As a member of the BookKeeper community, you are welcome to join any of the meetings if you are interested in. No registration required.</p><p>Meeting planning can be found <a href="https://calendar.google.com/calendar/embed?src=cdph8n8a4bmmvkkghc81mvkd4c%40group.calendar.google.com&amp;ctz=America/Los_Angeles" target="_blank" rel="noopener noreferrer">here</a>.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="past-community-meetings">Past Community Meetings<a href="#past-community-meetings" class="hash-link" aria-label="Direct link to Past Community Meetings" title="Direct link to Past Community Meetings">​</a></h3><p>You can read the meeting notes from <a href="https://cwiki.apache.org/confluence/display/BOOKKEEPER/Community+Meetings" target="_blank" rel="noopener noreferrer">past community meetings</a>.</p></article></div><div class="col col--2"><div class="tableOfContents_bqdL thin-scrollbar"><ul class="table-of-contents table-of-contents__left-border"><li><a href="#past-community-meetings" class="table-of-contents__link toc-highlight">Past Community Meetings</a></li></ul></div></div></div></main></div><footer class="footer footer--dark"><div class="container container-fluid"><div class="row footer__links"><div class="col footer__col"><div class="footer__title">Documentation</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/docs/overview">Overview</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/getting-started/installation">Getting started</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/deployment/manual">Deployment</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/admin/bookies">Administration</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/api/overview">API</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/security/overview">Security</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/development/protocol">Development</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/reference/config">Reference</a></li></ul></div><div class="col footer__col"><div class="footer__title">Community</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/community/mailing-lists">Mailing lists</a></li><li class="footer__item"><a class="footer__link-item" href="/community/slack">Slack</a></li><li class="footer__item"><a href="https://github.com/apache/bookkeeper" target="_blank" rel="noopener noreferrer" class="footer__link-item">Github<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a href="https://twitter.com/asfbookkeeper" target="_blank" rel="noopener noreferrer" class="footer__link-item">Twitter<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div><div class="col footer__col"><div class="footer__title">Project</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/project/who">Who are we?</a></li><li class="footer__item"><a class="footer__link-item" href="/project/bylaws">Bylaws</a></li><li class="footer__item"><a href="https://apache.org/licenses" target="_blank" rel="noopener noreferrer" class="footer__link-item">License<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a class="footer__link-item" href="/project/privacy">Privacy policy</a></li><li class="footer__item"><a href="https://www.apache.org/foundation/sponsorship.html" target="_blank" rel="noopener noreferrer" class="footer__link-item">Sponsorship<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a href="https://www.apache.org/foundation/thanks.html" target="_blank" rel="noopener noreferrer" class="footer__link-item">Thanks<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div></div><div class="footer__bottom text--center"><div class="footer__copyright"><footer class="footer">
         <div class="container">
           <div class="content has-text-centered">
             <p>
@@ -22,7 +22,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/community/presentations/index.html b/content/community/presentations/index.html
index 155e23c..aee3395 100644
--- a/content/community/presentations/index.html
+++ b/content/community/presentations/index.html
@@ -4,12 +4,12 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">Papers and Presentations | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/community/presentations"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docusaurus_tag" content="default"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docsearch:docusaurus_tag" content="default"><meta data-rh="true" property="og:title" content="Papers and Presentations | Apache BookKeeper"><meta data-rh="true" name="description" content="Papers"><meta data-rh="true" property="og:description" content="Papers"><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/community/presentations"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/community/presentations" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/community/presentations" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
-<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navbar__brand" href="/"><div class="navbar__logo"><img src="/img/bk-logo.svg" alt="Apache Bookkeeper" class="themedImage_ToTc themedImage--light_HNdA"><img src="/img/bk-logo.svg" alt="Apache Bookkeeper" class="themedImage_ToTc themedImage--dark_i4oU"></div><b class="navbar__title text--truncate">Apache BookKeeper</b></a><a class="navbar__item navbar__link" href="/docs/overview/">Documentation</a><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Community</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/community/mailing-lists">Mailing lists</a></li><li><a class="dropdown__link" href="/community/slack">Slack</a></li><li><a href="https://github.com/apache/bookkeeper/issues" target="_blank" rel="noopener noreferrer" class="dropdown__link">Github issues<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a class="dropdown__link" href="/community/releases">Release management</a></li><li><a class="dropdown__link" href="/community/meeting">Community meetings</a></li><li><a class="dropdown__link" href="/community/contributing">Contribution guide</a></li><li><a class="dropdown__link" href="/community/coding-guide">Coding guide</a></li><li><a class="dropdown__link" href="/community/testing">Testing guide</a></li><li><a class="dropdown__link" href="/community/issue-report">Issue report guide</a></li><li><a class="dropdown__link" href="/community/release-guide">Release guide</a></li><li><a aria-current="page" class="dropdown__link dropdown__link--active" href="/community/presentations">Presentations</a></li><li><a class="dropdown__link" href="/community/bookkeeper-proposals">BookKeeper proposals (BP)</a></li></ul></div><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Project</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/project/who">Who are we?</a></li><li><a class="dropdown__link" href="/project/bylaws">Bylaws</a></li><li><a href="https://apache.org/licenses" target="_blank" rel="noopener noreferrer" class="dropdown__link">License<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a class="dropdown__link" href="/project/privacy">Privacy policy</a></li><li><a href="https://www.apache.org/foundation/sponsorship.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Sponsorship<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a href="https://www.apache.org/foundation/thanks.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Thanks<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div></div><div class="navbar__items navbar__items--right"><div class="navbar__item dropdown dropdown--hoverable dropdown--right"><a class="navbar__link" aria-haspopup="true" aria-expanded="false" role="button" href="/docs/admin/autorecovery">4.17.0</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/docs/next/overview/">Next</a></li><li><a class="dropdown__link" href="/docs/admin/autorecovery">4.17.0</a></li><li><a class="dropdown__link" href="/docs/4.16.5/overview/">4.16.5</a></li><li><a class="dropdown__link" href="/docs/4.15.5/overview/">4.15.5</a></li><li><a class="dropdown__link" href="/docs/4.14.8/overview/">4.14.8</a></li><li><a class="dropdown__link" href="/docs/4.13.0/overview/">4.13.0</a></li><li><a class="dropdown__link" href="/docs/4.12.1/overview/">4.12.1</a></li><li><a class="dropdown__link" href="/docs/4.11.1/overview/">4.11.1</a></li><li><a class="dropdown__link" href="/docs/4.10.0/overview/">4.10.0</a></li><li><a class="dropdown__link" href="/docs/4.9.2/overview/">4.9.2</a></li><li><a class="dropdown__link" href="/docs/4.8.2/overview/">4.8.2</a></li><li><a class="dropdown__link" href="/docs/4.7.3/overview/">4.7.3</a></li><li><a class="dropdown__link" href="/docs/4.6.2/overview/">4.6.2</a></li><li><a class="dropdown__link" href="/docs/4.5.1/overview/">4.5.1</a></li></ul></div><a class="navbar__item navbar__link" href="/releases">Download</a><div class="toggle_vylO colorModeToggle_DEke"><button class="clean-btn toggleButton_gllP toggleButtonDisabled_aARS" type="button" disabled="" title="Switch between dark and light mode (currently light mode)" aria-label="Switch between dark and light mode (currently light mode)" aria-live="polite"><svg viewBox="0 0 24 24" width="24" height="24" class="lightToggleIcon_pyhR"><path fill="currentColor" d="M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"></path></svg><svg viewBox="0 0 24 24" width="24" height="24" class="darkToggleIcon_wfgR"><path fill="currentColor" d="M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"></path></svg></button></div><div class="searchBox_ZlJk"></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div></nav><div id="docusaurus_skipToContent_fallback" class="main-wrapper mainWrapper_z2l0"><main class="container container--fluid margin-vert--lg"><div class="row mdxPageWrapper_j9I6"><div class="col col--8"><article><h1>Papers and Presentations</h1><h2 class="anchor anchorWithStickyNavbar_LWe7" id="papers">Papers<a href="#papers" class="hash-link" aria-label="Direct link to Papers" title="Direct link to Papers">​</a></h2><ul><li><a href="http://ieeexplore.ieee.org/abstract/document/7930058/" target="_blank" rel="noopener noreferrer">DistributedLog: A High Performance Replicated Log Service</a>, Sijie Guo, Robin Dhamankar, and Leigh Stewart. Data Engineering (ICDE), 2017 IEEE 33rd International Conference on. IEEE, 2017.</li><li><a href="http://dl.acm.org/citation.cfm?id=2433144" target="_blank" rel="noopener noreferrer">Durability with BookKeeper</a>, Flavio P. Junqueira, Ivan Kelly, Benjamin Reed</li></ul><h2 class="anchor anchorWithStickyNavbar_LWe7" id="presentations">Presentations<a href="#presentations" class="hash-link" aria-label="Direct link to Presentations" title="Direct link to Presentations">​</a></h2><ul><li><a href="http://www.slideshare.net/hustlmsp/apache-bookkeeper-a-high-performance-and-low-latency-storage-service" target="_blank" rel="noopener noreferrer">Apache BookKeeper: A High Performance and Low Latency Storage Service</a>, Sijie Guo, Linux Vault 2017</li><li><a href="http://www.slideshare.net/jujjuri/apache-con2016final" target="_blank" rel="noopener noreferrer">Apache BookKeeper as distributed Store</a>, (<a href="http://feathercast.apache.org/apachecon-na-2016-low-latency-distributed-storage-services-using-apache-bookkeeper-venkateswararao-jujjuri-sijie-guo/" target="_blank" rel="noopener noreferrer">audio</a>) JV Jujjuri, ApacheCon 2016</li><li><a href="https://apachebigdata2016.sched.org/event/6M74/building-a-durable-real-time-data-pipeline-apache-bookkeeper-at-twitter-sijie-guo-leigh-stewart-twitter" target="_blank" rel="noopener noreferrer">Building a Durable Real-Time Data Pipeline: Apache BookKeeper at Twitter</a>, Leigh Stewart, Apache Big Data 2016 ( <a href="http://schd.ws/hosted_files/apachebigdata2016/65/Building%20a%20Durable%20Real-Time%20Data%20Pipeline-Apache%20BookKeeper%20at%20Twitter.pdf" target="_blank" rel="noopener noreferrer">Slides</a> )</li><li><a href="http://daxue.qq.com/content/content/id/2492" target="_blank" rel="noopener noreferrer">Scale DistributedLog at Twitter</a>, Sijie Guo, QCon Beijing, April 2016</li><li><a href="https://www.oreilly.com/ideas/twitters-real-time-data-stack?twitter=@bigdata" target="_blank" rel="noopener noreferrer">Building DistributedLog, a high-performance replicated log service</a> (<a href="http://conferences.oreilly.com/strata/strata-ca-2016/public/schedule/detail/46897" target="_blank" rel="noopener noreferrer">Slides</a>), Sijie Guo, Strata+Hadoop World, March 2016</li><li><a href="https://youtu.be/QW1OEQxcjZc" target="_blank" rel="noopener noreferrer">Building DistributedLog, a high-performance replicated log service</a>, Sijie Guo, Sep 2015</li><li><a href="http://www.slideshare.net/MessagingMeetup/cloud-messaging-service-technical-overview" target="_blank" rel="noopener noreferrer">Cloud Messaging Service - Technical Overview</a>, Matteo Merli, Sep 2015</li><li><a href="http://www.slideshare.net/MatthieuMorel/building-reliable-systems-with-apache-bookkeeper" target="_blank" rel="noopener noreferrer">Building reliable systems with Apache BookKeeper</a>, Matthieu Morel, Jun 2014</li><li><a href="https://cwiki.apache.org/confluence/download/attachments/27832576/bk-hadoop-summit-2013.pdf?version=1&amp;modificationDate=1363841022000&amp;api=v2" target="_blank" rel="noopener noreferrer">Serving millions of journals with Apache BookKeeper</a>, Flavio P. Junqueira, Ivan Kelly, March 2013</li><li><a href="http://hbtc2012.hadooper.cn/subject/track1maheswara2.pdf" target="_blank" rel="noopener noreferrer">Namenode High Availability with BookKeeper</a>, Uma Maheswara Rao G, At Hadoop And BigData Technology Conference 2012</li><li><a href="https://cwiki.apache.org/confluence/download/attachments/27832576/bookkeeper-ladis-2012.pdf?version=1&amp;modificationDate=1343016091000&amp;api=v2" target="_blank" rel="noopener noreferrer">Durability with BookKeeper</a>, Flavio P. Junqueira, LADIS Workshop, July 2012</li><li><a href="https://cwiki.apache.org/confluence/download/attachments/27832576/bookkeeper-hic-2011.pdf?version=1&amp;modificationDate=1322791384000&amp;api=v2" target="_blank" rel="noopener noreferrer">BookKeeper</a>, Flavio P. Junqueira, Hadoop in China, 2011</li></ul><h2 class="anchor anchorWithStickyNavbar_LWe7" id="blog-posts">Blog Posts<a href="#blog-posts" class="hash-link" aria-label="Direct link to Blog Posts" title="Direct link to Blog Posts">​</a></h2><ul><li><a href="https://yahooeng.tumblr.com/post/150078336821/open-sourcing-pulsar-pub-sub-messaging-at-scale" target="_blank" rel="noopener noreferrer">Open-sourcing Pulsar, Pub-sub Messaging at Scale</a>, Sep 2016</li><li><a href="http://eolivelli.blogspot.it/2016/03/majordodo-distributed-resource-manager.html" target="_blank" rel="noopener noreferrer">Majordodo - a Distributed Resource Manager built on top of Apache BookKeeper</a>, March 2016 </li><li><a href="https://blog.twitter.com/2015/building-distributedlog-twitter-s-high-performance-replicated-log-service" target="_blank" rel="noopener noreferrer">Building DistributedLog - Twitter&#x27;s high performance replicated log service</a>, Sep 2015</li><li><a href="http://yahooeng.tumblr.com/post/109908973316/bookkeeper-yahoos-distributed-log-storage-is" target="_blank" rel="noopener noreferrer">BookKeeper - Yahoo&#x27;s Distributed Log Storage - is an Apache Top Level Project</a>, Feb 2015</li><li><a href="https://developer.yahoo.com/blogs/ydn/bookkeeper-durability-scale-54048.html" target="_blank" rel="noopener noreferrer">BookKeeper - Durability at Scale</a>, Nov 2012</li></ul></article></div><div class="col col--2"><div class="tableOfContents_bqdL thin-scrollbar"><ul class="table-of-contents table-of-contents__left-border"><li><a href="#papers" class="table-of-contents__link toc-highlight">Papers</a></li><li><a href="#presentations" class="table-of-contents__link toc-highlight">Presentations</a></li><li><a href="#blog-posts" class="table-of-contents__link toc-highlight">Blog Posts</a></li></ul></div></div></div></main></div><footer class="footer footer--dark"><div class="container container-fluid"><div class="row footer__links"><div class="col footer__col"><div class="footer__title">Documentation</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/docs/overview">Overview</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/getting-started/installation">Getting started</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/deployment/manual">Deployment</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/admin/bookies">Administration</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/api/overview">API</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/security/overview">Security</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/development/protocol">Development</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/reference/config">Reference</a></li></ul></div><div class="col footer__col"><div class="footer__title">Community</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/community/mailing-lists">Mailing lists</a></li><li class="footer__item"><a class="footer__link-item" href="/community/slack">Slack</a></li><li class="footer__item"><a href="https://github.com/apache/bookkeeper" target="_blank" rel="noopener noreferrer" class="footer__link-item">Github<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a href="https://twitter.com/asfbookkeeper" target="_blank" rel="noopener noreferrer" class="footer__link-item">Twitter<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div><div class="col footer__col"><div class="footer__title">Project</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/project/who">Who are we?</a></li><li class="footer__item"><a class="footer__link-item" href="/project/bylaws">Bylaws</a></li><li class="footer__item"><a href="https://apache.org/licenses" target="_blank" rel="noopener noreferrer" class="footer__link-item">License<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a class="footer__link-item" href="/project/privacy">Privacy policy</a></li><li class="footer__item"><a href="https://www.apache.org/foundation/sponsorship.html" target="_blank" rel="noopener noreferrer" class="footer__link-item">Sponsorship<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a href="https://www.apache.org/foundation/thanks.html" target="_blank" rel="noopener noreferrer" class="footer__link-item">Thanks<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div></div><div class="footer__bottom text--center"><div class="footer__copyright"><footer class="footer">
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navbar__brand" href="/"><div class="navbar__logo"><img src="/img/bk-logo.svg" alt="Apache Bookkeeper" class="themedImage_ToTc themedImage--light_HNdA"><img src="/img/bk-logo.svg" alt="Apache Bookkeeper" class="themedImage_ToTc themedImage--dark_i4oU"></div><b class="navbar__title text--truncate">Apache BookKeeper</b></a><a class="navbar__item navbar__link" href="/docs/overview/">Documentation</a><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Community</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/community/mailing-lists">Mailing lists</a></li><li><a class="dropdown__link" href="/community/slack">Slack</a></li><li><a href="https://github.com/apache/bookkeeper/issues" target="_blank" rel="noopener noreferrer" class="dropdown__link">Github issues<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a class="dropdown__link" href="/community/releases">Release management</a></li><li><a class="dropdown__link" href="/community/meeting">Community meetings</a></li><li><a class="dropdown__link" href="/community/contributing">Contribution guide</a></li><li><a class="dropdown__link" href="/community/coding-guide">Coding guide</a></li><li><a class="dropdown__link" href="/community/testing">Testing guide</a></li><li><a class="dropdown__link" href="/community/issue-report">Issue report guide</a></li><li><a class="dropdown__link" href="/community/release-guide">Release guide</a></li><li><a aria-current="page" class="dropdown__link dropdown__link--active" href="/community/presentations">Presentations</a></li><li><a class="dropdown__link" href="/community/bookkeeper-proposals">BookKeeper proposals (BP)</a></li></ul></div><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Project</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/project/who">Who are we?</a></li><li><a class="dropdown__link" href="/project/bylaws">Bylaws</a></li><li><a href="https://apache.org/licenses" target="_blank" rel="noopener noreferrer" class="dropdown__link">License<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a class="dropdown__link" href="/project/privacy">Privacy policy</a></li><li><a href="https://www.apache.org/foundation/sponsorship.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Sponsorship<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a href="https://www.apache.org/foundation/thanks.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Thanks<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div></div><div class="navbar__items navbar__items--right"><div class="navbar__item dropdown dropdown--hoverable dropdown--right"><a class="navbar__link" aria-haspopup="true" aria-expanded="false" role="button" href="/docs/overview/">4.17.0</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/docs/next/overview/">Next</a></li><li><a class="dropdown__link" href="/docs/overview/">4.17.0</a></li><li><a class="dropdown__link" href="/docs/4.16.5/overview/">4.16.5</a></li><li><a class="dropdown__link" href="/docs/4.15.5/overview/">4.15.5</a></li><li><a class="dropdown__link" href="/docs/4.14.8/overview/">4.14.8</a></li><li><a class="dropdown__link" href="/docs/4.13.0/overview/">4.13.0</a></li><li><a class="dropdown__link" href="/docs/4.12.1/overview/">4.12.1</a></li><li><a class="dropdown__link" href="/docs/4.11.1/overview/">4.11.1</a></li><li><a class="dropdown__link" href="/docs/4.10.0/overview/">4.10.0</a></li><li><a class="dropdown__link" href="/docs/4.9.2/overview/">4.9.2</a></li><li><a class="dropdown__link" href="/docs/4.8.2/overview/">4.8.2</a></li><li><a class="dropdown__link" href="/docs/4.7.3/overview/">4.7.3</a></li><li><a class="dropdown__link" href="/docs/4.6.2/overview/">4.6.2</a></li><li><a class="dropdown__link" href="/docs/4.5.1/overview/">4.5.1</a></li></ul></div><a class="navbar__item navbar__link" href="/releases">Download</a><div class="toggle_vylO colorModeToggle_DEke"><button class="clean-btn toggleButton_gllP toggleButtonDisabled_aARS" type="button" disabled="" title="Switch between dark and light mode (currently light mode)" aria-label="Switch between dark and light mode (currently light mode)" aria-live="polite"><svg viewBox="0 0 24 24" width="24" height="24" class="lightToggleIcon_pyhR"><path fill="currentColor" d="M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"></path></svg><svg viewBox="0 0 24 24" width="24" height="24" class="darkToggleIcon_wfgR"><path fill="currentColor" d="M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"></path></svg></button></div><div class="searchBox_ZlJk"></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div></nav><div id="docusaurus_skipToContent_fallback" class="main-wrapper mainWrapper_z2l0"><main class="container container--fluid margin-vert--lg"><div class="row mdxPageWrapper_j9I6"><div class="col col--8"><article><h1>Papers and Presentations</h1><h2 class="anchor anchorWithStickyNavbar_LWe7" id="papers">Papers<a href="#papers" class="hash-link" aria-label="Direct link to Papers" title="Direct link to Papers">​</a></h2><ul><li><a href="http://ieeexplore.ieee.org/abstract/document/7930058/" target="_blank" rel="noopener noreferrer">DistributedLog: A High Performance Replicated Log Service</a>, Sijie Guo, Robin Dhamankar, and Leigh Stewart. Data Engineering (ICDE), 2017 IEEE 33rd International Conference on. IEEE, 2017.</li><li><a href="http://dl.acm.org/citation.cfm?id=2433144" target="_blank" rel="noopener noreferrer">Durability with BookKeeper</a>, Flavio P. Junqueira, Ivan Kelly, Benjamin Reed</li></ul><h2 class="anchor anchorWithStickyNavbar_LWe7" id="presentations">Presentations<a href="#presentations" class="hash-link" aria-label="Direct link to Presentations" title="Direct link to Presentations">​</a></h2><ul><li><a href="http://www.slideshare.net/hustlmsp/apache-bookkeeper-a-high-performance-and-low-latency-storage-service" target="_blank" rel="noopener noreferrer">Apache BookKeeper: A High Performance and Low Latency Storage Service</a>, Sijie Guo, Linux Vault 2017</li><li><a href="http://www.slideshare.net/jujjuri/apache-con2016final" target="_blank" rel="noopener noreferrer">Apache BookKeeper as distributed Store</a>, (<a href="http://feathercast.apache.org/apachecon-na-2016-low-latency-distributed-storage-services-using-apache-bookkeeper-venkateswararao-jujjuri-sijie-guo/" target="_blank" rel="noopener noreferrer">audio</a>) JV Jujjuri, ApacheCon 2016</li><li><a href="https://apachebigdata2016.sched.org/event/6M74/building-a-durable-real-time-data-pipeline-apache-bookkeeper-at-twitter-sijie-guo-leigh-stewart-twitter" target="_blank" rel="noopener noreferrer">Building a Durable Real-Time Data Pipeline: Apache BookKeeper at Twitter</a>, Leigh Stewart, Apache Big Data 2016 ( <a href="http://schd.ws/hosted_files/apachebigdata2016/65/Building%20a%20Durable%20Real-Time%20Data%20Pipeline-Apache%20BookKeeper%20at%20Twitter.pdf" target="_blank" rel="noopener noreferrer">Slides</a> )</li><li><a href="http://daxue.qq.com/content/content/id/2492" target="_blank" rel="noopener noreferrer">Scale DistributedLog at Twitter</a>, Sijie Guo, QCon Beijing, April 2016</li><li><a href="https://www.oreilly.com/ideas/twitters-real-time-data-stack?twitter=@bigdata" target="_blank" rel="noopener noreferrer">Building DistributedLog, a high-performance replicated log service</a> (<a href="http://conferences.oreilly.com/strata/strata-ca-2016/public/schedule/detail/46897" target="_blank" rel="noopener noreferrer">Slides</a>), Sijie Guo, Strata+Hadoop World, March 2016</li><li><a href="https://youtu.be/QW1OEQxcjZc" target="_blank" rel="noopener noreferrer">Building DistributedLog, a high-performance replicated log service</a>, Sijie Guo, Sep 2015</li><li><a href="http://www.slideshare.net/MessagingMeetup/cloud-messaging-service-technical-overview" target="_blank" rel="noopener noreferrer">Cloud Messaging Service - Technical Overview</a>, Matteo Merli, Sep 2015</li><li><a href="http://www.slideshare.net/MatthieuMorel/building-reliable-systems-with-apache-bookkeeper" target="_blank" rel="noopener noreferrer">Building reliable systems with Apache BookKeeper</a>, Matthieu Morel, Jun 2014</li><li><a href="https://cwiki.apache.org/confluence/download/attachments/27832576/bk-hadoop-summit-2013.pdf?version=1&amp;modificationDate=1363841022000&amp;api=v2" target="_blank" rel="noopener noreferrer">Serving millions of journals with Apache BookKeeper</a>, Flavio P. Junqueira, Ivan Kelly, March 2013</li><li><a href="http://hbtc2012.hadooper.cn/subject/track1maheswara2.pdf" target="_blank" rel="noopener noreferrer">Namenode High Availability with BookKeeper</a>, Uma Maheswara Rao G, At Hadoop And BigData Technology Conference 2012</li><li><a href="https://cwiki.apache.org/confluence/download/attachments/27832576/bookkeeper-ladis-2012.pdf?version=1&amp;modificationDate=1343016091000&amp;api=v2" target="_blank" rel="noopener noreferrer">Durability with BookKeeper</a>, Flavio P. Junqueira, LADIS Workshop, July 2012</li><li><a href="https://cwiki.apache.org/confluence/download/attachments/27832576/bookkeeper-hic-2011.pdf?version=1&amp;modificationDate=1322791384000&amp;api=v2" target="_blank" rel="noopener noreferrer">BookKeeper</a>, Flavio P. Junqueira, Hadoop in China, 2011</li></ul><h2 class="anchor anchorWithStickyNavbar_LWe7" id="blog-posts">Blog Posts<a href="#blog-posts" class="hash-link" aria-label="Direct link to Blog Posts" title="Direct link to Blog Posts">​</a></h2><ul><li><a href="https://yahooeng.tumblr.com/post/150078336821/open-sourcing-pulsar-pub-sub-messaging-at-scale" target="_blank" rel="noopener noreferrer">Open-sourcing Pulsar, Pub-sub Messaging at Scale</a>, Sep 2016</li><li><a href="http://eolivelli.blogspot.it/2016/03/majordodo-distributed-resource-manager.html" target="_blank" rel="noopener noreferrer">Majordodo - a Distributed Resource Manager built on top of Apache BookKeeper</a>, March 2016 </li><li><a href="https://blog.twitter.com/2015/building-distributedlog-twitter-s-high-performance-replicated-log-service" target="_blank" rel="noopener noreferrer">Building DistributedLog - Twitter&#x27;s high performance replicated log service</a>, Sep 2015</li><li><a href="http://yahooeng.tumblr.com/post/109908973316/bookkeeper-yahoos-distributed-log-storage-is" target="_blank" rel="noopener noreferrer">BookKeeper - Yahoo&#x27;s Distributed Log Storage - is an Apache Top Level Project</a>, Feb 2015</li><li><a href="https://developer.yahoo.com/blogs/ydn/bookkeeper-durability-scale-54048.html" target="_blank" rel="noopener noreferrer">BookKeeper - Durability at Scale</a>, Nov 2012</li></ul></article></div><div class="col col--2"><div class="tableOfContents_bqdL thin-scrollbar"><ul class="table-of-contents table-of-contents__left-border"><li><a href="#papers" class="table-of-contents__link toc-highlight">Papers</a></li><li><a href="#presentations" class="table-of-contents__link toc-highlight">Presentations</a></li><li><a href="#blog-posts" class="table-of-contents__link toc-highlight">Blog Posts</a></li></ul></div></div></div></main></div><footer class="footer footer--dark"><div class="container container-fluid"><div class="row footer__links"><div class="col footer__col"><div class="footer__title">Documentation</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/docs/overview">Overview</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/getting-started/installation">Getting started</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/deployment/manual">Deployment</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/admin/bookies">Administration</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/api/overview">API</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/security/overview">Security</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/development/protocol">Development</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/reference/config">Reference</a></li></ul></div><div class="col footer__col"><div class="footer__title">Community</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/community/mailing-lists">Mailing lists</a></li><li class="footer__item"><a class="footer__link-item" href="/community/slack">Slack</a></li><li class="footer__item"><a href="https://github.com/apache/bookkeeper" target="_blank" rel="noopener noreferrer" class="footer__link-item">Github<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a href="https://twitter.com/asfbookkeeper" target="_blank" rel="noopener noreferrer" class="footer__link-item">Twitter<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div><div class="col footer__col"><div class="footer__title">Project</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/project/who">Who are we?</a></li><li class="footer__item"><a class="footer__link-item" href="/project/bylaws">Bylaws</a></li><li class="footer__item"><a href="https://apache.org/licenses" target="_blank" rel="noopener noreferrer" class="footer__link-item">License<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a class="footer__link-item" href="/project/privacy">Privacy policy</a></li><li class="footer__item"><a href="https://www.apache.org/foundation/sponsorship.html" target="_blank" rel="noopener noreferrer" class="footer__link-item">Sponsorship<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a href="https://www.apache.org/foundation/thanks.html" target="_blank" rel="noopener noreferrer" class="footer__link-item">Thanks<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div></div><div class="footer__bottom text--center"><div class="footer__copyright"><footer class="footer">
         <div class="container">
           <div class="content has-text-centered">
             <p>
@@ -22,7 +22,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/community/release-guide/index.html b/content/community/release-guide/index.html
index bd3c55b..bbd4d3a 100644
--- a/content/community/release-guide/index.html
+++ b/content/community/release-guide/index.html
@@ -4,12 +4,12 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">Apache BookKeeper Release Guide | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/community/release-guide"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docusaurus_tag" content="default"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docsearch:docusaurus_tag" content="default"><meta data-rh="true" property="og:title" content="Apache BookKeeper Release Guide | Apache BookKeeper"><meta data-rh="true" name="description" content="This page documents the procedure to make an Apache BookKeeper release."><meta data-rh="true" property="og:description" content="This page documents the procedure to make an Apache BookKeeper release."><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/community/release-guide"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/community/release-guide" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/community/release-guide" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
-<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navbar__brand" href="/"><div class="navbar__logo"><img src="/img/bk-logo.svg" alt="Apache Bookkeeper" class="themedImage_ToTc themedImage--light_HNdA"><img src="/img/bk-logo.svg" alt="Apache Bookkeeper" class="themedImage_ToTc themedImage--dark_i4oU"></div><b class="navbar__title text--truncate">Apache BookKeeper</b></a><a class="navbar__item navbar__link" href="/docs/overview/">Documentation</a><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Community</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/community/mailing-lists">Mailing lists</a></li><li><a class="dropdown__link" href="/community/slack">Slack</a></li><li><a href="https://github.com/apache/bookkeeper/issues" target="_blank" rel="noopener noreferrer" class="dropdown__link">Github issues<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a class="dropdown__link" href="/community/releases">Release management</a></li><li><a class="dropdown__link" href="/community/meeting">Community meetings</a></li><li><a class="dropdown__link" href="/community/contributing">Contribution guide</a></li><li><a class="dropdown__link" href="/community/coding-guide">Coding guide</a></li><li><a class="dropdown__link" href="/community/testing">Testing guide</a></li><li><a class="dropdown__link" href="/community/issue-report">Issue report guide</a></li><li><a aria-current="page" class="dropdown__link dropdown__link--active" href="/community/release-guide">Release guide</a></li><li><a class="dropdown__link" href="/community/presentations">Presentations</a></li><li><a class="dropdown__link" href="/community/bookkeeper-proposals">BookKeeper proposals (BP)</a></li></ul></div><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Project</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/project/who">Who are we?</a></li><li><a class="dropdown__link" href="/project/bylaws">Bylaws</a></li><li><a href="https://apache.org/licenses" target="_blank" rel="noopener noreferrer" class="dropdown__link">License<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a class="dropdown__link" href="/project/privacy">Privacy policy</a></li><li><a href="https://www.apache.org/foundation/sponsorship.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Sponsorship<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a href="https://www.apache.org/foundation/thanks.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Thanks<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div></div><div class="navbar__items navbar__items--right"><div class="navbar__item dropdown dropdown--hoverable dropdown--right"><a class="navbar__link" aria-haspopup="true" aria-expanded="false" role="button" href="/docs/admin/autorecovery">4.17.0</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/docs/next/overview/">Next</a></li><li><a class="dropdown__link" href="/docs/admin/autorecovery">4.17.0</a></li><li><a class="dropdown__link" href="/docs/4.16.5/overview/">4.16.5</a></li><li><a class="dropdown__link" href="/docs/4.15.5/overview/">4.15.5</a></li><li><a class="dropdown__link" href="/docs/4.14.8/overview/">4.14.8</a></li><li><a class="dropdown__link" href="/docs/4.13.0/overview/">4.13.0</a></li><li><a class="dropdown__link" href="/docs/4.12.1/overview/">4.12.1</a></li><li><a class="dropdown__link" href="/docs/4.11.1/overview/">4.11.1</a></li><li><a class="dropdown__link" href="/docs/4.10.0/overview/">4.10.0</a></li><li><a class="dropdown__link" href="/docs/4.9.2/overview/">4.9.2</a></li><li><a class="dropdown__link" href="/docs/4.8.2/overview/">4.8.2</a></li><li><a class="dropdown__link" href="/docs/4.7.3/overview/">4.7.3</a></li><li><a class="dropdown__link" href="/docs/4.6.2/overview/">4.6.2</a></li><li><a class="dropdown__link" href="/docs/4.5.1/overview/">4.5.1</a></li></ul></div><a class="navbar__item navbar__link" href="/releases">Download</a><div class="toggle_vylO colorModeToggle_DEke"><button class="clean-btn toggleButton_gllP toggleButtonDisabled_aARS" type="button" disabled="" title="Switch between dark and light mode (currently light mode)" aria-label="Switch between dark and light mode (currently light mode)" aria-live="polite"><svg viewBox="0 0 24 24" width="24" height="24" class="lightToggleIcon_pyhR"><path fill="currentColor" d="M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"></path></svg><svg viewBox="0 0 24 24" width="24" height="24" class="darkToggleIcon_wfgR"><path fill="currentColor" d="M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"></path></svg></button></div><div class="searchBox_ZlJk"></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div></nav><div id="docusaurus_skipToContent_fallback" class="main-wrapper mainWrapper_z2l0"><main class="container container--fluid margin-vert--lg"><div class="row mdxPageWrapper_j9I6"><div class="col col--8"><article><h1>Apache BookKeeper Release Guide</h1><p>This page documents the procedure to make an Apache BookKeeper release.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="introduction">Introduction<a href="#introduction" class="hash-link" aria-label="Direct link to Introduction" title="Direct link to Introduction">​</a></h2><p>The Apache BookKeeper project periodically declares and publishes releases. A release is one or more packages of the project artifact(s) that are approved for general public distribution and use. They may come with various degrees of caveat regarding their perceived quality and potential for change, such as “alpha”, “beta”, “incubating”, “stable”, etc.</p><p>The BookKeeper community treats releases with great importance. They are a public face of the project and most users interact with the project only through the releases. Releases are signed off by the entire BookKeeper community in a public vote.</p><p>Each release is executed by a <em>Release Manager</em>, who is selected among the <a href="https://bookkeeper.apache.org/project/who" target="_blank" rel="noopener noreferrer">BookKeeper committers</a>. This document describes the process that the Release Manager follows to perform a release. Any changes to this process should be discussed and adopted on the <a href="https://lists.apache.org/list.html?dev@bookkeeper.apache.org" target="_blank" rel="noopener noreferrer">dev@ mailing list</a>.</p><p>Please remember that publishing software has legal consequences. This guide complements the foundation-wide <a href="http://www.apache.org/dev/release.html" target="_blank" rel="noopener noreferrer">Product Release Policy</a> and <a href="http://www.apache.org/dev/release-distribution" target="_blank" rel="noopener noreferrer">Release Distribution Policy</a>.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="overview">Overview<a href="#overview" class="hash-link" aria-label="Direct link to Overview" title="Direct link to Overview">​</a></h2><p>The release process consists of several steps:</p><ol><li>Decide to release</li><li>Prepare for the release</li><li>Build a release candidate</li><li>Vote on the release candidate</li><li>If necessary, fix any issues and go back to step 3.</li><li>Finalize the release</li><li>Promote the release</li></ol><hr><h2 class="anchor anchorWithStickyNavbar_LWe7" id="decide-to-release">Decide to release<a href="#decide-to-release" class="hash-link" aria-label="Direct link to Decide to release" title="Direct link to Decide to release">​</a></h2><p>Deciding to release and selecting a Release Manager is the first step of the release process. This is a consensus-based decision of the entire community.</p><p>Anybody can propose a release on the dev@ mailing list, giving a solid argument and nominating a committer as the Release Manager (including themselves). There’s no formal process, no vote requirements, and no timing requirements. Any objections should be resolved by consensus before starting the release.</p><p>In general, the community prefers to have a rotating set of 3-5 Release Managers. Keeping a small core set of managers allows enough people to build expertise in this area and improve processes over time, without Release Managers needing to re-learn the processes for each release. That said, if you are a committer interested in serving the community in this way, please reach out to the community on the dev@ mailing list.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="checklist-to-proceed-to-the-next-step">Checklist to proceed to the next step<a href="#checklist-to-proceed-to-the-next-step" class="hash-link" aria-label="Direct link to Checklist to proceed to the next step" title="Direct link to Checklist to proceed to the next step">​</a></h3><ol><li>Community agrees to release</li><li>Community selects a Release Manager</li></ol><hr><h2 class="anchor anchorWithStickyNavbar_LWe7" id="prepare-for-the-release">Prepare for the release<a href="#prepare-for-the-release" class="hash-link" aria-label="Direct link to Prepare for the release" title="Direct link to Prepare for the release">​</a></h2><p>Before your first release, you should perform one-time configuration steps. This will set up your security keys for signing the release and access to various release repositories.</p><p>To prepare for each release, you should audit the project status in Github issue tracker, and do necessary bookkeeping. Finally, you should create a release branch from which individual release candidates will be built.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="one-time-setup-instructions">One-time setup instructions<a href="#one-time-setup-instructions" class="hash-link" aria-label="Direct link to One-time setup instructions" title="Direct link to One-time setup instructions">​</a></h3><h4 class="anchor anchorWithStickyNavbar_LWe7" id="gpg-key">GPG Key<a href="#gpg-key" class="hash-link" aria-label="Direct link to GPG Key" title="Direct link to GPG Key">​</a></h4><p>You need to have a GPG key to sign the release artifacts. Please be aware of the ASF-wide <a href="https://www.apache.org/dev/release-signing.html" target="_blank" rel="noopener noreferrer">release signing guidelines</a>.
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navbar__brand" href="/"><div class="navbar__logo"><img src="/img/bk-logo.svg" alt="Apache Bookkeeper" class="themedImage_ToTc themedImage--light_HNdA"><img src="/img/bk-logo.svg" alt="Apache Bookkeeper" class="themedImage_ToTc themedImage--dark_i4oU"></div><b class="navbar__title text--truncate">Apache BookKeeper</b></a><a class="navbar__item navbar__link" href="/docs/overview/">Documentation</a><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Community</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/community/mailing-lists">Mailing lists</a></li><li><a class="dropdown__link" href="/community/slack">Slack</a></li><li><a href="https://github.com/apache/bookkeeper/issues" target="_blank" rel="noopener noreferrer" class="dropdown__link">Github issues<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a class="dropdown__link" href="/community/releases">Release management</a></li><li><a class="dropdown__link" href="/community/meeting">Community meetings</a></li><li><a class="dropdown__link" href="/community/contributing">Contribution guide</a></li><li><a class="dropdown__link" href="/community/coding-guide">Coding guide</a></li><li><a class="dropdown__link" href="/community/testing">Testing guide</a></li><li><a class="dropdown__link" href="/community/issue-report">Issue report guide</a></li><li><a aria-current="page" class="dropdown__link dropdown__link--active" href="/community/release-guide">Release guide</a></li><li><a class="dropdown__link" href="/community/presentations">Presentations</a></li><li><a class="dropdown__link" href="/community/bookkeeper-proposals">BookKeeper proposals (BP)</a></li></ul></div><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Project</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/project/who">Who are we?</a></li><li><a class="dropdown__link" href="/project/bylaws">Bylaws</a></li><li><a href="https://apache.org/licenses" target="_blank" rel="noopener noreferrer" class="dropdown__link">License<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a class="dropdown__link" href="/project/privacy">Privacy policy</a></li><li><a href="https://www.apache.org/foundation/sponsorship.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Sponsorship<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a href="https://www.apache.org/foundation/thanks.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Thanks<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div></div><div class="navbar__items navbar__items--right"><div class="navbar__item dropdown dropdown--hoverable dropdown--right"><a class="navbar__link" aria-haspopup="true" aria-expanded="false" role="button" href="/docs/overview/">4.17.0</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/docs/next/overview/">Next</a></li><li><a class="dropdown__link" href="/docs/overview/">4.17.0</a></li><li><a class="dropdown__link" href="/docs/4.16.5/overview/">4.16.5</a></li><li><a class="dropdown__link" href="/docs/4.15.5/overview/">4.15.5</a></li><li><a class="dropdown__link" href="/docs/4.14.8/overview/">4.14.8</a></li><li><a class="dropdown__link" href="/docs/4.13.0/overview/">4.13.0</a></li><li><a class="dropdown__link" href="/docs/4.12.1/overview/">4.12.1</a></li><li><a class="dropdown__link" href="/docs/4.11.1/overview/">4.11.1</a></li><li><a class="dropdown__link" href="/docs/4.10.0/overview/">4.10.0</a></li><li><a class="dropdown__link" href="/docs/4.9.2/overview/">4.9.2</a></li><li><a class="dropdown__link" href="/docs/4.8.2/overview/">4.8.2</a></li><li><a class="dropdown__link" href="/docs/4.7.3/overview/">4.7.3</a></li><li><a class="dropdown__link" href="/docs/4.6.2/overview/">4.6.2</a></li><li><a class="dropdown__link" href="/docs/4.5.1/overview/">4.5.1</a></li></ul></div><a class="navbar__item navbar__link" href="/releases">Download</a><div class="toggle_vylO colorModeToggle_DEke"><button class="clean-btn toggleButton_gllP toggleButtonDisabled_aARS" type="button" disabled="" title="Switch between dark and light mode (currently light mode)" aria-label="Switch between dark and light mode (currently light mode)" aria-live="polite"><svg viewBox="0 0 24 24" width="24" height="24" class="lightToggleIcon_pyhR"><path fill="currentColor" d="M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"></path></svg><svg viewBox="0 0 24 24" width="24" height="24" class="darkToggleIcon_wfgR"><path fill="currentColor" d="M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"></path></svg></button></div><div class="searchBox_ZlJk"></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div></nav><div id="docusaurus_skipToContent_fallback" class="main-wrapper mainWrapper_z2l0"><main class="container container--fluid margin-vert--lg"><div class="row mdxPageWrapper_j9I6"><div class="col col--8"><article><h1>Apache BookKeeper Release Guide</h1><p>This page documents the procedure to make an Apache BookKeeper release.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="introduction">Introduction<a href="#introduction" class="hash-link" aria-label="Direct link to Introduction" title="Direct link to Introduction">​</a></h2><p>The Apache BookKeeper project periodically declares and publishes releases. A release is one or more packages of the project artifact(s) that are approved for general public distribution and use. They may come with various degrees of caveat regarding their perceived quality and potential for change, such as “alpha”, “beta”, “incubating”, “stable”, etc.</p><p>The BookKeeper community treats releases with great importance. They are a public face of the project and most users interact with the project only through the releases. Releases are signed off by the entire BookKeeper community in a public vote.</p><p>Each release is executed by a <em>Release Manager</em>, who is selected among the <a href="https://bookkeeper.apache.org/project/who" target="_blank" rel="noopener noreferrer">BookKeeper committers</a>. This document describes the process that the Release Manager follows to perform a release. Any changes to this process should be discussed and adopted on the <a href="https://lists.apache.org/list.html?dev@bookkeeper.apache.org" target="_blank" rel="noopener noreferrer">dev@ mailing list</a>.</p><p>Please remember that publishing software has legal consequences. This guide complements the foundation-wide <a href="http://www.apache.org/dev/release.html" target="_blank" rel="noopener noreferrer">Product Release Policy</a> and <a href="http://www.apache.org/dev/release-distribution" target="_blank" rel="noopener noreferrer">Release Distribution Policy</a>.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="overview">Overview<a href="#overview" class="hash-link" aria-label="Direct link to Overview" title="Direct link to Overview">​</a></h2><p>The release process consists of several steps:</p><ol><li>Decide to release</li><li>Prepare for the release</li><li>Build a release candidate</li><li>Vote on the release candidate</li><li>If necessary, fix any issues and go back to step 3.</li><li>Finalize the release</li><li>Promote the release</li></ol><hr><h2 class="anchor anchorWithStickyNavbar_LWe7" id="decide-to-release">Decide to release<a href="#decide-to-release" class="hash-link" aria-label="Direct link to Decide to release" title="Direct link to Decide to release">​</a></h2><p>Deciding to release and selecting a Release Manager is the first step of the release process. This is a consensus-based decision of the entire community.</p><p>Anybody can propose a release on the dev@ mailing list, giving a solid argument and nominating a committer as the Release Manager (including themselves). There’s no formal process, no vote requirements, and no timing requirements. Any objections should be resolved by consensus before starting the release.</p><p>In general, the community prefers to have a rotating set of 3-5 Release Managers. Keeping a small core set of managers allows enough people to build expertise in this area and improve processes over time, without Release Managers needing to re-learn the processes for each release. That said, if you are a committer interested in serving the community in this way, please reach out to the community on the dev@ mailing list.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="checklist-to-proceed-to-the-next-step">Checklist to proceed to the next step<a href="#checklist-to-proceed-to-the-next-step" class="hash-link" aria-label="Direct link to Checklist to proceed to the next step" title="Direct link to Checklist to proceed to the next step">​</a></h3><ol><li>Community agrees to release</li><li>Community selects a Release Manager</li></ol><hr><h2 class="anchor anchorWithStickyNavbar_LWe7" id="prepare-for-the-release">Prepare for the release<a href="#prepare-for-the-release" class="hash-link" aria-label="Direct link to Prepare for the release" title="Direct link to Prepare for the release">​</a></h2><p>Before your first release, you should perform one-time configuration steps. This will set up your security keys for signing the release and access to various release repositories.</p><p>To prepare for each release, you should audit the project status in Github issue tracker, and do necessary bookkeeping. Finally, you should create a release branch from which individual release candidates will be built.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="one-time-setup-instructions">One-time setup instructions<a href="#one-time-setup-instructions" class="hash-link" aria-label="Direct link to One-time setup instructions" title="Direct link to One-time setup instructions">​</a></h3><h4 class="anchor anchorWithStickyNavbar_LWe7" id="gpg-key">GPG Key<a href="#gpg-key" class="hash-link" aria-label="Direct link to GPG Key" title="Direct link to GPG Key">​</a></h4><p>You need to have a GPG key to sign the release artifacts. Please be aware of the ASF-wide <a href="https://www.apache.org/dev/release-signing.html" target="_blank" rel="noopener noreferrer">release signing guidelines</a>.
 If you don’t have a GPG key associated with your Apache account, please create one according to the <a href="http://apache.org/dev/openpgp.html#generate-key" target="_blank" rel="noopener noreferrer">guidelines</a> and <a href="https://www.apache.org/dev/release-signing.html#keyserver-upload" target="_blank" rel="noopener noreferrer">upload</a> your key to a public key server.</p><blockquote><p>It is important to <a href="https://www.apache.org/dev/release-signing.html#apache-wot" target="_blank" rel="noopener noreferrer">link</a> your GPG key into the Apache web of trust.
 You can reach out other committers in Apache BookKeeper community for signing your key.</p></blockquote><p>Once you have a GPG key associated with your Apache count, then:</p><p><strong>First</strong>, Determine your Apache GPG Key and Key ID, as follows:</p><div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">gpg --list-keys</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>This will list your GPG keys. One of these should reflect your Apache account, for example:</p><div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">--------------------------------------------------</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">pub   2048R/845E6689 2016-02-23</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">uid                  Nomen Nescio &lt;anonymous@apache.org&gt;</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">sub   2048R/BA4D50BE 2016-02-23</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>Here, the key ID is the 8-digit hex string in the <code>pub</code> line: <code>845E6689</code>.</p><p><strong>Second</strong>, add your Apache GPG key to the BookKeeper’s <code>KEYS</code> file in <a href="https://dist.apache.org/repos/dist/release/bookkeeper/KEYS" target="_blank" rel="noopener noreferrer"><code>dist</code></a>.</p><div class="language-shell codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-shell codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic"># checkout the svn folder that contains the KEYS file</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">svn co https://dist.apache.org/repos/dist/release/bookkeeper bookkeeper_dist</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token builtin class-name">cd</span><span class="token plain"> bookkeeper_dist</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic"># Export the key in ascii format and append it to the file</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain"> gpg --list-sigs </span><span class="token environment constant" style="color:#36acaa">$USER</span><span class="token plain">@apache.org</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  gpg --export --armor </span><span class="token environment constant" style="color:#36acaa">$USER</span><span class="token plain">@apache.org </span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">&gt;&gt;</span><span class="token plain"> KEYS</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic"># Commit to svn</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">svn ci -m </span><span class="token string" style="color:#e3116c">&quot;Added gpg key for </span><span class="token string environment constant" style="color:#36acaa">$USER</span><span class="token string" style="color:#e3116c">&quot;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>Once you committed, please verify if your GPG key shows up in the BookkKeeper&#x27;s <code>KEYS</code> file in <a href="https://dist.apache.org/repos/dist/release/bookkeeper/KEYS" target="_blank" rel="noopener noreferrer"><code>dist</code></a>.</p><p><strong>Third</strong>, configure <code>git</code> to use this key when signing code by giving it your key ID, as follows:</p><div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">git config --global user.signingkey 845E6689</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>You may drop the <code>--global</code> option if you’d prefer to use this key for the current repository only.</p><p>You may wish to start <code>gpg-agent</code> to unlock your GPG key only once using your passphrase. Otherwise, you may need to enter this passphrase hundreds of times. The setup for <code>gpg-agent</code> varies based on operating system, but may be something like this:</p><div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">eval $(gpg-agent --daemon --no-grab --write-env-file $HOME/.gpg-agent-info)</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">export GPG_TTY=$(tty)</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">export GPG_AGENT_INFO</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><h4 class="anchor anchorWithStickyNavbar_LWe7" id="access-to-apache-nexus-repository">Access to Apache Nexus repository<a href="#access-to-apache-nexus-repository" class="hash-link" aria-label="Direct link to Access to Apache Nexus repository" title="Direct link to Access to Apache Nexus repository">​</a></h4><p>Configure access to the <a href="http://repository.apache.org/" target="_blank" rel="noopener noreferrer">Apache Nexus repository</a>, which enables final deployment of releases to the Maven Central Repository.</p><ol><li><p>You log in with your Apache account.</p></li><li><p>Confirm you have appropriate access by finding <code>org.apache.bookkeeper</code> under <code>Staging Profiles</code>.</p></li><li><p>Navigate to your <code>Profile</code> (top right dropdown menu of the page).</p></li><li><p>Choose <code>User Token</code> from the dropdown, then click <code>Access User Token</code>. Copy a snippet of the Maven XML configuration block.</p></li><li><p>Insert this snippet twice into your global Maven <code>settings.xml</code> file (use command <code>mvn -X | grep settings</code>, and read out the global Maven setting file), typically <code>${HOME}/.m2/settings.xml</code>. The end result should look like this, where <code>TOKEN_NAME</code> and <code>TOKEN_PASSWORD</code> are your secret tokens:</p><div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">&lt;settings&gt;</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  &lt;servers&gt;</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    &lt;server&gt;</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      &lt;id&gt;apache.releases.https&lt;/id&gt;</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      &lt;username&gt;TOKEN_NAME&lt;/username&gt;</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      &lt;password&gt;TOKEN_PASSWORD&lt;/password&gt;</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    &lt;/server&gt;</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    &lt;server&gt;</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      &lt;id&gt;apache.snapshots.https&lt;/id&gt;</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      &lt;username&gt;TOKEN_NAME&lt;/username&gt;</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      &lt;password&gt;TOKEN_PASSWORD&lt;/password&gt;</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    &lt;/server&gt;</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  &lt;/servers&gt;</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">&lt;/settings&gt;</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div></li></ol><h4 class="anchor anchorWithStickyNavbar_LWe7" id="create-an-account-on-pypi">Create an account on PyPi<a href="#create-an-account-on-pypi" class="hash-link" aria-label="Direct link to Create an account on PyPi" title="Direct link to Create an account on PyPi">​</a></h4><p>Since 4.9.0 we are releasing a python client for table service during release process. In order to publishing
 a python package to PyPi, you need to <a href="https://pypi.org/account/register/" target="_blank" rel="noopener noreferrer">create an account</a> there. After
@@ -51,7 +51,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/community/releases/index.html b/content/community/releases/index.html
index 823b44c..98f1537 100644
--- a/content/community/releases/index.html
+++ b/content/community/releases/index.html
@@ -4,12 +4,12 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">Release Management | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/community/releases"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docusaurus_tag" content="default"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docsearch:docusaurus_tag" content="default"><meta data-rh="true" property="og:title" content="Release Management | Apache BookKeeper"><meta data-rh="true" name="description" content="Apache BookKeeper community adopts Time Based Release Plan starting from 4.6.0."><meta data-rh="true" property="og:description" content="Apache BookKeeper community adopts Time Based Release Plan starting from 4.6.0."><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/community/releases"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/community/releases" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/community/releases" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
-<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navbar__brand" href="/"><div class="navbar__logo"><img src="/img/bk-logo.svg" alt="Apache Bookkeeper" class="themedImage_ToTc themedImage--light_HNdA"><img src="/img/bk-logo.svg" alt="Apache Bookkeeper" class="themedImage_ToTc themedImage--dark_i4oU"></div><b class="navbar__title text--truncate">Apache BookKeeper</b></a><a class="navbar__item navbar__link" href="/docs/overview/">Documentation</a><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Community</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/community/mailing-lists">Mailing lists</a></li><li><a class="dropdown__link" href="/community/slack">Slack</a></li><li><a href="https://github.com/apache/bookkeeper/issues" target="_blank" rel="noopener noreferrer" class="dropdown__link">Github issues<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a aria-current="page" class="dropdown__link dropdown__link--active" href="/community/releases">Release management</a></li><li><a class="dropdown__link" href="/community/meeting">Community meetings</a></li><li><a class="dropdown__link" href="/community/contributing">Contribution guide</a></li><li><a class="dropdown__link" href="/community/coding-guide">Coding guide</a></li><li><a class="dropdown__link" href="/community/testing">Testing guide</a></li><li><a class="dropdown__link" href="/community/issue-report">Issue report guide</a></li><li><a class="dropdown__link" href="/community/release-guide">Release guide</a></li><li><a class="dropdown__link" href="/community/presentations">Presentations</a></li><li><a class="dropdown__link" href="/community/bookkeeper-proposals">BookKeeper proposals (BP)</a></li></ul></div><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Project</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/project/who">Who are we?</a></li><li><a class="dropdown__link" href="/project/bylaws">Bylaws</a></li><li><a href="https://apache.org/licenses" target="_blank" rel="noopener noreferrer" class="dropdown__link">License<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a class="dropdown__link" href="/project/privacy">Privacy policy</a></li><li><a href="https://www.apache.org/foundation/sponsorship.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Sponsorship<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a href="https://www.apache.org/foundation/thanks.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Thanks<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div></div><div class="navbar__items navbar__items--right"><div class="navbar__item dropdown dropdown--hoverable dropdown--right"><a class="navbar__link" aria-haspopup="true" aria-expanded="false" role="button" href="/docs/admin/autorecovery">4.17.0</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/docs/next/overview/">Next</a></li><li><a class="dropdown__link" href="/docs/admin/autorecovery">4.17.0</a></li><li><a class="dropdown__link" href="/docs/4.16.5/overview/">4.16.5</a></li><li><a class="dropdown__link" href="/docs/4.15.5/overview/">4.15.5</a></li><li><a class="dropdown__link" href="/docs/4.14.8/overview/">4.14.8</a></li><li><a class="dropdown__link" href="/docs/4.13.0/overview/">4.13.0</a></li><li><a class="dropdown__link" href="/docs/4.12.1/overview/">4.12.1</a></li><li><a class="dropdown__link" href="/docs/4.11.1/overview/">4.11.1</a></li><li><a class="dropdown__link" href="/docs/4.10.0/overview/">4.10.0</a></li><li><a class="dropdown__link" href="/docs/4.9.2/overview/">4.9.2</a></li><li><a class="dropdown__link" href="/docs/4.8.2/overview/">4.8.2</a></li><li><a class="dropdown__link" href="/docs/4.7.3/overview/">4.7.3</a></li><li><a class="dropdown__link" href="/docs/4.6.2/overview/">4.6.2</a></li><li><a class="dropdown__link" href="/docs/4.5.1/overview/">4.5.1</a></li></ul></div><a class="navbar__item navbar__link" href="/releases">Download</a><div class="toggle_vylO colorModeToggle_DEke"><button class="clean-btn toggleButton_gllP toggleButtonDisabled_aARS" type="button" disabled="" title="Switch between dark and light mode (currently light mode)" aria-label="Switch between dark and light mode (currently light mode)" aria-live="polite"><svg viewBox="0 0 24 24" width="24" height="24" class="lightToggleIcon_pyhR"><path fill="currentColor" d="M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"></path></svg><svg viewBox="0 0 24 24" width="24" height="24" class="darkToggleIcon_wfgR"><path fill="currentColor" d="M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"></path></svg></button></div><div class="searchBox_ZlJk"></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div></nav><div id="docusaurus_skipToContent_fallback" class="main-wrapper mainWrapper_z2l0"><main class="container container--fluid margin-vert--lg"><div class="row mdxPageWrapper_j9I6"><div class="col col--8"><article><h1>Release Management</h1><blockquote><p>Apache BookKeeper community adopts <a href="https://cwiki.apache.org/confluence/display/BOOKKEEPER/BP-13+-+Time+Based+Release+Plan" target="_blank" rel="noopener noreferrer">Time Based Release Plan</a> starting from 4.6.0.</p></blockquote><p>Apache BookKeeper community makes a feture release every 6 month (since <code>4.10.0</code>).</p><ul><li>A month before the release date, the release manager will cut branches and also publish a list of features that will be included in the release. These features will typically
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navbar__brand" href="/"><div class="navbar__logo"><img src="/img/bk-logo.svg" alt="Apache Bookkeeper" class="themedImage_ToTc themedImage--light_HNdA"><img src="/img/bk-logo.svg" alt="Apache Bookkeeper" class="themedImage_ToTc themedImage--dark_i4oU"></div><b class="navbar__title text--truncate">Apache BookKeeper</b></a><a class="navbar__item navbar__link" href="/docs/overview/">Documentation</a><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Community</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/community/mailing-lists">Mailing lists</a></li><li><a class="dropdown__link" href="/community/slack">Slack</a></li><li><a href="https://github.com/apache/bookkeeper/issues" target="_blank" rel="noopener noreferrer" class="dropdown__link">Github issues<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a aria-current="page" class="dropdown__link dropdown__link--active" href="/community/releases">Release management</a></li><li><a class="dropdown__link" href="/community/meeting">Community meetings</a></li><li><a class="dropdown__link" href="/community/contributing">Contribution guide</a></li><li><a class="dropdown__link" href="/community/coding-guide">Coding guide</a></li><li><a class="dropdown__link" href="/community/testing">Testing guide</a></li><li><a class="dropdown__link" href="/community/issue-report">Issue report guide</a></li><li><a class="dropdown__link" href="/community/release-guide">Release guide</a></li><li><a class="dropdown__link" href="/community/presentations">Presentations</a></li><li><a class="dropdown__link" href="/community/bookkeeper-proposals">BookKeeper proposals (BP)</a></li></ul></div><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Project</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/project/who">Who are we?</a></li><li><a class="dropdown__link" href="/project/bylaws">Bylaws</a></li><li><a href="https://apache.org/licenses" target="_blank" rel="noopener noreferrer" class="dropdown__link">License<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a class="dropdown__link" href="/project/privacy">Privacy policy</a></li><li><a href="https://www.apache.org/foundation/sponsorship.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Sponsorship<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a href="https://www.apache.org/foundation/thanks.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Thanks<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div></div><div class="navbar__items navbar__items--right"><div class="navbar__item dropdown dropdown--hoverable dropdown--right"><a class="navbar__link" aria-haspopup="true" aria-expanded="false" role="button" href="/docs/overview/">4.17.0</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/docs/next/overview/">Next</a></li><li><a class="dropdown__link" href="/docs/overview/">4.17.0</a></li><li><a class="dropdown__link" href="/docs/4.16.5/overview/">4.16.5</a></li><li><a class="dropdown__link" href="/docs/4.15.5/overview/">4.15.5</a></li><li><a class="dropdown__link" href="/docs/4.14.8/overview/">4.14.8</a></li><li><a class="dropdown__link" href="/docs/4.13.0/overview/">4.13.0</a></li><li><a class="dropdown__link" href="/docs/4.12.1/overview/">4.12.1</a></li><li><a class="dropdown__link" href="/docs/4.11.1/overview/">4.11.1</a></li><li><a class="dropdown__link" href="/docs/4.10.0/overview/">4.10.0</a></li><li><a class="dropdown__link" href="/docs/4.9.2/overview/">4.9.2</a></li><li><a class="dropdown__link" href="/docs/4.8.2/overview/">4.8.2</a></li><li><a class="dropdown__link" href="/docs/4.7.3/overview/">4.7.3</a></li><li><a class="dropdown__link" href="/docs/4.6.2/overview/">4.6.2</a></li><li><a class="dropdown__link" href="/docs/4.5.1/overview/">4.5.1</a></li></ul></div><a class="navbar__item navbar__link" href="/releases">Download</a><div class="toggle_vylO colorModeToggle_DEke"><button class="clean-btn toggleButton_gllP toggleButtonDisabled_aARS" type="button" disabled="" title="Switch between dark and light mode (currently light mode)" aria-label="Switch between dark and light mode (currently light mode)" aria-live="polite"><svg viewBox="0 0 24 24" width="24" height="24" class="lightToggleIcon_pyhR"><path fill="currentColor" d="M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"></path></svg><svg viewBox="0 0 24 24" width="24" height="24" class="darkToggleIcon_wfgR"><path fill="currentColor" d="M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"></path></svg></button></div><div class="searchBox_ZlJk"></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div></nav><div id="docusaurus_skipToContent_fallback" class="main-wrapper mainWrapper_z2l0"><main class="container container--fluid margin-vert--lg"><div class="row mdxPageWrapper_j9I6"><div class="col col--8"><article><h1>Release Management</h1><blockquote><p>Apache BookKeeper community adopts <a href="https://cwiki.apache.org/confluence/display/BOOKKEEPER/BP-13+-+Time+Based+Release+Plan" target="_blank" rel="noopener noreferrer">Time Based Release Plan</a> starting from 4.6.0.</p></blockquote><p>Apache BookKeeper community makes a feture release every 6 month (since <code>4.10.0</code>).</p><ul><li>A month before the release date, the release manager will cut branches and also publish a list of features that will be included in the release. These features will typically
 be <a href="https://bookkeeper.apache.org/community/bookkeeper-proposals/" target="_blank" rel="noopener noreferrer">BookKeeper Proposals</a>, but not always.</li><li>Another week will be left for <em>minor</em> features to get in, but at this point the community will start efforts to stabilize the release branch and contribute mostly tests and fixes.</li><li>Two weeks before the release date, the bookkeeper community will announce code-freeze and start rolling out release candidates, after which only fixes for blocking bugs will be merged.</li></ul></article></div></div></main></div><footer class="footer footer--dark"><div class="container container-fluid"><div class="row footer__links"><div class="col footer__col"><div class="footer__title">Documentation</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/docs/overview">Overview</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/getting-started/installation">Getting started</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/deployment/manual">Deployment</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/admin/bookies">Administration</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/api/overview">API</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/security/overview">Security</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/development/protocol">Development</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/reference/config">Reference</a></li></ul></div><div class="col footer__col"><div class="footer__title">Community</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/community/mailing-lists">Mailing lists</a></li><li class="footer__item"><a class="footer__link-item" href="/community/slack">Slack</a></li><li class="footer__item"><a href="https://github.com/apache/bookkeeper" target="_blank" rel="noopener noreferrer" class="footer__link-item">Github<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a href="https://twitter.com/asfbookkeeper" target="_blank" rel="noopener noreferrer" class="footer__link-item">Twitter<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div><div class="col footer__col"><div class="footer__title">Project</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/project/who">Who are we?</a></li><li class="footer__item"><a class="footer__link-item" href="/project/bylaws">Bylaws</a></li><li class="footer__item"><a href="https://apache.org/licenses" target="_blank" rel="noopener noreferrer" class="footer__link-item">License<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a class="footer__link-item" href="/project/privacy">Privacy policy</a></li><li class="footer__item"><a href="https://www.apache.org/foundation/sponsorship.html" target="_blank" rel="noopener noreferrer" class="footer__link-item">Sponsorship<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a href="https://www.apache.org/foundation/thanks.html" target="_blank" rel="noopener noreferrer" class="footer__link-item">Thanks<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div></div><div class="footer__bottom text--center"><div class="footer__copyright"><footer class="footer">
         <div class="container">
           <div class="content has-text-centered">
@@ -23,7 +23,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/community/slack/index.html b/content/community/slack/index.html
index 749a632..60c4835 100644
--- a/content/community/slack/index.html
+++ b/content/community/slack/index.html
@@ -4,12 +4,12 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">Slack | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/community/slack"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docusaurus_tag" content="default"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docsearch:docusaurus_tag" content="default"><meta data-rh="true" property="og:title" content="Slack | Apache BookKeeper"><meta data-rh="true" name="description" content="There is an Apache BookKeeper channel that is used for informal discussions for BookKeeper developers and users."><meta data-rh="true" property="og:description" content="There is an Apache BookKeeper channel that is used for informal discussions for BookKeeper developers and users."><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/community/slack"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/community/slack" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/community/slack" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
-<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navbar__brand" href="/"><div class="navbar__logo"><img src="/img/bk-logo.svg" alt="Apache Bookkeeper" class="themedImage_ToTc themedImage--light_HNdA"><img src="/img/bk-logo.svg" alt="Apache Bookkeeper" class="themedImage_ToTc themedImage--dark_i4oU"></div><b class="navbar__title text--truncate">Apache BookKeeper</b></a><a class="navbar__item navbar__link" href="/docs/overview/">Documentation</a><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Community</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/community/mailing-lists">Mailing lists</a></li><li><a aria-current="page" class="dropdown__link dropdown__link--active" href="/community/slack">Slack</a></li><li><a href="https://github.com/apache/bookkeeper/issues" target="_blank" rel="noopener noreferrer" class="dropdown__link">Github issues<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a class="dropdown__link" href="/community/releases">Release management</a></li><li><a class="dropdown__link" href="/community/meeting">Community meetings</a></li><li><a class="dropdown__link" href="/community/contributing">Contribution guide</a></li><li><a class="dropdown__link" href="/community/coding-guide">Coding guide</a></li><li><a class="dropdown__link" href="/community/testing">Testing guide</a></li><li><a class="dropdown__link" href="/community/issue-report">Issue report guide</a></li><li><a class="dropdown__link" href="/community/release-guide">Release guide</a></li><li><a class="dropdown__link" href="/community/presentations">Presentations</a></li><li><a class="dropdown__link" href="/community/bookkeeper-proposals">BookKeeper proposals (BP)</a></li></ul></div><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Project</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/project/who">Who are we?</a></li><li><a class="dropdown__link" href="/project/bylaws">Bylaws</a></li><li><a href="https://apache.org/licenses" target="_blank" rel="noopener noreferrer" class="dropdown__link">License<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a class="dropdown__link" href="/project/privacy">Privacy policy</a></li><li><a href="https://www.apache.org/foundation/sponsorship.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Sponsorship<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a href="https://www.apache.org/foundation/thanks.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Thanks<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div></div><div class="navbar__items navbar__items--right"><div class="navbar__item dropdown dropdown--hoverable dropdown--right"><a class="navbar__link" aria-haspopup="true" aria-expanded="false" role="button" href="/docs/admin/autorecovery">4.17.0</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/docs/next/overview/">Next</a></li><li><a class="dropdown__link" href="/docs/admin/autorecovery">4.17.0</a></li><li><a class="dropdown__link" href="/docs/4.16.5/overview/">4.16.5</a></li><li><a class="dropdown__link" href="/docs/4.15.5/overview/">4.15.5</a></li><li><a class="dropdown__link" href="/docs/4.14.8/overview/">4.14.8</a></li><li><a class="dropdown__link" href="/docs/4.13.0/overview/">4.13.0</a></li><li><a class="dropdown__link" href="/docs/4.12.1/overview/">4.12.1</a></li><li><a class="dropdown__link" href="/docs/4.11.1/overview/">4.11.1</a></li><li><a class="dropdown__link" href="/docs/4.10.0/overview/">4.10.0</a></li><li><a class="dropdown__link" href="/docs/4.9.2/overview/">4.9.2</a></li><li><a class="dropdown__link" href="/docs/4.8.2/overview/">4.8.2</a></li><li><a class="dropdown__link" href="/docs/4.7.3/overview/">4.7.3</a></li><li><a class="dropdown__link" href="/docs/4.6.2/overview/">4.6.2</a></li><li><a class="dropdown__link" href="/docs/4.5.1/overview/">4.5.1</a></li></ul></div><a class="navbar__item navbar__link" href="/releases">Download</a><div class="toggle_vylO colorModeToggle_DEke"><button class="clean-btn toggleButton_gllP toggleButtonDisabled_aARS" type="button" disabled="" title="Switch between dark and light mode (currently light mode)" aria-label="Switch between dark and light mode (currently light mode)" aria-live="polite"><svg viewBox="0 0 24 24" width="24" height="24" class="lightToggleIcon_pyhR"><path fill="currentColor" d="M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"></path></svg><svg viewBox="0 0 24 24" width="24" height="24" class="darkToggleIcon_wfgR"><path fill="currentColor" d="M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"></path></svg></button></div><div class="searchBox_ZlJk"></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div></nav><div id="docusaurus_skipToContent_fallback" class="main-wrapper mainWrapper_z2l0"><main class="container container--fluid margin-vert--lg"><div class="row mdxPageWrapper_j9I6"><div class="col col--8"><article><h1>Slack</h1><p>There is an <a href="http://apachebookkeeper.slack.com/" target="_blank" rel="noopener noreferrer">Apache BookKeeper</a> channel that is used for informal discussions for BookKeeper developers and users.</p><p>The Slack channel is at <a href="http://apachebookkeeper.slack.com/" target="_blank" rel="noopener noreferrer">http://apachebookkeeper.slack.com/</a>.</p><p>You can self-register at <a href="https://communityinviter.com/apps/apachebookkeeper/apache-bookkeeper" target="_blank" rel="noopener noreferrer">https://communityinviter.com/apps/apachebookkeeper/apache-bookkeeper</a>.</p></article></div></div></main></div><footer class="footer footer--dark"><div class="container container-fluid"><div class="row footer__links"><div class="col footer__col"><div class="footer__title">Documentation</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/docs/overview">Overview</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/getting-started/installation">Getting started</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/deployment/manual">Deployment</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/admin/bookies">Administration</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/api/overview">API</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/security/overview">Security</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/development/protocol">Development</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/reference/config">Reference</a></li></ul></div><div class="col footer__col"><div class="footer__title">Community</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/community/mailing-lists">Mailing lists</a></li><li class="footer__item"><a class="footer__link-item" href="/community/slack">Slack</a></li><li class="footer__item"><a href="https://github.com/apache/bookkeeper" target="_blank" rel="noopener noreferrer" class="footer__link-item">Github<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a href="https://twitter.com/asfbookkeeper" target="_blank" rel="noopener noreferrer" class="footer__link-item">Twitter<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div><div class="col footer__col"><div class="footer__title">Project</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/project/who">Who are we?</a></li><li class="footer__item"><a class="footer__link-item" href="/project/bylaws">Bylaws</a></li><li class="footer__item"><a href="https://apache.org/licenses" target="_blank" rel="noopener noreferrer" class="footer__link-item">License<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a class="footer__link-item" href="/project/privacy">Privacy policy</a></li><li class="footer__item"><a href="https://www.apache.org/foundation/sponsorship.html" target="_blank" rel="noopener noreferrer" class="footer__link-item">Sponsorship<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a href="https://www.apache.org/foundation/thanks.html" target="_blank" rel="noopener noreferrer" class="footer__link-item">Thanks<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div></div><div class="footer__bottom text--center"><div class="footer__copyright"><footer class="footer">
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navbar__brand" href="/"><div class="navbar__logo"><img src="/img/bk-logo.svg" alt="Apache Bookkeeper" class="themedImage_ToTc themedImage--light_HNdA"><img src="/img/bk-logo.svg" alt="Apache Bookkeeper" class="themedImage_ToTc themedImage--dark_i4oU"></div><b class="navbar__title text--truncate">Apache BookKeeper</b></a><a class="navbar__item navbar__link" href="/docs/overview/">Documentation</a><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Community</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/community/mailing-lists">Mailing lists</a></li><li><a aria-current="page" class="dropdown__link dropdown__link--active" href="/community/slack">Slack</a></li><li><a href="https://github.com/apache/bookkeeper/issues" target="_blank" rel="noopener noreferrer" class="dropdown__link">Github issues<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a class="dropdown__link" href="/community/releases">Release management</a></li><li><a class="dropdown__link" href="/community/meeting">Community meetings</a></li><li><a class="dropdown__link" href="/community/contributing">Contribution guide</a></li><li><a class="dropdown__link" href="/community/coding-guide">Coding guide</a></li><li><a class="dropdown__link" href="/community/testing">Testing guide</a></li><li><a class="dropdown__link" href="/community/issue-report">Issue report guide</a></li><li><a class="dropdown__link" href="/community/release-guide">Release guide</a></li><li><a class="dropdown__link" href="/community/presentations">Presentations</a></li><li><a class="dropdown__link" href="/community/bookkeeper-proposals">BookKeeper proposals (BP)</a></li></ul></div><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Project</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/project/who">Who are we?</a></li><li><a class="dropdown__link" href="/project/bylaws">Bylaws</a></li><li><a href="https://apache.org/licenses" target="_blank" rel="noopener noreferrer" class="dropdown__link">License<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a class="dropdown__link" href="/project/privacy">Privacy policy</a></li><li><a href="https://www.apache.org/foundation/sponsorship.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Sponsorship<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a href="https://www.apache.org/foundation/thanks.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Thanks<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div></div><div class="navbar__items navbar__items--right"><div class="navbar__item dropdown dropdown--hoverable dropdown--right"><a class="navbar__link" aria-haspopup="true" aria-expanded="false" role="button" href="/docs/overview/">4.17.0</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/docs/next/overview/">Next</a></li><li><a class="dropdown__link" href="/docs/overview/">4.17.0</a></li><li><a class="dropdown__link" href="/docs/4.16.5/overview/">4.16.5</a></li><li><a class="dropdown__link" href="/docs/4.15.5/overview/">4.15.5</a></li><li><a class="dropdown__link" href="/docs/4.14.8/overview/">4.14.8</a></li><li><a class="dropdown__link" href="/docs/4.13.0/overview/">4.13.0</a></li><li><a class="dropdown__link" href="/docs/4.12.1/overview/">4.12.1</a></li><li><a class="dropdown__link" href="/docs/4.11.1/overview/">4.11.1</a></li><li><a class="dropdown__link" href="/docs/4.10.0/overview/">4.10.0</a></li><li><a class="dropdown__link" href="/docs/4.9.2/overview/">4.9.2</a></li><li><a class="dropdown__link" href="/docs/4.8.2/overview/">4.8.2</a></li><li><a class="dropdown__link" href="/docs/4.7.3/overview/">4.7.3</a></li><li><a class="dropdown__link" href="/docs/4.6.2/overview/">4.6.2</a></li><li><a class="dropdown__link" href="/docs/4.5.1/overview/">4.5.1</a></li></ul></div><a class="navbar__item navbar__link" href="/releases">Download</a><div class="toggle_vylO colorModeToggle_DEke"><button class="clean-btn toggleButton_gllP toggleButtonDisabled_aARS" type="button" disabled="" title="Switch between dark and light mode (currently light mode)" aria-label="Switch between dark and light mode (currently light mode)" aria-live="polite"><svg viewBox="0 0 24 24" width="24" height="24" class="lightToggleIcon_pyhR"><path fill="currentColor" d="M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"></path></svg><svg viewBox="0 0 24 24" width="24" height="24" class="darkToggleIcon_wfgR"><path fill="currentColor" d="M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"></path></svg></button></div><div class="searchBox_ZlJk"></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div></nav><div id="docusaurus_skipToContent_fallback" class="main-wrapper mainWrapper_z2l0"><main class="container container--fluid margin-vert--lg"><div class="row mdxPageWrapper_j9I6"><div class="col col--8"><article><h1>Slack</h1><p>There is an <a href="http://apachebookkeeper.slack.com/" target="_blank" rel="noopener noreferrer">Apache BookKeeper</a> channel that is used for informal discussions for BookKeeper developers and users.</p><p>The Slack channel is at <a href="http://apachebookkeeper.slack.com/" target="_blank" rel="noopener noreferrer">http://apachebookkeeper.slack.com/</a>.</p><p>You can self-register at <a href="https://communityinviter.com/apps/apachebookkeeper/apache-bookkeeper" target="_blank" rel="noopener noreferrer">https://communityinviter.com/apps/apachebookkeeper/apache-bookkeeper</a>.</p></article></div></div></main></div><footer class="footer footer--dark"><div class="container container-fluid"><div class="row footer__links"><div class="col footer__col"><div class="footer__title">Documentation</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/docs/overview">Overview</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/getting-started/installation">Getting started</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/deployment/manual">Deployment</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/admin/bookies">Administration</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/api/overview">API</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/security/overview">Security</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/development/protocol">Development</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/reference/config">Reference</a></li></ul></div><div class="col footer__col"><div class="footer__title">Community</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/community/mailing-lists">Mailing lists</a></li><li class="footer__item"><a class="footer__link-item" href="/community/slack">Slack</a></li><li class="footer__item"><a href="https://github.com/apache/bookkeeper" target="_blank" rel="noopener noreferrer" class="footer__link-item">Github<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a href="https://twitter.com/asfbookkeeper" target="_blank" rel="noopener noreferrer" class="footer__link-item">Twitter<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div><div class="col footer__col"><div class="footer__title">Project</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/project/who">Who are we?</a></li><li class="footer__item"><a class="footer__link-item" href="/project/bylaws">Bylaws</a></li><li class="footer__item"><a href="https://apache.org/licenses" target="_blank" rel="noopener noreferrer" class="footer__link-item">License<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a class="footer__link-item" href="/project/privacy">Privacy policy</a></li><li class="footer__item"><a href="https://www.apache.org/foundation/sponsorship.html" target="_blank" rel="noopener noreferrer" class="footer__link-item">Sponsorship<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a href="https://www.apache.org/foundation/thanks.html" target="_blank" rel="noopener noreferrer" class="footer__link-item">Thanks<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div></div><div class="footer__bottom text--center"><div class="footer__copyright"><footer class="footer">
         <div class="container">
           <div class="content has-text-centered">
             <p>
@@ -22,7 +22,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/community/testing/index.html b/content/community/testing/index.html
index a4b4d0e..a1f52e4 100644
--- a/content/community/testing/index.html
+++ b/content/community/testing/index.html
@@ -4,12 +4,12 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">Testing guide | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/community/testing"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docusaurus_tag" content="default"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docsearch:docusaurus_tag" content="default"><meta data-rh="true" property="og:title" content="Testing guide | Apache BookKeeper"><meta data-rh="true" name="description" content="Overview"><meta data-rh="true" property="og:description" content="Overview"><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/community/testing"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/community/testing" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/community/testing" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
-<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navbar__brand" href="/"><div class="navbar__logo"><img src="/img/bk-logo.svg" alt="Apache Bookkeeper" class="themedImage_ToTc themedImage--light_HNdA"><img src="/img/bk-logo.svg" alt="Apache Bookkeeper" class="themedImage_ToTc themedImage--dark_i4oU"></div><b class="navbar__title text--truncate">Apache BookKeeper</b></a><a class="navbar__item navbar__link" href="/docs/overview/">Documentation</a><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Community</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/community/mailing-lists">Mailing lists</a></li><li><a class="dropdown__link" href="/community/slack">Slack</a></li><li><a href="https://github.com/apache/bookkeeper/issues" target="_blank" rel="noopener noreferrer" class="dropdown__link">Github issues<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a class="dropdown__link" href="/community/releases">Release management</a></li><li><a class="dropdown__link" href="/community/meeting">Community meetings</a></li><li><a class="dropdown__link" href="/community/contributing">Contribution guide</a></li><li><a class="dropdown__link" href="/community/coding-guide">Coding guide</a></li><li><a aria-current="page" class="dropdown__link dropdown__link--active" href="/community/testing">Testing guide</a></li><li><a class="dropdown__link" href="/community/issue-report">Issue report guide</a></li><li><a class="dropdown__link" href="/community/release-guide">Release guide</a></li><li><a class="dropdown__link" href="/community/presentations">Presentations</a></li><li><a class="dropdown__link" href="/community/bookkeeper-proposals">BookKeeper proposals (BP)</a></li></ul></div><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Project</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/project/who">Who are we?</a></li><li><a class="dropdown__link" href="/project/bylaws">Bylaws</a></li><li><a href="https://apache.org/licenses" target="_blank" rel="noopener noreferrer" class="dropdown__link">License<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a class="dropdown__link" href="/project/privacy">Privacy policy</a></li><li><a href="https://www.apache.org/foundation/sponsorship.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Sponsorship<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a href="https://www.apache.org/foundation/thanks.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Thanks<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div></div><div class="navbar__items navbar__items--right"><div class="navbar__item dropdown dropdown--hoverable dropdown--right"><a class="navbar__link" aria-haspopup="true" aria-expanded="false" role="button" href="/docs/admin/autorecovery">4.17.0</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/docs/next/overview/">Next</a></li><li><a class="dropdown__link" href="/docs/admin/autorecovery">4.17.0</a></li><li><a class="dropdown__link" href="/docs/4.16.5/overview/">4.16.5</a></li><li><a class="dropdown__link" href="/docs/4.15.5/overview/">4.15.5</a></li><li><a class="dropdown__link" href="/docs/4.14.8/overview/">4.14.8</a></li><li><a class="dropdown__link" href="/docs/4.13.0/overview/">4.13.0</a></li><li><a class="dropdown__link" href="/docs/4.12.1/overview/">4.12.1</a></li><li><a class="dropdown__link" href="/docs/4.11.1/overview/">4.11.1</a></li><li><a class="dropdown__link" href="/docs/4.10.0/overview/">4.10.0</a></li><li><a class="dropdown__link" href="/docs/4.9.2/overview/">4.9.2</a></li><li><a class="dropdown__link" href="/docs/4.8.2/overview/">4.8.2</a></li><li><a class="dropdown__link" href="/docs/4.7.3/overview/">4.7.3</a></li><li><a class="dropdown__link" href="/docs/4.6.2/overview/">4.6.2</a></li><li><a class="dropdown__link" href="/docs/4.5.1/overview/">4.5.1</a></li></ul></div><a class="navbar__item navbar__link" href="/releases">Download</a><div class="toggle_vylO colorModeToggle_DEke"><button class="clean-btn toggleButton_gllP toggleButtonDisabled_aARS" type="button" disabled="" title="Switch between dark and light mode (currently light mode)" aria-label="Switch between dark and light mode (currently light mode)" aria-live="polite"><svg viewBox="0 0 24 24" width="24" height="24" class="lightToggleIcon_pyhR"><path fill="currentColor" d="M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"></path></svg><svg viewBox="0 0 24 24" width="24" height="24" class="darkToggleIcon_wfgR"><path fill="currentColor" d="M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"></path></svg></button></div><div class="searchBox_ZlJk"></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div></nav><div id="docusaurus_skipToContent_fallback" class="main-wrapper mainWrapper_z2l0"><main class="container container--fluid margin-vert--lg"><div class="row mdxPageWrapper_j9I6"><div class="col col--8"><article><h1>Testing guide</h1><h2 class="anchor anchorWithStickyNavbar_LWe7" id="overview">Overview<a href="#overview" class="hash-link" aria-label="Direct link to Overview" title="Direct link to Overview">​</a></h2><p>Apache BookKeeper is a well adopted software project with a strong commitment to testing.
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navbar__brand" href="/"><div class="navbar__logo"><img src="/img/bk-logo.svg" alt="Apache Bookkeeper" class="themedImage_ToTc themedImage--light_HNdA"><img src="/img/bk-logo.svg" alt="Apache Bookkeeper" class="themedImage_ToTc themedImage--dark_i4oU"></div><b class="navbar__title text--truncate">Apache BookKeeper</b></a><a class="navbar__item navbar__link" href="/docs/overview/">Documentation</a><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Community</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/community/mailing-lists">Mailing lists</a></li><li><a class="dropdown__link" href="/community/slack">Slack</a></li><li><a href="https://github.com/apache/bookkeeper/issues" target="_blank" rel="noopener noreferrer" class="dropdown__link">Github issues<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a class="dropdown__link" href="/community/releases">Release management</a></li><li><a class="dropdown__link" href="/community/meeting">Community meetings</a></li><li><a class="dropdown__link" href="/community/contributing">Contribution guide</a></li><li><a class="dropdown__link" href="/community/coding-guide">Coding guide</a></li><li><a aria-current="page" class="dropdown__link dropdown__link--active" href="/community/testing">Testing guide</a></li><li><a class="dropdown__link" href="/community/issue-report">Issue report guide</a></li><li><a class="dropdown__link" href="/community/release-guide">Release guide</a></li><li><a class="dropdown__link" href="/community/presentations">Presentations</a></li><li><a class="dropdown__link" href="/community/bookkeeper-proposals">BookKeeper proposals (BP)</a></li></ul></div><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Project</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/project/who">Who are we?</a></li><li><a class="dropdown__link" href="/project/bylaws">Bylaws</a></li><li><a href="https://apache.org/licenses" target="_blank" rel="noopener noreferrer" class="dropdown__link">License<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a class="dropdown__link" href="/project/privacy">Privacy policy</a></li><li><a href="https://www.apache.org/foundation/sponsorship.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Sponsorship<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a href="https://www.apache.org/foundation/thanks.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Thanks<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div></div><div class="navbar__items navbar__items--right"><div class="navbar__item dropdown dropdown--hoverable dropdown--right"><a class="navbar__link" aria-haspopup="true" aria-expanded="false" role="button" href="/docs/overview/">4.17.0</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/docs/next/overview/">Next</a></li><li><a class="dropdown__link" href="/docs/overview/">4.17.0</a></li><li><a class="dropdown__link" href="/docs/4.16.5/overview/">4.16.5</a></li><li><a class="dropdown__link" href="/docs/4.15.5/overview/">4.15.5</a></li><li><a class="dropdown__link" href="/docs/4.14.8/overview/">4.14.8</a></li><li><a class="dropdown__link" href="/docs/4.13.0/overview/">4.13.0</a></li><li><a class="dropdown__link" href="/docs/4.12.1/overview/">4.12.1</a></li><li><a class="dropdown__link" href="/docs/4.11.1/overview/">4.11.1</a></li><li><a class="dropdown__link" href="/docs/4.10.0/overview/">4.10.0</a></li><li><a class="dropdown__link" href="/docs/4.9.2/overview/">4.9.2</a></li><li><a class="dropdown__link" href="/docs/4.8.2/overview/">4.8.2</a></li><li><a class="dropdown__link" href="/docs/4.7.3/overview/">4.7.3</a></li><li><a class="dropdown__link" href="/docs/4.6.2/overview/">4.6.2</a></li><li><a class="dropdown__link" href="/docs/4.5.1/overview/">4.5.1</a></li></ul></div><a class="navbar__item navbar__link" href="/releases">Download</a><div class="toggle_vylO colorModeToggle_DEke"><button class="clean-btn toggleButton_gllP toggleButtonDisabled_aARS" type="button" disabled="" title="Switch between dark and light mode (currently light mode)" aria-label="Switch between dark and light mode (currently light mode)" aria-live="polite"><svg viewBox="0 0 24 24" width="24" height="24" class="lightToggleIcon_pyhR"><path fill="currentColor" d="M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"></path></svg><svg viewBox="0 0 24 24" width="24" height="24" class="darkToggleIcon_wfgR"><path fill="currentColor" d="M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"></path></svg></button></div><div class="searchBox_ZlJk"></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div></nav><div id="docusaurus_skipToContent_fallback" class="main-wrapper mainWrapper_z2l0"><main class="container container--fluid margin-vert--lg"><div class="row mdxPageWrapper_j9I6"><div class="col col--8"><article><h1>Testing guide</h1><h2 class="anchor anchorWithStickyNavbar_LWe7" id="overview">Overview<a href="#overview" class="hash-link" aria-label="Direct link to Overview" title="Direct link to Overview">​</a></h2><p>Apache BookKeeper is a well adopted software project with a strong commitment to testing.
 Consequently, it has many testing-related needs. It requires precommit tests to ensure
 code going to the repository meets a certain quality bar and it requires ongoing postcommit
 tests to make sure that more subtle changes which escape precommit are nonetheless caught.
@@ -32,7 +32,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/4.10.0/admin/autorecovery/index.html b/content/docs/4.10.0/admin/autorecovery/index.html
index 4ee362d..14f8698 100644
--- a/content/docs/4.10.0/admin/autorecovery/index.html
+++ b/content/docs/4.10.0/admin/autorecovery/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">Using AutoRecovery | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/4.10.0/admin/autorecovery"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.10.0"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.10.0"><meta data-rh="true" name="docsearch:version" content="4.10.0"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.10.0"><meta data-rh="true" property="og:title" content="Using AutoRecovery | Apache BookKeeper"><meta data-rh="true" name="description" content="When a bookie crashes, all ledgers on that bookie become under-replicated. In order to bring all ledgers in your BookKeeper cluster back to full replication, you&#x27;ll need to recover the data from any offline bookies. There are two ways to recover bookies&#x27; data:"><meta data-rh="true" property="og:description" content="When a bookie crashes, all ledgers on that bookie become under-replicated. In order to bring all ledgers in your BookKeeper cluster back to full replication, you&#x27;ll need to recover the data from any offline bookies. There are two ways to recover bookies&#x27; data:"><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/4.10.0/admin/autorecovery"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.10.0/admin/autorecovery" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.10.0/admin/autorecovery" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -22,7 +22,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/4.10.0/admin/bookies/index.html b/content/docs/4.10.0/admin/bookies/index.html
index 6f90330..080805e 100644
--- a/content/docs/4.10.0/admin/bookies/index.html
+++ b/content/docs/4.10.0/admin/bookies/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">BookKeeper administration | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/4.10.0/admin/bookies"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.10.0"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.10.0"><meta data-rh="true" name="docsearch:version" content="4.10.0"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.10.0"><meta data-rh="true" property="og:title" content="BookKeeper administration | Apache BookKeeper"><meta data-rh="true" name="description" content="This document is a guide to deploying, administering, and maintaining BookKeeper. It also discusses best practices and common problems."><meta data-rh="true" property="og:description" content="This document is a guide to deploying, administering, and maintaining BookKeeper. It also discusses best practices and common problems."><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/4.10.0/admin/bookies"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.10.0/admin/bookies" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.10.0/admin/bookies" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -22,7 +22,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/4.10.0/admin/geo-replication/index.html b/content/docs/4.10.0/admin/geo-replication/index.html
index 2938842..51916d4 100644
--- a/content/docs/4.10.0/admin/geo-replication/index.html
+++ b/content/docs/4.10.0/admin/geo-replication/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">Geo-replication | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/4.10.0/admin/geo-replication"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.10.0"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.10.0"><meta data-rh="true" name="docsearch:version" content="4.10.0"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.10.0"><meta data-rh="true" property="og:title" content="Geo-replication | Apache BookKeeper"><meta data-rh="true" name="description" content="Geo-replication is the replication of data across BookKeeper clusters. In order to enable geo-replication for a group of BookKeeper clusters,"><meta data-rh="true" property="og:description" content="Geo-replication is the replication of data across BookKeeper clusters. In order to enable geo-replication for a group of BookKeeper clusters,"><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/4.10.0/admin/geo-replication"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.10.0/admin/geo-replication" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.10.0/admin/geo-replication" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -22,7 +22,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/4.10.0/admin/http/index.html b/content/docs/4.10.0/admin/http/index.html
index a828c9b..34f3bd9 100644
--- a/content/docs/4.10.0/admin/http/index.html
+++ b/content/docs/4.10.0/admin/http/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">BookKeeper Admin REST API | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/4.10.0/admin/http"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.10.0"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.10.0"><meta data-rh="true" name="docsearch:version" content="4.10.0"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.10.0"><meta data-rh="true" property="og:title" content="BookKeeper Admin REST API | Apache BookKeeper"><meta data-rh="true" name="description" content="This document introduces BookKeeper HTTP endpoints, which can be used for BookKeeper administration."><meta data-rh="true" property="og:description" content="This document introduces BookKeeper HTTP endpoints, which can be used for BookKeeper administration."><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/4.10.0/admin/http"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.10.0/admin/http" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.10.0/admin/http" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -23,7 +23,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/4.10.0/admin/metrics/index.html b/content/docs/4.10.0/admin/metrics/index.html
index 464c2d0..ad4c7ba 100644
--- a/content/docs/4.10.0/admin/metrics/index.html
+++ b/content/docs/4.10.0/admin/metrics/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">Metric collection | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/4.10.0/admin/metrics"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.10.0"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.10.0"><meta data-rh="true" name="docsearch:version" content="4.10.0"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.10.0"><meta data-rh="true" property="og:title" content="Metric collection | Apache BookKeeper"><meta data-rh="true" name="description" content="BookKeeper enables metrics collection through a variety of stats providers."><meta data-rh="true" property="og:description" content="BookKeeper enables metrics collection through a variety of stats providers."><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/4.10.0/admin/metrics"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.10.0/admin/metrics" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.10.0/admin/metrics" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -22,7 +22,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/4.10.0/admin/perf/index.html b/content/docs/4.10.0/admin/perf/index.html
index d37b8ae..d8906eb 100644
--- a/content/docs/4.10.0/admin/perf/index.html
+++ b/content/docs/4.10.0/admin/perf/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">Performance tuning | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/4.10.0/admin/perf"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.10.0"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.10.0"><meta data-rh="true" name="docsearch:version" content="4.10.0"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.10.0"><meta data-rh="true" property="og:title" content="Performance tuning | Apache BookKeeper"><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/4.10.0/admin/perf"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.10.0/admin/perf" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.10.0/admin/perf" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -22,7 +22,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/4.10.0/admin/placement/index.html b/content/docs/4.10.0/admin/placement/index.html
index 64f0e71..f5c2a8f 100644
--- a/content/docs/4.10.0/admin/placement/index.html
+++ b/content/docs/4.10.0/admin/placement/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">Customized placement policies | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/4.10.0/admin/placement"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.10.0"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.10.0"><meta data-rh="true" name="docsearch:version" content="4.10.0"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.10.0"><meta data-rh="true" property="og:title" content="Customized placement policies | Apache BookKeeper"><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/4.10.0/admin/placement"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.10.0/admin/placement" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.10.0/admin/placement" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -22,7 +22,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/4.10.0/admin/upgrade/index.html b/content/docs/4.10.0/admin/upgrade/index.html
index 1273e6d..0ede7d3 100644
--- a/content/docs/4.10.0/admin/upgrade/index.html
+++ b/content/docs/4.10.0/admin/upgrade/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">Upgrade | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/4.10.0/admin/upgrade"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.10.0"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.10.0"><meta data-rh="true" name="docsearch:version" content="4.10.0"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.10.0"><meta data-rh="true" property="og:title" content="Upgrade | Apache BookKeeper"><meta data-rh="true" name="description" content="If you have questions about upgrades (or need help), please feel free to reach out to us by mailing list or Slack Channel."><meta data-rh="true" property="og:description" content="If you have questions about upgrades (or need help), please feel free to reach out to us by mailing list or Slack Channel."><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/4.10.0/admin/upgrade"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.10.0/admin/upgrade" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.10.0/admin/upgrade" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -29,7 +29,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/4.10.0/api/distributedlog-api/index.html b/content/docs/4.10.0/api/distributedlog-api/index.html
index 80a856c..25910fd 100644
--- a/content/docs/4.10.0/api/distributedlog-api/index.html
+++ b/content/docs/4.10.0/api/distributedlog-api/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">DistributedLog | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/4.10.0/api/distributedlog-api"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.10.0"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.10.0"><meta data-rh="true" name="docsearch:version" content="4.10.0"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.10.0"><meta data-rh="true" property="og:title" content="DistributedLog | Apache BookKeeper"><meta data-rh="true" name="description" content="DistributedLog began its life as a separate project under the Apache Foundation. It was merged into BookKeeper in 2017."><meta data-rh="true" property="og:description" content="DistributedLog began its life as a separate project under the Apache Foundation. It was merged into BookKeeper in 2017."><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/4.10.0/api/distributedlog-api"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.10.0/api/distributedlog-api" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.10.0/api/distributedlog-api" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -22,7 +22,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/4.10.0/api/ledger-adv-api/index.html b/content/docs/4.10.0/api/ledger-adv-api/index.html
index 96b4a53..98878bb 100644
--- a/content/docs/4.10.0/api/ledger-adv-api/index.html
+++ b/content/docs/4.10.0/api/ledger-adv-api/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">The Advanced Ledger API | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/4.10.0/api/ledger-adv-api"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.10.0"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.10.0"><meta data-rh="true" name="docsearch:version" content="4.10.0"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.10.0"><meta data-rh="true" property="og:title" content="The Advanced Ledger API | Apache BookKeeper"><meta data-rh="true" name="description" content="In release 4.5.0, Apache BookKeeper introduces a few advanced API for advanced usage."><meta data-rh="true" property="og:description" content="In release 4.5.0, Apache BookKeeper introduces a few advanced API for advanced usage."><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/4.10.0/api/ledger-adv-api"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.10.0/api/ledger-adv-api" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.10.0/api/ledger-adv-api" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -27,7 +27,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/4.10.0/api/ledger-api/index.html b/content/docs/4.10.0/api/ledger-api/index.html
index 9693297..bdb0a5d 100644
--- a/content/docs/4.10.0/api/ledger-api/index.html
+++ b/content/docs/4.10.0/api/ledger-api/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">The Ledger API | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/4.10.0/api/ledger-api"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.10.0"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.10.0"><meta data-rh="true" name="docsearch:version" content="4.10.0"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.10.0"><meta data-rh="true" property="og:title" content="The Ledger API | Apache BookKeeper"><meta data-rh="true" name="description" content="The ledger API is a lower-level API for BookKeeper that enables you to interact with ledgers directly."><meta data-rh="true" property="og:description" content="The ledger API is a lower-level API for BookKeeper that enables you to interact with ledgers directly."><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/4.10.0/api/ledger-api"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.10.0/api/ledger-api" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.10.0/api/ledger-api" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -46,7 +46,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/4.10.0/api/overview/index.html b/content/docs/4.10.0/api/overview/index.html
index b0ee9fc..8965d7e 100644
--- a/content/docs/4.10.0/api/overview/index.html
+++ b/content/docs/4.10.0/api/overview/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">BookKeeper API | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/4.10.0/api/overview"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.10.0"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.10.0"><meta data-rh="true" name="docsearch:version" content="4.10.0"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.10.0"><meta data-rh="true" property="og:title" content="BookKeeper API | Apache BookKeeper"><meta data-rh="true" name="description" content="BookKeeper offers a few APIs that applications can use to interact with it:"><meta data-rh="true" property="og:description" content="BookKeeper offers a few APIs that applications can use to interact with it:"><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/4.10.0/api/overview"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.10.0/api/overview" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.10.0/api/overview" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -24,7 +24,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/4.10.0/deployment/kubernetes/index.html b/content/docs/4.10.0/deployment/kubernetes/index.html
index 912b72d..668059c 100644
--- a/content/docs/4.10.0/deployment/kubernetes/index.html
+++ b/content/docs/4.10.0/deployment/kubernetes/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">Deploying Apache BookKeeper on Kubernetes | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/4.10.0/deployment/kubernetes"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.10.0"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.10.0"><meta data-rh="true" name="docsearch:version" content="4.10.0"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.10.0"><meta data-rh="true" property="og:title" content="Deploying Apache BookKeeper on Kubernetes | Apache BookKeeper"><meta data-rh="true" name="description" content="Apache BookKeeper can be easily deployed in Kubernetes clusters. The managed clusters on Google Container Engine is the most convenient way."><meta data-rh="true" property="og:description" content="Apache BookKeeper can be easily deployed in Kubernetes clusters. The managed clusters on Google Container Engine is the most convenient way."><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/4.10.0/deployment/kubernetes"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.10.0/deployment/kubernetes" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.10.0/deployment/kubernetes" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -29,7 +29,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/4.10.0/deployment/manual/index.html b/content/docs/4.10.0/deployment/manual/index.html
index 938529a..3c3556d 100644
--- a/content/docs/4.10.0/deployment/manual/index.html
+++ b/content/docs/4.10.0/deployment/manual/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">Manual deployment | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/4.10.0/deployment/manual"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.10.0"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.10.0"><meta data-rh="true" name="docsearch:version" content="4.10.0"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.10.0"><meta data-rh="true" property="og:title" content="Manual deployment | Apache BookKeeper"><meta data-rh="true" name="description" content="A BookKeeper cluster consists of two main components:"><meta data-rh="true" property="og:description" content="A BookKeeper cluster consists of two main components:"><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/4.10.0/deployment/manual"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.10.0/deployment/manual" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.10.0/deployment/manual" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -22,7 +22,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/4.10.0/development/codebase/index.html b/content/docs/4.10.0/development/codebase/index.html
index 8b75965..6cbf1d7 100644
--- a/content/docs/4.10.0/development/codebase/index.html
+++ b/content/docs/4.10.0/development/codebase/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">The BookKeeper codebase | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/4.10.0/development/codebase"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.10.0"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.10.0"><meta data-rh="true" name="docsearch:version" content="4.10.0"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.10.0"><meta data-rh="true" property="og:title" content="The BookKeeper codebase | Apache BookKeeper"><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/4.10.0/development/codebase"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.10.0/development/codebase" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.10.0/development/codebase" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -22,7 +22,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/4.10.0/development/protocol/index.html b/content/docs/4.10.0/development/protocol/index.html
index 6106913..77f0260 100644
--- a/content/docs/4.10.0/development/protocol/index.html
+++ b/content/docs/4.10.0/development/protocol/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">The BookKeeper protocol | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/4.10.0/development/protocol"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.10.0"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.10.0"><meta data-rh="true" name="docsearch:version" content="4.10.0"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.10.0"><meta data-rh="true" property="og:title" content="The BookKeeper protocol | Apache BookKeeper"><meta data-rh="true" name="description" content="BookKeeper uses a special replication protocol for guaranteeing persistent storage of entries in an ensemble of bookies."><meta data-rh="true" property="og:description" content="BookKeeper uses a special replication protocol for guaranteeing persistent storage of entries in an ensemble of bookies."><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/4.10.0/development/protocol"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.10.0/development/protocol" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.10.0/development/protocol" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -22,7 +22,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/4.10.0/getting-started/concepts/index.html b/content/docs/4.10.0/getting-started/concepts/index.html
index 2f09bb2..3342e0d 100644
--- a/content/docs/4.10.0/getting-started/concepts/index.html
+++ b/content/docs/4.10.0/getting-started/concepts/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">BookKeeper concepts and architecture | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/4.10.0/getting-started/concepts"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.10.0"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.10.0"><meta data-rh="true" name="docsearch:version" content="4.10.0"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.10.0"><meta data-rh="true" property="og:title" content="BookKeeper concepts and architecture | Apache BookKeeper"><meta data-rh="true" name="description" content="BookKeeper is a service that provides persistent storage of streams of log entries---aka records---in sequences called ledgers. BookKeeper replicates stored entries across multiple servers."><meta data-rh="true" property="og:description" content="BookKeeper is a service that provides persistent storage of streams of log entries---aka records---in sequences called ledgers. BookKeeper replicates stored entries across multiple servers."><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/4.10.0/getting-started/concepts"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.10.0/getting-started/concepts" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.10.0/getting-started/concepts" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -22,7 +22,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/4.10.0/getting-started/installation/index.html b/content/docs/4.10.0/getting-started/installation/index.html
index f3eadea..061e5ce 100644
--- a/content/docs/4.10.0/getting-started/installation/index.html
+++ b/content/docs/4.10.0/getting-started/installation/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">BookKeeper installation | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/4.10.0/getting-started/installation"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.10.0"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.10.0"><meta data-rh="true" name="docsearch:version" content="4.10.0"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.10.0"><meta data-rh="true" property="og:title" content="BookKeeper installation | Apache BookKeeper"><meta data-rh="true" name="description" content="You can install BookKeeper either by downloading a GZipped tarball package or cloning the BookKeeper repository."><meta data-rh="true" property="og:description" content="You can install BookKeeper either by downloading a GZipped tarball package or cloning the BookKeeper repository."><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/4.10.0/getting-started/installation"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.10.0/getting-started/installation" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.10.0/getting-started/installation" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -22,7 +22,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/4.10.0/getting-started/run-locally/index.html b/content/docs/4.10.0/getting-started/run-locally/index.html
index 55093b3..4ed6c5d 100644
--- a/content/docs/4.10.0/getting-started/run-locally/index.html
+++ b/content/docs/4.10.0/getting-started/run-locally/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">Run bookies locally | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/4.10.0/getting-started/run-locally"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.10.0"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.10.0"><meta data-rh="true" name="docsearch:version" content="4.10.0"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.10.0"><meta data-rh="true" property="og:title" content="Run bookies locally | Apache BookKeeper"><meta data-rh="true" name="description" content="Bookies are individual BookKeeper servers. You can run an ensemble of bookies locally on a single machine using the localbookie command of the bookkeeper CLI tool and specifying the number of bookies you&#x27;d like to include in the ensemble."><meta data-rh="true" property="og:description" content="Bookies are individual BookKeeper servers. You can run an ensemble of bookies locally on a single machine using the localbookie command of the bookkeeper CLI tool and specifying the number of bookies you&#x27;d like to include in the ensemble."><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/4.10.0/getting-started/run-locally"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.10.0/getting-started/run-locally" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.10.0/getting-started/run-locally" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -22,7 +22,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/4.10.0/overview/index.html b/content/docs/4.10.0/overview/index.html
index 659275c..41b6ddd 100644
--- a/content/docs/4.10.0/overview/index.html
+++ b/content/docs/4.10.0/overview/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">Apache BookKeeper 4.10.0 | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/4.10.0/overview/"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.10.0"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.10.0"><meta data-rh="true" name="docsearch:version" content="4.10.0"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.10.0"><meta data-rh="true" property="og:title" content="Apache BookKeeper 4.10.0 | Apache BookKeeper"><meta data-rh="true" name="description" content="&lt;!--"><meta data-rh="true" property="og:description" content="&lt;!--"><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/4.10.0/overview/"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.10.0/overview/" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.10.0/overview/" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -24,7 +24,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/4.10.0/reference/cli/index.html b/content/docs/4.10.0/reference/cli/index.html
index 4816019..709f0b8 100644
--- a/content/docs/4.10.0/reference/cli/index.html
+++ b/content/docs/4.10.0/reference/cli/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">BookKeeper CLI tool reference | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/4.10.0/reference/cli"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.10.0"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.10.0"><meta data-rh="true" name="docsearch:version" content="4.10.0"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.10.0"><meta data-rh="true" property="og:title" content="BookKeeper CLI tool reference | Apache BookKeeper"><meta data-rh="true" name="description" content="bookkeeper command"><meta data-rh="true" property="og:description" content="bookkeeper command"><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/4.10.0/reference/cli"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.10.0/reference/cli" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.10.0/reference/cli" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -29,7 +29,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/4.10.0/reference/config/index.html b/content/docs/4.10.0/reference/config/index.html
index fce8aaa..cce99cb 100644
--- a/content/docs/4.10.0/reference/config/index.html
+++ b/content/docs/4.10.0/reference/config/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">BookKeeper configuration | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/4.10.0/reference/config"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.10.0"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.10.0"><meta data-rh="true" name="docsearch:version" content="4.10.0"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.10.0"><meta data-rh="true" property="og:title" content="BookKeeper configuration | Apache BookKeeper"><meta data-rh="true" name="description" content="The table below lists parameters that you can set to configure bookies. All configuration takes place in the bk_server.conf file in the bookkeeper-server/conf directory of your BookKeeper installation."><meta data-rh="true" property="og:description" content="The table below lists parameters that you can set to configure bookies. All configuration takes place in the bk_server.conf file in the bookkeeper-server/conf directory of your BookKeeper installation."><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/4.10.0/reference/config"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.10.0/reference/config" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.10.0/reference/config" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -22,7 +22,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/4.10.0/reference/metrics/index.html b/content/docs/4.10.0/reference/metrics/index.html
index e84656f..beedd62 100644
--- a/content/docs/4.10.0/reference/metrics/index.html
+++ b/content/docs/4.10.0/reference/metrics/index.html
@@ -4,12 +4,12 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">BookKeeper metrics reference | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/4.10.0/reference/metrics"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.10.0"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.10.0"><meta data-rh="true" name="docsearch:version" content="4.10.0"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.10.0"><meta data-rh="true" property="og:title" content="BookKeeper metrics reference | Apache BookKeeper"><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/4.10.0/reference/metrics"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.10.0/reference/metrics" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.10.0/reference/metrics" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
-<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navbar__brand" href="/"><div class="navbar__logo"><img src="/img/bk-logo.svg" alt="Apache Bookkeeper" class="themedImage_ToTc themedImage--light_HNdA"><img src="/img/bk-logo.svg" alt="Apache Bookkeeper" class="themedImage_ToTc themedImage--dark_i4oU"></div><b class="navbar__title text--truncate">Apache BookKeeper</b></a><a class="navbar__item navbar__link" href="/docs/4.10.0/overview/">Documentation</a><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Community</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/community/mailing-lists">Mailing lists</a></li><li><a class="dropdown__link" href="/community/slack">Slack</a></li><li><a href="https://github.com/apache/bookkeeper/issues" target="_blank" rel="noopener noreferrer" class="dropdown__link">Github issues<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a class="dropdown__link" href="/community/releases">Release management</a></li><li><a class="dropdown__link" href="/community/meeting">Community meetings</a></li><li><a class="dropdown__link" href="/community/contributing">Contribution guide</a></li><li><a class="dropdown__link" href="/community/coding-guide">Coding guide</a></li><li><a class="dropdown__link" href="/community/testing">Testing guide</a></li><li><a class="dropdown__link" href="/community/issue-report">Issue report guide</a></li><li><a class="dropdown__link" href="/community/release-guide">Release guide</a></li><li><a class="dropdown__link" href="/community/presentations">Presentations</a></li><li><a class="dropdown__link" href="/community/bookkeeper-proposals">BookKeeper proposals (BP)</a></li></ul></div><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Project</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/project/who">Who are we?</a></li><li><a class="dropdown__link" href="/project/bylaws">Bylaws</a></li><li><a href="https://apache.org/licenses" target="_blank" rel="noopener noreferrer" class="dropdown__link">License<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a class="dropdown__link" href="/project/privacy">Privacy policy</a></li><li><a href="https://www.apache.org/foundation/sponsorship.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Sponsorship<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a href="https://www.apache.org/foundation/thanks.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Thanks<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div></div><div class="navbar__items navbar__items--right"><div class="navbar__item dropdown dropdown--hoverable dropdown--right"><a class="navbar__link" aria-haspopup="true" aria-expanded="false" role="button" href="/docs/4.10.0/overview/">4.10.0</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/docs/next/overview/">Next</a></li><li><a class="dropdown__link" href="/docs/admin/autorecovery">4.17.0</a></li><li><a class="dropdown__link" href="/docs/4.16.5/overview/">4.16.5</a></li><li><a class="dropdown__link" href="/docs/4.15.5/overview/">4.15.5</a></li><li><a class="dropdown__link" href="/docs/4.14.8/reference/metrics">4.14.8</a></li><li><a class="dropdown__link" href="/docs/4.13.0/reference/metrics">4.13.0</a></li><li><a class="dropdown__link" href="/docs/4.12.1/reference/metrics">4.12.1</a></li><li><a class="dropdown__link" href="/docs/4.11.1/reference/metrics">4.11.1</a></li><li><a aria-current="page" class="dropdown__link dropdown__link--active" href="/docs/4.10.0/reference/metrics">4.10.0</a></li><li><a class="dropdown__link" href="/docs/4.9.2/reference/metrics">4.9.2</a></li><li><a class="dropdown__link" href="/docs/4.8.2/reference/metrics">4.8.2</a></li><li><a class="dropdown__link" href="/docs/4.7.3/reference/metrics">4.7.3</a></li><li><a class="dropdown__link" href="/docs/4.6.2/reference/metrics">4.6.2</a></li><li><a class="dropdown__link" href="/docs/4.5.1/reference/metrics">4.5.1</a></li></ul></div><a class="navbar__item navbar__link" href="/releases">Download</a><div class="toggle_vylO colorModeToggle_DEke"><button class="clean-btn toggleButton_gllP toggleButtonDisabled_aARS" type="button" disabled="" title="Switch between dark and light mode (currently light mode)" aria-label="Switch between dark and light mode (currently light mode)" aria-live="polite"><svg viewBox="0 0 24 24" width="24" height="24" class="lightToggleIcon_pyhR"><path fill="currentColor" d="M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"></path></svg><svg viewBox="0 0 24 24" width="24" height="24" class="darkToggleIcon_wfgR"><path fill="currentColor" d="M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"></path></svg></button></div><div class="searchBox_ZlJk"></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div></nav><div id="docusaurus_skipToContent_fallback" class="main-wrapper mainWrapper_z2l0 docsWrapper_BCFX"><button aria-label="Scroll back to top" class="clean-btn theme-back-to-top-button backToTopButton_sjWU" type="button"></button><div class="docPage__5DB"><main class="docMainContainer_gTbr docMainContainerEnhanced_Uz_u"><div class="container padding-top--md padding-bottom--lg"><div class="row"><div class="col docItemCol_VOVn"><div class="docItemContainer_Djhp"><article><span class="theme-doc-version-badge badge badge--secondary">Version: 4.10.0</span><div class="theme-doc-markdown markdown"><header><h1>BookKeeper metrics reference</h1></header></div></article><nav class="pagination-nav docusaurus-mt-lg" aria-label="Docs pages navigation"></nav></div></div></div></div></main></div></div><footer class="footer footer--dark"><div class="container container-fluid"><div class="row footer__links"><div class="col footer__col"><div class="footer__title">Documentation</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/docs/overview">Overview</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/getting-started/installation">Getting started</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/deployment/manual">Deployment</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/admin/bookies">Administration</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/api/overview">API</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/security/overview">Security</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/development/protocol">Development</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/reference/config">Reference</a></li></ul></div><div class="col footer__col"><div class="footer__title">Community</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/community/mailing-lists">Mailing lists</a></li><li class="footer__item"><a class="footer__link-item" href="/community/slack">Slack</a></li><li class="footer__item"><a href="https://github.com/apache/bookkeeper" target="_blank" rel="noopener noreferrer" class="footer__link-item">Github<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a href="https://twitter.com/asfbookkeeper" target="_blank" rel="noopener noreferrer" class="footer__link-item">Twitter<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div><div class="col footer__col"><div class="footer__title">Project</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/project/who">Who are we?</a></li><li class="footer__item"><a class="footer__link-item" href="/project/bylaws">Bylaws</a></li><li class="footer__item"><a href="https://apache.org/licenses" target="_blank" rel="noopener noreferrer" class="footer__link-item">License<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a class="footer__link-item" href="/project/privacy">Privacy policy</a></li><li class="footer__item"><a href="https://www.apache.org/foundation/sponsorship.html" target="_blank" rel="noopener noreferrer" class="footer__link-item">Sponsorship<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a href="https://www.apache.org/foundation/thanks.html" target="_blank" rel="noopener noreferrer" class="footer__link-item">Thanks<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div></div><div class="footer__bottom text--center"><div class="footer__copyright"><footer class="footer">
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navbar__brand" href="/"><div class="navbar__logo"><img src="/img/bk-logo.svg" alt="Apache Bookkeeper" class="themedImage_ToTc themedImage--light_HNdA"><img src="/img/bk-logo.svg" alt="Apache Bookkeeper" class="themedImage_ToTc themedImage--dark_i4oU"></div><b class="navbar__title text--truncate">Apache BookKeeper</b></a><a class="navbar__item navbar__link" href="/docs/4.10.0/overview/">Documentation</a><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Community</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/community/mailing-lists">Mailing lists</a></li><li><a class="dropdown__link" href="/community/slack">Slack</a></li><li><a href="https://github.com/apache/bookkeeper/issues" target="_blank" rel="noopener noreferrer" class="dropdown__link">Github issues<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a class="dropdown__link" href="/community/releases">Release management</a></li><li><a class="dropdown__link" href="/community/meeting">Community meetings</a></li><li><a class="dropdown__link" href="/community/contributing">Contribution guide</a></li><li><a class="dropdown__link" href="/community/coding-guide">Coding guide</a></li><li><a class="dropdown__link" href="/community/testing">Testing guide</a></li><li><a class="dropdown__link" href="/community/issue-report">Issue report guide</a></li><li><a class="dropdown__link" href="/community/release-guide">Release guide</a></li><li><a class="dropdown__link" href="/community/presentations">Presentations</a></li><li><a class="dropdown__link" href="/community/bookkeeper-proposals">BookKeeper proposals (BP)</a></li></ul></div><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Project</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/project/who">Who are we?</a></li><li><a class="dropdown__link" href="/project/bylaws">Bylaws</a></li><li><a href="https://apache.org/licenses" target="_blank" rel="noopener noreferrer" class="dropdown__link">License<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a class="dropdown__link" href="/project/privacy">Privacy policy</a></li><li><a href="https://www.apache.org/foundation/sponsorship.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Sponsorship<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a href="https://www.apache.org/foundation/thanks.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Thanks<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div></div><div class="navbar__items navbar__items--right"><div class="navbar__item dropdown dropdown--hoverable dropdown--right"><a class="navbar__link" aria-haspopup="true" aria-expanded="false" role="button" href="/docs/4.10.0/overview/">4.10.0</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/docs/next/overview/">Next</a></li><li><a class="dropdown__link" href="/docs/overview/">4.17.0</a></li><li><a class="dropdown__link" href="/docs/4.16.5/overview/">4.16.5</a></li><li><a class="dropdown__link" href="/docs/4.15.5/overview/">4.15.5</a></li><li><a class="dropdown__link" href="/docs/4.14.8/reference/metrics">4.14.8</a></li><li><a class="dropdown__link" href="/docs/4.13.0/reference/metrics">4.13.0</a></li><li><a class="dropdown__link" href="/docs/4.12.1/reference/metrics">4.12.1</a></li><li><a class="dropdown__link" href="/docs/4.11.1/reference/metrics">4.11.1</a></li><li><a aria-current="page" class="dropdown__link dropdown__link--active" href="/docs/4.10.0/reference/metrics">4.10.0</a></li><li><a class="dropdown__link" href="/docs/4.9.2/reference/metrics">4.9.2</a></li><li><a class="dropdown__link" href="/docs/4.8.2/reference/metrics">4.8.2</a></li><li><a class="dropdown__link" href="/docs/4.7.3/reference/metrics">4.7.3</a></li><li><a class="dropdown__link" href="/docs/4.6.2/reference/metrics">4.6.2</a></li><li><a class="dropdown__link" href="/docs/4.5.1/reference/metrics">4.5.1</a></li></ul></div><a class="navbar__item navbar__link" href="/releases">Download</a><div class="toggle_vylO colorModeToggle_DEke"><button class="clean-btn toggleButton_gllP toggleButtonDisabled_aARS" type="button" disabled="" title="Switch between dark and light mode (currently light mode)" aria-label="Switch between dark and light mode (currently light mode)" aria-live="polite"><svg viewBox="0 0 24 24" width="24" height="24" class="lightToggleIcon_pyhR"><path fill="currentColor" d="M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"></path></svg><svg viewBox="0 0 24 24" width="24" height="24" class="darkToggleIcon_wfgR"><path fill="currentColor" d="M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"></path></svg></button></div><div class="searchBox_ZlJk"></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div></nav><div id="docusaurus_skipToContent_fallback" class="main-wrapper mainWrapper_z2l0 docsWrapper_BCFX"><button aria-label="Scroll back to top" class="clean-btn theme-back-to-top-button backToTopButton_sjWU" type="button"></button><div class="docPage__5DB"><main class="docMainContainer_gTbr docMainContainerEnhanced_Uz_u"><div class="container padding-top--md padding-bottom--lg"><div class="row"><div class="col docItemCol_VOVn"><div class="docItemContainer_Djhp"><article><span class="theme-doc-version-badge badge badge--secondary">Version: 4.10.0</span><div class="theme-doc-markdown markdown"><header><h1>BookKeeper metrics reference</h1></header></div></article><nav class="pagination-nav docusaurus-mt-lg" aria-label="Docs pages navigation"></nav></div></div></div></div></main></div></div><footer class="footer footer--dark"><div class="container container-fluid"><div class="row footer__links"><div class="col footer__col"><div class="footer__title">Documentation</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/docs/overview">Overview</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/getting-started/installation">Getting started</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/deployment/manual">Deployment</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/admin/bookies">Administration</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/api/overview">API</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/security/overview">Security</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/development/protocol">Development</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/reference/config">Reference</a></li></ul></div><div class="col footer__col"><div class="footer__title">Community</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/community/mailing-lists">Mailing lists</a></li><li class="footer__item"><a class="footer__link-item" href="/community/slack">Slack</a></li><li class="footer__item"><a href="https://github.com/apache/bookkeeper" target="_blank" rel="noopener noreferrer" class="footer__link-item">Github<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a href="https://twitter.com/asfbookkeeper" target="_blank" rel="noopener noreferrer" class="footer__link-item">Twitter<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div><div class="col footer__col"><div class="footer__title">Project</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/project/who">Who are we?</a></li><li class="footer__item"><a class="footer__link-item" href="/project/bylaws">Bylaws</a></li><li class="footer__item"><a href="https://apache.org/licenses" target="_blank" rel="noopener noreferrer" class="footer__link-item">License<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a class="footer__link-item" href="/project/privacy">Privacy policy</a></li><li class="footer__item"><a href="https://www.apache.org/foundation/sponsorship.html" target="_blank" rel="noopener noreferrer" class="footer__link-item">Sponsorship<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a href="https://www.apache.org/foundation/thanks.html" target="_blank" rel="noopener noreferrer" class="footer__link-item">Thanks<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div></div><div class="footer__bottom text--center"><div class="footer__copyright"><footer class="footer">
         <div class="container">
           <div class="content has-text-centered">
             <p>
@@ -22,7 +22,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/4.10.0/security/overview/index.html b/content/docs/4.10.0/security/overview/index.html
index 7f8e3ec..6a4d303 100644
--- a/content/docs/4.10.0/security/overview/index.html
+++ b/content/docs/4.10.0/security/overview/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">BookKeeper Security | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/4.10.0/security/overview"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.10.0"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.10.0"><meta data-rh="true" name="docsearch:version" content="4.10.0"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.10.0"><meta data-rh="true" property="og:title" content="BookKeeper Security | Apache BookKeeper"><meta data-rh="true" name="description" content="In the 4.5.0 release, the BookKeeper community added a number of features that can be used, together or separately, to secure a BookKeeper cluster."><meta data-rh="true" property="og:description" content="In the 4.5.0 release, the BookKeeper community added a number of features that can be used, together or separately, to secure a BookKeeper cluster."><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/4.10.0/security/overview"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.10.0/security/overview" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.10.0/security/overview" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -23,7 +23,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/4.10.0/security/sasl/index.html b/content/docs/4.10.0/security/sasl/index.html
index 4ac19c5..30cfc60 100644
--- a/content/docs/4.10.0/security/sasl/index.html
+++ b/content/docs/4.10.0/security/sasl/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">Authentication using SASL | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/4.10.0/security/sasl"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.10.0"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.10.0"><meta data-rh="true" name="docsearch:version" content="4.10.0"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.10.0"><meta data-rh="true" property="og:title" content="Authentication using SASL | Apache BookKeeper"><meta data-rh="true" name="description" content="Bookies support client authentication via SASL. Currently we only support GSSAPI (Kerberos). We will start"><meta data-rh="true" property="og:description" content="Bookies support client authentication via SASL. Currently we only support GSSAPI (Kerberos). We will start"><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/4.10.0/security/sasl"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.10.0/security/sasl" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.10.0/security/sasl" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -45,7 +45,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/4.10.0/security/tls/index.html b/content/docs/4.10.0/security/tls/index.html
index a487954..f83b604 100644
--- a/content/docs/4.10.0/security/tls/index.html
+++ b/content/docs/4.10.0/security/tls/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">Encryption and Authentication using TLS | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/4.10.0/security/tls"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.10.0"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.10.0"><meta data-rh="true" name="docsearch:version" content="4.10.0"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.10.0"><meta data-rh="true" property="og:title" content="Encryption and Authentication using TLS | Apache BookKeeper"><meta data-rh="true" name="description" content="Apache BookKeeper allows clients and autorecovery daemons to communicate over TLS, although this is not enabled by default."><meta data-rh="true" property="og:description" content="Apache BookKeeper allows clients and autorecovery daemons to communicate over TLS, although this is not enabled by default."><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/4.10.0/security/tls"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.10.0/security/tls" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.10.0/security/tls" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -53,7 +53,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/4.10.0/security/zookeeper/index.html b/content/docs/4.10.0/security/zookeeper/index.html
index d1756c0..f523337 100644
--- a/content/docs/4.10.0/security/zookeeper/index.html
+++ b/content/docs/4.10.0/security/zookeeper/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">ZooKeeper Authentication | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/4.10.0/security/zookeeper"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.10.0"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.10.0"><meta data-rh="true" name="docsearch:version" content="4.10.0"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.10.0"><meta data-rh="true" property="og:title" content="ZooKeeper Authentication | Apache BookKeeper"><meta data-rh="true" name="description" content="New Clusters"><meta data-rh="true" property="og:description" content="New Clusters"><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/4.10.0/security/zookeeper"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.10.0/security/zookeeper" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.10.0/security/zookeeper" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -29,7 +29,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/4.11.1/admin/autorecovery/index.html b/content/docs/4.11.1/admin/autorecovery/index.html
index a96e49b..f200d25 100644
--- a/content/docs/4.11.1/admin/autorecovery/index.html
+++ b/content/docs/4.11.1/admin/autorecovery/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">Using AutoRecovery | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/4.11.1/admin/autorecovery"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.11.1"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.11.1"><meta data-rh="true" name="docsearch:version" content="4.11.1"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.11.1"><meta data-rh="true" property="og:title" content="Using AutoRecovery | Apache BookKeeper"><meta data-rh="true" name="description" content="When a bookie crashes, all ledgers on that bookie become under-replicated. In order to bring all ledgers in your BookKeeper cluster back to full replication, you&#x27;ll need to recover the data from any offline bookies. There are two ways to recover bookies&#x27; data:"><meta data-rh="true" property="og:description" content="When a bookie crashes, all ledgers on that bookie become under-replicated. In order to bring all ledgers in your BookKeeper cluster back to full replication, you&#x27;ll need to recover the data from any offline bookies. There are two ways to recover bookies&#x27; data:"><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/4.11.1/admin/autorecovery"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.11.1/admin/autorecovery" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.11.1/admin/autorecovery" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -22,7 +22,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/4.11.1/admin/bookies/index.html b/content/docs/4.11.1/admin/bookies/index.html
index bb8f6f1..5104536 100644
--- a/content/docs/4.11.1/admin/bookies/index.html
+++ b/content/docs/4.11.1/admin/bookies/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">BookKeeper administration | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/4.11.1/admin/bookies"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.11.1"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.11.1"><meta data-rh="true" name="docsearch:version" content="4.11.1"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.11.1"><meta data-rh="true" property="og:title" content="BookKeeper administration | Apache BookKeeper"><meta data-rh="true" name="description" content="This document is a guide to deploying, administering, and maintaining BookKeeper. It also discusses best practices and common problems."><meta data-rh="true" property="og:description" content="This document is a guide to deploying, administering, and maintaining BookKeeper. It also discusses best practices and common problems."><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/4.11.1/admin/bookies"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.11.1/admin/bookies" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.11.1/admin/bookies" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -22,7 +22,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/4.11.1/admin/decomission/index.html b/content/docs/4.11.1/admin/decomission/index.html
index 3f35327..ed7ce6a 100644
--- a/content/docs/4.11.1/admin/decomission/index.html
+++ b/content/docs/4.11.1/admin/decomission/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">Decommission Bookies | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/4.11.1/admin/decomission"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.11.1"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.11.1"><meta data-rh="true" name="docsearch:version" content="4.11.1"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.11.1"><meta data-rh="true" property="og:title" content="Decommission Bookies | Apache BookKeeper"><meta data-rh="true" name="description" content="In case the user wants to decommission a bookie, the following process is useful to follow in order to verify if the"><meta data-rh="true" property="og:description" content="In case the user wants to decommission a bookie, the following process is useful to follow in order to verify if the"><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/4.11.1/admin/decomission"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.11.1/admin/decomission" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.11.1/admin/decomission" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -33,7 +33,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/4.11.1/admin/geo-replication/index.html b/content/docs/4.11.1/admin/geo-replication/index.html
index f56df0e..8abed58 100644
--- a/content/docs/4.11.1/admin/geo-replication/index.html
+++ b/content/docs/4.11.1/admin/geo-replication/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">Geo-replication | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/4.11.1/admin/geo-replication"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.11.1"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.11.1"><meta data-rh="true" name="docsearch:version" content="4.11.1"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.11.1"><meta data-rh="true" property="og:title" content="Geo-replication | Apache BookKeeper"><meta data-rh="true" name="description" content="Geo-replication is the replication of data across BookKeeper clusters. In order to enable geo-replication for a group of BookKeeper clusters,"><meta data-rh="true" property="og:description" content="Geo-replication is the replication of data across BookKeeper clusters. In order to enable geo-replication for a group of BookKeeper clusters,"><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/4.11.1/admin/geo-replication"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.11.1/admin/geo-replication" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.11.1/admin/geo-replication" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -22,7 +22,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/4.11.1/admin/http/index.html b/content/docs/4.11.1/admin/http/index.html
index 2ac2edc..478ed13 100644
--- a/content/docs/4.11.1/admin/http/index.html
+++ b/content/docs/4.11.1/admin/http/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">BookKeeper Admin REST API | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/4.11.1/admin/http"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.11.1"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.11.1"><meta data-rh="true" name="docsearch:version" content="4.11.1"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.11.1"><meta data-rh="true" property="og:title" content="BookKeeper Admin REST API | Apache BookKeeper"><meta data-rh="true" name="description" content="This document introduces BookKeeper HTTP endpoints, which can be used for BookKeeper administration."><meta data-rh="true" property="og:description" content="This document introduces BookKeeper HTTP endpoints, which can be used for BookKeeper administration."><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/4.11.1/admin/http"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.11.1/admin/http" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.11.1/admin/http" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -23,7 +23,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/4.11.1/admin/metrics/index.html b/content/docs/4.11.1/admin/metrics/index.html
index c8df51a..cefa422 100644
--- a/content/docs/4.11.1/admin/metrics/index.html
+++ b/content/docs/4.11.1/admin/metrics/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">Metric collection | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/4.11.1/admin/metrics"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.11.1"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.11.1"><meta data-rh="true" name="docsearch:version" content="4.11.1"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.11.1"><meta data-rh="true" property="og:title" content="Metric collection | Apache BookKeeper"><meta data-rh="true" name="description" content="BookKeeper enables metrics collection through a variety of stats providers."><meta data-rh="true" property="og:description" content="BookKeeper enables metrics collection through a variety of stats providers."><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/4.11.1/admin/metrics"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.11.1/admin/metrics" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.11.1/admin/metrics" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -22,7 +22,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/4.11.1/admin/perf/index.html b/content/docs/4.11.1/admin/perf/index.html
index 3cec1dd..27dbe33 100644
--- a/content/docs/4.11.1/admin/perf/index.html
+++ b/content/docs/4.11.1/admin/perf/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">Performance tuning | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/4.11.1/admin/perf"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.11.1"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.11.1"><meta data-rh="true" name="docsearch:version" content="4.11.1"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.11.1"><meta data-rh="true" property="og:title" content="Performance tuning | Apache BookKeeper"><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/4.11.1/admin/perf"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.11.1/admin/perf" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.11.1/admin/perf" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -22,7 +22,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/4.11.1/admin/placement/index.html b/content/docs/4.11.1/admin/placement/index.html
index bdae1e7..801d8c9 100644
--- a/content/docs/4.11.1/admin/placement/index.html
+++ b/content/docs/4.11.1/admin/placement/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">Customized placement policies | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/4.11.1/admin/placement"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.11.1"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.11.1"><meta data-rh="true" name="docsearch:version" content="4.11.1"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.11.1"><meta data-rh="true" property="og:title" content="Customized placement policies | Apache BookKeeper"><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/4.11.1/admin/placement"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.11.1/admin/placement" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.11.1/admin/placement" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -22,7 +22,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/4.11.1/admin/upgrade/index.html b/content/docs/4.11.1/admin/upgrade/index.html
index 22e8d6c..237f7bf 100644
--- a/content/docs/4.11.1/admin/upgrade/index.html
+++ b/content/docs/4.11.1/admin/upgrade/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">Upgrade | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/4.11.1/admin/upgrade"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.11.1"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.11.1"><meta data-rh="true" name="docsearch:version" content="4.11.1"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.11.1"><meta data-rh="true" property="og:title" content="Upgrade | Apache BookKeeper"><meta data-rh="true" name="description" content="If you have questions about upgrades (or need help), please feel free to reach out to us by mailing list or Slack Channel."><meta data-rh="true" property="og:description" content="If you have questions about upgrades (or need help), please feel free to reach out to us by mailing list or Slack Channel."><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/4.11.1/admin/upgrade"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.11.1/admin/upgrade" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.11.1/admin/upgrade" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -29,7 +29,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/4.11.1/api/distributedlog-api/index.html b/content/docs/4.11.1/api/distributedlog-api/index.html
index da96939..2932b75 100644
--- a/content/docs/4.11.1/api/distributedlog-api/index.html
+++ b/content/docs/4.11.1/api/distributedlog-api/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">DistributedLog | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/4.11.1/api/distributedlog-api"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.11.1"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.11.1"><meta data-rh="true" name="docsearch:version" content="4.11.1"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.11.1"><meta data-rh="true" property="og:title" content="DistributedLog | Apache BookKeeper"><meta data-rh="true" name="description" content="DistributedLog began its life as a separate project under the Apache Foundation. It was merged into BookKeeper in 2017."><meta data-rh="true" property="og:description" content="DistributedLog began its life as a separate project under the Apache Foundation. It was merged into BookKeeper in 2017."><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/4.11.1/api/distributedlog-api"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.11.1/api/distributedlog-api" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.11.1/api/distributedlog-api" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -22,7 +22,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/4.11.1/api/ledger-adv-api/index.html b/content/docs/4.11.1/api/ledger-adv-api/index.html
index ddd291d..f40e962 100644
--- a/content/docs/4.11.1/api/ledger-adv-api/index.html
+++ b/content/docs/4.11.1/api/ledger-adv-api/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">The Advanced Ledger API | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/4.11.1/api/ledger-adv-api"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.11.1"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.11.1"><meta data-rh="true" name="docsearch:version" content="4.11.1"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.11.1"><meta data-rh="true" property="og:title" content="The Advanced Ledger API | Apache BookKeeper"><meta data-rh="true" name="description" content="In release 4.5.0, Apache BookKeeper introduces a few advanced API for advanced usage."><meta data-rh="true" property="og:description" content="In release 4.5.0, Apache BookKeeper introduces a few advanced API for advanced usage."><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/4.11.1/api/ledger-adv-api"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.11.1/api/ledger-adv-api" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.11.1/api/ledger-adv-api" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -27,7 +27,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/4.11.1/api/ledger-api/index.html b/content/docs/4.11.1/api/ledger-api/index.html
index 403499e..ad44e16 100644
--- a/content/docs/4.11.1/api/ledger-api/index.html
+++ b/content/docs/4.11.1/api/ledger-api/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">The Ledger API | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/4.11.1/api/ledger-api"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.11.1"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.11.1"><meta data-rh="true" name="docsearch:version" content="4.11.1"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.11.1"><meta data-rh="true" property="og:title" content="The Ledger API | Apache BookKeeper"><meta data-rh="true" name="description" content="The ledger API is a lower-level API for BookKeeper that enables you to interact with ledgers directly."><meta data-rh="true" property="og:description" content="The ledger API is a lower-level API for BookKeeper that enables you to interact with ledgers directly."><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/4.11.1/api/ledger-api"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.11.1/api/ledger-api" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.11.1/api/ledger-api" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -46,7 +46,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/4.11.1/api/overview/index.html b/content/docs/4.11.1/api/overview/index.html
index 792ceb2..e8876d0 100644
--- a/content/docs/4.11.1/api/overview/index.html
+++ b/content/docs/4.11.1/api/overview/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">BookKeeper API | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/4.11.1/api/overview"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.11.1"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.11.1"><meta data-rh="true" name="docsearch:version" content="4.11.1"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.11.1"><meta data-rh="true" property="og:title" content="BookKeeper API | Apache BookKeeper"><meta data-rh="true" name="description" content="BookKeeper offers a few APIs that applications can use to interact with it:"><meta data-rh="true" property="og:description" content="BookKeeper offers a few APIs that applications can use to interact with it:"><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/4.11.1/api/overview"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.11.1/api/overview" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.11.1/api/overview" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -24,7 +24,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/4.11.1/deployment/kubernetes/index.html b/content/docs/4.11.1/deployment/kubernetes/index.html
index 82972fd..9c967c9 100644
--- a/content/docs/4.11.1/deployment/kubernetes/index.html
+++ b/content/docs/4.11.1/deployment/kubernetes/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">Deploying Apache BookKeeper on Kubernetes | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/4.11.1/deployment/kubernetes"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.11.1"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.11.1"><meta data-rh="true" name="docsearch:version" content="4.11.1"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.11.1"><meta data-rh="true" property="og:title" content="Deploying Apache BookKeeper on Kubernetes | Apache BookKeeper"><meta data-rh="true" name="description" content="Apache BookKeeper can be easily deployed in Kubernetes clusters. The managed clusters on Google Container Engine is the most convenient way."><meta data-rh="true" property="og:description" content="Apache BookKeeper can be easily deployed in Kubernetes clusters. The managed clusters on Google Container Engine is the most convenient way."><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/4.11.1/deployment/kubernetes"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.11.1/deployment/kubernetes" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.11.1/deployment/kubernetes" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -29,7 +29,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/4.11.1/deployment/manual/index.html b/content/docs/4.11.1/deployment/manual/index.html
index 91c177c..934bd08 100644
--- a/content/docs/4.11.1/deployment/manual/index.html
+++ b/content/docs/4.11.1/deployment/manual/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">Manual deployment | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/4.11.1/deployment/manual"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.11.1"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.11.1"><meta data-rh="true" name="docsearch:version" content="4.11.1"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.11.1"><meta data-rh="true" property="og:title" content="Manual deployment | Apache BookKeeper"><meta data-rh="true" name="description" content="A BookKeeper cluster consists of two main components:"><meta data-rh="true" property="og:description" content="A BookKeeper cluster consists of two main components:"><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/4.11.1/deployment/manual"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.11.1/deployment/manual" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.11.1/deployment/manual" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -22,7 +22,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/4.11.1/development/codebase/index.html b/content/docs/4.11.1/development/codebase/index.html
index 1fe199d..b0cdf2d 100644
--- a/content/docs/4.11.1/development/codebase/index.html
+++ b/content/docs/4.11.1/development/codebase/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">The BookKeeper codebase | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/4.11.1/development/codebase"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.11.1"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.11.1"><meta data-rh="true" name="docsearch:version" content="4.11.1"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.11.1"><meta data-rh="true" property="og:title" content="The BookKeeper codebase | Apache BookKeeper"><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/4.11.1/development/codebase"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.11.1/development/codebase" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.11.1/development/codebase" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -22,7 +22,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/4.11.1/development/protocol/index.html b/content/docs/4.11.1/development/protocol/index.html
index 02b5a38..39f195d 100644
--- a/content/docs/4.11.1/development/protocol/index.html
+++ b/content/docs/4.11.1/development/protocol/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">The BookKeeper protocol | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/4.11.1/development/protocol"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.11.1"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.11.1"><meta data-rh="true" name="docsearch:version" content="4.11.1"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.11.1"><meta data-rh="true" property="og:title" content="The BookKeeper protocol | Apache BookKeeper"><meta data-rh="true" name="description" content="BookKeeper uses a special replication protocol for guaranteeing persistent storage of entries in an ensemble of bookies."><meta data-rh="true" property="og:description" content="BookKeeper uses a special replication protocol for guaranteeing persistent storage of entries in an ensemble of bookies."><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/4.11.1/development/protocol"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.11.1/development/protocol" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.11.1/development/protocol" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -22,7 +22,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/4.11.1/getting-started/concepts/index.html b/content/docs/4.11.1/getting-started/concepts/index.html
index 28d782b..cc81a6f 100644
--- a/content/docs/4.11.1/getting-started/concepts/index.html
+++ b/content/docs/4.11.1/getting-started/concepts/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">BookKeeper concepts and architecture | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/4.11.1/getting-started/concepts"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.11.1"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.11.1"><meta data-rh="true" name="docsearch:version" content="4.11.1"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.11.1"><meta data-rh="true" property="og:title" content="BookKeeper concepts and architecture | Apache BookKeeper"><meta data-rh="true" name="description" content="BookKeeper is a service that provides persistent storage of streams of log entries---aka records---in sequences called ledgers. BookKeeper replicates stored entries across multiple servers."><meta data-rh="true" property="og:description" content="BookKeeper is a service that provides persistent storage of streams of log entries---aka records---in sequences called ledgers. BookKeeper replicates stored entries across multiple servers."><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/4.11.1/getting-started/concepts"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.11.1/getting-started/concepts" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.11.1/getting-started/concepts" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -22,7 +22,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/4.11.1/getting-started/installation/index.html b/content/docs/4.11.1/getting-started/installation/index.html
index 99c4c52..d0109f4 100644
--- a/content/docs/4.11.1/getting-started/installation/index.html
+++ b/content/docs/4.11.1/getting-started/installation/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">BookKeeper installation | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/4.11.1/getting-started/installation"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.11.1"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.11.1"><meta data-rh="true" name="docsearch:version" content="4.11.1"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.11.1"><meta data-rh="true" property="og:title" content="BookKeeper installation | Apache BookKeeper"><meta data-rh="true" name="description" content="You can install BookKeeper either by downloading a GZipped tarball package or cloning the BookKeeper repository."><meta data-rh="true" property="og:description" content="You can install BookKeeper either by downloading a GZipped tarball package or cloning the BookKeeper repository."><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/4.11.1/getting-started/installation"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.11.1/getting-started/installation" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.11.1/getting-started/installation" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -22,7 +22,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/4.11.1/getting-started/run-locally/index.html b/content/docs/4.11.1/getting-started/run-locally/index.html
index cb2cf67..00bfd23 100644
--- a/content/docs/4.11.1/getting-started/run-locally/index.html
+++ b/content/docs/4.11.1/getting-started/run-locally/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">Run bookies locally | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/4.11.1/getting-started/run-locally"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.11.1"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.11.1"><meta data-rh="true" name="docsearch:version" content="4.11.1"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.11.1"><meta data-rh="true" property="og:title" content="Run bookies locally | Apache BookKeeper"><meta data-rh="true" name="description" content="Bookies are individual BookKeeper servers. You can run an ensemble of bookies locally on a single machine using the localbookie command of the bookkeeper CLI tool and specifying the number of bookies you&#x27;d like to include in the ensemble."><meta data-rh="true" property="og:description" content="Bookies are individual BookKeeper servers. You can run an ensemble of bookies locally on a single machine using the localbookie command of the bookkeeper CLI tool and specifying the number of bookies you&#x27;d like to include in the ensemble."><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/4.11.1/getting-started/run-locally"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.11.1/getting-started/run-locally" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.11.1/getting-started/run-locally" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -22,7 +22,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/4.11.1/overview/index.html b/content/docs/4.11.1/overview/index.html
index d16982c..808ebc2 100644
--- a/content/docs/4.11.1/overview/index.html
+++ b/content/docs/4.11.1/overview/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">Apache BookKeeper 4.11.1 | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/4.11.1/overview/"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.11.1"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.11.1"><meta data-rh="true" name="docsearch:version" content="4.11.1"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.11.1"><meta data-rh="true" property="og:title" content="Apache BookKeeper 4.11.1 | Apache BookKeeper"><meta data-rh="true" name="description" content="&lt;!--"><meta data-rh="true" property="og:description" content="&lt;!--"><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/4.11.1/overview/"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.11.1/overview/" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.11.1/overview/" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -24,7 +24,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/4.11.1/reference/cli/index.html b/content/docs/4.11.1/reference/cli/index.html
index fc88854..db9edcb 100644
--- a/content/docs/4.11.1/reference/cli/index.html
+++ b/content/docs/4.11.1/reference/cli/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">BookKeeper CLI tool reference | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/4.11.1/reference/cli"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.11.1"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.11.1"><meta data-rh="true" name="docsearch:version" content="4.11.1"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.11.1"><meta data-rh="true" property="og:title" content="BookKeeper CLI tool reference | Apache BookKeeper"><meta data-rh="true" name="description" content="bookkeeper command"><meta data-rh="true" property="og:description" content="bookkeeper command"><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/4.11.1/reference/cli"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.11.1/reference/cli" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.11.1/reference/cli" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -29,7 +29,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/4.11.1/reference/config/index.html b/content/docs/4.11.1/reference/config/index.html
index a47a6cb..8828ccd 100644
--- a/content/docs/4.11.1/reference/config/index.html
+++ b/content/docs/4.11.1/reference/config/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">BookKeeper configuration | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/4.11.1/reference/config"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.11.1"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.11.1"><meta data-rh="true" name="docsearch:version" content="4.11.1"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.11.1"><meta data-rh="true" property="og:title" content="BookKeeper configuration | Apache BookKeeper"><meta data-rh="true" name="description" content="The table below lists parameters that you can set to configure bookies. All configuration takes place in the bk_server.conf file in the bookkeeper-server/conf directory of your BookKeeper installation."><meta data-rh="true" property="og:description" content="The table below lists parameters that you can set to configure bookies. All configuration takes place in the bk_server.conf file in the bookkeeper-server/conf directory of your BookKeeper installation."><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/4.11.1/reference/config"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.11.1/reference/config" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.11.1/reference/config" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -22,7 +22,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/4.11.1/reference/metrics/index.html b/content/docs/4.11.1/reference/metrics/index.html
index 2b09a5c..af18e4c 100644
--- a/content/docs/4.11.1/reference/metrics/index.html
+++ b/content/docs/4.11.1/reference/metrics/index.html
@@ -4,12 +4,12 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">BookKeeper metrics reference | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/4.11.1/reference/metrics"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.11.1"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.11.1"><meta data-rh="true" name="docsearch:version" content="4.11.1"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.11.1"><meta data-rh="true" property="og:title" content="BookKeeper metrics reference | Apache BookKeeper"><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/4.11.1/reference/metrics"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.11.1/reference/metrics" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.11.1/reference/metrics" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
-<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navbar__brand" href="/"><div class="navbar__logo"><img src="/img/bk-logo.svg" alt="Apache Bookkeeper" class="themedImage_ToTc themedImage--light_HNdA"><img src="/img/bk-logo.svg" alt="Apache Bookkeeper" class="themedImage_ToTc themedImage--dark_i4oU"></div><b class="navbar__title text--truncate">Apache BookKeeper</b></a><a class="navbar__item navbar__link" href="/docs/4.11.1/overview/">Documentation</a><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Community</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/community/mailing-lists">Mailing lists</a></li><li><a class="dropdown__link" href="/community/slack">Slack</a></li><li><a href="https://github.com/apache/bookkeeper/issues" target="_blank" rel="noopener noreferrer" class="dropdown__link">Github issues<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a class="dropdown__link" href="/community/releases">Release management</a></li><li><a class="dropdown__link" href="/community/meeting">Community meetings</a></li><li><a class="dropdown__link" href="/community/contributing">Contribution guide</a></li><li><a class="dropdown__link" href="/community/coding-guide">Coding guide</a></li><li><a class="dropdown__link" href="/community/testing">Testing guide</a></li><li><a class="dropdown__link" href="/community/issue-report">Issue report guide</a></li><li><a class="dropdown__link" href="/community/release-guide">Release guide</a></li><li><a class="dropdown__link" href="/community/presentations">Presentations</a></li><li><a class="dropdown__link" href="/community/bookkeeper-proposals">BookKeeper proposals (BP)</a></li></ul></div><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Project</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/project/who">Who are we?</a></li><li><a class="dropdown__link" href="/project/bylaws">Bylaws</a></li><li><a href="https://apache.org/licenses" target="_blank" rel="noopener noreferrer" class="dropdown__link">License<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a class="dropdown__link" href="/project/privacy">Privacy policy</a></li><li><a href="https://www.apache.org/foundation/sponsorship.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Sponsorship<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a href="https://www.apache.org/foundation/thanks.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Thanks<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div></div><div class="navbar__items navbar__items--right"><div class="navbar__item dropdown dropdown--hoverable dropdown--right"><a class="navbar__link" aria-haspopup="true" aria-expanded="false" role="button" href="/docs/4.11.1/overview/">4.11.1</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/docs/next/overview/">Next</a></li><li><a class="dropdown__link" href="/docs/admin/autorecovery">4.17.0</a></li><li><a class="dropdown__link" href="/docs/4.16.5/overview/">4.16.5</a></li><li><a class="dropdown__link" href="/docs/4.15.5/overview/">4.15.5</a></li><li><a class="dropdown__link" href="/docs/4.14.8/reference/metrics">4.14.8</a></li><li><a class="dropdown__link" href="/docs/4.13.0/reference/metrics">4.13.0</a></li><li><a class="dropdown__link" href="/docs/4.12.1/reference/metrics">4.12.1</a></li><li><a aria-current="page" class="dropdown__link dropdown__link--active" href="/docs/4.11.1/reference/metrics">4.11.1</a></li><li><a class="dropdown__link" href="/docs/4.10.0/reference/metrics">4.10.0</a></li><li><a class="dropdown__link" href="/docs/4.9.2/reference/metrics">4.9.2</a></li><li><a class="dropdown__link" href="/docs/4.8.2/reference/metrics">4.8.2</a></li><li><a class="dropdown__link" href="/docs/4.7.3/reference/metrics">4.7.3</a></li><li><a class="dropdown__link" href="/docs/4.6.2/reference/metrics">4.6.2</a></li><li><a class="dropdown__link" href="/docs/4.5.1/reference/metrics">4.5.1</a></li></ul></div><a class="navbar__item navbar__link" href="/releases">Download</a><div class="toggle_vylO colorModeToggle_DEke"><button class="clean-btn toggleButton_gllP toggleButtonDisabled_aARS" type="button" disabled="" title="Switch between dark and light mode (currently light mode)" aria-label="Switch between dark and light mode (currently light mode)" aria-live="polite"><svg viewBox="0 0 24 24" width="24" height="24" class="lightToggleIcon_pyhR"><path fill="currentColor" d="M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"></path></svg><svg viewBox="0 0 24 24" width="24" height="24" class="darkToggleIcon_wfgR"><path fill="currentColor" d="M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"></path></svg></button></div><div class="searchBox_ZlJk"></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div></nav><div id="docusaurus_skipToContent_fallback" class="main-wrapper mainWrapper_z2l0 docsWrapper_BCFX"><button aria-label="Scroll back to top" class="clean-btn theme-back-to-top-button backToTopButton_sjWU" type="button"></button><div class="docPage__5DB"><main class="docMainContainer_gTbr docMainContainerEnhanced_Uz_u"><div class="container padding-top--md padding-bottom--lg"><div class="row"><div class="col docItemCol_VOVn"><div class="docItemContainer_Djhp"><article><span class="theme-doc-version-badge badge badge--secondary">Version: 4.11.1</span><div class="theme-doc-markdown markdown"><header><h1>BookKeeper metrics reference</h1></header></div></article><nav class="pagination-nav docusaurus-mt-lg" aria-label="Docs pages navigation"></nav></div></div></div></div></main></div></div><footer class="footer footer--dark"><div class="container container-fluid"><div class="row footer__links"><div class="col footer__col"><div class="footer__title">Documentation</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/docs/overview">Overview</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/getting-started/installation">Getting started</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/deployment/manual">Deployment</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/admin/bookies">Administration</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/api/overview">API</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/security/overview">Security</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/development/protocol">Development</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/reference/config">Reference</a></li></ul></div><div class="col footer__col"><div class="footer__title">Community</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/community/mailing-lists">Mailing lists</a></li><li class="footer__item"><a class="footer__link-item" href="/community/slack">Slack</a></li><li class="footer__item"><a href="https://github.com/apache/bookkeeper" target="_blank" rel="noopener noreferrer" class="footer__link-item">Github<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a href="https://twitter.com/asfbookkeeper" target="_blank" rel="noopener noreferrer" class="footer__link-item">Twitter<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div><div class="col footer__col"><div class="footer__title">Project</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/project/who">Who are we?</a></li><li class="footer__item"><a class="footer__link-item" href="/project/bylaws">Bylaws</a></li><li class="footer__item"><a href="https://apache.org/licenses" target="_blank" rel="noopener noreferrer" class="footer__link-item">License<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a class="footer__link-item" href="/project/privacy">Privacy policy</a></li><li class="footer__item"><a href="https://www.apache.org/foundation/sponsorship.html" target="_blank" rel="noopener noreferrer" class="footer__link-item">Sponsorship<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a href="https://www.apache.org/foundation/thanks.html" target="_blank" rel="noopener noreferrer" class="footer__link-item">Thanks<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div></div><div class="footer__bottom text--center"><div class="footer__copyright"><footer class="footer">
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navbar__brand" href="/"><div class="navbar__logo"><img src="/img/bk-logo.svg" alt="Apache Bookkeeper" class="themedImage_ToTc themedImage--light_HNdA"><img src="/img/bk-logo.svg" alt="Apache Bookkeeper" class="themedImage_ToTc themedImage--dark_i4oU"></div><b class="navbar__title text--truncate">Apache BookKeeper</b></a><a class="navbar__item navbar__link" href="/docs/4.11.1/overview/">Documentation</a><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Community</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/community/mailing-lists">Mailing lists</a></li><li><a class="dropdown__link" href="/community/slack">Slack</a></li><li><a href="https://github.com/apache/bookkeeper/issues" target="_blank" rel="noopener noreferrer" class="dropdown__link">Github issues<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a class="dropdown__link" href="/community/releases">Release management</a></li><li><a class="dropdown__link" href="/community/meeting">Community meetings</a></li><li><a class="dropdown__link" href="/community/contributing">Contribution guide</a></li><li><a class="dropdown__link" href="/community/coding-guide">Coding guide</a></li><li><a class="dropdown__link" href="/community/testing">Testing guide</a></li><li><a class="dropdown__link" href="/community/issue-report">Issue report guide</a></li><li><a class="dropdown__link" href="/community/release-guide">Release guide</a></li><li><a class="dropdown__link" href="/community/presentations">Presentations</a></li><li><a class="dropdown__link" href="/community/bookkeeper-proposals">BookKeeper proposals (BP)</a></li></ul></div><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Project</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/project/who">Who are we?</a></li><li><a class="dropdown__link" href="/project/bylaws">Bylaws</a></li><li><a href="https://apache.org/licenses" target="_blank" rel="noopener noreferrer" class="dropdown__link">License<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a class="dropdown__link" href="/project/privacy">Privacy policy</a></li><li><a href="https://www.apache.org/foundation/sponsorship.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Sponsorship<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a href="https://www.apache.org/foundation/thanks.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Thanks<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div></div><div class="navbar__items navbar__items--right"><div class="navbar__item dropdown dropdown--hoverable dropdown--right"><a class="navbar__link" aria-haspopup="true" aria-expanded="false" role="button" href="/docs/4.11.1/overview/">4.11.1</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/docs/next/overview/">Next</a></li><li><a class="dropdown__link" href="/docs/overview/">4.17.0</a></li><li><a class="dropdown__link" href="/docs/4.16.5/overview/">4.16.5</a></li><li><a class="dropdown__link" href="/docs/4.15.5/overview/">4.15.5</a></li><li><a class="dropdown__link" href="/docs/4.14.8/reference/metrics">4.14.8</a></li><li><a class="dropdown__link" href="/docs/4.13.0/reference/metrics">4.13.0</a></li><li><a class="dropdown__link" href="/docs/4.12.1/reference/metrics">4.12.1</a></li><li><a aria-current="page" class="dropdown__link dropdown__link--active" href="/docs/4.11.1/reference/metrics">4.11.1</a></li><li><a class="dropdown__link" href="/docs/4.10.0/reference/metrics">4.10.0</a></li><li><a class="dropdown__link" href="/docs/4.9.2/reference/metrics">4.9.2</a></li><li><a class="dropdown__link" href="/docs/4.8.2/reference/metrics">4.8.2</a></li><li><a class="dropdown__link" href="/docs/4.7.3/reference/metrics">4.7.3</a></li><li><a class="dropdown__link" href="/docs/4.6.2/reference/metrics">4.6.2</a></li><li><a class="dropdown__link" href="/docs/4.5.1/reference/metrics">4.5.1</a></li></ul></div><a class="navbar__item navbar__link" href="/releases">Download</a><div class="toggle_vylO colorModeToggle_DEke"><button class="clean-btn toggleButton_gllP toggleButtonDisabled_aARS" type="button" disabled="" title="Switch between dark and light mode (currently light mode)" aria-label="Switch between dark and light mode (currently light mode)" aria-live="polite"><svg viewBox="0 0 24 24" width="24" height="24" class="lightToggleIcon_pyhR"><path fill="currentColor" d="M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"></path></svg><svg viewBox="0 0 24 24" width="24" height="24" class="darkToggleIcon_wfgR"><path fill="currentColor" d="M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"></path></svg></button></div><div class="searchBox_ZlJk"></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div></nav><div id="docusaurus_skipToContent_fallback" class="main-wrapper mainWrapper_z2l0 docsWrapper_BCFX"><button aria-label="Scroll back to top" class="clean-btn theme-back-to-top-button backToTopButton_sjWU" type="button"></button><div class="docPage__5DB"><main class="docMainContainer_gTbr docMainContainerEnhanced_Uz_u"><div class="container padding-top--md padding-bottom--lg"><div class="row"><div class="col docItemCol_VOVn"><div class="docItemContainer_Djhp"><article><span class="theme-doc-version-badge badge badge--secondary">Version: 4.11.1</span><div class="theme-doc-markdown markdown"><header><h1>BookKeeper metrics reference</h1></header></div></article><nav class="pagination-nav docusaurus-mt-lg" aria-label="Docs pages navigation"></nav></div></div></div></div></main></div></div><footer class="footer footer--dark"><div class="container container-fluid"><div class="row footer__links"><div class="col footer__col"><div class="footer__title">Documentation</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/docs/overview">Overview</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/getting-started/installation">Getting started</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/deployment/manual">Deployment</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/admin/bookies">Administration</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/api/overview">API</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/security/overview">Security</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/development/protocol">Development</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/reference/config">Reference</a></li></ul></div><div class="col footer__col"><div class="footer__title">Community</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/community/mailing-lists">Mailing lists</a></li><li class="footer__item"><a class="footer__link-item" href="/community/slack">Slack</a></li><li class="footer__item"><a href="https://github.com/apache/bookkeeper" target="_blank" rel="noopener noreferrer" class="footer__link-item">Github<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a href="https://twitter.com/asfbookkeeper" target="_blank" rel="noopener noreferrer" class="footer__link-item">Twitter<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div><div class="col footer__col"><div class="footer__title">Project</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/project/who">Who are we?</a></li><li class="footer__item"><a class="footer__link-item" href="/project/bylaws">Bylaws</a></li><li class="footer__item"><a href="https://apache.org/licenses" target="_blank" rel="noopener noreferrer" class="footer__link-item">License<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a class="footer__link-item" href="/project/privacy">Privacy policy</a></li><li class="footer__item"><a href="https://www.apache.org/foundation/sponsorship.html" target="_blank" rel="noopener noreferrer" class="footer__link-item">Sponsorship<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a href="https://www.apache.org/foundation/thanks.html" target="_blank" rel="noopener noreferrer" class="footer__link-item">Thanks<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div></div><div class="footer__bottom text--center"><div class="footer__copyright"><footer class="footer">
         <div class="container">
           <div class="content has-text-centered">
             <p>
@@ -22,7 +22,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/4.11.1/security/overview/index.html b/content/docs/4.11.1/security/overview/index.html
index f9f369e..c88598a 100644
--- a/content/docs/4.11.1/security/overview/index.html
+++ b/content/docs/4.11.1/security/overview/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">BookKeeper Security | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/4.11.1/security/overview"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.11.1"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.11.1"><meta data-rh="true" name="docsearch:version" content="4.11.1"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.11.1"><meta data-rh="true" property="og:title" content="BookKeeper Security | Apache BookKeeper"><meta data-rh="true" name="description" content="In the 4.5.0 release, the BookKeeper community added a number of features that can be used, together or separately, to secure a BookKeeper cluster."><meta data-rh="true" property="og:description" content="In the 4.5.0 release, the BookKeeper community added a number of features that can be used, together or separately, to secure a BookKeeper cluster."><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/4.11.1/security/overview"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.11.1/security/overview" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.11.1/security/overview" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -23,7 +23,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/4.11.1/security/sasl/index.html b/content/docs/4.11.1/security/sasl/index.html
index 53ac17f..c64cd1e 100644
--- a/content/docs/4.11.1/security/sasl/index.html
+++ b/content/docs/4.11.1/security/sasl/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">Authentication using SASL | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/4.11.1/security/sasl"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.11.1"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.11.1"><meta data-rh="true" name="docsearch:version" content="4.11.1"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.11.1"><meta data-rh="true" property="og:title" content="Authentication using SASL | Apache BookKeeper"><meta data-rh="true" name="description" content="Bookies support client authentication via SASL. Currently we only support GSSAPI (Kerberos). We will start"><meta data-rh="true" property="og:description" content="Bookies support client authentication via SASL. Currently we only support GSSAPI (Kerberos). We will start"><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/4.11.1/security/sasl"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.11.1/security/sasl" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.11.1/security/sasl" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -45,7 +45,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/4.11.1/security/tls/index.html b/content/docs/4.11.1/security/tls/index.html
index e0da1bc..132696b 100644
--- a/content/docs/4.11.1/security/tls/index.html
+++ b/content/docs/4.11.1/security/tls/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">Encryption and Authentication using TLS | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/4.11.1/security/tls"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.11.1"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.11.1"><meta data-rh="true" name="docsearch:version" content="4.11.1"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.11.1"><meta data-rh="true" property="og:title" content="Encryption and Authentication using TLS | Apache BookKeeper"><meta data-rh="true" name="description" content="Apache BookKeeper allows clients and autorecovery daemons to communicate over TLS, although this is not enabled by default."><meta data-rh="true" property="og:description" content="Apache BookKeeper allows clients and autorecovery daemons to communicate over TLS, although this is not enabled by default."><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/4.11.1/security/tls"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.11.1/security/tls" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.11.1/security/tls" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -53,7 +53,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/4.11.1/security/zookeeper/index.html b/content/docs/4.11.1/security/zookeeper/index.html
index f793979..6a5a9f3 100644
--- a/content/docs/4.11.1/security/zookeeper/index.html
+++ b/content/docs/4.11.1/security/zookeeper/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">ZooKeeper Authentication | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/4.11.1/security/zookeeper"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.11.1"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.11.1"><meta data-rh="true" name="docsearch:version" content="4.11.1"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.11.1"><meta data-rh="true" property="og:title" content="ZooKeeper Authentication | Apache BookKeeper"><meta data-rh="true" name="description" content="New Clusters"><meta data-rh="true" property="og:description" content="New Clusters"><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/4.11.1/security/zookeeper"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.11.1/security/zookeeper" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.11.1/security/zookeeper" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -29,7 +29,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/4.12.1/admin/autorecovery/index.html b/content/docs/4.12.1/admin/autorecovery/index.html
index 3b45d3e..ba3b173 100644
--- a/content/docs/4.12.1/admin/autorecovery/index.html
+++ b/content/docs/4.12.1/admin/autorecovery/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">Using AutoRecovery | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/4.12.1/admin/autorecovery"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.12.1"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.12.1"><meta data-rh="true" name="docsearch:version" content="4.12.1"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.12.1"><meta data-rh="true" property="og:title" content="Using AutoRecovery | Apache BookKeeper"><meta data-rh="true" name="description" content="When a bookie crashes, all ledgers on that bookie become under-replicated. In order to bring all ledgers in your BookKeeper cluster back to full replication, you&#x27;ll need to recover the data from any offline bookies. There are two ways to recover bookies&#x27; data:"><meta data-rh="true" property="og:description" content="When a bookie crashes, all ledgers on that bookie become under-replicated. In order to bring all ledgers in your BookKeeper cluster back to full replication, you&#x27;ll need to recover the data from any offline bookies. There are two ways to recover bookies&#x27; data:"><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/4.12.1/admin/autorecovery"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.12.1/admin/autorecovery" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.12.1/admin/autorecovery" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -23,7 +23,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/4.12.1/admin/bookies/index.html b/content/docs/4.12.1/admin/bookies/index.html
index 19a655a..4f8a9a4 100644
--- a/content/docs/4.12.1/admin/bookies/index.html
+++ b/content/docs/4.12.1/admin/bookies/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">BookKeeper administration | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/4.12.1/admin/bookies"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.12.1"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.12.1"><meta data-rh="true" name="docsearch:version" content="4.12.1"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.12.1"><meta data-rh="true" property="og:title" content="BookKeeper administration | Apache BookKeeper"><meta data-rh="true" name="description" content="This document is a guide to deploying, administering, and maintaining BookKeeper. It also discusses best practices and common problems."><meta data-rh="true" property="og:description" content="This document is a guide to deploying, administering, and maintaining BookKeeper. It also discusses best practices and common problems."><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/4.12.1/admin/bookies"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.12.1/admin/bookies" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.12.1/admin/bookies" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -22,7 +22,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/4.12.1/admin/decomission/index.html b/content/docs/4.12.1/admin/decomission/index.html
index 6bcf46a..8defffa 100644
--- a/content/docs/4.12.1/admin/decomission/index.html
+++ b/content/docs/4.12.1/admin/decomission/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">Decommission Bookies | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/4.12.1/admin/decomission"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.12.1"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.12.1"><meta data-rh="true" name="docsearch:version" content="4.12.1"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.12.1"><meta data-rh="true" property="og:title" content="Decommission Bookies | Apache BookKeeper"><meta data-rh="true" name="description" content="In case the user wants to decommission a bookie, the following process is useful to follow in order to verify if the"><meta data-rh="true" property="og:description" content="In case the user wants to decommission a bookie, the following process is useful to follow in order to verify if the"><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/4.12.1/admin/decomission"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.12.1/admin/decomission" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.12.1/admin/decomission" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -33,7 +33,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/4.12.1/admin/geo-replication/index.html b/content/docs/4.12.1/admin/geo-replication/index.html
index 0e2c0a2..663e8eb 100644
--- a/content/docs/4.12.1/admin/geo-replication/index.html
+++ b/content/docs/4.12.1/admin/geo-replication/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">Geo-replication | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/4.12.1/admin/geo-replication"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.12.1"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.12.1"><meta data-rh="true" name="docsearch:version" content="4.12.1"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.12.1"><meta data-rh="true" property="og:title" content="Geo-replication | Apache BookKeeper"><meta data-rh="true" name="description" content="Geo-replication is the replication of data across BookKeeper clusters. In order to enable geo-replication for a group of BookKeeper clusters,"><meta data-rh="true" property="og:description" content="Geo-replication is the replication of data across BookKeeper clusters. In order to enable geo-replication for a group of BookKeeper clusters,"><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/4.12.1/admin/geo-replication"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.12.1/admin/geo-replication" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.12.1/admin/geo-replication" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -22,7 +22,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/4.12.1/admin/http/index.html b/content/docs/4.12.1/admin/http/index.html
index c4d3bb1..dd99b15 100644
--- a/content/docs/4.12.1/admin/http/index.html
+++ b/content/docs/4.12.1/admin/http/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">BookKeeper Admin REST API | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/4.12.1/admin/http"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.12.1"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.12.1"><meta data-rh="true" name="docsearch:version" content="4.12.1"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.12.1"><meta data-rh="true" property="og:title" content="BookKeeper Admin REST API | Apache BookKeeper"><meta data-rh="true" name="description" content="This document introduces BookKeeper HTTP endpoints, which can be used for BookKeeper administration."><meta data-rh="true" property="og:description" content="This document introduces BookKeeper HTTP endpoints, which can be used for BookKeeper administration."><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/4.12.1/admin/http"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.12.1/admin/http" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.12.1/admin/http" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -23,7 +23,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/4.12.1/admin/metrics/index.html b/content/docs/4.12.1/admin/metrics/index.html
index 9a96a0c..75121e0 100644
--- a/content/docs/4.12.1/admin/metrics/index.html
+++ b/content/docs/4.12.1/admin/metrics/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">Metric collection | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/4.12.1/admin/metrics"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.12.1"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.12.1"><meta data-rh="true" name="docsearch:version" content="4.12.1"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.12.1"><meta data-rh="true" property="og:title" content="Metric collection | Apache BookKeeper"><meta data-rh="true" name="description" content="BookKeeper enables metrics collection through a variety of stats providers."><meta data-rh="true" property="og:description" content="BookKeeper enables metrics collection through a variety of stats providers."><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/4.12.1/admin/metrics"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.12.1/admin/metrics" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.12.1/admin/metrics" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -22,7 +22,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/4.12.1/admin/perf/index.html b/content/docs/4.12.1/admin/perf/index.html
index 49e03a4..53c2b4a 100644
--- a/content/docs/4.12.1/admin/perf/index.html
+++ b/content/docs/4.12.1/admin/perf/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">Performance tuning | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/4.12.1/admin/perf"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.12.1"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.12.1"><meta data-rh="true" name="docsearch:version" content="4.12.1"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.12.1"><meta data-rh="true" property="og:title" content="Performance tuning | Apache BookKeeper"><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/4.12.1/admin/perf"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.12.1/admin/perf" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.12.1/admin/perf" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -22,7 +22,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/4.12.1/admin/placement/index.html b/content/docs/4.12.1/admin/placement/index.html
index 5853b68..7df129d 100644
--- a/content/docs/4.12.1/admin/placement/index.html
+++ b/content/docs/4.12.1/admin/placement/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">Customized placement policies | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/4.12.1/admin/placement"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.12.1"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.12.1"><meta data-rh="true" name="docsearch:version" content="4.12.1"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.12.1"><meta data-rh="true" property="og:title" content="Customized placement policies | Apache BookKeeper"><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/4.12.1/admin/placement"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.12.1/admin/placement" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.12.1/admin/placement" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -22,7 +22,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/4.12.1/admin/upgrade/index.html b/content/docs/4.12.1/admin/upgrade/index.html
index b963c1e..8056704 100644
--- a/content/docs/4.12.1/admin/upgrade/index.html
+++ b/content/docs/4.12.1/admin/upgrade/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">Upgrade | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/4.12.1/admin/upgrade"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.12.1"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.12.1"><meta data-rh="true" name="docsearch:version" content="4.12.1"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.12.1"><meta data-rh="true" property="og:title" content="Upgrade | Apache BookKeeper"><meta data-rh="true" name="description" content="If you have questions about upgrades (or need help), please feel free to reach out to us by mailing list or Slack Channel."><meta data-rh="true" property="og:description" content="If you have questions about upgrades (or need help), please feel free to reach out to us by mailing list or Slack Channel."><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/4.12.1/admin/upgrade"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.12.1/admin/upgrade" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.12.1/admin/upgrade" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -29,7 +29,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/4.12.1/api/distributedlog-api/index.html b/content/docs/4.12.1/api/distributedlog-api/index.html
index f6f1906..2e95987 100644
--- a/content/docs/4.12.1/api/distributedlog-api/index.html
+++ b/content/docs/4.12.1/api/distributedlog-api/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">DistributedLog | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/4.12.1/api/distributedlog-api"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.12.1"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.12.1"><meta data-rh="true" name="docsearch:version" content="4.12.1"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.12.1"><meta data-rh="true" property="og:title" content="DistributedLog | Apache BookKeeper"><meta data-rh="true" name="description" content="DistributedLog began its life as a separate project under the Apache Foundation. It was merged into BookKeeper in 2017."><meta data-rh="true" property="og:description" content="DistributedLog began its life as a separate project under the Apache Foundation. It was merged into BookKeeper in 2017."><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/4.12.1/api/distributedlog-api"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.12.1/api/distributedlog-api" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.12.1/api/distributedlog-api" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -22,7 +22,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/4.12.1/api/ledger-adv-api/index.html b/content/docs/4.12.1/api/ledger-adv-api/index.html
index 94ba60a..d65272c 100644
--- a/content/docs/4.12.1/api/ledger-adv-api/index.html
+++ b/content/docs/4.12.1/api/ledger-adv-api/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">The Advanced Ledger API | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/4.12.1/api/ledger-adv-api"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.12.1"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.12.1"><meta data-rh="true" name="docsearch:version" content="4.12.1"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.12.1"><meta data-rh="true" property="og:title" content="The Advanced Ledger API | Apache BookKeeper"><meta data-rh="true" name="description" content="In release 4.5.0, Apache BookKeeper introduces a few advanced API for advanced usage."><meta data-rh="true" property="og:description" content="In release 4.5.0, Apache BookKeeper introduces a few advanced API for advanced usage."><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/4.12.1/api/ledger-adv-api"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.12.1/api/ledger-adv-api" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.12.1/api/ledger-adv-api" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -27,7 +27,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/4.12.1/api/ledger-api/index.html b/content/docs/4.12.1/api/ledger-api/index.html
index 7a3fdf0..c5c1d54 100644
--- a/content/docs/4.12.1/api/ledger-api/index.html
+++ b/content/docs/4.12.1/api/ledger-api/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">The Ledger API | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/4.12.1/api/ledger-api"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.12.1"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.12.1"><meta data-rh="true" name="docsearch:version" content="4.12.1"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.12.1"><meta data-rh="true" property="og:title" content="The Ledger API | Apache BookKeeper"><meta data-rh="true" name="description" content="The ledger API is a lower-level API for BookKeeper that enables you to interact with ledgers directly."><meta data-rh="true" property="og:description" content="The ledger API is a lower-level API for BookKeeper that enables you to interact with ledgers directly."><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/4.12.1/api/ledger-api"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.12.1/api/ledger-api" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.12.1/api/ledger-api" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -46,7 +46,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/4.12.1/api/overview/index.html b/content/docs/4.12.1/api/overview/index.html
index b5f7f89..1a808ca 100644
--- a/content/docs/4.12.1/api/overview/index.html
+++ b/content/docs/4.12.1/api/overview/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">BookKeeper API | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/4.12.1/api/overview"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.12.1"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.12.1"><meta data-rh="true" name="docsearch:version" content="4.12.1"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.12.1"><meta data-rh="true" property="og:title" content="BookKeeper API | Apache BookKeeper"><meta data-rh="true" name="description" content="BookKeeper offers a few APIs that applications can use to interact with it:"><meta data-rh="true" property="og:description" content="BookKeeper offers a few APIs that applications can use to interact with it:"><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/4.12.1/api/overview"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.12.1/api/overview" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.12.1/api/overview" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -24,7 +24,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/4.12.1/deployment/kubernetes/index.html b/content/docs/4.12.1/deployment/kubernetes/index.html
index ba1374b..a262470 100644
--- a/content/docs/4.12.1/deployment/kubernetes/index.html
+++ b/content/docs/4.12.1/deployment/kubernetes/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">Deploying Apache BookKeeper on Kubernetes | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/4.12.1/deployment/kubernetes"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.12.1"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.12.1"><meta data-rh="true" name="docsearch:version" content="4.12.1"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.12.1"><meta data-rh="true" property="og:title" content="Deploying Apache BookKeeper on Kubernetes | Apache BookKeeper"><meta data-rh="true" name="description" content="Apache BookKeeper can be easily deployed in Kubernetes clusters. The managed clusters on Google Container Engine is the most convenient way."><meta data-rh="true" property="og:description" content="Apache BookKeeper can be easily deployed in Kubernetes clusters. The managed clusters on Google Container Engine is the most convenient way."><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/4.12.1/deployment/kubernetes"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.12.1/deployment/kubernetes" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.12.1/deployment/kubernetes" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -29,7 +29,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/4.12.1/deployment/manual/index.html b/content/docs/4.12.1/deployment/manual/index.html
index 574844c..377269c 100644
--- a/content/docs/4.12.1/deployment/manual/index.html
+++ b/content/docs/4.12.1/deployment/manual/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">Manual deployment | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/4.12.1/deployment/manual"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.12.1"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.12.1"><meta data-rh="true" name="docsearch:version" content="4.12.1"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.12.1"><meta data-rh="true" property="og:title" content="Manual deployment | Apache BookKeeper"><meta data-rh="true" name="description" content="A BookKeeper cluster consists of two main components:"><meta data-rh="true" property="og:description" content="A BookKeeper cluster consists of two main components:"><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/4.12.1/deployment/manual"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.12.1/deployment/manual" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.12.1/deployment/manual" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -22,7 +22,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/4.12.1/development/codebase/index.html b/content/docs/4.12.1/development/codebase/index.html
index 844b02c..8387dc1 100644
--- a/content/docs/4.12.1/development/codebase/index.html
+++ b/content/docs/4.12.1/development/codebase/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">The BookKeeper codebase | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/4.12.1/development/codebase"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.12.1"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.12.1"><meta data-rh="true" name="docsearch:version" content="4.12.1"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.12.1"><meta data-rh="true" property="og:title" content="The BookKeeper codebase | Apache BookKeeper"><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/4.12.1/development/codebase"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.12.1/development/codebase" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.12.1/development/codebase" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -22,7 +22,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/4.12.1/development/protocol/index.html b/content/docs/4.12.1/development/protocol/index.html
index ef4ea26..aeb6216 100644
--- a/content/docs/4.12.1/development/protocol/index.html
+++ b/content/docs/4.12.1/development/protocol/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">The BookKeeper protocol | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/4.12.1/development/protocol"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.12.1"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.12.1"><meta data-rh="true" name="docsearch:version" content="4.12.1"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.12.1"><meta data-rh="true" property="og:title" content="The BookKeeper protocol | Apache BookKeeper"><meta data-rh="true" name="description" content="BookKeeper uses a special replication protocol for guaranteeing persistent storage of entries in an ensemble of bookies."><meta data-rh="true" property="og:description" content="BookKeeper uses a special replication protocol for guaranteeing persistent storage of entries in an ensemble of bookies."><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/4.12.1/development/protocol"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.12.1/development/protocol" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.12.1/development/protocol" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -22,7 +22,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/4.12.1/getting-started/concepts/index.html b/content/docs/4.12.1/getting-started/concepts/index.html
index 7bfb31e..1ba6526 100644
--- a/content/docs/4.12.1/getting-started/concepts/index.html
+++ b/content/docs/4.12.1/getting-started/concepts/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">BookKeeper concepts and architecture | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/4.12.1/getting-started/concepts"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.12.1"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.12.1"><meta data-rh="true" name="docsearch:version" content="4.12.1"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.12.1"><meta data-rh="true" property="og:title" content="BookKeeper concepts and architecture | Apache BookKeeper"><meta data-rh="true" name="description" content="BookKeeper is a service that provides persistent storage of streams of log entries---aka records---in sequences called ledgers. BookKeeper replicates stored entries across multiple servers."><meta data-rh="true" property="og:description" content="BookKeeper is a service that provides persistent storage of streams of log entries---aka records---in sequences called ledgers. BookKeeper replicates stored entries across multiple servers."><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/4.12.1/getting-started/concepts"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.12.1/getting-started/concepts" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.12.1/getting-started/concepts" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -22,7 +22,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/4.12.1/getting-started/installation/index.html b/content/docs/4.12.1/getting-started/installation/index.html
index 4b83912..a4a9d38 100644
--- a/content/docs/4.12.1/getting-started/installation/index.html
+++ b/content/docs/4.12.1/getting-started/installation/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">BookKeeper installation | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/4.12.1/getting-started/installation"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.12.1"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.12.1"><meta data-rh="true" name="docsearch:version" content="4.12.1"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.12.1"><meta data-rh="true" property="og:title" content="BookKeeper installation | Apache BookKeeper"><meta data-rh="true" name="description" content="You can install BookKeeper either by downloading a GZipped tarball package or cloning the BookKeeper repository."><meta data-rh="true" property="og:description" content="You can install BookKeeper either by downloading a GZipped tarball package or cloning the BookKeeper repository."><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/4.12.1/getting-started/installation"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.12.1/getting-started/installation" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.12.1/getting-started/installation" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -22,7 +22,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/4.12.1/getting-started/run-locally/index.html b/content/docs/4.12.1/getting-started/run-locally/index.html
index acfd969..3679725 100644
--- a/content/docs/4.12.1/getting-started/run-locally/index.html
+++ b/content/docs/4.12.1/getting-started/run-locally/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">Run bookies locally | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/4.12.1/getting-started/run-locally"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.12.1"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.12.1"><meta data-rh="true" name="docsearch:version" content="4.12.1"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.12.1"><meta data-rh="true" property="og:title" content="Run bookies locally | Apache BookKeeper"><meta data-rh="true" name="description" content="Bookies are individual BookKeeper servers. You can run an ensemble of bookies locally on a single machine using the localbookie command of the bookkeeper CLI tool and specifying the number of bookies you&#x27;d like to include in the ensemble."><meta data-rh="true" property="og:description" content="Bookies are individual BookKeeper servers. You can run an ensemble of bookies locally on a single machine using the localbookie command of the bookkeeper CLI tool and specifying the number of bookies you&#x27;d like to include in the ensemble."><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/4.12.1/getting-started/run-locally"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.12.1/getting-started/run-locally" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.12.1/getting-started/run-locally" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -22,7 +22,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/4.12.1/overview/index.html b/content/docs/4.12.1/overview/index.html
index 4df5a35..3145130 100644
--- a/content/docs/4.12.1/overview/index.html
+++ b/content/docs/4.12.1/overview/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">Apache BookKeeper 4.12.1 | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/4.12.1/overview/"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.12.1"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.12.1"><meta data-rh="true" name="docsearch:version" content="4.12.1"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.12.1"><meta data-rh="true" property="og:title" content="Apache BookKeeper 4.12.1 | Apache BookKeeper"><meta data-rh="true" name="description" content="&lt;!--"><meta data-rh="true" property="og:description" content="&lt;!--"><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/4.12.1/overview/"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.12.1/overview/" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.12.1/overview/" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -24,7 +24,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/4.12.1/reference/cli/index.html b/content/docs/4.12.1/reference/cli/index.html
index e0c0ee5..1733963 100644
--- a/content/docs/4.12.1/reference/cli/index.html
+++ b/content/docs/4.12.1/reference/cli/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">BookKeeper CLI tool reference | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/4.12.1/reference/cli"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.12.1"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.12.1"><meta data-rh="true" name="docsearch:version" content="4.12.1"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.12.1"><meta data-rh="true" property="og:title" content="BookKeeper CLI tool reference | Apache BookKeeper"><meta data-rh="true" name="description" content="bookkeeper command"><meta data-rh="true" property="og:description" content="bookkeeper command"><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/4.12.1/reference/cli"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.12.1/reference/cli" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.12.1/reference/cli" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -29,7 +29,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/4.12.1/reference/config/index.html b/content/docs/4.12.1/reference/config/index.html
index 8d9fb2a..af18caf 100644
--- a/content/docs/4.12.1/reference/config/index.html
+++ b/content/docs/4.12.1/reference/config/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">BookKeeper configuration | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/4.12.1/reference/config"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.12.1"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.12.1"><meta data-rh="true" name="docsearch:version" content="4.12.1"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.12.1"><meta data-rh="true" property="og:title" content="BookKeeper configuration | Apache BookKeeper"><meta data-rh="true" name="description" content="The table below lists parameters that you can set to configure bookies. All configuration takes place in the bk_server.conf file in the bookkeeper-server/conf directory of your BookKeeper installation."><meta data-rh="true" property="og:description" content="The table below lists parameters that you can set to configure bookies. All configuration takes place in the bk_server.conf file in the bookkeeper-server/conf directory of your BookKeeper installation."><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/4.12.1/reference/config"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.12.1/reference/config" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.12.1/reference/config" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -22,7 +22,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/4.12.1/reference/metrics/index.html b/content/docs/4.12.1/reference/metrics/index.html
index acbffd5..96bcf64 100644
--- a/content/docs/4.12.1/reference/metrics/index.html
+++ b/content/docs/4.12.1/reference/metrics/index.html
@@ -4,12 +4,12 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">BookKeeper metrics reference | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/4.12.1/reference/metrics"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.12.1"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.12.1"><meta data-rh="true" name="docsearch:version" content="4.12.1"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.12.1"><meta data-rh="true" property="og:title" content="BookKeeper metrics reference | Apache BookKeeper"><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/4.12.1/reference/metrics"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.12.1/reference/metrics" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.12.1/reference/metrics" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
-<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navbar__brand" href="/"><div class="navbar__logo"><img src="/img/bk-logo.svg" alt="Apache Bookkeeper" class="themedImage_ToTc themedImage--light_HNdA"><img src="/img/bk-logo.svg" alt="Apache Bookkeeper" class="themedImage_ToTc themedImage--dark_i4oU"></div><b class="navbar__title text--truncate">Apache BookKeeper</b></a><a class="navbar__item navbar__link" href="/docs/4.12.1/overview/">Documentation</a><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Community</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/community/mailing-lists">Mailing lists</a></li><li><a class="dropdown__link" href="/community/slack">Slack</a></li><li><a href="https://github.com/apache/bookkeeper/issues" target="_blank" rel="noopener noreferrer" class="dropdown__link">Github issues<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a class="dropdown__link" href="/community/releases">Release management</a></li><li><a class="dropdown__link" href="/community/meeting">Community meetings</a></li><li><a class="dropdown__link" href="/community/contributing">Contribution guide</a></li><li><a class="dropdown__link" href="/community/coding-guide">Coding guide</a></li><li><a class="dropdown__link" href="/community/testing">Testing guide</a></li><li><a class="dropdown__link" href="/community/issue-report">Issue report guide</a></li><li><a class="dropdown__link" href="/community/release-guide">Release guide</a></li><li><a class="dropdown__link" href="/community/presentations">Presentations</a></li><li><a class="dropdown__link" href="/community/bookkeeper-proposals">BookKeeper proposals (BP)</a></li></ul></div><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Project</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/project/who">Who are we?</a></li><li><a class="dropdown__link" href="/project/bylaws">Bylaws</a></li><li><a href="https://apache.org/licenses" target="_blank" rel="noopener noreferrer" class="dropdown__link">License<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a class="dropdown__link" href="/project/privacy">Privacy policy</a></li><li><a href="https://www.apache.org/foundation/sponsorship.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Sponsorship<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a href="https://www.apache.org/foundation/thanks.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Thanks<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div></div><div class="navbar__items navbar__items--right"><div class="navbar__item dropdown dropdown--hoverable dropdown--right"><a class="navbar__link" aria-haspopup="true" aria-expanded="false" role="button" href="/docs/4.12.1/overview/">4.12.1</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/docs/next/overview/">Next</a></li><li><a class="dropdown__link" href="/docs/admin/autorecovery">4.17.0</a></li><li><a class="dropdown__link" href="/docs/4.16.5/overview/">4.16.5</a></li><li><a class="dropdown__link" href="/docs/4.15.5/overview/">4.15.5</a></li><li><a class="dropdown__link" href="/docs/4.14.8/reference/metrics">4.14.8</a></li><li><a class="dropdown__link" href="/docs/4.13.0/reference/metrics">4.13.0</a></li><li><a aria-current="page" class="dropdown__link dropdown__link--active" href="/docs/4.12.1/reference/metrics">4.12.1</a></li><li><a class="dropdown__link" href="/docs/4.11.1/reference/metrics">4.11.1</a></li><li><a class="dropdown__link" href="/docs/4.10.0/reference/metrics">4.10.0</a></li><li><a class="dropdown__link" href="/docs/4.9.2/reference/metrics">4.9.2</a></li><li><a class="dropdown__link" href="/docs/4.8.2/reference/metrics">4.8.2</a></li><li><a class="dropdown__link" href="/docs/4.7.3/reference/metrics">4.7.3</a></li><li><a class="dropdown__link" href="/docs/4.6.2/reference/metrics">4.6.2</a></li><li><a class="dropdown__link" href="/docs/4.5.1/reference/metrics">4.5.1</a></li></ul></div><a class="navbar__item navbar__link" href="/releases">Download</a><div class="toggle_vylO colorModeToggle_DEke"><button class="clean-btn toggleButton_gllP toggleButtonDisabled_aARS" type="button" disabled="" title="Switch between dark and light mode (currently light mode)" aria-label="Switch between dark and light mode (currently light mode)" aria-live="polite"><svg viewBox="0 0 24 24" width="24" height="24" class="lightToggleIcon_pyhR"><path fill="currentColor" d="M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"></path></svg><svg viewBox="0 0 24 24" width="24" height="24" class="darkToggleIcon_wfgR"><path fill="currentColor" d="M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"></path></svg></button></div><div class="searchBox_ZlJk"></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div></nav><div id="docusaurus_skipToContent_fallback" class="main-wrapper mainWrapper_z2l0 docsWrapper_BCFX"><button aria-label="Scroll back to top" class="clean-btn theme-back-to-top-button backToTopButton_sjWU" type="button"></button><div class="docPage__5DB"><main class="docMainContainer_gTbr docMainContainerEnhanced_Uz_u"><div class="container padding-top--md padding-bottom--lg"><div class="row"><div class="col docItemCol_VOVn"><div class="docItemContainer_Djhp"><article><span class="theme-doc-version-badge badge badge--secondary">Version: 4.12.1</span><div class="theme-doc-markdown markdown"><header><h1>BookKeeper metrics reference</h1></header></div></article><nav class="pagination-nav docusaurus-mt-lg" aria-label="Docs pages navigation"></nav></div></div></div></div></main></div></div><footer class="footer footer--dark"><div class="container container-fluid"><div class="row footer__links"><div class="col footer__col"><div class="footer__title">Documentation</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/docs/overview">Overview</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/getting-started/installation">Getting started</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/deployment/manual">Deployment</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/admin/bookies">Administration</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/api/overview">API</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/security/overview">Security</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/development/protocol">Development</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/reference/config">Reference</a></li></ul></div><div class="col footer__col"><div class="footer__title">Community</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/community/mailing-lists">Mailing lists</a></li><li class="footer__item"><a class="footer__link-item" href="/community/slack">Slack</a></li><li class="footer__item"><a href="https://github.com/apache/bookkeeper" target="_blank" rel="noopener noreferrer" class="footer__link-item">Github<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a href="https://twitter.com/asfbookkeeper" target="_blank" rel="noopener noreferrer" class="footer__link-item">Twitter<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div><div class="col footer__col"><div class="footer__title">Project</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/project/who">Who are we?</a></li><li class="footer__item"><a class="footer__link-item" href="/project/bylaws">Bylaws</a></li><li class="footer__item"><a href="https://apache.org/licenses" target="_blank" rel="noopener noreferrer" class="footer__link-item">License<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a class="footer__link-item" href="/project/privacy">Privacy policy</a></li><li class="footer__item"><a href="https://www.apache.org/foundation/sponsorship.html" target="_blank" rel="noopener noreferrer" class="footer__link-item">Sponsorship<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a href="https://www.apache.org/foundation/thanks.html" target="_blank" rel="noopener noreferrer" class="footer__link-item">Thanks<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div></div><div class="footer__bottom text--center"><div class="footer__copyright"><footer class="footer">
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navbar__brand" href="/"><div class="navbar__logo"><img src="/img/bk-logo.svg" alt="Apache Bookkeeper" class="themedImage_ToTc themedImage--light_HNdA"><img src="/img/bk-logo.svg" alt="Apache Bookkeeper" class="themedImage_ToTc themedImage--dark_i4oU"></div><b class="navbar__title text--truncate">Apache BookKeeper</b></a><a class="navbar__item navbar__link" href="/docs/4.12.1/overview/">Documentation</a><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Community</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/community/mailing-lists">Mailing lists</a></li><li><a class="dropdown__link" href="/community/slack">Slack</a></li><li><a href="https://github.com/apache/bookkeeper/issues" target="_blank" rel="noopener noreferrer" class="dropdown__link">Github issues<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a class="dropdown__link" href="/community/releases">Release management</a></li><li><a class="dropdown__link" href="/community/meeting">Community meetings</a></li><li><a class="dropdown__link" href="/community/contributing">Contribution guide</a></li><li><a class="dropdown__link" href="/community/coding-guide">Coding guide</a></li><li><a class="dropdown__link" href="/community/testing">Testing guide</a></li><li><a class="dropdown__link" href="/community/issue-report">Issue report guide</a></li><li><a class="dropdown__link" href="/community/release-guide">Release guide</a></li><li><a class="dropdown__link" href="/community/presentations">Presentations</a></li><li><a class="dropdown__link" href="/community/bookkeeper-proposals">BookKeeper proposals (BP)</a></li></ul></div><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Project</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/project/who">Who are we?</a></li><li><a class="dropdown__link" href="/project/bylaws">Bylaws</a></li><li><a href="https://apache.org/licenses" target="_blank" rel="noopener noreferrer" class="dropdown__link">License<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a class="dropdown__link" href="/project/privacy">Privacy policy</a></li><li><a href="https://www.apache.org/foundation/sponsorship.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Sponsorship<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a href="https://www.apache.org/foundation/thanks.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Thanks<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div></div><div class="navbar__items navbar__items--right"><div class="navbar__item dropdown dropdown--hoverable dropdown--right"><a class="navbar__link" aria-haspopup="true" aria-expanded="false" role="button" href="/docs/4.12.1/overview/">4.12.1</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/docs/next/overview/">Next</a></li><li><a class="dropdown__link" href="/docs/overview/">4.17.0</a></li><li><a class="dropdown__link" href="/docs/4.16.5/overview/">4.16.5</a></li><li><a class="dropdown__link" href="/docs/4.15.5/overview/">4.15.5</a></li><li><a class="dropdown__link" href="/docs/4.14.8/reference/metrics">4.14.8</a></li><li><a class="dropdown__link" href="/docs/4.13.0/reference/metrics">4.13.0</a></li><li><a aria-current="page" class="dropdown__link dropdown__link--active" href="/docs/4.12.1/reference/metrics">4.12.1</a></li><li><a class="dropdown__link" href="/docs/4.11.1/reference/metrics">4.11.1</a></li><li><a class="dropdown__link" href="/docs/4.10.0/reference/metrics">4.10.0</a></li><li><a class="dropdown__link" href="/docs/4.9.2/reference/metrics">4.9.2</a></li><li><a class="dropdown__link" href="/docs/4.8.2/reference/metrics">4.8.2</a></li><li><a class="dropdown__link" href="/docs/4.7.3/reference/metrics">4.7.3</a></li><li><a class="dropdown__link" href="/docs/4.6.2/reference/metrics">4.6.2</a></li><li><a class="dropdown__link" href="/docs/4.5.1/reference/metrics">4.5.1</a></li></ul></div><a class="navbar__item navbar__link" href="/releases">Download</a><div class="toggle_vylO colorModeToggle_DEke"><button class="clean-btn toggleButton_gllP toggleButtonDisabled_aARS" type="button" disabled="" title="Switch between dark and light mode (currently light mode)" aria-label="Switch between dark and light mode (currently light mode)" aria-live="polite"><svg viewBox="0 0 24 24" width="24" height="24" class="lightToggleIcon_pyhR"><path fill="currentColor" d="M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"></path></svg><svg viewBox="0 0 24 24" width="24" height="24" class="darkToggleIcon_wfgR"><path fill="currentColor" d="M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"></path></svg></button></div><div class="searchBox_ZlJk"></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div></nav><div id="docusaurus_skipToContent_fallback" class="main-wrapper mainWrapper_z2l0 docsWrapper_BCFX"><button aria-label="Scroll back to top" class="clean-btn theme-back-to-top-button backToTopButton_sjWU" type="button"></button><div class="docPage__5DB"><main class="docMainContainer_gTbr docMainContainerEnhanced_Uz_u"><div class="container padding-top--md padding-bottom--lg"><div class="row"><div class="col docItemCol_VOVn"><div class="docItemContainer_Djhp"><article><span class="theme-doc-version-badge badge badge--secondary">Version: 4.12.1</span><div class="theme-doc-markdown markdown"><header><h1>BookKeeper metrics reference</h1></header></div></article><nav class="pagination-nav docusaurus-mt-lg" aria-label="Docs pages navigation"></nav></div></div></div></div></main></div></div><footer class="footer footer--dark"><div class="container container-fluid"><div class="row footer__links"><div class="col footer__col"><div class="footer__title">Documentation</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/docs/overview">Overview</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/getting-started/installation">Getting started</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/deployment/manual">Deployment</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/admin/bookies">Administration</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/api/overview">API</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/security/overview">Security</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/development/protocol">Development</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/reference/config">Reference</a></li></ul></div><div class="col footer__col"><div class="footer__title">Community</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/community/mailing-lists">Mailing lists</a></li><li class="footer__item"><a class="footer__link-item" href="/community/slack">Slack</a></li><li class="footer__item"><a href="https://github.com/apache/bookkeeper" target="_blank" rel="noopener noreferrer" class="footer__link-item">Github<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a href="https://twitter.com/asfbookkeeper" target="_blank" rel="noopener noreferrer" class="footer__link-item">Twitter<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div><div class="col footer__col"><div class="footer__title">Project</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/project/who">Who are we?</a></li><li class="footer__item"><a class="footer__link-item" href="/project/bylaws">Bylaws</a></li><li class="footer__item"><a href="https://apache.org/licenses" target="_blank" rel="noopener noreferrer" class="footer__link-item">License<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a class="footer__link-item" href="/project/privacy">Privacy policy</a></li><li class="footer__item"><a href="https://www.apache.org/foundation/sponsorship.html" target="_blank" rel="noopener noreferrer" class="footer__link-item">Sponsorship<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a href="https://www.apache.org/foundation/thanks.html" target="_blank" rel="noopener noreferrer" class="footer__link-item">Thanks<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div></div><div class="footer__bottom text--center"><div class="footer__copyright"><footer class="footer">
         <div class="container">
           <div class="content has-text-centered">
             <p>
@@ -22,7 +22,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/4.12.1/security/overview/index.html b/content/docs/4.12.1/security/overview/index.html
index bc9155a..075a204 100644
--- a/content/docs/4.12.1/security/overview/index.html
+++ b/content/docs/4.12.1/security/overview/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">BookKeeper Security | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/4.12.1/security/overview"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.12.1"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.12.1"><meta data-rh="true" name="docsearch:version" content="4.12.1"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.12.1"><meta data-rh="true" property="og:title" content="BookKeeper Security | Apache BookKeeper"><meta data-rh="true" name="description" content="In the 4.5.0 release, the BookKeeper community added a number of features that can be used, together or separately, to secure a BookKeeper cluster."><meta data-rh="true" property="og:description" content="In the 4.5.0 release, the BookKeeper community added a number of features that can be used, together or separately, to secure a BookKeeper cluster."><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/4.12.1/security/overview"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.12.1/security/overview" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.12.1/security/overview" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -23,7 +23,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/4.12.1/security/sasl/index.html b/content/docs/4.12.1/security/sasl/index.html
index 11abc76..6ca1571 100644
--- a/content/docs/4.12.1/security/sasl/index.html
+++ b/content/docs/4.12.1/security/sasl/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">Authentication using SASL | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/4.12.1/security/sasl"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.12.1"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.12.1"><meta data-rh="true" name="docsearch:version" content="4.12.1"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.12.1"><meta data-rh="true" property="og:title" content="Authentication using SASL | Apache BookKeeper"><meta data-rh="true" name="description" content="Bookies support client authentication via SASL. Currently we only support GSSAPI (Kerberos). We will start"><meta data-rh="true" property="og:description" content="Bookies support client authentication via SASL. Currently we only support GSSAPI (Kerberos). We will start"><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/4.12.1/security/sasl"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.12.1/security/sasl" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.12.1/security/sasl" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -45,7 +45,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/4.12.1/security/tls/index.html b/content/docs/4.12.1/security/tls/index.html
index 7581e8d..5d206fe 100644
--- a/content/docs/4.12.1/security/tls/index.html
+++ b/content/docs/4.12.1/security/tls/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">Encryption and Authentication using TLS | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/4.12.1/security/tls"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.12.1"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.12.1"><meta data-rh="true" name="docsearch:version" content="4.12.1"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.12.1"><meta data-rh="true" property="og:title" content="Encryption and Authentication using TLS | Apache BookKeeper"><meta data-rh="true" name="description" content="Apache BookKeeper allows clients and autorecovery daemons to communicate over TLS, although this is not enabled by default."><meta data-rh="true" property="og:description" content="Apache BookKeeper allows clients and autorecovery daemons to communicate over TLS, although this is not enabled by default."><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/4.12.1/security/tls"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.12.1/security/tls" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.12.1/security/tls" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -53,7 +53,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/4.12.1/security/zookeeper/index.html b/content/docs/4.12.1/security/zookeeper/index.html
index b33d1f7..7e43465 100644
--- a/content/docs/4.12.1/security/zookeeper/index.html
+++ b/content/docs/4.12.1/security/zookeeper/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">ZooKeeper Authentication | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/4.12.1/security/zookeeper"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.12.1"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.12.1"><meta data-rh="true" name="docsearch:version" content="4.12.1"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.12.1"><meta data-rh="true" property="og:title" content="ZooKeeper Authentication | Apache BookKeeper"><meta data-rh="true" name="description" content="New Clusters"><meta data-rh="true" property="og:description" content="New Clusters"><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/4.12.1/security/zookeeper"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.12.1/security/zookeeper" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.12.1/security/zookeeper" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -29,7 +29,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/4.13.0/admin/autorecovery/index.html b/content/docs/4.13.0/admin/autorecovery/index.html
index c0c7531..31a1465 100644
--- a/content/docs/4.13.0/admin/autorecovery/index.html
+++ b/content/docs/4.13.0/admin/autorecovery/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">Using AutoRecovery | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/4.13.0/admin/autorecovery"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.13.0"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.13.0"><meta data-rh="true" name="docsearch:version" content="4.13.0"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.13.0"><meta data-rh="true" property="og:title" content="Using AutoRecovery | Apache BookKeeper"><meta data-rh="true" name="description" content="When a bookie crashes, all ledgers on that bookie become under-replicated. In order to bring all ledgers in your BookKeeper cluster back to full replication, you&#x27;ll need to recover the data from any offline bookies. There are two ways to recover bookies&#x27; data:"><meta data-rh="true" property="og:description" content="When a bookie crashes, all ledgers on that bookie become under-replicated. In order to bring all ledgers in your BookKeeper cluster back to full replication, you&#x27;ll need to recover the data from any offline bookies. There are two ways to recover bookies&#x27; data:"><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/4.13.0/admin/autorecovery"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.13.0/admin/autorecovery" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.13.0/admin/autorecovery" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -23,7 +23,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/4.13.0/admin/bookies/index.html b/content/docs/4.13.0/admin/bookies/index.html
index 555e788..07d072b 100644
--- a/content/docs/4.13.0/admin/bookies/index.html
+++ b/content/docs/4.13.0/admin/bookies/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">BookKeeper administration | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/4.13.0/admin/bookies"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.13.0"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.13.0"><meta data-rh="true" name="docsearch:version" content="4.13.0"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.13.0"><meta data-rh="true" property="og:title" content="BookKeeper administration | Apache BookKeeper"><meta data-rh="true" name="description" content="This document is a guide to deploying, administering, and maintaining BookKeeper. It also discusses best practices and common problems."><meta data-rh="true" property="og:description" content="This document is a guide to deploying, administering, and maintaining BookKeeper. It also discusses best practices and common problems."><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/4.13.0/admin/bookies"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.13.0/admin/bookies" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.13.0/admin/bookies" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -22,7 +22,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/4.13.0/admin/decomission/index.html b/content/docs/4.13.0/admin/decomission/index.html
index 1d4cd63..c7edbae 100644
--- a/content/docs/4.13.0/admin/decomission/index.html
+++ b/content/docs/4.13.0/admin/decomission/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">Decommission Bookies | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/4.13.0/admin/decomission"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.13.0"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.13.0"><meta data-rh="true" name="docsearch:version" content="4.13.0"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.13.0"><meta data-rh="true" property="og:title" content="Decommission Bookies | Apache BookKeeper"><meta data-rh="true" name="description" content="In case the user wants to decommission a bookie, the following process is useful to follow in order to verify if the"><meta data-rh="true" property="og:description" content="In case the user wants to decommission a bookie, the following process is useful to follow in order to verify if the"><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/4.13.0/admin/decomission"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.13.0/admin/decomission" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.13.0/admin/decomission" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -33,7 +33,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/4.13.0/admin/geo-replication/index.html b/content/docs/4.13.0/admin/geo-replication/index.html
index 23ebd83..a3edd98 100644
--- a/content/docs/4.13.0/admin/geo-replication/index.html
+++ b/content/docs/4.13.0/admin/geo-replication/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">Geo-replication | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/4.13.0/admin/geo-replication"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.13.0"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.13.0"><meta data-rh="true" name="docsearch:version" content="4.13.0"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.13.0"><meta data-rh="true" property="og:title" content="Geo-replication | Apache BookKeeper"><meta data-rh="true" name="description" content="Geo-replication is the replication of data across BookKeeper clusters. In order to enable geo-replication for a group of BookKeeper clusters,"><meta data-rh="true" property="og:description" content="Geo-replication is the replication of data across BookKeeper clusters. In order to enable geo-replication for a group of BookKeeper clusters,"><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/4.13.0/admin/geo-replication"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.13.0/admin/geo-replication" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.13.0/admin/geo-replication" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -22,7 +22,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/4.13.0/admin/http/index.html b/content/docs/4.13.0/admin/http/index.html
index b2213c5..db49c11 100644
--- a/content/docs/4.13.0/admin/http/index.html
+++ b/content/docs/4.13.0/admin/http/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">BookKeeper Admin REST API | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/4.13.0/admin/http"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.13.0"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.13.0"><meta data-rh="true" name="docsearch:version" content="4.13.0"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.13.0"><meta data-rh="true" property="og:title" content="BookKeeper Admin REST API | Apache BookKeeper"><meta data-rh="true" name="description" content="This document introduces BookKeeper HTTP endpoints, which can be used for BookKeeper administration."><meta data-rh="true" property="og:description" content="This document introduces BookKeeper HTTP endpoints, which can be used for BookKeeper administration."><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/4.13.0/admin/http"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.13.0/admin/http" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.13.0/admin/http" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -23,7 +23,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/4.13.0/admin/metrics/index.html b/content/docs/4.13.0/admin/metrics/index.html
index 461d6a9..abcebfc 100644
--- a/content/docs/4.13.0/admin/metrics/index.html
+++ b/content/docs/4.13.0/admin/metrics/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">Metric collection | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/4.13.0/admin/metrics"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.13.0"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.13.0"><meta data-rh="true" name="docsearch:version" content="4.13.0"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.13.0"><meta data-rh="true" property="og:title" content="Metric collection | Apache BookKeeper"><meta data-rh="true" name="description" content="BookKeeper enables metrics collection through a variety of stats providers."><meta data-rh="true" property="og:description" content="BookKeeper enables metrics collection through a variety of stats providers."><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/4.13.0/admin/metrics"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.13.0/admin/metrics" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.13.0/admin/metrics" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -22,7 +22,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/4.13.0/admin/perf/index.html b/content/docs/4.13.0/admin/perf/index.html
index cb7be9c..74600a5 100644
--- a/content/docs/4.13.0/admin/perf/index.html
+++ b/content/docs/4.13.0/admin/perf/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">Performance tuning | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/4.13.0/admin/perf"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.13.0"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.13.0"><meta data-rh="true" name="docsearch:version" content="4.13.0"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.13.0"><meta data-rh="true" property="og:title" content="Performance tuning | Apache BookKeeper"><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/4.13.0/admin/perf"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.13.0/admin/perf" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.13.0/admin/perf" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -22,7 +22,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/4.13.0/admin/placement/index.html b/content/docs/4.13.0/admin/placement/index.html
index 84ee0cf..1d161f3 100644
--- a/content/docs/4.13.0/admin/placement/index.html
+++ b/content/docs/4.13.0/admin/placement/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">Customized placement policies | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/4.13.0/admin/placement"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.13.0"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.13.0"><meta data-rh="true" name="docsearch:version" content="4.13.0"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.13.0"><meta data-rh="true" property="og:title" content="Customized placement policies | Apache BookKeeper"><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/4.13.0/admin/placement"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.13.0/admin/placement" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.13.0/admin/placement" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -22,7 +22,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/4.13.0/admin/upgrade/index.html b/content/docs/4.13.0/admin/upgrade/index.html
index ae9af97..6e46970 100644
--- a/content/docs/4.13.0/admin/upgrade/index.html
+++ b/content/docs/4.13.0/admin/upgrade/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">Upgrade | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/4.13.0/admin/upgrade"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.13.0"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.13.0"><meta data-rh="true" name="docsearch:version" content="4.13.0"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.13.0"><meta data-rh="true" property="og:title" content="Upgrade | Apache BookKeeper"><meta data-rh="true" name="description" content="If you have questions about upgrades (or need help), please feel free to reach out to us by mailing list or Slack Channel."><meta data-rh="true" property="og:description" content="If you have questions about upgrades (or need help), please feel free to reach out to us by mailing list or Slack Channel."><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/4.13.0/admin/upgrade"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.13.0/admin/upgrade" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.13.0/admin/upgrade" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -29,7 +29,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/4.13.0/api/distributedlog-api/index.html b/content/docs/4.13.0/api/distributedlog-api/index.html
index d842d24..4f55f80 100644
--- a/content/docs/4.13.0/api/distributedlog-api/index.html
+++ b/content/docs/4.13.0/api/distributedlog-api/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">DistributedLog | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/4.13.0/api/distributedlog-api"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.13.0"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.13.0"><meta data-rh="true" name="docsearch:version" content="4.13.0"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.13.0"><meta data-rh="true" property="og:title" content="DistributedLog | Apache BookKeeper"><meta data-rh="true" name="description" content="DistributedLog began its life as a separate project under the Apache Foundation. It was merged into BookKeeper in 2017."><meta data-rh="true" property="og:description" content="DistributedLog began its life as a separate project under the Apache Foundation. It was merged into BookKeeper in 2017."><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/4.13.0/api/distributedlog-api"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.13.0/api/distributedlog-api" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.13.0/api/distributedlog-api" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -22,7 +22,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/4.13.0/api/ledger-adv-api/index.html b/content/docs/4.13.0/api/ledger-adv-api/index.html
index 61c9930..e020f81 100644
--- a/content/docs/4.13.0/api/ledger-adv-api/index.html
+++ b/content/docs/4.13.0/api/ledger-adv-api/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">The Advanced Ledger API | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/4.13.0/api/ledger-adv-api"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.13.0"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.13.0"><meta data-rh="true" name="docsearch:version" content="4.13.0"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.13.0"><meta data-rh="true" property="og:title" content="The Advanced Ledger API | Apache BookKeeper"><meta data-rh="true" name="description" content="In release 4.5.0, Apache BookKeeper introduces a few advanced API for advanced usage."><meta data-rh="true" property="og:description" content="In release 4.5.0, Apache BookKeeper introduces a few advanced API for advanced usage."><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/4.13.0/api/ledger-adv-api"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.13.0/api/ledger-adv-api" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.13.0/api/ledger-adv-api" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -27,7 +27,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/4.13.0/api/ledger-api/index.html b/content/docs/4.13.0/api/ledger-api/index.html
index ff530ab..0ce4886 100644
--- a/content/docs/4.13.0/api/ledger-api/index.html
+++ b/content/docs/4.13.0/api/ledger-api/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">The Ledger API | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/4.13.0/api/ledger-api"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.13.0"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.13.0"><meta data-rh="true" name="docsearch:version" content="4.13.0"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.13.0"><meta data-rh="true" property="og:title" content="The Ledger API | Apache BookKeeper"><meta data-rh="true" name="description" content="The ledger API is a lower-level API for BookKeeper that enables you to interact with ledgers directly."><meta data-rh="true" property="og:description" content="The ledger API is a lower-level API for BookKeeper that enables you to interact with ledgers directly."><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/4.13.0/api/ledger-api"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.13.0/api/ledger-api" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.13.0/api/ledger-api" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -46,7 +46,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/4.13.0/api/overview/index.html b/content/docs/4.13.0/api/overview/index.html
index 003e03b..6831145 100644
--- a/content/docs/4.13.0/api/overview/index.html
+++ b/content/docs/4.13.0/api/overview/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">BookKeeper API | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/4.13.0/api/overview"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.13.0"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.13.0"><meta data-rh="true" name="docsearch:version" content="4.13.0"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.13.0"><meta data-rh="true" property="og:title" content="BookKeeper API | Apache BookKeeper"><meta data-rh="true" name="description" content="BookKeeper offers a few APIs that applications can use to interact with it:"><meta data-rh="true" property="og:description" content="BookKeeper offers a few APIs that applications can use to interact with it:"><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/4.13.0/api/overview"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.13.0/api/overview" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.13.0/api/overview" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -24,7 +24,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/4.13.0/deployment/kubernetes/index.html b/content/docs/4.13.0/deployment/kubernetes/index.html
index 5a5270c..72f2afb 100644
--- a/content/docs/4.13.0/deployment/kubernetes/index.html
+++ b/content/docs/4.13.0/deployment/kubernetes/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">Deploying Apache BookKeeper on Kubernetes | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/4.13.0/deployment/kubernetes"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.13.0"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.13.0"><meta data-rh="true" name="docsearch:version" content="4.13.0"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.13.0"><meta data-rh="true" property="og:title" content="Deploying Apache BookKeeper on Kubernetes | Apache BookKeeper"><meta data-rh="true" name="description" content="Apache BookKeeper can be easily deployed in Kubernetes clusters. The managed clusters on Google Container Engine is the most convenient way."><meta data-rh="true" property="og:description" content="Apache BookKeeper can be easily deployed in Kubernetes clusters. The managed clusters on Google Container Engine is the most convenient way."><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/4.13.0/deployment/kubernetes"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.13.0/deployment/kubernetes" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.13.0/deployment/kubernetes" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -29,7 +29,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/4.13.0/deployment/manual/index.html b/content/docs/4.13.0/deployment/manual/index.html
index bb93424..8b5a7a9 100644
--- a/content/docs/4.13.0/deployment/manual/index.html
+++ b/content/docs/4.13.0/deployment/manual/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">Manual deployment | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/4.13.0/deployment/manual"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.13.0"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.13.0"><meta data-rh="true" name="docsearch:version" content="4.13.0"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.13.0"><meta data-rh="true" property="og:title" content="Manual deployment | Apache BookKeeper"><meta data-rh="true" name="description" content="A BookKeeper cluster consists of two main components:"><meta data-rh="true" property="og:description" content="A BookKeeper cluster consists of two main components:"><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/4.13.0/deployment/manual"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.13.0/deployment/manual" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.13.0/deployment/manual" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -22,7 +22,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/4.13.0/development/codebase/index.html b/content/docs/4.13.0/development/codebase/index.html
index 3af7bdc..24219c4 100644
--- a/content/docs/4.13.0/development/codebase/index.html
+++ b/content/docs/4.13.0/development/codebase/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">The BookKeeper codebase | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/4.13.0/development/codebase"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.13.0"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.13.0"><meta data-rh="true" name="docsearch:version" content="4.13.0"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.13.0"><meta data-rh="true" property="og:title" content="The BookKeeper codebase | Apache BookKeeper"><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/4.13.0/development/codebase"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.13.0/development/codebase" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.13.0/development/codebase" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -22,7 +22,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/4.13.0/development/protocol/index.html b/content/docs/4.13.0/development/protocol/index.html
index f33b0c4..e3c16ab 100644
--- a/content/docs/4.13.0/development/protocol/index.html
+++ b/content/docs/4.13.0/development/protocol/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">The BookKeeper protocol | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/4.13.0/development/protocol"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.13.0"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.13.0"><meta data-rh="true" name="docsearch:version" content="4.13.0"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.13.0"><meta data-rh="true" property="og:title" content="The BookKeeper protocol | Apache BookKeeper"><meta data-rh="true" name="description" content="BookKeeper uses a special replication protocol for guaranteeing persistent storage of entries in an ensemble of bookies."><meta data-rh="true" property="og:description" content="BookKeeper uses a special replication protocol for guaranteeing persistent storage of entries in an ensemble of bookies."><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/4.13.0/development/protocol"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.13.0/development/protocol" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.13.0/development/protocol" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -22,7 +22,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/4.13.0/getting-started/concepts/index.html b/content/docs/4.13.0/getting-started/concepts/index.html
index e98a1ba..188357a 100644
--- a/content/docs/4.13.0/getting-started/concepts/index.html
+++ b/content/docs/4.13.0/getting-started/concepts/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">BookKeeper concepts and architecture | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/4.13.0/getting-started/concepts"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.13.0"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.13.0"><meta data-rh="true" name="docsearch:version" content="4.13.0"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.13.0"><meta data-rh="true" property="og:title" content="BookKeeper concepts and architecture | Apache BookKeeper"><meta data-rh="true" name="description" content="BookKeeper is a service that provides persistent storage of streams of log entries---aka records---in sequences called ledgers. BookKeeper replicates stored entries across multiple servers."><meta data-rh="true" property="og:description" content="BookKeeper is a service that provides persistent storage of streams of log entries---aka records---in sequences called ledgers. BookKeeper replicates stored entries across multiple servers."><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/4.13.0/getting-started/concepts"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.13.0/getting-started/concepts" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.13.0/getting-started/concepts" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -22,7 +22,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/4.13.0/getting-started/installation/index.html b/content/docs/4.13.0/getting-started/installation/index.html
index 9cbadfd..8944070 100644
--- a/content/docs/4.13.0/getting-started/installation/index.html
+++ b/content/docs/4.13.0/getting-started/installation/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">BookKeeper installation | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/4.13.0/getting-started/installation"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.13.0"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.13.0"><meta data-rh="true" name="docsearch:version" content="4.13.0"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.13.0"><meta data-rh="true" property="og:title" content="BookKeeper installation | Apache BookKeeper"><meta data-rh="true" name="description" content="You can install BookKeeper either by downloading a GZipped tarball package or cloning the BookKeeper repository."><meta data-rh="true" property="og:description" content="You can install BookKeeper either by downloading a GZipped tarball package or cloning the BookKeeper repository."><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/4.13.0/getting-started/installation"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.13.0/getting-started/installation" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.13.0/getting-started/installation" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -22,7 +22,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/4.13.0/getting-started/run-locally/index.html b/content/docs/4.13.0/getting-started/run-locally/index.html
index 47ad58d..610fea3 100644
--- a/content/docs/4.13.0/getting-started/run-locally/index.html
+++ b/content/docs/4.13.0/getting-started/run-locally/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">Run bookies locally | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/4.13.0/getting-started/run-locally"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.13.0"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.13.0"><meta data-rh="true" name="docsearch:version" content="4.13.0"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.13.0"><meta data-rh="true" property="og:title" content="Run bookies locally | Apache BookKeeper"><meta data-rh="true" name="description" content="Bookies are individual BookKeeper servers. You can run an ensemble of bookies locally on a single machine using the localbookie command of the bookkeeper CLI tool and specifying the number of bookies you&#x27;d like to include in the ensemble."><meta data-rh="true" property="og:description" content="Bookies are individual BookKeeper servers. You can run an ensemble of bookies locally on a single machine using the localbookie command of the bookkeeper CLI tool and specifying the number of bookies you&#x27;d like to include in the ensemble."><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/4.13.0/getting-started/run-locally"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.13.0/getting-started/run-locally" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.13.0/getting-started/run-locally" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -22,7 +22,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/4.13.0/overview/index.html b/content/docs/4.13.0/overview/index.html
index 8fe24ce..e961f59 100644
--- a/content/docs/4.13.0/overview/index.html
+++ b/content/docs/4.13.0/overview/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">Apache BookKeeper 4.13.0 | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/4.13.0/overview/"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.13.0"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.13.0"><meta data-rh="true" name="docsearch:version" content="4.13.0"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.13.0"><meta data-rh="true" property="og:title" content="Apache BookKeeper 4.13.0 | Apache BookKeeper"><meta data-rh="true" name="description" content="&lt;!--"><meta data-rh="true" property="og:description" content="&lt;!--"><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/4.13.0/overview/"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.13.0/overview/" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.13.0/overview/" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -24,7 +24,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/4.13.0/reference/cli/index.html b/content/docs/4.13.0/reference/cli/index.html
index 9518b4d..cc27207 100644
--- a/content/docs/4.13.0/reference/cli/index.html
+++ b/content/docs/4.13.0/reference/cli/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">BookKeeper CLI tool reference | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/4.13.0/reference/cli"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.13.0"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.13.0"><meta data-rh="true" name="docsearch:version" content="4.13.0"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.13.0"><meta data-rh="true" property="og:title" content="BookKeeper CLI tool reference | Apache BookKeeper"><meta data-rh="true" name="description" content="bookkeeper command"><meta data-rh="true" property="og:description" content="bookkeeper command"><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/4.13.0/reference/cli"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.13.0/reference/cli" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.13.0/reference/cli" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -29,7 +29,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/4.13.0/reference/config/index.html b/content/docs/4.13.0/reference/config/index.html
index 4a59d7e..603750e 100644
--- a/content/docs/4.13.0/reference/config/index.html
+++ b/content/docs/4.13.0/reference/config/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">BookKeeper configuration | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/4.13.0/reference/config"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.13.0"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.13.0"><meta data-rh="true" name="docsearch:version" content="4.13.0"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.13.0"><meta data-rh="true" property="og:title" content="BookKeeper configuration | Apache BookKeeper"><meta data-rh="true" name="description" content="The table below lists parameters that you can set to configure bookies. All configuration takes place in the bk_server.conf file in the bookkeeper-server/conf directory of your BookKeeper installation."><meta data-rh="true" property="og:description" content="The table below lists parameters that you can set to configure bookies. All configuration takes place in the bk_server.conf file in the bookkeeper-server/conf directory of your BookKeeper installation."><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/4.13.0/reference/config"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.13.0/reference/config" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.13.0/reference/config" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -22,7 +22,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/4.13.0/reference/metrics/index.html b/content/docs/4.13.0/reference/metrics/index.html
index 206434e..79493c8 100644
--- a/content/docs/4.13.0/reference/metrics/index.html
+++ b/content/docs/4.13.0/reference/metrics/index.html
@@ -4,12 +4,12 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">BookKeeper metrics reference | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/4.13.0/reference/metrics"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.13.0"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.13.0"><meta data-rh="true" name="docsearch:version" content="4.13.0"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.13.0"><meta data-rh="true" property="og:title" content="BookKeeper metrics reference | Apache BookKeeper"><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/4.13.0/reference/metrics"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.13.0/reference/metrics" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.13.0/reference/metrics" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
-<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navbar__brand" href="/"><div class="navbar__logo"><img src="/img/bk-logo.svg" alt="Apache Bookkeeper" class="themedImage_ToTc themedImage--light_HNdA"><img src="/img/bk-logo.svg" alt="Apache Bookkeeper" class="themedImage_ToTc themedImage--dark_i4oU"></div><b class="navbar__title text--truncate">Apache BookKeeper</b></a><a class="navbar__item navbar__link" href="/docs/4.13.0/overview/">Documentation</a><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Community</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/community/mailing-lists">Mailing lists</a></li><li><a class="dropdown__link" href="/community/slack">Slack</a></li><li><a href="https://github.com/apache/bookkeeper/issues" target="_blank" rel="noopener noreferrer" class="dropdown__link">Github issues<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a class="dropdown__link" href="/community/releases">Release management</a></li><li><a class="dropdown__link" href="/community/meeting">Community meetings</a></li><li><a class="dropdown__link" href="/community/contributing">Contribution guide</a></li><li><a class="dropdown__link" href="/community/coding-guide">Coding guide</a></li><li><a class="dropdown__link" href="/community/testing">Testing guide</a></li><li><a class="dropdown__link" href="/community/issue-report">Issue report guide</a></li><li><a class="dropdown__link" href="/community/release-guide">Release guide</a></li><li><a class="dropdown__link" href="/community/presentations">Presentations</a></li><li><a class="dropdown__link" href="/community/bookkeeper-proposals">BookKeeper proposals (BP)</a></li></ul></div><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Project</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/project/who">Who are we?</a></li><li><a class="dropdown__link" href="/project/bylaws">Bylaws</a></li><li><a href="https://apache.org/licenses" target="_blank" rel="noopener noreferrer" class="dropdown__link">License<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a class="dropdown__link" href="/project/privacy">Privacy policy</a></li><li><a href="https://www.apache.org/foundation/sponsorship.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Sponsorship<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a href="https://www.apache.org/foundation/thanks.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Thanks<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div></div><div class="navbar__items navbar__items--right"><div class="navbar__item dropdown dropdown--hoverable dropdown--right"><a class="navbar__link" aria-haspopup="true" aria-expanded="false" role="button" href="/docs/4.13.0/overview/">4.13.0</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/docs/next/overview/">Next</a></li><li><a class="dropdown__link" href="/docs/admin/autorecovery">4.17.0</a></li><li><a class="dropdown__link" href="/docs/4.16.5/overview/">4.16.5</a></li><li><a class="dropdown__link" href="/docs/4.15.5/overview/">4.15.5</a></li><li><a class="dropdown__link" href="/docs/4.14.8/reference/metrics">4.14.8</a></li><li><a aria-current="page" class="dropdown__link dropdown__link--active" href="/docs/4.13.0/reference/metrics">4.13.0</a></li><li><a class="dropdown__link" href="/docs/4.12.1/reference/metrics">4.12.1</a></li><li><a class="dropdown__link" href="/docs/4.11.1/reference/metrics">4.11.1</a></li><li><a class="dropdown__link" href="/docs/4.10.0/reference/metrics">4.10.0</a></li><li><a class="dropdown__link" href="/docs/4.9.2/reference/metrics">4.9.2</a></li><li><a class="dropdown__link" href="/docs/4.8.2/reference/metrics">4.8.2</a></li><li><a class="dropdown__link" href="/docs/4.7.3/reference/metrics">4.7.3</a></li><li><a class="dropdown__link" href="/docs/4.6.2/reference/metrics">4.6.2</a></li><li><a class="dropdown__link" href="/docs/4.5.1/reference/metrics">4.5.1</a></li></ul></div><a class="navbar__item navbar__link" href="/releases">Download</a><div class="toggle_vylO colorModeToggle_DEke"><button class="clean-btn toggleButton_gllP toggleButtonDisabled_aARS" type="button" disabled="" title="Switch between dark and light mode (currently light mode)" aria-label="Switch between dark and light mode (currently light mode)" aria-live="polite"><svg viewBox="0 0 24 24" width="24" height="24" class="lightToggleIcon_pyhR"><path fill="currentColor" d="M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"></path></svg><svg viewBox="0 0 24 24" width="24" height="24" class="darkToggleIcon_wfgR"><path fill="currentColor" d="M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"></path></svg></button></div><div class="searchBox_ZlJk"></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div></nav><div id="docusaurus_skipToContent_fallback" class="main-wrapper mainWrapper_z2l0 docsWrapper_BCFX"><button aria-label="Scroll back to top" class="clean-btn theme-back-to-top-button backToTopButton_sjWU" type="button"></button><div class="docPage__5DB"><main class="docMainContainer_gTbr docMainContainerEnhanced_Uz_u"><div class="container padding-top--md padding-bottom--lg"><div class="row"><div class="col docItemCol_VOVn"><div class="docItemContainer_Djhp"><article><span class="theme-doc-version-badge badge badge--secondary">Version: 4.13.0</span><div class="theme-doc-markdown markdown"><header><h1>BookKeeper metrics reference</h1></header></div></article><nav class="pagination-nav docusaurus-mt-lg" aria-label="Docs pages navigation"></nav></div></div></div></div></main></div></div><footer class="footer footer--dark"><div class="container container-fluid"><div class="row footer__links"><div class="col footer__col"><div class="footer__title">Documentation</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/docs/overview">Overview</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/getting-started/installation">Getting started</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/deployment/manual">Deployment</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/admin/bookies">Administration</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/api/overview">API</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/security/overview">Security</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/development/protocol">Development</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/reference/config">Reference</a></li></ul></div><div class="col footer__col"><div class="footer__title">Community</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/community/mailing-lists">Mailing lists</a></li><li class="footer__item"><a class="footer__link-item" href="/community/slack">Slack</a></li><li class="footer__item"><a href="https://github.com/apache/bookkeeper" target="_blank" rel="noopener noreferrer" class="footer__link-item">Github<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a href="https://twitter.com/asfbookkeeper" target="_blank" rel="noopener noreferrer" class="footer__link-item">Twitter<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div><div class="col footer__col"><div class="footer__title">Project</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/project/who">Who are we?</a></li><li class="footer__item"><a class="footer__link-item" href="/project/bylaws">Bylaws</a></li><li class="footer__item"><a href="https://apache.org/licenses" target="_blank" rel="noopener noreferrer" class="footer__link-item">License<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a class="footer__link-item" href="/project/privacy">Privacy policy</a></li><li class="footer__item"><a href="https://www.apache.org/foundation/sponsorship.html" target="_blank" rel="noopener noreferrer" class="footer__link-item">Sponsorship<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a href="https://www.apache.org/foundation/thanks.html" target="_blank" rel="noopener noreferrer" class="footer__link-item">Thanks<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div></div><div class="footer__bottom text--center"><div class="footer__copyright"><footer class="footer">
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navbar__brand" href="/"><div class="navbar__logo"><img src="/img/bk-logo.svg" alt="Apache Bookkeeper" class="themedImage_ToTc themedImage--light_HNdA"><img src="/img/bk-logo.svg" alt="Apache Bookkeeper" class="themedImage_ToTc themedImage--dark_i4oU"></div><b class="navbar__title text--truncate">Apache BookKeeper</b></a><a class="navbar__item navbar__link" href="/docs/4.13.0/overview/">Documentation</a><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Community</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/community/mailing-lists">Mailing lists</a></li><li><a class="dropdown__link" href="/community/slack">Slack</a></li><li><a href="https://github.com/apache/bookkeeper/issues" target="_blank" rel="noopener noreferrer" class="dropdown__link">Github issues<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a class="dropdown__link" href="/community/releases">Release management</a></li><li><a class="dropdown__link" href="/community/meeting">Community meetings</a></li><li><a class="dropdown__link" href="/community/contributing">Contribution guide</a></li><li><a class="dropdown__link" href="/community/coding-guide">Coding guide</a></li><li><a class="dropdown__link" href="/community/testing">Testing guide</a></li><li><a class="dropdown__link" href="/community/issue-report">Issue report guide</a></li><li><a class="dropdown__link" href="/community/release-guide">Release guide</a></li><li><a class="dropdown__link" href="/community/presentations">Presentations</a></li><li><a class="dropdown__link" href="/community/bookkeeper-proposals">BookKeeper proposals (BP)</a></li></ul></div><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Project</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/project/who">Who are we?</a></li><li><a class="dropdown__link" href="/project/bylaws">Bylaws</a></li><li><a href="https://apache.org/licenses" target="_blank" rel="noopener noreferrer" class="dropdown__link">License<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a class="dropdown__link" href="/project/privacy">Privacy policy</a></li><li><a href="https://www.apache.org/foundation/sponsorship.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Sponsorship<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a href="https://www.apache.org/foundation/thanks.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Thanks<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div></div><div class="navbar__items navbar__items--right"><div class="navbar__item dropdown dropdown--hoverable dropdown--right"><a class="navbar__link" aria-haspopup="true" aria-expanded="false" role="button" href="/docs/4.13.0/overview/">4.13.0</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/docs/next/overview/">Next</a></li><li><a class="dropdown__link" href="/docs/overview/">4.17.0</a></li><li><a class="dropdown__link" href="/docs/4.16.5/overview/">4.16.5</a></li><li><a class="dropdown__link" href="/docs/4.15.5/overview/">4.15.5</a></li><li><a class="dropdown__link" href="/docs/4.14.8/reference/metrics">4.14.8</a></li><li><a aria-current="page" class="dropdown__link dropdown__link--active" href="/docs/4.13.0/reference/metrics">4.13.0</a></li><li><a class="dropdown__link" href="/docs/4.12.1/reference/metrics">4.12.1</a></li><li><a class="dropdown__link" href="/docs/4.11.1/reference/metrics">4.11.1</a></li><li><a class="dropdown__link" href="/docs/4.10.0/reference/metrics">4.10.0</a></li><li><a class="dropdown__link" href="/docs/4.9.2/reference/metrics">4.9.2</a></li><li><a class="dropdown__link" href="/docs/4.8.2/reference/metrics">4.8.2</a></li><li><a class="dropdown__link" href="/docs/4.7.3/reference/metrics">4.7.3</a></li><li><a class="dropdown__link" href="/docs/4.6.2/reference/metrics">4.6.2</a></li><li><a class="dropdown__link" href="/docs/4.5.1/reference/metrics">4.5.1</a></li></ul></div><a class="navbar__item navbar__link" href="/releases">Download</a><div class="toggle_vylO colorModeToggle_DEke"><button class="clean-btn toggleButton_gllP toggleButtonDisabled_aARS" type="button" disabled="" title="Switch between dark and light mode (currently light mode)" aria-label="Switch between dark and light mode (currently light mode)" aria-live="polite"><svg viewBox="0 0 24 24" width="24" height="24" class="lightToggleIcon_pyhR"><path fill="currentColor" d="M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"></path></svg><svg viewBox="0 0 24 24" width="24" height="24" class="darkToggleIcon_wfgR"><path fill="currentColor" d="M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"></path></svg></button></div><div class="searchBox_ZlJk"></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div></nav><div id="docusaurus_skipToContent_fallback" class="main-wrapper mainWrapper_z2l0 docsWrapper_BCFX"><button aria-label="Scroll back to top" class="clean-btn theme-back-to-top-button backToTopButton_sjWU" type="button"></button><div class="docPage__5DB"><main class="docMainContainer_gTbr docMainContainerEnhanced_Uz_u"><div class="container padding-top--md padding-bottom--lg"><div class="row"><div class="col docItemCol_VOVn"><div class="docItemContainer_Djhp"><article><span class="theme-doc-version-badge badge badge--secondary">Version: 4.13.0</span><div class="theme-doc-markdown markdown"><header><h1>BookKeeper metrics reference</h1></header></div></article><nav class="pagination-nav docusaurus-mt-lg" aria-label="Docs pages navigation"></nav></div></div></div></div></main></div></div><footer class="footer footer--dark"><div class="container container-fluid"><div class="row footer__links"><div class="col footer__col"><div class="footer__title">Documentation</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/docs/overview">Overview</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/getting-started/installation">Getting started</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/deployment/manual">Deployment</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/admin/bookies">Administration</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/api/overview">API</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/security/overview">Security</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/development/protocol">Development</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/reference/config">Reference</a></li></ul></div><div class="col footer__col"><div class="footer__title">Community</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/community/mailing-lists">Mailing lists</a></li><li class="footer__item"><a class="footer__link-item" href="/community/slack">Slack</a></li><li class="footer__item"><a href="https://github.com/apache/bookkeeper" target="_blank" rel="noopener noreferrer" class="footer__link-item">Github<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a href="https://twitter.com/asfbookkeeper" target="_blank" rel="noopener noreferrer" class="footer__link-item">Twitter<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div><div class="col footer__col"><div class="footer__title">Project</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/project/who">Who are we?</a></li><li class="footer__item"><a class="footer__link-item" href="/project/bylaws">Bylaws</a></li><li class="footer__item"><a href="https://apache.org/licenses" target="_blank" rel="noopener noreferrer" class="footer__link-item">License<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a class="footer__link-item" href="/project/privacy">Privacy policy</a></li><li class="footer__item"><a href="https://www.apache.org/foundation/sponsorship.html" target="_blank" rel="noopener noreferrer" class="footer__link-item">Sponsorship<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a href="https://www.apache.org/foundation/thanks.html" target="_blank" rel="noopener noreferrer" class="footer__link-item">Thanks<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div></div><div class="footer__bottom text--center"><div class="footer__copyright"><footer class="footer">
         <div class="container">
           <div class="content has-text-centered">
             <p>
@@ -22,7 +22,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/4.13.0/security/overview/index.html b/content/docs/4.13.0/security/overview/index.html
index dc861f5..ab8a4b3 100644
--- a/content/docs/4.13.0/security/overview/index.html
+++ b/content/docs/4.13.0/security/overview/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">BookKeeper Security | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/4.13.0/security/overview"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.13.0"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.13.0"><meta data-rh="true" name="docsearch:version" content="4.13.0"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.13.0"><meta data-rh="true" property="og:title" content="BookKeeper Security | Apache BookKeeper"><meta data-rh="true" name="description" content="In the 4.5.0 release, the BookKeeper community added a number of features that can be used, together or separately, to secure a BookKeeper cluster."><meta data-rh="true" property="og:description" content="In the 4.5.0 release, the BookKeeper community added a number of features that can be used, together or separately, to secure a BookKeeper cluster."><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/4.13.0/security/overview"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.13.0/security/overview" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.13.0/security/overview" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -23,7 +23,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/4.13.0/security/sasl/index.html b/content/docs/4.13.0/security/sasl/index.html
index e8fc284..e7ff75a 100644
--- a/content/docs/4.13.0/security/sasl/index.html
+++ b/content/docs/4.13.0/security/sasl/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">Authentication using SASL | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/4.13.0/security/sasl"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.13.0"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.13.0"><meta data-rh="true" name="docsearch:version" content="4.13.0"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.13.0"><meta data-rh="true" property="og:title" content="Authentication using SASL | Apache BookKeeper"><meta data-rh="true" name="description" content="Bookies support client authentication via SASL. Currently we only support GSSAPI (Kerberos). We will start"><meta data-rh="true" property="og:description" content="Bookies support client authentication via SASL. Currently we only support GSSAPI (Kerberos). We will start"><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/4.13.0/security/sasl"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.13.0/security/sasl" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.13.0/security/sasl" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -45,7 +45,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/4.13.0/security/tls/index.html b/content/docs/4.13.0/security/tls/index.html
index 21b2e85..5ed878d 100644
--- a/content/docs/4.13.0/security/tls/index.html
+++ b/content/docs/4.13.0/security/tls/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">Encryption and Authentication using TLS | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/4.13.0/security/tls"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.13.0"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.13.0"><meta data-rh="true" name="docsearch:version" content="4.13.0"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.13.0"><meta data-rh="true" property="og:title" content="Encryption and Authentication using TLS | Apache BookKeeper"><meta data-rh="true" name="description" content="Apache BookKeeper allows clients and autorecovery daemons to communicate over TLS, although this is not enabled by default."><meta data-rh="true" property="og:description" content="Apache BookKeeper allows clients and autorecovery daemons to communicate over TLS, although this is not enabled by default."><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/4.13.0/security/tls"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.13.0/security/tls" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.13.0/security/tls" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -53,7 +53,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/4.13.0/security/zookeeper/index.html b/content/docs/4.13.0/security/zookeeper/index.html
index d3b5a6a..8dc525c 100644
--- a/content/docs/4.13.0/security/zookeeper/index.html
+++ b/content/docs/4.13.0/security/zookeeper/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">ZooKeeper Authentication | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/4.13.0/security/zookeeper"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.13.0"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.13.0"><meta data-rh="true" name="docsearch:version" content="4.13.0"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.13.0"><meta data-rh="true" property="og:title" content="ZooKeeper Authentication | Apache BookKeeper"><meta data-rh="true" name="description" content="New Clusters"><meta data-rh="true" property="og:description" content="New Clusters"><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/4.13.0/security/zookeeper"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.13.0/security/zookeeper" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.13.0/security/zookeeper" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -29,7 +29,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/4.14.8/admin/autorecovery/index.html b/content/docs/4.14.8/admin/autorecovery/index.html
index 9550991..3afe02e 100644
--- a/content/docs/4.14.8/admin/autorecovery/index.html
+++ b/content/docs/4.14.8/admin/autorecovery/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">Using AutoRecovery | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/4.14.8/admin/autorecovery"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.14.8"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.14.8"><meta data-rh="true" name="docsearch:version" content="4.14.8"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.14.8"><meta data-rh="true" property="og:title" content="Using AutoRecovery | Apache BookKeeper"><meta data-rh="true" name="description" content="When a bookie crashes, all ledgers on that bookie become under-replicated. In order to bring all ledgers in your BookKeeper cluster back to full replication, you&#x27;ll need to recover the data from any offline bookies. There are two ways to recover bookies&#x27; data:"><meta data-rh="true" property="og:description" content="When a bookie crashes, all ledgers on that bookie become under-replicated. In order to bring all ledgers in your BookKeeper cluster back to full replication, you&#x27;ll need to recover the data from any offline bookies. There are two ways to recover bookies&#x27; data:"><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/4.14.8/admin/autorecovery"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.14.8/admin/autorecovery" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.14.8/admin/autorecovery" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -23,7 +23,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/4.14.8/admin/bookies/index.html b/content/docs/4.14.8/admin/bookies/index.html
index afe4648..c61ee31 100644
--- a/content/docs/4.14.8/admin/bookies/index.html
+++ b/content/docs/4.14.8/admin/bookies/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">BookKeeper administration | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/4.14.8/admin/bookies"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.14.8"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.14.8"><meta data-rh="true" name="docsearch:version" content="4.14.8"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.14.8"><meta data-rh="true" property="og:title" content="BookKeeper administration | Apache BookKeeper"><meta data-rh="true" name="description" content="This document is a guide to deploying, administering, and maintaining BookKeeper. It also discusses best practices and common problems."><meta data-rh="true" property="og:description" content="This document is a guide to deploying, administering, and maintaining BookKeeper. It also discusses best practices and common problems."><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/4.14.8/admin/bookies"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.14.8/admin/bookies" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.14.8/admin/bookies" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -22,7 +22,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/4.14.8/admin/decomission/index.html b/content/docs/4.14.8/admin/decomission/index.html
index 4cc6c9d..cdcfb38 100644
--- a/content/docs/4.14.8/admin/decomission/index.html
+++ b/content/docs/4.14.8/admin/decomission/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">Decommission Bookies | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/4.14.8/admin/decomission"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.14.8"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.14.8"><meta data-rh="true" name="docsearch:version" content="4.14.8"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.14.8"><meta data-rh="true" property="og:title" content="Decommission Bookies | Apache BookKeeper"><meta data-rh="true" name="description" content="In case the user wants to decommission a bookie, the following process is useful to follow in order to verify if the"><meta data-rh="true" property="og:description" content="In case the user wants to decommission a bookie, the following process is useful to follow in order to verify if the"><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/4.14.8/admin/decomission"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.14.8/admin/decomission" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.14.8/admin/decomission" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -33,7 +33,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/4.14.8/admin/geo-replication/index.html b/content/docs/4.14.8/admin/geo-replication/index.html
index ae27ef1..b82a28a 100644
--- a/content/docs/4.14.8/admin/geo-replication/index.html
+++ b/content/docs/4.14.8/admin/geo-replication/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">Geo-replication | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/4.14.8/admin/geo-replication"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.14.8"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.14.8"><meta data-rh="true" name="docsearch:version" content="4.14.8"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.14.8"><meta data-rh="true" property="og:title" content="Geo-replication | Apache BookKeeper"><meta data-rh="true" name="description" content="Geo-replication is the replication of data across BookKeeper clusters. In order to enable geo-replication for a group of BookKeeper clusters,"><meta data-rh="true" property="og:description" content="Geo-replication is the replication of data across BookKeeper clusters. In order to enable geo-replication for a group of BookKeeper clusters,"><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/4.14.8/admin/geo-replication"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.14.8/admin/geo-replication" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.14.8/admin/geo-replication" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -22,7 +22,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/4.14.8/admin/http/index.html b/content/docs/4.14.8/admin/http/index.html
index 0887b88..85ee47b 100644
--- a/content/docs/4.14.8/admin/http/index.html
+++ b/content/docs/4.14.8/admin/http/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">BookKeeper Admin REST API | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/4.14.8/admin/http"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.14.8"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.14.8"><meta data-rh="true" name="docsearch:version" content="4.14.8"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.14.8"><meta data-rh="true" property="og:title" content="BookKeeper Admin REST API | Apache BookKeeper"><meta data-rh="true" name="description" content="This document introduces BookKeeper HTTP endpoints, which can be used for BookKeeper administration."><meta data-rh="true" property="og:description" content="This document introduces BookKeeper HTTP endpoints, which can be used for BookKeeper administration."><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/4.14.8/admin/http"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.14.8/admin/http" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.14.8/admin/http" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -23,7 +23,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/4.14.8/admin/metrics/index.html b/content/docs/4.14.8/admin/metrics/index.html
index db2af51..6bca71a 100644
--- a/content/docs/4.14.8/admin/metrics/index.html
+++ b/content/docs/4.14.8/admin/metrics/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">Metric collection | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/4.14.8/admin/metrics"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.14.8"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.14.8"><meta data-rh="true" name="docsearch:version" content="4.14.8"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.14.8"><meta data-rh="true" property="og:title" content="Metric collection | Apache BookKeeper"><meta data-rh="true" name="description" content="BookKeeper enables metrics collection through a variety of stats providers."><meta data-rh="true" property="og:description" content="BookKeeper enables metrics collection through a variety of stats providers."><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/4.14.8/admin/metrics"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.14.8/admin/metrics" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.14.8/admin/metrics" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -22,7 +22,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/4.14.8/admin/perf/index.html b/content/docs/4.14.8/admin/perf/index.html
index 7b0af10..b9ed525 100644
--- a/content/docs/4.14.8/admin/perf/index.html
+++ b/content/docs/4.14.8/admin/perf/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">Performance tuning | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/4.14.8/admin/perf"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.14.8"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.14.8"><meta data-rh="true" name="docsearch:version" content="4.14.8"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.14.8"><meta data-rh="true" property="og:title" content="Performance tuning | Apache BookKeeper"><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/4.14.8/admin/perf"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.14.8/admin/perf" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.14.8/admin/perf" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -22,7 +22,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/4.14.8/admin/placement/index.html b/content/docs/4.14.8/admin/placement/index.html
index 2543c7c..581b0c7 100644
--- a/content/docs/4.14.8/admin/placement/index.html
+++ b/content/docs/4.14.8/admin/placement/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">Customized placement policies | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/4.14.8/admin/placement"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.14.8"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.14.8"><meta data-rh="true" name="docsearch:version" content="4.14.8"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.14.8"><meta data-rh="true" property="og:title" content="Customized placement policies | Apache BookKeeper"><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/4.14.8/admin/placement"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.14.8/admin/placement" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.14.8/admin/placement" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -22,7 +22,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/4.14.8/admin/upgrade/index.html b/content/docs/4.14.8/admin/upgrade/index.html
index ba10f45..3a87662 100644
--- a/content/docs/4.14.8/admin/upgrade/index.html
+++ b/content/docs/4.14.8/admin/upgrade/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">Upgrade | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/4.14.8/admin/upgrade"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.14.8"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.14.8"><meta data-rh="true" name="docsearch:version" content="4.14.8"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.14.8"><meta data-rh="true" property="og:title" content="Upgrade | Apache BookKeeper"><meta data-rh="true" name="description" content="If you have questions about upgrades (or need help), please feel free to reach out to us by mailing list or Slack Channel."><meta data-rh="true" property="og:description" content="If you have questions about upgrades (or need help), please feel free to reach out to us by mailing list or Slack Channel."><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/4.14.8/admin/upgrade"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.14.8/admin/upgrade" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.14.8/admin/upgrade" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -29,7 +29,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/4.14.8/api/distributedlog-api/index.html b/content/docs/4.14.8/api/distributedlog-api/index.html
index 86bb4a3..5640199 100644
--- a/content/docs/4.14.8/api/distributedlog-api/index.html
+++ b/content/docs/4.14.8/api/distributedlog-api/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">DistributedLog | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/4.14.8/api/distributedlog-api"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.14.8"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.14.8"><meta data-rh="true" name="docsearch:version" content="4.14.8"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.14.8"><meta data-rh="true" property="og:title" content="DistributedLog | Apache BookKeeper"><meta data-rh="true" name="description" content="DistributedLog began its life as a separate project under the Apache Foundation. It was merged into BookKeeper in 2017."><meta data-rh="true" property="og:description" content="DistributedLog began its life as a separate project under the Apache Foundation. It was merged into BookKeeper in 2017."><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/4.14.8/api/distributedlog-api"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.14.8/api/distributedlog-api" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.14.8/api/distributedlog-api" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -22,7 +22,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/4.14.8/api/ledger-adv-api/index.html b/content/docs/4.14.8/api/ledger-adv-api/index.html
index 23297eb..68a0ca7 100644
--- a/content/docs/4.14.8/api/ledger-adv-api/index.html
+++ b/content/docs/4.14.8/api/ledger-adv-api/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">The Advanced Ledger API | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/4.14.8/api/ledger-adv-api"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.14.8"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.14.8"><meta data-rh="true" name="docsearch:version" content="4.14.8"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.14.8"><meta data-rh="true" property="og:title" content="The Advanced Ledger API | Apache BookKeeper"><meta data-rh="true" name="description" content="In release 4.5.0, Apache BookKeeper introduces a few advanced API for advanced usage."><meta data-rh="true" property="og:description" content="In release 4.5.0, Apache BookKeeper introduces a few advanced API for advanced usage."><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/4.14.8/api/ledger-adv-api"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.14.8/api/ledger-adv-api" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.14.8/api/ledger-adv-api" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -27,7 +27,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/4.14.8/api/ledger-api/index.html b/content/docs/4.14.8/api/ledger-api/index.html
index 205172a..d03c769 100644
--- a/content/docs/4.14.8/api/ledger-api/index.html
+++ b/content/docs/4.14.8/api/ledger-api/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">The Ledger API | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/4.14.8/api/ledger-api"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.14.8"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.14.8"><meta data-rh="true" name="docsearch:version" content="4.14.8"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.14.8"><meta data-rh="true" property="og:title" content="The Ledger API | Apache BookKeeper"><meta data-rh="true" name="description" content="The ledger API is a lower-level API for BookKeeper that enables you to interact with ledgers directly."><meta data-rh="true" property="og:description" content="The ledger API is a lower-level API for BookKeeper that enables you to interact with ledgers directly."><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/4.14.8/api/ledger-api"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.14.8/api/ledger-api" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.14.8/api/ledger-api" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -46,7 +46,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/4.14.8/api/overview/index.html b/content/docs/4.14.8/api/overview/index.html
index decb613..7e064f5 100644
--- a/content/docs/4.14.8/api/overview/index.html
+++ b/content/docs/4.14.8/api/overview/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">BookKeeper API | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/4.14.8/api/overview"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.14.8"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.14.8"><meta data-rh="true" name="docsearch:version" content="4.14.8"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.14.8"><meta data-rh="true" property="og:title" content="BookKeeper API | Apache BookKeeper"><meta data-rh="true" name="description" content="BookKeeper offers a few APIs that applications can use to interact with it:"><meta data-rh="true" property="og:description" content="BookKeeper offers a few APIs that applications can use to interact with it:"><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/4.14.8/api/overview"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.14.8/api/overview" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.14.8/api/overview" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -24,7 +24,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/4.14.8/deployment/kubernetes/index.html b/content/docs/4.14.8/deployment/kubernetes/index.html
index 160282f..925f91a 100644
--- a/content/docs/4.14.8/deployment/kubernetes/index.html
+++ b/content/docs/4.14.8/deployment/kubernetes/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">Deploying Apache BookKeeper on Kubernetes | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/4.14.8/deployment/kubernetes"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.14.8"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.14.8"><meta data-rh="true" name="docsearch:version" content="4.14.8"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.14.8"><meta data-rh="true" property="og:title" content="Deploying Apache BookKeeper on Kubernetes | Apache BookKeeper"><meta data-rh="true" name="description" content="Apache BookKeeper can be easily deployed in Kubernetes clusters. The managed clusters on Google Container Engine is the most convenient way."><meta data-rh="true" property="og:description" content="Apache BookKeeper can be easily deployed in Kubernetes clusters. The managed clusters on Google Container Engine is the most convenient way."><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/4.14.8/deployment/kubernetes"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.14.8/deployment/kubernetes" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.14.8/deployment/kubernetes" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -29,7 +29,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/4.14.8/deployment/manual/index.html b/content/docs/4.14.8/deployment/manual/index.html
index f681a21..9a2ac11 100644
--- a/content/docs/4.14.8/deployment/manual/index.html
+++ b/content/docs/4.14.8/deployment/manual/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">Manual deployment | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/4.14.8/deployment/manual"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.14.8"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.14.8"><meta data-rh="true" name="docsearch:version" content="4.14.8"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.14.8"><meta data-rh="true" property="og:title" content="Manual deployment | Apache BookKeeper"><meta data-rh="true" name="description" content="A BookKeeper cluster consists of two main components:"><meta data-rh="true" property="og:description" content="A BookKeeper cluster consists of two main components:"><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/4.14.8/deployment/manual"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.14.8/deployment/manual" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.14.8/deployment/manual" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -22,7 +22,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/4.14.8/development/codebase/index.html b/content/docs/4.14.8/development/codebase/index.html
index d299ff5..c53552a 100644
--- a/content/docs/4.14.8/development/codebase/index.html
+++ b/content/docs/4.14.8/development/codebase/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">The BookKeeper codebase | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/4.14.8/development/codebase"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.14.8"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.14.8"><meta data-rh="true" name="docsearch:version" content="4.14.8"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.14.8"><meta data-rh="true" property="og:title" content="The BookKeeper codebase | Apache BookKeeper"><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/4.14.8/development/codebase"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.14.8/development/codebase" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.14.8/development/codebase" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -22,7 +22,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/4.14.8/development/protocol/index.html b/content/docs/4.14.8/development/protocol/index.html
index 9c505ab..aaa460d 100644
--- a/content/docs/4.14.8/development/protocol/index.html
+++ b/content/docs/4.14.8/development/protocol/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">The BookKeeper protocol | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/4.14.8/development/protocol"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.14.8"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.14.8"><meta data-rh="true" name="docsearch:version" content="4.14.8"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.14.8"><meta data-rh="true" property="og:title" content="The BookKeeper protocol | Apache BookKeeper"><meta data-rh="true" name="description" content="BookKeeper uses a special replication protocol for guaranteeing persistent storage of entries in an ensemble of bookies."><meta data-rh="true" property="og:description" content="BookKeeper uses a special replication protocol for guaranteeing persistent storage of entries in an ensemble of bookies."><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/4.14.8/development/protocol"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.14.8/development/protocol" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.14.8/development/protocol" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -22,7 +22,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/4.14.8/getting-started/concepts/index.html b/content/docs/4.14.8/getting-started/concepts/index.html
index e6d059c..49624f3 100644
--- a/content/docs/4.14.8/getting-started/concepts/index.html
+++ b/content/docs/4.14.8/getting-started/concepts/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">BookKeeper concepts and architecture | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/4.14.8/getting-started/concepts"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.14.8"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.14.8"><meta data-rh="true" name="docsearch:version" content="4.14.8"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.14.8"><meta data-rh="true" property="og:title" content="BookKeeper concepts and architecture | Apache BookKeeper"><meta data-rh="true" name="description" content="BookKeeper is a service that provides persistent storage of streams of log entries---aka records---in sequences called ledgers. BookKeeper replicates stored entries across multiple servers."><meta data-rh="true" property="og:description" content="BookKeeper is a service that provides persistent storage of streams of log entries---aka records---in sequences called ledgers. BookKeeper replicates stored entries across multiple servers."><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/4.14.8/getting-started/concepts"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.14.8/getting-started/concepts" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.14.8/getting-started/concepts" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -22,7 +22,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/4.14.8/getting-started/installation/index.html b/content/docs/4.14.8/getting-started/installation/index.html
index d94bb90..8aaabf9 100644
--- a/content/docs/4.14.8/getting-started/installation/index.html
+++ b/content/docs/4.14.8/getting-started/installation/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">BookKeeper installation | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/4.14.8/getting-started/installation"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.14.8"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.14.8"><meta data-rh="true" name="docsearch:version" content="4.14.8"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.14.8"><meta data-rh="true" property="og:title" content="BookKeeper installation | Apache BookKeeper"><meta data-rh="true" name="description" content="You can install BookKeeper either by downloading a GZipped tarball package or cloning the BookKeeper repository."><meta data-rh="true" property="og:description" content="You can install BookKeeper either by downloading a GZipped tarball package or cloning the BookKeeper repository."><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/4.14.8/getting-started/installation"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.14.8/getting-started/installation" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.14.8/getting-started/installation" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -22,7 +22,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/4.14.8/getting-started/run-locally/index.html b/content/docs/4.14.8/getting-started/run-locally/index.html
index fa06e66..26637b9 100644
--- a/content/docs/4.14.8/getting-started/run-locally/index.html
+++ b/content/docs/4.14.8/getting-started/run-locally/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">Run bookies locally | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/4.14.8/getting-started/run-locally"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.14.8"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.14.8"><meta data-rh="true" name="docsearch:version" content="4.14.8"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.14.8"><meta data-rh="true" property="og:title" content="Run bookies locally | Apache BookKeeper"><meta data-rh="true" name="description" content="Bookies are individual BookKeeper servers. You can run an ensemble of bookies locally on a single machine using the localbookie command of the bookkeeper CLI tool and specifying the number of bookies you&#x27;d like to include in the ensemble."><meta data-rh="true" property="og:description" content="Bookies are individual BookKeeper servers. You can run an ensemble of bookies locally on a single machine using the localbookie command of the bookkeeper CLI tool and specifying the number of bookies you&#x27;d like to include in the ensemble."><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/4.14.8/getting-started/run-locally"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.14.8/getting-started/run-locally" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.14.8/getting-started/run-locally" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -22,7 +22,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/4.14.8/overview/index.html b/content/docs/4.14.8/overview/index.html
index db6a299..c92b7c4 100644
--- a/content/docs/4.14.8/overview/index.html
+++ b/content/docs/4.14.8/overview/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">Apache BookKeeper 4.14.8 | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/4.14.8/overview/"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.14.8"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.14.8"><meta data-rh="true" name="docsearch:version" content="4.14.8"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.14.8"><meta data-rh="true" property="og:title" content="Apache BookKeeper 4.14.8 | Apache BookKeeper"><meta data-rh="true" name="description" content="&lt;!--"><meta data-rh="true" property="og:description" content="&lt;!--"><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/4.14.8/overview/"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.14.8/overview/" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.14.8/overview/" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -24,7 +24,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/4.14.8/reference/cli/index.html b/content/docs/4.14.8/reference/cli/index.html
index e9537ac..fd72026 100644
--- a/content/docs/4.14.8/reference/cli/index.html
+++ b/content/docs/4.14.8/reference/cli/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">BookKeeper CLI tool reference | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/4.14.8/reference/cli"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.14.8"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.14.8"><meta data-rh="true" name="docsearch:version" content="4.14.8"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.14.8"><meta data-rh="true" property="og:title" content="BookKeeper CLI tool reference | Apache BookKeeper"><meta data-rh="true" name="description" content="bookkeeper command"><meta data-rh="true" property="og:description" content="bookkeeper command"><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/4.14.8/reference/cli"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.14.8/reference/cli" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.14.8/reference/cli" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -29,7 +29,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/4.14.8/reference/config/index.html b/content/docs/4.14.8/reference/config/index.html
index 26755b8..43cedae 100644
--- a/content/docs/4.14.8/reference/config/index.html
+++ b/content/docs/4.14.8/reference/config/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">BookKeeper configuration | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/4.14.8/reference/config"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.14.8"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.14.8"><meta data-rh="true" name="docsearch:version" content="4.14.8"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.14.8"><meta data-rh="true" property="og:title" content="BookKeeper configuration | Apache BookKeeper"><meta data-rh="true" name="description" content="The table below lists parameters that you can set to configure bookies. All configuration takes place in the bk_server.conf file in the bookkeeper-server/conf directory of your BookKeeper installation."><meta data-rh="true" property="og:description" content="The table below lists parameters that you can set to configure bookies. All configuration takes place in the bk_server.conf file in the bookkeeper-server/conf directory of your BookKeeper installation."><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/4.14.8/reference/config"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.14.8/reference/config" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.14.8/reference/config" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -22,7 +22,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/4.14.8/reference/metrics/index.html b/content/docs/4.14.8/reference/metrics/index.html
index 9e8d7fc..39e2c1c 100644
--- a/content/docs/4.14.8/reference/metrics/index.html
+++ b/content/docs/4.14.8/reference/metrics/index.html
@@ -4,12 +4,12 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">BookKeeper metrics reference | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/4.14.8/reference/metrics"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.14.8"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.14.8"><meta data-rh="true" name="docsearch:version" content="4.14.8"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.14.8"><meta data-rh="true" property="og:title" content="BookKeeper metrics reference | Apache BookKeeper"><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/4.14.8/reference/metrics"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.14.8/reference/metrics" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.14.8/reference/metrics" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
-<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navbar__brand" href="/"><div class="navbar__logo"><img src="/img/bk-logo.svg" alt="Apache Bookkeeper" class="themedImage_ToTc themedImage--light_HNdA"><img src="/img/bk-logo.svg" alt="Apache Bookkeeper" class="themedImage_ToTc themedImage--dark_i4oU"></div><b class="navbar__title text--truncate">Apache BookKeeper</b></a><a class="navbar__item navbar__link" href="/docs/4.14.8/overview/">Documentation</a><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Community</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/community/mailing-lists">Mailing lists</a></li><li><a class="dropdown__link" href="/community/slack">Slack</a></li><li><a href="https://github.com/apache/bookkeeper/issues" target="_blank" rel="noopener noreferrer" class="dropdown__link">Github issues<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a class="dropdown__link" href="/community/releases">Release management</a></li><li><a class="dropdown__link" href="/community/meeting">Community meetings</a></li><li><a class="dropdown__link" href="/community/contributing">Contribution guide</a></li><li><a class="dropdown__link" href="/community/coding-guide">Coding guide</a></li><li><a class="dropdown__link" href="/community/testing">Testing guide</a></li><li><a class="dropdown__link" href="/community/issue-report">Issue report guide</a></li><li><a class="dropdown__link" href="/community/release-guide">Release guide</a></li><li><a class="dropdown__link" href="/community/presentations">Presentations</a></li><li><a class="dropdown__link" href="/community/bookkeeper-proposals">BookKeeper proposals (BP)</a></li></ul></div><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Project</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/project/who">Who are we?</a></li><li><a class="dropdown__link" href="/project/bylaws">Bylaws</a></li><li><a href="https://apache.org/licenses" target="_blank" rel="noopener noreferrer" class="dropdown__link">License<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a class="dropdown__link" href="/project/privacy">Privacy policy</a></li><li><a href="https://www.apache.org/foundation/sponsorship.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Sponsorship<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a href="https://www.apache.org/foundation/thanks.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Thanks<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div></div><div class="navbar__items navbar__items--right"><div class="navbar__item dropdown dropdown--hoverable dropdown--right"><a class="navbar__link" aria-haspopup="true" aria-expanded="false" role="button" href="/docs/4.14.8/overview/">4.14.8</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/docs/next/overview/">Next</a></li><li><a class="dropdown__link" href="/docs/admin/autorecovery">4.17.0</a></li><li><a class="dropdown__link" href="/docs/4.16.5/overview/">4.16.5</a></li><li><a class="dropdown__link" href="/docs/4.15.5/overview/">4.15.5</a></li><li><a aria-current="page" class="dropdown__link dropdown__link--active" href="/docs/4.14.8/reference/metrics">4.14.8</a></li><li><a class="dropdown__link" href="/docs/4.13.0/reference/metrics">4.13.0</a></li><li><a class="dropdown__link" href="/docs/4.12.1/reference/metrics">4.12.1</a></li><li><a class="dropdown__link" href="/docs/4.11.1/reference/metrics">4.11.1</a></li><li><a class="dropdown__link" href="/docs/4.10.0/reference/metrics">4.10.0</a></li><li><a class="dropdown__link" href="/docs/4.9.2/reference/metrics">4.9.2</a></li><li><a class="dropdown__link" href="/docs/4.8.2/reference/metrics">4.8.2</a></li><li><a class="dropdown__link" href="/docs/4.7.3/reference/metrics">4.7.3</a></li><li><a class="dropdown__link" href="/docs/4.6.2/reference/metrics">4.6.2</a></li><li><a class="dropdown__link" href="/docs/4.5.1/reference/metrics">4.5.1</a></li></ul></div><a class="navbar__item navbar__link" href="/releases">Download</a><div class="toggle_vylO colorModeToggle_DEke"><button class="clean-btn toggleButton_gllP toggleButtonDisabled_aARS" type="button" disabled="" title="Switch between dark and light mode (currently light mode)" aria-label="Switch between dark and light mode (currently light mode)" aria-live="polite"><svg viewBox="0 0 24 24" width="24" height="24" class="lightToggleIcon_pyhR"><path fill="currentColor" d="M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"></path></svg><svg viewBox="0 0 24 24" width="24" height="24" class="darkToggleIcon_wfgR"><path fill="currentColor" d="M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"></path></svg></button></div><div class="searchBox_ZlJk"></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div></nav><div id="docusaurus_skipToContent_fallback" class="main-wrapper mainWrapper_z2l0 docsWrapper_BCFX"><button aria-label="Scroll back to top" class="clean-btn theme-back-to-top-button backToTopButton_sjWU" type="button"></button><div class="docPage__5DB"><main class="docMainContainer_gTbr docMainContainerEnhanced_Uz_u"><div class="container padding-top--md padding-bottom--lg"><div class="row"><div class="col docItemCol_VOVn"><div class="docItemContainer_Djhp"><article><span class="theme-doc-version-badge badge badge--secondary">Version: 4.14.8</span><div class="theme-doc-markdown markdown"><header><h1>BookKeeper metrics reference</h1></header></div></article><nav class="pagination-nav docusaurus-mt-lg" aria-label="Docs pages navigation"></nav></div></div></div></div></main></div></div><footer class="footer footer--dark"><div class="container container-fluid"><div class="row footer__links"><div class="col footer__col"><div class="footer__title">Documentation</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/docs/overview">Overview</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/getting-started/installation">Getting started</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/deployment/manual">Deployment</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/admin/bookies">Administration</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/api/overview">API</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/security/overview">Security</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/development/protocol">Development</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/reference/config">Reference</a></li></ul></div><div class="col footer__col"><div class="footer__title">Community</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/community/mailing-lists">Mailing lists</a></li><li class="footer__item"><a class="footer__link-item" href="/community/slack">Slack</a></li><li class="footer__item"><a href="https://github.com/apache/bookkeeper" target="_blank" rel="noopener noreferrer" class="footer__link-item">Github<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a href="https://twitter.com/asfbookkeeper" target="_blank" rel="noopener noreferrer" class="footer__link-item">Twitter<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div><div class="col footer__col"><div class="footer__title">Project</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/project/who">Who are we?</a></li><li class="footer__item"><a class="footer__link-item" href="/project/bylaws">Bylaws</a></li><li class="footer__item"><a href="https://apache.org/licenses" target="_blank" rel="noopener noreferrer" class="footer__link-item">License<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a class="footer__link-item" href="/project/privacy">Privacy policy</a></li><li class="footer__item"><a href="https://www.apache.org/foundation/sponsorship.html" target="_blank" rel="noopener noreferrer" class="footer__link-item">Sponsorship<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a href="https://www.apache.org/foundation/thanks.html" target="_blank" rel="noopener noreferrer" class="footer__link-item">Thanks<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div></div><div class="footer__bottom text--center"><div class="footer__copyright"><footer class="footer">
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navbar__brand" href="/"><div class="navbar__logo"><img src="/img/bk-logo.svg" alt="Apache Bookkeeper" class="themedImage_ToTc themedImage--light_HNdA"><img src="/img/bk-logo.svg" alt="Apache Bookkeeper" class="themedImage_ToTc themedImage--dark_i4oU"></div><b class="navbar__title text--truncate">Apache BookKeeper</b></a><a class="navbar__item navbar__link" href="/docs/4.14.8/overview/">Documentation</a><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Community</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/community/mailing-lists">Mailing lists</a></li><li><a class="dropdown__link" href="/community/slack">Slack</a></li><li><a href="https://github.com/apache/bookkeeper/issues" target="_blank" rel="noopener noreferrer" class="dropdown__link">Github issues<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a class="dropdown__link" href="/community/releases">Release management</a></li><li><a class="dropdown__link" href="/community/meeting">Community meetings</a></li><li><a class="dropdown__link" href="/community/contributing">Contribution guide</a></li><li><a class="dropdown__link" href="/community/coding-guide">Coding guide</a></li><li><a class="dropdown__link" href="/community/testing">Testing guide</a></li><li><a class="dropdown__link" href="/community/issue-report">Issue report guide</a></li><li><a class="dropdown__link" href="/community/release-guide">Release guide</a></li><li><a class="dropdown__link" href="/community/presentations">Presentations</a></li><li><a class="dropdown__link" href="/community/bookkeeper-proposals">BookKeeper proposals (BP)</a></li></ul></div><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Project</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/project/who">Who are we?</a></li><li><a class="dropdown__link" href="/project/bylaws">Bylaws</a></li><li><a href="https://apache.org/licenses" target="_blank" rel="noopener noreferrer" class="dropdown__link">License<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a class="dropdown__link" href="/project/privacy">Privacy policy</a></li><li><a href="https://www.apache.org/foundation/sponsorship.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Sponsorship<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a href="https://www.apache.org/foundation/thanks.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Thanks<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div></div><div class="navbar__items navbar__items--right"><div class="navbar__item dropdown dropdown--hoverable dropdown--right"><a class="navbar__link" aria-haspopup="true" aria-expanded="false" role="button" href="/docs/4.14.8/overview/">4.14.8</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/docs/next/overview/">Next</a></li><li><a class="dropdown__link" href="/docs/overview/">4.17.0</a></li><li><a class="dropdown__link" href="/docs/4.16.5/overview/">4.16.5</a></li><li><a class="dropdown__link" href="/docs/4.15.5/overview/">4.15.5</a></li><li><a aria-current="page" class="dropdown__link dropdown__link--active" href="/docs/4.14.8/reference/metrics">4.14.8</a></li><li><a class="dropdown__link" href="/docs/4.13.0/reference/metrics">4.13.0</a></li><li><a class="dropdown__link" href="/docs/4.12.1/reference/metrics">4.12.1</a></li><li><a class="dropdown__link" href="/docs/4.11.1/reference/metrics">4.11.1</a></li><li><a class="dropdown__link" href="/docs/4.10.0/reference/metrics">4.10.0</a></li><li><a class="dropdown__link" href="/docs/4.9.2/reference/metrics">4.9.2</a></li><li><a class="dropdown__link" href="/docs/4.8.2/reference/metrics">4.8.2</a></li><li><a class="dropdown__link" href="/docs/4.7.3/reference/metrics">4.7.3</a></li><li><a class="dropdown__link" href="/docs/4.6.2/reference/metrics">4.6.2</a></li><li><a class="dropdown__link" href="/docs/4.5.1/reference/metrics">4.5.1</a></li></ul></div><a class="navbar__item navbar__link" href="/releases">Download</a><div class="toggle_vylO colorModeToggle_DEke"><button class="clean-btn toggleButton_gllP toggleButtonDisabled_aARS" type="button" disabled="" title="Switch between dark and light mode (currently light mode)" aria-label="Switch between dark and light mode (currently light mode)" aria-live="polite"><svg viewBox="0 0 24 24" width="24" height="24" class="lightToggleIcon_pyhR"><path fill="currentColor" d="M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"></path></svg><svg viewBox="0 0 24 24" width="24" height="24" class="darkToggleIcon_wfgR"><path fill="currentColor" d="M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"></path></svg></button></div><div class="searchBox_ZlJk"></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div></nav><div id="docusaurus_skipToContent_fallback" class="main-wrapper mainWrapper_z2l0 docsWrapper_BCFX"><button aria-label="Scroll back to top" class="clean-btn theme-back-to-top-button backToTopButton_sjWU" type="button"></button><div class="docPage__5DB"><main class="docMainContainer_gTbr docMainContainerEnhanced_Uz_u"><div class="container padding-top--md padding-bottom--lg"><div class="row"><div class="col docItemCol_VOVn"><div class="docItemContainer_Djhp"><article><span class="theme-doc-version-badge badge badge--secondary">Version: 4.14.8</span><div class="theme-doc-markdown markdown"><header><h1>BookKeeper metrics reference</h1></header></div></article><nav class="pagination-nav docusaurus-mt-lg" aria-label="Docs pages navigation"></nav></div></div></div></div></main></div></div><footer class="footer footer--dark"><div class="container container-fluid"><div class="row footer__links"><div class="col footer__col"><div class="footer__title">Documentation</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/docs/overview">Overview</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/getting-started/installation">Getting started</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/deployment/manual">Deployment</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/admin/bookies">Administration</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/api/overview">API</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/security/overview">Security</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/development/protocol">Development</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/reference/config">Reference</a></li></ul></div><div class="col footer__col"><div class="footer__title">Community</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/community/mailing-lists">Mailing lists</a></li><li class="footer__item"><a class="footer__link-item" href="/community/slack">Slack</a></li><li class="footer__item"><a href="https://github.com/apache/bookkeeper" target="_blank" rel="noopener noreferrer" class="footer__link-item">Github<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a href="https://twitter.com/asfbookkeeper" target="_blank" rel="noopener noreferrer" class="footer__link-item">Twitter<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div><div class="col footer__col"><div class="footer__title">Project</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/project/who">Who are we?</a></li><li class="footer__item"><a class="footer__link-item" href="/project/bylaws">Bylaws</a></li><li class="footer__item"><a href="https://apache.org/licenses" target="_blank" rel="noopener noreferrer" class="footer__link-item">License<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a class="footer__link-item" href="/project/privacy">Privacy policy</a></li><li class="footer__item"><a href="https://www.apache.org/foundation/sponsorship.html" target="_blank" rel="noopener noreferrer" class="footer__link-item">Sponsorship<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a href="https://www.apache.org/foundation/thanks.html" target="_blank" rel="noopener noreferrer" class="footer__link-item">Thanks<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div></div><div class="footer__bottom text--center"><div class="footer__copyright"><footer class="footer">
         <div class="container">
           <div class="content has-text-centered">
             <p>
@@ -22,7 +22,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/4.14.8/security/overview/index.html b/content/docs/4.14.8/security/overview/index.html
index a4cf706..d9038f5 100644
--- a/content/docs/4.14.8/security/overview/index.html
+++ b/content/docs/4.14.8/security/overview/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">BookKeeper Security | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/4.14.8/security/overview"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.14.8"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.14.8"><meta data-rh="true" name="docsearch:version" content="4.14.8"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.14.8"><meta data-rh="true" property="og:title" content="BookKeeper Security | Apache BookKeeper"><meta data-rh="true" name="description" content="In the 4.5.0 release, the BookKeeper community added a number of features that can be used, together or separately, to secure a BookKeeper cluster."><meta data-rh="true" property="og:description" content="In the 4.5.0 release, the BookKeeper community added a number of features that can be used, together or separately, to secure a BookKeeper cluster."><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/4.14.8/security/overview"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.14.8/security/overview" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.14.8/security/overview" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -23,7 +23,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/4.14.8/security/sasl/index.html b/content/docs/4.14.8/security/sasl/index.html
index 44c2a16..7d6cb45 100644
--- a/content/docs/4.14.8/security/sasl/index.html
+++ b/content/docs/4.14.8/security/sasl/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">Authentication using SASL | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/4.14.8/security/sasl"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.14.8"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.14.8"><meta data-rh="true" name="docsearch:version" content="4.14.8"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.14.8"><meta data-rh="true" property="og:title" content="Authentication using SASL | Apache BookKeeper"><meta data-rh="true" name="description" content="Bookies support client authentication via SASL. Currently we only support GSSAPI (Kerberos). We will start"><meta data-rh="true" property="og:description" content="Bookies support client authentication via SASL. Currently we only support GSSAPI (Kerberos). We will start"><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/4.14.8/security/sasl"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.14.8/security/sasl" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.14.8/security/sasl" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -45,7 +45,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/4.14.8/security/tls/index.html b/content/docs/4.14.8/security/tls/index.html
index a33963a..0d50ebd 100644
--- a/content/docs/4.14.8/security/tls/index.html
+++ b/content/docs/4.14.8/security/tls/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">Encryption and Authentication using TLS | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/4.14.8/security/tls"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.14.8"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.14.8"><meta data-rh="true" name="docsearch:version" content="4.14.8"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.14.8"><meta data-rh="true" property="og:title" content="Encryption and Authentication using TLS | Apache BookKeeper"><meta data-rh="true" name="description" content="Apache BookKeeper allows clients and autorecovery daemons to communicate over TLS, although this is not enabled by default."><meta data-rh="true" property="og:description" content="Apache BookKeeper allows clients and autorecovery daemons to communicate over TLS, although this is not enabled by default."><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/4.14.8/security/tls"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.14.8/security/tls" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.14.8/security/tls" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -53,7 +53,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/4.14.8/security/zookeeper/index.html b/content/docs/4.14.8/security/zookeeper/index.html
index a1f4ac1..435ebcb 100644
--- a/content/docs/4.14.8/security/zookeeper/index.html
+++ b/content/docs/4.14.8/security/zookeeper/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">ZooKeeper Authentication | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/4.14.8/security/zookeeper"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.14.8"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.14.8"><meta data-rh="true" name="docsearch:version" content="4.14.8"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.14.8"><meta data-rh="true" property="og:title" content="ZooKeeper Authentication | Apache BookKeeper"><meta data-rh="true" name="description" content="New Clusters"><meta data-rh="true" property="og:description" content="New Clusters"><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/4.14.8/security/zookeeper"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.14.8/security/zookeeper" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.14.8/security/zookeeper" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -29,7 +29,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/4.15.5/admin/autorecovery/index.html b/content/docs/4.15.5/admin/autorecovery/index.html
index 4af3c8e..8e24975 100644
--- a/content/docs/4.15.5/admin/autorecovery/index.html
+++ b/content/docs/4.15.5/admin/autorecovery/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">Using AutoRecovery | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/4.15.5/admin/autorecovery"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.15.5"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.15.5"><meta data-rh="true" name="docsearch:version" content="4.15.5"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.15.5"><meta data-rh="true" property="og:title" content="Using AutoRecovery | Apache BookKeeper"><meta data-rh="true" name="description" content="When a bookie crashes, all ledgers on that bookie become under-replicated. In order to bring all ledgers in your BookKeeper cluster back to full replication, you&#x27;ll need to recover the data from any offline bookies. There are two ways to recover bookies&#x27; data:"><meta data-rh="true" property="og:description" content="When a bookie crashes, all ledgers on that bookie become under-replicated. In order to bring all ledgers in your BookKeeper cluster back to full replication, you&#x27;ll need to recover the data from any offline bookies. There are two ways to recover bookies&#x27; data:"><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/4.15.5/admin/autorecovery"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.15.5/admin/autorecovery" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.15.5/admin/autorecovery" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -23,7 +23,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/4.15.5/admin/bookies/index.html b/content/docs/4.15.5/admin/bookies/index.html
index 9bfb581..893fb16 100644
--- a/content/docs/4.15.5/admin/bookies/index.html
+++ b/content/docs/4.15.5/admin/bookies/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">BookKeeper administration | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/4.15.5/admin/bookies"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.15.5"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.15.5"><meta data-rh="true" name="docsearch:version" content="4.15.5"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.15.5"><meta data-rh="true" property="og:title" content="BookKeeper administration | Apache BookKeeper"><meta data-rh="true" name="description" content="This document is a guide to deploying, administering, and maintaining BookKeeper. It also discusses best practices and common problems."><meta data-rh="true" property="og:description" content="This document is a guide to deploying, administering, and maintaining BookKeeper. It also discusses best practices and common problems."><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/4.15.5/admin/bookies"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.15.5/admin/bookies" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.15.5/admin/bookies" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -22,7 +22,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/4.15.5/admin/decomission/index.html b/content/docs/4.15.5/admin/decomission/index.html
index 869392b..5fd7c71 100644
--- a/content/docs/4.15.5/admin/decomission/index.html
+++ b/content/docs/4.15.5/admin/decomission/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">Decommission Bookies | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/4.15.5/admin/decomission"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.15.5"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.15.5"><meta data-rh="true" name="docsearch:version" content="4.15.5"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.15.5"><meta data-rh="true" property="og:title" content="Decommission Bookies | Apache BookKeeper"><meta data-rh="true" name="description" content="In case the user wants to decommission a bookie, the following process is useful to follow in order to verify if the"><meta data-rh="true" property="og:description" content="In case the user wants to decommission a bookie, the following process is useful to follow in order to verify if the"><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/4.15.5/admin/decomission"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.15.5/admin/decomission" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.15.5/admin/decomission" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -33,7 +33,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/4.15.5/admin/geo-replication/index.html b/content/docs/4.15.5/admin/geo-replication/index.html
index e0d6548..c51bfca 100644
--- a/content/docs/4.15.5/admin/geo-replication/index.html
+++ b/content/docs/4.15.5/admin/geo-replication/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">Geo-replication | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/4.15.5/admin/geo-replication"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.15.5"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.15.5"><meta data-rh="true" name="docsearch:version" content="4.15.5"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.15.5"><meta data-rh="true" property="og:title" content="Geo-replication | Apache BookKeeper"><meta data-rh="true" name="description" content="Geo-replication is the replication of data across BookKeeper clusters. In order to enable geo-replication for a group of BookKeeper clusters,"><meta data-rh="true" property="og:description" content="Geo-replication is the replication of data across BookKeeper clusters. In order to enable geo-replication for a group of BookKeeper clusters,"><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/4.15.5/admin/geo-replication"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.15.5/admin/geo-replication" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.15.5/admin/geo-replication" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -22,7 +22,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/4.15.5/admin/http/index.html b/content/docs/4.15.5/admin/http/index.html
index 03d470e..33fa1fa 100644
--- a/content/docs/4.15.5/admin/http/index.html
+++ b/content/docs/4.15.5/admin/http/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">BookKeeper Admin REST API | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/4.15.5/admin/http"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.15.5"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.15.5"><meta data-rh="true" name="docsearch:version" content="4.15.5"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.15.5"><meta data-rh="true" property="og:title" content="BookKeeper Admin REST API | Apache BookKeeper"><meta data-rh="true" name="description" content="This document introduces BookKeeper HTTP endpoints, which can be used for BookKeeper administration."><meta data-rh="true" property="og:description" content="This document introduces BookKeeper HTTP endpoints, which can be used for BookKeeper administration."><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/4.15.5/admin/http"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.15.5/admin/http" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.15.5/admin/http" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -23,7 +23,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/4.15.5/admin/metrics/index.html b/content/docs/4.15.5/admin/metrics/index.html
index fd315e0..685fcfe 100644
--- a/content/docs/4.15.5/admin/metrics/index.html
+++ b/content/docs/4.15.5/admin/metrics/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">Metric collection | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/4.15.5/admin/metrics"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.15.5"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.15.5"><meta data-rh="true" name="docsearch:version" content="4.15.5"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.15.5"><meta data-rh="true" property="og:title" content="Metric collection | Apache BookKeeper"><meta data-rh="true" name="description" content="BookKeeper enables metrics collection through a variety of stats providers."><meta data-rh="true" property="og:description" content="BookKeeper enables metrics collection through a variety of stats providers."><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/4.15.5/admin/metrics"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.15.5/admin/metrics" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.15.5/admin/metrics" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -22,7 +22,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/4.15.5/admin/perf/index.html b/content/docs/4.15.5/admin/perf/index.html
index cf75514..f8aece2 100644
--- a/content/docs/4.15.5/admin/perf/index.html
+++ b/content/docs/4.15.5/admin/perf/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">Performance tuning | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/4.15.5/admin/perf"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.15.5"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.15.5"><meta data-rh="true" name="docsearch:version" content="4.15.5"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.15.5"><meta data-rh="true" property="og:title" content="Performance tuning | Apache BookKeeper"><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/4.15.5/admin/perf"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.15.5/admin/perf" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.15.5/admin/perf" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -22,7 +22,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/4.15.5/admin/placement/index.html b/content/docs/4.15.5/admin/placement/index.html
index 71089fb..69d4496 100644
--- a/content/docs/4.15.5/admin/placement/index.html
+++ b/content/docs/4.15.5/admin/placement/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">Customized placement policies | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/4.15.5/admin/placement"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.15.5"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.15.5"><meta data-rh="true" name="docsearch:version" content="4.15.5"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.15.5"><meta data-rh="true" property="og:title" content="Customized placement policies | Apache BookKeeper"><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/4.15.5/admin/placement"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.15.5/admin/placement" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.15.5/admin/placement" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -22,7 +22,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/4.15.5/admin/upgrade/index.html b/content/docs/4.15.5/admin/upgrade/index.html
index e3f2445..0b630fc 100644
--- a/content/docs/4.15.5/admin/upgrade/index.html
+++ b/content/docs/4.15.5/admin/upgrade/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">Upgrade | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/4.15.5/admin/upgrade"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.15.5"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.15.5"><meta data-rh="true" name="docsearch:version" content="4.15.5"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.15.5"><meta data-rh="true" property="og:title" content="Upgrade | Apache BookKeeper"><meta data-rh="true" name="description" content="If you have questions about upgrades (or need help), please feel free to reach out to us by mailing list or Slack Channel."><meta data-rh="true" property="og:description" content="If you have questions about upgrades (or need help), please feel free to reach out to us by mailing list or Slack Channel."><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/4.15.5/admin/upgrade"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.15.5/admin/upgrade" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.15.5/admin/upgrade" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -29,7 +29,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/4.15.5/api/distributedlog-api/index.html b/content/docs/4.15.5/api/distributedlog-api/index.html
index 0a5d3ee..20af8c9 100644
--- a/content/docs/4.15.5/api/distributedlog-api/index.html
+++ b/content/docs/4.15.5/api/distributedlog-api/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">DistributedLog | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/4.15.5/api/distributedlog-api"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.15.5"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.15.5"><meta data-rh="true" name="docsearch:version" content="4.15.5"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.15.5"><meta data-rh="true" property="og:title" content="DistributedLog | Apache BookKeeper"><meta data-rh="true" name="description" content="DistributedLog began its life as a separate project under the Apache Foundation. It was merged into BookKeeper in 2017."><meta data-rh="true" property="og:description" content="DistributedLog began its life as a separate project under the Apache Foundation. It was merged into BookKeeper in 2017."><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/4.15.5/api/distributedlog-api"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.15.5/api/distributedlog-api" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.15.5/api/distributedlog-api" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -22,7 +22,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/4.15.5/api/ledger-adv-api/index.html b/content/docs/4.15.5/api/ledger-adv-api/index.html
index f718718..f5662ba 100644
--- a/content/docs/4.15.5/api/ledger-adv-api/index.html
+++ b/content/docs/4.15.5/api/ledger-adv-api/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">The Advanced Ledger API | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/4.15.5/api/ledger-adv-api"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.15.5"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.15.5"><meta data-rh="true" name="docsearch:version" content="4.15.5"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.15.5"><meta data-rh="true" property="og:title" content="The Advanced Ledger API | Apache BookKeeper"><meta data-rh="true" name="description" content="In release 4.5.0, Apache BookKeeper introduces a few advanced API for advanced usage."><meta data-rh="true" property="og:description" content="In release 4.5.0, Apache BookKeeper introduces a few advanced API for advanced usage."><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/4.15.5/api/ledger-adv-api"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.15.5/api/ledger-adv-api" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.15.5/api/ledger-adv-api" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -27,7 +27,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/4.15.5/api/ledger-api/index.html b/content/docs/4.15.5/api/ledger-api/index.html
index 9e9c974..2153783 100644
--- a/content/docs/4.15.5/api/ledger-api/index.html
+++ b/content/docs/4.15.5/api/ledger-api/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">The Ledger API | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/4.15.5/api/ledger-api"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.15.5"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.15.5"><meta data-rh="true" name="docsearch:version" content="4.15.5"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.15.5"><meta data-rh="true" property="og:title" content="The Ledger API | Apache BookKeeper"><meta data-rh="true" name="description" content="The ledger API is a lower-level API for BookKeeper that enables you to interact with ledgers directly."><meta data-rh="true" property="og:description" content="The ledger API is a lower-level API for BookKeeper that enables you to interact with ledgers directly."><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/4.15.5/api/ledger-api"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.15.5/api/ledger-api" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.15.5/api/ledger-api" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -46,7 +46,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/4.15.5/api/overview/index.html b/content/docs/4.15.5/api/overview/index.html
index 2e4bbeb..124afd2 100644
--- a/content/docs/4.15.5/api/overview/index.html
+++ b/content/docs/4.15.5/api/overview/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">BookKeeper API | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/4.15.5/api/overview"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.15.5"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.15.5"><meta data-rh="true" name="docsearch:version" content="4.15.5"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.15.5"><meta data-rh="true" property="og:title" content="BookKeeper API | Apache BookKeeper"><meta data-rh="true" name="description" content="BookKeeper offers a few APIs that applications can use to interact with it:"><meta data-rh="true" property="og:description" content="BookKeeper offers a few APIs that applications can use to interact with it:"><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/4.15.5/api/overview"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.15.5/api/overview" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.15.5/api/overview" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -24,7 +24,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/4.15.5/deployment/kubernetes/index.html b/content/docs/4.15.5/deployment/kubernetes/index.html
index f2e634d..91dc51e 100644
--- a/content/docs/4.15.5/deployment/kubernetes/index.html
+++ b/content/docs/4.15.5/deployment/kubernetes/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">Deploying Apache BookKeeper on Kubernetes | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/4.15.5/deployment/kubernetes"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.15.5"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.15.5"><meta data-rh="true" name="docsearch:version" content="4.15.5"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.15.5"><meta data-rh="true" property="og:title" content="Deploying Apache BookKeeper on Kubernetes | Apache BookKeeper"><meta data-rh="true" name="description" content="Apache BookKeeper can be easily deployed in Kubernetes clusters. The managed clusters on Google Container Engine is the most convenient way."><meta data-rh="true" property="og:description" content="Apache BookKeeper can be easily deployed in Kubernetes clusters. The managed clusters on Google Container Engine is the most convenient way."><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/4.15.5/deployment/kubernetes"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.15.5/deployment/kubernetes" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.15.5/deployment/kubernetes" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -29,7 +29,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/4.15.5/deployment/manual/index.html b/content/docs/4.15.5/deployment/manual/index.html
index 9bbbff3..856b79d 100644
--- a/content/docs/4.15.5/deployment/manual/index.html
+++ b/content/docs/4.15.5/deployment/manual/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">Manual deployment | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/4.15.5/deployment/manual"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.15.5"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.15.5"><meta data-rh="true" name="docsearch:version" content="4.15.5"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.15.5"><meta data-rh="true" property="og:title" content="Manual deployment | Apache BookKeeper"><meta data-rh="true" name="description" content="A BookKeeper cluster consists of two main components:"><meta data-rh="true" property="og:description" content="A BookKeeper cluster consists of two main components:"><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/4.15.5/deployment/manual"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.15.5/deployment/manual" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.15.5/deployment/manual" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -22,7 +22,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/4.15.5/development/codebase/index.html b/content/docs/4.15.5/development/codebase/index.html
index cb563e5..3d3af0e 100644
--- a/content/docs/4.15.5/development/codebase/index.html
+++ b/content/docs/4.15.5/development/codebase/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">The BookKeeper codebase | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/4.15.5/development/codebase"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.15.5"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.15.5"><meta data-rh="true" name="docsearch:version" content="4.15.5"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.15.5"><meta data-rh="true" property="og:title" content="The BookKeeper codebase | Apache BookKeeper"><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/4.15.5/development/codebase"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.15.5/development/codebase" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.15.5/development/codebase" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -22,7 +22,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/4.15.5/development/protocol/index.html b/content/docs/4.15.5/development/protocol/index.html
index 169d043..964febe 100644
--- a/content/docs/4.15.5/development/protocol/index.html
+++ b/content/docs/4.15.5/development/protocol/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">The BookKeeper protocol | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/4.15.5/development/protocol"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.15.5"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.15.5"><meta data-rh="true" name="docsearch:version" content="4.15.5"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.15.5"><meta data-rh="true" property="og:title" content="The BookKeeper protocol | Apache BookKeeper"><meta data-rh="true" name="description" content="BookKeeper uses a special replication protocol for guaranteeing persistent storage of entries in an ensemble of bookies."><meta data-rh="true" property="og:description" content="BookKeeper uses a special replication protocol for guaranteeing persistent storage of entries in an ensemble of bookies."><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/4.15.5/development/protocol"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.15.5/development/protocol" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.15.5/development/protocol" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -22,7 +22,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/4.15.5/getting-started/concepts/index.html b/content/docs/4.15.5/getting-started/concepts/index.html
index 636fcec..1aacafc 100644
--- a/content/docs/4.15.5/getting-started/concepts/index.html
+++ b/content/docs/4.15.5/getting-started/concepts/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">BookKeeper concepts and architecture | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/4.15.5/getting-started/concepts"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.15.5"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.15.5"><meta data-rh="true" name="docsearch:version" content="4.15.5"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.15.5"><meta data-rh="true" property="og:title" content="BookKeeper concepts and architecture | Apache BookKeeper"><meta data-rh="true" name="description" content="BookKeeper is a service that provides persistent storage of streams of log entries---aka records---in sequences called ledgers. BookKeeper replicates stored entries across multiple servers."><meta data-rh="true" property="og:description" content="BookKeeper is a service that provides persistent storage of streams of log entries---aka records---in sequences called ledgers. BookKeeper replicates stored entries across multiple servers."><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/4.15.5/getting-started/concepts"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.15.5/getting-started/concepts" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.15.5/getting-started/concepts" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -22,7 +22,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/4.15.5/getting-started/installation/index.html b/content/docs/4.15.5/getting-started/installation/index.html
index 4c8d672..1f05f84 100644
--- a/content/docs/4.15.5/getting-started/installation/index.html
+++ b/content/docs/4.15.5/getting-started/installation/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">BookKeeper installation | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/4.15.5/getting-started/installation"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.15.5"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.15.5"><meta data-rh="true" name="docsearch:version" content="4.15.5"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.15.5"><meta data-rh="true" property="og:title" content="BookKeeper installation | Apache BookKeeper"><meta data-rh="true" name="description" content="You can install BookKeeper either by downloading a GZipped tarball package, using the Docker image or cloning the BookKeeper repository."><meta data-rh="true" property="og:description" content="You can install BookKeeper either by downloading a GZipped tarball package, using the Docker image or cloning the BookKeeper repository."><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/4.15.5/getting-started/installation"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.15.5/getting-started/installation" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.15.5/getting-started/installation" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -22,7 +22,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/4.15.5/getting-started/run-locally/index.html b/content/docs/4.15.5/getting-started/run-locally/index.html
index c0680d5..0a8466b 100644
--- a/content/docs/4.15.5/getting-started/run-locally/index.html
+++ b/content/docs/4.15.5/getting-started/run-locally/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">Run bookies locally | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/4.15.5/getting-started/run-locally"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.15.5"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.15.5"><meta data-rh="true" name="docsearch:version" content="4.15.5"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.15.5"><meta data-rh="true" property="og:title" content="Run bookies locally | Apache BookKeeper"><meta data-rh="true" name="description" content="Bookies are individual BookKeeper servers. You can run an ensemble of bookies locally on a single machine using the localbookie command of the bookkeeper CLI tool and specifying the number of bookies you&#x27;d like to include in the ensemble."><meta data-rh="true" property="og:description" content="Bookies are individual BookKeeper servers. You can run an ensemble of bookies locally on a single machine using the localbookie command of the bookkeeper CLI tool and specifying the number of bookies you&#x27;d like to include in the ensemble."><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/4.15.5/getting-started/run-locally"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.15.5/getting-started/run-locally" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.15.5/getting-started/run-locally" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -22,7 +22,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/4.15.5/overview/index.html b/content/docs/4.15.5/overview/index.html
index b5f0e35..c2f7a7d 100644
--- a/content/docs/4.15.5/overview/index.html
+++ b/content/docs/4.15.5/overview/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">Apache BookKeeper 4.15.5 | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/4.15.5/overview/"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.15.5"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.15.5"><meta data-rh="true" name="docsearch:version" content="4.15.5"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.15.5"><meta data-rh="true" property="og:title" content="Apache BookKeeper 4.15.5 | Apache BookKeeper"><meta data-rh="true" name="description" content="&lt;!--"><meta data-rh="true" property="og:description" content="&lt;!--"><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/4.15.5/overview/"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.15.5/overview/" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.15.5/overview/" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -24,7 +24,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/4.15.5/reference/cli/index.html b/content/docs/4.15.5/reference/cli/index.html
index bab4e45..14655dc 100644
--- a/content/docs/4.15.5/reference/cli/index.html
+++ b/content/docs/4.15.5/reference/cli/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">BookKeeper CLI tool reference | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/4.15.5/reference/cli"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.15.5"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.15.5"><meta data-rh="true" name="docsearch:version" content="4.15.5"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.15.5"><meta data-rh="true" property="og:title" content="BookKeeper CLI tool reference | Apache BookKeeper"><meta data-rh="true" name="description" content="bookkeeper command"><meta data-rh="true" property="og:description" content="bookkeeper command"><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/4.15.5/reference/cli"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.15.5/reference/cli" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.15.5/reference/cli" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -29,7 +29,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/4.15.5/reference/config/index.html b/content/docs/4.15.5/reference/config/index.html
index 84e2652..cda4d60 100644
--- a/content/docs/4.15.5/reference/config/index.html
+++ b/content/docs/4.15.5/reference/config/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">BookKeeper configuration | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/4.15.5/reference/config"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.15.5"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.15.5"><meta data-rh="true" name="docsearch:version" content="4.15.5"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.15.5"><meta data-rh="true" property="og:title" content="BookKeeper configuration | Apache BookKeeper"><meta data-rh="true" name="description" content="The table below lists parameters that you can set to configure bookies. All configuration takes place in the bk_server.conf file in the bookkeeper-server/conf directory of your BookKeeper installation."><meta data-rh="true" property="og:description" content="The table below lists parameters that you can set to configure bookies. All configuration takes place in the bk_server.conf file in the bookkeeper-server/conf directory of your BookKeeper installation."><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/4.15.5/reference/config"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.15.5/reference/config" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.15.5/reference/config" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -27,7 +27,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/4.15.5/security/overview/index.html b/content/docs/4.15.5/security/overview/index.html
index 6e6051a..4b0bd35 100644
--- a/content/docs/4.15.5/security/overview/index.html
+++ b/content/docs/4.15.5/security/overview/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">BookKeeper Security | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/4.15.5/security/overview"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.15.5"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.15.5"><meta data-rh="true" name="docsearch:version" content="4.15.5"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.15.5"><meta data-rh="true" property="og:title" content="BookKeeper Security | Apache BookKeeper"><meta data-rh="true" name="description" content="In the 4.5.0 release, the BookKeeper community added a number of features that can be used, together or separately, to secure a BookKeeper cluster."><meta data-rh="true" property="og:description" content="In the 4.5.0 release, the BookKeeper community added a number of features that can be used, together or separately, to secure a BookKeeper cluster."><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/4.15.5/security/overview"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.15.5/security/overview" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.15.5/security/overview" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -23,7 +23,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/4.15.5/security/sasl/index.html b/content/docs/4.15.5/security/sasl/index.html
index f8ff317..c344049 100644
--- a/content/docs/4.15.5/security/sasl/index.html
+++ b/content/docs/4.15.5/security/sasl/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">Authentication using SASL | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/4.15.5/security/sasl"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.15.5"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.15.5"><meta data-rh="true" name="docsearch:version" content="4.15.5"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.15.5"><meta data-rh="true" property="og:title" content="Authentication using SASL | Apache BookKeeper"><meta data-rh="true" name="description" content="Bookies support client authentication via SASL. Currently we only support GSSAPI (Kerberos). We will start"><meta data-rh="true" property="og:description" content="Bookies support client authentication via SASL. Currently we only support GSSAPI (Kerberos). We will start"><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/4.15.5/security/sasl"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.15.5/security/sasl" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.15.5/security/sasl" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -45,7 +45,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/4.15.5/security/tls/index.html b/content/docs/4.15.5/security/tls/index.html
index 8c8683d..0b3ff4f 100644
--- a/content/docs/4.15.5/security/tls/index.html
+++ b/content/docs/4.15.5/security/tls/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">Encryption and Authentication using TLS | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/4.15.5/security/tls"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.15.5"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.15.5"><meta data-rh="true" name="docsearch:version" content="4.15.5"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.15.5"><meta data-rh="true" property="og:title" content="Encryption and Authentication using TLS | Apache BookKeeper"><meta data-rh="true" name="description" content="Apache BookKeeper allows clients and autorecovery daemons to communicate over TLS, although this is not enabled by default."><meta data-rh="true" property="og:description" content="Apache BookKeeper allows clients and autorecovery daemons to communicate over TLS, although this is not enabled by default."><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/4.15.5/security/tls"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.15.5/security/tls" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.15.5/security/tls" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -53,7 +53,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/4.15.5/security/zookeeper/index.html b/content/docs/4.15.5/security/zookeeper/index.html
index 6f129bb..a6b988b 100644
--- a/content/docs/4.15.5/security/zookeeper/index.html
+++ b/content/docs/4.15.5/security/zookeeper/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">ZooKeeper Authentication | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/4.15.5/security/zookeeper"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.15.5"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.15.5"><meta data-rh="true" name="docsearch:version" content="4.15.5"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.15.5"><meta data-rh="true" property="og:title" content="ZooKeeper Authentication | Apache BookKeeper"><meta data-rh="true" name="description" content="New Clusters"><meta data-rh="true" property="og:description" content="New Clusters"><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/4.15.5/security/zookeeper"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.15.5/security/zookeeper" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.15.5/security/zookeeper" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -29,7 +29,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/4.16.5/admin/autorecovery/index.html b/content/docs/4.16.5/admin/autorecovery/index.html
index f64b8fc..4480cbd 100644
--- a/content/docs/4.16.5/admin/autorecovery/index.html
+++ b/content/docs/4.16.5/admin/autorecovery/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">Using AutoRecovery | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/4.16.5/admin/autorecovery"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.16.5"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.16.5"><meta data-rh="true" name="docsearch:version" content="4.16.5"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.16.5"><meta data-rh="true" property="og:title" content="Using AutoRecovery | Apache BookKeeper"><meta data-rh="true" name="description" content="When a bookie crashes, all ledgers on that bookie become under-replicated. In order to bring all ledgers in your BookKeeper cluster back to full replication, you&#x27;ll need to recover the data from any offline bookies. There are two ways to recover bookies&#x27; data:"><meta data-rh="true" property="og:description" content="When a bookie crashes, all ledgers on that bookie become under-replicated. In order to bring all ledgers in your BookKeeper cluster back to full replication, you&#x27;ll need to recover the data from any offline bookies. There are two ways to recover bookies&#x27; data:"><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/4.16.5/admin/autorecovery"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.16.5/admin/autorecovery" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.16.5/admin/autorecovery" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -23,7 +23,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/4.16.5/admin/bookies/index.html b/content/docs/4.16.5/admin/bookies/index.html
index 0411ec4..8a687cb 100644
--- a/content/docs/4.16.5/admin/bookies/index.html
+++ b/content/docs/4.16.5/admin/bookies/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">BookKeeper administration | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/4.16.5/admin/bookies"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.16.5"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.16.5"><meta data-rh="true" name="docsearch:version" content="4.16.5"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.16.5"><meta data-rh="true" property="og:title" content="BookKeeper administration | Apache BookKeeper"><meta data-rh="true" name="description" content="This document is a guide to deploying, administering, and maintaining BookKeeper. It also discusses best practices and common problems."><meta data-rh="true" property="og:description" content="This document is a guide to deploying, administering, and maintaining BookKeeper. It also discusses best practices and common problems."><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/4.16.5/admin/bookies"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.16.5/admin/bookies" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.16.5/admin/bookies" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -22,7 +22,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/4.16.5/admin/decomission/index.html b/content/docs/4.16.5/admin/decomission/index.html
index 7947653..9aa95dc 100644
--- a/content/docs/4.16.5/admin/decomission/index.html
+++ b/content/docs/4.16.5/admin/decomission/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">Decommission Bookies | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/4.16.5/admin/decomission"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.16.5"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.16.5"><meta data-rh="true" name="docsearch:version" content="4.16.5"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.16.5"><meta data-rh="true" property="og:title" content="Decommission Bookies | Apache BookKeeper"><meta data-rh="true" name="description" content="In case the user wants to decommission a bookie, the following process is useful to follow in order to verify if the"><meta data-rh="true" property="og:description" content="In case the user wants to decommission a bookie, the following process is useful to follow in order to verify if the"><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/4.16.5/admin/decomission"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.16.5/admin/decomission" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.16.5/admin/decomission" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -33,7 +33,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/4.16.5/admin/geo-replication/index.html b/content/docs/4.16.5/admin/geo-replication/index.html
index 23d464b..7fe741d 100644
--- a/content/docs/4.16.5/admin/geo-replication/index.html
+++ b/content/docs/4.16.5/admin/geo-replication/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">Geo-replication | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/4.16.5/admin/geo-replication"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.16.5"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.16.5"><meta data-rh="true" name="docsearch:version" content="4.16.5"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.16.5"><meta data-rh="true" property="og:title" content="Geo-replication | Apache BookKeeper"><meta data-rh="true" name="description" content="Geo-replication is the replication of data across BookKeeper clusters. In order to enable geo-replication for a group of BookKeeper clusters,"><meta data-rh="true" property="og:description" content="Geo-replication is the replication of data across BookKeeper clusters. In order to enable geo-replication for a group of BookKeeper clusters,"><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/4.16.5/admin/geo-replication"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.16.5/admin/geo-replication" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.16.5/admin/geo-replication" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -22,7 +22,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/4.16.5/admin/http/index.html b/content/docs/4.16.5/admin/http/index.html
index a65c976..ac33079 100644
--- a/content/docs/4.16.5/admin/http/index.html
+++ b/content/docs/4.16.5/admin/http/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">BookKeeper Admin REST API | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/4.16.5/admin/http"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.16.5"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.16.5"><meta data-rh="true" name="docsearch:version" content="4.16.5"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.16.5"><meta data-rh="true" property="og:title" content="BookKeeper Admin REST API | Apache BookKeeper"><meta data-rh="true" name="description" content="This document introduces BookKeeper HTTP endpoints, which can be used for BookKeeper administration."><meta data-rh="true" property="og:description" content="This document introduces BookKeeper HTTP endpoints, which can be used for BookKeeper administration."><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/4.16.5/admin/http"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.16.5/admin/http" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.16.5/admin/http" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -25,7 +25,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/4.16.5/admin/metrics/index.html b/content/docs/4.16.5/admin/metrics/index.html
index 4ffc621..1d04ea3 100644
--- a/content/docs/4.16.5/admin/metrics/index.html
+++ b/content/docs/4.16.5/admin/metrics/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">Metric collection | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/4.16.5/admin/metrics"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.16.5"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.16.5"><meta data-rh="true" name="docsearch:version" content="4.16.5"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.16.5"><meta data-rh="true" property="og:title" content="Metric collection | Apache BookKeeper"><meta data-rh="true" name="description" content="BookKeeper enables metrics collection through a variety of stats providers."><meta data-rh="true" property="og:description" content="BookKeeper enables metrics collection through a variety of stats providers."><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/4.16.5/admin/metrics"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.16.5/admin/metrics" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.16.5/admin/metrics" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -22,7 +22,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/4.16.5/admin/perf/index.html b/content/docs/4.16.5/admin/perf/index.html
index cc576c5..d15e044 100644
--- a/content/docs/4.16.5/admin/perf/index.html
+++ b/content/docs/4.16.5/admin/perf/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">Performance tuning | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/4.16.5/admin/perf"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.16.5"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.16.5"><meta data-rh="true" name="docsearch:version" content="4.16.5"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.16.5"><meta data-rh="true" property="og:title" content="Performance tuning | Apache BookKeeper"><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/4.16.5/admin/perf"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.16.5/admin/perf" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.16.5/admin/perf" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -22,7 +22,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/4.16.5/admin/placement/index.html b/content/docs/4.16.5/admin/placement/index.html
index 23a3cd0..635dd77 100644
--- a/content/docs/4.16.5/admin/placement/index.html
+++ b/content/docs/4.16.5/admin/placement/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">Customized placement policies | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/4.16.5/admin/placement"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.16.5"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.16.5"><meta data-rh="true" name="docsearch:version" content="4.16.5"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.16.5"><meta data-rh="true" property="og:title" content="Customized placement policies | Apache BookKeeper"><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/4.16.5/admin/placement"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.16.5/admin/placement" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.16.5/admin/placement" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -22,7 +22,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/4.16.5/admin/upgrade/index.html b/content/docs/4.16.5/admin/upgrade/index.html
index 4c5720d..a7be7fb 100644
--- a/content/docs/4.16.5/admin/upgrade/index.html
+++ b/content/docs/4.16.5/admin/upgrade/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">Upgrade | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/4.16.5/admin/upgrade"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.16.5"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.16.5"><meta data-rh="true" name="docsearch:version" content="4.16.5"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.16.5"><meta data-rh="true" property="og:title" content="Upgrade | Apache BookKeeper"><meta data-rh="true" name="description" content="If you have questions about upgrades (or need help), please feel free to reach out to us by mailing list or Slack Channel."><meta data-rh="true" property="og:description" content="If you have questions about upgrades (or need help), please feel free to reach out to us by mailing list or Slack Channel."><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/4.16.5/admin/upgrade"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.16.5/admin/upgrade" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.16.5/admin/upgrade" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -29,7 +29,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/4.16.5/api/distributedlog-api/index.html b/content/docs/4.16.5/api/distributedlog-api/index.html
index 1208e4d..3274d9c 100644
--- a/content/docs/4.16.5/api/distributedlog-api/index.html
+++ b/content/docs/4.16.5/api/distributedlog-api/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">DistributedLog | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/4.16.5/api/distributedlog-api"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.16.5"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.16.5"><meta data-rh="true" name="docsearch:version" content="4.16.5"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.16.5"><meta data-rh="true" property="og:title" content="DistributedLog | Apache BookKeeper"><meta data-rh="true" name="description" content="DistributedLog began its life as a separate project under the Apache Foundation. It was merged into BookKeeper in 2017."><meta data-rh="true" property="og:description" content="DistributedLog began its life as a separate project under the Apache Foundation. It was merged into BookKeeper in 2017."><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/4.16.5/api/distributedlog-api"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.16.5/api/distributedlog-api" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.16.5/api/distributedlog-api" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -22,7 +22,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/4.16.5/api/ledger-adv-api/index.html b/content/docs/4.16.5/api/ledger-adv-api/index.html
index 60a912a..e71fc7f 100644
--- a/content/docs/4.16.5/api/ledger-adv-api/index.html
+++ b/content/docs/4.16.5/api/ledger-adv-api/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">The Advanced Ledger API | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/4.16.5/api/ledger-adv-api"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.16.5"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.16.5"><meta data-rh="true" name="docsearch:version" content="4.16.5"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.16.5"><meta data-rh="true" property="og:title" content="The Advanced Ledger API | Apache BookKeeper"><meta data-rh="true" name="description" content="In release 4.5.0, Apache BookKeeper introduces a few advanced API for advanced usage."><meta data-rh="true" property="og:description" content="In release 4.5.0, Apache BookKeeper introduces a few advanced API for advanced usage."><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/4.16.5/api/ledger-adv-api"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.16.5/api/ledger-adv-api" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.16.5/api/ledger-adv-api" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -27,7 +27,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/4.16.5/api/ledger-api/index.html b/content/docs/4.16.5/api/ledger-api/index.html
index bc4faa9..f3ff117 100644
--- a/content/docs/4.16.5/api/ledger-api/index.html
+++ b/content/docs/4.16.5/api/ledger-api/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">The Ledger API | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/4.16.5/api/ledger-api"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.16.5"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.16.5"><meta data-rh="true" name="docsearch:version" content="4.16.5"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.16.5"><meta data-rh="true" property="og:title" content="The Ledger API | Apache BookKeeper"><meta data-rh="true" name="description" content="The ledger API is a lower-level API for BookKeeper that enables you to interact with ledgers directly."><meta data-rh="true" property="og:description" content="The ledger API is a lower-level API for BookKeeper that enables you to interact with ledgers directly."><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/4.16.5/api/ledger-api"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.16.5/api/ledger-api" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.16.5/api/ledger-api" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -46,7 +46,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/4.16.5/api/overview/index.html b/content/docs/4.16.5/api/overview/index.html
index 9fbca70..e910928 100644
--- a/content/docs/4.16.5/api/overview/index.html
+++ b/content/docs/4.16.5/api/overview/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">BookKeeper API | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/4.16.5/api/overview"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.16.5"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.16.5"><meta data-rh="true" name="docsearch:version" content="4.16.5"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.16.5"><meta data-rh="true" property="og:title" content="BookKeeper API | Apache BookKeeper"><meta data-rh="true" name="description" content="BookKeeper offers a few APIs that applications can use to interact with it:"><meta data-rh="true" property="og:description" content="BookKeeper offers a few APIs that applications can use to interact with it:"><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/4.16.5/api/overview"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.16.5/api/overview" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.16.5/api/overview" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -24,7 +24,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/4.16.5/deployment/kubernetes/index.html b/content/docs/4.16.5/deployment/kubernetes/index.html
index 7e507f3..e98c253 100644
--- a/content/docs/4.16.5/deployment/kubernetes/index.html
+++ b/content/docs/4.16.5/deployment/kubernetes/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">Deploying Apache BookKeeper on Kubernetes | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/4.16.5/deployment/kubernetes"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.16.5"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.16.5"><meta data-rh="true" name="docsearch:version" content="4.16.5"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.16.5"><meta data-rh="true" property="og:title" content="Deploying Apache BookKeeper on Kubernetes | Apache BookKeeper"><meta data-rh="true" name="description" content="Apache BookKeeper can be easily deployed in Kubernetes clusters. The managed clusters on Google Container Engine is the most convenient way."><meta data-rh="true" property="og:description" content="Apache BookKeeper can be easily deployed in Kubernetes clusters. The managed clusters on Google Container Engine is the most convenient way."><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/4.16.5/deployment/kubernetes"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.16.5/deployment/kubernetes" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.16.5/deployment/kubernetes" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -29,7 +29,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/4.16.5/deployment/manual/index.html b/content/docs/4.16.5/deployment/manual/index.html
index 3fd4e1f..da52231 100644
--- a/content/docs/4.16.5/deployment/manual/index.html
+++ b/content/docs/4.16.5/deployment/manual/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">Manual deployment | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/4.16.5/deployment/manual"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.16.5"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.16.5"><meta data-rh="true" name="docsearch:version" content="4.16.5"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.16.5"><meta data-rh="true" property="og:title" content="Manual deployment | Apache BookKeeper"><meta data-rh="true" name="description" content="A BookKeeper cluster consists of two main components:"><meta data-rh="true" property="og:description" content="A BookKeeper cluster consists of two main components:"><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/4.16.5/deployment/manual"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.16.5/deployment/manual" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.16.5/deployment/manual" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -22,7 +22,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/4.16.5/development/codebase/index.html b/content/docs/4.16.5/development/codebase/index.html
index d117e9b..9127bc1 100644
--- a/content/docs/4.16.5/development/codebase/index.html
+++ b/content/docs/4.16.5/development/codebase/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">The BookKeeper codebase | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/4.16.5/development/codebase"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.16.5"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.16.5"><meta data-rh="true" name="docsearch:version" content="4.16.5"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.16.5"><meta data-rh="true" property="og:title" content="The BookKeeper codebase | Apache BookKeeper"><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/4.16.5/development/codebase"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.16.5/development/codebase" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.16.5/development/codebase" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -22,7 +22,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/4.16.5/development/protocol/index.html b/content/docs/4.16.5/development/protocol/index.html
index 270ba46..70b15a3 100644
--- a/content/docs/4.16.5/development/protocol/index.html
+++ b/content/docs/4.16.5/development/protocol/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">The BookKeeper protocol | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/4.16.5/development/protocol"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.16.5"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.16.5"><meta data-rh="true" name="docsearch:version" content="4.16.5"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.16.5"><meta data-rh="true" property="og:title" content="The BookKeeper protocol | Apache BookKeeper"><meta data-rh="true" name="description" content="BookKeeper uses a special replication protocol for guaranteeing persistent storage of entries in an ensemble of bookies."><meta data-rh="true" property="og:description" content="BookKeeper uses a special replication protocol for guaranteeing persistent storage of entries in an ensemble of bookies."><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/4.16.5/development/protocol"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.16.5/development/protocol" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.16.5/development/protocol" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -22,7 +22,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/4.16.5/getting-started/concepts/index.html b/content/docs/4.16.5/getting-started/concepts/index.html
index 7b27ac1..fd0bd66 100644
--- a/content/docs/4.16.5/getting-started/concepts/index.html
+++ b/content/docs/4.16.5/getting-started/concepts/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">BookKeeper concepts and architecture | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/4.16.5/getting-started/concepts"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.16.5"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.16.5"><meta data-rh="true" name="docsearch:version" content="4.16.5"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.16.5"><meta data-rh="true" property="og:title" content="BookKeeper concepts and architecture | Apache BookKeeper"><meta data-rh="true" name="description" content="BookKeeper is a service that provides persistent storage of streams of log entries---aka records---in sequences called ledgers. BookKeeper replicates stored entries across multiple servers."><meta data-rh="true" property="og:description" content="BookKeeper is a service that provides persistent storage of streams of log entries---aka records---in sequences called ledgers. BookKeeper replicates stored entries across multiple servers."><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/4.16.5/getting-started/concepts"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.16.5/getting-started/concepts" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.16.5/getting-started/concepts" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -22,7 +22,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/4.16.5/getting-started/installation/index.html b/content/docs/4.16.5/getting-started/installation/index.html
index c2d3545..ea99449 100644
--- a/content/docs/4.16.5/getting-started/installation/index.html
+++ b/content/docs/4.16.5/getting-started/installation/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">BookKeeper installation | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/4.16.5/getting-started/installation"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.16.5"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.16.5"><meta data-rh="true" name="docsearch:version" content="4.16.5"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.16.5"><meta data-rh="true" property="og:title" content="BookKeeper installation | Apache BookKeeper"><meta data-rh="true" name="description" content="You can install BookKeeper either by downloading a GZipped tarball package, using the Docker image or cloning the BookKeeper repository."><meta data-rh="true" property="og:description" content="You can install BookKeeper either by downloading a GZipped tarball package, using the Docker image or cloning the BookKeeper repository."><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/4.16.5/getting-started/installation"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.16.5/getting-started/installation" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.16.5/getting-started/installation" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -22,7 +22,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/4.16.5/getting-started/run-locally/index.html b/content/docs/4.16.5/getting-started/run-locally/index.html
index ac72d72..9bb7270 100644
--- a/content/docs/4.16.5/getting-started/run-locally/index.html
+++ b/content/docs/4.16.5/getting-started/run-locally/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">Run bookies locally | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/4.16.5/getting-started/run-locally"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.16.5"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.16.5"><meta data-rh="true" name="docsearch:version" content="4.16.5"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.16.5"><meta data-rh="true" property="og:title" content="Run bookies locally | Apache BookKeeper"><meta data-rh="true" name="description" content="Bookies are individual BookKeeper servers. You can run an ensemble of bookies locally on a single machine using the localbookie command of the bookkeeper CLI tool and specifying the number of bookies you&#x27;d like to include in the ensemble."><meta data-rh="true" property="og:description" content="Bookies are individual BookKeeper servers. You can run an ensemble of bookies locally on a single machine using the localbookie command of the bookkeeper CLI tool and specifying the number of bookies you&#x27;d like to include in the ensemble."><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/4.16.5/getting-started/run-locally"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.16.5/getting-started/run-locally" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.16.5/getting-started/run-locally" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -22,7 +22,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/4.16.5/overview/index.html b/content/docs/4.16.5/overview/index.html
index 65649f1..3b678ea 100644
--- a/content/docs/4.16.5/overview/index.html
+++ b/content/docs/4.16.5/overview/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">Apache BookKeeper 4.16.5 | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/4.16.5/overview/"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.16.5"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.16.5"><meta data-rh="true" name="docsearch:version" content="4.16.5"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.16.5"><meta data-rh="true" property="og:title" content="Apache BookKeeper 4.16.5 | Apache BookKeeper"><meta data-rh="true" name="description" content="&lt;!--"><meta data-rh="true" property="og:description" content="&lt;!--"><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/4.16.5/overview/"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.16.5/overview/" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.16.5/overview/" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -24,7 +24,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/4.16.5/reference/cli/index.html b/content/docs/4.16.5/reference/cli/index.html
index d489882..32fbd81 100644
--- a/content/docs/4.16.5/reference/cli/index.html
+++ b/content/docs/4.16.5/reference/cli/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">BookKeeper CLI tool reference | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/4.16.5/reference/cli"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.16.5"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.16.5"><meta data-rh="true" name="docsearch:version" content="4.16.5"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.16.5"><meta data-rh="true" property="og:title" content="BookKeeper CLI tool reference | Apache BookKeeper"><meta data-rh="true" name="description" content="bookkeeper command"><meta data-rh="true" property="og:description" content="bookkeeper command"><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/4.16.5/reference/cli"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.16.5/reference/cli" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.16.5/reference/cli" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -29,7 +29,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/4.16.5/reference/config/index.html b/content/docs/4.16.5/reference/config/index.html
index 90bf679..dee0675 100644
--- a/content/docs/4.16.5/reference/config/index.html
+++ b/content/docs/4.16.5/reference/config/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">BookKeeper configuration | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/4.16.5/reference/config"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.16.5"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.16.5"><meta data-rh="true" name="docsearch:version" content="4.16.5"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.16.5"><meta data-rh="true" property="og:title" content="BookKeeper configuration | Apache BookKeeper"><meta data-rh="true" name="description" content="The table below lists parameters that you can set to configure bookies. All configuration takes place in the bk_server.conf file in the bookkeeper-server/conf directory of your BookKeeper installation."><meta data-rh="true" property="og:description" content="The table below lists parameters that you can set to configure bookies. All configuration takes place in the bk_server.conf file in the bookkeeper-server/conf directory of your BookKeeper installation."><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/4.16.5/reference/config"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.16.5/reference/config" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.16.5/reference/config" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -29,7 +29,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/4.16.5/security/overview/index.html b/content/docs/4.16.5/security/overview/index.html
index 9c2a12c..7945c5a 100644
--- a/content/docs/4.16.5/security/overview/index.html
+++ b/content/docs/4.16.5/security/overview/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">BookKeeper Security | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/4.16.5/security/overview"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.16.5"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.16.5"><meta data-rh="true" name="docsearch:version" content="4.16.5"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.16.5"><meta data-rh="true" property="og:title" content="BookKeeper Security | Apache BookKeeper"><meta data-rh="true" name="description" content="In the 4.5.0 release, the BookKeeper community added a number of features that can be used, together or separately, to secure a BookKeeper cluster."><meta data-rh="true" property="og:description" content="In the 4.5.0 release, the BookKeeper community added a number of features that can be used, together or separately, to secure a BookKeeper cluster."><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/4.16.5/security/overview"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.16.5/security/overview" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.16.5/security/overview" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -23,7 +23,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/4.16.5/security/sasl/index.html b/content/docs/4.16.5/security/sasl/index.html
index 3d06e1d..c6f9175 100644
--- a/content/docs/4.16.5/security/sasl/index.html
+++ b/content/docs/4.16.5/security/sasl/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">Authentication using SASL | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/4.16.5/security/sasl"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.16.5"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.16.5"><meta data-rh="true" name="docsearch:version" content="4.16.5"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.16.5"><meta data-rh="true" property="og:title" content="Authentication using SASL | Apache BookKeeper"><meta data-rh="true" name="description" content="Bookies support client authentication via SASL. Currently we only support GSSAPI (Kerberos). We will start"><meta data-rh="true" property="og:description" content="Bookies support client authentication via SASL. Currently we only support GSSAPI (Kerberos). We will start"><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/4.16.5/security/sasl"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.16.5/security/sasl" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.16.5/security/sasl" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -45,7 +45,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/4.16.5/security/tls/index.html b/content/docs/4.16.5/security/tls/index.html
index cc1e15b..c84d475 100644
--- a/content/docs/4.16.5/security/tls/index.html
+++ b/content/docs/4.16.5/security/tls/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">Encryption and Authentication using TLS | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/4.16.5/security/tls"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.16.5"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.16.5"><meta data-rh="true" name="docsearch:version" content="4.16.5"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.16.5"><meta data-rh="true" property="og:title" content="Encryption and Authentication using TLS | Apache BookKeeper"><meta data-rh="true" name="description" content="Apache BookKeeper allows clients and autorecovery daemons to communicate over TLS, although this is not enabled by default."><meta data-rh="true" property="og:description" content="Apache BookKeeper allows clients and autorecovery daemons to communicate over TLS, although this is not enabled by default."><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/4.16.5/security/tls"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.16.5/security/tls" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.16.5/security/tls" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -53,7 +53,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/4.16.5/security/zookeeper/index.html b/content/docs/4.16.5/security/zookeeper/index.html
index 75ea92b..125a1f1 100644
--- a/content/docs/4.16.5/security/zookeeper/index.html
+++ b/content/docs/4.16.5/security/zookeeper/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">ZooKeeper Authentication | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/4.16.5/security/zookeeper"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.16.5"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.16.5"><meta data-rh="true" name="docsearch:version" content="4.16.5"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.16.5"><meta data-rh="true" property="og:title" content="ZooKeeper Authentication | Apache BookKeeper"><meta data-rh="true" name="description" content="New Clusters"><meta data-rh="true" property="og:description" content="New Clusters"><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/4.16.5/security/zookeeper"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.16.5/security/zookeeper" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.16.5/security/zookeeper" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -29,7 +29,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/4.5.1/admin/autorecovery/index.html b/content/docs/4.5.1/admin/autorecovery/index.html
index c16eb65..e836429 100644
--- a/content/docs/4.5.1/admin/autorecovery/index.html
+++ b/content/docs/4.5.1/admin/autorecovery/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">Using AutoRecovery | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/4.5.1/admin/autorecovery"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.5.1"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.5.1"><meta data-rh="true" name="docsearch:version" content="4.5.1"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.5.1"><meta data-rh="true" property="og:title" content="Using AutoRecovery | Apache BookKeeper"><meta data-rh="true" name="description" content="When a bookie crashes, all ledgers on that bookie become under-replicated. In order to bring all ledgers in your BookKeeper cluster back to full replication, you&#x27;ll need to recover the data from any offline bookies. There are two ways to recover bookies&#x27; data:"><meta data-rh="true" property="og:description" content="When a bookie crashes, all ledgers on that bookie become under-replicated. In order to bring all ledgers in your BookKeeper cluster back to full replication, you&#x27;ll need to recover the data from any offline bookies. There are two ways to recover bookies&#x27; data:"><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/4.5.1/admin/autorecovery"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.5.1/admin/autorecovery" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.5.1/admin/autorecovery" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -22,7 +22,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/4.5.1/admin/bookies/index.html b/content/docs/4.5.1/admin/bookies/index.html
index 0fb29be..eaf7f1b 100644
--- a/content/docs/4.5.1/admin/bookies/index.html
+++ b/content/docs/4.5.1/admin/bookies/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">BookKeeper administration | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/4.5.1/admin/bookies"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.5.1"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.5.1"><meta data-rh="true" name="docsearch:version" content="4.5.1"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.5.1"><meta data-rh="true" property="og:title" content="BookKeeper administration | Apache BookKeeper"><meta data-rh="true" name="description" content="This document is a guide to deploying, administering, and maintaining BookKeeper. It also discusses best practices and common problems."><meta data-rh="true" property="og:description" content="This document is a guide to deploying, administering, and maintaining BookKeeper. It also discusses best practices and common problems."><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/4.5.1/admin/bookies"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.5.1/admin/bookies" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.5.1/admin/bookies" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -22,7 +22,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/4.5.1/admin/geo-replication/index.html b/content/docs/4.5.1/admin/geo-replication/index.html
index e9ae510..a5a4a24 100644
--- a/content/docs/4.5.1/admin/geo-replication/index.html
+++ b/content/docs/4.5.1/admin/geo-replication/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">Geo-replication | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/4.5.1/admin/geo-replication"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.5.1"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.5.1"><meta data-rh="true" name="docsearch:version" content="4.5.1"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.5.1"><meta data-rh="true" property="og:title" content="Geo-replication | Apache BookKeeper"><meta data-rh="true" name="description" content="Geo-replication is the replication of data across BookKeeper clusters. In order to enable geo-replication for a group of BookKeeper clusters,"><meta data-rh="true" property="og:description" content="Geo-replication is the replication of data across BookKeeper clusters. In order to enable geo-replication for a group of BookKeeper clusters,"><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/4.5.1/admin/geo-replication"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.5.1/admin/geo-replication" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.5.1/admin/geo-replication" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -22,7 +22,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/4.5.1/admin/metrics/index.html b/content/docs/4.5.1/admin/metrics/index.html
index 42563c8..f115df3 100644
--- a/content/docs/4.5.1/admin/metrics/index.html
+++ b/content/docs/4.5.1/admin/metrics/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">Metric collection | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/4.5.1/admin/metrics"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.5.1"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.5.1"><meta data-rh="true" name="docsearch:version" content="4.5.1"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.5.1"><meta data-rh="true" property="og:title" content="Metric collection | Apache BookKeeper"><meta data-rh="true" name="description" content="BookKeeper enables metrics collection through a variety of stats providers."><meta data-rh="true" property="og:description" content="BookKeeper enables metrics collection through a variety of stats providers."><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/4.5.1/admin/metrics"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.5.1/admin/metrics" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.5.1/admin/metrics" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -22,7 +22,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/4.5.1/admin/perf/index.html b/content/docs/4.5.1/admin/perf/index.html
index 5515f0f..a760947 100644
--- a/content/docs/4.5.1/admin/perf/index.html
+++ b/content/docs/4.5.1/admin/perf/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">Performance tuning | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/4.5.1/admin/perf"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.5.1"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.5.1"><meta data-rh="true" name="docsearch:version" content="4.5.1"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.5.1"><meta data-rh="true" property="og:title" content="Performance tuning | Apache BookKeeper"><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/4.5.1/admin/perf"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.5.1/admin/perf" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.5.1/admin/perf" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -22,7 +22,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/4.5.1/admin/placement/index.html b/content/docs/4.5.1/admin/placement/index.html
index b21970f..9f54811 100644
--- a/content/docs/4.5.1/admin/placement/index.html
+++ b/content/docs/4.5.1/admin/placement/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">Customized placement policies | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/4.5.1/admin/placement"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.5.1"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.5.1"><meta data-rh="true" name="docsearch:version" content="4.5.1"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.5.1"><meta data-rh="true" property="og:title" content="Customized placement policies | Apache BookKeeper"><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/4.5.1/admin/placement"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.5.1/admin/placement" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.5.1/admin/placement" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -22,7 +22,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/4.5.1/admin/upgrade/index.html b/content/docs/4.5.1/admin/upgrade/index.html
index 109c531..3d9406e 100644
--- a/content/docs/4.5.1/admin/upgrade/index.html
+++ b/content/docs/4.5.1/admin/upgrade/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">Upgrade | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/4.5.1/admin/upgrade"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.5.1"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.5.1"><meta data-rh="true" name="docsearch:version" content="4.5.1"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.5.1"><meta data-rh="true" property="og:title" content="Upgrade | Apache BookKeeper"><meta data-rh="true" name="description" content="If you have questions about upgrades (or need help), please feel free to reach out to us by mailing list or Slack Channel."><meta data-rh="true" property="og:description" content="If you have questions about upgrades (or need help), please feel free to reach out to us by mailing list or Slack Channel."><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/4.5.1/admin/upgrade"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.5.1/admin/upgrade" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.5.1/admin/upgrade" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -29,7 +29,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/4.5.1/api/distributedlog-api/index.html b/content/docs/4.5.1/api/distributedlog-api/index.html
index 33a2a10..efd35b8 100644
--- a/content/docs/4.5.1/api/distributedlog-api/index.html
+++ b/content/docs/4.5.1/api/distributedlog-api/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">DistributedLog | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/4.5.1/api/distributedlog-api"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.5.1"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.5.1"><meta data-rh="true" name="docsearch:version" content="4.5.1"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.5.1"><meta data-rh="true" property="og:title" content="DistributedLog | Apache BookKeeper"><meta data-rh="true" name="description" content="DistributedLog began its life as a separate project under the Apache Foundation. It was merged into BookKeeper in 2017."><meta data-rh="true" property="og:description" content="DistributedLog began its life as a separate project under the Apache Foundation. It was merged into BookKeeper in 2017."><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/4.5.1/api/distributedlog-api"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.5.1/api/distributedlog-api" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.5.1/api/distributedlog-api" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -22,7 +22,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/4.5.1/api/ledger-adv-api/index.html b/content/docs/4.5.1/api/ledger-adv-api/index.html
index 134bf7b..59bccac 100644
--- a/content/docs/4.5.1/api/ledger-adv-api/index.html
+++ b/content/docs/4.5.1/api/ledger-adv-api/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">The Advanced Ledger API | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/4.5.1/api/ledger-adv-api"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.5.1"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.5.1"><meta data-rh="true" name="docsearch:version" content="4.5.1"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.5.1"><meta data-rh="true" property="og:title" content="The Advanced Ledger API | Apache BookKeeper"><meta data-rh="true" name="description" content="In release 4.5.0, Apache BookKeeper introduces a few advanced API for advanced usage."><meta data-rh="true" property="og:description" content="In release 4.5.0, Apache BookKeeper introduces a few advanced API for advanced usage."><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/4.5.1/api/ledger-adv-api"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.5.1/api/ledger-adv-api" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.5.1/api/ledger-adv-api" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -27,7 +27,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/4.5.1/api/ledger-api/index.html b/content/docs/4.5.1/api/ledger-api/index.html
index d0a433e..d417123 100644
--- a/content/docs/4.5.1/api/ledger-api/index.html
+++ b/content/docs/4.5.1/api/ledger-api/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">The Ledger API | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/4.5.1/api/ledger-api"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.5.1"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.5.1"><meta data-rh="true" name="docsearch:version" content="4.5.1"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.5.1"><meta data-rh="true" property="og:title" content="The Ledger API | Apache BookKeeper"><meta data-rh="true" name="description" content="The ledger API is a lower-level API for BookKeeper that enables you to interact with ledgers directly."><meta data-rh="true" property="og:description" content="The ledger API is a lower-level API for BookKeeper that enables you to interact with ledgers directly."><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/4.5.1/api/ledger-api"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.5.1/api/ledger-api" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.5.1/api/ledger-api" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -26,7 +26,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/4.5.1/api/overview/index.html b/content/docs/4.5.1/api/overview/index.html
index e6c2ae4..1cd72ce 100644
--- a/content/docs/4.5.1/api/overview/index.html
+++ b/content/docs/4.5.1/api/overview/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">BookKeeper API | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/4.5.1/api/overview"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.5.1"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.5.1"><meta data-rh="true" name="docsearch:version" content="4.5.1"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.5.1"><meta data-rh="true" property="og:title" content="BookKeeper API | Apache BookKeeper"><meta data-rh="true" name="description" content="BookKeeper offers a few APIs that applications can use to interact with it:"><meta data-rh="true" property="og:description" content="BookKeeper offers a few APIs that applications can use to interact with it:"><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/4.5.1/api/overview"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.5.1/api/overview" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.5.1/api/overview" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -24,7 +24,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/4.5.1/deployment/kubernetes/index.html b/content/docs/4.5.1/deployment/kubernetes/index.html
index 543bf4b..9ea9747 100644
--- a/content/docs/4.5.1/deployment/kubernetes/index.html
+++ b/content/docs/4.5.1/deployment/kubernetes/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">Deploying BookKeeper on Kubernetes | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/4.5.1/deployment/kubernetes"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.5.1"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.5.1"><meta data-rh="true" name="docsearch:version" content="4.5.1"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.5.1"><meta data-rh="true" property="og:title" content="Deploying BookKeeper on Kubernetes | Apache BookKeeper"><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/4.5.1/deployment/kubernetes"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.5.1/deployment/kubernetes" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.5.1/deployment/kubernetes" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -22,7 +22,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/4.5.1/deployment/manual/index.html b/content/docs/4.5.1/deployment/manual/index.html
index e2d09a9..d811d01 100644
--- a/content/docs/4.5.1/deployment/manual/index.html
+++ b/content/docs/4.5.1/deployment/manual/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">Manual deployment | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/4.5.1/deployment/manual"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.5.1"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.5.1"><meta data-rh="true" name="docsearch:version" content="4.5.1"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.5.1"><meta data-rh="true" property="og:title" content="Manual deployment | Apache BookKeeper"><meta data-rh="true" name="description" content="A BookKeeper cluster consists of two main components:"><meta data-rh="true" property="og:description" content="A BookKeeper cluster consists of two main components:"><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/4.5.1/deployment/manual"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.5.1/deployment/manual" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.5.1/deployment/manual" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -22,7 +22,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/4.5.1/development/codebase/index.html b/content/docs/4.5.1/development/codebase/index.html
index ead27c7..dad5b42 100644
--- a/content/docs/4.5.1/development/codebase/index.html
+++ b/content/docs/4.5.1/development/codebase/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">The BookKeeper codebase | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/4.5.1/development/codebase"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.5.1"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.5.1"><meta data-rh="true" name="docsearch:version" content="4.5.1"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.5.1"><meta data-rh="true" property="og:title" content="The BookKeeper codebase | Apache BookKeeper"><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/4.5.1/development/codebase"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.5.1/development/codebase" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.5.1/development/codebase" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -22,7 +22,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/4.5.1/development/protocol/index.html b/content/docs/4.5.1/development/protocol/index.html
index b3e77f9..cee85db 100644
--- a/content/docs/4.5.1/development/protocol/index.html
+++ b/content/docs/4.5.1/development/protocol/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">The BookKeeper protocol | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/4.5.1/development/protocol"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.5.1"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.5.1"><meta data-rh="true" name="docsearch:version" content="4.5.1"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.5.1"><meta data-rh="true" property="og:title" content="The BookKeeper protocol | Apache BookKeeper"><meta data-rh="true" name="description" content="BookKeeper uses a special replication protocol for guaranteeing persistent storage of entries in an ensemble of bookies."><meta data-rh="true" property="og:description" content="BookKeeper uses a special replication protocol for guaranteeing persistent storage of entries in an ensemble of bookies."><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/4.5.1/development/protocol"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.5.1/development/protocol" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.5.1/development/protocol" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -22,7 +22,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/4.5.1/getting-started/concepts/index.html b/content/docs/4.5.1/getting-started/concepts/index.html
index eb3c87a..65633cb 100644
--- a/content/docs/4.5.1/getting-started/concepts/index.html
+++ b/content/docs/4.5.1/getting-started/concepts/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">BookKeeper concepts and architecture | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/4.5.1/getting-started/concepts"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.5.1"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.5.1"><meta data-rh="true" name="docsearch:version" content="4.5.1"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.5.1"><meta data-rh="true" property="og:title" content="BookKeeper concepts and architecture | Apache BookKeeper"><meta data-rh="true" name="description" content="BookKeeper is a service that provides persistent storage of streams of log entries---aka records---in sequences called ledgers. BookKeeper replicates stored entries across multiple servers."><meta data-rh="true" property="og:description" content="BookKeeper is a service that provides persistent storage of streams of log entries---aka records---in sequences called ledgers. BookKeeper replicates stored entries across multiple servers."><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/4.5.1/getting-started/concepts"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.5.1/getting-started/concepts" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.5.1/getting-started/concepts" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -22,7 +22,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/4.5.1/getting-started/installation/index.html b/content/docs/4.5.1/getting-started/installation/index.html
index 8f8da14..280c208 100644
--- a/content/docs/4.5.1/getting-started/installation/index.html
+++ b/content/docs/4.5.1/getting-started/installation/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">BookKeeper installation | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/4.5.1/getting-started/installation"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.5.1"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.5.1"><meta data-rh="true" name="docsearch:version" content="4.5.1"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.5.1"><meta data-rh="true" property="og:title" content="BookKeeper installation | Apache BookKeeper"><meta data-rh="true" name="description" content="You can install BookKeeper either by downloading a GZipped tarball package or cloning the BookKeeper repository."><meta data-rh="true" property="og:description" content="You can install BookKeeper either by downloading a GZipped tarball package or cloning the BookKeeper repository."><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/4.5.1/getting-started/installation"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.5.1/getting-started/installation" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.5.1/getting-started/installation" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -22,7 +22,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/4.5.1/getting-started/run-locally/index.html b/content/docs/4.5.1/getting-started/run-locally/index.html
index e67d89e..54f8ed5 100644
--- a/content/docs/4.5.1/getting-started/run-locally/index.html
+++ b/content/docs/4.5.1/getting-started/run-locally/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">Run bookies locally | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/4.5.1/getting-started/run-locally"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.5.1"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.5.1"><meta data-rh="true" name="docsearch:version" content="4.5.1"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.5.1"><meta data-rh="true" property="og:title" content="Run bookies locally | Apache BookKeeper"><meta data-rh="true" name="description" content="Bookies are individual BookKeeper servers. You can run an ensemble of bookies locally on a single machine using the localbookie command of the bookkeeper CLI tool and specifying the number of bookies you&#x27;d like to include in the ensemble."><meta data-rh="true" property="og:description" content="Bookies are individual BookKeeper servers. You can run an ensemble of bookies locally on a single machine using the localbookie command of the bookkeeper CLI tool and specifying the number of bookies you&#x27;d like to include in the ensemble."><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/4.5.1/getting-started/run-locally"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.5.1/getting-started/run-locally" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.5.1/getting-started/run-locally" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -22,7 +22,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/4.5.1/overview/index.html b/content/docs/4.5.1/overview/index.html
index 926de82..cda021a 100644
--- a/content/docs/4.5.1/overview/index.html
+++ b/content/docs/4.5.1/overview/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">Apache BookKeeper 4.5.1 | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/4.5.1/overview/"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.5.1"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.5.1"><meta data-rh="true" name="docsearch:version" content="4.5.1"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.5.1"><meta data-rh="true" property="og:title" content="Apache BookKeeper 4.5.1 | Apache BookKeeper"><meta data-rh="true" name="description" content="&lt;!--"><meta data-rh="true" property="og:description" content="&lt;!--"><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/4.5.1/overview/"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.5.1/overview/" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.5.1/overview/" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -25,7 +25,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/4.5.1/reference/cli/index.html b/content/docs/4.5.1/reference/cli/index.html
index d8a1d76..10c9afe 100644
--- a/content/docs/4.5.1/reference/cli/index.html
+++ b/content/docs/4.5.1/reference/cli/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">BookKeeper CLI tool reference | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/4.5.1/reference/cli"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.5.1"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.5.1"><meta data-rh="true" name="docsearch:version" content="4.5.1"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.5.1"><meta data-rh="true" property="og:title" content="BookKeeper CLI tool reference | Apache BookKeeper"><meta data-rh="true" name="description" content="bookkeeper command"><meta data-rh="true" property="og:description" content="bookkeeper command"><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/4.5.1/reference/cli"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.5.1/reference/cli" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.5.1/reference/cli" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -29,7 +29,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/4.5.1/reference/config/index.html b/content/docs/4.5.1/reference/config/index.html
index 397318c..ea49243 100644
--- a/content/docs/4.5.1/reference/config/index.html
+++ b/content/docs/4.5.1/reference/config/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">BookKeeper configuration | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/4.5.1/reference/config"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.5.1"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.5.1"><meta data-rh="true" name="docsearch:version" content="4.5.1"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.5.1"><meta data-rh="true" property="og:title" content="BookKeeper configuration | Apache BookKeeper"><meta data-rh="true" name="description" content="The table below lists parameters that you can set to configure bookies. All configuration takes place in the bk_server.conf file in the bookkeeper-server/conf directory of your BookKeeper installation."><meta data-rh="true" property="og:description" content="The table below lists parameters that you can set to configure bookies. All configuration takes place in the bk_server.conf file in the bookkeeper-server/conf directory of your BookKeeper installation."><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/4.5.1/reference/config"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.5.1/reference/config" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.5.1/reference/config" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -22,7 +22,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/4.5.1/reference/metrics/index.html b/content/docs/4.5.1/reference/metrics/index.html
index 17a97ed..ac66e6a 100644
--- a/content/docs/4.5.1/reference/metrics/index.html
+++ b/content/docs/4.5.1/reference/metrics/index.html
@@ -4,12 +4,12 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">BookKeeper metrics reference | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/4.5.1/reference/metrics"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.5.1"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.5.1"><meta data-rh="true" name="docsearch:version" content="4.5.1"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.5.1"><meta data-rh="true" property="og:title" content="BookKeeper metrics reference | Apache BookKeeper"><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/4.5.1/reference/metrics"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.5.1/reference/metrics" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.5.1/reference/metrics" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
-<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navbar__brand" href="/"><div class="navbar__logo"><img src="/img/bk-logo.svg" alt="Apache Bookkeeper" class="themedImage_ToTc themedImage--light_HNdA"><img src="/img/bk-logo.svg" alt="Apache Bookkeeper" class="themedImage_ToTc themedImage--dark_i4oU"></div><b class="navbar__title text--truncate">Apache BookKeeper</b></a><a class="navbar__item navbar__link" href="/docs/4.5.1/overview/">Documentation</a><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Community</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/community/mailing-lists">Mailing lists</a></li><li><a class="dropdown__link" href="/community/slack">Slack</a></li><li><a href="https://github.com/apache/bookkeeper/issues" target="_blank" rel="noopener noreferrer" class="dropdown__link">Github issues<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a class="dropdown__link" href="/community/releases">Release management</a></li><li><a class="dropdown__link" href="/community/meeting">Community meetings</a></li><li><a class="dropdown__link" href="/community/contributing">Contribution guide</a></li><li><a class="dropdown__link" href="/community/coding-guide">Coding guide</a></li><li><a class="dropdown__link" href="/community/testing">Testing guide</a></li><li><a class="dropdown__link" href="/community/issue-report">Issue report guide</a></li><li><a class="dropdown__link" href="/community/release-guide">Release guide</a></li><li><a class="dropdown__link" href="/community/presentations">Presentations</a></li><li><a class="dropdown__link" href="/community/bookkeeper-proposals">BookKeeper proposals (BP)</a></li></ul></div><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Project</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/project/who">Who are we?</a></li><li><a class="dropdown__link" href="/project/bylaws">Bylaws</a></li><li><a href="https://apache.org/licenses" target="_blank" rel="noopener noreferrer" class="dropdown__link">License<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a class="dropdown__link" href="/project/privacy">Privacy policy</a></li><li><a href="https://www.apache.org/foundation/sponsorship.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Sponsorship<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a href="https://www.apache.org/foundation/thanks.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Thanks<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div></div><div class="navbar__items navbar__items--right"><div class="navbar__item dropdown dropdown--hoverable dropdown--right"><a class="navbar__link" aria-haspopup="true" aria-expanded="false" role="button" href="/docs/4.5.1/overview/">4.5.1</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/docs/next/overview/">Next</a></li><li><a class="dropdown__link" href="/docs/admin/autorecovery">4.17.0</a></li><li><a class="dropdown__link" href="/docs/4.16.5/overview/">4.16.5</a></li><li><a class="dropdown__link" href="/docs/4.15.5/overview/">4.15.5</a></li><li><a class="dropdown__link" href="/docs/4.14.8/reference/metrics">4.14.8</a></li><li><a class="dropdown__link" href="/docs/4.13.0/reference/metrics">4.13.0</a></li><li><a class="dropdown__link" href="/docs/4.12.1/reference/metrics">4.12.1</a></li><li><a class="dropdown__link" href="/docs/4.11.1/reference/metrics">4.11.1</a></li><li><a class="dropdown__link" href="/docs/4.10.0/reference/metrics">4.10.0</a></li><li><a class="dropdown__link" href="/docs/4.9.2/reference/metrics">4.9.2</a></li><li><a class="dropdown__link" href="/docs/4.8.2/reference/metrics">4.8.2</a></li><li><a class="dropdown__link" href="/docs/4.7.3/reference/metrics">4.7.3</a></li><li><a class="dropdown__link" href="/docs/4.6.2/reference/metrics">4.6.2</a></li><li><a aria-current="page" class="dropdown__link dropdown__link--active" href="/docs/4.5.1/reference/metrics">4.5.1</a></li></ul></div><a class="navbar__item navbar__link" href="/releases">Download</a><div class="toggle_vylO colorModeToggle_DEke"><button class="clean-btn toggleButton_gllP toggleButtonDisabled_aARS" type="button" disabled="" title="Switch between dark and light mode (currently light mode)" aria-label="Switch between dark and light mode (currently light mode)" aria-live="polite"><svg viewBox="0 0 24 24" width="24" height="24" class="lightToggleIcon_pyhR"><path fill="currentColor" d="M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"></path></svg><svg viewBox="0 0 24 24" width="24" height="24" class="darkToggleIcon_wfgR"><path fill="currentColor" d="M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"></path></svg></button></div><div class="searchBox_ZlJk"></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div></nav><div id="docusaurus_skipToContent_fallback" class="main-wrapper mainWrapper_z2l0 docsWrapper_BCFX"><button aria-label="Scroll back to top" class="clean-btn theme-back-to-top-button backToTopButton_sjWU" type="button"></button><div class="docPage__5DB"><main class="docMainContainer_gTbr docMainContainerEnhanced_Uz_u"><div class="container padding-top--md padding-bottom--lg"><div class="row"><div class="col docItemCol_VOVn"><div class="docItemContainer_Djhp"><article><span class="theme-doc-version-badge badge badge--secondary">Version: 4.5.1</span><div class="theme-doc-markdown markdown"><header><h1>BookKeeper metrics reference</h1></header></div></article><nav class="pagination-nav docusaurus-mt-lg" aria-label="Docs pages navigation"></nav></div></div></div></div></main></div></div><footer class="footer footer--dark"><div class="container container-fluid"><div class="row footer__links"><div class="col footer__col"><div class="footer__title">Documentation</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/docs/overview">Overview</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/getting-started/installation">Getting started</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/deployment/manual">Deployment</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/admin/bookies">Administration</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/api/overview">API</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/security/overview">Security</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/development/protocol">Development</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/reference/config">Reference</a></li></ul></div><div class="col footer__col"><div class="footer__title">Community</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/community/mailing-lists">Mailing lists</a></li><li class="footer__item"><a class="footer__link-item" href="/community/slack">Slack</a></li><li class="footer__item"><a href="https://github.com/apache/bookkeeper" target="_blank" rel="noopener noreferrer" class="footer__link-item">Github<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a href="https://twitter.com/asfbookkeeper" target="_blank" rel="noopener noreferrer" class="footer__link-item">Twitter<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div><div class="col footer__col"><div class="footer__title">Project</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/project/who">Who are we?</a></li><li class="footer__item"><a class="footer__link-item" href="/project/bylaws">Bylaws</a></li><li class="footer__item"><a href="https://apache.org/licenses" target="_blank" rel="noopener noreferrer" class="footer__link-item">License<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a class="footer__link-item" href="/project/privacy">Privacy policy</a></li><li class="footer__item"><a href="https://www.apache.org/foundation/sponsorship.html" target="_blank" rel="noopener noreferrer" class="footer__link-item">Sponsorship<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a href="https://www.apache.org/foundation/thanks.html" target="_blank" rel="noopener noreferrer" class="footer__link-item">Thanks<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div></div><div class="footer__bottom text--center"><div class="footer__copyright"><footer class="footer">
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navbar__brand" href="/"><div class="navbar__logo"><img src="/img/bk-logo.svg" alt="Apache Bookkeeper" class="themedImage_ToTc themedImage--light_HNdA"><img src="/img/bk-logo.svg" alt="Apache Bookkeeper" class="themedImage_ToTc themedImage--dark_i4oU"></div><b class="navbar__title text--truncate">Apache BookKeeper</b></a><a class="navbar__item navbar__link" href="/docs/4.5.1/overview/">Documentation</a><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Community</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/community/mailing-lists">Mailing lists</a></li><li><a class="dropdown__link" href="/community/slack">Slack</a></li><li><a href="https://github.com/apache/bookkeeper/issues" target="_blank" rel="noopener noreferrer" class="dropdown__link">Github issues<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a class="dropdown__link" href="/community/releases">Release management</a></li><li><a class="dropdown__link" href="/community/meeting">Community meetings</a></li><li><a class="dropdown__link" href="/community/contributing">Contribution guide</a></li><li><a class="dropdown__link" href="/community/coding-guide">Coding guide</a></li><li><a class="dropdown__link" href="/community/testing">Testing guide</a></li><li><a class="dropdown__link" href="/community/issue-report">Issue report guide</a></li><li><a class="dropdown__link" href="/community/release-guide">Release guide</a></li><li><a class="dropdown__link" href="/community/presentations">Presentations</a></li><li><a class="dropdown__link" href="/community/bookkeeper-proposals">BookKeeper proposals (BP)</a></li></ul></div><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Project</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/project/who">Who are we?</a></li><li><a class="dropdown__link" href="/project/bylaws">Bylaws</a></li><li><a href="https://apache.org/licenses" target="_blank" rel="noopener noreferrer" class="dropdown__link">License<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a class="dropdown__link" href="/project/privacy">Privacy policy</a></li><li><a href="https://www.apache.org/foundation/sponsorship.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Sponsorship<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a href="https://www.apache.org/foundation/thanks.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Thanks<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div></div><div class="navbar__items navbar__items--right"><div class="navbar__item dropdown dropdown--hoverable dropdown--right"><a class="navbar__link" aria-haspopup="true" aria-expanded="false" role="button" href="/docs/4.5.1/overview/">4.5.1</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/docs/next/overview/">Next</a></li><li><a class="dropdown__link" href="/docs/overview/">4.17.0</a></li><li><a class="dropdown__link" href="/docs/4.16.5/overview/">4.16.5</a></li><li><a class="dropdown__link" href="/docs/4.15.5/overview/">4.15.5</a></li><li><a class="dropdown__link" href="/docs/4.14.8/reference/metrics">4.14.8</a></li><li><a class="dropdown__link" href="/docs/4.13.0/reference/metrics">4.13.0</a></li><li><a class="dropdown__link" href="/docs/4.12.1/reference/metrics">4.12.1</a></li><li><a class="dropdown__link" href="/docs/4.11.1/reference/metrics">4.11.1</a></li><li><a class="dropdown__link" href="/docs/4.10.0/reference/metrics">4.10.0</a></li><li><a class="dropdown__link" href="/docs/4.9.2/reference/metrics">4.9.2</a></li><li><a class="dropdown__link" href="/docs/4.8.2/reference/metrics">4.8.2</a></li><li><a class="dropdown__link" href="/docs/4.7.3/reference/metrics">4.7.3</a></li><li><a class="dropdown__link" href="/docs/4.6.2/reference/metrics">4.6.2</a></li><li><a aria-current="page" class="dropdown__link dropdown__link--active" href="/docs/4.5.1/reference/metrics">4.5.1</a></li></ul></div><a class="navbar__item navbar__link" href="/releases">Download</a><div class="toggle_vylO colorModeToggle_DEke"><button class="clean-btn toggleButton_gllP toggleButtonDisabled_aARS" type="button" disabled="" title="Switch between dark and light mode (currently light mode)" aria-label="Switch between dark and light mode (currently light mode)" aria-live="polite"><svg viewBox="0 0 24 24" width="24" height="24" class="lightToggleIcon_pyhR"><path fill="currentColor" d="M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"></path></svg><svg viewBox="0 0 24 24" width="24" height="24" class="darkToggleIcon_wfgR"><path fill="currentColor" d="M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"></path></svg></button></div><div class="searchBox_ZlJk"></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div></nav><div id="docusaurus_skipToContent_fallback" class="main-wrapper mainWrapper_z2l0 docsWrapper_BCFX"><button aria-label="Scroll back to top" class="clean-btn theme-back-to-top-button backToTopButton_sjWU" type="button"></button><div class="docPage__5DB"><main class="docMainContainer_gTbr docMainContainerEnhanced_Uz_u"><div class="container padding-top--md padding-bottom--lg"><div class="row"><div class="col docItemCol_VOVn"><div class="docItemContainer_Djhp"><article><span class="theme-doc-version-badge badge badge--secondary">Version: 4.5.1</span><div class="theme-doc-markdown markdown"><header><h1>BookKeeper metrics reference</h1></header></div></article><nav class="pagination-nav docusaurus-mt-lg" aria-label="Docs pages navigation"></nav></div></div></div></div></main></div></div><footer class="footer footer--dark"><div class="container container-fluid"><div class="row footer__links"><div class="col footer__col"><div class="footer__title">Documentation</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/docs/overview">Overview</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/getting-started/installation">Getting started</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/deployment/manual">Deployment</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/admin/bookies">Administration</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/api/overview">API</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/security/overview">Security</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/development/protocol">Development</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/reference/config">Reference</a></li></ul></div><div class="col footer__col"><div class="footer__title">Community</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/community/mailing-lists">Mailing lists</a></li><li class="footer__item"><a class="footer__link-item" href="/community/slack">Slack</a></li><li class="footer__item"><a href="https://github.com/apache/bookkeeper" target="_blank" rel="noopener noreferrer" class="footer__link-item">Github<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a href="https://twitter.com/asfbookkeeper" target="_blank" rel="noopener noreferrer" class="footer__link-item">Twitter<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div><div class="col footer__col"><div class="footer__title">Project</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/project/who">Who are we?</a></li><li class="footer__item"><a class="footer__link-item" href="/project/bylaws">Bylaws</a></li><li class="footer__item"><a href="https://apache.org/licenses" target="_blank" rel="noopener noreferrer" class="footer__link-item">License<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a class="footer__link-item" href="/project/privacy">Privacy policy</a></li><li class="footer__item"><a href="https://www.apache.org/foundation/sponsorship.html" target="_blank" rel="noopener noreferrer" class="footer__link-item">Sponsorship<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a href="https://www.apache.org/foundation/thanks.html" target="_blank" rel="noopener noreferrer" class="footer__link-item">Thanks<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div></div><div class="footer__bottom text--center"><div class="footer__copyright"><footer class="footer">
         <div class="container">
           <div class="content has-text-centered">
             <p>
@@ -22,7 +22,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/4.5.1/security/overview/index.html b/content/docs/4.5.1/security/overview/index.html
index f8a9066..ff5d297 100644
--- a/content/docs/4.5.1/security/overview/index.html
+++ b/content/docs/4.5.1/security/overview/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">BookKeeper Security | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/4.5.1/security/overview"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.5.1"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.5.1"><meta data-rh="true" name="docsearch:version" content="4.5.1"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.5.1"><meta data-rh="true" property="og:title" content="BookKeeper Security | Apache BookKeeper"><meta data-rh="true" name="description" content="In the 4.5.0 release, the BookKeeper community added a number of features that can be used, together or separately, to secure a BookKeeper cluster."><meta data-rh="true" property="og:description" content="In the 4.5.0 release, the BookKeeper community added a number of features that can be used, together or separately, to secure a BookKeeper cluster."><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/4.5.1/security/overview"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.5.1/security/overview" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.5.1/security/overview" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -23,7 +23,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/4.5.1/security/sasl/index.html b/content/docs/4.5.1/security/sasl/index.html
index b594887..323a7b4 100644
--- a/content/docs/4.5.1/security/sasl/index.html
+++ b/content/docs/4.5.1/security/sasl/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">Authentication using SASL | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/4.5.1/security/sasl"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.5.1"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.5.1"><meta data-rh="true" name="docsearch:version" content="4.5.1"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.5.1"><meta data-rh="true" property="og:title" content="Authentication using SASL | Apache BookKeeper"><meta data-rh="true" name="description" content="Bookies support client authentication via SASL. Currently we only support GSSAPI (Kerberos). We will start"><meta data-rh="true" property="og:description" content="Bookies support client authentication via SASL. Currently we only support GSSAPI (Kerberos). We will start"><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/4.5.1/security/sasl"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.5.1/security/sasl" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.5.1/security/sasl" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -45,7 +45,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/4.5.1/security/tls/index.html b/content/docs/4.5.1/security/tls/index.html
index 413d793..85ae000 100644
--- a/content/docs/4.5.1/security/tls/index.html
+++ b/content/docs/4.5.1/security/tls/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">Encryption and Authentication using TLS | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/4.5.1/security/tls"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.5.1"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.5.1"><meta data-rh="true" name="docsearch:version" content="4.5.1"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.5.1"><meta data-rh="true" property="og:title" content="Encryption and Authentication using TLS | Apache BookKeeper"><meta data-rh="true" name="description" content="Apache BookKeeper allows clients and autorecovery daemons to communicate over TLS, although this is not enabled by default."><meta data-rh="true" property="og:description" content="Apache BookKeeper allows clients and autorecovery daemons to communicate over TLS, although this is not enabled by default."><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/4.5.1/security/tls"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.5.1/security/tls" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.5.1/security/tls" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -53,7 +53,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/4.5.1/security/zookeeper/index.html b/content/docs/4.5.1/security/zookeeper/index.html
index 40f71ff..a54bc37 100644
--- a/content/docs/4.5.1/security/zookeeper/index.html
+++ b/content/docs/4.5.1/security/zookeeper/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">ZooKeeper Authentication | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/4.5.1/security/zookeeper"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.5.1"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.5.1"><meta data-rh="true" name="docsearch:version" content="4.5.1"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.5.1"><meta data-rh="true" property="og:title" content="ZooKeeper Authentication | Apache BookKeeper"><meta data-rh="true" name="description" content="New Clusters"><meta data-rh="true" property="og:description" content="New Clusters"><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/4.5.1/security/zookeeper"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.5.1/security/zookeeper" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.5.1/security/zookeeper" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -29,7 +29,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/4.6.2/admin/autorecovery/index.html b/content/docs/4.6.2/admin/autorecovery/index.html
index 335818f..c132bdc 100644
--- a/content/docs/4.6.2/admin/autorecovery/index.html
+++ b/content/docs/4.6.2/admin/autorecovery/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">Using AutoRecovery | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/4.6.2/admin/autorecovery"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.6.2"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.6.2"><meta data-rh="true" name="docsearch:version" content="4.6.2"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.6.2"><meta data-rh="true" property="og:title" content="Using AutoRecovery | Apache BookKeeper"><meta data-rh="true" name="description" content="When a bookie crashes, all ledgers on that bookie become under-replicated. In order to bring all ledgers in your BookKeeper cluster back to full replication, you&#x27;ll need to recover the data from any offline bookies. There are two ways to recover bookies&#x27; data:"><meta data-rh="true" property="og:description" content="When a bookie crashes, all ledgers on that bookie become under-replicated. In order to bring all ledgers in your BookKeeper cluster back to full replication, you&#x27;ll need to recover the data from any offline bookies. There are two ways to recover bookies&#x27; data:"><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/4.6.2/admin/autorecovery"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.6.2/admin/autorecovery" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.6.2/admin/autorecovery" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -22,7 +22,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/4.6.2/admin/bookies/index.html b/content/docs/4.6.2/admin/bookies/index.html
index 7ea7ccc..0d99d4c 100644
--- a/content/docs/4.6.2/admin/bookies/index.html
+++ b/content/docs/4.6.2/admin/bookies/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">BookKeeper administration | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/4.6.2/admin/bookies"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.6.2"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.6.2"><meta data-rh="true" name="docsearch:version" content="4.6.2"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.6.2"><meta data-rh="true" property="og:title" content="BookKeeper administration | Apache BookKeeper"><meta data-rh="true" name="description" content="This document is a guide to deploying, administering, and maintaining BookKeeper. It also discusses best practices and common problems."><meta data-rh="true" property="og:description" content="This document is a guide to deploying, administering, and maintaining BookKeeper. It also discusses best practices and common problems."><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/4.6.2/admin/bookies"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.6.2/admin/bookies" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.6.2/admin/bookies" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -22,7 +22,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/4.6.2/admin/geo-replication/index.html b/content/docs/4.6.2/admin/geo-replication/index.html
index 2fed8d9..7aa2045 100644
--- a/content/docs/4.6.2/admin/geo-replication/index.html
+++ b/content/docs/4.6.2/admin/geo-replication/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">Geo-replication | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/4.6.2/admin/geo-replication"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.6.2"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.6.2"><meta data-rh="true" name="docsearch:version" content="4.6.2"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.6.2"><meta data-rh="true" property="og:title" content="Geo-replication | Apache BookKeeper"><meta data-rh="true" name="description" content="Geo-replication is the replication of data across BookKeeper clusters. In order to enable geo-replication for a group of BookKeeper clusters,"><meta data-rh="true" property="og:description" content="Geo-replication is the replication of data across BookKeeper clusters. In order to enable geo-replication for a group of BookKeeper clusters,"><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/4.6.2/admin/geo-replication"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.6.2/admin/geo-replication" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.6.2/admin/geo-replication" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -22,7 +22,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/4.6.2/admin/http/index.html b/content/docs/4.6.2/admin/http/index.html
index f83f6ef..b4945b2 100644
--- a/content/docs/4.6.2/admin/http/index.html
+++ b/content/docs/4.6.2/admin/http/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">BookKeeper Admin REST API | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/4.6.2/admin/http"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.6.2"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.6.2"><meta data-rh="true" name="docsearch:version" content="4.6.2"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.6.2"><meta data-rh="true" property="og:title" content="BookKeeper Admin REST API | Apache BookKeeper"><meta data-rh="true" name="description" content="This document introduces BookKeeper HTTP endpoints, which can be used for BookKeeper administration."><meta data-rh="true" property="og:description" content="This document introduces BookKeeper HTTP endpoints, which can be used for BookKeeper administration."><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/4.6.2/admin/http"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.6.2/admin/http" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.6.2/admin/http" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -23,7 +23,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/4.6.2/admin/metrics/index.html b/content/docs/4.6.2/admin/metrics/index.html
index 68c92dc..f74e74c 100644
--- a/content/docs/4.6.2/admin/metrics/index.html
+++ b/content/docs/4.6.2/admin/metrics/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">Metric collection | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/4.6.2/admin/metrics"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.6.2"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.6.2"><meta data-rh="true" name="docsearch:version" content="4.6.2"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.6.2"><meta data-rh="true" property="og:title" content="Metric collection | Apache BookKeeper"><meta data-rh="true" name="description" content="BookKeeper enables metrics collection through a variety of stats providers."><meta data-rh="true" property="og:description" content="BookKeeper enables metrics collection through a variety of stats providers."><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/4.6.2/admin/metrics"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.6.2/admin/metrics" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.6.2/admin/metrics" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -22,7 +22,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/4.6.2/admin/perf/index.html b/content/docs/4.6.2/admin/perf/index.html
index 42d3835..9a5f257 100644
--- a/content/docs/4.6.2/admin/perf/index.html
+++ b/content/docs/4.6.2/admin/perf/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">Performance tuning | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/4.6.2/admin/perf"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.6.2"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.6.2"><meta data-rh="true" name="docsearch:version" content="4.6.2"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.6.2"><meta data-rh="true" property="og:title" content="Performance tuning | Apache BookKeeper"><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/4.6.2/admin/perf"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.6.2/admin/perf" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.6.2/admin/perf" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -22,7 +22,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/4.6.2/admin/placement/index.html b/content/docs/4.6.2/admin/placement/index.html
index b0e06a4..7d81378 100644
--- a/content/docs/4.6.2/admin/placement/index.html
+++ b/content/docs/4.6.2/admin/placement/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">Customized placement policies | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/4.6.2/admin/placement"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.6.2"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.6.2"><meta data-rh="true" name="docsearch:version" content="4.6.2"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.6.2"><meta data-rh="true" property="og:title" content="Customized placement policies | Apache BookKeeper"><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/4.6.2/admin/placement"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.6.2/admin/placement" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.6.2/admin/placement" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -22,7 +22,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/4.6.2/admin/upgrade/index.html b/content/docs/4.6.2/admin/upgrade/index.html
index c71960d..fba78b4 100644
--- a/content/docs/4.6.2/admin/upgrade/index.html
+++ b/content/docs/4.6.2/admin/upgrade/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">Upgrade | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/4.6.2/admin/upgrade"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.6.2"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.6.2"><meta data-rh="true" name="docsearch:version" content="4.6.2"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.6.2"><meta data-rh="true" property="og:title" content="Upgrade | Apache BookKeeper"><meta data-rh="true" name="description" content="If you have questions about upgrades (or need help), please feel free to reach out to us by mailing list or Slack Channel."><meta data-rh="true" property="og:description" content="If you have questions about upgrades (or need help), please feel free to reach out to us by mailing list or Slack Channel."><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/4.6.2/admin/upgrade"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.6.2/admin/upgrade" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.6.2/admin/upgrade" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -29,7 +29,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/4.6.2/api/distributedlog-api/index.html b/content/docs/4.6.2/api/distributedlog-api/index.html
index 916a37f..59148be 100644
--- a/content/docs/4.6.2/api/distributedlog-api/index.html
+++ b/content/docs/4.6.2/api/distributedlog-api/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">DistributedLog | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/4.6.2/api/distributedlog-api"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.6.2"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.6.2"><meta data-rh="true" name="docsearch:version" content="4.6.2"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.6.2"><meta data-rh="true" property="og:title" content="DistributedLog | Apache BookKeeper"><meta data-rh="true" name="description" content="DistributedLog began its life as a separate project under the Apache Foundation. It was merged into BookKeeper in 2017."><meta data-rh="true" property="og:description" content="DistributedLog began its life as a separate project under the Apache Foundation. It was merged into BookKeeper in 2017."><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/4.6.2/api/distributedlog-api"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.6.2/api/distributedlog-api" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.6.2/api/distributedlog-api" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -22,7 +22,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/4.6.2/api/ledger-adv-api/index.html b/content/docs/4.6.2/api/ledger-adv-api/index.html
index 5ac671e..0eb29a2 100644
--- a/content/docs/4.6.2/api/ledger-adv-api/index.html
+++ b/content/docs/4.6.2/api/ledger-adv-api/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">The Advanced Ledger API | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/4.6.2/api/ledger-adv-api"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.6.2"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.6.2"><meta data-rh="true" name="docsearch:version" content="4.6.2"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.6.2"><meta data-rh="true" property="og:title" content="The Advanced Ledger API | Apache BookKeeper"><meta data-rh="true" name="description" content="In release 4.5.0, Apache BookKeeper introduces a few advanced API for advanced usage."><meta data-rh="true" property="og:description" content="In release 4.5.0, Apache BookKeeper introduces a few advanced API for advanced usage."><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/4.6.2/api/ledger-adv-api"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.6.2/api/ledger-adv-api" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.6.2/api/ledger-adv-api" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -27,7 +27,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/4.6.2/api/ledger-api/index.html b/content/docs/4.6.2/api/ledger-api/index.html
index 8225b07..71e6aa6a 100644
--- a/content/docs/4.6.2/api/ledger-api/index.html
+++ b/content/docs/4.6.2/api/ledger-api/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">The Ledger API | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/4.6.2/api/ledger-api"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.6.2"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.6.2"><meta data-rh="true" name="docsearch:version" content="4.6.2"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.6.2"><meta data-rh="true" property="og:title" content="The Ledger API | Apache BookKeeper"><meta data-rh="true" name="description" content="The ledger API is a lower-level API for BookKeeper that enables you to interact with ledgers directly."><meta data-rh="true" property="og:description" content="The ledger API is a lower-level API for BookKeeper that enables you to interact with ledgers directly."><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/4.6.2/api/ledger-api"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.6.2/api/ledger-api" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.6.2/api/ledger-api" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -39,7 +39,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/4.6.2/api/overview/index.html b/content/docs/4.6.2/api/overview/index.html
index 7a67885..237243a 100644
--- a/content/docs/4.6.2/api/overview/index.html
+++ b/content/docs/4.6.2/api/overview/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">BookKeeper API | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/4.6.2/api/overview"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.6.2"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.6.2"><meta data-rh="true" name="docsearch:version" content="4.6.2"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.6.2"><meta data-rh="true" property="og:title" content="BookKeeper API | Apache BookKeeper"><meta data-rh="true" name="description" content="BookKeeper offers a few APIs that applications can use to interact with it:"><meta data-rh="true" property="og:description" content="BookKeeper offers a few APIs that applications can use to interact with it:"><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/4.6.2/api/overview"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.6.2/api/overview" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.6.2/api/overview" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -24,7 +24,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/4.6.2/deployment/kubernetes/index.html b/content/docs/4.6.2/deployment/kubernetes/index.html
index e7ab298..b9e7248 100644
--- a/content/docs/4.6.2/deployment/kubernetes/index.html
+++ b/content/docs/4.6.2/deployment/kubernetes/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">Deploying Apache BookKeeper on Kubernetes | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/4.6.2/deployment/kubernetes"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.6.2"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.6.2"><meta data-rh="true" name="docsearch:version" content="4.6.2"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.6.2"><meta data-rh="true" property="og:title" content="Deploying Apache BookKeeper on Kubernetes | Apache BookKeeper"><meta data-rh="true" name="description" content="Apache BookKeeper can be easily deployed in Kubernetes clusters. The managed clusters on Google Container Engine is the most convenient way."><meta data-rh="true" property="og:description" content="Apache BookKeeper can be easily deployed in Kubernetes clusters. The managed clusters on Google Container Engine is the most convenient way."><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/4.6.2/deployment/kubernetes"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.6.2/deployment/kubernetes" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.6.2/deployment/kubernetes" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -29,7 +29,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/4.6.2/deployment/manual/index.html b/content/docs/4.6.2/deployment/manual/index.html
index c10bbca..3c20f12 100644
--- a/content/docs/4.6.2/deployment/manual/index.html
+++ b/content/docs/4.6.2/deployment/manual/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">Manual deployment | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/4.6.2/deployment/manual"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.6.2"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.6.2"><meta data-rh="true" name="docsearch:version" content="4.6.2"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.6.2"><meta data-rh="true" property="og:title" content="Manual deployment | Apache BookKeeper"><meta data-rh="true" name="description" content="A BookKeeper cluster consists of two main components:"><meta data-rh="true" property="og:description" content="A BookKeeper cluster consists of two main components:"><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/4.6.2/deployment/manual"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.6.2/deployment/manual" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.6.2/deployment/manual" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -22,7 +22,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/4.6.2/development/codebase/index.html b/content/docs/4.6.2/development/codebase/index.html
index 888a30e..c4c8c82 100644
--- a/content/docs/4.6.2/development/codebase/index.html
+++ b/content/docs/4.6.2/development/codebase/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">The BookKeeper codebase | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/4.6.2/development/codebase"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.6.2"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.6.2"><meta data-rh="true" name="docsearch:version" content="4.6.2"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.6.2"><meta data-rh="true" property="og:title" content="The BookKeeper codebase | Apache BookKeeper"><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/4.6.2/development/codebase"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.6.2/development/codebase" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.6.2/development/codebase" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -22,7 +22,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/4.6.2/development/protocol/index.html b/content/docs/4.6.2/development/protocol/index.html
index d7ce889..78a1f28 100644
--- a/content/docs/4.6.2/development/protocol/index.html
+++ b/content/docs/4.6.2/development/protocol/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">The BookKeeper protocol | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/4.6.2/development/protocol"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.6.2"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.6.2"><meta data-rh="true" name="docsearch:version" content="4.6.2"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.6.2"><meta data-rh="true" property="og:title" content="The BookKeeper protocol | Apache BookKeeper"><meta data-rh="true" name="description" content="BookKeeper uses a special replication protocol for guaranteeing persistent storage of entries in an ensemble of bookies."><meta data-rh="true" property="og:description" content="BookKeeper uses a special replication protocol for guaranteeing persistent storage of entries in an ensemble of bookies."><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/4.6.2/development/protocol"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.6.2/development/protocol" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.6.2/development/protocol" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -22,7 +22,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/4.6.2/getting-started/concepts/index.html b/content/docs/4.6.2/getting-started/concepts/index.html
index e1b2639..85e092a 100644
--- a/content/docs/4.6.2/getting-started/concepts/index.html
+++ b/content/docs/4.6.2/getting-started/concepts/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">BookKeeper concepts and architecture | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/4.6.2/getting-started/concepts"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.6.2"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.6.2"><meta data-rh="true" name="docsearch:version" content="4.6.2"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.6.2"><meta data-rh="true" property="og:title" content="BookKeeper concepts and architecture | Apache BookKeeper"><meta data-rh="true" name="description" content="BookKeeper is a service that provides persistent storage of streams of log entries---aka records---in sequences called ledgers. BookKeeper replicates stored entries across multiple servers."><meta data-rh="true" property="og:description" content="BookKeeper is a service that provides persistent storage of streams of log entries---aka records---in sequences called ledgers. BookKeeper replicates stored entries across multiple servers."><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/4.6.2/getting-started/concepts"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.6.2/getting-started/concepts" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.6.2/getting-started/concepts" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -22,7 +22,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/4.6.2/getting-started/installation/index.html b/content/docs/4.6.2/getting-started/installation/index.html
index 4aa85c4..e62a281 100644
--- a/content/docs/4.6.2/getting-started/installation/index.html
+++ b/content/docs/4.6.2/getting-started/installation/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">BookKeeper installation | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/4.6.2/getting-started/installation"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.6.2"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.6.2"><meta data-rh="true" name="docsearch:version" content="4.6.2"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.6.2"><meta data-rh="true" property="og:title" content="BookKeeper installation | Apache BookKeeper"><meta data-rh="true" name="description" content="You can install BookKeeper either by downloading a GZipped tarball package or cloning the BookKeeper repository."><meta data-rh="true" property="og:description" content="You can install BookKeeper either by downloading a GZipped tarball package or cloning the BookKeeper repository."><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/4.6.2/getting-started/installation"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.6.2/getting-started/installation" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.6.2/getting-started/installation" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -22,7 +22,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/4.6.2/getting-started/run-locally/index.html b/content/docs/4.6.2/getting-started/run-locally/index.html
index 9bd1e29..dedfcfa 100644
--- a/content/docs/4.6.2/getting-started/run-locally/index.html
+++ b/content/docs/4.6.2/getting-started/run-locally/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">Run bookies locally | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/4.6.2/getting-started/run-locally"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.6.2"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.6.2"><meta data-rh="true" name="docsearch:version" content="4.6.2"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.6.2"><meta data-rh="true" property="og:title" content="Run bookies locally | Apache BookKeeper"><meta data-rh="true" name="description" content="Bookies are individual BookKeeper servers. You can run an ensemble of bookies locally on a single machine using the localbookie command of the bookkeeper CLI tool and specifying the number of bookies you&#x27;d like to include in the ensemble."><meta data-rh="true" property="og:description" content="Bookies are individual BookKeeper servers. You can run an ensemble of bookies locally on a single machine using the localbookie command of the bookkeeper CLI tool and specifying the number of bookies you&#x27;d like to include in the ensemble."><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/4.6.2/getting-started/run-locally"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.6.2/getting-started/run-locally" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.6.2/getting-started/run-locally" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -22,7 +22,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/4.6.2/overview/index.html b/content/docs/4.6.2/overview/index.html
index d950ceb..91940e4 100644
--- a/content/docs/4.6.2/overview/index.html
+++ b/content/docs/4.6.2/overview/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">Apache BookKeeper 4.6.2 | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/4.6.2/overview/"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.6.2"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.6.2"><meta data-rh="true" name="docsearch:version" content="4.6.2"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.6.2"><meta data-rh="true" property="og:title" content="Apache BookKeeper 4.6.2 | Apache BookKeeper"><meta data-rh="true" name="description" content="&lt;!--"><meta data-rh="true" property="og:description" content="&lt;!--"><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/4.6.2/overview/"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.6.2/overview/" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.6.2/overview/" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -25,7 +25,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/4.6.2/reference/cli/index.html b/content/docs/4.6.2/reference/cli/index.html
index 48fab18..2dcc782 100644
--- a/content/docs/4.6.2/reference/cli/index.html
+++ b/content/docs/4.6.2/reference/cli/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">BookKeeper CLI tool reference | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/4.6.2/reference/cli"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.6.2"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.6.2"><meta data-rh="true" name="docsearch:version" content="4.6.2"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.6.2"><meta data-rh="true" property="og:title" content="BookKeeper CLI tool reference | Apache BookKeeper"><meta data-rh="true" name="description" content="bookkeeper command"><meta data-rh="true" property="og:description" content="bookkeeper command"><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/4.6.2/reference/cli"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.6.2/reference/cli" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.6.2/reference/cli" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -29,7 +29,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/4.6.2/reference/config/index.html b/content/docs/4.6.2/reference/config/index.html
index 3758bde..2300e17 100644
--- a/content/docs/4.6.2/reference/config/index.html
+++ b/content/docs/4.6.2/reference/config/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">BookKeeper configuration | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/4.6.2/reference/config"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.6.2"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.6.2"><meta data-rh="true" name="docsearch:version" content="4.6.2"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.6.2"><meta data-rh="true" property="og:title" content="BookKeeper configuration | Apache BookKeeper"><meta data-rh="true" name="description" content="The table below lists parameters that you can set to configure bookies. All configuration takes place in the bk_server.conf file in the bookkeeper-server/conf directory of your BookKeeper installation."><meta data-rh="true" property="og:description" content="The table below lists parameters that you can set to configure bookies. All configuration takes place in the bk_server.conf file in the bookkeeper-server/conf directory of your BookKeeper installation."><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/4.6.2/reference/config"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.6.2/reference/config" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.6.2/reference/config" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -22,7 +22,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/4.6.2/reference/metrics/index.html b/content/docs/4.6.2/reference/metrics/index.html
index afe75a6..ac6ae76 100644
--- a/content/docs/4.6.2/reference/metrics/index.html
+++ b/content/docs/4.6.2/reference/metrics/index.html
@@ -4,12 +4,12 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">BookKeeper metrics reference | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/4.6.2/reference/metrics"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.6.2"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.6.2"><meta data-rh="true" name="docsearch:version" content="4.6.2"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.6.2"><meta data-rh="true" property="og:title" content="BookKeeper metrics reference | Apache BookKeeper"><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/4.6.2/reference/metrics"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.6.2/reference/metrics" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.6.2/reference/metrics" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
-<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navbar__brand" href="/"><div class="navbar__logo"><img src="/img/bk-logo.svg" alt="Apache Bookkeeper" class="themedImage_ToTc themedImage--light_HNdA"><img src="/img/bk-logo.svg" alt="Apache Bookkeeper" class="themedImage_ToTc themedImage--dark_i4oU"></div><b class="navbar__title text--truncate">Apache BookKeeper</b></a><a class="navbar__item navbar__link" href="/docs/4.6.2/overview/">Documentation</a><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Community</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/community/mailing-lists">Mailing lists</a></li><li><a class="dropdown__link" href="/community/slack">Slack</a></li><li><a href="https://github.com/apache/bookkeeper/issues" target="_blank" rel="noopener noreferrer" class="dropdown__link">Github issues<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a class="dropdown__link" href="/community/releases">Release management</a></li><li><a class="dropdown__link" href="/community/meeting">Community meetings</a></li><li><a class="dropdown__link" href="/community/contributing">Contribution guide</a></li><li><a class="dropdown__link" href="/community/coding-guide">Coding guide</a></li><li><a class="dropdown__link" href="/community/testing">Testing guide</a></li><li><a class="dropdown__link" href="/community/issue-report">Issue report guide</a></li><li><a class="dropdown__link" href="/community/release-guide">Release guide</a></li><li><a class="dropdown__link" href="/community/presentations">Presentations</a></li><li><a class="dropdown__link" href="/community/bookkeeper-proposals">BookKeeper proposals (BP)</a></li></ul></div><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Project</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/project/who">Who are we?</a></li><li><a class="dropdown__link" href="/project/bylaws">Bylaws</a></li><li><a href="https://apache.org/licenses" target="_blank" rel="noopener noreferrer" class="dropdown__link">License<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a class="dropdown__link" href="/project/privacy">Privacy policy</a></li><li><a href="https://www.apache.org/foundation/sponsorship.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Sponsorship<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a href="https://www.apache.org/foundation/thanks.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Thanks<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div></div><div class="navbar__items navbar__items--right"><div class="navbar__item dropdown dropdown--hoverable dropdown--right"><a class="navbar__link" aria-haspopup="true" aria-expanded="false" role="button" href="/docs/4.6.2/overview/">4.6.2</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/docs/next/overview/">Next</a></li><li><a class="dropdown__link" href="/docs/admin/autorecovery">4.17.0</a></li><li><a class="dropdown__link" href="/docs/4.16.5/overview/">4.16.5</a></li><li><a class="dropdown__link" href="/docs/4.15.5/overview/">4.15.5</a></li><li><a class="dropdown__link" href="/docs/4.14.8/reference/metrics">4.14.8</a></li><li><a class="dropdown__link" href="/docs/4.13.0/reference/metrics">4.13.0</a></li><li><a class="dropdown__link" href="/docs/4.12.1/reference/metrics">4.12.1</a></li><li><a class="dropdown__link" href="/docs/4.11.1/reference/metrics">4.11.1</a></li><li><a class="dropdown__link" href="/docs/4.10.0/reference/metrics">4.10.0</a></li><li><a class="dropdown__link" href="/docs/4.9.2/reference/metrics">4.9.2</a></li><li><a class="dropdown__link" href="/docs/4.8.2/reference/metrics">4.8.2</a></li><li><a class="dropdown__link" href="/docs/4.7.3/reference/metrics">4.7.3</a></li><li><a aria-current="page" class="dropdown__link dropdown__link--active" href="/docs/4.6.2/reference/metrics">4.6.2</a></li><li><a class="dropdown__link" href="/docs/4.5.1/reference/metrics">4.5.1</a></li></ul></div><a class="navbar__item navbar__link" href="/releases">Download</a><div class="toggle_vylO colorModeToggle_DEke"><button class="clean-btn toggleButton_gllP toggleButtonDisabled_aARS" type="button" disabled="" title="Switch between dark and light mode (currently light mode)" aria-label="Switch between dark and light mode (currently light mode)" aria-live="polite"><svg viewBox="0 0 24 24" width="24" height="24" class="lightToggleIcon_pyhR"><path fill="currentColor" d="M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"></path></svg><svg viewBox="0 0 24 24" width="24" height="24" class="darkToggleIcon_wfgR"><path fill="currentColor" d="M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"></path></svg></button></div><div class="searchBox_ZlJk"></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div></nav><div id="docusaurus_skipToContent_fallback" class="main-wrapper mainWrapper_z2l0 docsWrapper_BCFX"><button aria-label="Scroll back to top" class="clean-btn theme-back-to-top-button backToTopButton_sjWU" type="button"></button><div class="docPage__5DB"><main class="docMainContainer_gTbr docMainContainerEnhanced_Uz_u"><div class="container padding-top--md padding-bottom--lg"><div class="row"><div class="col docItemCol_VOVn"><div class="docItemContainer_Djhp"><article><span class="theme-doc-version-badge badge badge--secondary">Version: 4.6.2</span><div class="theme-doc-markdown markdown"><header><h1>BookKeeper metrics reference</h1></header></div></article><nav class="pagination-nav docusaurus-mt-lg" aria-label="Docs pages navigation"></nav></div></div></div></div></main></div></div><footer class="footer footer--dark"><div class="container container-fluid"><div class="row footer__links"><div class="col footer__col"><div class="footer__title">Documentation</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/docs/overview">Overview</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/getting-started/installation">Getting started</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/deployment/manual">Deployment</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/admin/bookies">Administration</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/api/overview">API</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/security/overview">Security</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/development/protocol">Development</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/reference/config">Reference</a></li></ul></div><div class="col footer__col"><div class="footer__title">Community</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/community/mailing-lists">Mailing lists</a></li><li class="footer__item"><a class="footer__link-item" href="/community/slack">Slack</a></li><li class="footer__item"><a href="https://github.com/apache/bookkeeper" target="_blank" rel="noopener noreferrer" class="footer__link-item">Github<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a href="https://twitter.com/asfbookkeeper" target="_blank" rel="noopener noreferrer" class="footer__link-item">Twitter<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div><div class="col footer__col"><div class="footer__title">Project</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/project/who">Who are we?</a></li><li class="footer__item"><a class="footer__link-item" href="/project/bylaws">Bylaws</a></li><li class="footer__item"><a href="https://apache.org/licenses" target="_blank" rel="noopener noreferrer" class="footer__link-item">License<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a class="footer__link-item" href="/project/privacy">Privacy policy</a></li><li class="footer__item"><a href="https://www.apache.org/foundation/sponsorship.html" target="_blank" rel="noopener noreferrer" class="footer__link-item">Sponsorship<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a href="https://www.apache.org/foundation/thanks.html" target="_blank" rel="noopener noreferrer" class="footer__link-item">Thanks<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div></div><div class="footer__bottom text--center"><div class="footer__copyright"><footer class="footer">
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navbar__brand" href="/"><div class="navbar__logo"><img src="/img/bk-logo.svg" alt="Apache Bookkeeper" class="themedImage_ToTc themedImage--light_HNdA"><img src="/img/bk-logo.svg" alt="Apache Bookkeeper" class="themedImage_ToTc themedImage--dark_i4oU"></div><b class="navbar__title text--truncate">Apache BookKeeper</b></a><a class="navbar__item navbar__link" href="/docs/4.6.2/overview/">Documentation</a><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Community</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/community/mailing-lists">Mailing lists</a></li><li><a class="dropdown__link" href="/community/slack">Slack</a></li><li><a href="https://github.com/apache/bookkeeper/issues" target="_blank" rel="noopener noreferrer" class="dropdown__link">Github issues<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a class="dropdown__link" href="/community/releases">Release management</a></li><li><a class="dropdown__link" href="/community/meeting">Community meetings</a></li><li><a class="dropdown__link" href="/community/contributing">Contribution guide</a></li><li><a class="dropdown__link" href="/community/coding-guide">Coding guide</a></li><li><a class="dropdown__link" href="/community/testing">Testing guide</a></li><li><a class="dropdown__link" href="/community/issue-report">Issue report guide</a></li><li><a class="dropdown__link" href="/community/release-guide">Release guide</a></li><li><a class="dropdown__link" href="/community/presentations">Presentations</a></li><li><a class="dropdown__link" href="/community/bookkeeper-proposals">BookKeeper proposals (BP)</a></li></ul></div><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Project</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/project/who">Who are we?</a></li><li><a class="dropdown__link" href="/project/bylaws">Bylaws</a></li><li><a href="https://apache.org/licenses" target="_blank" rel="noopener noreferrer" class="dropdown__link">License<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a class="dropdown__link" href="/project/privacy">Privacy policy</a></li><li><a href="https://www.apache.org/foundation/sponsorship.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Sponsorship<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a href="https://www.apache.org/foundation/thanks.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Thanks<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div></div><div class="navbar__items navbar__items--right"><div class="navbar__item dropdown dropdown--hoverable dropdown--right"><a class="navbar__link" aria-haspopup="true" aria-expanded="false" role="button" href="/docs/4.6.2/overview/">4.6.2</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/docs/next/overview/">Next</a></li><li><a class="dropdown__link" href="/docs/overview/">4.17.0</a></li><li><a class="dropdown__link" href="/docs/4.16.5/overview/">4.16.5</a></li><li><a class="dropdown__link" href="/docs/4.15.5/overview/">4.15.5</a></li><li><a class="dropdown__link" href="/docs/4.14.8/reference/metrics">4.14.8</a></li><li><a class="dropdown__link" href="/docs/4.13.0/reference/metrics">4.13.0</a></li><li><a class="dropdown__link" href="/docs/4.12.1/reference/metrics">4.12.1</a></li><li><a class="dropdown__link" href="/docs/4.11.1/reference/metrics">4.11.1</a></li><li><a class="dropdown__link" href="/docs/4.10.0/reference/metrics">4.10.0</a></li><li><a class="dropdown__link" href="/docs/4.9.2/reference/metrics">4.9.2</a></li><li><a class="dropdown__link" href="/docs/4.8.2/reference/metrics">4.8.2</a></li><li><a class="dropdown__link" href="/docs/4.7.3/reference/metrics">4.7.3</a></li><li><a aria-current="page" class="dropdown__link dropdown__link--active" href="/docs/4.6.2/reference/metrics">4.6.2</a></li><li><a class="dropdown__link" href="/docs/4.5.1/reference/metrics">4.5.1</a></li></ul></div><a class="navbar__item navbar__link" href="/releases">Download</a><div class="toggle_vylO colorModeToggle_DEke"><button class="clean-btn toggleButton_gllP toggleButtonDisabled_aARS" type="button" disabled="" title="Switch between dark and light mode (currently light mode)" aria-label="Switch between dark and light mode (currently light mode)" aria-live="polite"><svg viewBox="0 0 24 24" width="24" height="24" class="lightToggleIcon_pyhR"><path fill="currentColor" d="M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"></path></svg><svg viewBox="0 0 24 24" width="24" height="24" class="darkToggleIcon_wfgR"><path fill="currentColor" d="M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"></path></svg></button></div><div class="searchBox_ZlJk"></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div></nav><div id="docusaurus_skipToContent_fallback" class="main-wrapper mainWrapper_z2l0 docsWrapper_BCFX"><button aria-label="Scroll back to top" class="clean-btn theme-back-to-top-button backToTopButton_sjWU" type="button"></button><div class="docPage__5DB"><main class="docMainContainer_gTbr docMainContainerEnhanced_Uz_u"><div class="container padding-top--md padding-bottom--lg"><div class="row"><div class="col docItemCol_VOVn"><div class="docItemContainer_Djhp"><article><span class="theme-doc-version-badge badge badge--secondary">Version: 4.6.2</span><div class="theme-doc-markdown markdown"><header><h1>BookKeeper metrics reference</h1></header></div></article><nav class="pagination-nav docusaurus-mt-lg" aria-label="Docs pages navigation"></nav></div></div></div></div></main></div></div><footer class="footer footer--dark"><div class="container container-fluid"><div class="row footer__links"><div class="col footer__col"><div class="footer__title">Documentation</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/docs/overview">Overview</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/getting-started/installation">Getting started</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/deployment/manual">Deployment</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/admin/bookies">Administration</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/api/overview">API</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/security/overview">Security</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/development/protocol">Development</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/reference/config">Reference</a></li></ul></div><div class="col footer__col"><div class="footer__title">Community</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/community/mailing-lists">Mailing lists</a></li><li class="footer__item"><a class="footer__link-item" href="/community/slack">Slack</a></li><li class="footer__item"><a href="https://github.com/apache/bookkeeper" target="_blank" rel="noopener noreferrer" class="footer__link-item">Github<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a href="https://twitter.com/asfbookkeeper" target="_blank" rel="noopener noreferrer" class="footer__link-item">Twitter<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div><div class="col footer__col"><div class="footer__title">Project</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/project/who">Who are we?</a></li><li class="footer__item"><a class="footer__link-item" href="/project/bylaws">Bylaws</a></li><li class="footer__item"><a href="https://apache.org/licenses" target="_blank" rel="noopener noreferrer" class="footer__link-item">License<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a class="footer__link-item" href="/project/privacy">Privacy policy</a></li><li class="footer__item"><a href="https://www.apache.org/foundation/sponsorship.html" target="_blank" rel="noopener noreferrer" class="footer__link-item">Sponsorship<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a href="https://www.apache.org/foundation/thanks.html" target="_blank" rel="noopener noreferrer" class="footer__link-item">Thanks<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div></div><div class="footer__bottom text--center"><div class="footer__copyright"><footer class="footer">
         <div class="container">
           <div class="content has-text-centered">
             <p>
@@ -22,7 +22,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/4.6.2/security/overview/index.html b/content/docs/4.6.2/security/overview/index.html
index adeddec..f2bfaf7 100644
--- a/content/docs/4.6.2/security/overview/index.html
+++ b/content/docs/4.6.2/security/overview/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">BookKeeper Security | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/4.6.2/security/overview"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.6.2"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.6.2"><meta data-rh="true" name="docsearch:version" content="4.6.2"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.6.2"><meta data-rh="true" property="og:title" content="BookKeeper Security | Apache BookKeeper"><meta data-rh="true" name="description" content="In the 4.5.0 release, the BookKeeper community added a number of features that can be used, together or separately, to secure a BookKeeper cluster."><meta data-rh="true" property="og:description" content="In the 4.5.0 release, the BookKeeper community added a number of features that can be used, together or separately, to secure a BookKeeper cluster."><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/4.6.2/security/overview"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.6.2/security/overview" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.6.2/security/overview" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -23,7 +23,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/4.6.2/security/sasl/index.html b/content/docs/4.6.2/security/sasl/index.html
index c798c6e..9a7bbf0 100644
--- a/content/docs/4.6.2/security/sasl/index.html
+++ b/content/docs/4.6.2/security/sasl/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">Authentication using SASL | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/4.6.2/security/sasl"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.6.2"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.6.2"><meta data-rh="true" name="docsearch:version" content="4.6.2"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.6.2"><meta data-rh="true" property="og:title" content="Authentication using SASL | Apache BookKeeper"><meta data-rh="true" name="description" content="Bookies support client authentication via SASL. Currently we only support GSSAPI (Kerberos). We will start"><meta data-rh="true" property="og:description" content="Bookies support client authentication via SASL. Currently we only support GSSAPI (Kerberos). We will start"><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/4.6.2/security/sasl"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.6.2/security/sasl" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.6.2/security/sasl" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -45,7 +45,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/4.6.2/security/tls/index.html b/content/docs/4.6.2/security/tls/index.html
index 27b6c2f..250687a 100644
--- a/content/docs/4.6.2/security/tls/index.html
+++ b/content/docs/4.6.2/security/tls/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">Encryption and Authentication using TLS | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/4.6.2/security/tls"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.6.2"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.6.2"><meta data-rh="true" name="docsearch:version" content="4.6.2"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.6.2"><meta data-rh="true" property="og:title" content="Encryption and Authentication using TLS | Apache BookKeeper"><meta data-rh="true" name="description" content="Apache BookKeeper allows clients and autorecovery daemons to communicate over TLS, although this is not enabled by default."><meta data-rh="true" property="og:description" content="Apache BookKeeper allows clients and autorecovery daemons to communicate over TLS, although this is not enabled by default."><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/4.6.2/security/tls"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.6.2/security/tls" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.6.2/security/tls" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -53,7 +53,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/4.6.2/security/zookeeper/index.html b/content/docs/4.6.2/security/zookeeper/index.html
index 4095f37..f5bd2d0 100644
--- a/content/docs/4.6.2/security/zookeeper/index.html
+++ b/content/docs/4.6.2/security/zookeeper/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">ZooKeeper Authentication | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/4.6.2/security/zookeeper"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.6.2"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.6.2"><meta data-rh="true" name="docsearch:version" content="4.6.2"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.6.2"><meta data-rh="true" property="og:title" content="ZooKeeper Authentication | Apache BookKeeper"><meta data-rh="true" name="description" content="New Clusters"><meta data-rh="true" property="og:description" content="New Clusters"><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/4.6.2/security/zookeeper"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.6.2/security/zookeeper" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.6.2/security/zookeeper" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -29,7 +29,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/4.7.3/admin/autorecovery/index.html b/content/docs/4.7.3/admin/autorecovery/index.html
index 8fe3958..c2151f6 100644
--- a/content/docs/4.7.3/admin/autorecovery/index.html
+++ b/content/docs/4.7.3/admin/autorecovery/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">Using AutoRecovery | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/4.7.3/admin/autorecovery"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.7.3"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.7.3"><meta data-rh="true" name="docsearch:version" content="4.7.3"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.7.3"><meta data-rh="true" property="og:title" content="Using AutoRecovery | Apache BookKeeper"><meta data-rh="true" name="description" content="When a bookie crashes, all ledgers on that bookie become under-replicated. In order to bring all ledgers in your BookKeeper cluster back to full replication, you&#x27;ll need to recover the data from any offline bookies. There are two ways to recover bookies&#x27; data:"><meta data-rh="true" property="og:description" content="When a bookie crashes, all ledgers on that bookie become under-replicated. In order to bring all ledgers in your BookKeeper cluster back to full replication, you&#x27;ll need to recover the data from any offline bookies. There are two ways to recover bookies&#x27; data:"><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/4.7.3/admin/autorecovery"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.7.3/admin/autorecovery" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.7.3/admin/autorecovery" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -22,7 +22,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/4.7.3/admin/bookies/index.html b/content/docs/4.7.3/admin/bookies/index.html
index 750cb83..61c4a4d 100644
--- a/content/docs/4.7.3/admin/bookies/index.html
+++ b/content/docs/4.7.3/admin/bookies/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">BookKeeper administration | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/4.7.3/admin/bookies"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.7.3"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.7.3"><meta data-rh="true" name="docsearch:version" content="4.7.3"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.7.3"><meta data-rh="true" property="og:title" content="BookKeeper administration | Apache BookKeeper"><meta data-rh="true" name="description" content="This document is a guide to deploying, administering, and maintaining BookKeeper. It also discusses best practices and common problems."><meta data-rh="true" property="og:description" content="This document is a guide to deploying, administering, and maintaining BookKeeper. It also discusses best practices and common problems."><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/4.7.3/admin/bookies"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.7.3/admin/bookies" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.7.3/admin/bookies" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -22,7 +22,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/4.7.3/admin/geo-replication/index.html b/content/docs/4.7.3/admin/geo-replication/index.html
index 20fe2e1..c231122 100644
--- a/content/docs/4.7.3/admin/geo-replication/index.html
+++ b/content/docs/4.7.3/admin/geo-replication/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">Geo-replication | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/4.7.3/admin/geo-replication"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.7.3"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.7.3"><meta data-rh="true" name="docsearch:version" content="4.7.3"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.7.3"><meta data-rh="true" property="og:title" content="Geo-replication | Apache BookKeeper"><meta data-rh="true" name="description" content="Geo-replication is the replication of data across BookKeeper clusters. In order to enable geo-replication for a group of BookKeeper clusters,"><meta data-rh="true" property="og:description" content="Geo-replication is the replication of data across BookKeeper clusters. In order to enable geo-replication for a group of BookKeeper clusters,"><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/4.7.3/admin/geo-replication"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.7.3/admin/geo-replication" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.7.3/admin/geo-replication" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -22,7 +22,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/4.7.3/admin/http/index.html b/content/docs/4.7.3/admin/http/index.html
index a62049d..a644d0c 100644
--- a/content/docs/4.7.3/admin/http/index.html
+++ b/content/docs/4.7.3/admin/http/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">BookKeeper Admin REST API | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/4.7.3/admin/http"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.7.3"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.7.3"><meta data-rh="true" name="docsearch:version" content="4.7.3"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.7.3"><meta data-rh="true" property="og:title" content="BookKeeper Admin REST API | Apache BookKeeper"><meta data-rh="true" name="description" content="This document introduces BookKeeper HTTP endpoints, which can be used for BookKeeper administration."><meta data-rh="true" property="og:description" content="This document introduces BookKeeper HTTP endpoints, which can be used for BookKeeper administration."><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/4.7.3/admin/http"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.7.3/admin/http" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.7.3/admin/http" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -23,7 +23,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/4.7.3/admin/metrics/index.html b/content/docs/4.7.3/admin/metrics/index.html
index ec6525c..8db921d 100644
--- a/content/docs/4.7.3/admin/metrics/index.html
+++ b/content/docs/4.7.3/admin/metrics/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">Metric collection | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/4.7.3/admin/metrics"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.7.3"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.7.3"><meta data-rh="true" name="docsearch:version" content="4.7.3"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.7.3"><meta data-rh="true" property="og:title" content="Metric collection | Apache BookKeeper"><meta data-rh="true" name="description" content="BookKeeper enables metrics collection through a variety of stats providers."><meta data-rh="true" property="og:description" content="BookKeeper enables metrics collection through a variety of stats providers."><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/4.7.3/admin/metrics"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.7.3/admin/metrics" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.7.3/admin/metrics" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -22,7 +22,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/4.7.3/admin/perf/index.html b/content/docs/4.7.3/admin/perf/index.html
index faa38c5..2c7c1c3 100644
--- a/content/docs/4.7.3/admin/perf/index.html
+++ b/content/docs/4.7.3/admin/perf/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">Performance tuning | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/4.7.3/admin/perf"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.7.3"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.7.3"><meta data-rh="true" name="docsearch:version" content="4.7.3"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.7.3"><meta data-rh="true" property="og:title" content="Performance tuning | Apache BookKeeper"><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/4.7.3/admin/perf"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.7.3/admin/perf" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.7.3/admin/perf" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -22,7 +22,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/4.7.3/admin/placement/index.html b/content/docs/4.7.3/admin/placement/index.html
index ef6dd48..22e98c7 100644
--- a/content/docs/4.7.3/admin/placement/index.html
+++ b/content/docs/4.7.3/admin/placement/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">Customized placement policies | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/4.7.3/admin/placement"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.7.3"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.7.3"><meta data-rh="true" name="docsearch:version" content="4.7.3"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.7.3"><meta data-rh="true" property="og:title" content="Customized placement policies | Apache BookKeeper"><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/4.7.3/admin/placement"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.7.3/admin/placement" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.7.3/admin/placement" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -22,7 +22,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/4.7.3/admin/upgrade/index.html b/content/docs/4.7.3/admin/upgrade/index.html
index 095bb3b..1c491ed 100644
--- a/content/docs/4.7.3/admin/upgrade/index.html
+++ b/content/docs/4.7.3/admin/upgrade/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">Upgrade | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/4.7.3/admin/upgrade"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.7.3"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.7.3"><meta data-rh="true" name="docsearch:version" content="4.7.3"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.7.3"><meta data-rh="true" property="og:title" content="Upgrade | Apache BookKeeper"><meta data-rh="true" name="description" content="If you have questions about upgrades (or need help), please feel free to reach out to us by mailing list or Slack Channel."><meta data-rh="true" property="og:description" content="If you have questions about upgrades (or need help), please feel free to reach out to us by mailing list or Slack Channel."><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/4.7.3/admin/upgrade"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.7.3/admin/upgrade" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.7.3/admin/upgrade" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -29,7 +29,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/4.7.3/api/distributedlog-api/index.html b/content/docs/4.7.3/api/distributedlog-api/index.html
index 25a8a41..de0e93a 100644
--- a/content/docs/4.7.3/api/distributedlog-api/index.html
+++ b/content/docs/4.7.3/api/distributedlog-api/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">DistributedLog | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/4.7.3/api/distributedlog-api"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.7.3"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.7.3"><meta data-rh="true" name="docsearch:version" content="4.7.3"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.7.3"><meta data-rh="true" property="og:title" content="DistributedLog | Apache BookKeeper"><meta data-rh="true" name="description" content="DistributedLog began its life as a separate project under the Apache Foundation. It was merged into BookKeeper in 2017."><meta data-rh="true" property="og:description" content="DistributedLog began its life as a separate project under the Apache Foundation. It was merged into BookKeeper in 2017."><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/4.7.3/api/distributedlog-api"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.7.3/api/distributedlog-api" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.7.3/api/distributedlog-api" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -22,7 +22,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/4.7.3/api/ledger-adv-api/index.html b/content/docs/4.7.3/api/ledger-adv-api/index.html
index 3065790..0faf8be 100644
--- a/content/docs/4.7.3/api/ledger-adv-api/index.html
+++ b/content/docs/4.7.3/api/ledger-adv-api/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">The Advanced Ledger API | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/4.7.3/api/ledger-adv-api"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.7.3"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.7.3"><meta data-rh="true" name="docsearch:version" content="4.7.3"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.7.3"><meta data-rh="true" property="og:title" content="The Advanced Ledger API | Apache BookKeeper"><meta data-rh="true" name="description" content="In release 4.5.0, Apache BookKeeper introduces a few advanced API for advanced usage."><meta data-rh="true" property="og:description" content="In release 4.5.0, Apache BookKeeper introduces a few advanced API for advanced usage."><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/4.7.3/api/ledger-adv-api"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.7.3/api/ledger-adv-api" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.7.3/api/ledger-adv-api" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -27,7 +27,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/4.7.3/api/ledger-api/index.html b/content/docs/4.7.3/api/ledger-api/index.html
index 20e4f6c..e219ff4 100644
--- a/content/docs/4.7.3/api/ledger-api/index.html
+++ b/content/docs/4.7.3/api/ledger-api/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">The Ledger API | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/4.7.3/api/ledger-api"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.7.3"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.7.3"><meta data-rh="true" name="docsearch:version" content="4.7.3"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.7.3"><meta data-rh="true" property="og:title" content="The Ledger API | Apache BookKeeper"><meta data-rh="true" name="description" content="The ledger API is a lower-level API for BookKeeper that enables you to interact with ledgers directly."><meta data-rh="true" property="og:description" content="The ledger API is a lower-level API for BookKeeper that enables you to interact with ledgers directly."><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/4.7.3/api/ledger-api"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.7.3/api/ledger-api" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.7.3/api/ledger-api" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -38,7 +38,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/4.7.3/api/overview/index.html b/content/docs/4.7.3/api/overview/index.html
index 2868474..d8eb700 100644
--- a/content/docs/4.7.3/api/overview/index.html
+++ b/content/docs/4.7.3/api/overview/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">BookKeeper API | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/4.7.3/api/overview"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.7.3"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.7.3"><meta data-rh="true" name="docsearch:version" content="4.7.3"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.7.3"><meta data-rh="true" property="og:title" content="BookKeeper API | Apache BookKeeper"><meta data-rh="true" name="description" content="BookKeeper offers a few APIs that applications can use to interact with it:"><meta data-rh="true" property="og:description" content="BookKeeper offers a few APIs that applications can use to interact with it:"><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/4.7.3/api/overview"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.7.3/api/overview" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.7.3/api/overview" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -24,7 +24,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/4.7.3/deployment/kubernetes/index.html b/content/docs/4.7.3/deployment/kubernetes/index.html
index d8d99e7..a28aada 100644
--- a/content/docs/4.7.3/deployment/kubernetes/index.html
+++ b/content/docs/4.7.3/deployment/kubernetes/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">Deploying Apache BookKeeper on Kubernetes | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/4.7.3/deployment/kubernetes"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.7.3"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.7.3"><meta data-rh="true" name="docsearch:version" content="4.7.3"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.7.3"><meta data-rh="true" property="og:title" content="Deploying Apache BookKeeper on Kubernetes | Apache BookKeeper"><meta data-rh="true" name="description" content="Apache BookKeeper can be easily deployed in Kubernetes clusters. The managed clusters on Google Container Engine is the most convenient way."><meta data-rh="true" property="og:description" content="Apache BookKeeper can be easily deployed in Kubernetes clusters. The managed clusters on Google Container Engine is the most convenient way."><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/4.7.3/deployment/kubernetes"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.7.3/deployment/kubernetes" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.7.3/deployment/kubernetes" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -29,7 +29,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/4.7.3/deployment/manual/index.html b/content/docs/4.7.3/deployment/manual/index.html
index f1604b7..8440c62 100644
--- a/content/docs/4.7.3/deployment/manual/index.html
+++ b/content/docs/4.7.3/deployment/manual/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">Manual deployment | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/4.7.3/deployment/manual"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.7.3"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.7.3"><meta data-rh="true" name="docsearch:version" content="4.7.3"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.7.3"><meta data-rh="true" property="og:title" content="Manual deployment | Apache BookKeeper"><meta data-rh="true" name="description" content="A BookKeeper cluster consists of two main components:"><meta data-rh="true" property="og:description" content="A BookKeeper cluster consists of two main components:"><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/4.7.3/deployment/manual"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.7.3/deployment/manual" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.7.3/deployment/manual" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -22,7 +22,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/4.7.3/development/codebase/index.html b/content/docs/4.7.3/development/codebase/index.html
index 38c49c7..2ede174 100644
--- a/content/docs/4.7.3/development/codebase/index.html
+++ b/content/docs/4.7.3/development/codebase/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">The BookKeeper codebase | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/4.7.3/development/codebase"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.7.3"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.7.3"><meta data-rh="true" name="docsearch:version" content="4.7.3"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.7.3"><meta data-rh="true" property="og:title" content="The BookKeeper codebase | Apache BookKeeper"><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/4.7.3/development/codebase"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.7.3/development/codebase" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.7.3/development/codebase" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -22,7 +22,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/4.7.3/development/protocol/index.html b/content/docs/4.7.3/development/protocol/index.html
index 74ad985..3e43788 100644
--- a/content/docs/4.7.3/development/protocol/index.html
+++ b/content/docs/4.7.3/development/protocol/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">The BookKeeper protocol | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/4.7.3/development/protocol"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.7.3"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.7.3"><meta data-rh="true" name="docsearch:version" content="4.7.3"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.7.3"><meta data-rh="true" property="og:title" content="The BookKeeper protocol | Apache BookKeeper"><meta data-rh="true" name="description" content="BookKeeper uses a special replication protocol for guaranteeing persistent storage of entries in an ensemble of bookies."><meta data-rh="true" property="og:description" content="BookKeeper uses a special replication protocol for guaranteeing persistent storage of entries in an ensemble of bookies."><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/4.7.3/development/protocol"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.7.3/development/protocol" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.7.3/development/protocol" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -22,7 +22,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/4.7.3/getting-started/concepts/index.html b/content/docs/4.7.3/getting-started/concepts/index.html
index d2166a4..e83282a 100644
--- a/content/docs/4.7.3/getting-started/concepts/index.html
+++ b/content/docs/4.7.3/getting-started/concepts/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">BookKeeper concepts and architecture | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/4.7.3/getting-started/concepts"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.7.3"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.7.3"><meta data-rh="true" name="docsearch:version" content="4.7.3"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.7.3"><meta data-rh="true" property="og:title" content="BookKeeper concepts and architecture | Apache BookKeeper"><meta data-rh="true" name="description" content="BookKeeper is a service that provides persistent storage of streams of log entries---aka records---in sequences called ledgers. BookKeeper replicates stored entries across multiple servers."><meta data-rh="true" property="og:description" content="BookKeeper is a service that provides persistent storage of streams of log entries---aka records---in sequences called ledgers. BookKeeper replicates stored entries across multiple servers."><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/4.7.3/getting-started/concepts"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.7.3/getting-started/concepts" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.7.3/getting-started/concepts" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -22,7 +22,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/4.7.3/getting-started/installation/index.html b/content/docs/4.7.3/getting-started/installation/index.html
index e04cf94..9880c23 100644
--- a/content/docs/4.7.3/getting-started/installation/index.html
+++ b/content/docs/4.7.3/getting-started/installation/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">BookKeeper installation | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/4.7.3/getting-started/installation"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.7.3"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.7.3"><meta data-rh="true" name="docsearch:version" content="4.7.3"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.7.3"><meta data-rh="true" property="og:title" content="BookKeeper installation | Apache BookKeeper"><meta data-rh="true" name="description" content="You can install BookKeeper either by downloading a GZipped tarball package or cloning the BookKeeper repository."><meta data-rh="true" property="og:description" content="You can install BookKeeper either by downloading a GZipped tarball package or cloning the BookKeeper repository."><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/4.7.3/getting-started/installation"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.7.3/getting-started/installation" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.7.3/getting-started/installation" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -22,7 +22,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/4.7.3/getting-started/run-locally/index.html b/content/docs/4.7.3/getting-started/run-locally/index.html
index f4dda0f..9b24f7e 100644
--- a/content/docs/4.7.3/getting-started/run-locally/index.html
+++ b/content/docs/4.7.3/getting-started/run-locally/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">Run bookies locally | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/4.7.3/getting-started/run-locally"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.7.3"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.7.3"><meta data-rh="true" name="docsearch:version" content="4.7.3"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.7.3"><meta data-rh="true" property="og:title" content="Run bookies locally | Apache BookKeeper"><meta data-rh="true" name="description" content="Bookies are individual BookKeeper servers. You can run an ensemble of bookies locally on a single machine using the localbookie command of the bookkeeper CLI tool and specifying the number of bookies you&#x27;d like to include in the ensemble."><meta data-rh="true" property="og:description" content="Bookies are individual BookKeeper servers. You can run an ensemble of bookies locally on a single machine using the localbookie command of the bookkeeper CLI tool and specifying the number of bookies you&#x27;d like to include in the ensemble."><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/4.7.3/getting-started/run-locally"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.7.3/getting-started/run-locally" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.7.3/getting-started/run-locally" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -22,7 +22,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/4.7.3/overview/index.html b/content/docs/4.7.3/overview/index.html
index a4af192..e4b5996 100644
--- a/content/docs/4.7.3/overview/index.html
+++ b/content/docs/4.7.3/overview/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">Apache BookKeeper 4.7.3 | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/4.7.3/overview/"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.7.3"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.7.3"><meta data-rh="true" name="docsearch:version" content="4.7.3"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.7.3"><meta data-rh="true" property="og:title" content="Apache BookKeeper 4.7.3 | Apache BookKeeper"><meta data-rh="true" name="description" content="&lt;!--"><meta data-rh="true" property="og:description" content="&lt;!--"><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/4.7.3/overview/"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.7.3/overview/" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.7.3/overview/" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -24,7 +24,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/4.7.3/reference/cli/index.html b/content/docs/4.7.3/reference/cli/index.html
index efbed5e..7a21188 100644
--- a/content/docs/4.7.3/reference/cli/index.html
+++ b/content/docs/4.7.3/reference/cli/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">BookKeeper CLI tool reference | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/4.7.3/reference/cli"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.7.3"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.7.3"><meta data-rh="true" name="docsearch:version" content="4.7.3"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.7.3"><meta data-rh="true" property="og:title" content="BookKeeper CLI tool reference | Apache BookKeeper"><meta data-rh="true" name="description" content="bookkeeper command"><meta data-rh="true" property="og:description" content="bookkeeper command"><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/4.7.3/reference/cli"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.7.3/reference/cli" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.7.3/reference/cli" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -29,7 +29,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/4.7.3/reference/config/index.html b/content/docs/4.7.3/reference/config/index.html
index 803ffae..fed92ab 100644
--- a/content/docs/4.7.3/reference/config/index.html
+++ b/content/docs/4.7.3/reference/config/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">BookKeeper configuration | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/4.7.3/reference/config"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.7.3"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.7.3"><meta data-rh="true" name="docsearch:version" content="4.7.3"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.7.3"><meta data-rh="true" property="og:title" content="BookKeeper configuration | Apache BookKeeper"><meta data-rh="true" name="description" content="The table below lists parameters that you can set to configure bookies. All configuration takes place in the bk_server.conf file in the bookkeeper-server/conf directory of your BookKeeper installation."><meta data-rh="true" property="og:description" content="The table below lists parameters that you can set to configure bookies. All configuration takes place in the bk_server.conf file in the bookkeeper-server/conf directory of your BookKeeper installation."><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/4.7.3/reference/config"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.7.3/reference/config" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.7.3/reference/config" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -22,7 +22,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/4.7.3/reference/metrics/index.html b/content/docs/4.7.3/reference/metrics/index.html
index 937db78..8196fbc 100644
--- a/content/docs/4.7.3/reference/metrics/index.html
+++ b/content/docs/4.7.3/reference/metrics/index.html
@@ -4,12 +4,12 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">BookKeeper metrics reference | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/4.7.3/reference/metrics"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.7.3"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.7.3"><meta data-rh="true" name="docsearch:version" content="4.7.3"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.7.3"><meta data-rh="true" property="og:title" content="BookKeeper metrics reference | Apache BookKeeper"><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/4.7.3/reference/metrics"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.7.3/reference/metrics" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.7.3/reference/metrics" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
-<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navbar__brand" href="/"><div class="navbar__logo"><img src="/img/bk-logo.svg" alt="Apache Bookkeeper" class="themedImage_ToTc themedImage--light_HNdA"><img src="/img/bk-logo.svg" alt="Apache Bookkeeper" class="themedImage_ToTc themedImage--dark_i4oU"></div><b class="navbar__title text--truncate">Apache BookKeeper</b></a><a class="navbar__item navbar__link" href="/docs/4.7.3/overview/">Documentation</a><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Community</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/community/mailing-lists">Mailing lists</a></li><li><a class="dropdown__link" href="/community/slack">Slack</a></li><li><a href="https://github.com/apache/bookkeeper/issues" target="_blank" rel="noopener noreferrer" class="dropdown__link">Github issues<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a class="dropdown__link" href="/community/releases">Release management</a></li><li><a class="dropdown__link" href="/community/meeting">Community meetings</a></li><li><a class="dropdown__link" href="/community/contributing">Contribution guide</a></li><li><a class="dropdown__link" href="/community/coding-guide">Coding guide</a></li><li><a class="dropdown__link" href="/community/testing">Testing guide</a></li><li><a class="dropdown__link" href="/community/issue-report">Issue report guide</a></li><li><a class="dropdown__link" href="/community/release-guide">Release guide</a></li><li><a class="dropdown__link" href="/community/presentations">Presentations</a></li><li><a class="dropdown__link" href="/community/bookkeeper-proposals">BookKeeper proposals (BP)</a></li></ul></div><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Project</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/project/who">Who are we?</a></li><li><a class="dropdown__link" href="/project/bylaws">Bylaws</a></li><li><a href="https://apache.org/licenses" target="_blank" rel="noopener noreferrer" class="dropdown__link">License<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a class="dropdown__link" href="/project/privacy">Privacy policy</a></li><li><a href="https://www.apache.org/foundation/sponsorship.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Sponsorship<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a href="https://www.apache.org/foundation/thanks.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Thanks<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div></div><div class="navbar__items navbar__items--right"><div class="navbar__item dropdown dropdown--hoverable dropdown--right"><a class="navbar__link" aria-haspopup="true" aria-expanded="false" role="button" href="/docs/4.7.3/overview/">4.7.3</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/docs/next/overview/">Next</a></li><li><a class="dropdown__link" href="/docs/admin/autorecovery">4.17.0</a></li><li><a class="dropdown__link" href="/docs/4.16.5/overview/">4.16.5</a></li><li><a class="dropdown__link" href="/docs/4.15.5/overview/">4.15.5</a></li><li><a class="dropdown__link" href="/docs/4.14.8/reference/metrics">4.14.8</a></li><li><a class="dropdown__link" href="/docs/4.13.0/reference/metrics">4.13.0</a></li><li><a class="dropdown__link" href="/docs/4.12.1/reference/metrics">4.12.1</a></li><li><a class="dropdown__link" href="/docs/4.11.1/reference/metrics">4.11.1</a></li><li><a class="dropdown__link" href="/docs/4.10.0/reference/metrics">4.10.0</a></li><li><a class="dropdown__link" href="/docs/4.9.2/reference/metrics">4.9.2</a></li><li><a class="dropdown__link" href="/docs/4.8.2/reference/metrics">4.8.2</a></li><li><a aria-current="page" class="dropdown__link dropdown__link--active" href="/docs/4.7.3/reference/metrics">4.7.3</a></li><li><a class="dropdown__link" href="/docs/4.6.2/reference/metrics">4.6.2</a></li><li><a class="dropdown__link" href="/docs/4.5.1/reference/metrics">4.5.1</a></li></ul></div><a class="navbar__item navbar__link" href="/releases">Download</a><div class="toggle_vylO colorModeToggle_DEke"><button class="clean-btn toggleButton_gllP toggleButtonDisabled_aARS" type="button" disabled="" title="Switch between dark and light mode (currently light mode)" aria-label="Switch between dark and light mode (currently light mode)" aria-live="polite"><svg viewBox="0 0 24 24" width="24" height="24" class="lightToggleIcon_pyhR"><path fill="currentColor" d="M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"></path></svg><svg viewBox="0 0 24 24" width="24" height="24" class="darkToggleIcon_wfgR"><path fill="currentColor" d="M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"></path></svg></button></div><div class="searchBox_ZlJk"></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div></nav><div id="docusaurus_skipToContent_fallback" class="main-wrapper mainWrapper_z2l0 docsWrapper_BCFX"><button aria-label="Scroll back to top" class="clean-btn theme-back-to-top-button backToTopButton_sjWU" type="button"></button><div class="docPage__5DB"><main class="docMainContainer_gTbr docMainContainerEnhanced_Uz_u"><div class="container padding-top--md padding-bottom--lg"><div class="row"><div class="col docItemCol_VOVn"><div class="docItemContainer_Djhp"><article><span class="theme-doc-version-badge badge badge--secondary">Version: 4.7.3</span><div class="theme-doc-markdown markdown"><header><h1>BookKeeper metrics reference</h1></header></div></article><nav class="pagination-nav docusaurus-mt-lg" aria-label="Docs pages navigation"></nav></div></div></div></div></main></div></div><footer class="footer footer--dark"><div class="container container-fluid"><div class="row footer__links"><div class="col footer__col"><div class="footer__title">Documentation</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/docs/overview">Overview</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/getting-started/installation">Getting started</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/deployment/manual">Deployment</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/admin/bookies">Administration</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/api/overview">API</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/security/overview">Security</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/development/protocol">Development</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/reference/config">Reference</a></li></ul></div><div class="col footer__col"><div class="footer__title">Community</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/community/mailing-lists">Mailing lists</a></li><li class="footer__item"><a class="footer__link-item" href="/community/slack">Slack</a></li><li class="footer__item"><a href="https://github.com/apache/bookkeeper" target="_blank" rel="noopener noreferrer" class="footer__link-item">Github<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a href="https://twitter.com/asfbookkeeper" target="_blank" rel="noopener noreferrer" class="footer__link-item">Twitter<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div><div class="col footer__col"><div class="footer__title">Project</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/project/who">Who are we?</a></li><li class="footer__item"><a class="footer__link-item" href="/project/bylaws">Bylaws</a></li><li class="footer__item"><a href="https://apache.org/licenses" target="_blank" rel="noopener noreferrer" class="footer__link-item">License<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a class="footer__link-item" href="/project/privacy">Privacy policy</a></li><li class="footer__item"><a href="https://www.apache.org/foundation/sponsorship.html" target="_blank" rel="noopener noreferrer" class="footer__link-item">Sponsorship<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a href="https://www.apache.org/foundation/thanks.html" target="_blank" rel="noopener noreferrer" class="footer__link-item">Thanks<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div></div><div class="footer__bottom text--center"><div class="footer__copyright"><footer class="footer">
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navbar__brand" href="/"><div class="navbar__logo"><img src="/img/bk-logo.svg" alt="Apache Bookkeeper" class="themedImage_ToTc themedImage--light_HNdA"><img src="/img/bk-logo.svg" alt="Apache Bookkeeper" class="themedImage_ToTc themedImage--dark_i4oU"></div><b class="navbar__title text--truncate">Apache BookKeeper</b></a><a class="navbar__item navbar__link" href="/docs/4.7.3/overview/">Documentation</a><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Community</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/community/mailing-lists">Mailing lists</a></li><li><a class="dropdown__link" href="/community/slack">Slack</a></li><li><a href="https://github.com/apache/bookkeeper/issues" target="_blank" rel="noopener noreferrer" class="dropdown__link">Github issues<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a class="dropdown__link" href="/community/releases">Release management</a></li><li><a class="dropdown__link" href="/community/meeting">Community meetings</a></li><li><a class="dropdown__link" href="/community/contributing">Contribution guide</a></li><li><a class="dropdown__link" href="/community/coding-guide">Coding guide</a></li><li><a class="dropdown__link" href="/community/testing">Testing guide</a></li><li><a class="dropdown__link" href="/community/issue-report">Issue report guide</a></li><li><a class="dropdown__link" href="/community/release-guide">Release guide</a></li><li><a class="dropdown__link" href="/community/presentations">Presentations</a></li><li><a class="dropdown__link" href="/community/bookkeeper-proposals">BookKeeper proposals (BP)</a></li></ul></div><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Project</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/project/who">Who are we?</a></li><li><a class="dropdown__link" href="/project/bylaws">Bylaws</a></li><li><a href="https://apache.org/licenses" target="_blank" rel="noopener noreferrer" class="dropdown__link">License<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a class="dropdown__link" href="/project/privacy">Privacy policy</a></li><li><a href="https://www.apache.org/foundation/sponsorship.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Sponsorship<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a href="https://www.apache.org/foundation/thanks.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Thanks<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div></div><div class="navbar__items navbar__items--right"><div class="navbar__item dropdown dropdown--hoverable dropdown--right"><a class="navbar__link" aria-haspopup="true" aria-expanded="false" role="button" href="/docs/4.7.3/overview/">4.7.3</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/docs/next/overview/">Next</a></li><li><a class="dropdown__link" href="/docs/overview/">4.17.0</a></li><li><a class="dropdown__link" href="/docs/4.16.5/overview/">4.16.5</a></li><li><a class="dropdown__link" href="/docs/4.15.5/overview/">4.15.5</a></li><li><a class="dropdown__link" href="/docs/4.14.8/reference/metrics">4.14.8</a></li><li><a class="dropdown__link" href="/docs/4.13.0/reference/metrics">4.13.0</a></li><li><a class="dropdown__link" href="/docs/4.12.1/reference/metrics">4.12.1</a></li><li><a class="dropdown__link" href="/docs/4.11.1/reference/metrics">4.11.1</a></li><li><a class="dropdown__link" href="/docs/4.10.0/reference/metrics">4.10.0</a></li><li><a class="dropdown__link" href="/docs/4.9.2/reference/metrics">4.9.2</a></li><li><a class="dropdown__link" href="/docs/4.8.2/reference/metrics">4.8.2</a></li><li><a aria-current="page" class="dropdown__link dropdown__link--active" href="/docs/4.7.3/reference/metrics">4.7.3</a></li><li><a class="dropdown__link" href="/docs/4.6.2/reference/metrics">4.6.2</a></li><li><a class="dropdown__link" href="/docs/4.5.1/reference/metrics">4.5.1</a></li></ul></div><a class="navbar__item navbar__link" href="/releases">Download</a><div class="toggle_vylO colorModeToggle_DEke"><button class="clean-btn toggleButton_gllP toggleButtonDisabled_aARS" type="button" disabled="" title="Switch between dark and light mode (currently light mode)" aria-label="Switch between dark and light mode (currently light mode)" aria-live="polite"><svg viewBox="0 0 24 24" width="24" height="24" class="lightToggleIcon_pyhR"><path fill="currentColor" d="M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"></path></svg><svg viewBox="0 0 24 24" width="24" height="24" class="darkToggleIcon_wfgR"><path fill="currentColor" d="M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"></path></svg></button></div><div class="searchBox_ZlJk"></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div></nav><div id="docusaurus_skipToContent_fallback" class="main-wrapper mainWrapper_z2l0 docsWrapper_BCFX"><button aria-label="Scroll back to top" class="clean-btn theme-back-to-top-button backToTopButton_sjWU" type="button"></button><div class="docPage__5DB"><main class="docMainContainer_gTbr docMainContainerEnhanced_Uz_u"><div class="container padding-top--md padding-bottom--lg"><div class="row"><div class="col docItemCol_VOVn"><div class="docItemContainer_Djhp"><article><span class="theme-doc-version-badge badge badge--secondary">Version: 4.7.3</span><div class="theme-doc-markdown markdown"><header><h1>BookKeeper metrics reference</h1></header></div></article><nav class="pagination-nav docusaurus-mt-lg" aria-label="Docs pages navigation"></nav></div></div></div></div></main></div></div><footer class="footer footer--dark"><div class="container container-fluid"><div class="row footer__links"><div class="col footer__col"><div class="footer__title">Documentation</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/docs/overview">Overview</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/getting-started/installation">Getting started</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/deployment/manual">Deployment</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/admin/bookies">Administration</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/api/overview">API</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/security/overview">Security</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/development/protocol">Development</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/reference/config">Reference</a></li></ul></div><div class="col footer__col"><div class="footer__title">Community</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/community/mailing-lists">Mailing lists</a></li><li class="footer__item"><a class="footer__link-item" href="/community/slack">Slack</a></li><li class="footer__item"><a href="https://github.com/apache/bookkeeper" target="_blank" rel="noopener noreferrer" class="footer__link-item">Github<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a href="https://twitter.com/asfbookkeeper" target="_blank" rel="noopener noreferrer" class="footer__link-item">Twitter<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div><div class="col footer__col"><div class="footer__title">Project</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/project/who">Who are we?</a></li><li class="footer__item"><a class="footer__link-item" href="/project/bylaws">Bylaws</a></li><li class="footer__item"><a href="https://apache.org/licenses" target="_blank" rel="noopener noreferrer" class="footer__link-item">License<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a class="footer__link-item" href="/project/privacy">Privacy policy</a></li><li class="footer__item"><a href="https://www.apache.org/foundation/sponsorship.html" target="_blank" rel="noopener noreferrer" class="footer__link-item">Sponsorship<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a href="https://www.apache.org/foundation/thanks.html" target="_blank" rel="noopener noreferrer" class="footer__link-item">Thanks<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div></div><div class="footer__bottom text--center"><div class="footer__copyright"><footer class="footer">
         <div class="container">
           <div class="content has-text-centered">
             <p>
@@ -22,7 +22,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/4.7.3/security/overview/index.html b/content/docs/4.7.3/security/overview/index.html
index 7b30128..9980368 100644
--- a/content/docs/4.7.3/security/overview/index.html
+++ b/content/docs/4.7.3/security/overview/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">BookKeeper Security | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/4.7.3/security/overview"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.7.3"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.7.3"><meta data-rh="true" name="docsearch:version" content="4.7.3"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.7.3"><meta data-rh="true" property="og:title" content="BookKeeper Security | Apache BookKeeper"><meta data-rh="true" name="description" content="In the 4.5.0 release, the BookKeeper community added a number of features that can be used, together or separately, to secure a BookKeeper cluster."><meta data-rh="true" property="og:description" content="In the 4.5.0 release, the BookKeeper community added a number of features that can be used, together or separately, to secure a BookKeeper cluster."><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/4.7.3/security/overview"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.7.3/security/overview" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.7.3/security/overview" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -23,7 +23,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/4.7.3/security/sasl/index.html b/content/docs/4.7.3/security/sasl/index.html
index 6987ba5..7e012a5 100644
--- a/content/docs/4.7.3/security/sasl/index.html
+++ b/content/docs/4.7.3/security/sasl/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">Authentication using SASL | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/4.7.3/security/sasl"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.7.3"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.7.3"><meta data-rh="true" name="docsearch:version" content="4.7.3"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.7.3"><meta data-rh="true" property="og:title" content="Authentication using SASL | Apache BookKeeper"><meta data-rh="true" name="description" content="Bookies support client authentication via SASL. Currently we only support GSSAPI (Kerberos). We will start"><meta data-rh="true" property="og:description" content="Bookies support client authentication via SASL. Currently we only support GSSAPI (Kerberos). We will start"><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/4.7.3/security/sasl"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.7.3/security/sasl" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.7.3/security/sasl" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -45,7 +45,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/4.7.3/security/tls/index.html b/content/docs/4.7.3/security/tls/index.html
index 8131a4f..4857353 100644
--- a/content/docs/4.7.3/security/tls/index.html
+++ b/content/docs/4.7.3/security/tls/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">Encryption and Authentication using TLS | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/4.7.3/security/tls"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.7.3"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.7.3"><meta data-rh="true" name="docsearch:version" content="4.7.3"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.7.3"><meta data-rh="true" property="og:title" content="Encryption and Authentication using TLS | Apache BookKeeper"><meta data-rh="true" name="description" content="Apache BookKeeper allows clients and autorecovery daemons to communicate over TLS, although this is not enabled by default."><meta data-rh="true" property="og:description" content="Apache BookKeeper allows clients and autorecovery daemons to communicate over TLS, although this is not enabled by default."><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/4.7.3/security/tls"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.7.3/security/tls" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.7.3/security/tls" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -53,7 +53,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/4.7.3/security/zookeeper/index.html b/content/docs/4.7.3/security/zookeeper/index.html
index 1e9db1f..5f89671 100644
--- a/content/docs/4.7.3/security/zookeeper/index.html
+++ b/content/docs/4.7.3/security/zookeeper/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">ZooKeeper Authentication | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/4.7.3/security/zookeeper"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.7.3"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.7.3"><meta data-rh="true" name="docsearch:version" content="4.7.3"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.7.3"><meta data-rh="true" property="og:title" content="ZooKeeper Authentication | Apache BookKeeper"><meta data-rh="true" name="description" content="New Clusters"><meta data-rh="true" property="og:description" content="New Clusters"><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/4.7.3/security/zookeeper"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.7.3/security/zookeeper" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.7.3/security/zookeeper" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -29,7 +29,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/4.8.2/admin/autorecovery/index.html b/content/docs/4.8.2/admin/autorecovery/index.html
index bcdb803..50a5a8f 100644
--- a/content/docs/4.8.2/admin/autorecovery/index.html
+++ b/content/docs/4.8.2/admin/autorecovery/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">Using AutoRecovery | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/4.8.2/admin/autorecovery"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.8.2"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.8.2"><meta data-rh="true" name="docsearch:version" content="4.8.2"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.8.2"><meta data-rh="true" property="og:title" content="Using AutoRecovery | Apache BookKeeper"><meta data-rh="true" name="description" content="When a bookie crashes, all ledgers on that bookie become under-replicated. In order to bring all ledgers in your BookKeeper cluster back to full replication, you&#x27;ll need to recover the data from any offline bookies. There are two ways to recover bookies&#x27; data:"><meta data-rh="true" property="og:description" content="When a bookie crashes, all ledgers on that bookie become under-replicated. In order to bring all ledgers in your BookKeeper cluster back to full replication, you&#x27;ll need to recover the data from any offline bookies. There are two ways to recover bookies&#x27; data:"><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/4.8.2/admin/autorecovery"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.8.2/admin/autorecovery" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.8.2/admin/autorecovery" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -22,7 +22,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/4.8.2/admin/bookies/index.html b/content/docs/4.8.2/admin/bookies/index.html
index b45e4cf..833a984 100644
--- a/content/docs/4.8.2/admin/bookies/index.html
+++ b/content/docs/4.8.2/admin/bookies/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">BookKeeper administration | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/4.8.2/admin/bookies"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.8.2"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.8.2"><meta data-rh="true" name="docsearch:version" content="4.8.2"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.8.2"><meta data-rh="true" property="og:title" content="BookKeeper administration | Apache BookKeeper"><meta data-rh="true" name="description" content="This document is a guide to deploying, administering, and maintaining BookKeeper. It also discusses best practices and common problems."><meta data-rh="true" property="og:description" content="This document is a guide to deploying, administering, and maintaining BookKeeper. It also discusses best practices and common problems."><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/4.8.2/admin/bookies"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.8.2/admin/bookies" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.8.2/admin/bookies" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -22,7 +22,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/4.8.2/admin/geo-replication/index.html b/content/docs/4.8.2/admin/geo-replication/index.html
index a5beab6..1878de8 100644
--- a/content/docs/4.8.2/admin/geo-replication/index.html
+++ b/content/docs/4.8.2/admin/geo-replication/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">Geo-replication | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/4.8.2/admin/geo-replication"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.8.2"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.8.2"><meta data-rh="true" name="docsearch:version" content="4.8.2"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.8.2"><meta data-rh="true" property="og:title" content="Geo-replication | Apache BookKeeper"><meta data-rh="true" name="description" content="Geo-replication is the replication of data across BookKeeper clusters. In order to enable geo-replication for a group of BookKeeper clusters,"><meta data-rh="true" property="og:description" content="Geo-replication is the replication of data across BookKeeper clusters. In order to enable geo-replication for a group of BookKeeper clusters,"><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/4.8.2/admin/geo-replication"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.8.2/admin/geo-replication" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.8.2/admin/geo-replication" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -22,7 +22,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/4.8.2/admin/http/index.html b/content/docs/4.8.2/admin/http/index.html
index 8eed620..2c38786 100644
--- a/content/docs/4.8.2/admin/http/index.html
+++ b/content/docs/4.8.2/admin/http/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">BookKeeper Admin REST API | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/4.8.2/admin/http"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.8.2"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.8.2"><meta data-rh="true" name="docsearch:version" content="4.8.2"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.8.2"><meta data-rh="true" property="og:title" content="BookKeeper Admin REST API | Apache BookKeeper"><meta data-rh="true" name="description" content="This document introduces BookKeeper HTTP endpoints, which can be used for BookKeeper administration."><meta data-rh="true" property="og:description" content="This document introduces BookKeeper HTTP endpoints, which can be used for BookKeeper administration."><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/4.8.2/admin/http"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.8.2/admin/http" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.8.2/admin/http" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -23,7 +23,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/4.8.2/admin/metrics/index.html b/content/docs/4.8.2/admin/metrics/index.html
index 48b25bd..d42a811 100644
--- a/content/docs/4.8.2/admin/metrics/index.html
+++ b/content/docs/4.8.2/admin/metrics/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">Metric collection | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/4.8.2/admin/metrics"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.8.2"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.8.2"><meta data-rh="true" name="docsearch:version" content="4.8.2"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.8.2"><meta data-rh="true" property="og:title" content="Metric collection | Apache BookKeeper"><meta data-rh="true" name="description" content="BookKeeper enables metrics collection through a variety of stats providers."><meta data-rh="true" property="og:description" content="BookKeeper enables metrics collection through a variety of stats providers."><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/4.8.2/admin/metrics"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.8.2/admin/metrics" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.8.2/admin/metrics" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -22,7 +22,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/4.8.2/admin/perf/index.html b/content/docs/4.8.2/admin/perf/index.html
index 56ec460..4a3ba36 100644
--- a/content/docs/4.8.2/admin/perf/index.html
+++ b/content/docs/4.8.2/admin/perf/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">Performance tuning | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/4.8.2/admin/perf"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.8.2"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.8.2"><meta data-rh="true" name="docsearch:version" content="4.8.2"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.8.2"><meta data-rh="true" property="og:title" content="Performance tuning | Apache BookKeeper"><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/4.8.2/admin/perf"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.8.2/admin/perf" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.8.2/admin/perf" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -22,7 +22,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/4.8.2/admin/placement/index.html b/content/docs/4.8.2/admin/placement/index.html
index cc9f4a6..ee7796a 100644
--- a/content/docs/4.8.2/admin/placement/index.html
+++ b/content/docs/4.8.2/admin/placement/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">Customized placement policies | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/4.8.2/admin/placement"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.8.2"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.8.2"><meta data-rh="true" name="docsearch:version" content="4.8.2"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.8.2"><meta data-rh="true" property="og:title" content="Customized placement policies | Apache BookKeeper"><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/4.8.2/admin/placement"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.8.2/admin/placement" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.8.2/admin/placement" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -22,7 +22,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/4.8.2/admin/upgrade/index.html b/content/docs/4.8.2/admin/upgrade/index.html
index ec7c651..3815d78 100644
--- a/content/docs/4.8.2/admin/upgrade/index.html
+++ b/content/docs/4.8.2/admin/upgrade/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">Upgrade | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/4.8.2/admin/upgrade"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.8.2"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.8.2"><meta data-rh="true" name="docsearch:version" content="4.8.2"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.8.2"><meta data-rh="true" property="og:title" content="Upgrade | Apache BookKeeper"><meta data-rh="true" name="description" content="If you have questions about upgrades (or need help), please feel free to reach out to us by mailing list or Slack Channel."><meta data-rh="true" property="og:description" content="If you have questions about upgrades (or need help), please feel free to reach out to us by mailing list or Slack Channel."><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/4.8.2/admin/upgrade"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.8.2/admin/upgrade" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.8.2/admin/upgrade" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -29,7 +29,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/4.8.2/api/distributedlog-api/index.html b/content/docs/4.8.2/api/distributedlog-api/index.html
index 1ad9620..c4f790f 100644
--- a/content/docs/4.8.2/api/distributedlog-api/index.html
+++ b/content/docs/4.8.2/api/distributedlog-api/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">DistributedLog | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/4.8.2/api/distributedlog-api"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.8.2"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.8.2"><meta data-rh="true" name="docsearch:version" content="4.8.2"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.8.2"><meta data-rh="true" property="og:title" content="DistributedLog | Apache BookKeeper"><meta data-rh="true" name="description" content="DistributedLog began its life as a separate project under the Apache Foundation. It was merged into BookKeeper in 2017."><meta data-rh="true" property="og:description" content="DistributedLog began its life as a separate project under the Apache Foundation. It was merged into BookKeeper in 2017."><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/4.8.2/api/distributedlog-api"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.8.2/api/distributedlog-api" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.8.2/api/distributedlog-api" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -22,7 +22,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/4.8.2/api/ledger-adv-api/index.html b/content/docs/4.8.2/api/ledger-adv-api/index.html
index 0b26045..be5d7bb 100644
--- a/content/docs/4.8.2/api/ledger-adv-api/index.html
+++ b/content/docs/4.8.2/api/ledger-adv-api/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">The Advanced Ledger API | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/4.8.2/api/ledger-adv-api"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.8.2"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.8.2"><meta data-rh="true" name="docsearch:version" content="4.8.2"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.8.2"><meta data-rh="true" property="og:title" content="The Advanced Ledger API | Apache BookKeeper"><meta data-rh="true" name="description" content="In release 4.5.0, Apache BookKeeper introduces a few advanced API for advanced usage."><meta data-rh="true" property="og:description" content="In release 4.5.0, Apache BookKeeper introduces a few advanced API for advanced usage."><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/4.8.2/api/ledger-adv-api"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.8.2/api/ledger-adv-api" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.8.2/api/ledger-adv-api" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -27,7 +27,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/4.8.2/api/ledger-api/index.html b/content/docs/4.8.2/api/ledger-api/index.html
index 2ce7086..96c109e 100644
--- a/content/docs/4.8.2/api/ledger-api/index.html
+++ b/content/docs/4.8.2/api/ledger-api/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">The Ledger API | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/4.8.2/api/ledger-api"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.8.2"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.8.2"><meta data-rh="true" name="docsearch:version" content="4.8.2"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.8.2"><meta data-rh="true" property="og:title" content="The Ledger API | Apache BookKeeper"><meta data-rh="true" name="description" content="The ledger API is a lower-level API for BookKeeper that enables you to interact with ledgers directly."><meta data-rh="true" property="og:description" content="The ledger API is a lower-level API for BookKeeper that enables you to interact with ledgers directly."><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/4.8.2/api/ledger-api"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.8.2/api/ledger-api" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.8.2/api/ledger-api" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -46,7 +46,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/4.8.2/api/overview/index.html b/content/docs/4.8.2/api/overview/index.html
index 1b61576..153ae90 100644
--- a/content/docs/4.8.2/api/overview/index.html
+++ b/content/docs/4.8.2/api/overview/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">BookKeeper API | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/4.8.2/api/overview"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.8.2"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.8.2"><meta data-rh="true" name="docsearch:version" content="4.8.2"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.8.2"><meta data-rh="true" property="og:title" content="BookKeeper API | Apache BookKeeper"><meta data-rh="true" name="description" content="BookKeeper offers a few APIs that applications can use to interact with it:"><meta data-rh="true" property="og:description" content="BookKeeper offers a few APIs that applications can use to interact with it:"><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/4.8.2/api/overview"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.8.2/api/overview" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.8.2/api/overview" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -24,7 +24,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/4.8.2/deployment/kubernetes/index.html b/content/docs/4.8.2/deployment/kubernetes/index.html
index 12b8f20..b8ca7ef 100644
--- a/content/docs/4.8.2/deployment/kubernetes/index.html
+++ b/content/docs/4.8.2/deployment/kubernetes/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">Deploying Apache BookKeeper on Kubernetes | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/4.8.2/deployment/kubernetes"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.8.2"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.8.2"><meta data-rh="true" name="docsearch:version" content="4.8.2"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.8.2"><meta data-rh="true" property="og:title" content="Deploying Apache BookKeeper on Kubernetes | Apache BookKeeper"><meta data-rh="true" name="description" content="Apache BookKeeper can be easily deployed in Kubernetes clusters. The managed clusters on Google Container Engine is the most convenient way."><meta data-rh="true" property="og:description" content="Apache BookKeeper can be easily deployed in Kubernetes clusters. The managed clusters on Google Container Engine is the most convenient way."><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/4.8.2/deployment/kubernetes"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.8.2/deployment/kubernetes" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.8.2/deployment/kubernetes" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -29,7 +29,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/4.8.2/deployment/manual/index.html b/content/docs/4.8.2/deployment/manual/index.html
index fd7f85d..c5d6789 100644
--- a/content/docs/4.8.2/deployment/manual/index.html
+++ b/content/docs/4.8.2/deployment/manual/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">Manual deployment | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/4.8.2/deployment/manual"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.8.2"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.8.2"><meta data-rh="true" name="docsearch:version" content="4.8.2"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.8.2"><meta data-rh="true" property="og:title" content="Manual deployment | Apache BookKeeper"><meta data-rh="true" name="description" content="A BookKeeper cluster consists of two main components:"><meta data-rh="true" property="og:description" content="A BookKeeper cluster consists of two main components:"><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/4.8.2/deployment/manual"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.8.2/deployment/manual" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.8.2/deployment/manual" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -22,7 +22,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/4.8.2/development/codebase/index.html b/content/docs/4.8.2/development/codebase/index.html
index 0bab4ac..698550c 100644
--- a/content/docs/4.8.2/development/codebase/index.html
+++ b/content/docs/4.8.2/development/codebase/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">The BookKeeper codebase | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/4.8.2/development/codebase"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.8.2"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.8.2"><meta data-rh="true" name="docsearch:version" content="4.8.2"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.8.2"><meta data-rh="true" property="og:title" content="The BookKeeper codebase | Apache BookKeeper"><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/4.8.2/development/codebase"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.8.2/development/codebase" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.8.2/development/codebase" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -22,7 +22,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/4.8.2/development/protocol/index.html b/content/docs/4.8.2/development/protocol/index.html
index 2ece649..e05c2ad 100644
--- a/content/docs/4.8.2/development/protocol/index.html
+++ b/content/docs/4.8.2/development/protocol/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">The BookKeeper protocol | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/4.8.2/development/protocol"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.8.2"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.8.2"><meta data-rh="true" name="docsearch:version" content="4.8.2"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.8.2"><meta data-rh="true" property="og:title" content="The BookKeeper protocol | Apache BookKeeper"><meta data-rh="true" name="description" content="BookKeeper uses a special replication protocol for guaranteeing persistent storage of entries in an ensemble of bookies."><meta data-rh="true" property="og:description" content="BookKeeper uses a special replication protocol for guaranteeing persistent storage of entries in an ensemble of bookies."><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/4.8.2/development/protocol"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.8.2/development/protocol" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.8.2/development/protocol" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -22,7 +22,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/4.8.2/getting-started/concepts/index.html b/content/docs/4.8.2/getting-started/concepts/index.html
index e080295..32704a7 100644
--- a/content/docs/4.8.2/getting-started/concepts/index.html
+++ b/content/docs/4.8.2/getting-started/concepts/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">BookKeeper concepts and architecture | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/4.8.2/getting-started/concepts"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.8.2"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.8.2"><meta data-rh="true" name="docsearch:version" content="4.8.2"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.8.2"><meta data-rh="true" property="og:title" content="BookKeeper concepts and architecture | Apache BookKeeper"><meta data-rh="true" name="description" content="BookKeeper is a service that provides persistent storage of streams of log entries---aka records---in sequences called ledgers. BookKeeper replicates stored entries across multiple servers."><meta data-rh="true" property="og:description" content="BookKeeper is a service that provides persistent storage of streams of log entries---aka records---in sequences called ledgers. BookKeeper replicates stored entries across multiple servers."><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/4.8.2/getting-started/concepts"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.8.2/getting-started/concepts" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.8.2/getting-started/concepts" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -22,7 +22,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/4.8.2/getting-started/installation/index.html b/content/docs/4.8.2/getting-started/installation/index.html
index 10ec62e..fe3713b 100644
--- a/content/docs/4.8.2/getting-started/installation/index.html
+++ b/content/docs/4.8.2/getting-started/installation/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">BookKeeper installation | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/4.8.2/getting-started/installation"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.8.2"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.8.2"><meta data-rh="true" name="docsearch:version" content="4.8.2"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.8.2"><meta data-rh="true" property="og:title" content="BookKeeper installation | Apache BookKeeper"><meta data-rh="true" name="description" content="You can install BookKeeper either by downloading a GZipped tarball package or cloning the BookKeeper repository."><meta data-rh="true" property="og:description" content="You can install BookKeeper either by downloading a GZipped tarball package or cloning the BookKeeper repository."><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/4.8.2/getting-started/installation"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.8.2/getting-started/installation" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.8.2/getting-started/installation" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -22,7 +22,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/4.8.2/getting-started/run-locally/index.html b/content/docs/4.8.2/getting-started/run-locally/index.html
index ae187ed..aba5c2a 100644
--- a/content/docs/4.8.2/getting-started/run-locally/index.html
+++ b/content/docs/4.8.2/getting-started/run-locally/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">Run bookies locally | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/4.8.2/getting-started/run-locally"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.8.2"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.8.2"><meta data-rh="true" name="docsearch:version" content="4.8.2"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.8.2"><meta data-rh="true" property="og:title" content="Run bookies locally | Apache BookKeeper"><meta data-rh="true" name="description" content="Bookies are individual BookKeeper servers. You can run an ensemble of bookies locally on a single machine using the localbookie command of the bookkeeper CLI tool and specifying the number of bookies you&#x27;d like to include in the ensemble."><meta data-rh="true" property="og:description" content="Bookies are individual BookKeeper servers. You can run an ensemble of bookies locally on a single machine using the localbookie command of the bookkeeper CLI tool and specifying the number of bookies you&#x27;d like to include in the ensemble."><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/4.8.2/getting-started/run-locally"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.8.2/getting-started/run-locally" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.8.2/getting-started/run-locally" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -22,7 +22,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/4.8.2/overview/index.html b/content/docs/4.8.2/overview/index.html
index b030af6..0ae521f 100644
--- a/content/docs/4.8.2/overview/index.html
+++ b/content/docs/4.8.2/overview/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">Apache BookKeeper 4.8.2 | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/4.8.2/overview/"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.8.2"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.8.2"><meta data-rh="true" name="docsearch:version" content="4.8.2"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.8.2"><meta data-rh="true" property="og:title" content="Apache BookKeeper 4.8.2 | Apache BookKeeper"><meta data-rh="true" name="description" content="&lt;!--"><meta data-rh="true" property="og:description" content="&lt;!--"><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/4.8.2/overview/"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.8.2/overview/" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.8.2/overview/" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -24,7 +24,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/4.8.2/reference/cli/index.html b/content/docs/4.8.2/reference/cli/index.html
index 4451765..a1b7812 100644
--- a/content/docs/4.8.2/reference/cli/index.html
+++ b/content/docs/4.8.2/reference/cli/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">BookKeeper CLI tool reference | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/4.8.2/reference/cli"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.8.2"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.8.2"><meta data-rh="true" name="docsearch:version" content="4.8.2"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.8.2"><meta data-rh="true" property="og:title" content="BookKeeper CLI tool reference | Apache BookKeeper"><meta data-rh="true" name="description" content="bookkeeper command"><meta data-rh="true" property="og:description" content="bookkeeper command"><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/4.8.2/reference/cli"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.8.2/reference/cli" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.8.2/reference/cli" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -29,7 +29,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/4.8.2/reference/config/index.html b/content/docs/4.8.2/reference/config/index.html
index fa65330..9c5a44e 100644
--- a/content/docs/4.8.2/reference/config/index.html
+++ b/content/docs/4.8.2/reference/config/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">BookKeeper configuration | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/4.8.2/reference/config"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.8.2"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.8.2"><meta data-rh="true" name="docsearch:version" content="4.8.2"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.8.2"><meta data-rh="true" property="og:title" content="BookKeeper configuration | Apache BookKeeper"><meta data-rh="true" name="description" content="The table below lists parameters that you can set to configure bookies. All configuration takes place in the bk_server.conf file in the bookkeeper-server/conf directory of your BookKeeper installation."><meta data-rh="true" property="og:description" content="The table below lists parameters that you can set to configure bookies. All configuration takes place in the bk_server.conf file in the bookkeeper-server/conf directory of your BookKeeper installation."><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/4.8.2/reference/config"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.8.2/reference/config" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.8.2/reference/config" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -22,7 +22,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/4.8.2/reference/metrics/index.html b/content/docs/4.8.2/reference/metrics/index.html
index c43260b..5a36c96 100644
--- a/content/docs/4.8.2/reference/metrics/index.html
+++ b/content/docs/4.8.2/reference/metrics/index.html
@@ -4,12 +4,12 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">BookKeeper metrics reference | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/4.8.2/reference/metrics"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.8.2"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.8.2"><meta data-rh="true" name="docsearch:version" content="4.8.2"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.8.2"><meta data-rh="true" property="og:title" content="BookKeeper metrics reference | Apache BookKeeper"><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/4.8.2/reference/metrics"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.8.2/reference/metrics" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.8.2/reference/metrics" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
-<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navbar__brand" href="/"><div class="navbar__logo"><img src="/img/bk-logo.svg" alt="Apache Bookkeeper" class="themedImage_ToTc themedImage--light_HNdA"><img src="/img/bk-logo.svg" alt="Apache Bookkeeper" class="themedImage_ToTc themedImage--dark_i4oU"></div><b class="navbar__title text--truncate">Apache BookKeeper</b></a><a class="navbar__item navbar__link" href="/docs/4.8.2/overview/">Documentation</a><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Community</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/community/mailing-lists">Mailing lists</a></li><li><a class="dropdown__link" href="/community/slack">Slack</a></li><li><a href="https://github.com/apache/bookkeeper/issues" target="_blank" rel="noopener noreferrer" class="dropdown__link">Github issues<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a class="dropdown__link" href="/community/releases">Release management</a></li><li><a class="dropdown__link" href="/community/meeting">Community meetings</a></li><li><a class="dropdown__link" href="/community/contributing">Contribution guide</a></li><li><a class="dropdown__link" href="/community/coding-guide">Coding guide</a></li><li><a class="dropdown__link" href="/community/testing">Testing guide</a></li><li><a class="dropdown__link" href="/community/issue-report">Issue report guide</a></li><li><a class="dropdown__link" href="/community/release-guide">Release guide</a></li><li><a class="dropdown__link" href="/community/presentations">Presentations</a></li><li><a class="dropdown__link" href="/community/bookkeeper-proposals">BookKeeper proposals (BP)</a></li></ul></div><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Project</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/project/who">Who are we?</a></li><li><a class="dropdown__link" href="/project/bylaws">Bylaws</a></li><li><a href="https://apache.org/licenses" target="_blank" rel="noopener noreferrer" class="dropdown__link">License<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a class="dropdown__link" href="/project/privacy">Privacy policy</a></li><li><a href="https://www.apache.org/foundation/sponsorship.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Sponsorship<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a href="https://www.apache.org/foundation/thanks.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Thanks<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div></div><div class="navbar__items navbar__items--right"><div class="navbar__item dropdown dropdown--hoverable dropdown--right"><a class="navbar__link" aria-haspopup="true" aria-expanded="false" role="button" href="/docs/4.8.2/overview/">4.8.2</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/docs/next/overview/">Next</a></li><li><a class="dropdown__link" href="/docs/admin/autorecovery">4.17.0</a></li><li><a class="dropdown__link" href="/docs/4.16.5/overview/">4.16.5</a></li><li><a class="dropdown__link" href="/docs/4.15.5/overview/">4.15.5</a></li><li><a class="dropdown__link" href="/docs/4.14.8/reference/metrics">4.14.8</a></li><li><a class="dropdown__link" href="/docs/4.13.0/reference/metrics">4.13.0</a></li><li><a class="dropdown__link" href="/docs/4.12.1/reference/metrics">4.12.1</a></li><li><a class="dropdown__link" href="/docs/4.11.1/reference/metrics">4.11.1</a></li><li><a class="dropdown__link" href="/docs/4.10.0/reference/metrics">4.10.0</a></li><li><a class="dropdown__link" href="/docs/4.9.2/reference/metrics">4.9.2</a></li><li><a aria-current="page" class="dropdown__link dropdown__link--active" href="/docs/4.8.2/reference/metrics">4.8.2</a></li><li><a class="dropdown__link" href="/docs/4.7.3/reference/metrics">4.7.3</a></li><li><a class="dropdown__link" href="/docs/4.6.2/reference/metrics">4.6.2</a></li><li><a class="dropdown__link" href="/docs/4.5.1/reference/metrics">4.5.1</a></li></ul></div><a class="navbar__item navbar__link" href="/releases">Download</a><div class="toggle_vylO colorModeToggle_DEke"><button class="clean-btn toggleButton_gllP toggleButtonDisabled_aARS" type="button" disabled="" title="Switch between dark and light mode (currently light mode)" aria-label="Switch between dark and light mode (currently light mode)" aria-live="polite"><svg viewBox="0 0 24 24" width="24" height="24" class="lightToggleIcon_pyhR"><path fill="currentColor" d="M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"></path></svg><svg viewBox="0 0 24 24" width="24" height="24" class="darkToggleIcon_wfgR"><path fill="currentColor" d="M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"></path></svg></button></div><div class="searchBox_ZlJk"></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div></nav><div id="docusaurus_skipToContent_fallback" class="main-wrapper mainWrapper_z2l0 docsWrapper_BCFX"><button aria-label="Scroll back to top" class="clean-btn theme-back-to-top-button backToTopButton_sjWU" type="button"></button><div class="docPage__5DB"><main class="docMainContainer_gTbr docMainContainerEnhanced_Uz_u"><div class="container padding-top--md padding-bottom--lg"><div class="row"><div class="col docItemCol_VOVn"><div class="docItemContainer_Djhp"><article><span class="theme-doc-version-badge badge badge--secondary">Version: 4.8.2</span><div class="theme-doc-markdown markdown"><header><h1>BookKeeper metrics reference</h1></header></div></article><nav class="pagination-nav docusaurus-mt-lg" aria-label="Docs pages navigation"></nav></div></div></div></div></main></div></div><footer class="footer footer--dark"><div class="container container-fluid"><div class="row footer__links"><div class="col footer__col"><div class="footer__title">Documentation</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/docs/overview">Overview</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/getting-started/installation">Getting started</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/deployment/manual">Deployment</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/admin/bookies">Administration</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/api/overview">API</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/security/overview">Security</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/development/protocol">Development</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/reference/config">Reference</a></li></ul></div><div class="col footer__col"><div class="footer__title">Community</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/community/mailing-lists">Mailing lists</a></li><li class="footer__item"><a class="footer__link-item" href="/community/slack">Slack</a></li><li class="footer__item"><a href="https://github.com/apache/bookkeeper" target="_blank" rel="noopener noreferrer" class="footer__link-item">Github<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a href="https://twitter.com/asfbookkeeper" target="_blank" rel="noopener noreferrer" class="footer__link-item">Twitter<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div><div class="col footer__col"><div class="footer__title">Project</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/project/who">Who are we?</a></li><li class="footer__item"><a class="footer__link-item" href="/project/bylaws">Bylaws</a></li><li class="footer__item"><a href="https://apache.org/licenses" target="_blank" rel="noopener noreferrer" class="footer__link-item">License<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a class="footer__link-item" href="/project/privacy">Privacy policy</a></li><li class="footer__item"><a href="https://www.apache.org/foundation/sponsorship.html" target="_blank" rel="noopener noreferrer" class="footer__link-item">Sponsorship<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a href="https://www.apache.org/foundation/thanks.html" target="_blank" rel="noopener noreferrer" class="footer__link-item">Thanks<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div></div><div class="footer__bottom text--center"><div class="footer__copyright"><footer class="footer">
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navbar__brand" href="/"><div class="navbar__logo"><img src="/img/bk-logo.svg" alt="Apache Bookkeeper" class="themedImage_ToTc themedImage--light_HNdA"><img src="/img/bk-logo.svg" alt="Apache Bookkeeper" class="themedImage_ToTc themedImage--dark_i4oU"></div><b class="navbar__title text--truncate">Apache BookKeeper</b></a><a class="navbar__item navbar__link" href="/docs/4.8.2/overview/">Documentation</a><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Community</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/community/mailing-lists">Mailing lists</a></li><li><a class="dropdown__link" href="/community/slack">Slack</a></li><li><a href="https://github.com/apache/bookkeeper/issues" target="_blank" rel="noopener noreferrer" class="dropdown__link">Github issues<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a class="dropdown__link" href="/community/releases">Release management</a></li><li><a class="dropdown__link" href="/community/meeting">Community meetings</a></li><li><a class="dropdown__link" href="/community/contributing">Contribution guide</a></li><li><a class="dropdown__link" href="/community/coding-guide">Coding guide</a></li><li><a class="dropdown__link" href="/community/testing">Testing guide</a></li><li><a class="dropdown__link" href="/community/issue-report">Issue report guide</a></li><li><a class="dropdown__link" href="/community/release-guide">Release guide</a></li><li><a class="dropdown__link" href="/community/presentations">Presentations</a></li><li><a class="dropdown__link" href="/community/bookkeeper-proposals">BookKeeper proposals (BP)</a></li></ul></div><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Project</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/project/who">Who are we?</a></li><li><a class="dropdown__link" href="/project/bylaws">Bylaws</a></li><li><a href="https://apache.org/licenses" target="_blank" rel="noopener noreferrer" class="dropdown__link">License<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a class="dropdown__link" href="/project/privacy">Privacy policy</a></li><li><a href="https://www.apache.org/foundation/sponsorship.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Sponsorship<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a href="https://www.apache.org/foundation/thanks.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Thanks<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div></div><div class="navbar__items navbar__items--right"><div class="navbar__item dropdown dropdown--hoverable dropdown--right"><a class="navbar__link" aria-haspopup="true" aria-expanded="false" role="button" href="/docs/4.8.2/overview/">4.8.2</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/docs/next/overview/">Next</a></li><li><a class="dropdown__link" href="/docs/overview/">4.17.0</a></li><li><a class="dropdown__link" href="/docs/4.16.5/overview/">4.16.5</a></li><li><a class="dropdown__link" href="/docs/4.15.5/overview/">4.15.5</a></li><li><a class="dropdown__link" href="/docs/4.14.8/reference/metrics">4.14.8</a></li><li><a class="dropdown__link" href="/docs/4.13.0/reference/metrics">4.13.0</a></li><li><a class="dropdown__link" href="/docs/4.12.1/reference/metrics">4.12.1</a></li><li><a class="dropdown__link" href="/docs/4.11.1/reference/metrics">4.11.1</a></li><li><a class="dropdown__link" href="/docs/4.10.0/reference/metrics">4.10.0</a></li><li><a class="dropdown__link" href="/docs/4.9.2/reference/metrics">4.9.2</a></li><li><a aria-current="page" class="dropdown__link dropdown__link--active" href="/docs/4.8.2/reference/metrics">4.8.2</a></li><li><a class="dropdown__link" href="/docs/4.7.3/reference/metrics">4.7.3</a></li><li><a class="dropdown__link" href="/docs/4.6.2/reference/metrics">4.6.2</a></li><li><a class="dropdown__link" href="/docs/4.5.1/reference/metrics">4.5.1</a></li></ul></div><a class="navbar__item navbar__link" href="/releases">Download</a><div class="toggle_vylO colorModeToggle_DEke"><button class="clean-btn toggleButton_gllP toggleButtonDisabled_aARS" type="button" disabled="" title="Switch between dark and light mode (currently light mode)" aria-label="Switch between dark and light mode (currently light mode)" aria-live="polite"><svg viewBox="0 0 24 24" width="24" height="24" class="lightToggleIcon_pyhR"><path fill="currentColor" d="M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"></path></svg><svg viewBox="0 0 24 24" width="24" height="24" class="darkToggleIcon_wfgR"><path fill="currentColor" d="M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"></path></svg></button></div><div class="searchBox_ZlJk"></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div></nav><div id="docusaurus_skipToContent_fallback" class="main-wrapper mainWrapper_z2l0 docsWrapper_BCFX"><button aria-label="Scroll back to top" class="clean-btn theme-back-to-top-button backToTopButton_sjWU" type="button"></button><div class="docPage__5DB"><main class="docMainContainer_gTbr docMainContainerEnhanced_Uz_u"><div class="container padding-top--md padding-bottom--lg"><div class="row"><div class="col docItemCol_VOVn"><div class="docItemContainer_Djhp"><article><span class="theme-doc-version-badge badge badge--secondary">Version: 4.8.2</span><div class="theme-doc-markdown markdown"><header><h1>BookKeeper metrics reference</h1></header></div></article><nav class="pagination-nav docusaurus-mt-lg" aria-label="Docs pages navigation"></nav></div></div></div></div></main></div></div><footer class="footer footer--dark"><div class="container container-fluid"><div class="row footer__links"><div class="col footer__col"><div class="footer__title">Documentation</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/docs/overview">Overview</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/getting-started/installation">Getting started</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/deployment/manual">Deployment</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/admin/bookies">Administration</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/api/overview">API</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/security/overview">Security</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/development/protocol">Development</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/reference/config">Reference</a></li></ul></div><div class="col footer__col"><div class="footer__title">Community</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/community/mailing-lists">Mailing lists</a></li><li class="footer__item"><a class="footer__link-item" href="/community/slack">Slack</a></li><li class="footer__item"><a href="https://github.com/apache/bookkeeper" target="_blank" rel="noopener noreferrer" class="footer__link-item">Github<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a href="https://twitter.com/asfbookkeeper" target="_blank" rel="noopener noreferrer" class="footer__link-item">Twitter<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div><div class="col footer__col"><div class="footer__title">Project</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/project/who">Who are we?</a></li><li class="footer__item"><a class="footer__link-item" href="/project/bylaws">Bylaws</a></li><li class="footer__item"><a href="https://apache.org/licenses" target="_blank" rel="noopener noreferrer" class="footer__link-item">License<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a class="footer__link-item" href="/project/privacy">Privacy policy</a></li><li class="footer__item"><a href="https://www.apache.org/foundation/sponsorship.html" target="_blank" rel="noopener noreferrer" class="footer__link-item">Sponsorship<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a href="https://www.apache.org/foundation/thanks.html" target="_blank" rel="noopener noreferrer" class="footer__link-item">Thanks<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div></div><div class="footer__bottom text--center"><div class="footer__copyright"><footer class="footer">
         <div class="container">
           <div class="content has-text-centered">
             <p>
@@ -22,7 +22,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/4.8.2/security/overview/index.html b/content/docs/4.8.2/security/overview/index.html
index 6e2b3c3..5a64883 100644
--- a/content/docs/4.8.2/security/overview/index.html
+++ b/content/docs/4.8.2/security/overview/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">BookKeeper Security | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/4.8.2/security/overview"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.8.2"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.8.2"><meta data-rh="true" name="docsearch:version" content="4.8.2"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.8.2"><meta data-rh="true" property="og:title" content="BookKeeper Security | Apache BookKeeper"><meta data-rh="true" name="description" content="In the 4.5.0 release, the BookKeeper community added a number of features that can be used, together or separately, to secure a BookKeeper cluster."><meta data-rh="true" property="og:description" content="In the 4.5.0 release, the BookKeeper community added a number of features that can be used, together or separately, to secure a BookKeeper cluster."><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/4.8.2/security/overview"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.8.2/security/overview" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.8.2/security/overview" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -23,7 +23,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/4.8.2/security/sasl/index.html b/content/docs/4.8.2/security/sasl/index.html
index 72f7397..bfd673f 100644
--- a/content/docs/4.8.2/security/sasl/index.html
+++ b/content/docs/4.8.2/security/sasl/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">Authentication using SASL | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/4.8.2/security/sasl"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.8.2"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.8.2"><meta data-rh="true" name="docsearch:version" content="4.8.2"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.8.2"><meta data-rh="true" property="og:title" content="Authentication using SASL | Apache BookKeeper"><meta data-rh="true" name="description" content="Bookies support client authentication via SASL. Currently we only support GSSAPI (Kerberos). We will start"><meta data-rh="true" property="og:description" content="Bookies support client authentication via SASL. Currently we only support GSSAPI (Kerberos). We will start"><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/4.8.2/security/sasl"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.8.2/security/sasl" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.8.2/security/sasl" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -45,7 +45,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/4.8.2/security/tls/index.html b/content/docs/4.8.2/security/tls/index.html
index efebbde..530e84c 100644
--- a/content/docs/4.8.2/security/tls/index.html
+++ b/content/docs/4.8.2/security/tls/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">Encryption and Authentication using TLS | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/4.8.2/security/tls"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.8.2"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.8.2"><meta data-rh="true" name="docsearch:version" content="4.8.2"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.8.2"><meta data-rh="true" property="og:title" content="Encryption and Authentication using TLS | Apache BookKeeper"><meta data-rh="true" name="description" content="Apache BookKeeper allows clients and autorecovery daemons to communicate over TLS, although this is not enabled by default."><meta data-rh="true" property="og:description" content="Apache BookKeeper allows clients and autorecovery daemons to communicate over TLS, although this is not enabled by default."><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/4.8.2/security/tls"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.8.2/security/tls" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.8.2/security/tls" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -53,7 +53,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/4.8.2/security/zookeeper/index.html b/content/docs/4.8.2/security/zookeeper/index.html
index f151cf6..cecb3cf 100644
--- a/content/docs/4.8.2/security/zookeeper/index.html
+++ b/content/docs/4.8.2/security/zookeeper/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">ZooKeeper Authentication | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/4.8.2/security/zookeeper"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.8.2"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.8.2"><meta data-rh="true" name="docsearch:version" content="4.8.2"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.8.2"><meta data-rh="true" property="og:title" content="ZooKeeper Authentication | Apache BookKeeper"><meta data-rh="true" name="description" content="New Clusters"><meta data-rh="true" property="og:description" content="New Clusters"><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/4.8.2/security/zookeeper"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.8.2/security/zookeeper" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.8.2/security/zookeeper" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -29,7 +29,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/4.9.2/admin/autorecovery/index.html b/content/docs/4.9.2/admin/autorecovery/index.html
index 27a91c2..62eecf2 100644
--- a/content/docs/4.9.2/admin/autorecovery/index.html
+++ b/content/docs/4.9.2/admin/autorecovery/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">Using AutoRecovery | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/4.9.2/admin/autorecovery"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.9.2"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.9.2"><meta data-rh="true" name="docsearch:version" content="4.9.2"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.9.2"><meta data-rh="true" property="og:title" content="Using AutoRecovery | Apache BookKeeper"><meta data-rh="true" name="description" content="When a bookie crashes, all ledgers on that bookie become under-replicated. In order to bring all ledgers in your BookKeeper cluster back to full replication, you&#x27;ll need to recover the data from any offline bookies. There are two ways to recover bookies&#x27; data:"><meta data-rh="true" property="og:description" content="When a bookie crashes, all ledgers on that bookie become under-replicated. In order to bring all ledgers in your BookKeeper cluster back to full replication, you&#x27;ll need to recover the data from any offline bookies. There are two ways to recover bookies&#x27; data:"><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/4.9.2/admin/autorecovery"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.9.2/admin/autorecovery" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.9.2/admin/autorecovery" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -22,7 +22,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/4.9.2/admin/bookies/index.html b/content/docs/4.9.2/admin/bookies/index.html
index 68c1ccb..2bc7466 100644
--- a/content/docs/4.9.2/admin/bookies/index.html
+++ b/content/docs/4.9.2/admin/bookies/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">BookKeeper administration | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/4.9.2/admin/bookies"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.9.2"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.9.2"><meta data-rh="true" name="docsearch:version" content="4.9.2"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.9.2"><meta data-rh="true" property="og:title" content="BookKeeper administration | Apache BookKeeper"><meta data-rh="true" name="description" content="This document is a guide to deploying, administering, and maintaining BookKeeper. It also discusses best practices and common problems."><meta data-rh="true" property="og:description" content="This document is a guide to deploying, administering, and maintaining BookKeeper. It also discusses best practices and common problems."><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/4.9.2/admin/bookies"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.9.2/admin/bookies" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.9.2/admin/bookies" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -22,7 +22,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/4.9.2/admin/geo-replication/index.html b/content/docs/4.9.2/admin/geo-replication/index.html
index 9f94988..159a238 100644
--- a/content/docs/4.9.2/admin/geo-replication/index.html
+++ b/content/docs/4.9.2/admin/geo-replication/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">Geo-replication | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/4.9.2/admin/geo-replication"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.9.2"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.9.2"><meta data-rh="true" name="docsearch:version" content="4.9.2"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.9.2"><meta data-rh="true" property="og:title" content="Geo-replication | Apache BookKeeper"><meta data-rh="true" name="description" content="Geo-replication is the replication of data across BookKeeper clusters. In order to enable geo-replication for a group of BookKeeper clusters,"><meta data-rh="true" property="og:description" content="Geo-replication is the replication of data across BookKeeper clusters. In order to enable geo-replication for a group of BookKeeper clusters,"><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/4.9.2/admin/geo-replication"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.9.2/admin/geo-replication" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.9.2/admin/geo-replication" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -22,7 +22,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/4.9.2/admin/http/index.html b/content/docs/4.9.2/admin/http/index.html
index bb52072..7b77cc1 100644
--- a/content/docs/4.9.2/admin/http/index.html
+++ b/content/docs/4.9.2/admin/http/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">BookKeeper Admin REST API | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/4.9.2/admin/http"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.9.2"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.9.2"><meta data-rh="true" name="docsearch:version" content="4.9.2"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.9.2"><meta data-rh="true" property="og:title" content="BookKeeper Admin REST API | Apache BookKeeper"><meta data-rh="true" name="description" content="This document introduces BookKeeper HTTP endpoints, which can be used for BookKeeper administration."><meta data-rh="true" property="og:description" content="This document introduces BookKeeper HTTP endpoints, which can be used for BookKeeper administration."><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/4.9.2/admin/http"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.9.2/admin/http" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.9.2/admin/http" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -23,7 +23,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/4.9.2/admin/metrics/index.html b/content/docs/4.9.2/admin/metrics/index.html
index 9eb5ab2..047d3c2 100644
--- a/content/docs/4.9.2/admin/metrics/index.html
+++ b/content/docs/4.9.2/admin/metrics/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">Metric collection | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/4.9.2/admin/metrics"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.9.2"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.9.2"><meta data-rh="true" name="docsearch:version" content="4.9.2"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.9.2"><meta data-rh="true" property="og:title" content="Metric collection | Apache BookKeeper"><meta data-rh="true" name="description" content="BookKeeper enables metrics collection through a variety of stats providers."><meta data-rh="true" property="og:description" content="BookKeeper enables metrics collection through a variety of stats providers."><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/4.9.2/admin/metrics"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.9.2/admin/metrics" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.9.2/admin/metrics" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -22,7 +22,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/4.9.2/admin/perf/index.html b/content/docs/4.9.2/admin/perf/index.html
index c4d0c55..6de3e02 100644
--- a/content/docs/4.9.2/admin/perf/index.html
+++ b/content/docs/4.9.2/admin/perf/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">Performance tuning | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/4.9.2/admin/perf"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.9.2"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.9.2"><meta data-rh="true" name="docsearch:version" content="4.9.2"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.9.2"><meta data-rh="true" property="og:title" content="Performance tuning | Apache BookKeeper"><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/4.9.2/admin/perf"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.9.2/admin/perf" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.9.2/admin/perf" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -22,7 +22,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/4.9.2/admin/placement/index.html b/content/docs/4.9.2/admin/placement/index.html
index 3d428c7..c868147 100644
--- a/content/docs/4.9.2/admin/placement/index.html
+++ b/content/docs/4.9.2/admin/placement/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">Customized placement policies | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/4.9.2/admin/placement"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.9.2"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.9.2"><meta data-rh="true" name="docsearch:version" content="4.9.2"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.9.2"><meta data-rh="true" property="og:title" content="Customized placement policies | Apache BookKeeper"><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/4.9.2/admin/placement"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.9.2/admin/placement" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.9.2/admin/placement" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -22,7 +22,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/4.9.2/admin/upgrade/index.html b/content/docs/4.9.2/admin/upgrade/index.html
index 64387af..0c53449 100644
--- a/content/docs/4.9.2/admin/upgrade/index.html
+++ b/content/docs/4.9.2/admin/upgrade/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">Upgrade | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/4.9.2/admin/upgrade"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.9.2"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.9.2"><meta data-rh="true" name="docsearch:version" content="4.9.2"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.9.2"><meta data-rh="true" property="og:title" content="Upgrade | Apache BookKeeper"><meta data-rh="true" name="description" content="If you have questions about upgrades (or need help), please feel free to reach out to us by mailing list or Slack Channel."><meta data-rh="true" property="og:description" content="If you have questions about upgrades (or need help), please feel free to reach out to us by mailing list or Slack Channel."><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/4.9.2/admin/upgrade"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.9.2/admin/upgrade" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.9.2/admin/upgrade" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -29,7 +29,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/4.9.2/api/distributedlog-api/index.html b/content/docs/4.9.2/api/distributedlog-api/index.html
index beecb0a..b35da18 100644
--- a/content/docs/4.9.2/api/distributedlog-api/index.html
+++ b/content/docs/4.9.2/api/distributedlog-api/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">DistributedLog | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/4.9.2/api/distributedlog-api"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.9.2"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.9.2"><meta data-rh="true" name="docsearch:version" content="4.9.2"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.9.2"><meta data-rh="true" property="og:title" content="DistributedLog | Apache BookKeeper"><meta data-rh="true" name="description" content="DistributedLog began its life as a separate project under the Apache Foundation. It was merged into BookKeeper in 2017."><meta data-rh="true" property="og:description" content="DistributedLog began its life as a separate project under the Apache Foundation. It was merged into BookKeeper in 2017."><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/4.9.2/api/distributedlog-api"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.9.2/api/distributedlog-api" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.9.2/api/distributedlog-api" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -22,7 +22,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/4.9.2/api/ledger-adv-api/index.html b/content/docs/4.9.2/api/ledger-adv-api/index.html
index 24a213e..b696f23 100644
--- a/content/docs/4.9.2/api/ledger-adv-api/index.html
+++ b/content/docs/4.9.2/api/ledger-adv-api/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">The Advanced Ledger API | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/4.9.2/api/ledger-adv-api"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.9.2"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.9.2"><meta data-rh="true" name="docsearch:version" content="4.9.2"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.9.2"><meta data-rh="true" property="og:title" content="The Advanced Ledger API | Apache BookKeeper"><meta data-rh="true" name="description" content="In release 4.5.0, Apache BookKeeper introduces a few advanced API for advanced usage."><meta data-rh="true" property="og:description" content="In release 4.5.0, Apache BookKeeper introduces a few advanced API for advanced usage."><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/4.9.2/api/ledger-adv-api"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.9.2/api/ledger-adv-api" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.9.2/api/ledger-adv-api" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -27,7 +27,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/4.9.2/api/ledger-api/index.html b/content/docs/4.9.2/api/ledger-api/index.html
index 1f15d21..14a24b5 100644
--- a/content/docs/4.9.2/api/ledger-api/index.html
+++ b/content/docs/4.9.2/api/ledger-api/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">The Ledger API | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/4.9.2/api/ledger-api"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.9.2"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.9.2"><meta data-rh="true" name="docsearch:version" content="4.9.2"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.9.2"><meta data-rh="true" property="og:title" content="The Ledger API | Apache BookKeeper"><meta data-rh="true" name="description" content="The ledger API is a lower-level API for BookKeeper that enables you to interact with ledgers directly."><meta data-rh="true" property="og:description" content="The ledger API is a lower-level API for BookKeeper that enables you to interact with ledgers directly."><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/4.9.2/api/ledger-api"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.9.2/api/ledger-api" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.9.2/api/ledger-api" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -46,7 +46,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/4.9.2/api/overview/index.html b/content/docs/4.9.2/api/overview/index.html
index 24780a8..084689e 100644
--- a/content/docs/4.9.2/api/overview/index.html
+++ b/content/docs/4.9.2/api/overview/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">BookKeeper API | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/4.9.2/api/overview"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.9.2"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.9.2"><meta data-rh="true" name="docsearch:version" content="4.9.2"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.9.2"><meta data-rh="true" property="og:title" content="BookKeeper API | Apache BookKeeper"><meta data-rh="true" name="description" content="BookKeeper offers a few APIs that applications can use to interact with it:"><meta data-rh="true" property="og:description" content="BookKeeper offers a few APIs that applications can use to interact with it:"><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/4.9.2/api/overview"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.9.2/api/overview" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.9.2/api/overview" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -24,7 +24,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/4.9.2/deployment/kubernetes/index.html b/content/docs/4.9.2/deployment/kubernetes/index.html
index 89a7111..e65c85c 100644
--- a/content/docs/4.9.2/deployment/kubernetes/index.html
+++ b/content/docs/4.9.2/deployment/kubernetes/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">Deploying Apache BookKeeper on Kubernetes | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/4.9.2/deployment/kubernetes"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.9.2"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.9.2"><meta data-rh="true" name="docsearch:version" content="4.9.2"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.9.2"><meta data-rh="true" property="og:title" content="Deploying Apache BookKeeper on Kubernetes | Apache BookKeeper"><meta data-rh="true" name="description" content="Apache BookKeeper can be easily deployed in Kubernetes clusters. The managed clusters on Google Container Engine is the most convenient way."><meta data-rh="true" property="og:description" content="Apache BookKeeper can be easily deployed in Kubernetes clusters. The managed clusters on Google Container Engine is the most convenient way."><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/4.9.2/deployment/kubernetes"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.9.2/deployment/kubernetes" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.9.2/deployment/kubernetes" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -29,7 +29,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/4.9.2/deployment/manual/index.html b/content/docs/4.9.2/deployment/manual/index.html
index fef1d66..2bce3db 100644
--- a/content/docs/4.9.2/deployment/manual/index.html
+++ b/content/docs/4.9.2/deployment/manual/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">Manual deployment | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/4.9.2/deployment/manual"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.9.2"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.9.2"><meta data-rh="true" name="docsearch:version" content="4.9.2"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.9.2"><meta data-rh="true" property="og:title" content="Manual deployment | Apache BookKeeper"><meta data-rh="true" name="description" content="A BookKeeper cluster consists of two main components:"><meta data-rh="true" property="og:description" content="A BookKeeper cluster consists of two main components:"><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/4.9.2/deployment/manual"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.9.2/deployment/manual" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.9.2/deployment/manual" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -22,7 +22,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/4.9.2/development/codebase/index.html b/content/docs/4.9.2/development/codebase/index.html
index 6455476..dd20375 100644
--- a/content/docs/4.9.2/development/codebase/index.html
+++ b/content/docs/4.9.2/development/codebase/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">The BookKeeper codebase | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/4.9.2/development/codebase"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.9.2"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.9.2"><meta data-rh="true" name="docsearch:version" content="4.9.2"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.9.2"><meta data-rh="true" property="og:title" content="The BookKeeper codebase | Apache BookKeeper"><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/4.9.2/development/codebase"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.9.2/development/codebase" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.9.2/development/codebase" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -22,7 +22,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/4.9.2/development/protocol/index.html b/content/docs/4.9.2/development/protocol/index.html
index ea1beb0..91a1738 100644
--- a/content/docs/4.9.2/development/protocol/index.html
+++ b/content/docs/4.9.2/development/protocol/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">The BookKeeper protocol | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/4.9.2/development/protocol"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.9.2"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.9.2"><meta data-rh="true" name="docsearch:version" content="4.9.2"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.9.2"><meta data-rh="true" property="og:title" content="The BookKeeper protocol | Apache BookKeeper"><meta data-rh="true" name="description" content="BookKeeper uses a special replication protocol for guaranteeing persistent storage of entries in an ensemble of bookies."><meta data-rh="true" property="og:description" content="BookKeeper uses a special replication protocol for guaranteeing persistent storage of entries in an ensemble of bookies."><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/4.9.2/development/protocol"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.9.2/development/protocol" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.9.2/development/protocol" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -22,7 +22,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/4.9.2/getting-started/concepts/index.html b/content/docs/4.9.2/getting-started/concepts/index.html
index 7a153d8..727da2b 100644
--- a/content/docs/4.9.2/getting-started/concepts/index.html
+++ b/content/docs/4.9.2/getting-started/concepts/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">BookKeeper concepts and architecture | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/4.9.2/getting-started/concepts"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.9.2"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.9.2"><meta data-rh="true" name="docsearch:version" content="4.9.2"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.9.2"><meta data-rh="true" property="og:title" content="BookKeeper concepts and architecture | Apache BookKeeper"><meta data-rh="true" name="description" content="BookKeeper is a service that provides persistent storage of streams of log entries---aka records---in sequences called ledgers. BookKeeper replicates stored entries across multiple servers."><meta data-rh="true" property="og:description" content="BookKeeper is a service that provides persistent storage of streams of log entries---aka records---in sequences called ledgers. BookKeeper replicates stored entries across multiple servers."><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/4.9.2/getting-started/concepts"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.9.2/getting-started/concepts" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.9.2/getting-started/concepts" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -22,7 +22,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/4.9.2/getting-started/installation/index.html b/content/docs/4.9.2/getting-started/installation/index.html
index d2d6a72..2b286ad 100644
--- a/content/docs/4.9.2/getting-started/installation/index.html
+++ b/content/docs/4.9.2/getting-started/installation/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">BookKeeper installation | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/4.9.2/getting-started/installation"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.9.2"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.9.2"><meta data-rh="true" name="docsearch:version" content="4.9.2"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.9.2"><meta data-rh="true" property="og:title" content="BookKeeper installation | Apache BookKeeper"><meta data-rh="true" name="description" content="You can install BookKeeper either by downloading a GZipped tarball package or cloning the BookKeeper repository."><meta data-rh="true" property="og:description" content="You can install BookKeeper either by downloading a GZipped tarball package or cloning the BookKeeper repository."><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/4.9.2/getting-started/installation"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.9.2/getting-started/installation" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.9.2/getting-started/installation" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -22,7 +22,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/4.9.2/getting-started/run-locally/index.html b/content/docs/4.9.2/getting-started/run-locally/index.html
index 03be7a0..10028c1 100644
--- a/content/docs/4.9.2/getting-started/run-locally/index.html
+++ b/content/docs/4.9.2/getting-started/run-locally/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">Run bookies locally | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/4.9.2/getting-started/run-locally"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.9.2"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.9.2"><meta data-rh="true" name="docsearch:version" content="4.9.2"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.9.2"><meta data-rh="true" property="og:title" content="Run bookies locally | Apache BookKeeper"><meta data-rh="true" name="description" content="Bookies are individual BookKeeper servers. You can run an ensemble of bookies locally on a single machine using the localbookie command of the bookkeeper CLI tool and specifying the number of bookies you&#x27;d like to include in the ensemble."><meta data-rh="true" property="og:description" content="Bookies are individual BookKeeper servers. You can run an ensemble of bookies locally on a single machine using the localbookie command of the bookkeeper CLI tool and specifying the number of bookies you&#x27;d like to include in the ensemble."><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/4.9.2/getting-started/run-locally"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.9.2/getting-started/run-locally" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.9.2/getting-started/run-locally" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -22,7 +22,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/4.9.2/overview/index.html b/content/docs/4.9.2/overview/index.html
index 158fb77..d52e631 100644
--- a/content/docs/4.9.2/overview/index.html
+++ b/content/docs/4.9.2/overview/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">Apache BookKeeper 4.9.2 | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/4.9.2/overview/"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.9.2"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.9.2"><meta data-rh="true" name="docsearch:version" content="4.9.2"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.9.2"><meta data-rh="true" property="og:title" content="Apache BookKeeper 4.9.2 | Apache BookKeeper"><meta data-rh="true" name="description" content="&lt;!--"><meta data-rh="true" property="og:description" content="&lt;!--"><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/4.9.2/overview/"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.9.2/overview/" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.9.2/overview/" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -24,7 +24,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/4.9.2/reference/cli/index.html b/content/docs/4.9.2/reference/cli/index.html
index 0d611b4..0701172 100644
--- a/content/docs/4.9.2/reference/cli/index.html
+++ b/content/docs/4.9.2/reference/cli/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">BookKeeper CLI tool reference | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/4.9.2/reference/cli"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.9.2"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.9.2"><meta data-rh="true" name="docsearch:version" content="4.9.2"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.9.2"><meta data-rh="true" property="og:title" content="BookKeeper CLI tool reference | Apache BookKeeper"><meta data-rh="true" name="description" content="bookkeeper command"><meta data-rh="true" property="og:description" content="bookkeeper command"><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/4.9.2/reference/cli"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.9.2/reference/cli" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.9.2/reference/cli" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -29,7 +29,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/4.9.2/reference/config/index.html b/content/docs/4.9.2/reference/config/index.html
index 59635d7..abb56f5 100644
--- a/content/docs/4.9.2/reference/config/index.html
+++ b/content/docs/4.9.2/reference/config/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">BookKeeper configuration | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/4.9.2/reference/config"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.9.2"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.9.2"><meta data-rh="true" name="docsearch:version" content="4.9.2"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.9.2"><meta data-rh="true" property="og:title" content="BookKeeper configuration | Apache BookKeeper"><meta data-rh="true" name="description" content="The table below lists parameters that you can set to configure bookies. All configuration takes place in the bk_server.conf file in the bookkeeper-server/conf directory of your BookKeeper installation."><meta data-rh="true" property="og:description" content="The table below lists parameters that you can set to configure bookies. All configuration takes place in the bk_server.conf file in the bookkeeper-server/conf directory of your BookKeeper installation."><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/4.9.2/reference/config"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.9.2/reference/config" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.9.2/reference/config" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -22,7 +22,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/4.9.2/reference/metrics/index.html b/content/docs/4.9.2/reference/metrics/index.html
index a06dfa2..5342c17 100644
--- a/content/docs/4.9.2/reference/metrics/index.html
+++ b/content/docs/4.9.2/reference/metrics/index.html
@@ -4,12 +4,12 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">BookKeeper metrics reference | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/4.9.2/reference/metrics"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.9.2"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.9.2"><meta data-rh="true" name="docsearch:version" content="4.9.2"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.9.2"><meta data-rh="true" property="og:title" content="BookKeeper metrics reference | Apache BookKeeper"><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/4.9.2/reference/metrics"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.9.2/reference/metrics" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.9.2/reference/metrics" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
-<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navbar__brand" href="/"><div class="navbar__logo"><img src="/img/bk-logo.svg" alt="Apache Bookkeeper" class="themedImage_ToTc themedImage--light_HNdA"><img src="/img/bk-logo.svg" alt="Apache Bookkeeper" class="themedImage_ToTc themedImage--dark_i4oU"></div><b class="navbar__title text--truncate">Apache BookKeeper</b></a><a class="navbar__item navbar__link" href="/docs/4.9.2/overview/">Documentation</a><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Community</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/community/mailing-lists">Mailing lists</a></li><li><a class="dropdown__link" href="/community/slack">Slack</a></li><li><a href="https://github.com/apache/bookkeeper/issues" target="_blank" rel="noopener noreferrer" class="dropdown__link">Github issues<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a class="dropdown__link" href="/community/releases">Release management</a></li><li><a class="dropdown__link" href="/community/meeting">Community meetings</a></li><li><a class="dropdown__link" href="/community/contributing">Contribution guide</a></li><li><a class="dropdown__link" href="/community/coding-guide">Coding guide</a></li><li><a class="dropdown__link" href="/community/testing">Testing guide</a></li><li><a class="dropdown__link" href="/community/issue-report">Issue report guide</a></li><li><a class="dropdown__link" href="/community/release-guide">Release guide</a></li><li><a class="dropdown__link" href="/community/presentations">Presentations</a></li><li><a class="dropdown__link" href="/community/bookkeeper-proposals">BookKeeper proposals (BP)</a></li></ul></div><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Project</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/project/who">Who are we?</a></li><li><a class="dropdown__link" href="/project/bylaws">Bylaws</a></li><li><a href="https://apache.org/licenses" target="_blank" rel="noopener noreferrer" class="dropdown__link">License<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a class="dropdown__link" href="/project/privacy">Privacy policy</a></li><li><a href="https://www.apache.org/foundation/sponsorship.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Sponsorship<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a href="https://www.apache.org/foundation/thanks.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Thanks<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div></div><div class="navbar__items navbar__items--right"><div class="navbar__item dropdown dropdown--hoverable dropdown--right"><a class="navbar__link" aria-haspopup="true" aria-expanded="false" role="button" href="/docs/4.9.2/overview/">4.9.2</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/docs/next/overview/">Next</a></li><li><a class="dropdown__link" href="/docs/admin/autorecovery">4.17.0</a></li><li><a class="dropdown__link" href="/docs/4.16.5/overview/">4.16.5</a></li><li><a class="dropdown__link" href="/docs/4.15.5/overview/">4.15.5</a></li><li><a class="dropdown__link" href="/docs/4.14.8/reference/metrics">4.14.8</a></li><li><a class="dropdown__link" href="/docs/4.13.0/reference/metrics">4.13.0</a></li><li><a class="dropdown__link" href="/docs/4.12.1/reference/metrics">4.12.1</a></li><li><a class="dropdown__link" href="/docs/4.11.1/reference/metrics">4.11.1</a></li><li><a class="dropdown__link" href="/docs/4.10.0/reference/metrics">4.10.0</a></li><li><a aria-current="page" class="dropdown__link dropdown__link--active" href="/docs/4.9.2/reference/metrics">4.9.2</a></li><li><a class="dropdown__link" href="/docs/4.8.2/reference/metrics">4.8.2</a></li><li><a class="dropdown__link" href="/docs/4.7.3/reference/metrics">4.7.3</a></li><li><a class="dropdown__link" href="/docs/4.6.2/reference/metrics">4.6.2</a></li><li><a class="dropdown__link" href="/docs/4.5.1/reference/metrics">4.5.1</a></li></ul></div><a class="navbar__item navbar__link" href="/releases">Download</a><div class="toggle_vylO colorModeToggle_DEke"><button class="clean-btn toggleButton_gllP toggleButtonDisabled_aARS" type="button" disabled="" title="Switch between dark and light mode (currently light mode)" aria-label="Switch between dark and light mode (currently light mode)" aria-live="polite"><svg viewBox="0 0 24 24" width="24" height="24" class="lightToggleIcon_pyhR"><path fill="currentColor" d="M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"></path></svg><svg viewBox="0 0 24 24" width="24" height="24" class="darkToggleIcon_wfgR"><path fill="currentColor" d="M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"></path></svg></button></div><div class="searchBox_ZlJk"></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div></nav><div id="docusaurus_skipToContent_fallback" class="main-wrapper mainWrapper_z2l0 docsWrapper_BCFX"><button aria-label="Scroll back to top" class="clean-btn theme-back-to-top-button backToTopButton_sjWU" type="button"></button><div class="docPage__5DB"><main class="docMainContainer_gTbr docMainContainerEnhanced_Uz_u"><div class="container padding-top--md padding-bottom--lg"><div class="row"><div class="col docItemCol_VOVn"><div class="docItemContainer_Djhp"><article><span class="theme-doc-version-badge badge badge--secondary">Version: 4.9.2</span><div class="theme-doc-markdown markdown"><header><h1>BookKeeper metrics reference</h1></header></div></article><nav class="pagination-nav docusaurus-mt-lg" aria-label="Docs pages navigation"></nav></div></div></div></div></main></div></div><footer class="footer footer--dark"><div class="container container-fluid"><div class="row footer__links"><div class="col footer__col"><div class="footer__title">Documentation</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/docs/overview">Overview</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/getting-started/installation">Getting started</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/deployment/manual">Deployment</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/admin/bookies">Administration</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/api/overview">API</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/security/overview">Security</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/development/protocol">Development</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/reference/config">Reference</a></li></ul></div><div class="col footer__col"><div class="footer__title">Community</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/community/mailing-lists">Mailing lists</a></li><li class="footer__item"><a class="footer__link-item" href="/community/slack">Slack</a></li><li class="footer__item"><a href="https://github.com/apache/bookkeeper" target="_blank" rel="noopener noreferrer" class="footer__link-item">Github<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a href="https://twitter.com/asfbookkeeper" target="_blank" rel="noopener noreferrer" class="footer__link-item">Twitter<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div><div class="col footer__col"><div class="footer__title">Project</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/project/who">Who are we?</a></li><li class="footer__item"><a class="footer__link-item" href="/project/bylaws">Bylaws</a></li><li class="footer__item"><a href="https://apache.org/licenses" target="_blank" rel="noopener noreferrer" class="footer__link-item">License<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a class="footer__link-item" href="/project/privacy">Privacy policy</a></li><li class="footer__item"><a href="https://www.apache.org/foundation/sponsorship.html" target="_blank" rel="noopener noreferrer" class="footer__link-item">Sponsorship<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a href="https://www.apache.org/foundation/thanks.html" target="_blank" rel="noopener noreferrer" class="footer__link-item">Thanks<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div></div><div class="footer__bottom text--center"><div class="footer__copyright"><footer class="footer">
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navbar__brand" href="/"><div class="navbar__logo"><img src="/img/bk-logo.svg" alt="Apache Bookkeeper" class="themedImage_ToTc themedImage--light_HNdA"><img src="/img/bk-logo.svg" alt="Apache Bookkeeper" class="themedImage_ToTc themedImage--dark_i4oU"></div><b class="navbar__title text--truncate">Apache BookKeeper</b></a><a class="navbar__item navbar__link" href="/docs/4.9.2/overview/">Documentation</a><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Community</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/community/mailing-lists">Mailing lists</a></li><li><a class="dropdown__link" href="/community/slack">Slack</a></li><li><a href="https://github.com/apache/bookkeeper/issues" target="_blank" rel="noopener noreferrer" class="dropdown__link">Github issues<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a class="dropdown__link" href="/community/releases">Release management</a></li><li><a class="dropdown__link" href="/community/meeting">Community meetings</a></li><li><a class="dropdown__link" href="/community/contributing">Contribution guide</a></li><li><a class="dropdown__link" href="/community/coding-guide">Coding guide</a></li><li><a class="dropdown__link" href="/community/testing">Testing guide</a></li><li><a class="dropdown__link" href="/community/issue-report">Issue report guide</a></li><li><a class="dropdown__link" href="/community/release-guide">Release guide</a></li><li><a class="dropdown__link" href="/community/presentations">Presentations</a></li><li><a class="dropdown__link" href="/community/bookkeeper-proposals">BookKeeper proposals (BP)</a></li></ul></div><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Project</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/project/who">Who are we?</a></li><li><a class="dropdown__link" href="/project/bylaws">Bylaws</a></li><li><a href="https://apache.org/licenses" target="_blank" rel="noopener noreferrer" class="dropdown__link">License<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a class="dropdown__link" href="/project/privacy">Privacy policy</a></li><li><a href="https://www.apache.org/foundation/sponsorship.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Sponsorship<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a href="https://www.apache.org/foundation/thanks.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Thanks<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div></div><div class="navbar__items navbar__items--right"><div class="navbar__item dropdown dropdown--hoverable dropdown--right"><a class="navbar__link" aria-haspopup="true" aria-expanded="false" role="button" href="/docs/4.9.2/overview/">4.9.2</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/docs/next/overview/">Next</a></li><li><a class="dropdown__link" href="/docs/overview/">4.17.0</a></li><li><a class="dropdown__link" href="/docs/4.16.5/overview/">4.16.5</a></li><li><a class="dropdown__link" href="/docs/4.15.5/overview/">4.15.5</a></li><li><a class="dropdown__link" href="/docs/4.14.8/reference/metrics">4.14.8</a></li><li><a class="dropdown__link" href="/docs/4.13.0/reference/metrics">4.13.0</a></li><li><a class="dropdown__link" href="/docs/4.12.1/reference/metrics">4.12.1</a></li><li><a class="dropdown__link" href="/docs/4.11.1/reference/metrics">4.11.1</a></li><li><a class="dropdown__link" href="/docs/4.10.0/reference/metrics">4.10.0</a></li><li><a aria-current="page" class="dropdown__link dropdown__link--active" href="/docs/4.9.2/reference/metrics">4.9.2</a></li><li><a class="dropdown__link" href="/docs/4.8.2/reference/metrics">4.8.2</a></li><li><a class="dropdown__link" href="/docs/4.7.3/reference/metrics">4.7.3</a></li><li><a class="dropdown__link" href="/docs/4.6.2/reference/metrics">4.6.2</a></li><li><a class="dropdown__link" href="/docs/4.5.1/reference/metrics">4.5.1</a></li></ul></div><a class="navbar__item navbar__link" href="/releases">Download</a><div class="toggle_vylO colorModeToggle_DEke"><button class="clean-btn toggleButton_gllP toggleButtonDisabled_aARS" type="button" disabled="" title="Switch between dark and light mode (currently light mode)" aria-label="Switch between dark and light mode (currently light mode)" aria-live="polite"><svg viewBox="0 0 24 24" width="24" height="24" class="lightToggleIcon_pyhR"><path fill="currentColor" d="M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"></path></svg><svg viewBox="0 0 24 24" width="24" height="24" class="darkToggleIcon_wfgR"><path fill="currentColor" d="M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"></path></svg></button></div><div class="searchBox_ZlJk"></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div></nav><div id="docusaurus_skipToContent_fallback" class="main-wrapper mainWrapper_z2l0 docsWrapper_BCFX"><button aria-label="Scroll back to top" class="clean-btn theme-back-to-top-button backToTopButton_sjWU" type="button"></button><div class="docPage__5DB"><main class="docMainContainer_gTbr docMainContainerEnhanced_Uz_u"><div class="container padding-top--md padding-bottom--lg"><div class="row"><div class="col docItemCol_VOVn"><div class="docItemContainer_Djhp"><article><span class="theme-doc-version-badge badge badge--secondary">Version: 4.9.2</span><div class="theme-doc-markdown markdown"><header><h1>BookKeeper metrics reference</h1></header></div></article><nav class="pagination-nav docusaurus-mt-lg" aria-label="Docs pages navigation"></nav></div></div></div></div></main></div></div><footer class="footer footer--dark"><div class="container container-fluid"><div class="row footer__links"><div class="col footer__col"><div class="footer__title">Documentation</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/docs/overview">Overview</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/getting-started/installation">Getting started</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/deployment/manual">Deployment</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/admin/bookies">Administration</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/api/overview">API</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/security/overview">Security</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/development/protocol">Development</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/reference/config">Reference</a></li></ul></div><div class="col footer__col"><div class="footer__title">Community</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/community/mailing-lists">Mailing lists</a></li><li class="footer__item"><a class="footer__link-item" href="/community/slack">Slack</a></li><li class="footer__item"><a href="https://github.com/apache/bookkeeper" target="_blank" rel="noopener noreferrer" class="footer__link-item">Github<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a href="https://twitter.com/asfbookkeeper" target="_blank" rel="noopener noreferrer" class="footer__link-item">Twitter<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div><div class="col footer__col"><div class="footer__title">Project</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/project/who">Who are we?</a></li><li class="footer__item"><a class="footer__link-item" href="/project/bylaws">Bylaws</a></li><li class="footer__item"><a href="https://apache.org/licenses" target="_blank" rel="noopener noreferrer" class="footer__link-item">License<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a class="footer__link-item" href="/project/privacy">Privacy policy</a></li><li class="footer__item"><a href="https://www.apache.org/foundation/sponsorship.html" target="_blank" rel="noopener noreferrer" class="footer__link-item">Sponsorship<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a href="https://www.apache.org/foundation/thanks.html" target="_blank" rel="noopener noreferrer" class="footer__link-item">Thanks<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div></div><div class="footer__bottom text--center"><div class="footer__copyright"><footer class="footer">
         <div class="container">
           <div class="content has-text-centered">
             <p>
@@ -22,7 +22,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/4.9.2/security/overview/index.html b/content/docs/4.9.2/security/overview/index.html
index 30eeede..995437c 100644
--- a/content/docs/4.9.2/security/overview/index.html
+++ b/content/docs/4.9.2/security/overview/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">BookKeeper Security | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/4.9.2/security/overview"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.9.2"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.9.2"><meta data-rh="true" name="docsearch:version" content="4.9.2"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.9.2"><meta data-rh="true" property="og:title" content="BookKeeper Security | Apache BookKeeper"><meta data-rh="true" name="description" content="In the 4.5.0 release, the BookKeeper community added a number of features that can be used, together or separately, to secure a BookKeeper cluster."><meta data-rh="true" property="og:description" content="In the 4.5.0 release, the BookKeeper community added a number of features that can be used, together or separately, to secure a BookKeeper cluster."><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/4.9.2/security/overview"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.9.2/security/overview" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.9.2/security/overview" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -23,7 +23,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/4.9.2/security/sasl/index.html b/content/docs/4.9.2/security/sasl/index.html
index 3c8eb76..a979be5 100644
--- a/content/docs/4.9.2/security/sasl/index.html
+++ b/content/docs/4.9.2/security/sasl/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">Authentication using SASL | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/4.9.2/security/sasl"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.9.2"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.9.2"><meta data-rh="true" name="docsearch:version" content="4.9.2"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.9.2"><meta data-rh="true" property="og:title" content="Authentication using SASL | Apache BookKeeper"><meta data-rh="true" name="description" content="Bookies support client authentication via SASL. Currently we only support GSSAPI (Kerberos). We will start"><meta data-rh="true" property="og:description" content="Bookies support client authentication via SASL. Currently we only support GSSAPI (Kerberos). We will start"><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/4.9.2/security/sasl"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.9.2/security/sasl" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.9.2/security/sasl" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -45,7 +45,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/4.9.2/security/tls/index.html b/content/docs/4.9.2/security/tls/index.html
index 90394ba..ccc5586 100644
--- a/content/docs/4.9.2/security/tls/index.html
+++ b/content/docs/4.9.2/security/tls/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">Encryption and Authentication using TLS | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/4.9.2/security/tls"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.9.2"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.9.2"><meta data-rh="true" name="docsearch:version" content="4.9.2"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.9.2"><meta data-rh="true" property="og:title" content="Encryption and Authentication using TLS | Apache BookKeeper"><meta data-rh="true" name="description" content="Apache BookKeeper allows clients and autorecovery daemons to communicate over TLS, although this is not enabled by default."><meta data-rh="true" property="og:description" content="Apache BookKeeper allows clients and autorecovery daemons to communicate over TLS, although this is not enabled by default."><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/4.9.2/security/tls"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.9.2/security/tls" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.9.2/security/tls" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -53,7 +53,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/4.9.2/security/zookeeper/index.html b/content/docs/4.9.2/security/zookeeper/index.html
index 3051cd0..f5df726 100644
--- a/content/docs/4.9.2/security/zookeeper/index.html
+++ b/content/docs/4.9.2/security/zookeeper/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">ZooKeeper Authentication | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/4.9.2/security/zookeeper"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.9.2"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.9.2"><meta data-rh="true" name="docsearch:version" content="4.9.2"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.9.2"><meta data-rh="true" property="og:title" content="ZooKeeper Authentication | Apache BookKeeper"><meta data-rh="true" name="description" content="New Clusters"><meta data-rh="true" property="og:description" content="New Clusters"><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/4.9.2/security/zookeeper"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.9.2/security/zookeeper" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/4.9.2/security/zookeeper" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -29,7 +29,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/admin/autorecovery/index.html b/content/docs/admin/autorecovery/index.html
index 03472a6..b08c83d 100644
--- a/content/docs/admin/autorecovery/index.html
+++ b/content/docs/admin/autorecovery/index.html
@@ -4,13 +4,13 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">Using AutoRecovery | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/admin/autorecovery"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.17.0"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.17.0"><meta data-rh="true" name="docsearch:version" content="4.17.0"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.17.0"><meta data-rh="true" property="og:title" content="Using AutoRecovery | Apache BookKeeper"><meta data-rh="true" name="description" content="When a bookie crashes, all ledgers on that bookie become under-replicated. In order to bring all ledgers in your BookKeeper cluster back to full replication, you&#x27;ll need to recover the data from any offline bookies. There are two ways to recover bookies&#x27; data:"><meta data-rh="true" property="og:description" content="When a bookie crashes, all ledgers on that bookie become under-replicated. In order to bring all ledgers in your BookKeeper cluster back to full replication, you&#x27;ll need to recover the data from any offline bookies. There are two ways to recover bookies&#x27; data:"><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/admin/autorecovery"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/admin/autorecovery" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/admin/autorecovery" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
-<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navbar__brand" href="/"><div class="navbar__logo"><img src="/img/bk-logo.svg" alt="Apache Bookkeeper" class="themedImage_ToTc themedImage--light_HNdA"><img src="/img/bk-logo.svg" alt="Apache Bookkeeper" class="themedImage_ToTc themedImage--dark_i4oU"></div><b class="navbar__title text--truncate">Apache BookKeeper</b></a><a class="navbar__item navbar__link" href="/docs/overview/">Documentation</a><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Community</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/community/mailing-lists">Mailing lists</a></li><li><a class="dropdown__link" href="/community/slack">Slack</a></li><li><a href="https://github.com/apache/bookkeeper/issues" target="_blank" rel="noopener noreferrer" class="dropdown__link">Github issues<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a class="dropdown__link" href="/community/releases">Release management</a></li><li><a class="dropdown__link" href="/community/meeting">Community meetings</a></li><li><a class="dropdown__link" href="/community/contributing">Contribution guide</a></li><li><a class="dropdown__link" href="/community/coding-guide">Coding guide</a></li><li><a class="dropdown__link" href="/community/testing">Testing guide</a></li><li><a class="dropdown__link" href="/community/issue-report">Issue report guide</a></li><li><a class="dropdown__link" href="/community/release-guide">Release guide</a></li><li><a class="dropdown__link" href="/community/presentations">Presentations</a></li><li><a class="dropdown__link" href="/community/bookkeeper-proposals">BookKeeper proposals (BP)</a></li></ul></div><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Project</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/project/who">Who are we?</a></li><li><a class="dropdown__link" href="/project/bylaws">Bylaws</a></li><li><a href="https://apache.org/licenses" target="_blank" rel="noopener noreferrer" class="dropdown__link">License<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a class="dropdown__link" href="/project/privacy">Privacy policy</a></li><li><a href="https://www.apache.org/foundation/sponsorship.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Sponsorship<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a href="https://www.apache.org/foundation/thanks.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Thanks<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div></div><div class="navbar__items navbar__items--right"><div class="navbar__item dropdown dropdown--hoverable dropdown--right"><a aria-current="page" class="navbar__link active" aria-haspopup="true" aria-expanded="false" role="button" href="/docs/admin/autorecovery">4.17.0</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/docs/next/admin/autorecovery">Next</a></li><li><a aria-current="page" class="dropdown__link dropdown__link--active" href="/docs/admin/autorecovery">4.17.0</a></li><li><a class="dropdown__link" href="/docs/4.16.5/admin/autorecovery">4.16.5</a></li><li><a class="dropdown__link" href="/docs/4.15.5/admin/autorecovery">4.15.5</a></li><li><a class="dropdown__link" href="/docs/4.14.8/admin/autorecovery">4.14.8</a></li><li><a class="dropdown__link" href="/docs/4.13.0/admin/autorecovery">4.13.0</a></li><li><a class="dropdown__link" href="/docs/4.12.1/admin/autorecovery">4.12.1</a></li><li><a class="dropdown__link" href="/docs/4.11.1/admin/autorecovery">4.11.1</a></li><li><a class="dropdown__link" href="/docs/4.10.0/admin/autorecovery">4.10.0</a></li><li><a class="dropdown__link" href="/docs/4.9.2/admin/autorecovery">4.9.2</a></li><li><a class="dropdown__link" href="/docs/4.8.2/admin/autorecovery">4.8.2</a></li><li><a class="dropdown__link" href="/docs/4.7.3/admin/autorecovery">4.7.3</a></li><li><a class="dropdown__link" href="/docs/4.6.2/admin/autorecovery">4.6.2</a></li><li><a class="dropdown__link" href="/docs/4.5.1/admin/autorecovery">4.5.1</a></li></ul></div><a class="navbar__item navbar__link" href="/releases">Download</a><div class="toggle_vylO colorModeToggle_DEke"><button class="clean-btn toggleButton_gllP toggleButtonDisabled_aARS" type="button" disabled="" title="Switch between dark and light mode (currently light mode)" aria-label="Switch between dark and light mode (currently light mode)" aria-live="polite"><svg viewBox="0 0 24 24" width="24" height="24" class="lightToggleIcon_pyhR"><path fill="currentColor" d="M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"></path></svg><svg viewBox="0 0 24 24" width="24" height="24" class="darkToggleIcon_wfgR"><path fill="currentColor" d="M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"></path></svg></button></div><div class="searchBox_ZlJk"></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div></nav><div id="docusaurus_skipToContent_fallback" class="main-wrapper mainWrapper_z2l0 docsWrapper_BCFX"><button aria-label="Scroll back to top" class="clean-btn theme-back-to-top-button backToTopButton_sjWU" type="button"></button><div class="docPage__5DB"><main class="docMainContainer_gTbr docMainContainerEnhanced_Uz_u"><div class="container padding-top--md padding-bottom--lg"><div class="row"><div class="col docItemCol_VOVn"><div class="docItemContainer_Djhp"><article><span class="theme-doc-version-badge badge badge--secondary">Version: 4.17.0</span><div class="tocCollapsible_ETCw theme-doc-toc-mobile tocMobile_ITEo"><button type="button" class="clean-btn tocCollapsibleButton_TO0P">On this page</button></div><div class="theme-doc-markdown markdown"><header><h1>Using AutoRecovery</h1></header><p>When a bookie crashes, all ledgers on that bookie become under-replicated. In order to bring all ledgers in your BookKeeper cluster back to full replication, you&#x27;ll need to <em>recover</em> the data from any offline bookies. There are two ways to recover bookies&#x27; data:</p><ol><li>Using <a href="#manual-recovery">manual recovery</a></li><li>Automatically, using <a href="#autorecovery"><em>AutoRecovery</em></a></li></ol><h2 class="anchor anchorWithStickyNavbar_LWe7" id="manual-recovery">Manual recovery<a href="#manual-recovery" class="hash-link" aria-label="Direct link to Manual recovery" title="Direct link to Manual recovery">​</a></h2><p>You can manually recover failed bookies using the <a href="/docs/reference/cli"><code>bookkeeper</code></a> command-line tool. You need to specify:</p><ul><li>the <code>shell recover</code> option </li><li>the IP and port for the failed bookie</li></ul><p>Here&#x27;s an example:</p><div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">$ bin/bookkeeper shell recover </span><span class="token punctuation" style="color:#393A34">\</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token number" style="color:#36acaa">192.168</span><span class="token plain">.1.10:3181      </span><span class="token comment" style="color:#999988;font-style:italic"># IP and port for the failed bookie</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>If you wish, you can also specify which ledgers you&#x27;d like to recover. Here&#x27;s an example:</p><div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">$ bin/bookkeeper shell recover </span><span class="token punctuation" style="color:#393A34">\</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token number" style="color:#36acaa">192.168</span><span class="token plain">.1.10:3181 </span><span class="token punctuation" style="color:#393A34">\</span><span class="token plain">    </span><span class="token comment" style="color:#999988;font-style:italic"># IP and port for the failed bookie</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  --ledger ledgerID      </span><span class="token comment" style="color:#999988;font-style:italic"># ledgerID which you want to recover </span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><h3 class="anchor anchorWithStickyNavbar_LWe7" id="the-manual-recovery-process">The manual recovery process<a href="#the-manual-recovery-process" class="hash-link" aria-label="Direct link to The manual recovery process" title="Direct link to The manual recovery process">​</a></h3><p>When you initiate a manual recovery process, the following happens:</p><ol><li>The client (the process running ) reads the metadata of active ledgers from ZooKeeper.</li><li>The ledgers that contain fragments from the failed bookie in their ensemble are selected.</li><li>A recovery process is initiated for each ledger in this list and the rereplication process is run for each ledger.</li><li>Once all the ledgers are marked as fully replicated, bookie recovery is finished.</li></ol><h2 class="anchor anchorWithStickyNavbar_LWe7" id="autorecovery">AutoRecovery<a href="#autorecovery" class="hash-link" aria-label="Direct link to AutoRecovery" title="Direct link to AutoRecovery">​</a></h2><p>AutoRecovery is a process that:</p><ul><li>automatically detects when a bookie in your BookKeeper cluster has become unavailable and then</li><li>rereplicates all the ledgers that were stored on that bookie.</li></ul><p>AutoRecovery can be run in three ways:</p><ol><li>On dedicated nodes in your BookKeeper cluster</li><li>On the same machines on which your bookies are running</li><li>On a combination of autorecovery nodes and bookie nodes</li></ol><h2 class="anchor anchorWithStickyNavbar_LWe7" id="running-autorecovery">Running AutoRecovery<a href="#running-autorecovery" class="hash-link" aria-label="Direct link to Running AutoRecovery" title="Direct link to Running AutoRecovery">​</a></h2><p>You can start up AutoRecovery using the <a href="/docs/reference/cli#bookkeeper-autorecovery"><code>autorecovery</code></a> command of the <a href="/docs/reference/cli"><code>bookkeeper</code></a> CLI tool.</p><div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">$ bin/bookkeeper autorecovery</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><blockquote><p>The most important thing to ensure when starting up AutoRecovery is that the ZooKeeper connection string specified by the <a href="/docs/reference/config#zkServers"><code>zkServers</code></a> parameter points to the right ZooKeeper cluster.</p></blockquote><p>If you start up AutoRecovery on a machine that is already running a bookie, then the AutoRecovery process will run alongside the bookie on a separate thread.</p><p>You can also start up AutoRecovery on a fresh machine if you&#x27;d like to create a dedicated cluster of AutoRecovery nodes.</p><p>Note that if you <em>only</em> want the AutoRecovery process to run on your dedicated AutoRecovery nodes, you must set <code>autoRecoveryDaemonEnabled</code> to <code>false</code> in the <code>bookkeeper</code> configuration. Otherwise,
-bookkeeper nodes will also handle rereplication work.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="configuration">Configuration<a href="#configuration" class="hash-link" aria-label="Direct link to Configuration" title="Direct link to Configuration">​</a></h2><p>There are a handful of AutoRecovery-related configs in the <a href="/docs/reference/config"><code>bk_server.conf</code></a> configuration file. For a listing of those configs, see <a href="/docs/reference/config#autorecovery-settings">AutoRecovery settings</a>.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="disable-autorecovery">Disable AutoRecovery<a href="#disable-autorecovery" class="hash-link" aria-label="Direct link to Disable AutoRecovery" title="Direct link to Disable AutoRecovery">​</a></h2><p>You can disable AutoRecovery for the whole cluster at any time, for example during maintenance. Disabling AutoRecovery ensures that bookies&#x27; data isn&#x27;t unnecessarily rereplicated when the bookie is only taken down for a short period of time, for example when the bookie is being updated or the configuration if being changed.</p><p>You can disable AutoRecover for the whole cluster using the <a href="/docs/reference/cli#bookkeeper-shell-autorecovery"><code>bookkeeper</code></a> CLI tool:</p><div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">$ bin/bookkeeper shell autorecovery -disable</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>Once disabled, you can reenable AutoRecovery for the whole cluster using the <a href="/docs/reference/cli#bookkeeper-shell-autorecovery"><code>enable</code></a> shell command:</p><div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">$ bin/bookkeeper shell autorecovery -enable</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><h2 class="anchor anchorWithStickyNavbar_LWe7" id="autorecovery-architecture">AutoRecovery architecture<a href="#autorecovery-architecture" class="hash-link" aria-label="Direct link to AutoRecovery architecture" title="Direct link to AutoRecovery architecture">​</a></h2><p>AutoRecovery has two components:</p><ol><li>The <a href="#auditor"><strong>auditor</strong></a> (see the <a href="https://bookkeeper.apache.org//docs/latest/api/javadoc/org/apache/bookkeeper/replication/Auditor.html" target="_blank" rel="noopener noreferrer"><code>Auditor</code></a> class) is a singleton node that watches bookies to see if they fail and creates rereplication tasks for the ledgers on failed bookies.</li><li>The <a href="#replication-worker"><strong>replication worker</strong></a> (see the <a href="https://bookkeeper.apache.org//docs/latest/api/javadoc/org/apache/bookkeeper/replication/ReplicationWorker.html" target="_blank" rel="noopener noreferrer"><code>ReplicationWorker</code></a> class) runs on each bookie and executes rereplication tasks provided by the auditor.</li></ol><p>Both of these components run as threads in the <a href="https://bookkeeper.apache.org//docs/latest/api/javadoc/org/apache/bookkeeper/replication/AutoRecoveryMain" target="_blank" rel="noopener noreferrer"><code>AutoRecoveryMain</code></a> process, which runs on each bookie in the cluster. All recovery nodes participate in leader election---using ZooKeeper---to decide which node becomes the auditor. Nodes that fail to become the auditor watch the elected auditor and run an election process again if they see that the auditor node has failed.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="auditor">Auditor<a href="#auditor" class="hash-link" aria-label="Direct link to Auditor" title="Direct link to Auditor">​</a></h3><p>The auditor watches all bookies in the cluster that are registered with ZooKeeper. Bookies register with ZooKeeper at startup. If the bookie crashes or is killed, the bookie&#x27;s registration in ZooKeeper disappears and the auditor is notified of the change in the list of registered bookies.</p><p>When the auditor sees that a bookie has disappeared, it immediately scans the complete ledger list to find ledgers that have data stored on the failed bookie. Once it has a list of ledgers for that bookie, the auditor will publish a rereplication task for each ledger under the <code>/underreplicated/</code> <a href="https://zookeeper.apache.org/doc/current/zookeeperOver.html" target="_blank" rel="noopener noreferrer">znode</a> in ZooKeeper.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="replication-worker">Replication Worker<a href="#replication-worker" class="hash-link" aria-label="Direct link to Replication Worker" title="Direct link to Replication Worker">​</a></h3><p>Each replication worker watches for tasks being published by the auditor on the <code>/underreplicated/</code> znode in ZooKeeper. When a new task appears, the replication worker will try to get a lock on it. If it cannot acquire the lock, it will try the next entry. The locks are implemented using ZooKeeper ephemeral znodes.</p><p>The replication worker will scan through the rereplication task&#x27;s ledger for fragments of which its local bookie is not a member. When it finds fragments matching this criterion, it will replicate the entries of that fragment to the local bookie. If, after this process, the ledger is fully replicated, the ledgers entry under /underreplicated/ is deleted, and the lock is released. If there is a problem replicating, or there are still fragments in the ledger which are still underreplicated (due to the local bookie already being part of the ensemble for the fragment), then the lock is simply released.</p><p>If the replication worker finds a fragment which needs rereplication, but does not have a defined endpoint (i.e. the final fragment of a ledger currently being written to), it will wait for a grace period before attempting rereplication. If the fragment needing rereplication still does not have a defined endpoint, the ledger is fenced and rereplication then takes place.</p><p>This avoids the situation in which a client is writing to a ledger and one of the bookies goes down, but the client has not written an entry to that bookie before rereplication takes place. The client could continue writing to the old fragment, even though the ensemble for the fragment had changed. This could lead to data loss. Fencing prevents this scenario from happening. In the normal case, the client will try to write to the failed bookie within the grace period, and will have started a new fragment before rereplication starts.</p><p>You can configure this grace period using the <a href="/docs/reference/config#openLedgerRereplicationGracePeriod"><code>openLedgerRereplicationGracePeriod</code></a> parameter.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="the-rereplication-process">The rereplication process<a href="#the-rereplication-process" class="hash-link" aria-label="Direct link to The rereplication process" title="Direct link to The rereplication process">​</a></h3><p>The ledger rereplication process happens in these steps:</p><ol><li>The client goes through all ledger fragments in the ledger, selecting those that contain the failed bookie.</li><li>A recovery process is initiated for each ledger fragment in this list.<ol><li>The client selects a bookie to which all entries in the ledger fragment will be replicated; In the case of autorecovery, this will always be the local bookie.</li><li>The client reads entries that belong to the ledger fragment from other bookies in the ensemble and writes them to the selected bookie.</li><li>Once all entries have been replicated, the zookeeper metadata for the fragment is updated to reflect the new ensemble.</li><li>The fragment is marked as fully replicated in the recovery tool.</li></ol></li><li>Once all ledger fragments are marked as fully replicated, the ledger is marked as fully replicated.</li></ol></div></article><nav class="pagination-nav docusaurus-mt-lg" aria-label="Docs pages navigation"></nav></div></div><div class="col col--3"><div class="tableOfContents_bqdL thin-scrollbar theme-doc-toc-desktop"><ul class="table-of-contents table-of-contents__left-border"><li><a href="#manual-recovery" class="table-of-contents__link toc-highlight">Manual recovery</a><ul><li><a href="#the-manual-recovery-process" class="table-of-contents__link toc-highlight">The manual recovery process</a></li></ul></li><li><a href="#autorecovery" class="table-of-contents__link toc-highlight">AutoRecovery</a></li><li><a href="#running-autorecovery" class="table-of-contents__link toc-highlight">Running AutoRecovery</a></li><li><a href="#configuration" class="table-of-contents__link toc-highlight">Configuration</a></li><li><a href="#disable-autorecovery" class="table-of-contents__link toc-highlight">Disable AutoRecovery</a></li><li><a href="#autorecovery-architecture" class="table-of-contents__link toc-highlight">AutoRecovery architecture</a><ul><li><a href="#auditor" class="table-of-contents__link toc-highlight">Auditor</a></li><li><a href="#replication-worker" class="table-of-contents__link toc-highlight">Replication Worker</a></li><li><a href="#the-rereplication-process" class="table-of-contents__link toc-highlight">The rereplication process</a></li></ul></li></ul></div></div></div></div></main></div></div><footer class="footer footer--dark"><div class="container container-fluid"><div class="row footer__links"><div class="col footer__col"><div class="footer__title">Documentation</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/docs/overview">Overview</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/getting-started/installation">Getting started</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/deployment/manual">Deployment</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/admin/bookies">Administration</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/api/overview">API</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/security/overview">Security</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/development/protocol">Development</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/reference/config">Reference</a></li></ul></div><div class="col footer__col"><div class="footer__title">Community</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/community/mailing-lists">Mailing lists</a></li><li class="footer__item"><a class="footer__link-item" href="/community/slack">Slack</a></li><li class="footer__item"><a href="https://github.com/apache/bookkeeper" target="_blank" rel="noopener noreferrer" class="footer__link-item">Github<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a href="https://twitter.com/asfbookkeeper" target="_blank" rel="noopener noreferrer" class="footer__link-item">Twitter<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div><div class="col footer__col"><div class="footer__title">Project</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/project/who">Who are we?</a></li><li class="footer__item"><a class="footer__link-item" href="/project/bylaws">Bylaws</a></li><li class="footer__item"><a href="https://apache.org/licenses" target="_blank" rel="noopener noreferrer" class="footer__link-item">License<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a class="footer__link-item" href="/project/privacy">Privacy policy</a></li><li class="footer__item"><a href="https://www.apache.org/foundation/sponsorship.html" target="_blank" rel="noopener noreferrer" class="footer__link-item">Sponsorship<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a href="https://www.apache.org/foundation/thanks.html" target="_blank" rel="noopener noreferrer" class="footer__link-item">Thanks<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div></div><div class="footer__bottom text--center"><div class="footer__copyright"><footer class="footer">
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navbar__brand" href="/"><div class="navbar__logo"><img src="/img/bk-logo.svg" alt="Apache Bookkeeper" class="themedImage_ToTc themedImage--light_HNdA"><img src="/img/bk-logo.svg" alt="Apache Bookkeeper" class="themedImage_ToTc themedImage--dark_i4oU"></div><b class="navbar__title text--truncate">Apache BookKeeper</b></a><a aria-current="page" class="navbar__item navbar__link navbar__link--active" href="/docs/overview/">Documentation</a><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Community</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/community/mailing-lists">Mailing lists</a></li><li><a class="dropdown__link" href="/community/slack">Slack</a></li><li><a href="https://github.com/apache/bookkeeper/issues" target="_blank" rel="noopener noreferrer" class="dropdown__link">Github issues<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a class="dropdown__link" href="/community/releases">Release management</a></li><li><a class="dropdown__link" href="/community/meeting">Community meetings</a></li><li><a class="dropdown__link" href="/community/contributing">Contribution guide</a></li><li><a class="dropdown__link" href="/community/coding-guide">Coding guide</a></li><li><a class="dropdown__link" href="/community/testing">Testing guide</a></li><li><a class="dropdown__link" href="/community/issue-report">Issue report guide</a></li><li><a class="dropdown__link" href="/community/release-guide">Release guide</a></li><li><a class="dropdown__link" href="/community/presentations">Presentations</a></li><li><a class="dropdown__link" href="/community/bookkeeper-proposals">BookKeeper proposals (BP)</a></li></ul></div><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Project</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/project/who">Who are we?</a></li><li><a class="dropdown__link" href="/project/bylaws">Bylaws</a></li><li><a href="https://apache.org/licenses" target="_blank" rel="noopener noreferrer" class="dropdown__link">License<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a class="dropdown__link" href="/project/privacy">Privacy policy</a></li><li><a href="https://www.apache.org/foundation/sponsorship.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Sponsorship<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a href="https://www.apache.org/foundation/thanks.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Thanks<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div></div><div class="navbar__items navbar__items--right"><div class="navbar__item dropdown dropdown--hoverable dropdown--right"><a class="navbar__link" aria-haspopup="true" aria-expanded="false" role="button" href="/docs/overview/">4.17.0</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/docs/next/admin/autorecovery">Next</a></li><li><a aria-current="page" class="dropdown__link dropdown__link--active" href="/docs/admin/autorecovery">4.17.0</a></li><li><a class="dropdown__link" href="/docs/4.16.5/admin/autorecovery">4.16.5</a></li><li><a class="dropdown__link" href="/docs/4.15.5/admin/autorecovery">4.15.5</a></li><li><a class="dropdown__link" href="/docs/4.14.8/admin/autorecovery">4.14.8</a></li><li><a class="dropdown__link" href="/docs/4.13.0/admin/autorecovery">4.13.0</a></li><li><a class="dropdown__link" href="/docs/4.12.1/admin/autorecovery">4.12.1</a></li><li><a class="dropdown__link" href="/docs/4.11.1/admin/autorecovery">4.11.1</a></li><li><a class="dropdown__link" href="/docs/4.10.0/admin/autorecovery">4.10.0</a></li><li><a class="dropdown__link" href="/docs/4.9.2/admin/autorecovery">4.9.2</a></li><li><a class="dropdown__link" href="/docs/4.8.2/admin/autorecovery">4.8.2</a></li><li><a class="dropdown__link" href="/docs/4.7.3/admin/autorecovery">4.7.3</a></li><li><a class="dropdown__link" href="/docs/4.6.2/admin/autorecovery">4.6.2</a></li><li><a class="dropdown__link" href="/docs/4.5.1/admin/autorecovery">4.5.1</a></li></ul></div><a class="navbar__item navbar__link" href="/releases">Download</a><div class="toggle_vylO colorModeToggle_DEke"><button class="clean-btn toggleButton_gllP toggleButtonDisabled_aARS" type="button" disabled="" title="Switch between dark and light mode (currently light mode)" aria-label="Switch between dark and light mode (currently light mode)" aria-live="polite"><svg viewBox="0 0 24 24" width="24" height="24" class="lightToggleIcon_pyhR"><path fill="currentColor" d="M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"></path></svg><svg viewBox="0 0 24 24" width="24" height="24" class="darkToggleIcon_wfgR"><path fill="currentColor" d="M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"></path></svg></button></div><div class="searchBox_ZlJk"></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div></nav><div id="docusaurus_skipToContent_fallback" class="main-wrapper mainWrapper_z2l0 docsWrapper_BCFX"><button aria-label="Scroll back to top" class="clean-btn theme-back-to-top-button backToTopButton_sjWU" type="button"></button><div class="docPage__5DB"><aside class="theme-doc-sidebar-container docSidebarContainer_b6E3"><div class="sidebarViewport_Xe31"><div class="sidebar_njMd"><nav aria-label="Docs sidebar" class="menu thin-scrollbar menu_SIkG"><ul class="theme-doc-sidebar-menu menu__list"><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-1 menu__list-item"><a class="menu__link" href="/docs/overview/">Overview</a></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/getting-started/installation">Getting started</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/deployment/manual">Deployment</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret menu__link--active" aria-expanded="true" href="/docs/admin/bookies">Administration</a></div><ul style="display:block;overflow:visible;height:auto" class="menu__list"><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/admin/bookies">BookKeeper administration</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link menu__link--active" aria-current="page" tabindex="0" href="/docs/admin/autorecovery">AutoRecovery</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/admin/metrics">Metrics collection</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/admin/upgrade">Upgrade</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/admin/http">Admin REST API</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/admin/decomission">Decommissioning Bookies</a></li></ul></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/api/overview">API</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/security/overview">Security</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/development/protocol">Development</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/reference/config">Reference</a></div></li></ul></nav></div></div></aside><main class="docMainContainer_gTbr"><div class="container padding-top--md padding-bottom--lg"><div class="row"><div class="col docItemCol_VOVn"><div class="docItemContainer_Djhp"><article><span class="theme-doc-version-badge badge badge--secondary">Version: 4.17.0</span><div class="tocCollapsible_ETCw theme-doc-toc-mobile tocMobile_ITEo"><button type="button" class="clean-btn tocCollapsibleButton_TO0P">On this page</button></div><div class="theme-doc-markdown markdown"><header><h1>Using AutoRecovery</h1></header><p>When a bookie crashes, all ledgers on that bookie become under-replicated. In order to bring all ledgers in your BookKeeper cluster back to full replication, you&#x27;ll need to <em>recover</em> the data from any offline bookies. There are two ways to recover bookies&#x27; data:</p><ol><li>Using <a href="#manual-recovery">manual recovery</a></li><li>Automatically, using <a href="#autorecovery"><em>AutoRecovery</em></a></li></ol><h2 class="anchor anchorWithStickyNavbar_LWe7" id="manual-recovery">Manual recovery<a href="#manual-recovery" class="hash-link" aria-label="Direct link to Manual recovery" title="Direct link to Manual recovery">​</a></h2><p>You can manually recover failed bookies using the <a href="/docs/reference/cli"><code>bookkeeper</code></a> command-line tool. You need to specify:</p><ul><li>the <code>shell recover</code> option </li><li>the IP and port for the failed bookie</li></ul><p>Here&#x27;s an example:</p><div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">$ bin/bookkeeper shell recover </span><span class="token punctuation" style="color:#393A34">\</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token number" style="color:#36acaa">192.168</span><span class="token plain">.1.10:3181      </span><span class="token comment" style="color:#999988;font-style:italic"># IP and port for the failed bookie</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>If you wish, you can also specify which ledgers you&#x27;d like to recover. Here&#x27;s an example:</p><div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">$ bin/bookkeeper shell recover </span><span class="token punctuation" style="color:#393A34">\</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token number" style="color:#36acaa">192.168</span><span class="token plain">.1.10:3181 </span><span class="token punctuation" style="color:#393A34">\</span><span class="token plain">    </span><span class="token comment" style="color:#999988;font-style:italic"># IP and port for the failed bookie</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  --ledger ledgerID      </span><span class="token comment" style="color:#999988;font-style:italic"># ledgerID which you want to recover </span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><h3 class="anchor anchorWithStickyNavbar_LWe7" id="the-manual-recovery-process">The manual recovery process<a href="#the-manual-recovery-process" class="hash-link" aria-label="Direct link to The manual recovery process" title="Direct link to The manual recovery process">​</a></h3><p>When you initiate a manual recovery process, the following happens:</p><ol><li>The client (the process running ) reads the metadata of active ledgers from ZooKeeper.</li><li>The ledgers that contain fragments from the failed bookie in their ensemble are selected.</li><li>A recovery process is initiated for each ledger in this list and the rereplication process is run for each ledger.</li><li>Once all the ledgers are marked as fully replicated, bookie recovery is finished.</li></ol><h2 class="anchor anchorWithStickyNavbar_LWe7" id="autorecovery">AutoRecovery<a href="#autorecovery" class="hash-link" aria-label="Direct link to AutoRecovery" title="Direct link to AutoRecovery">​</a></h2><p>AutoRecovery is a process that:</p><ul><li>automatically detects when a bookie in your BookKeeper cluster has become unavailable and then</li><li>rereplicates all the ledgers that were stored on that bookie.</li></ul><p>AutoRecovery can be run in three ways:</p><ol><li>On dedicated nodes in your BookKeeper cluster</li><li>On the same machines on which your bookies are running</li><li>On a combination of autorecovery nodes and bookie nodes</li></ol><h2 class="anchor anchorWithStickyNavbar_LWe7" id="running-autorecovery">Running AutoRecovery<a href="#running-autorecovery" class="hash-link" aria-label="Direct link to Running AutoRecovery" title="Direct link to Running AutoRecovery">​</a></h2><p>You can start up AutoRecovery using the <a href="/docs/reference/cli#bookkeeper-autorecovery"><code>autorecovery</code></a> command of the <a href="/docs/reference/cli"><code>bookkeeper</code></a> CLI tool.</p><div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">$ bin/bookkeeper autorecovery</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><blockquote><p>The most important thing to ensure when starting up AutoRecovery is that the ZooKeeper connection string specified by the <a href="/docs/reference/config#zkServers"><code>zkServers</code></a> parameter points to the right ZooKeeper cluster.</p></blockquote><p>If you start up AutoRecovery on a machine that is already running a bookie, then the AutoRecovery process will run alongside the bookie on a separate thread.</p><p>You can also start up AutoRecovery on a fresh machine if you&#x27;d like to create a dedicated cluster of AutoRecovery nodes.</p><p>Note that if you <em>only</em> want the AutoRecovery process to run on your dedicated AutoRecovery nodes, you must set <code>autoRecoveryDaemonEnabled</code> to <code>false</code> in the <code>bookkeeper</code> configuration. Otherwise,
+bookkeeper nodes will also handle rereplication work.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="configuration">Configuration<a href="#configuration" class="hash-link" aria-label="Direct link to Configuration" title="Direct link to Configuration">​</a></h2><p>There are a handful of AutoRecovery-related configs in the <a href="/docs/reference/config"><code>bk_server.conf</code></a> configuration file. For a listing of those configs, see <a href="/docs/reference/config#autorecovery-settings">AutoRecovery settings</a>.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="disable-autorecovery">Disable AutoRecovery<a href="#disable-autorecovery" class="hash-link" aria-label="Direct link to Disable AutoRecovery" title="Direct link to Disable AutoRecovery">​</a></h2><p>You can disable AutoRecovery for the whole cluster at any time, for example during maintenance. Disabling AutoRecovery ensures that bookies&#x27; data isn&#x27;t unnecessarily rereplicated when the bookie is only taken down for a short period of time, for example when the bookie is being updated or the configuration if being changed.</p><p>You can disable AutoRecover for the whole cluster using the <a href="/docs/reference/cli#bookkeeper-shell-autorecovery"><code>bookkeeper</code></a> CLI tool:</p><div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">$ bin/bookkeeper shell autorecovery -disable</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>Once disabled, you can reenable AutoRecovery for the whole cluster using the <a href="/docs/reference/cli#bookkeeper-shell-autorecovery"><code>enable</code></a> shell command:</p><div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">$ bin/bookkeeper shell autorecovery -enable</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><h2 class="anchor anchorWithStickyNavbar_LWe7" id="autorecovery-architecture">AutoRecovery architecture<a href="#autorecovery-architecture" class="hash-link" aria-label="Direct link to AutoRecovery architecture" title="Direct link to AutoRecovery architecture">​</a></h2><p>AutoRecovery has two components:</p><ol><li>The <a href="#auditor"><strong>auditor</strong></a> (see the <a href="https://bookkeeper.apache.org//docs/latest/api/javadoc/org/apache/bookkeeper/replication/Auditor.html" target="_blank" rel="noopener noreferrer"><code>Auditor</code></a> class) is a singleton node that watches bookies to see if they fail and creates rereplication tasks for the ledgers on failed bookies.</li><li>The <a href="#replication-worker"><strong>replication worker</strong></a> (see the <a href="https://bookkeeper.apache.org//docs/latest/api/javadoc/org/apache/bookkeeper/replication/ReplicationWorker.html" target="_blank" rel="noopener noreferrer"><code>ReplicationWorker</code></a> class) runs on each bookie and executes rereplication tasks provided by the auditor.</li></ol><p>Both of these components run as threads in the <a href="https://bookkeeper.apache.org//docs/latest/api/javadoc/org/apache/bookkeeper/replication/AutoRecoveryMain" target="_blank" rel="noopener noreferrer"><code>AutoRecoveryMain</code></a> process, which runs on each bookie in the cluster. All recovery nodes participate in leader election---using ZooKeeper---to decide which node becomes the auditor. Nodes that fail to become the auditor watch the elected auditor and run an election process again if they see that the auditor node has failed.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="auditor">Auditor<a href="#auditor" class="hash-link" aria-label="Direct link to Auditor" title="Direct link to Auditor">​</a></h3><p>The auditor watches all bookies in the cluster that are registered with ZooKeeper. Bookies register with ZooKeeper at startup. If the bookie crashes or is killed, the bookie&#x27;s registration in ZooKeeper disappears and the auditor is notified of the change in the list of registered bookies.</p><p>When the auditor sees that a bookie has disappeared, it immediately scans the complete ledger list to find ledgers that have data stored on the failed bookie. Once it has a list of ledgers for that bookie, the auditor will publish a rereplication task for each ledger under the <code>/underreplicated/</code> <a href="https://zookeeper.apache.org/doc/current/zookeeperOver.html" target="_blank" rel="noopener noreferrer">znode</a> in ZooKeeper.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="replication-worker">Replication Worker<a href="#replication-worker" class="hash-link" aria-label="Direct link to Replication Worker" title="Direct link to Replication Worker">​</a></h3><p>Each replication worker watches for tasks being published by the auditor on the <code>/underreplicated/</code> znode in ZooKeeper. When a new task appears, the replication worker will try to get a lock on it. If it cannot acquire the lock, it will try the next entry. The locks are implemented using ZooKeeper ephemeral znodes.</p><p>The replication worker will scan through the rereplication task&#x27;s ledger for fragments of which its local bookie is not a member. When it finds fragments matching this criterion, it will replicate the entries of that fragment to the local bookie. If, after this process, the ledger is fully replicated, the ledgers entry under /underreplicated/ is deleted, and the lock is released. If there is a problem replicating, or there are still fragments in the ledger which are still underreplicated (due to the local bookie already being part of the ensemble for the fragment), then the lock is simply released.</p><p>If the replication worker finds a fragment which needs rereplication, but does not have a defined endpoint (i.e. the final fragment of a ledger currently being written to), it will wait for a grace period before attempting rereplication. If the fragment needing rereplication still does not have a defined endpoint, the ledger is fenced and rereplication then takes place.</p><p>This avoids the situation in which a client is writing to a ledger and one of the bookies goes down, but the client has not written an entry to that bookie before rereplication takes place. The client could continue writing to the old fragment, even though the ensemble for the fragment had changed. This could lead to data loss. Fencing prevents this scenario from happening. In the normal case, the client will try to write to the failed bookie within the grace period, and will have started a new fragment before rereplication starts.</p><p>You can configure this grace period using the <a href="/docs/reference/config#openLedgerRereplicationGracePeriod"><code>openLedgerRereplicationGracePeriod</code></a> parameter.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="the-rereplication-process">The rereplication process<a href="#the-rereplication-process" class="hash-link" aria-label="Direct link to The rereplication process" title="Direct link to The rereplication process">​</a></h3><p>The ledger rereplication process happens in these steps:</p><ol><li>The client goes through all ledger fragments in the ledger, selecting those that contain the failed bookie.</li><li>A recovery process is initiated for each ledger fragment in this list.<ol><li>The client selects a bookie to which all entries in the ledger fragment will be replicated; In the case of autorecovery, this will always be the local bookie.</li><li>The client reads entries that belong to the ledger fragment from other bookies in the ensemble and writes them to the selected bookie.</li><li>Once all entries have been replicated, the zookeeper metadata for the fragment is updated to reflect the new ensemble.</li><li>The fragment is marked as fully replicated in the recovery tool.</li></ol></li><li>Once all ledger fragments are marked as fully replicated, the ledger is marked as fully replicated.</li></ol></div></article><nav class="pagination-nav docusaurus-mt-lg" aria-label="Docs pages navigation"><a class="pagination-nav__link pagination-nav__link--prev" href="/docs/admin/bookies"><div class="pagination-nav__sublabel">Previous</div><div class="pagination-nav__label">BookKeeper administration</div></a><a class="pagination-nav__link pagination-nav__link--next" href="/docs/admin/metrics"><div class="pagination-nav__sublabel">Next</div><div class="pagination-nav__label">Metric collection</div></a></nav></div></div><div class="col col--3"><div class="tableOfContents_bqdL thin-scrollbar theme-doc-toc-desktop"><ul class="table-of-contents table-of-contents__left-border"><li><a href="#manual-recovery" class="table-of-contents__link toc-highlight">Manual recovery</a><ul><li><a href="#the-manual-recovery-process" class="table-of-contents__link toc-highlight">The manual recovery process</a></li></ul></li><li><a href="#autorecovery" class="table-of-contents__link toc-highlight">AutoRecovery</a></li><li><a href="#running-autorecovery" class="table-of-contents__link toc-highlight">Running AutoRecovery</a></li><li><a href="#configuration" class="table-of-contents__link toc-highlight">Configuration</a></li><li><a href="#disable-autorecovery" class="table-of-contents__link toc-highlight">Disable AutoRecovery</a></li><li><a href="#autorecovery-architecture" class="table-of-contents__link toc-highlight">AutoRecovery architecture</a><ul><li><a href="#auditor" class="table-of-contents__link toc-highlight">Auditor</a></li><li><a href="#replication-worker" class="table-of-contents__link toc-highlight">Replication Worker</a></li><li><a href="#the-rereplication-process" class="table-of-contents__link toc-highlight">The rereplication process</a></li></ul></li></ul></div></div></div></div></main></div></div><footer class="footer footer--dark"><div class="container container-fluid"><div class="row footer__links"><div class="col footer__col"><div class="footer__title">Documentation</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/docs/overview">Overview</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/getting-started/installation">Getting started</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/deployment/manual">Deployment</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/admin/bookies">Administration</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/api/overview">API</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/security/overview">Security</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/development/protocol">Development</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/reference/config">Reference</a></li></ul></div><div class="col footer__col"><div class="footer__title">Community</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/community/mailing-lists">Mailing lists</a></li><li class="footer__item"><a class="footer__link-item" href="/community/slack">Slack</a></li><li class="footer__item"><a href="https://github.com/apache/bookkeeper" target="_blank" rel="noopener noreferrer" class="footer__link-item">Github<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a href="https://twitter.com/asfbookkeeper" target="_blank" rel="noopener noreferrer" class="footer__link-item">Twitter<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div><div class="col footer__col"><div class="footer__title">Project</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/project/who">Who are we?</a></li><li class="footer__item"><a class="footer__link-item" href="/project/bylaws">Bylaws</a></li><li class="footer__item"><a href="https://apache.org/licenses" target="_blank" rel="noopener noreferrer" class="footer__link-item">License<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a class="footer__link-item" href="/project/privacy">Privacy policy</a></li><li class="footer__item"><a href="https://www.apache.org/foundation/sponsorship.html" target="_blank" rel="noopener noreferrer" class="footer__link-item">Sponsorship<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a href="https://www.apache.org/foundation/thanks.html" target="_blank" rel="noopener noreferrer" class="footer__link-item">Thanks<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div></div><div class="footer__bottom text--center"><div class="footer__copyright"><footer class="footer">
         <div class="container">
           <div class="content has-text-centered">
             <p>
@@ -23,7 +23,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/admin/bookies/index.html b/content/docs/admin/bookies/index.html
index cf8ef59..f1b9391 100644
--- a/content/docs/admin/bookies/index.html
+++ b/content/docs/admin/bookies/index.html
@@ -4,12 +4,12 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">BookKeeper administration | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/admin/bookies"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.17.0"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.17.0"><meta data-rh="true" name="docsearch:version" content="4.17.0"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.17.0"><meta data-rh="true" property="og:title" content="BookKeeper administration | Apache BookKeeper"><meta data-rh="true" name="description" content="This document is a guide to deploying, administering, and maintaining BookKeeper. It also discusses best practices and common problems."><meta data-rh="true" property="og:description" content="This document is a guide to deploying, administering, and maintaining BookKeeper. It also discusses best practices and common problems."><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/admin/bookies"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/admin/bookies" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/admin/bookies" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
-<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navbar__brand" href="/"><div class="navbar__logo"><img src="/img/bk-logo.svg" alt="Apache Bookkeeper" class="themedImage_ToTc themedImage--light_HNdA"><img src="/img/bk-logo.svg" alt="Apache Bookkeeper" class="themedImage_ToTc themedImage--dark_i4oU"></div><b class="navbar__title text--truncate">Apache BookKeeper</b></a><a class="navbar__item navbar__link" href="/docs/overview/">Documentation</a><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Community</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/community/mailing-lists">Mailing lists</a></li><li><a class="dropdown__link" href="/community/slack">Slack</a></li><li><a href="https://github.com/apache/bookkeeper/issues" target="_blank" rel="noopener noreferrer" class="dropdown__link">Github issues<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a class="dropdown__link" href="/community/releases">Release management</a></li><li><a class="dropdown__link" href="/community/meeting">Community meetings</a></li><li><a class="dropdown__link" href="/community/contributing">Contribution guide</a></li><li><a class="dropdown__link" href="/community/coding-guide">Coding guide</a></li><li><a class="dropdown__link" href="/community/testing">Testing guide</a></li><li><a class="dropdown__link" href="/community/issue-report">Issue report guide</a></li><li><a class="dropdown__link" href="/community/release-guide">Release guide</a></li><li><a class="dropdown__link" href="/community/presentations">Presentations</a></li><li><a class="dropdown__link" href="/community/bookkeeper-proposals">BookKeeper proposals (BP)</a></li></ul></div><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Project</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/project/who">Who are we?</a></li><li><a class="dropdown__link" href="/project/bylaws">Bylaws</a></li><li><a href="https://apache.org/licenses" target="_blank" rel="noopener noreferrer" class="dropdown__link">License<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a class="dropdown__link" href="/project/privacy">Privacy policy</a></li><li><a href="https://www.apache.org/foundation/sponsorship.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Sponsorship<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a href="https://www.apache.org/foundation/thanks.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Thanks<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div></div><div class="navbar__items navbar__items--right"><div class="navbar__item dropdown dropdown--hoverable dropdown--right"><a class="navbar__link" aria-haspopup="true" aria-expanded="false" role="button" href="/docs/admin/autorecovery">4.17.0</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/docs/next/admin/bookies">Next</a></li><li><a aria-current="page" class="dropdown__link dropdown__link--active" href="/docs/admin/bookies">4.17.0</a></li><li><a class="dropdown__link" href="/docs/4.16.5/admin/bookies">4.16.5</a></li><li><a class="dropdown__link" href="/docs/4.15.5/admin/bookies">4.15.5</a></li><li><a class="dropdown__link" href="/docs/4.14.8/admin/bookies">4.14.8</a></li><li><a class="dropdown__link" href="/docs/4.13.0/admin/bookies">4.13.0</a></li><li><a class="dropdown__link" href="/docs/4.12.1/admin/bookies">4.12.1</a></li><li><a class="dropdown__link" href="/docs/4.11.1/admin/bookies">4.11.1</a></li><li><a class="dropdown__link" href="/docs/4.10.0/admin/bookies">4.10.0</a></li><li><a class="dropdown__link" href="/docs/4.9.2/admin/bookies">4.9.2</a></li><li><a class="dropdown__link" href="/docs/4.8.2/admin/bookies">4.8.2</a></li><li><a class="dropdown__link" href="/docs/4.7.3/admin/bookies">4.7.3</a></li><li><a class="dropdown__link" href="/docs/4.6.2/admin/bookies">4.6.2</a></li><li><a class="dropdown__link" href="/docs/4.5.1/admin/bookies">4.5.1</a></li></ul></div><a class="navbar__item navbar__link" href="/releases">Download</a><div class="toggle_vylO colorModeToggle_DEke"><button class="clean-btn toggleButton_gllP toggleButtonDisabled_aARS" type="button" disabled="" title="Switch between dark and light mode (currently light mode)" aria-label="Switch between dark and light mode (currently light mode)" aria-live="polite"><svg viewBox="0 0 24 24" width="24" height="24" class="lightToggleIcon_pyhR"><path fill="currentColor" d="M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"></path></svg><svg viewBox="0 0 24 24" width="24" height="24" class="darkToggleIcon_wfgR"><path fill="currentColor" d="M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"></path></svg></button></div><div class="searchBox_ZlJk"></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div></nav><div id="docusaurus_skipToContent_fallback" class="main-wrapper mainWrapper_z2l0 docsWrapper_BCFX"><button aria-label="Scroll back to top" class="clean-btn theme-back-to-top-button backToTopButton_sjWU" type="button"></button><div class="docPage__5DB"><main class="docMainContainer_gTbr docMainContainerEnhanced_Uz_u"><div class="container padding-top--md padding-bottom--lg"><div class="row"><div class="col docItemCol_VOVn"><div class="docItemContainer_Djhp"><article><span class="theme-doc-version-badge badge badge--secondary">Version: 4.17.0</span><div class="tocCollapsible_ETCw theme-doc-toc-mobile tocMobile_ITEo"><button type="button" class="clean-btn tocCollapsibleButton_TO0P">On this page</button></div><div class="theme-doc-markdown markdown"><header><h1>BookKeeper administration</h1></header><p>This document is a guide to deploying, administering, and maintaining BookKeeper. It also discusses best practices and common problems.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="requirements">Requirements<a href="#requirements" class="hash-link" aria-label="Direct link to Requirements" title="Direct link to Requirements">​</a></h2><p>A typical BookKeeper installation consists of an ensemble of bookies and a ZooKeeper quorum. The exact number of bookies depends on the quorum mode that you choose, desired throughput, and the number of clients using the installation simultaneously.</p><p>The minimum number of bookies depends on the type of installation:</p><ul><li>For <em>self-verifying</em> entries you should run at least three bookies. In this mode, clients store a message authentication code along with each entry.</li><li>For <em>generic</em> entries you should run at least four</li></ul><p>There is no upper limit on the number of bookies that you can run in a single ensemble.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="performance">Performance<a href="#performance" class="hash-link" aria-label="Direct link to Performance" title="Direct link to Performance">​</a></h3><p>To achieve optimal performance, BookKeeper requires each server to have at least two disks. It&#x27;s possible to run a bookie with a single disk but performance will be significantly degraded.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="zookeeper">ZooKeeper<a href="#zookeeper" class="hash-link" aria-label="Direct link to ZooKeeper" title="Direct link to ZooKeeper">​</a></h3><p>There is no constraint on the number of ZooKeeper nodes you can run with BookKeeper. A single machine running ZooKeeper in <a href="https://zookeeper.apache.org/doc/current/zookeeperStarted.html#sc_InstallingSingleMode" target="_blank" rel="noopener noreferrer">standalone mode</a> is sufficient for BookKeeper, although for the sake of higher resilience we recommend running ZooKeeper in <a href="https://zookeeper.apache.org/doc/current/zookeeperStarted.html#sc_RunningReplicatedZooKeeper" target="_blank" rel="noopener noreferrer">quorum mode</a> with multiple servers.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="starting-and-stopping-bookies">Starting and stopping bookies<a href="#starting-and-stopping-bookies" class="hash-link" aria-label="Direct link to Starting and stopping bookies" title="Direct link to Starting and stopping bookies">​</a></h2><p>You can run bookies either in the foreground or in the background, using <a href="https://en.wikipedia.org/wiki/Nohup" target="_blank" rel="noopener noreferrer">nohup</a>. You can also run <a href="#local-bookie">local bookies</a> for development purposes.</p><p>To start a bookie in the foreground, use the <a href="/docs/reference/cli#bookkeeper-bookie"><code>bookie</code></a> command of the <a href="/docs/reference/cli#bookkeeper"><code>bookkeeper</code></a> CLI tool:</p><div class="language-shell codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-shell codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">$ bin/bookkeeper bookie</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>To start a bookie in the background, use the <a href="/docs/reference/cli#bookkeeper-daemon.sh"><code>bookkeeper-daemon.sh</code></a> script and run <code>start bookie</code>:</p><div class="language-shell codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-shell codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">$ bin/bookkeeper-daemon.sh start bookie</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><h3 class="anchor anchorWithStickyNavbar_LWe7" id="local-bookies">Local bookies<a href="#local-bookies" class="hash-link" aria-label="Direct link to Local bookies" title="Direct link to Local bookies">​</a></h3><p>The instructions above showed you how to run bookies intended for production use. If you&#x27;d like to experiment with ensembles of bookies locally, you can use the <a href="/docs/reference/cli#bookkeeper-localbookie"><code>localbookie</code></a> command of the <code>bookkeeper</code> CLI tool and specify the number of bookies you&#x27;d like to run.</p><p>This would spin up a local ensemble of 6 bookies:</p><div class="language-shell codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-shell codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">$ bin/bookkeeper localbookie </span><span class="token number" style="color:#36acaa">6</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><blockquote><p>When you run a local bookie ensemble, all bookies run in a single JVM process.</p></blockquote><h2 class="anchor anchorWithStickyNavbar_LWe7" id="configuring-bookies">Configuring bookies<a href="#configuring-bookies" class="hash-link" aria-label="Direct link to Configuring bookies" title="Direct link to Configuring bookies">​</a></h2><p>There&#x27;s a wide variety of parameters that you can set in the bookie configuration file in <code>bookkeeper-server/conf/bk_server.conf</code> of your <a href="/docs/reference/config">BookKeeper installation</a>. A full listing can be found in <a href="/docs/reference/config">Bookie configuration</a>.</p><p>Some of the more important parameters to be aware of:</p><table><thead><tr><th align="left">Parameter</th><th align="left">Description</th><th align="left">Default</th></tr></thead><tbody><tr><td align="left"><code>bookiePort</code></td><td align="left">The TCP port that the bookie listens on</td><td align="left"><code>3181</code></td></tr><tr><td align="left"><code>zkServers</code></td><td align="left">A comma-separated list of ZooKeeper servers in <code>hostname:port</code> format</td><td align="left"><code>localhost:2181</code></td></tr><tr><td align="left"><code>journalDirectory</code></td><td align="left">The directory where the <a href="/docs/getting-started/concepts#log-device">log device</a> stores the bookie&#x27;s write-ahead log (WAL)</td><td align="left"><code>/tmp/bk-txn</code></td></tr><tr><td align="left"><code>ledgerDirectories</code></td><td align="left">The directories where the <a href="/docs/getting-started/concepts#ledger-device">ledger device</a> stores the bookie&#x27;s ledger entries (as a comma-separated list)</td><td align="left"><code>/tmp/bk-data</code></td></tr></tbody></table><blockquote><p>Ideally, the directories specified <code>journalDirectory</code> and <code>ledgerDirectories</code> should be on difference devices.</p></blockquote><h2 class="anchor anchorWithStickyNavbar_LWe7" id="logging">Logging<a href="#logging" class="hash-link" aria-label="Direct link to Logging" title="Direct link to Logging">​</a></h2><p>BookKeeper uses <a href="http://www.slf4j.org/" target="_blank" rel="noopener noreferrer">slf4j</a> for logging, with <a href="https://logging.apache.org/log4j/2.x/" target="_blank" rel="noopener noreferrer">log4j</a> bindings enabled by default.</p><p>To enable logging for a bookie, create a <code>log4j.properties</code> file and point the <code>BOOKIE_LOG_CONF</code> environment variable to the configuration file. Here&#x27;s an example:</p><div class="language-shell codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-shell codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">$ </span><span class="token builtin class-name">export</span><span class="token plain"> </span><span class="token assign-left variable" style="color:#36acaa">BOOKIE_LOG_CONF</span><span class="token operator" style="color:#393A34">=</span><span class="token plain">/some/path/log4j.properties</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">$ bin/bookkeeper bookie</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><h2 class="anchor anchorWithStickyNavbar_LWe7" id="upgrading">Upgrading<a href="#upgrading" class="hash-link" aria-label="Direct link to Upgrading" title="Direct link to Upgrading">​</a></h2><p>From time to time you may need to make changes to the filesystem layout of bookies---changes that are incompatible with previous versions of BookKeeper and require that directories used with previous versions are upgraded. If a filesystem upgrade is required when updating BookKeeper, the bookie will fail to start and return an error like this:</p><div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">2017-05-25 10:41:50,494 - ERROR - [main:Bookie@246] - Directory layout version is less than 3, upgrade needed</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>BookKeeper provides a utility for upgrading the filesystem. You can perform an upgrade using the <a href="/docs/reference/cli#bookkeeper-upgrade"><code>upgrade</code></a> command of the <code>bookkeeper</code> CLI tool. When running <code>bookkeeper upgrade</code> you need to specify one of three flags:</p><table><thead><tr><th align="left">Flag</th><th align="left">Action</th></tr></thead><tbody><tr><td align="left"><code>--upgrade</code></td><td align="left">Performs an upgrade</td></tr><tr><td align="left"><code>--rollback</code></td><td align="left">Performs a rollback to the initial filesystem version</td></tr><tr><td align="left"><code>--finalize</code></td><td align="left">Marks the upgrade as complete</td></tr></tbody></table><h3 class="anchor anchorWithStickyNavbar_LWe7" id="upgrade-pattern">Upgrade pattern<a href="#upgrade-pattern" class="hash-link" aria-label="Direct link to Upgrade pattern" title="Direct link to Upgrade pattern">​</a></h3><p>A standard upgrade pattern is to run an upgrade...</p><div class="language-shell codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-shell codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">$ bin/bookkeeper upgrade --upgrade</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>...then check that everything is working normally, then kill the bookie. If everything is okay, finalize the upgrade...</p><div class="language-shell codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-shell codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">$ bin/bookkeeper upgrade --finalize</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>...and then restart the server:</p><div class="language-shell codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-shell codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">$ bin/bookkeeper bookie</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>If something has gone wrong, you can always perform a rollback:</p><div class="language-shell codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-shell codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">$ bin/bookkeeper upgrade --rollback</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><h2 class="anchor anchorWithStickyNavbar_LWe7" id="formatting">Formatting<a href="#formatting" class="hash-link" aria-label="Direct link to Formatting" title="Direct link to Formatting">​</a></h2><p>You can format bookie metadata in ZooKeeper using the <a href="/docs/reference/cli#bookkeeper-shell-metaformat"><code>metaformat</code></a> command of the <a href="/docs/reference/cli#the-bookkeeper-shell">BookKeeper shell</a>.</p><p>By default, formatting is done in interactive mode, which prompts you to confirm the format operation if old data exists. You can disable confirmation using the <code>-nonInteractive</code> flag. If old data does exist, the format operation will abort <em>unless</em> you set the <code>-force</code> flag. Here&#x27;s an example:</p><div class="language-shell codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-shell codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">$ bin/bookkeeper shell metaformat</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>You can format the local filesystem data on a bookie using the <a href="/docs/reference/cli#bookkeeper-shell-bookieformat"><code>bookieformat</code></a> command on each bookie. Here&#x27;s an example:</p><div class="language-shell codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-shell codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">$ bin/bookkeeper shell bookieformat</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><blockquote><p>The <code>-force</code> and <code>-nonInteractive</code> flags are also available for the <code>bookieformat</code> command.</p></blockquote><h2 class="anchor anchorWithStickyNavbar_LWe7" id="autorecovery">AutoRecovery<a href="#autorecovery" class="hash-link" aria-label="Direct link to AutoRecovery" title="Direct link to AutoRecovery">​</a></h2><p>For a guide to AutoRecovery in BookKeeper, see <a href="/docs/admin/autorecovery">this doc</a>.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="missing-disks-or-directories">Missing disks or directories<a href="#missing-disks-or-directories" class="hash-link" aria-label="Direct link to Missing disks or directories" title="Direct link to Missing disks or directories">​</a></h2><p>Accidentally replacing disks or removing directories can cause a bookie to fail while trying to read a ledger fragment that, according to the ledger metadata, exists on the bookie. For this reason, when a bookie is started for the first time, its disk configuration is fixed for the lifetime of that bookie. Any change to its disk configuration, such as a crashed disk or an accidental configuration change, will result in the bookie being unable to start. That will throw an error like this:</p><div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">2017-05-29 18:19:13,790 - ERROR - [main:BookieServer314] – Exception running bookie server : @</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">org.apache.bookkeeper.bookie.BookieException$InvalidCookieException</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">.......at org.apache.bookkeeper.bookie.Cookie.verify(Cookie.java:82)</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">.......at org.apache.bookkeeper.bookie.Bookie.checkEnvironment(Bookie.java:275)</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">.......at org.apache.bookkeeper.bookie.Bookie.&lt;init&gt;(Bookie.java:351)</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>If the change was the result of an accidental configuration change, the change can be reverted and the bookie can be restarted. However, if the change <em>cannot</em> be reverted, such as is the case when you want to add a new disk or replace a disk, the bookie must be wiped and then all its data re-replicated onto it.</p><ol><li><p>Increment the <a href="/docs/reference/config#bookiePort"><code>bookiePort</code></a> parameter in the <a href="/docs/reference/config"><code>bk_server.conf</code></a></p></li><li><p>Ensure that all directories specified by <a href="/docs/reference/config#journalDirectory"><code>journalDirectory</code></a> and <a href="/docs/reference/config#ledgerDirectories"><code>ledgerDirectories</code></a> are empty.</p></li><li><p><a href="#starting-and-stopping-bookies">Start the bookie</a>.</p></li><li><p>Run the following command to re-replicate the data:</p><div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">$ bin/bookkeeper shell recover </span><span class="token operator" style="color:#393A34">&lt;</span><span class="token plain">oldbookie</span><span class="token operator" style="color:#393A34">&gt;</span><span class="token plain"> </span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>The ZooKeeper server, old bookie, and new bookie, are all identified by their external IP and <code>bookiePort</code> (3181 by default). Here&#x27;s an example:</p><div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">$ bin/bookkeeper shell recover  </span><span class="token number" style="color:#36acaa">192.168</span><span class="token plain">.1.10:3181</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>See the <a href="/docs/admin/autorecovery">AutoRecovery</a> documentation for more info on the re-replication process.</p></li></ol></div></article><nav class="pagination-nav docusaurus-mt-lg" aria-label="Docs pages navigation"></nav></div></div><div class="col col--3"><div class="tableOfContents_bqdL thin-scrollbar theme-doc-toc-desktop"><ul class="table-of-contents table-of-contents__left-border"><li><a href="#requirements" class="table-of-contents__link toc-highlight">Requirements</a><ul><li><a href="#performance" class="table-of-contents__link toc-highlight">Performance</a></li><li><a href="#zookeeper" class="table-of-contents__link toc-highlight">ZooKeeper</a></li></ul></li><li><a href="#starting-and-stopping-bookies" class="table-of-contents__link toc-highlight">Starting and stopping bookies</a><ul><li><a href="#local-bookies" class="table-of-contents__link toc-highlight">Local bookies</a></li></ul></li><li><a href="#configuring-bookies" class="table-of-contents__link toc-highlight">Configuring bookies</a></li><li><a href="#logging" class="table-of-contents__link toc-highlight">Logging</a></li><li><a href="#upgrading" class="table-of-contents__link toc-highlight">Upgrading</a><ul><li><a href="#upgrade-pattern" class="table-of-contents__link toc-highlight">Upgrade pattern</a></li></ul></li><li><a href="#formatting" class="table-of-contents__link toc-highlight">Formatting</a></li><li><a href="#autorecovery" class="table-of-contents__link toc-highlight">AutoRecovery</a></li><li><a href="#missing-disks-or-directories" class="table-of-contents__link toc-highlight">Missing disks or directories</a></li></ul></div></div></div></div></main></div></div><footer class="footer footer--dark"><div class="container container-fluid"><div class="row footer__links"><div class="col footer__col"><div class="footer__title">Documentation</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/docs/overview">Overview</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/getting-started/installation">Getting started</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/deployment/manual">Deployment</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/admin/bookies">Administration</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/api/overview">API</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/security/overview">Security</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/development/protocol">Development</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/reference/config">Reference</a></li></ul></div><div class="col footer__col"><div class="footer__title">Community</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/community/mailing-lists">Mailing lists</a></li><li class="footer__item"><a class="footer__link-item" href="/community/slack">Slack</a></li><li class="footer__item"><a href="https://github.com/apache/bookkeeper" target="_blank" rel="noopener noreferrer" class="footer__link-item">Github<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a href="https://twitter.com/asfbookkeeper" target="_blank" rel="noopener noreferrer" class="footer__link-item">Twitter<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div><div class="col footer__col"><div class="footer__title">Project</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/project/who">Who are we?</a></li><li class="footer__item"><a class="footer__link-item" href="/project/bylaws">Bylaws</a></li><li class="footer__item"><a href="https://apache.org/licenses" target="_blank" rel="noopener noreferrer" class="footer__link-item">License<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a class="footer__link-item" href="/project/privacy">Privacy policy</a></li><li class="footer__item"><a href="https://www.apache.org/foundation/sponsorship.html" target="_blank" rel="noopener noreferrer" class="footer__link-item">Sponsorship<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a href="https://www.apache.org/foundation/thanks.html" target="_blank" rel="noopener noreferrer" class="footer__link-item">Thanks<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div></div><div class="footer__bottom text--center"><div class="footer__copyright"><footer class="footer">
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navbar__brand" href="/"><div class="navbar__logo"><img src="/img/bk-logo.svg" alt="Apache Bookkeeper" class="themedImage_ToTc themedImage--light_HNdA"><img src="/img/bk-logo.svg" alt="Apache Bookkeeper" class="themedImage_ToTc themedImage--dark_i4oU"></div><b class="navbar__title text--truncate">Apache BookKeeper</b></a><a aria-current="page" class="navbar__item navbar__link navbar__link--active" href="/docs/overview/">Documentation</a><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Community</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/community/mailing-lists">Mailing lists</a></li><li><a class="dropdown__link" href="/community/slack">Slack</a></li><li><a href="https://github.com/apache/bookkeeper/issues" target="_blank" rel="noopener noreferrer" class="dropdown__link">Github issues<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a class="dropdown__link" href="/community/releases">Release management</a></li><li><a class="dropdown__link" href="/community/meeting">Community meetings</a></li><li><a class="dropdown__link" href="/community/contributing">Contribution guide</a></li><li><a class="dropdown__link" href="/community/coding-guide">Coding guide</a></li><li><a class="dropdown__link" href="/community/testing">Testing guide</a></li><li><a class="dropdown__link" href="/community/issue-report">Issue report guide</a></li><li><a class="dropdown__link" href="/community/release-guide">Release guide</a></li><li><a class="dropdown__link" href="/community/presentations">Presentations</a></li><li><a class="dropdown__link" href="/community/bookkeeper-proposals">BookKeeper proposals (BP)</a></li></ul></div><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Project</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/project/who">Who are we?</a></li><li><a class="dropdown__link" href="/project/bylaws">Bylaws</a></li><li><a href="https://apache.org/licenses" target="_blank" rel="noopener noreferrer" class="dropdown__link">License<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a class="dropdown__link" href="/project/privacy">Privacy policy</a></li><li><a href="https://www.apache.org/foundation/sponsorship.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Sponsorship<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a href="https://www.apache.org/foundation/thanks.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Thanks<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div></div><div class="navbar__items navbar__items--right"><div class="navbar__item dropdown dropdown--hoverable dropdown--right"><a class="navbar__link" aria-haspopup="true" aria-expanded="false" role="button" href="/docs/overview/">4.17.0</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/docs/next/admin/bookies">Next</a></li><li><a aria-current="page" class="dropdown__link dropdown__link--active" href="/docs/admin/bookies">4.17.0</a></li><li><a class="dropdown__link" href="/docs/4.16.5/admin/bookies">4.16.5</a></li><li><a class="dropdown__link" href="/docs/4.15.5/admin/bookies">4.15.5</a></li><li><a class="dropdown__link" href="/docs/4.14.8/admin/bookies">4.14.8</a></li><li><a class="dropdown__link" href="/docs/4.13.0/admin/bookies">4.13.0</a></li><li><a class="dropdown__link" href="/docs/4.12.1/admin/bookies">4.12.1</a></li><li><a class="dropdown__link" href="/docs/4.11.1/admin/bookies">4.11.1</a></li><li><a class="dropdown__link" href="/docs/4.10.0/admin/bookies">4.10.0</a></li><li><a class="dropdown__link" href="/docs/4.9.2/admin/bookies">4.9.2</a></li><li><a class="dropdown__link" href="/docs/4.8.2/admin/bookies">4.8.2</a></li><li><a class="dropdown__link" href="/docs/4.7.3/admin/bookies">4.7.3</a></li><li><a class="dropdown__link" href="/docs/4.6.2/admin/bookies">4.6.2</a></li><li><a class="dropdown__link" href="/docs/4.5.1/admin/bookies">4.5.1</a></li></ul></div><a class="navbar__item navbar__link" href="/releases">Download</a><div class="toggle_vylO colorModeToggle_DEke"><button class="clean-btn toggleButton_gllP toggleButtonDisabled_aARS" type="button" disabled="" title="Switch between dark and light mode (currently light mode)" aria-label="Switch between dark and light mode (currently light mode)" aria-live="polite"><svg viewBox="0 0 24 24" width="24" height="24" class="lightToggleIcon_pyhR"><path fill="currentColor" d="M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"></path></svg><svg viewBox="0 0 24 24" width="24" height="24" class="darkToggleIcon_wfgR"><path fill="currentColor" d="M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"></path></svg></button></div><div class="searchBox_ZlJk"></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div></nav><div id="docusaurus_skipToContent_fallback" class="main-wrapper mainWrapper_z2l0 docsWrapper_BCFX"><button aria-label="Scroll back to top" class="clean-btn theme-back-to-top-button backToTopButton_sjWU" type="button"></button><div class="docPage__5DB"><aside class="theme-doc-sidebar-container docSidebarContainer_b6E3"><div class="sidebarViewport_Xe31"><div class="sidebar_njMd"><nav aria-label="Docs sidebar" class="menu thin-scrollbar menu_SIkG"><ul class="theme-doc-sidebar-menu menu__list"><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-1 menu__list-item"><a class="menu__link" href="/docs/overview/">Overview</a></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/getting-started/installation">Getting started</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/deployment/manual">Deployment</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret menu__link--active" aria-expanded="true" href="/docs/admin/bookies">Administration</a></div><ul style="display:block;overflow:visible;height:auto" class="menu__list"><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link menu__link--active" aria-current="page" tabindex="0" href="/docs/admin/bookies">BookKeeper administration</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/admin/autorecovery">AutoRecovery</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/admin/metrics">Metrics collection</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/admin/upgrade">Upgrade</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/admin/http">Admin REST API</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/admin/decomission">Decommissioning Bookies</a></li></ul></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/api/overview">API</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/security/overview">Security</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/development/protocol">Development</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/reference/config">Reference</a></div></li></ul></nav></div></div></aside><main class="docMainContainer_gTbr"><div class="container padding-top--md padding-bottom--lg"><div class="row"><div class="col docItemCol_VOVn"><div class="docItemContainer_Djhp"><article><span class="theme-doc-version-badge badge badge--secondary">Version: 4.17.0</span><div class="tocCollapsible_ETCw theme-doc-toc-mobile tocMobile_ITEo"><button type="button" class="clean-btn tocCollapsibleButton_TO0P">On this page</button></div><div class="theme-doc-markdown markdown"><header><h1>BookKeeper administration</h1></header><p>This document is a guide to deploying, administering, and maintaining BookKeeper. It also discusses best practices and common problems.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="requirements">Requirements<a href="#requirements" class="hash-link" aria-label="Direct link to Requirements" title="Direct link to Requirements">​</a></h2><p>A typical BookKeeper installation consists of an ensemble of bookies and a ZooKeeper quorum. The exact number of bookies depends on the quorum mode that you choose, desired throughput, and the number of clients using the installation simultaneously.</p><p>The minimum number of bookies depends on the type of installation:</p><ul><li>For <em>self-verifying</em> entries you should run at least three bookies. In this mode, clients store a message authentication code along with each entry.</li><li>For <em>generic</em> entries you should run at least four</li></ul><p>There is no upper limit on the number of bookies that you can run in a single ensemble.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="performance">Performance<a href="#performance" class="hash-link" aria-label="Direct link to Performance" title="Direct link to Performance">​</a></h3><p>To achieve optimal performance, BookKeeper requires each server to have at least two disks. It&#x27;s possible to run a bookie with a single disk but performance will be significantly degraded.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="zookeeper">ZooKeeper<a href="#zookeeper" class="hash-link" aria-label="Direct link to ZooKeeper" title="Direct link to ZooKeeper">​</a></h3><p>There is no constraint on the number of ZooKeeper nodes you can run with BookKeeper. A single machine running ZooKeeper in <a href="https://zookeeper.apache.org/doc/current/zookeeperStarted.html#sc_InstallingSingleMode" target="_blank" rel="noopener noreferrer">standalone mode</a> is sufficient for BookKeeper, although for the sake of higher resilience we recommend running ZooKeeper in <a href="https://zookeeper.apache.org/doc/current/zookeeperStarted.html#sc_RunningReplicatedZooKeeper" target="_blank" rel="noopener noreferrer">quorum mode</a> with multiple servers.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="starting-and-stopping-bookies">Starting and stopping bookies<a href="#starting-and-stopping-bookies" class="hash-link" aria-label="Direct link to Starting and stopping bookies" title="Direct link to Starting and stopping bookies">​</a></h2><p>You can run bookies either in the foreground or in the background, using <a href="https://en.wikipedia.org/wiki/Nohup" target="_blank" rel="noopener noreferrer">nohup</a>. You can also run <a href="#local-bookie">local bookies</a> for development purposes.</p><p>To start a bookie in the foreground, use the <a href="/docs/reference/cli#bookkeeper-bookie"><code>bookie</code></a> command of the <a href="/docs/reference/cli#bookkeeper"><code>bookkeeper</code></a> CLI tool:</p><div class="language-shell codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-shell codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">$ bin/bookkeeper bookie</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>To start a bookie in the background, use the <a href="/docs/reference/cli#bookkeeper-daemon.sh"><code>bookkeeper-daemon.sh</code></a> script and run <code>start bookie</code>:</p><div class="language-shell codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-shell codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">$ bin/bookkeeper-daemon.sh start bookie</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><h3 class="anchor anchorWithStickyNavbar_LWe7" id="local-bookies">Local bookies<a href="#local-bookies" class="hash-link" aria-label="Direct link to Local bookies" title="Direct link to Local bookies">​</a></h3><p>The instructions above showed you how to run bookies intended for production use. If you&#x27;d like to experiment with ensembles of bookies locally, you can use the <a href="/docs/reference/cli#bookkeeper-localbookie"><code>localbookie</code></a> command of the <code>bookkeeper</code> CLI tool and specify the number of bookies you&#x27;d like to run.</p><p>This would spin up a local ensemble of 6 bookies:</p><div class="language-shell codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-shell codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">$ bin/bookkeeper localbookie </span><span class="token number" style="color:#36acaa">6</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><blockquote><p>When you run a local bookie ensemble, all bookies run in a single JVM process.</p></blockquote><h2 class="anchor anchorWithStickyNavbar_LWe7" id="configuring-bookies">Configuring bookies<a href="#configuring-bookies" class="hash-link" aria-label="Direct link to Configuring bookies" title="Direct link to Configuring bookies">​</a></h2><p>There&#x27;s a wide variety of parameters that you can set in the bookie configuration file in <code>bookkeeper-server/conf/bk_server.conf</code> of your <a href="/docs/reference/config">BookKeeper installation</a>. A full listing can be found in <a href="/docs/reference/config">Bookie configuration</a>.</p><p>Some of the more important parameters to be aware of:</p><table><thead><tr><th align="left">Parameter</th><th align="left">Description</th><th align="left">Default</th></tr></thead><tbody><tr><td align="left"><code>bookiePort</code></td><td align="left">The TCP port that the bookie listens on</td><td align="left"><code>3181</code></td></tr><tr><td align="left"><code>zkServers</code></td><td align="left">A comma-separated list of ZooKeeper servers in <code>hostname:port</code> format</td><td align="left"><code>localhost:2181</code></td></tr><tr><td align="left"><code>journalDirectory</code></td><td align="left">The directory where the <a href="/docs/getting-started/concepts#log-device">log device</a> stores the bookie&#x27;s write-ahead log (WAL)</td><td align="left"><code>/tmp/bk-txn</code></td></tr><tr><td align="left"><code>ledgerDirectories</code></td><td align="left">The directories where the <a href="/docs/getting-started/concepts#ledger-device">ledger device</a> stores the bookie&#x27;s ledger entries (as a comma-separated list)</td><td align="left"><code>/tmp/bk-data</code></td></tr></tbody></table><blockquote><p>Ideally, the directories specified <code>journalDirectory</code> and <code>ledgerDirectories</code> should be on difference devices.</p></blockquote><h2 class="anchor anchorWithStickyNavbar_LWe7" id="logging">Logging<a href="#logging" class="hash-link" aria-label="Direct link to Logging" title="Direct link to Logging">​</a></h2><p>BookKeeper uses <a href="http://www.slf4j.org/" target="_blank" rel="noopener noreferrer">slf4j</a> for logging, with <a href="https://logging.apache.org/log4j/2.x/" target="_blank" rel="noopener noreferrer">log4j</a> bindings enabled by default.</p><p>To enable logging for a bookie, create a <code>log4j.properties</code> file and point the <code>BOOKIE_LOG_CONF</code> environment variable to the configuration file. Here&#x27;s an example:</p><div class="language-shell codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-shell codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">$ </span><span class="token builtin class-name">export</span><span class="token plain"> </span><span class="token assign-left variable" style="color:#36acaa">BOOKIE_LOG_CONF</span><span class="token operator" style="color:#393A34">=</span><span class="token plain">/some/path/log4j.properties</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">$ bin/bookkeeper bookie</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><h2 class="anchor anchorWithStickyNavbar_LWe7" id="upgrading">Upgrading<a href="#upgrading" class="hash-link" aria-label="Direct link to Upgrading" title="Direct link to Upgrading">​</a></h2><p>From time to time you may need to make changes to the filesystem layout of bookies---changes that are incompatible with previous versions of BookKeeper and require that directories used with previous versions are upgraded. If a filesystem upgrade is required when updating BookKeeper, the bookie will fail to start and return an error like this:</p><div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">2017-05-25 10:41:50,494 - ERROR - [main:Bookie@246] - Directory layout version is less than 3, upgrade needed</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>BookKeeper provides a utility for upgrading the filesystem. You can perform an upgrade using the <a href="/docs/reference/cli#bookkeeper-upgrade"><code>upgrade</code></a> command of the <code>bookkeeper</code> CLI tool. When running <code>bookkeeper upgrade</code> you need to specify one of three flags:</p><table><thead><tr><th align="left">Flag</th><th align="left">Action</th></tr></thead><tbody><tr><td align="left"><code>--upgrade</code></td><td align="left">Performs an upgrade</td></tr><tr><td align="left"><code>--rollback</code></td><td align="left">Performs a rollback to the initial filesystem version</td></tr><tr><td align="left"><code>--finalize</code></td><td align="left">Marks the upgrade as complete</td></tr></tbody></table><h3 class="anchor anchorWithStickyNavbar_LWe7" id="upgrade-pattern">Upgrade pattern<a href="#upgrade-pattern" class="hash-link" aria-label="Direct link to Upgrade pattern" title="Direct link to Upgrade pattern">​</a></h3><p>A standard upgrade pattern is to run an upgrade...</p><div class="language-shell codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-shell codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">$ bin/bookkeeper upgrade --upgrade</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>...then check that everything is working normally, then kill the bookie. If everything is okay, finalize the upgrade...</p><div class="language-shell codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-shell codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">$ bin/bookkeeper upgrade --finalize</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>...and then restart the server:</p><div class="language-shell codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-shell codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">$ bin/bookkeeper bookie</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>If something has gone wrong, you can always perform a rollback:</p><div class="language-shell codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-shell codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">$ bin/bookkeeper upgrade --rollback</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><h2 class="anchor anchorWithStickyNavbar_LWe7" id="formatting">Formatting<a href="#formatting" class="hash-link" aria-label="Direct link to Formatting" title="Direct link to Formatting">​</a></h2><p>You can format bookie metadata in ZooKeeper using the <a href="/docs/reference/cli#bookkeeper-shell-metaformat"><code>metaformat</code></a> command of the <a href="/docs/reference/cli#the-bookkeeper-shell">BookKeeper shell</a>.</p><p>By default, formatting is done in interactive mode, which prompts you to confirm the format operation if old data exists. You can disable confirmation using the <code>-nonInteractive</code> flag. If old data does exist, the format operation will abort <em>unless</em> you set the <code>-force</code> flag. Here&#x27;s an example:</p><div class="language-shell codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-shell codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">$ bin/bookkeeper shell metaformat</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>You can format the local filesystem data on a bookie using the <a href="/docs/reference/cli#bookkeeper-shell-bookieformat"><code>bookieformat</code></a> command on each bookie. Here&#x27;s an example:</p><div class="language-shell codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-shell codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">$ bin/bookkeeper shell bookieformat</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><blockquote><p>The <code>-force</code> and <code>-nonInteractive</code> flags are also available for the <code>bookieformat</code> command.</p></blockquote><h2 class="anchor anchorWithStickyNavbar_LWe7" id="autorecovery">AutoRecovery<a href="#autorecovery" class="hash-link" aria-label="Direct link to AutoRecovery" title="Direct link to AutoRecovery">​</a></h2><p>For a guide to AutoRecovery in BookKeeper, see <a href="/docs/admin/autorecovery">this doc</a>.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="missing-disks-or-directories">Missing disks or directories<a href="#missing-disks-or-directories" class="hash-link" aria-label="Direct link to Missing disks or directories" title="Direct link to Missing disks or directories">​</a></h2><p>Accidentally replacing disks or removing directories can cause a bookie to fail while trying to read a ledger fragment that, according to the ledger metadata, exists on the bookie. For this reason, when a bookie is started for the first time, its disk configuration is fixed for the lifetime of that bookie. Any change to its disk configuration, such as a crashed disk or an accidental configuration change, will result in the bookie being unable to start. That will throw an error like this:</p><div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">2017-05-29 18:19:13,790 - ERROR - [main:BookieServer314] – Exception running bookie server : @</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">org.apache.bookkeeper.bookie.BookieException$InvalidCookieException</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">.......at org.apache.bookkeeper.bookie.Cookie.verify(Cookie.java:82)</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">.......at org.apache.bookkeeper.bookie.Bookie.checkEnvironment(Bookie.java:275)</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">.......at org.apache.bookkeeper.bookie.Bookie.&lt;init&gt;(Bookie.java:351)</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>If the change was the result of an accidental configuration change, the change can be reverted and the bookie can be restarted. However, if the change <em>cannot</em> be reverted, such as is the case when you want to add a new disk or replace a disk, the bookie must be wiped and then all its data re-replicated onto it.</p><ol><li><p>Increment the <a href="/docs/reference/config#bookiePort"><code>bookiePort</code></a> parameter in the <a href="/docs/reference/config"><code>bk_server.conf</code></a></p></li><li><p>Ensure that all directories specified by <a href="/docs/reference/config#journalDirectory"><code>journalDirectory</code></a> and <a href="/docs/reference/config#ledgerDirectories"><code>ledgerDirectories</code></a> are empty.</p></li><li><p><a href="#starting-and-stopping-bookies">Start the bookie</a>.</p></li><li><p>Run the following command to re-replicate the data:</p><div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">$ bin/bookkeeper shell recover </span><span class="token operator" style="color:#393A34">&lt;</span><span class="token plain">oldbookie</span><span class="token operator" style="color:#393A34">&gt;</span><span class="token plain"> </span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>The ZooKeeper server, old bookie, and new bookie, are all identified by their external IP and <code>bookiePort</code> (3181 by default). Here&#x27;s an example:</p><div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">$ bin/bookkeeper shell recover  </span><span class="token number" style="color:#36acaa">192.168</span><span class="token plain">.1.10:3181</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>See the <a href="/docs/admin/autorecovery">AutoRecovery</a> documentation for more info on the re-replication process.</p></li></ol></div></article><nav class="pagination-nav docusaurus-mt-lg" aria-label="Docs pages navigation"><a class="pagination-nav__link pagination-nav__link--prev" href="/docs/deployment/kubernetes"><div class="pagination-nav__sublabel">Previous</div><div class="pagination-nav__label">Deploying Apache BookKeeper on Kubernetes</div></a><a class="pagination-nav__link pagination-nav__link--next" href="/docs/admin/autorecovery"><div class="pagination-nav__sublabel">Next</div><div class="pagination-nav__label">Using AutoRecovery</div></a></nav></div></div><div class="col col--3"><div class="tableOfContents_bqdL thin-scrollbar theme-doc-toc-desktop"><ul class="table-of-contents table-of-contents__left-border"><li><a href="#requirements" class="table-of-contents__link toc-highlight">Requirements</a><ul><li><a href="#performance" class="table-of-contents__link toc-highlight">Performance</a></li><li><a href="#zookeeper" class="table-of-contents__link toc-highlight">ZooKeeper</a></li></ul></li><li><a href="#starting-and-stopping-bookies" class="table-of-contents__link toc-highlight">Starting and stopping bookies</a><ul><li><a href="#local-bookies" class="table-of-contents__link toc-highlight">Local bookies</a></li></ul></li><li><a href="#configuring-bookies" class="table-of-contents__link toc-highlight">Configuring bookies</a></li><li><a href="#logging" class="table-of-contents__link toc-highlight">Logging</a></li><li><a href="#upgrading" class="table-of-contents__link toc-highlight">Upgrading</a><ul><li><a href="#upgrade-pattern" class="table-of-contents__link toc-highlight">Upgrade pattern</a></li></ul></li><li><a href="#formatting" class="table-of-contents__link toc-highlight">Formatting</a></li><li><a href="#autorecovery" class="table-of-contents__link toc-highlight">AutoRecovery</a></li><li><a href="#missing-disks-or-directories" class="table-of-contents__link toc-highlight">Missing disks or directories</a></li></ul></div></div></div></div></main></div></div><footer class="footer footer--dark"><div class="container container-fluid"><div class="row footer__links"><div class="col footer__col"><div class="footer__title">Documentation</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/docs/overview">Overview</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/getting-started/installation">Getting started</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/deployment/manual">Deployment</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/admin/bookies">Administration</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/api/overview">API</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/security/overview">Security</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/development/protocol">Development</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/reference/config">Reference</a></li></ul></div><div class="col footer__col"><div class="footer__title">Community</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/community/mailing-lists">Mailing lists</a></li><li class="footer__item"><a class="footer__link-item" href="/community/slack">Slack</a></li><li class="footer__item"><a href="https://github.com/apache/bookkeeper" target="_blank" rel="noopener noreferrer" class="footer__link-item">Github<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a href="https://twitter.com/asfbookkeeper" target="_blank" rel="noopener noreferrer" class="footer__link-item">Twitter<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div><div class="col footer__col"><div class="footer__title">Project</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/project/who">Who are we?</a></li><li class="footer__item"><a class="footer__link-item" href="/project/bylaws">Bylaws</a></li><li class="footer__item"><a href="https://apache.org/licenses" target="_blank" rel="noopener noreferrer" class="footer__link-item">License<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a class="footer__link-item" href="/project/privacy">Privacy policy</a></li><li class="footer__item"><a href="https://www.apache.org/foundation/sponsorship.html" target="_blank" rel="noopener noreferrer" class="footer__link-item">Sponsorship<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a href="https://www.apache.org/foundation/thanks.html" target="_blank" rel="noopener noreferrer" class="footer__link-item">Thanks<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div></div><div class="footer__bottom text--center"><div class="footer__copyright"><footer class="footer">
         <div class="container">
           <div class="content has-text-centered">
             <p>
@@ -22,7 +22,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/admin/decomission/index.html b/content/docs/admin/decomission/index.html
index 3fb3785..ea9b066 100644
--- a/content/docs/admin/decomission/index.html
+++ b/content/docs/admin/decomission/index.html
@@ -4,12 +4,12 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">Decommission Bookies | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/admin/decomission"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.17.0"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.17.0"><meta data-rh="true" name="docsearch:version" content="4.17.0"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.17.0"><meta data-rh="true" property="og:title" content="Decommission Bookies | Apache BookKeeper"><meta data-rh="true" name="description" content="In case the user wants to decommission a bookie, the following process is useful to follow in order to verify if the"><meta data-rh="true" property="og:description" content="In case the user wants to decommission a bookie, the following process is useful to follow in order to verify if the"><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/admin/decomission"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/admin/decomission" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/admin/decomission" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
-<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navbar__brand" href="/"><div class="navbar__logo"><img src="/img/bk-logo.svg" alt="Apache Bookkeeper" class="themedImage_ToTc themedImage--light_HNdA"><img src="/img/bk-logo.svg" alt="Apache Bookkeeper" class="themedImage_ToTc themedImage--dark_i4oU"></div><b class="navbar__title text--truncate">Apache BookKeeper</b></a><a class="navbar__item navbar__link" href="/docs/overview/">Documentation</a><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Community</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/community/mailing-lists">Mailing lists</a></li><li><a class="dropdown__link" href="/community/slack">Slack</a></li><li><a href="https://github.com/apache/bookkeeper/issues" target="_blank" rel="noopener noreferrer" class="dropdown__link">Github issues<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a class="dropdown__link" href="/community/releases">Release management</a></li><li><a class="dropdown__link" href="/community/meeting">Community meetings</a></li><li><a class="dropdown__link" href="/community/contributing">Contribution guide</a></li><li><a class="dropdown__link" href="/community/coding-guide">Coding guide</a></li><li><a class="dropdown__link" href="/community/testing">Testing guide</a></li><li><a class="dropdown__link" href="/community/issue-report">Issue report guide</a></li><li><a class="dropdown__link" href="/community/release-guide">Release guide</a></li><li><a class="dropdown__link" href="/community/presentations">Presentations</a></li><li><a class="dropdown__link" href="/community/bookkeeper-proposals">BookKeeper proposals (BP)</a></li></ul></div><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Project</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/project/who">Who are we?</a></li><li><a class="dropdown__link" href="/project/bylaws">Bylaws</a></li><li><a href="https://apache.org/licenses" target="_blank" rel="noopener noreferrer" class="dropdown__link">License<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a class="dropdown__link" href="/project/privacy">Privacy policy</a></li><li><a href="https://www.apache.org/foundation/sponsorship.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Sponsorship<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a href="https://www.apache.org/foundation/thanks.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Thanks<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div></div><div class="navbar__items navbar__items--right"><div class="navbar__item dropdown dropdown--hoverable dropdown--right"><a class="navbar__link" aria-haspopup="true" aria-expanded="false" role="button" href="/docs/admin/autorecovery">4.17.0</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/docs/next/admin/decomission">Next</a></li><li><a aria-current="page" class="dropdown__link dropdown__link--active" href="/docs/admin/decomission">4.17.0</a></li><li><a class="dropdown__link" href="/docs/4.16.5/admin/decomission">4.16.5</a></li><li><a class="dropdown__link" href="/docs/4.15.5/admin/decomission">4.15.5</a></li><li><a class="dropdown__link" href="/docs/4.14.8/admin/decomission">4.14.8</a></li><li><a class="dropdown__link" href="/docs/4.13.0/admin/decomission">4.13.0</a></li><li><a class="dropdown__link" href="/docs/4.12.1/admin/decomission">4.12.1</a></li><li><a class="dropdown__link" href="/docs/4.11.1/admin/decomission">4.11.1</a></li><li><a class="dropdown__link" href="/docs/4.10.0/overview/">4.10.0</a></li><li><a class="dropdown__link" href="/docs/4.9.2/overview/">4.9.2</a></li><li><a class="dropdown__link" href="/docs/4.8.2/overview/">4.8.2</a></li><li><a class="dropdown__link" href="/docs/4.7.3/overview/">4.7.3</a></li><li><a class="dropdown__link" href="/docs/4.6.2/overview/">4.6.2</a></li><li><a class="dropdown__link" href="/docs/4.5.1/overview/">4.5.1</a></li></ul></div><a class="navbar__item navbar__link" href="/releases">Download</a><div class="toggle_vylO colorModeToggle_DEke"><button class="clean-btn toggleButton_gllP toggleButtonDisabled_aARS" type="button" disabled="" title="Switch between dark and light mode (currently light mode)" aria-label="Switch between dark and light mode (currently light mode)" aria-live="polite"><svg viewBox="0 0 24 24" width="24" height="24" class="lightToggleIcon_pyhR"><path fill="currentColor" d="M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"></path></svg><svg viewBox="0 0 24 24" width="24" height="24" class="darkToggleIcon_wfgR"><path fill="currentColor" d="M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"></path></svg></button></div><div class="searchBox_ZlJk"></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div></nav><div id="docusaurus_skipToContent_fallback" class="main-wrapper mainWrapper_z2l0 docsWrapper_BCFX"><button aria-label="Scroll back to top" class="clean-btn theme-back-to-top-button backToTopButton_sjWU" type="button"></button><div class="docPage__5DB"><main class="docMainContainer_gTbr docMainContainerEnhanced_Uz_u"><div class="container padding-top--md padding-bottom--lg"><div class="row"><div class="col docItemCol_VOVn"><div class="docItemContainer_Djhp"><article><span class="theme-doc-version-badge badge badge--secondary">Version: 4.17.0</span><div class="tocCollapsible_ETCw theme-doc-toc-mobile tocMobile_ITEo"><button type="button" class="clean-btn tocCollapsibleButton_TO0P">On this page</button></div><div class="theme-doc-markdown markdown"><header><h1>Decommission Bookies</h1></header><p>In case the user wants to decommission a bookie, the following process is useful to follow in order to verify if the
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navbar__brand" href="/"><div class="navbar__logo"><img src="/img/bk-logo.svg" alt="Apache Bookkeeper" class="themedImage_ToTc themedImage--light_HNdA"><img src="/img/bk-logo.svg" alt="Apache Bookkeeper" class="themedImage_ToTc themedImage--dark_i4oU"></div><b class="navbar__title text--truncate">Apache BookKeeper</b></a><a aria-current="page" class="navbar__item navbar__link navbar__link--active" href="/docs/overview/">Documentation</a><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Community</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/community/mailing-lists">Mailing lists</a></li><li><a class="dropdown__link" href="/community/slack">Slack</a></li><li><a href="https://github.com/apache/bookkeeper/issues" target="_blank" rel="noopener noreferrer" class="dropdown__link">Github issues<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a class="dropdown__link" href="/community/releases">Release management</a></li><li><a class="dropdown__link" href="/community/meeting">Community meetings</a></li><li><a class="dropdown__link" href="/community/contributing">Contribution guide</a></li><li><a class="dropdown__link" href="/community/coding-guide">Coding guide</a></li><li><a class="dropdown__link" href="/community/testing">Testing guide</a></li><li><a class="dropdown__link" href="/community/issue-report">Issue report guide</a></li><li><a class="dropdown__link" href="/community/release-guide">Release guide</a></li><li><a class="dropdown__link" href="/community/presentations">Presentations</a></li><li><a class="dropdown__link" href="/community/bookkeeper-proposals">BookKeeper proposals (BP)</a></li></ul></div><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Project</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/project/who">Who are we?</a></li><li><a class="dropdown__link" href="/project/bylaws">Bylaws</a></li><li><a href="https://apache.org/licenses" target="_blank" rel="noopener noreferrer" class="dropdown__link">License<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a class="dropdown__link" href="/project/privacy">Privacy policy</a></li><li><a href="https://www.apache.org/foundation/sponsorship.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Sponsorship<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a href="https://www.apache.org/foundation/thanks.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Thanks<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div></div><div class="navbar__items navbar__items--right"><div class="navbar__item dropdown dropdown--hoverable dropdown--right"><a class="navbar__link" aria-haspopup="true" aria-expanded="false" role="button" href="/docs/overview/">4.17.0</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/docs/next/admin/decomission">Next</a></li><li><a aria-current="page" class="dropdown__link dropdown__link--active" href="/docs/admin/decomission">4.17.0</a></li><li><a class="dropdown__link" href="/docs/4.16.5/admin/decomission">4.16.5</a></li><li><a class="dropdown__link" href="/docs/4.15.5/admin/decomission">4.15.5</a></li><li><a class="dropdown__link" href="/docs/4.14.8/admin/decomission">4.14.8</a></li><li><a class="dropdown__link" href="/docs/4.13.0/admin/decomission">4.13.0</a></li><li><a class="dropdown__link" href="/docs/4.12.1/admin/decomission">4.12.1</a></li><li><a class="dropdown__link" href="/docs/4.11.1/admin/decomission">4.11.1</a></li><li><a class="dropdown__link" href="/docs/4.10.0/overview/">4.10.0</a></li><li><a class="dropdown__link" href="/docs/4.9.2/overview/">4.9.2</a></li><li><a class="dropdown__link" href="/docs/4.8.2/overview/">4.8.2</a></li><li><a class="dropdown__link" href="/docs/4.7.3/overview/">4.7.3</a></li><li><a class="dropdown__link" href="/docs/4.6.2/overview/">4.6.2</a></li><li><a class="dropdown__link" href="/docs/4.5.1/overview/">4.5.1</a></li></ul></div><a class="navbar__item navbar__link" href="/releases">Download</a><div class="toggle_vylO colorModeToggle_DEke"><button class="clean-btn toggleButton_gllP toggleButtonDisabled_aARS" type="button" disabled="" title="Switch between dark and light mode (currently light mode)" aria-label="Switch between dark and light mode (currently light mode)" aria-live="polite"><svg viewBox="0 0 24 24" width="24" height="24" class="lightToggleIcon_pyhR"><path fill="currentColor" d="M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"></path></svg><svg viewBox="0 0 24 24" width="24" height="24" class="darkToggleIcon_wfgR"><path fill="currentColor" d="M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"></path></svg></button></div><div class="searchBox_ZlJk"></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div></nav><div id="docusaurus_skipToContent_fallback" class="main-wrapper mainWrapper_z2l0 docsWrapper_BCFX"><button aria-label="Scroll back to top" class="clean-btn theme-back-to-top-button backToTopButton_sjWU" type="button"></button><div class="docPage__5DB"><aside class="theme-doc-sidebar-container docSidebarContainer_b6E3"><div class="sidebarViewport_Xe31"><div class="sidebar_njMd"><nav aria-label="Docs sidebar" class="menu thin-scrollbar menu_SIkG"><ul class="theme-doc-sidebar-menu menu__list"><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-1 menu__list-item"><a class="menu__link" href="/docs/overview/">Overview</a></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/getting-started/installation">Getting started</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/deployment/manual">Deployment</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret menu__link--active" aria-expanded="true" href="/docs/admin/bookies">Administration</a></div><ul style="display:block;overflow:visible;height:auto" class="menu__list"><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/admin/bookies">BookKeeper administration</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/admin/autorecovery">AutoRecovery</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/admin/metrics">Metrics collection</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/admin/upgrade">Upgrade</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/admin/http">Admin REST API</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link menu__link--active" aria-current="page" tabindex="0" href="/docs/admin/decomission">Decommissioning Bookies</a></li></ul></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/api/overview">API</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/security/overview">Security</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/development/protocol">Development</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/reference/config">Reference</a></div></li></ul></nav></div></div></aside><main class="docMainContainer_gTbr"><div class="container padding-top--md padding-bottom--lg"><div class="row"><div class="col docItemCol_VOVn"><div class="docItemContainer_Djhp"><article><span class="theme-doc-version-badge badge badge--secondary">Version: 4.17.0</span><div class="tocCollapsible_ETCw theme-doc-toc-mobile tocMobile_ITEo"><button type="button" class="clean-btn tocCollapsibleButton_TO0P">On this page</button></div><div class="theme-doc-markdown markdown"><header><h1>Decommission Bookies</h1></header><p>In case the user wants to decommission a bookie, the following process is useful to follow in order to verify if the
 decommissioning was safely done.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="before-we-decommission">Before we decommission<a href="#before-we-decommission" class="hash-link" aria-label="Direct link to Before we decommission" title="Direct link to Before we decommission">​</a></h3><ol><li><p>Ensure state of your cluster can support the decommissioning of the target bookie.
 Check if <code>EnsembleSize &gt;= Write Quorum &gt;= Ack Quorum</code> stays true with one less bookie</p></li><li><p>Ensure target bookie shows up in the listbookies command.</p></li><li><p>Ensure that there is no other process ongoing (upgrade etc).</p></li></ol><h3 class="anchor anchorWithStickyNavbar_LWe7" id="process-of-decommissioning">Process of Decommissioning<a href="#process-of-decommissioning" class="hash-link" aria-label="Direct link to Process of Decommissioning" title="Direct link to Process of Decommissioning">​</a></h3><ol><li>Log on to the bookie node, check if there are underreplicated ledgers.</li></ol><p>If there are, the decommission command will force them to be replicated.
 <code>$ bin/bookkeeper shell listunderreplicated</code></p><ol start="2"><li><p>Stop the bookie
@@ -20,7 +20,7 @@
 <code>$ bin/bookkeeper shell decommissionbookie</code>
 or
 <code>$ bin/bookkeeper shell decommissionbookie -bookieid &lt;target bookieid&gt;</code></p></li><li><p>Validate that there are no ledgers on decommissioned bookie
-<code>$ bin/bookkeeper shell listledgers -bookieid &lt;target bookieid&gt;</code></p></li></ol><p>Last step to verify is you could run this command to check if the bookie you decommissioned doesn’t show up in list bookies:</p><div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">$ bin/bookkeeper shell listbookies -rw -h</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">$ bin/bookkeeper shell listbookies -ro -h</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div></div></article><nav class="pagination-nav docusaurus-mt-lg" aria-label="Docs pages navigation"></nav></div></div><div class="col col--3"><div class="tableOfContents_bqdL thin-scrollbar theme-doc-toc-desktop"><ul class="table-of-contents table-of-contents__left-border"><li><a href="#before-we-decommission" class="table-of-contents__link toc-highlight">Before we decommission</a></li><li><a href="#process-of-decommissioning" class="table-of-contents__link toc-highlight">Process of Decommissioning</a></li></ul></div></div></div></div></main></div></div><footer class="footer footer--dark"><div class="container container-fluid"><div class="row footer__links"><div class="col footer__col"><div class="footer__title">Documentation</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/docs/overview">Overview</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/getting-started/installation">Getting started</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/deployment/manual">Deployment</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/admin/bookies">Administration</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/api/overview">API</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/security/overview">Security</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/development/protocol">Development</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/reference/config">Reference</a></li></ul></div><div class="col footer__col"><div class="footer__title">Community</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/community/mailing-lists">Mailing lists</a></li><li class="footer__item"><a class="footer__link-item" href="/community/slack">Slack</a></li><li class="footer__item"><a href="https://github.com/apache/bookkeeper" target="_blank" rel="noopener noreferrer" class="footer__link-item">Github<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a href="https://twitter.com/asfbookkeeper" target="_blank" rel="noopener noreferrer" class="footer__link-item">Twitter<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div><div class="col footer__col"><div class="footer__title">Project</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/project/who">Who are we?</a></li><li class="footer__item"><a class="footer__link-item" href="/project/bylaws">Bylaws</a></li><li class="footer__item"><a href="https://apache.org/licenses" target="_blank" rel="noopener noreferrer" class="footer__link-item">License<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a class="footer__link-item" href="/project/privacy">Privacy policy</a></li><li class="footer__item"><a href="https://www.apache.org/foundation/sponsorship.html" target="_blank" rel="noopener noreferrer" class="footer__link-item">Sponsorship<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a href="https://www.apache.org/foundation/thanks.html" target="_blank" rel="noopener noreferrer" class="footer__link-item">Thanks<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div></div><div class="footer__bottom text--center"><div class="footer__copyright"><footer class="footer">
+<code>$ bin/bookkeeper shell listledgers -bookieid &lt;target bookieid&gt;</code></p></li></ol><p>Last step to verify is you could run this command to check if the bookie you decommissioned doesn’t show up in list bookies:</p><div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">$ bin/bookkeeper shell listbookies -rw -h</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">$ bin/bookkeeper shell listbookies -ro -h</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div></div></article><nav class="pagination-nav docusaurus-mt-lg" aria-label="Docs pages navigation"><a class="pagination-nav__link pagination-nav__link--prev" href="/docs/admin/http"><div class="pagination-nav__sublabel">Previous</div><div class="pagination-nav__label">BookKeeper Admin REST API</div></a><a class="pagination-nav__link pagination-nav__link--next" href="/docs/api/overview"><div class="pagination-nav__sublabel">Next</div><div class="pagination-nav__label">BookKeeper API</div></a></nav></div></div><div class="col col--3"><div class="tableOfContents_bqdL thin-scrollbar theme-doc-toc-desktop"><ul class="table-of-contents table-of-contents__left-border"><li><a href="#before-we-decommission" class="table-of-contents__link toc-highlight">Before we decommission</a></li><li><a href="#process-of-decommissioning" class="table-of-contents__link toc-highlight">Process of Decommissioning</a></li></ul></div></div></div></div></main></div></div><footer class="footer footer--dark"><div class="container container-fluid"><div class="row footer__links"><div class="col footer__col"><div class="footer__title">Documentation</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/docs/overview">Overview</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/getting-started/installation">Getting started</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/deployment/manual">Deployment</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/admin/bookies">Administration</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/api/overview">API</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/security/overview">Security</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/development/protocol">Development</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/reference/config">Reference</a></li></ul></div><div class="col footer__col"><div class="footer__title">Community</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/community/mailing-lists">Mailing lists</a></li><li class="footer__item"><a class="footer__link-item" href="/community/slack">Slack</a></li><li class="footer__item"><a href="https://github.com/apache/bookkeeper" target="_blank" rel="noopener noreferrer" class="footer__link-item">Github<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a href="https://twitter.com/asfbookkeeper" target="_blank" rel="noopener noreferrer" class="footer__link-item">Twitter<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div><div class="col footer__col"><div class="footer__title">Project</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/project/who">Who are we?</a></li><li class="footer__item"><a class="footer__link-item" href="/project/bylaws">Bylaws</a></li><li class="footer__item"><a href="https://apache.org/licenses" target="_blank" rel="noopener noreferrer" class="footer__link-item">License<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a class="footer__link-item" href="/project/privacy">Privacy policy</a></li><li class="footer__item"><a href="https://www.apache.org/foundation/sponsorship.html" target="_blank" rel="noopener noreferrer" class="footer__link-item">Sponsorship<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a href="https://www.apache.org/foundation/thanks.html" target="_blank" rel="noopener noreferrer" class="footer__link-item">Thanks<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div></div><div class="footer__bottom text--center"><div class="footer__copyright"><footer class="footer">
         <div class="container">
           <div class="content has-text-centered">
             <p>
@@ -33,7 +33,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/admin/geo-replication/index.html b/content/docs/admin/geo-replication/index.html
index 5bf0404..17481a6 100644
--- a/content/docs/admin/geo-replication/index.html
+++ b/content/docs/admin/geo-replication/index.html
@@ -4,12 +4,12 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">Geo-replication | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/admin/geo-replication"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.17.0"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.17.0"><meta data-rh="true" name="docsearch:version" content="4.17.0"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.17.0"><meta data-rh="true" property="og:title" content="Geo-replication | Apache BookKeeper"><meta data-rh="true" name="description" content="Geo-replication is the replication of data across BookKeeper clusters. In order to enable geo-replication for a group of BookKeeper clusters,"><meta data-rh="true" property="og:description" content="Geo-replication is the replication of data across BookKeeper clusters. In order to enable geo-replication for a group of BookKeeper clusters,"><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/admin/geo-replication"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/admin/geo-replication" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/admin/geo-replication" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
-<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navbar__brand" href="/"><div class="navbar__logo"><img src="/img/bk-logo.svg" alt="Apache Bookkeeper" class="themedImage_ToTc themedImage--light_HNdA"><img src="/img/bk-logo.svg" alt="Apache Bookkeeper" class="themedImage_ToTc themedImage--dark_i4oU"></div><b class="navbar__title text--truncate">Apache BookKeeper</b></a><a class="navbar__item navbar__link" href="/docs/overview/">Documentation</a><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Community</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/community/mailing-lists">Mailing lists</a></li><li><a class="dropdown__link" href="/community/slack">Slack</a></li><li><a href="https://github.com/apache/bookkeeper/issues" target="_blank" rel="noopener noreferrer" class="dropdown__link">Github issues<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a class="dropdown__link" href="/community/releases">Release management</a></li><li><a class="dropdown__link" href="/community/meeting">Community meetings</a></li><li><a class="dropdown__link" href="/community/contributing">Contribution guide</a></li><li><a class="dropdown__link" href="/community/coding-guide">Coding guide</a></li><li><a class="dropdown__link" href="/community/testing">Testing guide</a></li><li><a class="dropdown__link" href="/community/issue-report">Issue report guide</a></li><li><a class="dropdown__link" href="/community/release-guide">Release guide</a></li><li><a class="dropdown__link" href="/community/presentations">Presentations</a></li><li><a class="dropdown__link" href="/community/bookkeeper-proposals">BookKeeper proposals (BP)</a></li></ul></div><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Project</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/project/who">Who are we?</a></li><li><a class="dropdown__link" href="/project/bylaws">Bylaws</a></li><li><a href="https://apache.org/licenses" target="_blank" rel="noopener noreferrer" class="dropdown__link">License<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a class="dropdown__link" href="/project/privacy">Privacy policy</a></li><li><a href="https://www.apache.org/foundation/sponsorship.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Sponsorship<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a href="https://www.apache.org/foundation/thanks.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Thanks<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div></div><div class="navbar__items navbar__items--right"><div class="navbar__item dropdown dropdown--hoverable dropdown--right"><a class="navbar__link" aria-haspopup="true" aria-expanded="false" role="button" href="/docs/admin/autorecovery">4.17.0</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/docs/next/admin/geo-replication">Next</a></li><li><a aria-current="page" class="dropdown__link dropdown__link--active" href="/docs/admin/geo-replication">4.17.0</a></li><li><a class="dropdown__link" href="/docs/4.16.5/admin/geo-replication">4.16.5</a></li><li><a class="dropdown__link" href="/docs/4.15.5/admin/geo-replication">4.15.5</a></li><li><a class="dropdown__link" href="/docs/4.14.8/admin/geo-replication">4.14.8</a></li><li><a class="dropdown__link" href="/docs/4.13.0/admin/geo-replication">4.13.0</a></li><li><a class="dropdown__link" href="/docs/4.12.1/admin/geo-replication">4.12.1</a></li><li><a class="dropdown__link" href="/docs/4.11.1/admin/geo-replication">4.11.1</a></li><li><a class="dropdown__link" href="/docs/4.10.0/admin/geo-replication">4.10.0</a></li><li><a class="dropdown__link" href="/docs/4.9.2/admin/geo-replication">4.9.2</a></li><li><a class="dropdown__link" href="/docs/4.8.2/admin/geo-replication">4.8.2</a></li><li><a class="dropdown__link" href="/docs/4.7.3/admin/geo-replication">4.7.3</a></li><li><a class="dropdown__link" href="/docs/4.6.2/admin/geo-replication">4.6.2</a></li><li><a class="dropdown__link" href="/docs/4.5.1/admin/geo-replication">4.5.1</a></li></ul></div><a class="navbar__item navbar__link" href="/releases">Download</a><div class="toggle_vylO colorModeToggle_DEke"><button class="clean-btn toggleButton_gllP toggleButtonDisabled_aARS" type="button" disabled="" title="Switch between dark and light mode (currently light mode)" aria-label="Switch between dark and light mode (currently light mode)" aria-live="polite"><svg viewBox="0 0 24 24" width="24" height="24" class="lightToggleIcon_pyhR"><path fill="currentColor" d="M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"></path></svg><svg viewBox="0 0 24 24" width="24" height="24" class="darkToggleIcon_wfgR"><path fill="currentColor" d="M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"></path></svg></button></div><div class="searchBox_ZlJk"></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div></nav><div id="docusaurus_skipToContent_fallback" class="main-wrapper mainWrapper_z2l0 docsWrapper_BCFX"><button aria-label="Scroll back to top" class="clean-btn theme-back-to-top-button backToTopButton_sjWU" type="button"></button><div class="docPage__5DB"><main class="docMainContainer_gTbr docMainContainerEnhanced_Uz_u"><div class="container padding-top--md padding-bottom--lg"><div class="row"><div class="col docItemCol_VOVn"><div class="docItemContainer_Djhp"><article><span class="theme-doc-version-badge badge badge--secondary">Version: 4.17.0</span><div class="tocCollapsible_ETCw theme-doc-toc-mobile tocMobile_ITEo"><button type="button" class="clean-btn tocCollapsibleButton_TO0P">On this page</button></div><div class="theme-doc-markdown markdown"><header><h1>Geo-replication</h1></header><p><em>Geo-replication</em> is the replication of data across BookKeeper clusters. In order to enable geo-replication for a group of BookKeeper clusters,</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="global-zookeeper">Global ZooKeeper<a href="#global-zookeeper" class="hash-link" aria-label="Direct link to Global ZooKeeper" title="Direct link to Global ZooKeeper">​</a></h2><p>Setting up a global ZooKeeper quorum is a lot like setting up a cluster-specific quorum. The crucial difference is that</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="geo-replication-across-three-clusters">Geo-replication across three clusters<a href="#geo-replication-across-three-clusters" class="hash-link" aria-label="Direct link to Geo-replication across three clusters" title="Direct link to Geo-replication across three clusters">​</a></h3><p>Let&#x27;s say that you want to set up geo-replication across clusters in regions A, B, and C. First, the BookKeeper clusters in each region must have their own local (cluster-specific) ZooKeeper quorum.</p><blockquote><p>BookKeeper clusters use global ZooKeeper only for metadata storage. Traffic from bookies to ZooKeeper should thus be fairly light in general.</p></blockquote><p>The crucial difference between using cluster-specific ZooKeeper and global ZooKeeper is that bookies is that you need to point all bookies to use the global ZooKeeper setup.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="region-aware-placement-polocy">Region-aware placement polocy<a href="#region-aware-placement-polocy" class="hash-link" aria-label="Direct link to Region-aware placement polocy" title="Direct link to Region-aware placement polocy">​</a></h2><h2 class="anchor anchorWithStickyNavbar_LWe7" id="autorecovery">Autorecovery<a href="#autorecovery" class="hash-link" aria-label="Direct link to Autorecovery" title="Direct link to Autorecovery">​</a></h2></div></article><nav class="pagination-nav docusaurus-mt-lg" aria-label="Docs pages navigation"></nav></div></div><div class="col col--3"><div class="tableOfContents_bqdL thin-scrollbar theme-doc-toc-desktop"><ul class="table-of-contents table-of-contents__left-border"><li><a href="#global-zookeeper" class="table-of-contents__link toc-highlight">Global ZooKeeper</a><ul><li><a href="#geo-replication-across-three-clusters" class="table-of-contents__link toc-highlight">Geo-replication across three clusters</a></li></ul></li><li><a href="#region-aware-placement-polocy" class="table-of-contents__link toc-highlight">Region-aware placement polocy</a></li><li><a href="#autorecovery" class="table-of-contents__link toc-highlight">Autorecovery</a></li></ul></div></div></div></div></main></div></div><footer class="footer footer--dark"><div class="container container-fluid"><div class="row footer__links"><div class="col footer__col"><div class="footer__title">Documentation</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/docs/overview">Overview</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/getting-started/installation">Getting started</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/deployment/manual">Deployment</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/admin/bookies">Administration</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/api/overview">API</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/security/overview">Security</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/development/protocol">Development</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/reference/config">Reference</a></li></ul></div><div class="col footer__col"><div class="footer__title">Community</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/community/mailing-lists">Mailing lists</a></li><li class="footer__item"><a class="footer__link-item" href="/community/slack">Slack</a></li><li class="footer__item"><a href="https://github.com/apache/bookkeeper" target="_blank" rel="noopener noreferrer" class="footer__link-item">Github<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a href="https://twitter.com/asfbookkeeper" target="_blank" rel="noopener noreferrer" class="footer__link-item">Twitter<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div><div class="col footer__col"><div class="footer__title">Project</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/project/who">Who are we?</a></li><li class="footer__item"><a class="footer__link-item" href="/project/bylaws">Bylaws</a></li><li class="footer__item"><a href="https://apache.org/licenses" target="_blank" rel="noopener noreferrer" class="footer__link-item">License<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a class="footer__link-item" href="/project/privacy">Privacy policy</a></li><li class="footer__item"><a href="https://www.apache.org/foundation/sponsorship.html" target="_blank" rel="noopener noreferrer" class="footer__link-item">Sponsorship<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a href="https://www.apache.org/foundation/thanks.html" target="_blank" rel="noopener noreferrer" class="footer__link-item">Thanks<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div></div><div class="footer__bottom text--center"><div class="footer__copyright"><footer class="footer">
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navbar__brand" href="/"><div class="navbar__logo"><img src="/img/bk-logo.svg" alt="Apache Bookkeeper" class="themedImage_ToTc themedImage--light_HNdA"><img src="/img/bk-logo.svg" alt="Apache Bookkeeper" class="themedImage_ToTc themedImage--dark_i4oU"></div><b class="navbar__title text--truncate">Apache BookKeeper</b></a><a class="navbar__item navbar__link" href="/docs/overview/">Documentation</a><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Community</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/community/mailing-lists">Mailing lists</a></li><li><a class="dropdown__link" href="/community/slack">Slack</a></li><li><a href="https://github.com/apache/bookkeeper/issues" target="_blank" rel="noopener noreferrer" class="dropdown__link">Github issues<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a class="dropdown__link" href="/community/releases">Release management</a></li><li><a class="dropdown__link" href="/community/meeting">Community meetings</a></li><li><a class="dropdown__link" href="/community/contributing">Contribution guide</a></li><li><a class="dropdown__link" href="/community/coding-guide">Coding guide</a></li><li><a class="dropdown__link" href="/community/testing">Testing guide</a></li><li><a class="dropdown__link" href="/community/issue-report">Issue report guide</a></li><li><a class="dropdown__link" href="/community/release-guide">Release guide</a></li><li><a class="dropdown__link" href="/community/presentations">Presentations</a></li><li><a class="dropdown__link" href="/community/bookkeeper-proposals">BookKeeper proposals (BP)</a></li></ul></div><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Project</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/project/who">Who are we?</a></li><li><a class="dropdown__link" href="/project/bylaws">Bylaws</a></li><li><a href="https://apache.org/licenses" target="_blank" rel="noopener noreferrer" class="dropdown__link">License<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a class="dropdown__link" href="/project/privacy">Privacy policy</a></li><li><a href="https://www.apache.org/foundation/sponsorship.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Sponsorship<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a href="https://www.apache.org/foundation/thanks.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Thanks<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div></div><div class="navbar__items navbar__items--right"><div class="navbar__item dropdown dropdown--hoverable dropdown--right"><a class="navbar__link" aria-haspopup="true" aria-expanded="false" role="button" href="/docs/overview/">4.17.0</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/docs/next/admin/geo-replication">Next</a></li><li><a aria-current="page" class="dropdown__link dropdown__link--active" href="/docs/admin/geo-replication">4.17.0</a></li><li><a class="dropdown__link" href="/docs/4.16.5/admin/geo-replication">4.16.5</a></li><li><a class="dropdown__link" href="/docs/4.15.5/admin/geo-replication">4.15.5</a></li><li><a class="dropdown__link" href="/docs/4.14.8/admin/geo-replication">4.14.8</a></li><li><a class="dropdown__link" href="/docs/4.13.0/admin/geo-replication">4.13.0</a></li><li><a class="dropdown__link" href="/docs/4.12.1/admin/geo-replication">4.12.1</a></li><li><a class="dropdown__link" href="/docs/4.11.1/admin/geo-replication">4.11.1</a></li><li><a class="dropdown__link" href="/docs/4.10.0/admin/geo-replication">4.10.0</a></li><li><a class="dropdown__link" href="/docs/4.9.2/admin/geo-replication">4.9.2</a></li><li><a class="dropdown__link" href="/docs/4.8.2/admin/geo-replication">4.8.2</a></li><li><a class="dropdown__link" href="/docs/4.7.3/admin/geo-replication">4.7.3</a></li><li><a class="dropdown__link" href="/docs/4.6.2/admin/geo-replication">4.6.2</a></li><li><a class="dropdown__link" href="/docs/4.5.1/admin/geo-replication">4.5.1</a></li></ul></div><a class="navbar__item navbar__link" href="/releases">Download</a><div class="toggle_vylO colorModeToggle_DEke"><button class="clean-btn toggleButton_gllP toggleButtonDisabled_aARS" type="button" disabled="" title="Switch between dark and light mode (currently light mode)" aria-label="Switch between dark and light mode (currently light mode)" aria-live="polite"><svg viewBox="0 0 24 24" width="24" height="24" class="lightToggleIcon_pyhR"><path fill="currentColor" d="M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"></path></svg><svg viewBox="0 0 24 24" width="24" height="24" class="darkToggleIcon_wfgR"><path fill="currentColor" d="M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"></path></svg></button></div><div class="searchBox_ZlJk"></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div></nav><div id="docusaurus_skipToContent_fallback" class="main-wrapper mainWrapper_z2l0 docsWrapper_BCFX"><button aria-label="Scroll back to top" class="clean-btn theme-back-to-top-button backToTopButton_sjWU" type="button"></button><div class="docPage__5DB"><main class="docMainContainer_gTbr docMainContainerEnhanced_Uz_u"><div class="container padding-top--md padding-bottom--lg"><div class="row"><div class="col docItemCol_VOVn"><div class="docItemContainer_Djhp"><article><span class="theme-doc-version-badge badge badge--secondary">Version: 4.17.0</span><div class="tocCollapsible_ETCw theme-doc-toc-mobile tocMobile_ITEo"><button type="button" class="clean-btn tocCollapsibleButton_TO0P">On this page</button></div><div class="theme-doc-markdown markdown"><header><h1>Geo-replication</h1></header><p><em>Geo-replication</em> is the replication of data across BookKeeper clusters. In order to enable geo-replication for a group of BookKeeper clusters,</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="global-zookeeper">Global ZooKeeper<a href="#global-zookeeper" class="hash-link" aria-label="Direct link to Global ZooKeeper" title="Direct link to Global ZooKeeper">​</a></h2><p>Setting up a global ZooKeeper quorum is a lot like setting up a cluster-specific quorum. The crucial difference is that</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="geo-replication-across-three-clusters">Geo-replication across three clusters<a href="#geo-replication-across-three-clusters" class="hash-link" aria-label="Direct link to Geo-replication across three clusters" title="Direct link to Geo-replication across three clusters">​</a></h3><p>Let&#x27;s say that you want to set up geo-replication across clusters in regions A, B, and C. First, the BookKeeper clusters in each region must have their own local (cluster-specific) ZooKeeper quorum.</p><blockquote><p>BookKeeper clusters use global ZooKeeper only for metadata storage. Traffic from bookies to ZooKeeper should thus be fairly light in general.</p></blockquote><p>The crucial difference between using cluster-specific ZooKeeper and global ZooKeeper is that bookies is that you need to point all bookies to use the global ZooKeeper setup.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="region-aware-placement-polocy">Region-aware placement polocy<a href="#region-aware-placement-polocy" class="hash-link" aria-label="Direct link to Region-aware placement polocy" title="Direct link to Region-aware placement polocy">​</a></h2><h2 class="anchor anchorWithStickyNavbar_LWe7" id="autorecovery">Autorecovery<a href="#autorecovery" class="hash-link" aria-label="Direct link to Autorecovery" title="Direct link to Autorecovery">​</a></h2></div></article><nav class="pagination-nav docusaurus-mt-lg" aria-label="Docs pages navigation"></nav></div></div><div class="col col--3"><div class="tableOfContents_bqdL thin-scrollbar theme-doc-toc-desktop"><ul class="table-of-contents table-of-contents__left-border"><li><a href="#global-zookeeper" class="table-of-contents__link toc-highlight">Global ZooKeeper</a><ul><li><a href="#geo-replication-across-three-clusters" class="table-of-contents__link toc-highlight">Geo-replication across three clusters</a></li></ul></li><li><a href="#region-aware-placement-polocy" class="table-of-contents__link toc-highlight">Region-aware placement polocy</a></li><li><a href="#autorecovery" class="table-of-contents__link toc-highlight">Autorecovery</a></li></ul></div></div></div></div></main></div></div><footer class="footer footer--dark"><div class="container container-fluid"><div class="row footer__links"><div class="col footer__col"><div class="footer__title">Documentation</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/docs/overview">Overview</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/getting-started/installation">Getting started</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/deployment/manual">Deployment</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/admin/bookies">Administration</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/api/overview">API</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/security/overview">Security</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/development/protocol">Development</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/reference/config">Reference</a></li></ul></div><div class="col footer__col"><div class="footer__title">Community</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/community/mailing-lists">Mailing lists</a></li><li class="footer__item"><a class="footer__link-item" href="/community/slack">Slack</a></li><li class="footer__item"><a href="https://github.com/apache/bookkeeper" target="_blank" rel="noopener noreferrer" class="footer__link-item">Github<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a href="https://twitter.com/asfbookkeeper" target="_blank" rel="noopener noreferrer" class="footer__link-item">Twitter<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div><div class="col footer__col"><div class="footer__title">Project</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/project/who">Who are we?</a></li><li class="footer__item"><a class="footer__link-item" href="/project/bylaws">Bylaws</a></li><li class="footer__item"><a href="https://apache.org/licenses" target="_blank" rel="noopener noreferrer" class="footer__link-item">License<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a class="footer__link-item" href="/project/privacy">Privacy policy</a></li><li class="footer__item"><a href="https://www.apache.org/foundation/sponsorship.html" target="_blank" rel="noopener noreferrer" class="footer__link-item">Sponsorship<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a href="https://www.apache.org/foundation/thanks.html" target="_blank" rel="noopener noreferrer" class="footer__link-item">Thanks<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div></div><div class="footer__bottom text--center"><div class="footer__copyright"><footer class="footer">
         <div class="container">
           <div class="content has-text-centered">
             <p>
@@ -22,7 +22,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/admin/http/index.html b/content/docs/admin/http/index.html
index 2d369d0..047afd6 100644
--- a/content/docs/admin/http/index.html
+++ b/content/docs/admin/http/index.html
@@ -4,15 +4,15 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">BookKeeper Admin REST API | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/admin/http"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.17.0"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.17.0"><meta data-rh="true" name="docsearch:version" content="4.17.0"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.17.0"><meta data-rh="true" property="og:title" content="BookKeeper Admin REST API | Apache BookKeeper"><meta data-rh="true" name="description" content="This document introduces BookKeeper HTTP endpoints, which can be used for BookKeeper administration."><meta data-rh="true" property="og:description" content="This document introduces BookKeeper HTTP endpoints, which can be used for BookKeeper administration."><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/admin/http"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/admin/http" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/admin/http" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
-<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navbar__brand" href="/"><div class="navbar__logo"><img src="/img/bk-logo.svg" alt="Apache Bookkeeper" class="themedImage_ToTc themedImage--light_HNdA"><img src="/img/bk-logo.svg" alt="Apache Bookkeeper" class="themedImage_ToTc themedImage--dark_i4oU"></div><b class="navbar__title text--truncate">Apache BookKeeper</b></a><a class="navbar__item navbar__link" href="/docs/overview/">Documentation</a><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Community</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/community/mailing-lists">Mailing lists</a></li><li><a class="dropdown__link" href="/community/slack">Slack</a></li><li><a href="https://github.com/apache/bookkeeper/issues" target="_blank" rel="noopener noreferrer" class="dropdown__link">Github issues<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a class="dropdown__link" href="/community/releases">Release management</a></li><li><a class="dropdown__link" href="/community/meeting">Community meetings</a></li><li><a class="dropdown__link" href="/community/contributing">Contribution guide</a></li><li><a class="dropdown__link" href="/community/coding-guide">Coding guide</a></li><li><a class="dropdown__link" href="/community/testing">Testing guide</a></li><li><a class="dropdown__link" href="/community/issue-report">Issue report guide</a></li><li><a class="dropdown__link" href="/community/release-guide">Release guide</a></li><li><a class="dropdown__link" href="/community/presentations">Presentations</a></li><li><a class="dropdown__link" href="/community/bookkeeper-proposals">BookKeeper proposals (BP)</a></li></ul></div><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Project</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/project/who">Who are we?</a></li><li><a class="dropdown__link" href="/project/bylaws">Bylaws</a></li><li><a href="https://apache.org/licenses" target="_blank" rel="noopener noreferrer" class="dropdown__link">License<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a class="dropdown__link" href="/project/privacy">Privacy policy</a></li><li><a href="https://www.apache.org/foundation/sponsorship.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Sponsorship<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a href="https://www.apache.org/foundation/thanks.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Thanks<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div></div><div class="navbar__items navbar__items--right"><div class="navbar__item dropdown dropdown--hoverable dropdown--right"><a class="navbar__link" aria-haspopup="true" aria-expanded="false" role="button" href="/docs/admin/autorecovery">4.17.0</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/docs/next/admin/http">Next</a></li><li><a aria-current="page" class="dropdown__link dropdown__link--active" href="/docs/admin/http">4.17.0</a></li><li><a class="dropdown__link" href="/docs/4.16.5/admin/http">4.16.5</a></li><li><a class="dropdown__link" href="/docs/4.15.5/admin/http">4.15.5</a></li><li><a class="dropdown__link" href="/docs/4.14.8/admin/http">4.14.8</a></li><li><a class="dropdown__link" href="/docs/4.13.0/admin/http">4.13.0</a></li><li><a class="dropdown__link" href="/docs/4.12.1/admin/http">4.12.1</a></li><li><a class="dropdown__link" href="/docs/4.11.1/admin/http">4.11.1</a></li><li><a class="dropdown__link" href="/docs/4.10.0/admin/http">4.10.0</a></li><li><a class="dropdown__link" href="/docs/4.9.2/admin/http">4.9.2</a></li><li><a class="dropdown__link" href="/docs/4.8.2/admin/http">4.8.2</a></li><li><a class="dropdown__link" href="/docs/4.7.3/admin/http">4.7.3</a></li><li><a class="dropdown__link" href="/docs/4.6.2/admin/http">4.6.2</a></li><li><a class="dropdown__link" href="/docs/4.5.1/overview/">4.5.1</a></li></ul></div><a class="navbar__item navbar__link" href="/releases">Download</a><div class="toggle_vylO colorModeToggle_DEke"><button class="clean-btn toggleButton_gllP toggleButtonDisabled_aARS" type="button" disabled="" title="Switch between dark and light mode (currently light mode)" aria-label="Switch between dark and light mode (currently light mode)" aria-live="polite"><svg viewBox="0 0 24 24" width="24" height="24" class="lightToggleIcon_pyhR"><path fill="currentColor" d="M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"></path></svg><svg viewBox="0 0 24 24" width="24" height="24" class="darkToggleIcon_wfgR"><path fill="currentColor" d="M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"></path></svg></button></div><div class="searchBox_ZlJk"></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div></nav><div id="docusaurus_skipToContent_fallback" class="main-wrapper mainWrapper_z2l0 docsWrapper_BCFX"><button aria-label="Scroll back to top" class="clean-btn theme-back-to-top-button backToTopButton_sjWU" type="button"></button><div class="docPage__5DB"><main class="docMainContainer_gTbr docMainContainerEnhanced_Uz_u"><div class="container padding-top--md padding-bottom--lg"><div class="row"><div class="col docItemCol_VOVn"><div class="docItemContainer_Djhp"><article><span class="theme-doc-version-badge badge badge--secondary">Version: 4.17.0</span><div class="tocCollapsible_ETCw theme-doc-toc-mobile tocMobile_ITEo"><button type="button" class="clean-btn tocCollapsibleButton_TO0P">On this page</button></div><div class="theme-doc-markdown markdown"><header><h1>BookKeeper Admin REST API</h1></header><p>This document introduces BookKeeper HTTP endpoints, which can be used for BookKeeper administration.
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navbar__brand" href="/"><div class="navbar__logo"><img src="/img/bk-logo.svg" alt="Apache Bookkeeper" class="themedImage_ToTc themedImage--light_HNdA"><img src="/img/bk-logo.svg" alt="Apache Bookkeeper" class="themedImage_ToTc themedImage--dark_i4oU"></div><b class="navbar__title text--truncate">Apache BookKeeper</b></a><a aria-current="page" class="navbar__item navbar__link navbar__link--active" href="/docs/overview/">Documentation</a><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Community</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/community/mailing-lists">Mailing lists</a></li><li><a class="dropdown__link" href="/community/slack">Slack</a></li><li><a href="https://github.com/apache/bookkeeper/issues" target="_blank" rel="noopener noreferrer" class="dropdown__link">Github issues<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a class="dropdown__link" href="/community/releases">Release management</a></li><li><a class="dropdown__link" href="/community/meeting">Community meetings</a></li><li><a class="dropdown__link" href="/community/contributing">Contribution guide</a></li><li><a class="dropdown__link" href="/community/coding-guide">Coding guide</a></li><li><a class="dropdown__link" href="/community/testing">Testing guide</a></li><li><a class="dropdown__link" href="/community/issue-report">Issue report guide</a></li><li><a class="dropdown__link" href="/community/release-guide">Release guide</a></li><li><a class="dropdown__link" href="/community/presentations">Presentations</a></li><li><a class="dropdown__link" href="/community/bookkeeper-proposals">BookKeeper proposals (BP)</a></li></ul></div><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Project</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/project/who">Who are we?</a></li><li><a class="dropdown__link" href="/project/bylaws">Bylaws</a></li><li><a href="https://apache.org/licenses" target="_blank" rel="noopener noreferrer" class="dropdown__link">License<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a class="dropdown__link" href="/project/privacy">Privacy policy</a></li><li><a href="https://www.apache.org/foundation/sponsorship.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Sponsorship<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a href="https://www.apache.org/foundation/thanks.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Thanks<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div></div><div class="navbar__items navbar__items--right"><div class="navbar__item dropdown dropdown--hoverable dropdown--right"><a class="navbar__link" aria-haspopup="true" aria-expanded="false" role="button" href="/docs/overview/">4.17.0</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/docs/next/admin/http">Next</a></li><li><a aria-current="page" class="dropdown__link dropdown__link--active" href="/docs/admin/http">4.17.0</a></li><li><a class="dropdown__link" href="/docs/4.16.5/admin/http">4.16.5</a></li><li><a class="dropdown__link" href="/docs/4.15.5/admin/http">4.15.5</a></li><li><a class="dropdown__link" href="/docs/4.14.8/admin/http">4.14.8</a></li><li><a class="dropdown__link" href="/docs/4.13.0/admin/http">4.13.0</a></li><li><a class="dropdown__link" href="/docs/4.12.1/admin/http">4.12.1</a></li><li><a class="dropdown__link" href="/docs/4.11.1/admin/http">4.11.1</a></li><li><a class="dropdown__link" href="/docs/4.10.0/admin/http">4.10.0</a></li><li><a class="dropdown__link" href="/docs/4.9.2/admin/http">4.9.2</a></li><li><a class="dropdown__link" href="/docs/4.8.2/admin/http">4.8.2</a></li><li><a class="dropdown__link" href="/docs/4.7.3/admin/http">4.7.3</a></li><li><a class="dropdown__link" href="/docs/4.6.2/admin/http">4.6.2</a></li><li><a class="dropdown__link" href="/docs/4.5.1/overview/">4.5.1</a></li></ul></div><a class="navbar__item navbar__link" href="/releases">Download</a><div class="toggle_vylO colorModeToggle_DEke"><button class="clean-btn toggleButton_gllP toggleButtonDisabled_aARS" type="button" disabled="" title="Switch between dark and light mode (currently light mode)" aria-label="Switch between dark and light mode (currently light mode)" aria-live="polite"><svg viewBox="0 0 24 24" width="24" height="24" class="lightToggleIcon_pyhR"><path fill="currentColor" d="M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"></path></svg><svg viewBox="0 0 24 24" width="24" height="24" class="darkToggleIcon_wfgR"><path fill="currentColor" d="M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"></path></svg></button></div><div class="searchBox_ZlJk"></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div></nav><div id="docusaurus_skipToContent_fallback" class="main-wrapper mainWrapper_z2l0 docsWrapper_BCFX"><button aria-label="Scroll back to top" class="clean-btn theme-back-to-top-button backToTopButton_sjWU" type="button"></button><div class="docPage__5DB"><aside class="theme-doc-sidebar-container docSidebarContainer_b6E3"><div class="sidebarViewport_Xe31"><div class="sidebar_njMd"><nav aria-label="Docs sidebar" class="menu thin-scrollbar menu_SIkG"><ul class="theme-doc-sidebar-menu menu__list"><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-1 menu__list-item"><a class="menu__link" href="/docs/overview/">Overview</a></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/getting-started/installation">Getting started</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/deployment/manual">Deployment</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret menu__link--active" aria-expanded="true" href="/docs/admin/bookies">Administration</a></div><ul style="display:block;overflow:visible;height:auto" class="menu__list"><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/admin/bookies">BookKeeper administration</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/admin/autorecovery">AutoRecovery</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/admin/metrics">Metrics collection</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/admin/upgrade">Upgrade</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link menu__link--active" aria-current="page" tabindex="0" href="/docs/admin/http">Admin REST API</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/admin/decomission">Decommissioning Bookies</a></li></ul></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/api/overview">API</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/security/overview">Security</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/development/protocol">Development</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/reference/config">Reference</a></div></li></ul></nav></div></div></aside><main class="docMainContainer_gTbr"><div class="container padding-top--md padding-bottom--lg"><div class="row"><div class="col docItemCol_VOVn"><div class="docItemContainer_Djhp"><article><span class="theme-doc-version-badge badge badge--secondary">Version: 4.17.0</span><div class="tocCollapsible_ETCw theme-doc-toc-mobile tocMobile_ITEo"><button type="button" class="clean-btn tocCollapsibleButton_TO0P">On this page</button></div><div class="theme-doc-markdown markdown"><header><h1>BookKeeper Admin REST API</h1></header><p>This document introduces BookKeeper HTTP endpoints, which can be used for BookKeeper administration.
 To use this feature, set <code>httpServerEnabled</code> to <code>true</code> in file <code>conf/bk_server.conf</code>.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="all-the-endpoints">All the endpoints<a href="#all-the-endpoints" class="hash-link" aria-label="Direct link to All the endpoints" title="Direct link to All the endpoints">​</a></h2><p>Currently all the HTTP endpoints could be divided into these 5 components:</p><ol><li>Heartbeat: heartbeat for a specific bookie.</li><li>Config: doing the server configuration for a specific bookie.</li><li>Ledger: HTTP endpoints related to ledgers.</li><li>Bookie: HTTP endpoints related to bookies.</li><li>AutoRecovery: HTTP endpoints related to auto recovery.</li></ol><h2 class="anchor anchorWithStickyNavbar_LWe7" id="heartbeat">Heartbeat<a href="#heartbeat" class="hash-link" aria-label="Direct link to Heartbeat" title="Direct link to Heartbeat">​</a></h2><h3 class="anchor anchorWithStickyNavbar_LWe7" id="endpoint-heartbeat">Endpoint: /heartbeat<a href="#endpoint-heartbeat" class="hash-link" aria-label="Direct link to Endpoint: /heartbeat" title="Direct link to Endpoint: /heartbeat">​</a></h3><ul><li>Method: GET</li><li>Description: Get heartbeat status for a specific bookie</li><li>Response: </li></ul><table><thead><tr><th align="left">Code</th><th align="left">Description</th></tr></thead><tbody><tr><td align="left">200</td><td align="left">Successful operation</td></tr></tbody></table><h2 class="anchor anchorWithStickyNavbar_LWe7" id="config">Config<a href="#config" class="hash-link" aria-label="Direct link to Config" title="Direct link to Config">​</a></h2><h3 class="anchor anchorWithStickyNavbar_LWe7" id="endpoint-apiv1configserver_config">Endpoint: /api/v1/config/server_config<a href="#endpoint-apiv1configserver_config" class="hash-link" aria-label="Direct link to Endpoint: /api/v1/config/server_config" title="Direct link to Endpoint: /api/v1/config/server_config">​</a></h3><ol><li><p>Method: GET</p><ul><li><p>Description: Get value of all configured values overridden on local server config</p></li><li><p>Response:  </p><table><thead><tr><th align="left">Code</th><th align="left">Description</th></tr></thead><tbody><tr><td align="left">200</td><td align="left">Successful operation</td></tr><tr><td align="left">403</td><td align="left">Permission denied</td></tr><tr><td align="left">404</td><td align="left">Not found</td></tr></tbody></table></li></ul></li><li><p>Method: PUT</p><ul><li><p>Description: Update a local server config</p></li><li><p>Parameters: </p><table><thead><tr><th align="left">Name</th><th align="left">Type</th><th align="left">Required</th><th align="left">Description</th></tr></thead><tbody><tr><td align="left">configName</td><td align="left">String</td><td align="left">Yes</td><td align="left">Configuration name(key)</td></tr><tr><td align="left">configValue</td><td align="left">String</td><td align="left">Yes</td><td align="left">Configuration value(value)</td></tr></tbody></table></li><li><p>Body: </p><div class="language-json codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-json codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">   </span><span class="token property" style="color:#36acaa">&quot;configName1&quot;</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">&quot;configValue1&quot;</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">   </span><span class="token property" style="color:#36acaa">&quot;configName2&quot;</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">&quot;configValue2&quot;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div></li><li><p>Response:  </p><table><thead><tr><th align="left">Code</th><th align="left">Description</th></tr></thead><tbody><tr><td align="left">200</td><td align="left">Successful operation</td></tr><tr><td align="left">403</td><td align="left">Permission denied</td></tr><tr><td align="left">404</td><td align="left">Not found</td></tr></tbody></table></li></ul></li></ol><h2 class="anchor anchorWithStickyNavbar_LWe7" id="metrics">Metrics<a href="#metrics" class="hash-link" aria-label="Direct link to Metrics" title="Direct link to Metrics">​</a></h2><h3 class="anchor anchorWithStickyNavbar_LWe7" id="endpoint-metrics">Endpoint: /metrics<a href="#endpoint-metrics" class="hash-link" aria-label="Direct link to Endpoint: /metrics" title="Direct link to Endpoint: /metrics">​</a></h3><ol><li><p>Method: GET</p><ul><li><p>Description: Get all metrics by calling <code>writeAllMetrics()</code> of <code>statsProvider</code> internally</p></li><li><p>Response:  </p><table><thead><tr><th align="left">Code</th><th align="left">Description</th></tr></thead><tbody><tr><td align="left">200</td><td align="left">Successful operation</td></tr><tr><td align="left">403</td><td align="left">Permission denied</td></tr><tr><td align="left">404</td><td align="left">Not found</td></tr></tbody></table></li></ul></li></ol><h2 class="anchor anchorWithStickyNavbar_LWe7" id="ledger">Ledger<a href="#ledger" class="hash-link" aria-label="Direct link to Ledger" title="Direct link to Ledger">​</a></h2><h3 class="anchor anchorWithStickyNavbar_LWe7" id="endpoint-apiv1ledgerdeleteledger_idledger_id">Endpoint: /api/v1/ledger/delete/?ledger_id=<!-- -->&lt;<!-- -->ledger_id<!-- -->&gt;<a href="#endpoint-apiv1ledgerdeleteledger_idledger_id" class="hash-link" aria-label="Direct link to endpoint-apiv1ledgerdeleteledger_idledger_id" title="Direct link to endpoint-apiv1ledgerdeleteledger_idledger_id">​</a></h3><ol><li><p>Method: DELETE</p><ul><li><p>Description: Delete a ledger.</p></li><li><p>Parameters: </p><table><thead><tr><th align="left">Name</th><th align="left">Type</th><th align="left">Required</th><th align="left">Description</th></tr></thead><tbody><tr><td align="left">ledger_id</td><td align="left">Long</td><td align="left">Yes</td><td align="left">ledger id of the ledger.</td></tr></tbody></table></li><li><p>Response:  </p><table><thead><tr><th align="left">Code</th><th align="left">Description</th></tr></thead><tbody><tr><td align="left">200</td><td align="left">Successful operation</td></tr><tr><td align="left">403</td><td align="left">Permission denied</td></tr><tr><td align="left">404</td><td align="left">Not found</td></tr></tbody></table></li></ul></li></ol><h3 class="anchor anchorWithStickyNavbar_LWe7" id="endpoint-apiv1ledgerlistprint_metadatametadata">Endpoint: /api/v1/ledger/list/?print_metadata=<!-- -->&lt;<!-- -->metadata<!-- -->&gt;<a href="#endpoint-apiv1ledgerlistprint_metadatametadata" class="hash-link" aria-label="Direct link to endpoint-apiv1ledgerlistprint_metadatametadata" title="Direct link to endpoint-apiv1ledgerlistprint_metadatametadata">​</a></h3><ol><li><p>Method: GET</p><ul><li><p>Description: List all the ledgers.</p></li><li><p>Parameters: </p><table><thead><tr><th align="left">Name</th><th align="left">Type</th><th align="left">Required</th><th align="left">Description</th></tr></thead><tbody><tr><td align="left">print_metadata</td><td align="left">Boolean</td><td align="left">No</td><td align="left">whether print out metadata</td></tr></tbody></table></li><li><p>Response:  </p><table><thead><tr><th align="left">Code</th><th align="left">Description</th></tr></thead><tbody><tr><td align="left">200</td><td align="left">Successful operation</td></tr><tr><td align="left">403</td><td align="left">Permission denied</td></tr><tr><td align="left">404</td><td align="left">Not found</td></tr></tbody></table></li><li><p>Response Body format:  </p><div class="language-json codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-json codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token property" style="color:#36acaa">&quot;ledgerId1&quot;</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">&quot;ledgerMetadata1&quot;</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token property" style="color:#36acaa">&quot;ledgerId2&quot;</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">&quot;ledgerMetadata2&quot;</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  ...</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div></li></ul></li></ol><h3 class="anchor anchorWithStickyNavbar_LWe7" id="endpoint-apiv1ledgermetadataledger_idledger_id">Endpoint: /api/v1/ledger/metadata/?ledger_id=<!-- -->&lt;<!-- -->ledger_id<!-- -->&gt;<a href="#endpoint-apiv1ledgermetadataledger_idledger_id" class="hash-link" aria-label="Direct link to endpoint-apiv1ledgermetadataledger_idledger_id" title="Direct link to endpoint-apiv1ledgermetadataledger_idledger_id">​</a></h3><ol><li><p>Method: GET</p><ul><li><p>Description: Get the metadata of a ledger.</p></li><li><p>Parameters: </p><table><thead><tr><th align="left">Name</th><th align="left">Type</th><th align="left">Required</th><th align="left">Description</th></tr></thead><tbody><tr><td align="left">ledger_id</td><td align="left">Long</td><td align="left">Yes</td><td align="left">ledger id of the ledger.</td></tr></tbody></table></li><li><p>Response:  </p><table><thead><tr><th align="left">Code</th><th align="left">Description</th></tr></thead><tbody><tr><td align="left">200</td><td align="left">Successful operation</td></tr><tr><td align="left">403</td><td align="left">Permission denied</td></tr><tr><td align="left">404</td><td align="left">Not found</td></tr></tbody></table></li><li><p>Response Body format:  </p><div class="language-json codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-json codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token property" style="color:#36acaa">&quot;ledgerId1&quot;</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">&quot;ledgerMetadata1&quot;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div></li></ul></li></ol><h3 class="anchor anchorWithStickyNavbar_LWe7" id="endpoint-apiv1ledgerreadledger_idledger_idstart_entry_idstart_entry_idend_entry_idend_entry_id">Endpoint: /api/v1/ledger/read/?ledger_id=<!-- -->&lt;<!-- -->ledger_id<!-- -->&gt;<!-- -->&amp;start_entry_id=<!-- -->&lt;<!-- -->start_entry_id<!-- -->&gt;<!-- -->&amp;end_entry_id=<!-- -->&lt;<!-- -->end_entry_id<!-- -->&gt;<a href="#endpoint-apiv1ledgerreadledger_idledger_idstart_entry_idstart_entry_idend_entry_idend_entry_id" class="hash-link" aria-label="Direct link to endpoint-apiv1ledgerreadledger_idledger_idstart_entry_idstart_entry_idend_entry_idend_entry_id" title="Direct link to endpoint-apiv1ledgerreadledger_idledger_idstart_entry_idstart_entry_idend_entry_idend_entry_id">​</a></h3><ol><li><p>Method: GET</p><ul><li><p>Description: Read a range of entries from ledger.</p></li><li><p>Parameters: </p><table><thead><tr><th align="left">Name</th><th align="left">Type</th><th align="left">Required</th><th align="left">Description</th></tr></thead><tbody><tr><td align="left">ledger_id</td><td align="left">Long</td><td align="left">Yes</td><td align="left">ledger id of the ledger.</td></tr><tr><td align="left">start_entry_id</td><td align="left">Long</td><td align="left">No</td><td align="left">start entry id of read range.</td></tr><tr><td align="left">end_entry_id</td><td align="left">Long</td><td align="left">No</td><td align="left">end entry id of read range.</td></tr></tbody></table></li><li><p>Response:  </p><table><thead><tr><th align="left">Code</th><th align="left">Description</th></tr></thead><tbody><tr><td align="left">200</td><td align="left">Successful operation</td></tr><tr><td align="left">403</td><td align="left">Permission denied</td></tr><tr><td align="left">404</td><td align="left">Not found</td></tr></tbody></table></li><li><p>Response Body format:  </p><div class="language-json codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-json codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token property" style="color:#36acaa">&quot;entryId1&quot;</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">&quot;entry content 1&quot;</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token property" style="color:#36acaa">&quot;entryId2&quot;</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">&quot;entry content 2&quot;</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  ...</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div></li></ul></li></ol><h2 class="anchor anchorWithStickyNavbar_LWe7" id="bookie">Bookie<a href="#bookie" class="hash-link" aria-label="Direct link to Bookie" title="Direct link to Bookie">​</a></h2><h3 class="anchor anchorWithStickyNavbar_LWe7" id="endpoint-apiv1bookieinfo">Endpoint: /api/v1/bookie/info<a href="#endpoint-apiv1bookieinfo" class="hash-link" aria-label="Direct link to Endpoint: /api/v1/bookie/info" title="Direct link to Endpoint: /api/v1/bookie/info">​</a></h3><ol><li><p>Method: GET</p><ul><li><p>Description:  Get bookie info</p></li><li><p>Response:</p><table><thead><tr><th align="left">Code</th><th align="left">Description</th></tr></thead><tbody><tr><td align="left">200</td><td align="left">Successful operation</td></tr><tr><td align="left">403</td><td align="left">Permission denied</td></tr><tr><td align="left">501</td><td align="left">Not implemented</td></tr></tbody></table></li><li><p>Body:</p><div class="language-json codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-json codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">   </span><span class="token property" style="color:#36acaa">&quot;freeSpace&quot;</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">0</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">   </span><span class="token property" style="color:#36acaa">&quot;totalSpace&quot;</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">0</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">}</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div></li></ul></li></ol><h3 class="anchor anchorWithStickyNavbar_LWe7" id="endpoint-apiv1bookielist_bookiestypetypeprint_hostnameshostnames">Endpoint: /api/v1/bookie/list_bookies/?type=<!-- -->&lt;<!-- -->type<!-- -->&gt;<!-- -->&amp;print_hostnames=<!-- -->&lt;<!-- -->hostnames<!-- -->&gt;<a href="#endpoint-apiv1bookielist_bookiestypetypeprint_hostnameshostnames" class="hash-link" aria-label="Direct link to endpoint-apiv1bookielist_bookiestypetypeprint_hostnameshostnames" title="Direct link to endpoint-apiv1bookielist_bookiestypetypeprint_hostnameshostnames">​</a></h3><ol><li><p>Method: GET</p><ul><li><p>Description:  Get all the available bookies.</p></li><li><p>Parameters: </p><table><thead><tr><th align="left">Name</th><th align="left">Type</th><th align="left">Required</th><th align="left">Description</th></tr></thead><tbody><tr><td align="left">type</td><td align="left">String</td><td align="left">Yes</td><td align="left">value: &quot;rw&quot; or &quot;ro&quot; , list read-write/read-only bookies.</td></tr><tr><td align="left">print_hostnames</td><td align="left">Boolean</td><td align="left">No</td><td align="left">whether print hostname of bookies.</td></tr></tbody></table></li><li><p>Response:  </p><table><thead><tr><th align="left">Code</th><th align="left">Description</th></tr></thead><tbody><tr><td align="left">200</td><td align="left">Successful operation</td></tr><tr><td align="left">403</td><td align="left">Permission denied</td></tr><tr><td align="left">404</td><td align="left">Not found</td></tr></tbody></table></li><li><p>Response Body format:  </p><div class="language-json codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-json codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token property" style="color:#36acaa">&quot;bookieSocketAddress1&quot;</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">&quot;hostname1&quot;</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token property" style="color:#36acaa">&quot;bookieSocketAddress2&quot;</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">&quot;hostname2&quot;</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  ...</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div></li></ul></li></ol><h3 class="anchor anchorWithStickyNavbar_LWe7" id="endpoint-apiv1bookielist_bookie_info">Endpoint: /api/v1/bookie/list_bookie_info<a href="#endpoint-apiv1bookielist_bookie_info" class="hash-link" aria-label="Direct link to Endpoint: /api/v1/bookie/list_bookie_info" title="Direct link to Endpoint: /api/v1/bookie/list_bookie_info">​</a></h3><ol><li><p>Method: GET</p><ul><li><p>Description:  Get bookies disk usage info of this cluster.</p></li><li><p>Response:  </p><table><thead><tr><th align="left">Code</th><th align="left">Description</th></tr></thead><tbody><tr><td align="left">200</td><td align="left">Successful operation</td></tr><tr><td align="left">403</td><td align="left">Permission denied</td></tr><tr><td align="left">404</td><td align="left">Not found</td></tr></tbody></table></li><li><p>Response Body format:  </p><div class="language-json codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-json codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token property" style="color:#36acaa">&quot;bookieAddress&quot;</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain">free</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> xxx</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> total</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> xxx</span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token property" style="color:#36acaa">&quot;bookieAddress&quot;</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain">free</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> xxx</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> total</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> xxx</span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  ...</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token property" style="color:#36acaa">&quot;clusterInfo&quot;</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain">total_free</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> xxx</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> total</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> xxx</span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div></li></ul></li></ol><h3 class="anchor anchorWithStickyNavbar_LWe7" id="endpoint-apiv1bookiecluster_info">Endpoint: /api/v1/bookie/cluster_info<a href="#endpoint-apiv1bookiecluster_info" class="hash-link" aria-label="Direct link to Endpoint: /api/v1/bookie/cluster_info" title="Direct link to Endpoint: /api/v1/bookie/cluster_info">​</a></h3><ol><li><p>Method: GET</p><ul><li><p>Description:  Get top-level info of this cluster.</p></li><li><p>Response:</p><table><thead><tr><th align="left">Code</th><th align="left">Description</th></tr></thead><tbody><tr><td align="left">200</td><td align="left">Successful operation</td></tr><tr><td align="left">403</td><td align="left">Permission denied</td></tr><tr><td align="left">404</td><td align="left">Not found</td></tr></tbody></table></li><li><p>Response Body format:</p><div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain"> ```json</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> {</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">   &quot;auditorElected&quot; : false,</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">   &quot;auditorId&quot; : &quot;&quot;,</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">   &quot;clusterUnderReplicated&quot; : false,</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">   &quot;ledgerReplicationEnabled&quot; : true,</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">   &quot;totalBookiesCount&quot; : 1,</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">   &quot;writableBookiesCount&quot; : 1,</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">   &quot;readonlyBookiesCount&quot; : 0,</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">   &quot;unavailableBookiesCount&quot; : 0</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> }</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> ```    </span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p><code>clusterUnderReplicated</code> is true if there is any underreplicated ledger known currently.
 Trigger audit to increase precision. Audit might not be possible if <code>auditorElected</code> is false or
-<code>ledgerReplicationEnabled</code> is false.</p></li></ul><p><code>totalBookiesCount</code> = <code>writableBookiesCount</code> + <code>readonlyBookiesCount</code> + <code>unavailableBookiesCount</code>.</p></li></ol><h3 class="anchor anchorWithStickyNavbar_LWe7" id="endpoint-apiv1bookielast_log_mark">Endpoint: /api/v1/bookie/last_log_mark<a href="#endpoint-apiv1bookielast_log_mark" class="hash-link" aria-label="Direct link to Endpoint: /api/v1/bookie/last_log_mark" title="Direct link to Endpoint: /api/v1/bookie/last_log_mark">​</a></h3><ol><li><p>Method: GET</p><ul><li><p>Description:  Get the last log marker.</p></li><li><p>Response:  </p><table><thead><tr><th align="left">Code</th><th align="left">Description</th></tr></thead><tbody><tr><td align="left">200</td><td align="left">Successful operation</td></tr><tr><td align="left">403</td><td align="left">Permission denied</td></tr><tr><td align="left">404</td><td align="left">Not found</td></tr></tbody></table></li><li><p>Response Body format:  </p><div class="language-json codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-json codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  JournalId1 </span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> position1</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  JournalId2 </span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> position2</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  ...</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div></li></ul></li></ol><h3 class="anchor anchorWithStickyNavbar_LWe7" id="endpoint-apiv1bookielist_disk_filefile_typetype">Endpoint: /api/v1/bookie/list_disk_file/?file_type=<!-- -->&lt;<!-- -->type<!-- -->&gt;<a href="#endpoint-apiv1bookielist_disk_filefile_typetype" class="hash-link" aria-label="Direct link to endpoint-apiv1bookielist_disk_filefile_typetype" title="Direct link to endpoint-apiv1bookielist_disk_filefile_typetype">​</a></h3><ol><li><p>Method: GET</p><ul><li><p>Description:  Get all the files on disk of current bookie.</p></li><li><p>Parameters: </p><table><thead><tr><th align="left">Name</th><th align="left">Type</th><th align="left">Required</th><th align="left">Description</th></tr></thead><tbody><tr><td align="left">type</td><td align="left">String</td><td align="left">No</td><td align="left">file type: journal/entrylog/index.</td></tr></tbody></table></li><li><p>Response:  </p><table><thead><tr><th align="left">Code</th><th align="left">Description</th></tr></thead><tbody><tr><td align="left">200</td><td align="left">Successful operation</td></tr><tr><td align="left">403</td><td align="left">Permission denied</td></tr><tr><td align="left">404</td><td align="left">Not found</td></tr></tbody></table></li><li><p>Response Body format:  </p><div class="language-json codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-json codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token property" style="color:#36acaa">&quot;journal files&quot;</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">&quot;filename1 filename2 ...&quot;</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token property" style="color:#36acaa">&quot;entrylog files&quot;</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">&quot;filename1 filename2...&quot;</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token property" style="color:#36acaa">&quot;index files&quot;</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">&quot;filename1 filename2 ...&quot;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div></li></ul></li></ol><h3 class="anchor anchorWithStickyNavbar_LWe7" id="endpoint-apiv1bookieexpand_storage">Endpoint: /api/v1/bookie/expand_storage<a href="#endpoint-apiv1bookieexpand_storage" class="hash-link" aria-label="Direct link to Endpoint: /api/v1/bookie/expand_storage" title="Direct link to Endpoint: /api/v1/bookie/expand_storage">​</a></h3><ol><li><p>Method: PUT</p><ul><li><p>Description:  Expand storage for a bookie.</p></li><li><p>Response:  </p><table><thead><tr><th align="left">Code</th><th align="left">Description</th></tr></thead><tbody><tr><td align="left">200</td><td align="left">Successful operation</td></tr><tr><td align="left">403</td><td align="left">Permission denied</td></tr><tr><td align="left">404</td><td align="left">Not found</td></tr></tbody></table></li></ul></li></ol><h3 class="anchor anchorWithStickyNavbar_LWe7" id="endpoint-apiv1bookiegc">Endpoint: /api/v1/bookie/gc<a href="#endpoint-apiv1bookiegc" class="hash-link" aria-label="Direct link to Endpoint: /api/v1/bookie/gc" title="Direct link to Endpoint: /api/v1/bookie/gc">​</a></h3><ol><li><p>Method: PUT</p><ul><li><p>Description:  trigger gc for this bookie.</p></li><li><p>Response:  </p><table><thead><tr><th align="left">Code</th><th align="left">Description</th></tr></thead><tbody><tr><td align="left">200</td><td align="left">Successful operation</td></tr><tr><td align="left">403</td><td align="left">Permission denied</td></tr><tr><td align="left">404</td><td align="left">Not found</td></tr></tbody></table></li></ul></li><li><p>Method: GET</p><ul><li><p>Description:  whether force triggered Garbage Collection is running or not for this bookie. true for is running.</p></li><li><p>Response:</p><table><thead><tr><th align="left">Code</th><th align="left">Description</th></tr></thead><tbody><tr><td align="left">200</td><td align="left">Successful operation</td></tr><tr><td align="left">403</td><td align="left">Permission denied</td></tr><tr><td align="left">404</td><td align="left">Not found</td></tr></tbody></table></li><li><p>Body:</p><div class="language-json codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-json codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">   </span><span class="token property" style="color:#36acaa">&quot;is_in_force_gc&quot;</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">&quot;false&quot;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div></li></ul></li></ol><h3 class="anchor anchorWithStickyNavbar_LWe7" id="endpoint-apiv1bookiegc_details">Endpoint: /api/v1/bookie/gc_details<a href="#endpoint-apiv1bookiegc_details" class="hash-link" aria-label="Direct link to Endpoint: /api/v1/bookie/gc_details" title="Direct link to Endpoint: /api/v1/bookie/gc_details">​</a></h3><ol><li><p>Method: GET</p><ul><li><p>Description:  get details of Garbage Collection Thread, like whether it is in compacting, last compaction time, compaction counter, etc.</p></li><li><p>Response:</p><table><thead><tr><th align="left">Code</th><th align="left">Description</th></tr></thead><tbody><tr><td align="left">200</td><td align="left">Successful operation</td></tr><tr><td align="left">403</td><td align="left">Permission denied</td></tr><tr><td align="left">404</td><td align="left">Not found</td></tr></tbody></table></li><li><p>Body:</p><div class="language-json codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-json codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token punctuation" style="color:#393A34">[</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">   </span><span class="token property" style="color:#36acaa">&quot;forceCompacting&quot;</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token boolean" style="color:#36acaa">false</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">   </span><span class="token property" style="color:#36acaa">&quot;majorCompacting&quot;</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token boolean" style="color:#36acaa">false</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">   </span><span class="token property" style="color:#36acaa">&quot;minorCompacting&quot;</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token boolean" style="color:#36acaa">false</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">   </span><span class="token property" style="color:#36acaa">&quot;lastMajorCompactionTime&quot;</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">1544578144944</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">   </span><span class="token property" style="color:#36acaa">&quot;lastMinorCompactionTime&quot;</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">1544578144944</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">   </span><span class="token property" style="color:#36acaa">&quot;majorCompactionCounter&quot;</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">1</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">   </span><span class="token property" style="color:#36acaa">&quot;minorCompactionCounter&quot;</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">0</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">]</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div></li></ul></li></ol><h3 class="anchor anchorWithStickyNavbar_LWe7" id="endpoint-apiv1bookiegcsuspend_compaction">Endpoint: /api/v1/bookie/gc/suspend_compaction<a href="#endpoint-apiv1bookiegcsuspend_compaction" class="hash-link" aria-label="Direct link to Endpoint: /api/v1/bookie/gc/suspend_compaction" title="Direct link to Endpoint: /api/v1/bookie/gc/suspend_compaction">​</a></h3><ol><li><p>Method: PUT</p><ul><li><p>Description:  suspend the next compaction stage for this bookie.</p></li><li><p>Body:</p><div class="language-json codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-json codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">   </span><span class="token property" style="color:#36acaa">&quot;suspendMajor&quot;</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">&quot;true&quot;</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">   </span><span class="token property" style="color:#36acaa">&quot;suspendMinor&quot;</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">&quot;true&quot;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div></li><li><p>Response:</p><table><thead><tr><th align="left">Code</th><th align="left">Description</th></tr></thead><tbody><tr><td align="left">200</td><td align="left">Successful operation</td></tr><tr><td align="left">403</td><td align="left">Permission denied</td></tr><tr><td align="left">404</td><td align="left">Not found</td></tr></tbody></table></li></ul></li><li><p>Method: GET</p><ul><li><p>Description:  whether major or minor compaction  is suspending or not for this bookie. true for is running.</p></li><li><p>Response:</p><table><thead><tr><th align="left">Code</th><th align="left">Description</th></tr></thead><tbody><tr><td align="left">200</td><td align="left">Successful operation</td></tr><tr><td align="left">403</td><td align="left">Permission denied</td></tr><tr><td align="left">404</td><td align="left">Not found</td></tr></tbody></table></li><li><p>Body:</p><div class="language-json codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-json codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">   </span><span class="token property" style="color:#36acaa">&quot;isMajorGcSuspended&quot;</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">&quot;true&quot;</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">   </span><span class="token property" style="color:#36acaa">&quot;isMinorGcSuspended&quot;</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">&quot;true&quot;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div></li></ul></li></ol><h3 class="anchor anchorWithStickyNavbar_LWe7" id="endpoint-apiv1bookiegcresume_compaction">Endpoint: /api/v1/bookie/gc/resume_compaction<a href="#endpoint-apiv1bookiegcresume_compaction" class="hash-link" aria-label="Direct link to Endpoint: /api/v1/bookie/gc/resume_compaction" title="Direct link to Endpoint: /api/v1/bookie/gc/resume_compaction">​</a></h3><ol><li><p>Method: PUT</p><ul><li><p>Description:  resume the suspended compaction for this bookie.</p></li><li><p>Body:</p><div class="language-json codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-json codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">   </span><span class="token property" style="color:#36acaa">&quot;resumeMajor&quot;</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">&quot;true&quot;</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">   </span><span class="token property" style="color:#36acaa">&quot;resumeMinor&quot;</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">&quot;true&quot;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div></li><li><p>Response:</p><table><thead><tr><th align="left">Code</th><th align="left">Description</th></tr></thead><tbody><tr><td align="left">200</td><td align="left">Successful operation</td></tr><tr><td align="left">403</td><td align="left">Permission denied</td></tr><tr><td align="left">404</td><td align="left">Not found</td></tr></tbody></table></li></ul></li></ol><h3 class="anchor anchorWithStickyNavbar_LWe7" id="endpoint-apiv1bookiestate">Endpoint: /api/v1/bookie/state<a href="#endpoint-apiv1bookiestate" class="hash-link" aria-label="Direct link to Endpoint: /api/v1/bookie/state" title="Direct link to Endpoint: /api/v1/bookie/state">​</a></h3><ol><li><p>Method: GET</p><ul><li><p>Description:  Exposes the current state of bookie</p></li><li><p>Response:</p><table><thead><tr><th align="left">Code</th><th align="left">Description</th></tr></thead><tbody><tr><td align="left">200</td><td align="left">Successful operation</td></tr><tr><td align="left">403</td><td align="left">Permission denied</td></tr><tr><td align="left">404</td><td align="left">Not found</td></tr></tbody></table></li><li><p>Body:</p><div class="language-json codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-json codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">   </span><span class="token property" style="color:#36acaa">&quot;running&quot;</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token boolean" style="color:#36acaa">true</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">   </span><span class="token property" style="color:#36acaa">&quot;readOnly&quot;</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token boolean" style="color:#36acaa">false</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">   </span><span class="token property" style="color:#36acaa">&quot;shuttingDown&quot;</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token boolean" style="color:#36acaa">false</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">   </span><span class="token property" style="color:#36acaa">&quot;availableForHighPriorityWrites&quot;</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token boolean" style="color:#36acaa">true</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">}</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div></li></ul></li></ol><h3 class="anchor anchorWithStickyNavbar_LWe7" id="endpoint-apiv1bookiesanity">Endpoint: /api/v1/bookie/sanity<a href="#endpoint-apiv1bookiesanity" class="hash-link" aria-label="Direct link to Endpoint: /api/v1/bookie/sanity" title="Direct link to Endpoint: /api/v1/bookie/sanity">​</a></h3><ol><li><p>Method: GET</p><ul><li><p>Description:  Exposes the bookie sanity state</p></li><li><p>Response:</p><table><thead><tr><th align="left">Code</th><th align="left">Description</th></tr></thead><tbody><tr><td align="left">200</td><td align="left">Successful operation</td></tr><tr><td align="left">403</td><td align="left">Permission denied</td></tr><tr><td align="left">404</td><td align="left">Not found</td></tr></tbody></table></li><li><p>Body:</p><div class="language-json codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-json codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">   </span><span class="token property" style="color:#36acaa">&quot;passed&quot;</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token boolean" style="color:#36acaa">true</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">   </span><span class="token property" style="color:#36acaa">&quot;readOnly&quot;</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token boolean" style="color:#36acaa">false</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">}</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div></li></ul></li></ol><h3 class="anchor anchorWithStickyNavbar_LWe7" id="endpoint-apiv1bookieis_ready">Endpoint: /api/v1/bookie/is_ready<a href="#endpoint-apiv1bookieis_ready" class="hash-link" aria-label="Direct link to Endpoint: /api/v1/bookie/is_ready" title="Direct link to Endpoint: /api/v1/bookie/is_ready">​</a></h3><ol><li><p>Method: GET</p><ul><li><p>Description:  Return true if the bookie is ready</p></li><li><p>Response:</p><table><thead><tr><th align="left">Code</th><th align="left">Description</th></tr></thead><tbody><tr><td align="left">200</td><td align="left">Successful operation</td></tr><tr><td align="left">403</td><td align="left">Permission denied</td></tr><tr><td align="left">404</td><td align="left">Not found</td></tr><tr><td align="left">503</td><td align="left">Bookie is not ready</td></tr></tbody></table></li><li><p>Body: <!-- -->&lt;<!-- -->empty<!-- -->&gt;</p></li></ul></li></ol><h3 class="anchor anchorWithStickyNavbar_LWe7" id="endpoint-apiv1bookieentry_location_compact">Endpoint: /api/v1/bookie/entry_location_compact<a href="#endpoint-apiv1bookieentry_location_compact" class="hash-link" aria-label="Direct link to Endpoint: /api/v1/bookie/entry_location_compact" title="Direct link to Endpoint: /api/v1/bookie/entry_location_compact">​</a></h3><ol><li><p>Method: PUT</p><ul><li><p>Description:  trigger entry location index rocksDB compact. Trigger all entry location rocksDB compact, if entryLocations not be specified.</p></li><li><p>Parameters: </p><table><thead><tr><th align="left">Name</th><th align="left">Type</th><th align="left">Required</th><th align="left">Description</th></tr></thead><tbody><tr><td align="left">entryLocationRocksDBCompact</td><td align="left">String</td><td align="left">Yes</td><td align="left">Configuration name(key)</td></tr><tr><td align="left">entryLocations</td><td align="left">String</td><td align="left">no</td><td align="left">entry location rocksDB path</td></tr></tbody></table></li><li><p>Body:</p><div class="language-json codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-json codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">   </span><span class="token property" style="color:#36acaa">&quot;entryLocationRocksDBCompact&quot;</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">&quot;true&quot;</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">   </span><span class="token property" style="color:#36acaa">&quot;entryLocations&quot;</span><span class="token operator" style="color:#393A34">:</span><span class="token string" style="color:#e3116c">&quot;/data1/bookkeeper/ledgers/current/locations,/data2/bookkeeper/ledgers/current/locations&quot;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div></li><li><p>Response:</p><table><thead><tr><th align="left">Code</th><th align="left">Description</th></tr></thead><tbody><tr><td align="left">200</td><td align="left">Successful operation</td></tr><tr><td align="left">403</td><td align="left">Permission denied</td></tr><tr><td align="left">405</td><td align="left">Method Not Allowed</td></tr></tbody></table></li></ul></li><li><p>Method: GET</p><ul><li><p>Description:  All entry location index rocksDB compact status on bookie. true for is running.</p></li><li><p>Response:</p><table><thead><tr><th align="left">Code</th><th align="left">Description</th></tr></thead><tbody><tr><td align="left">200</td><td align="left">Successful operation</td></tr><tr><td align="left">403</td><td align="left">Permission denied</td></tr><tr><td align="left">405</td><td align="left">Method Not Allowed</td></tr></tbody></table></li><li><p>Body:</p><div class="language-json codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-json codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">   </span><span class="token property" style="color:#36acaa">&quot;/data1/bookkeeper/ledgers/current/locations&quot;</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token boolean" style="color:#36acaa">true</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">   </span><span class="token property" style="color:#36acaa">&quot;/data2/bookkeeper/ledgers/current/locations&quot;</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token boolean" style="color:#36acaa">false</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div></li></ul></li></ol><h2 class="anchor anchorWithStickyNavbar_LWe7" id="auto-recovery">Auto recovery<a href="#auto-recovery" class="hash-link" aria-label="Direct link to Auto recovery" title="Direct link to Auto recovery">​</a></h2><h3 class="anchor anchorWithStickyNavbar_LWe7" id="endpoint-apiv1autorecoverybookie">Endpoint: /api/v1/autorecovery/bookie/<a href="#endpoint-apiv1autorecoverybookie" class="hash-link" aria-label="Direct link to Endpoint: /api/v1/autorecovery/bookie/" title="Direct link to Endpoint: /api/v1/autorecovery/bookie/">​</a></h3><ol><li>Method: PUT<ul><li><p>Description:  Ledger data recovery for failed bookie</p></li><li><p>Body: </p><div class="language-json codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-json codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token property" style="color:#36acaa">&quot;bookie_src&quot;</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">[</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">&quot;bookie_src1&quot;</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">&quot;bookie_src2&quot;</span><span class="token plain">... </span><span class="token punctuation" style="color:#393A34">]</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token property" style="color:#36acaa">&quot;bookie_dest&quot;</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">[</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">&quot;bookie_dest1&quot;</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">&quot;bookie_dest2&quot;</span><span class="token plain">... </span><span class="token punctuation" style="color:#393A34">]</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token property" style="color:#36acaa">&quot;delete_cookie&quot;</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> &lt;bool_value&gt;</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div></li><li><p>Parameters:</p><table><thead><tr><th align="left">Name</th><th align="left">Type</th><th align="left">Required</th><th align="left">Description</th></tr></thead><tbody><tr><td align="left">bookie_src</td><td align="left">Strings</td><td align="left">Yes</td><td align="left">bookie source to recovery</td></tr><tr><td align="left">bookie_dest</td><td align="left">Strings</td><td align="left">No</td><td align="left">bookie data recovery destination</td></tr><tr><td align="left">delete_cookie</td><td align="left">Boolean</td><td align="left">No</td><td align="left">Whether delete cookie</td></tr></tbody></table></li><li><p>Response: </p><table><thead><tr><th align="left">Code</th><th align="left">Description</th></tr></thead><tbody><tr><td align="left">200</td><td align="left">Successful operation</td></tr><tr><td align="left">403</td><td align="left">Permission denied</td></tr><tr><td align="left">404</td><td align="left">Not found</td></tr></tbody></table></li></ul></li></ol><h3 class="anchor anchorWithStickyNavbar_LWe7" id="endpoint-apiv1autorecoverylist_under_replicated_ledgermissingreplicabookie_addressexcludingmissingreplicabookie_address">Endpoint: /api/v1/autorecovery/list_under_replicated_ledger/?missingreplica=<!-- -->&lt;<!-- -->bookie_address<!-- -->&gt;<!-- -->&amp;excludingmissingreplica=<!-- -->&lt;<!-- -->bookie_address<!-- -->&gt;<a href="#endpoint-apiv1autorecoverylist_under_replicated_ledgermissingreplicabookie_addressexcludingmissingreplicabookie_address" class="hash-link" aria-label="Direct link to endpoint-apiv1autorecoverylist_under_replicated_ledgermissingreplicabookie_addressexcludingmissingreplicabookie_address" title="Direct link to endpoint-apiv1autorecoverylist_under_replicated_ledgermissingreplicabookie_addressexcludingmissingreplicabookie_address">​</a></h3><ol><li><p>Method: GET</p><ul><li><p>Description:  Get all under replicated ledgers.</p></li><li><p>Parameters: </p><table><thead><tr><th align="left">Name</th><th align="left">Type</th><th align="left">Required</th><th align="left">Description</th></tr></thead><tbody><tr><td align="left">missingreplica</td><td align="left">String</td><td align="left">No</td><td align="left">missing replica bookieId</td></tr><tr><td align="left">excludingmissingreplica</td><td align="left">String</td><td align="left">No</td><td align="left">exclude missing replica bookieId</td></tr></tbody></table></li><li><p>Response:  </p><table><thead><tr><th align="left">Code</th><th align="left">Description</th></tr></thead><tbody><tr><td align="left">200</td><td align="left">Successful operation</td></tr><tr><td align="left">403</td><td align="left">Permission denied</td></tr><tr><td align="left">404</td><td align="left">Not found</td></tr></tbody></table></li><li><p>Response Body format:  </p><div class="language-json codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-json codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">[</span><span class="token plain">ledgerId1</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> ledgerId2...</span><span class="token punctuation" style="color:#393A34">]</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div></li></ul></li></ol><h3 class="anchor anchorWithStickyNavbar_LWe7" id="endpoint-apiv1autorecoverywho_is_auditor">Endpoint: /api/v1/autorecovery/who_is_auditor<a href="#endpoint-apiv1autorecoverywho_is_auditor" class="hash-link" aria-label="Direct link to Endpoint: /api/v1/autorecovery/who_is_auditor" title="Direct link to Endpoint: /api/v1/autorecovery/who_is_auditor">​</a></h3><ol><li><p>Method: GET</p><ul><li><p>Description:  Get auditor bookie id.</p></li><li><p>Response:  </p><table><thead><tr><th align="left">Code</th><th align="left">Description</th></tr></thead><tbody><tr><td align="left">200</td><td align="left">Successful operation</td></tr><tr><td align="left">403</td><td align="left">Permission denied</td></tr><tr><td align="left">404</td><td align="left">Not found</td></tr></tbody></table></li><li><p>Response Body format:  </p><div class="language-json codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-json codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token property" style="color:#36acaa">&quot;Auditor&quot;</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">&quot;hostname/hostAddress:Port&quot;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div></li></ul></li></ol><h3 class="anchor anchorWithStickyNavbar_LWe7" id="endpoint-apiv1autorecoverytrigger_audit">Endpoint: /api/v1/autorecovery/trigger_audit<a href="#endpoint-apiv1autorecoverytrigger_audit" class="hash-link" aria-label="Direct link to Endpoint: /api/v1/autorecovery/trigger_audit" title="Direct link to Endpoint: /api/v1/autorecovery/trigger_audit">​</a></h3><ol><li><p>Method: PUT</p><ul><li><p>Description: Force trigger audit by resting the lostBookieRecoveryDelay.</p></li><li><p>Response:  </p><table><thead><tr><th align="left">Code</th><th align="left">Description</th></tr></thead><tbody><tr><td align="left">200</td><td align="left">Successful operation</td></tr><tr><td align="left">403</td><td align="left">Permission denied</td></tr><tr><td align="left">404</td><td align="left">Not found</td></tr></tbody></table></li></ul></li></ol><h3 class="anchor anchorWithStickyNavbar_LWe7" id="endpoint-apiv1autorecoverylost_bookie_recovery_delay">Endpoint: /api/v1/autorecovery/lost_bookie_recovery_delay<a href="#endpoint-apiv1autorecoverylost_bookie_recovery_delay" class="hash-link" aria-label="Direct link to Endpoint: /api/v1/autorecovery/lost_bookie_recovery_delay" title="Direct link to Endpoint: /api/v1/autorecovery/lost_bookie_recovery_delay">​</a></h3><ol><li><p>Method: GET</p><ul><li><p>Description: Get lostBookieRecoveryDelay value in seconds.</p></li><li><p>Response:  </p><table><thead><tr><th align="left">Code</th><th align="left">Description</th></tr></thead><tbody><tr><td align="left">200</td><td align="left">Successful operation</td></tr><tr><td align="left">403</td><td align="left">Permission denied</td></tr><tr><td align="left">404</td><td align="left">Not found</td></tr></tbody></table></li></ul></li><li><p>Method: PUT</p><ul><li><p>Description: Set lostBookieRecoveryDelay value in seconds.</p></li><li><p>Body: </p><div class="language-json codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-json codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token property" style="color:#36acaa">&quot;delay_seconds&quot;</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> &lt;delay_seconds&gt;</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div></li><li><p>Parameters:</p><table><thead><tr><th align="left">Name</th><th align="left">Type</th><th align="left">Required</th><th align="left">Description</th></tr></thead><tbody><tr><td align="left">delay_seconds</td><td align="left">Long</td><td align="left">Yes</td><td align="left">set delay value in seconds.</td></tr></tbody></table></li><li><p>Response:  </p><table><thead><tr><th align="left">Code</th><th align="left">Description</th></tr></thead><tbody><tr><td align="left">200</td><td align="left">Successful operation</td></tr><tr><td align="left">403</td><td align="left">Permission denied</td></tr><tr><td align="left">404</td><td align="left">Not found</td></tr></tbody></table></li></ul></li></ol><h3 class="anchor anchorWithStickyNavbar_LWe7" id="endpoint-apiv1autorecoverydecommission">Endpoint: /api/v1/autorecovery/decommission<a href="#endpoint-apiv1autorecoverydecommission" class="hash-link" aria-label="Direct link to Endpoint: /api/v1/autorecovery/decommission" title="Direct link to Endpoint: /api/v1/autorecovery/decommission">​</a></h3><ol><li><p>Method: PUT</p><ul><li><p>Description: Decommission Bookie, Force trigger Audit task and make sure all the ledgers stored in the decommissioning bookie are replicated.</p></li><li><p>Body: </p><div class="language-json codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-json codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token property" style="color:#36acaa">&quot;bookie_src&quot;</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> &lt;bookie_src&gt;</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div></li><li><p>Parameters:</p><table><thead><tr><th align="left">Name</th><th align="left">Type</th><th align="left">Required</th><th align="left">Description</th></tr></thead><tbody><tr><td align="left">bookie_src</td><td align="left">String</td><td align="left">Yes</td><td align="left">Bookie src to decommission..</td></tr></tbody></table></li><li><p>Response:  </p><table><thead><tr><th align="left">Code</th><th align="left">Description</th></tr></thead><tbody><tr><td align="left">200</td><td align="left">Successful operation</td></tr><tr><td align="left">403</td><td align="left">Permission denied</td></tr><tr><td align="left">404</td><td align="left">Not found</td></tr></tbody></table></li></ul></li></ol></div></article><nav class="pagination-nav docusaurus-mt-lg" aria-label="Docs pages navigation"></nav></div></div><div class="col col--3"><div class="tableOfContents_bqdL thin-scrollbar theme-doc-toc-desktop"><ul class="table-of-contents table-of-contents__left-border"><li><a href="#all-the-endpoints" class="table-of-contents__link toc-highlight">All the endpoints</a></li><li><a href="#heartbeat" class="table-of-contents__link toc-highlight">Heartbeat</a><ul><li><a href="#endpoint-heartbeat" class="table-of-contents__link toc-highlight">Endpoint: /heartbeat</a></li></ul></li><li><a href="#config" class="table-of-contents__link toc-highlight">Config</a><ul><li><a href="#endpoint-apiv1configserver_config" class="table-of-contents__link toc-highlight">Endpoint: /api/v1/config/server_config</a></li></ul></li><li><a href="#metrics" class="table-of-contents__link toc-highlight">Metrics</a><ul><li><a href="#endpoint-metrics" class="table-of-contents__link toc-highlight">Endpoint: /metrics</a></li></ul></li><li><a href="#ledger" class="table-of-contents__link toc-highlight">Ledger</a><ul><li><a href="#endpoint-apiv1ledgerdeleteledger_idledger_id" class="table-of-contents__link toc-highlight">Endpoint: /api/v1/ledger/delete/?ledger_id=&lt;ledger_id&gt;</a></li><li><a href="#endpoint-apiv1ledgerlistprint_metadatametadata" class="table-of-contents__link toc-highlight">Endpoint: /api/v1/ledger/list/?print_metadata=&lt;metadata&gt;</a></li><li><a href="#endpoint-apiv1ledgermetadataledger_idledger_id" class="table-of-contents__link toc-highlight">Endpoint: /api/v1/ledger/metadata/?ledger_id=&lt;ledger_id&gt;</a></li><li><a href="#endpoint-apiv1ledgerreadledger_idledger_idstart_entry_idstart_entry_idend_entry_idend_entry_id" class="table-of-contents__link toc-highlight">Endpoint: /api/v1/ledger/read/?ledger_id=&lt;ledger_id&gt;&amp;start_entry_id=&lt;start_entry_id&gt;&amp;end_entry_id=&lt;end_entry_id&gt;</a></li></ul></li><li><a href="#bookie" class="table-of-contents__link toc-highlight">Bookie</a><ul><li><a href="#endpoint-apiv1bookieinfo" class="table-of-contents__link toc-highlight">Endpoint: /api/v1/bookie/info</a></li><li><a href="#endpoint-apiv1bookielist_bookiestypetypeprint_hostnameshostnames" class="table-of-contents__link toc-highlight">Endpoint: /api/v1/bookie/list_bookies/?type=&lt;type&gt;&amp;print_hostnames=&lt;hostnames&gt;</a></li><li><a href="#endpoint-apiv1bookielist_bookie_info" class="table-of-contents__link toc-highlight">Endpoint: /api/v1/bookie/list_bookie_info</a></li><li><a href="#endpoint-apiv1bookiecluster_info" class="table-of-contents__link toc-highlight">Endpoint: /api/v1/bookie/cluster_info</a></li><li><a href="#endpoint-apiv1bookielast_log_mark" class="table-of-contents__link toc-highlight">Endpoint: /api/v1/bookie/last_log_mark</a></li><li><a href="#endpoint-apiv1bookielist_disk_filefile_typetype" class="table-of-contents__link toc-highlight">Endpoint: /api/v1/bookie/list_disk_file/?file_type=&lt;type&gt;</a></li><li><a href="#endpoint-apiv1bookieexpand_storage" class="table-of-contents__link toc-highlight">Endpoint: /api/v1/bookie/expand_storage</a></li><li><a href="#endpoint-apiv1bookiegc" class="table-of-contents__link toc-highlight">Endpoint: /api/v1/bookie/gc</a></li><li><a href="#endpoint-apiv1bookiegc_details" class="table-of-contents__link toc-highlight">Endpoint: /api/v1/bookie/gc_details</a></li><li><a href="#endpoint-apiv1bookiegcsuspend_compaction" class="table-of-contents__link toc-highlight">Endpoint: /api/v1/bookie/gc/suspend_compaction</a></li><li><a href="#endpoint-apiv1bookiegcresume_compaction" class="table-of-contents__link toc-highlight">Endpoint: /api/v1/bookie/gc/resume_compaction</a></li><li><a href="#endpoint-apiv1bookiestate" class="table-of-contents__link toc-highlight">Endpoint: /api/v1/bookie/state</a></li><li><a href="#endpoint-apiv1bookiesanity" class="table-of-contents__link toc-highlight">Endpoint: /api/v1/bookie/sanity</a></li><li><a href="#endpoint-apiv1bookieis_ready" class="table-of-contents__link toc-highlight">Endpoint: /api/v1/bookie/is_ready</a></li><li><a href="#endpoint-apiv1bookieentry_location_compact" class="table-of-contents__link toc-highlight">Endpoint: /api/v1/bookie/entry_location_compact</a></li></ul></li><li><a href="#auto-recovery" class="table-of-contents__link toc-highlight">Auto recovery</a><ul><li><a href="#endpoint-apiv1autorecoverybookie" class="table-of-contents__link toc-highlight">Endpoint: /api/v1/autorecovery/bookie/</a></li><li><a href="#endpoint-apiv1autorecoverylist_under_replicated_ledgermissingreplicabookie_addressexcludingmissingreplicabookie_address" class="table-of-contents__link toc-highlight">Endpoint: /api/v1/autorecovery/list_under_replicated_ledger/?missingreplica=&lt;bookie_address&gt;&amp;excludingmissingreplica=&lt;bookie_address&gt;</a></li><li><a href="#endpoint-apiv1autorecoverywho_is_auditor" class="table-of-contents__link toc-highlight">Endpoint: /api/v1/autorecovery/who_is_auditor</a></li><li><a href="#endpoint-apiv1autorecoverytrigger_audit" class="table-of-contents__link toc-highlight">Endpoint: /api/v1/autorecovery/trigger_audit</a></li><li><a href="#endpoint-apiv1autorecoverylost_bookie_recovery_delay" class="table-of-contents__link toc-highlight">Endpoint: /api/v1/autorecovery/lost_bookie_recovery_delay</a></li><li><a href="#endpoint-apiv1autorecoverydecommission" class="table-of-contents__link toc-highlight">Endpoint: /api/v1/autorecovery/decommission</a></li></ul></li></ul></div></div></div></div></main></div></div><footer class="footer footer--dark"><div class="container container-fluid"><div class="row footer__links"><div class="col footer__col"><div class="footer__title">Documentation</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/docs/overview">Overview</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/getting-started/installation">Getting started</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/deployment/manual">Deployment</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/admin/bookies">Administration</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/api/overview">API</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/security/overview">Security</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/development/protocol">Development</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/reference/config">Reference</a></li></ul></div><div class="col footer__col"><div class="footer__title">Community</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/community/mailing-lists">Mailing lists</a></li><li class="footer__item"><a class="footer__link-item" href="/community/slack">Slack</a></li><li class="footer__item"><a href="https://github.com/apache/bookkeeper" target="_blank" rel="noopener noreferrer" class="footer__link-item">Github<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a href="https://twitter.com/asfbookkeeper" target="_blank" rel="noopener noreferrer" class="footer__link-item">Twitter<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div><div class="col footer__col"><div class="footer__title">Project</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/project/who">Who are we?</a></li><li class="footer__item"><a class="footer__link-item" href="/project/bylaws">Bylaws</a></li><li class="footer__item"><a href="https://apache.org/licenses" target="_blank" rel="noopener noreferrer" class="footer__link-item">License<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a class="footer__link-item" href="/project/privacy">Privacy policy</a></li><li class="footer__item"><a href="https://www.apache.org/foundation/sponsorship.html" target="_blank" rel="noopener noreferrer" class="footer__link-item">Sponsorship<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a href="https://www.apache.org/foundation/thanks.html" target="_blank" rel="noopener noreferrer" class="footer__link-item">Thanks<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div></div><div class="footer__bottom text--center"><div class="footer__copyright"><footer class="footer">
+<code>ledgerReplicationEnabled</code> is false.</p></li></ul><p><code>totalBookiesCount</code> = <code>writableBookiesCount</code> + <code>readonlyBookiesCount</code> + <code>unavailableBookiesCount</code>.</p></li></ol><h3 class="anchor anchorWithStickyNavbar_LWe7" id="endpoint-apiv1bookielast_log_mark">Endpoint: /api/v1/bookie/last_log_mark<a href="#endpoint-apiv1bookielast_log_mark" class="hash-link" aria-label="Direct link to Endpoint: /api/v1/bookie/last_log_mark" title="Direct link to Endpoint: /api/v1/bookie/last_log_mark">​</a></h3><ol><li><p>Method: GET</p><ul><li><p>Description:  Get the last log marker.</p></li><li><p>Response:  </p><table><thead><tr><th align="left">Code</th><th align="left">Description</th></tr></thead><tbody><tr><td align="left">200</td><td align="left">Successful operation</td></tr><tr><td align="left">403</td><td align="left">Permission denied</td></tr><tr><td align="left">404</td><td align="left">Not found</td></tr></tbody></table></li><li><p>Response Body format:  </p><div class="language-json codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-json codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  JournalId1 </span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> position1</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  JournalId2 </span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> position2</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  ...</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div></li></ul></li></ol><h3 class="anchor anchorWithStickyNavbar_LWe7" id="endpoint-apiv1bookielist_disk_filefile_typetype">Endpoint: /api/v1/bookie/list_disk_file/?file_type=<!-- -->&lt;<!-- -->type<!-- -->&gt;<a href="#endpoint-apiv1bookielist_disk_filefile_typetype" class="hash-link" aria-label="Direct link to endpoint-apiv1bookielist_disk_filefile_typetype" title="Direct link to endpoint-apiv1bookielist_disk_filefile_typetype">​</a></h3><ol><li><p>Method: GET</p><ul><li><p>Description:  Get all the files on disk of current bookie.</p></li><li><p>Parameters: </p><table><thead><tr><th align="left">Name</th><th align="left">Type</th><th align="left">Required</th><th align="left">Description</th></tr></thead><tbody><tr><td align="left">type</td><td align="left">String</td><td align="left">No</td><td align="left">file type: journal/entrylog/index.</td></tr></tbody></table></li><li><p>Response:  </p><table><thead><tr><th align="left">Code</th><th align="left">Description</th></tr></thead><tbody><tr><td align="left">200</td><td align="left">Successful operation</td></tr><tr><td align="left">403</td><td align="left">Permission denied</td></tr><tr><td align="left">404</td><td align="left">Not found</td></tr></tbody></table></li><li><p>Response Body format:  </p><div class="language-json codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-json codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token property" style="color:#36acaa">&quot;journal files&quot;</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">&quot;filename1 filename2 ...&quot;</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token property" style="color:#36acaa">&quot;entrylog files&quot;</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">&quot;filename1 filename2...&quot;</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token property" style="color:#36acaa">&quot;index files&quot;</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">&quot;filename1 filename2 ...&quot;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div></li></ul></li></ol><h3 class="anchor anchorWithStickyNavbar_LWe7" id="endpoint-apiv1bookieexpand_storage">Endpoint: /api/v1/bookie/expand_storage<a href="#endpoint-apiv1bookieexpand_storage" class="hash-link" aria-label="Direct link to Endpoint: /api/v1/bookie/expand_storage" title="Direct link to Endpoint: /api/v1/bookie/expand_storage">​</a></h3><ol><li><p>Method: PUT</p><ul><li><p>Description:  Expand storage for a bookie.</p></li><li><p>Response:  </p><table><thead><tr><th align="left">Code</th><th align="left">Description</th></tr></thead><tbody><tr><td align="left">200</td><td align="left">Successful operation</td></tr><tr><td align="left">403</td><td align="left">Permission denied</td></tr><tr><td align="left">404</td><td align="left">Not found</td></tr></tbody></table></li></ul></li></ol><h3 class="anchor anchorWithStickyNavbar_LWe7" id="endpoint-apiv1bookiegc">Endpoint: /api/v1/bookie/gc<a href="#endpoint-apiv1bookiegc" class="hash-link" aria-label="Direct link to Endpoint: /api/v1/bookie/gc" title="Direct link to Endpoint: /api/v1/bookie/gc">​</a></h3><ol><li><p>Method: PUT</p><ul><li><p>Description:  trigger gc for this bookie.</p></li><li><p>Response:  </p><table><thead><tr><th align="left">Code</th><th align="left">Description</th></tr></thead><tbody><tr><td align="left">200</td><td align="left">Successful operation</td></tr><tr><td align="left">403</td><td align="left">Permission denied</td></tr><tr><td align="left">404</td><td align="left">Not found</td></tr></tbody></table></li></ul></li><li><p>Method: GET</p><ul><li><p>Description:  whether force triggered Garbage Collection is running or not for this bookie. true for is running.</p></li><li><p>Response:</p><table><thead><tr><th align="left">Code</th><th align="left">Description</th></tr></thead><tbody><tr><td align="left">200</td><td align="left">Successful operation</td></tr><tr><td align="left">403</td><td align="left">Permission denied</td></tr><tr><td align="left">404</td><td align="left">Not found</td></tr></tbody></table></li><li><p>Body:</p><div class="language-json codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-json codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">   </span><span class="token property" style="color:#36acaa">&quot;is_in_force_gc&quot;</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">&quot;false&quot;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div></li></ul></li></ol><h3 class="anchor anchorWithStickyNavbar_LWe7" id="endpoint-apiv1bookiegc_details">Endpoint: /api/v1/bookie/gc_details<a href="#endpoint-apiv1bookiegc_details" class="hash-link" aria-label="Direct link to Endpoint: /api/v1/bookie/gc_details" title="Direct link to Endpoint: /api/v1/bookie/gc_details">​</a></h3><ol><li><p>Method: GET</p><ul><li><p>Description:  get details of Garbage Collection Thread, like whether it is in compacting, last compaction time, compaction counter, etc.</p></li><li><p>Response:</p><table><thead><tr><th align="left">Code</th><th align="left">Description</th></tr></thead><tbody><tr><td align="left">200</td><td align="left">Successful operation</td></tr><tr><td align="left">403</td><td align="left">Permission denied</td></tr><tr><td align="left">404</td><td align="left">Not found</td></tr></tbody></table></li><li><p>Body:</p><div class="language-json codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-json codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token punctuation" style="color:#393A34">[</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">   </span><span class="token property" style="color:#36acaa">&quot;forceCompacting&quot;</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token boolean" style="color:#36acaa">false</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">   </span><span class="token property" style="color:#36acaa">&quot;majorCompacting&quot;</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token boolean" style="color:#36acaa">false</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">   </span><span class="token property" style="color:#36acaa">&quot;minorCompacting&quot;</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token boolean" style="color:#36acaa">false</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">   </span><span class="token property" style="color:#36acaa">&quot;lastMajorCompactionTime&quot;</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">1544578144944</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">   </span><span class="token property" style="color:#36acaa">&quot;lastMinorCompactionTime&quot;</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">1544578144944</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">   </span><span class="token property" style="color:#36acaa">&quot;majorCompactionCounter&quot;</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">1</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">   </span><span class="token property" style="color:#36acaa">&quot;minorCompactionCounter&quot;</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">0</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">]</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div></li></ul></li></ol><h3 class="anchor anchorWithStickyNavbar_LWe7" id="endpoint-apiv1bookiegcsuspend_compaction">Endpoint: /api/v1/bookie/gc/suspend_compaction<a href="#endpoint-apiv1bookiegcsuspend_compaction" class="hash-link" aria-label="Direct link to Endpoint: /api/v1/bookie/gc/suspend_compaction" title="Direct link to Endpoint: /api/v1/bookie/gc/suspend_compaction">​</a></h3><ol><li><p>Method: PUT</p><ul><li><p>Description:  suspend the next compaction stage for this bookie.</p></li><li><p>Body:</p><div class="language-json codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-json codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">   </span><span class="token property" style="color:#36acaa">&quot;suspendMajor&quot;</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">&quot;true&quot;</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">   </span><span class="token property" style="color:#36acaa">&quot;suspendMinor&quot;</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">&quot;true&quot;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div></li><li><p>Response:</p><table><thead><tr><th align="left">Code</th><th align="left">Description</th></tr></thead><tbody><tr><td align="left">200</td><td align="left">Successful operation</td></tr><tr><td align="left">403</td><td align="left">Permission denied</td></tr><tr><td align="left">404</td><td align="left">Not found</td></tr></tbody></table></li></ul></li><li><p>Method: GET</p><ul><li><p>Description:  whether major or minor compaction  is suspending or not for this bookie. true for is running.</p></li><li><p>Response:</p><table><thead><tr><th align="left">Code</th><th align="left">Description</th></tr></thead><tbody><tr><td align="left">200</td><td align="left">Successful operation</td></tr><tr><td align="left">403</td><td align="left">Permission denied</td></tr><tr><td align="left">404</td><td align="left">Not found</td></tr></tbody></table></li><li><p>Body:</p><div class="language-json codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-json codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">   </span><span class="token property" style="color:#36acaa">&quot;isMajorGcSuspended&quot;</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">&quot;true&quot;</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">   </span><span class="token property" style="color:#36acaa">&quot;isMinorGcSuspended&quot;</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">&quot;true&quot;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div></li></ul></li></ol><h3 class="anchor anchorWithStickyNavbar_LWe7" id="endpoint-apiv1bookiegcresume_compaction">Endpoint: /api/v1/bookie/gc/resume_compaction<a href="#endpoint-apiv1bookiegcresume_compaction" class="hash-link" aria-label="Direct link to Endpoint: /api/v1/bookie/gc/resume_compaction" title="Direct link to Endpoint: /api/v1/bookie/gc/resume_compaction">​</a></h3><ol><li><p>Method: PUT</p><ul><li><p>Description:  resume the suspended compaction for this bookie.</p></li><li><p>Body:</p><div class="language-json codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-json codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">   </span><span class="token property" style="color:#36acaa">&quot;resumeMajor&quot;</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">&quot;true&quot;</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">   </span><span class="token property" style="color:#36acaa">&quot;resumeMinor&quot;</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">&quot;true&quot;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div></li><li><p>Response:</p><table><thead><tr><th align="left">Code</th><th align="left">Description</th></tr></thead><tbody><tr><td align="left">200</td><td align="left">Successful operation</td></tr><tr><td align="left">403</td><td align="left">Permission denied</td></tr><tr><td align="left">404</td><td align="left">Not found</td></tr></tbody></table></li></ul></li></ol><h3 class="anchor anchorWithStickyNavbar_LWe7" id="endpoint-apiv1bookiestate">Endpoint: /api/v1/bookie/state<a href="#endpoint-apiv1bookiestate" class="hash-link" aria-label="Direct link to Endpoint: /api/v1/bookie/state" title="Direct link to Endpoint: /api/v1/bookie/state">​</a></h3><ol><li><p>Method: GET</p><ul><li><p>Description:  Exposes the current state of bookie</p></li><li><p>Response:</p><table><thead><tr><th align="left">Code</th><th align="left">Description</th></tr></thead><tbody><tr><td align="left">200</td><td align="left">Successful operation</td></tr><tr><td align="left">403</td><td align="left">Permission denied</td></tr><tr><td align="left">404</td><td align="left">Not found</td></tr></tbody></table></li><li><p>Body:</p><div class="language-json codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-json codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">   </span><span class="token property" style="color:#36acaa">&quot;running&quot;</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token boolean" style="color:#36acaa">true</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">   </span><span class="token property" style="color:#36acaa">&quot;readOnly&quot;</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token boolean" style="color:#36acaa">false</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">   </span><span class="token property" style="color:#36acaa">&quot;shuttingDown&quot;</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token boolean" style="color:#36acaa">false</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">   </span><span class="token property" style="color:#36acaa">&quot;availableForHighPriorityWrites&quot;</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token boolean" style="color:#36acaa">true</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">}</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div></li></ul></li></ol><h3 class="anchor anchorWithStickyNavbar_LWe7" id="endpoint-apiv1bookiesanity">Endpoint: /api/v1/bookie/sanity<a href="#endpoint-apiv1bookiesanity" class="hash-link" aria-label="Direct link to Endpoint: /api/v1/bookie/sanity" title="Direct link to Endpoint: /api/v1/bookie/sanity">​</a></h3><ol><li><p>Method: GET</p><ul><li><p>Description:  Exposes the bookie sanity state</p></li><li><p>Response:</p><table><thead><tr><th align="left">Code</th><th align="left">Description</th></tr></thead><tbody><tr><td align="left">200</td><td align="left">Successful operation</td></tr><tr><td align="left">403</td><td align="left">Permission denied</td></tr><tr><td align="left">404</td><td align="left">Not found</td></tr></tbody></table></li><li><p>Body:</p><div class="language-json codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-json codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">   </span><span class="token property" style="color:#36acaa">&quot;passed&quot;</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token boolean" style="color:#36acaa">true</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">   </span><span class="token property" style="color:#36acaa">&quot;readOnly&quot;</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token boolean" style="color:#36acaa">false</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">}</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div></li></ul></li></ol><h3 class="anchor anchorWithStickyNavbar_LWe7" id="endpoint-apiv1bookieis_ready">Endpoint: /api/v1/bookie/is_ready<a href="#endpoint-apiv1bookieis_ready" class="hash-link" aria-label="Direct link to Endpoint: /api/v1/bookie/is_ready" title="Direct link to Endpoint: /api/v1/bookie/is_ready">​</a></h3><ol><li><p>Method: GET</p><ul><li><p>Description:  Return true if the bookie is ready</p></li><li><p>Response:</p><table><thead><tr><th align="left">Code</th><th align="left">Description</th></tr></thead><tbody><tr><td align="left">200</td><td align="left">Successful operation</td></tr><tr><td align="left">403</td><td align="left">Permission denied</td></tr><tr><td align="left">404</td><td align="left">Not found</td></tr><tr><td align="left">503</td><td align="left">Bookie is not ready</td></tr></tbody></table></li><li><p>Body: <!-- -->&lt;<!-- -->empty<!-- -->&gt;</p></li></ul></li></ol><h3 class="anchor anchorWithStickyNavbar_LWe7" id="endpoint-apiv1bookieentry_location_compact">Endpoint: /api/v1/bookie/entry_location_compact<a href="#endpoint-apiv1bookieentry_location_compact" class="hash-link" aria-label="Direct link to Endpoint: /api/v1/bookie/entry_location_compact" title="Direct link to Endpoint: /api/v1/bookie/entry_location_compact">​</a></h3><ol><li><p>Method: PUT</p><ul><li><p>Description:  trigger entry location index rocksDB compact. Trigger all entry location rocksDB compact, if entryLocations not be specified.</p></li><li><p>Parameters: </p><table><thead><tr><th align="left">Name</th><th align="left">Type</th><th align="left">Required</th><th align="left">Description</th></tr></thead><tbody><tr><td align="left">entryLocationRocksDBCompact</td><td align="left">String</td><td align="left">Yes</td><td align="left">Configuration name(key)</td></tr><tr><td align="left">entryLocations</td><td align="left">String</td><td align="left">no</td><td align="left">entry location rocksDB path</td></tr></tbody></table></li><li><p>Body:</p><div class="language-json codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-json codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">   </span><span class="token property" style="color:#36acaa">&quot;entryLocationRocksDBCompact&quot;</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">&quot;true&quot;</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">   </span><span class="token property" style="color:#36acaa">&quot;entryLocations&quot;</span><span class="token operator" style="color:#393A34">:</span><span class="token string" style="color:#e3116c">&quot;/data1/bookkeeper/ledgers/current/locations,/data2/bookkeeper/ledgers/current/locations&quot;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div></li><li><p>Response:</p><table><thead><tr><th align="left">Code</th><th align="left">Description</th></tr></thead><tbody><tr><td align="left">200</td><td align="left">Successful operation</td></tr><tr><td align="left">403</td><td align="left">Permission denied</td></tr><tr><td align="left">405</td><td align="left">Method Not Allowed</td></tr></tbody></table></li></ul></li><li><p>Method: GET</p><ul><li><p>Description:  All entry location index rocksDB compact status on bookie. true for is running.</p></li><li><p>Response:</p><table><thead><tr><th align="left">Code</th><th align="left">Description</th></tr></thead><tbody><tr><td align="left">200</td><td align="left">Successful operation</td></tr><tr><td align="left">403</td><td align="left">Permission denied</td></tr><tr><td align="left">405</td><td align="left">Method Not Allowed</td></tr></tbody></table></li><li><p>Body:</p><div class="language-json codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-json codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">   </span><span class="token property" style="color:#36acaa">&quot;/data1/bookkeeper/ledgers/current/locations&quot;</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token boolean" style="color:#36acaa">true</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">   </span><span class="token property" style="color:#36acaa">&quot;/data2/bookkeeper/ledgers/current/locations&quot;</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token boolean" style="color:#36acaa">false</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div></li></ul></li></ol><h2 class="anchor anchorWithStickyNavbar_LWe7" id="auto-recovery">Auto recovery<a href="#auto-recovery" class="hash-link" aria-label="Direct link to Auto recovery" title="Direct link to Auto recovery">​</a></h2><h3 class="anchor anchorWithStickyNavbar_LWe7" id="endpoint-apiv1autorecoverybookie">Endpoint: /api/v1/autorecovery/bookie/<a href="#endpoint-apiv1autorecoverybookie" class="hash-link" aria-label="Direct link to Endpoint: /api/v1/autorecovery/bookie/" title="Direct link to Endpoint: /api/v1/autorecovery/bookie/">​</a></h3><ol><li>Method: PUT<ul><li><p>Description:  Ledger data recovery for failed bookie</p></li><li><p>Body: </p><div class="language-json codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-json codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token property" style="color:#36acaa">&quot;bookie_src&quot;</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">[</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">&quot;bookie_src1&quot;</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">&quot;bookie_src2&quot;</span><span class="token plain">... </span><span class="token punctuation" style="color:#393A34">]</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token property" style="color:#36acaa">&quot;bookie_dest&quot;</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">[</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">&quot;bookie_dest1&quot;</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">&quot;bookie_dest2&quot;</span><span class="token plain">... </span><span class="token punctuation" style="color:#393A34">]</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token property" style="color:#36acaa">&quot;delete_cookie&quot;</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> &lt;bool_value&gt;</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div></li><li><p>Parameters:</p><table><thead><tr><th align="left">Name</th><th align="left">Type</th><th align="left">Required</th><th align="left">Description</th></tr></thead><tbody><tr><td align="left">bookie_src</td><td align="left">Strings</td><td align="left">Yes</td><td align="left">bookie source to recovery</td></tr><tr><td align="left">bookie_dest</td><td align="left">Strings</td><td align="left">No</td><td align="left">bookie data recovery destination</td></tr><tr><td align="left">delete_cookie</td><td align="left">Boolean</td><td align="left">No</td><td align="left">Whether delete cookie</td></tr></tbody></table></li><li><p>Response: </p><table><thead><tr><th align="left">Code</th><th align="left">Description</th></tr></thead><tbody><tr><td align="left">200</td><td align="left">Successful operation</td></tr><tr><td align="left">403</td><td align="left">Permission denied</td></tr><tr><td align="left">404</td><td align="left">Not found</td></tr></tbody></table></li></ul></li></ol><h3 class="anchor anchorWithStickyNavbar_LWe7" id="endpoint-apiv1autorecoverylist_under_replicated_ledgermissingreplicabookie_addressexcludingmissingreplicabookie_address">Endpoint: /api/v1/autorecovery/list_under_replicated_ledger/?missingreplica=<!-- -->&lt;<!-- -->bookie_address<!-- -->&gt;<!-- -->&amp;excludingmissingreplica=<!-- -->&lt;<!-- -->bookie_address<!-- -->&gt;<a href="#endpoint-apiv1autorecoverylist_under_replicated_ledgermissingreplicabookie_addressexcludingmissingreplicabookie_address" class="hash-link" aria-label="Direct link to endpoint-apiv1autorecoverylist_under_replicated_ledgermissingreplicabookie_addressexcludingmissingreplicabookie_address" title="Direct link to endpoint-apiv1autorecoverylist_under_replicated_ledgermissingreplicabookie_addressexcludingmissingreplicabookie_address">​</a></h3><ol><li><p>Method: GET</p><ul><li><p>Description:  Get all under replicated ledgers.</p></li><li><p>Parameters: </p><table><thead><tr><th align="left">Name</th><th align="left">Type</th><th align="left">Required</th><th align="left">Description</th></tr></thead><tbody><tr><td align="left">missingreplica</td><td align="left">String</td><td align="left">No</td><td align="left">missing replica bookieId</td></tr><tr><td align="left">excludingmissingreplica</td><td align="left">String</td><td align="left">No</td><td align="left">exclude missing replica bookieId</td></tr></tbody></table></li><li><p>Response:  </p><table><thead><tr><th align="left">Code</th><th align="left">Description</th></tr></thead><tbody><tr><td align="left">200</td><td align="left">Successful operation</td></tr><tr><td align="left">403</td><td align="left">Permission denied</td></tr><tr><td align="left">404</td><td align="left">Not found</td></tr></tbody></table></li><li><p>Response Body format:  </p><div class="language-json codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-json codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">[</span><span class="token plain">ledgerId1</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> ledgerId2...</span><span class="token punctuation" style="color:#393A34">]</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div></li></ul></li></ol><h3 class="anchor anchorWithStickyNavbar_LWe7" id="endpoint-apiv1autorecoverywho_is_auditor">Endpoint: /api/v1/autorecovery/who_is_auditor<a href="#endpoint-apiv1autorecoverywho_is_auditor" class="hash-link" aria-label="Direct link to Endpoint: /api/v1/autorecovery/who_is_auditor" title="Direct link to Endpoint: /api/v1/autorecovery/who_is_auditor">​</a></h3><ol><li><p>Method: GET</p><ul><li><p>Description:  Get auditor bookie id.</p></li><li><p>Response:  </p><table><thead><tr><th align="left">Code</th><th align="left">Description</th></tr></thead><tbody><tr><td align="left">200</td><td align="left">Successful operation</td></tr><tr><td align="left">403</td><td align="left">Permission denied</td></tr><tr><td align="left">404</td><td align="left">Not found</td></tr></tbody></table></li><li><p>Response Body format:  </p><div class="language-json codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-json codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token property" style="color:#36acaa">&quot;Auditor&quot;</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">&quot;hostname/hostAddress:Port&quot;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div></li></ul></li></ol><h3 class="anchor anchorWithStickyNavbar_LWe7" id="endpoint-apiv1autorecoverytrigger_audit">Endpoint: /api/v1/autorecovery/trigger_audit<a href="#endpoint-apiv1autorecoverytrigger_audit" class="hash-link" aria-label="Direct link to Endpoint: /api/v1/autorecovery/trigger_audit" title="Direct link to Endpoint: /api/v1/autorecovery/trigger_audit">​</a></h3><ol><li><p>Method: PUT</p><ul><li><p>Description: Force trigger audit by resting the lostBookieRecoveryDelay.</p></li><li><p>Response:  </p><table><thead><tr><th align="left">Code</th><th align="left">Description</th></tr></thead><tbody><tr><td align="left">200</td><td align="left">Successful operation</td></tr><tr><td align="left">403</td><td align="left">Permission denied</td></tr><tr><td align="left">404</td><td align="left">Not found</td></tr></tbody></table></li></ul></li></ol><h3 class="anchor anchorWithStickyNavbar_LWe7" id="endpoint-apiv1autorecoverylost_bookie_recovery_delay">Endpoint: /api/v1/autorecovery/lost_bookie_recovery_delay<a href="#endpoint-apiv1autorecoverylost_bookie_recovery_delay" class="hash-link" aria-label="Direct link to Endpoint: /api/v1/autorecovery/lost_bookie_recovery_delay" title="Direct link to Endpoint: /api/v1/autorecovery/lost_bookie_recovery_delay">​</a></h3><ol><li><p>Method: GET</p><ul><li><p>Description: Get lostBookieRecoveryDelay value in seconds.</p></li><li><p>Response:  </p><table><thead><tr><th align="left">Code</th><th align="left">Description</th></tr></thead><tbody><tr><td align="left">200</td><td align="left">Successful operation</td></tr><tr><td align="left">403</td><td align="left">Permission denied</td></tr><tr><td align="left">404</td><td align="left">Not found</td></tr></tbody></table></li></ul></li><li><p>Method: PUT</p><ul><li><p>Description: Set lostBookieRecoveryDelay value in seconds.</p></li><li><p>Body: </p><div class="language-json codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-json codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token property" style="color:#36acaa">&quot;delay_seconds&quot;</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> &lt;delay_seconds&gt;</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div></li><li><p>Parameters:</p><table><thead><tr><th align="left">Name</th><th align="left">Type</th><th align="left">Required</th><th align="left">Description</th></tr></thead><tbody><tr><td align="left">delay_seconds</td><td align="left">Long</td><td align="left">Yes</td><td align="left">set delay value in seconds.</td></tr></tbody></table></li><li><p>Response:  </p><table><thead><tr><th align="left">Code</th><th align="left">Description</th></tr></thead><tbody><tr><td align="left">200</td><td align="left">Successful operation</td></tr><tr><td align="left">403</td><td align="left">Permission denied</td></tr><tr><td align="left">404</td><td align="left">Not found</td></tr></tbody></table></li></ul></li></ol><h3 class="anchor anchorWithStickyNavbar_LWe7" id="endpoint-apiv1autorecoverydecommission">Endpoint: /api/v1/autorecovery/decommission<a href="#endpoint-apiv1autorecoverydecommission" class="hash-link" aria-label="Direct link to Endpoint: /api/v1/autorecovery/decommission" title="Direct link to Endpoint: /api/v1/autorecovery/decommission">​</a></h3><ol><li><p>Method: PUT</p><ul><li><p>Description: Decommission Bookie, Force trigger Audit task and make sure all the ledgers stored in the decommissioning bookie are replicated.</p></li><li><p>Body: </p><div class="language-json codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-json codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token property" style="color:#36acaa">&quot;bookie_src&quot;</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> &lt;bookie_src&gt;</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div></li><li><p>Parameters:</p><table><thead><tr><th align="left">Name</th><th align="left">Type</th><th align="left">Required</th><th align="left">Description</th></tr></thead><tbody><tr><td align="left">bookie_src</td><td align="left">String</td><td align="left">Yes</td><td align="left">Bookie src to decommission..</td></tr></tbody></table></li><li><p>Response:  </p><table><thead><tr><th align="left">Code</th><th align="left">Description</th></tr></thead><tbody><tr><td align="left">200</td><td align="left">Successful operation</td></tr><tr><td align="left">403</td><td align="left">Permission denied</td></tr><tr><td align="left">404</td><td align="left">Not found</td></tr></tbody></table></li></ul></li></ol></div></article><nav class="pagination-nav docusaurus-mt-lg" aria-label="Docs pages navigation"><a class="pagination-nav__link pagination-nav__link--prev" href="/docs/admin/upgrade"><div class="pagination-nav__sublabel">Previous</div><div class="pagination-nav__label">Upgrade</div></a><a class="pagination-nav__link pagination-nav__link--next" href="/docs/admin/decomission"><div class="pagination-nav__sublabel">Next</div><div class="pagination-nav__label">Decommission Bookies</div></a></nav></div></div><div class="col col--3"><div class="tableOfContents_bqdL thin-scrollbar theme-doc-toc-desktop"><ul class="table-of-contents table-of-contents__left-border"><li><a href="#all-the-endpoints" class="table-of-contents__link toc-highlight">All the endpoints</a></li><li><a href="#heartbeat" class="table-of-contents__link toc-highlight">Heartbeat</a><ul><li><a href="#endpoint-heartbeat" class="table-of-contents__link toc-highlight">Endpoint: /heartbeat</a></li></ul></li><li><a href="#config" class="table-of-contents__link toc-highlight">Config</a><ul><li><a href="#endpoint-apiv1configserver_config" class="table-of-contents__link toc-highlight">Endpoint: /api/v1/config/server_config</a></li></ul></li><li><a href="#metrics" class="table-of-contents__link toc-highlight">Metrics</a><ul><li><a href="#endpoint-metrics" class="table-of-contents__link toc-highlight">Endpoint: /metrics</a></li></ul></li><li><a href="#ledger" class="table-of-contents__link toc-highlight">Ledger</a><ul><li><a href="#endpoint-apiv1ledgerdeleteledger_idledger_id" class="table-of-contents__link toc-highlight">Endpoint: /api/v1/ledger/delete/?ledger_id=&lt;ledger_id&gt;</a></li><li><a href="#endpoint-apiv1ledgerlistprint_metadatametadata" class="table-of-contents__link toc-highlight">Endpoint: /api/v1/ledger/list/?print_metadata=&lt;metadata&gt;</a></li><li><a href="#endpoint-apiv1ledgermetadataledger_idledger_id" class="table-of-contents__link toc-highlight">Endpoint: /api/v1/ledger/metadata/?ledger_id=&lt;ledger_id&gt;</a></li><li><a href="#endpoint-apiv1ledgerreadledger_idledger_idstart_entry_idstart_entry_idend_entry_idend_entry_id" class="table-of-contents__link toc-highlight">Endpoint: /api/v1/ledger/read/?ledger_id=&lt;ledger_id&gt;&amp;start_entry_id=&lt;start_entry_id&gt;&amp;end_entry_id=&lt;end_entry_id&gt;</a></li></ul></li><li><a href="#bookie" class="table-of-contents__link toc-highlight">Bookie</a><ul><li><a href="#endpoint-apiv1bookieinfo" class="table-of-contents__link toc-highlight">Endpoint: /api/v1/bookie/info</a></li><li><a href="#endpoint-apiv1bookielist_bookiestypetypeprint_hostnameshostnames" class="table-of-contents__link toc-highlight">Endpoint: /api/v1/bookie/list_bookies/?type=&lt;type&gt;&amp;print_hostnames=&lt;hostnames&gt;</a></li><li><a href="#endpoint-apiv1bookielist_bookie_info" class="table-of-contents__link toc-highlight">Endpoint: /api/v1/bookie/list_bookie_info</a></li><li><a href="#endpoint-apiv1bookiecluster_info" class="table-of-contents__link toc-highlight">Endpoint: /api/v1/bookie/cluster_info</a></li><li><a href="#endpoint-apiv1bookielast_log_mark" class="table-of-contents__link toc-highlight">Endpoint: /api/v1/bookie/last_log_mark</a></li><li><a href="#endpoint-apiv1bookielist_disk_filefile_typetype" class="table-of-contents__link toc-highlight">Endpoint: /api/v1/bookie/list_disk_file/?file_type=&lt;type&gt;</a></li><li><a href="#endpoint-apiv1bookieexpand_storage" class="table-of-contents__link toc-highlight">Endpoint: /api/v1/bookie/expand_storage</a></li><li><a href="#endpoint-apiv1bookiegc" class="table-of-contents__link toc-highlight">Endpoint: /api/v1/bookie/gc</a></li><li><a href="#endpoint-apiv1bookiegc_details" class="table-of-contents__link toc-highlight">Endpoint: /api/v1/bookie/gc_details</a></li><li><a href="#endpoint-apiv1bookiegcsuspend_compaction" class="table-of-contents__link toc-highlight">Endpoint: /api/v1/bookie/gc/suspend_compaction</a></li><li><a href="#endpoint-apiv1bookiegcresume_compaction" class="table-of-contents__link toc-highlight">Endpoint: /api/v1/bookie/gc/resume_compaction</a></li><li><a href="#endpoint-apiv1bookiestate" class="table-of-contents__link toc-highlight">Endpoint: /api/v1/bookie/state</a></li><li><a href="#endpoint-apiv1bookiesanity" class="table-of-contents__link toc-highlight">Endpoint: /api/v1/bookie/sanity</a></li><li><a href="#endpoint-apiv1bookieis_ready" class="table-of-contents__link toc-highlight">Endpoint: /api/v1/bookie/is_ready</a></li><li><a href="#endpoint-apiv1bookieentry_location_compact" class="table-of-contents__link toc-highlight">Endpoint: /api/v1/bookie/entry_location_compact</a></li></ul></li><li><a href="#auto-recovery" class="table-of-contents__link toc-highlight">Auto recovery</a><ul><li><a href="#endpoint-apiv1autorecoverybookie" class="table-of-contents__link toc-highlight">Endpoint: /api/v1/autorecovery/bookie/</a></li><li><a href="#endpoint-apiv1autorecoverylist_under_replicated_ledgermissingreplicabookie_addressexcludingmissingreplicabookie_address" class="table-of-contents__link toc-highlight">Endpoint: /api/v1/autorecovery/list_under_replicated_ledger/?missingreplica=&lt;bookie_address&gt;&amp;excludingmissingreplica=&lt;bookie_address&gt;</a></li><li><a href="#endpoint-apiv1autorecoverywho_is_auditor" class="table-of-contents__link toc-highlight">Endpoint: /api/v1/autorecovery/who_is_auditor</a></li><li><a href="#endpoint-apiv1autorecoverytrigger_audit" class="table-of-contents__link toc-highlight">Endpoint: /api/v1/autorecovery/trigger_audit</a></li><li><a href="#endpoint-apiv1autorecoverylost_bookie_recovery_delay" class="table-of-contents__link toc-highlight">Endpoint: /api/v1/autorecovery/lost_bookie_recovery_delay</a></li><li><a href="#endpoint-apiv1autorecoverydecommission" class="table-of-contents__link toc-highlight">Endpoint: /api/v1/autorecovery/decommission</a></li></ul></li></ul></div></div></div></div></main></div></div><footer class="footer footer--dark"><div class="container container-fluid"><div class="row footer__links"><div class="col footer__col"><div class="footer__title">Documentation</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/docs/overview">Overview</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/getting-started/installation">Getting started</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/deployment/manual">Deployment</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/admin/bookies">Administration</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/api/overview">API</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/security/overview">Security</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/development/protocol">Development</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/reference/config">Reference</a></li></ul></div><div class="col footer__col"><div class="footer__title">Community</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/community/mailing-lists">Mailing lists</a></li><li class="footer__item"><a class="footer__link-item" href="/community/slack">Slack</a></li><li class="footer__item"><a href="https://github.com/apache/bookkeeper" target="_blank" rel="noopener noreferrer" class="footer__link-item">Github<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a href="https://twitter.com/asfbookkeeper" target="_blank" rel="noopener noreferrer" class="footer__link-item">Twitter<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div><div class="col footer__col"><div class="footer__title">Project</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/project/who">Who are we?</a></li><li class="footer__item"><a class="footer__link-item" href="/project/bylaws">Bylaws</a></li><li class="footer__item"><a href="https://apache.org/licenses" target="_blank" rel="noopener noreferrer" class="footer__link-item">License<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a class="footer__link-item" href="/project/privacy">Privacy policy</a></li><li class="footer__item"><a href="https://www.apache.org/foundation/sponsorship.html" target="_blank" rel="noopener noreferrer" class="footer__link-item">Sponsorship<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a href="https://www.apache.org/foundation/thanks.html" target="_blank" rel="noopener noreferrer" class="footer__link-item">Thanks<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div></div><div class="footer__bottom text--center"><div class="footer__copyright"><footer class="footer">
         <div class="container">
           <div class="content has-text-centered">
             <p>
@@ -25,7 +25,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/admin/metrics/index.html b/content/docs/admin/metrics/index.html
index 43c23d0..8ceb530 100644
--- a/content/docs/admin/metrics/index.html
+++ b/content/docs/admin/metrics/index.html
@@ -4,12 +4,12 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">Metric collection | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/admin/metrics"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.17.0"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.17.0"><meta data-rh="true" name="docsearch:version" content="4.17.0"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.17.0"><meta data-rh="true" property="og:title" content="Metric collection | Apache BookKeeper"><meta data-rh="true" name="description" content="BookKeeper enables metrics collection through a variety of stats providers."><meta data-rh="true" property="og:description" content="BookKeeper enables metrics collection through a variety of stats providers."><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/admin/metrics"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/admin/metrics" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/admin/metrics" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
-<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navbar__brand" href="/"><div class="navbar__logo"><img src="/img/bk-logo.svg" alt="Apache Bookkeeper" class="themedImage_ToTc themedImage--light_HNdA"><img src="/img/bk-logo.svg" alt="Apache Bookkeeper" class="themedImage_ToTc themedImage--dark_i4oU"></div><b class="navbar__title text--truncate">Apache BookKeeper</b></a><a class="navbar__item navbar__link" href="/docs/overview/">Documentation</a><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Community</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/community/mailing-lists">Mailing lists</a></li><li><a class="dropdown__link" href="/community/slack">Slack</a></li><li><a href="https://github.com/apache/bookkeeper/issues" target="_blank" rel="noopener noreferrer" class="dropdown__link">Github issues<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a class="dropdown__link" href="/community/releases">Release management</a></li><li><a class="dropdown__link" href="/community/meeting">Community meetings</a></li><li><a class="dropdown__link" href="/community/contributing">Contribution guide</a></li><li><a class="dropdown__link" href="/community/coding-guide">Coding guide</a></li><li><a class="dropdown__link" href="/community/testing">Testing guide</a></li><li><a class="dropdown__link" href="/community/issue-report">Issue report guide</a></li><li><a class="dropdown__link" href="/community/release-guide">Release guide</a></li><li><a class="dropdown__link" href="/community/presentations">Presentations</a></li><li><a class="dropdown__link" href="/community/bookkeeper-proposals">BookKeeper proposals (BP)</a></li></ul></div><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Project</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/project/who">Who are we?</a></li><li><a class="dropdown__link" href="/project/bylaws">Bylaws</a></li><li><a href="https://apache.org/licenses" target="_blank" rel="noopener noreferrer" class="dropdown__link">License<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a class="dropdown__link" href="/project/privacy">Privacy policy</a></li><li><a href="https://www.apache.org/foundation/sponsorship.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Sponsorship<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a href="https://www.apache.org/foundation/thanks.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Thanks<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div></div><div class="navbar__items navbar__items--right"><div class="navbar__item dropdown dropdown--hoverable dropdown--right"><a class="navbar__link" aria-haspopup="true" aria-expanded="false" role="button" href="/docs/admin/autorecovery">4.17.0</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/docs/next/admin/metrics">Next</a></li><li><a aria-current="page" class="dropdown__link dropdown__link--active" href="/docs/admin/metrics">4.17.0</a></li><li><a class="dropdown__link" href="/docs/4.16.5/admin/metrics">4.16.5</a></li><li><a class="dropdown__link" href="/docs/4.15.5/admin/metrics">4.15.5</a></li><li><a class="dropdown__link" href="/docs/4.14.8/admin/metrics">4.14.8</a></li><li><a class="dropdown__link" href="/docs/4.13.0/admin/metrics">4.13.0</a></li><li><a class="dropdown__link" href="/docs/4.12.1/admin/metrics">4.12.1</a></li><li><a class="dropdown__link" href="/docs/4.11.1/admin/metrics">4.11.1</a></li><li><a class="dropdown__link" href="/docs/4.10.0/admin/metrics">4.10.0</a></li><li><a class="dropdown__link" href="/docs/4.9.2/admin/metrics">4.9.2</a></li><li><a class="dropdown__link" href="/docs/4.8.2/admin/metrics">4.8.2</a></li><li><a class="dropdown__link" href="/docs/4.7.3/admin/metrics">4.7.3</a></li><li><a class="dropdown__link" href="/docs/4.6.2/admin/metrics">4.6.2</a></li><li><a class="dropdown__link" href="/docs/4.5.1/admin/metrics">4.5.1</a></li></ul></div><a class="navbar__item navbar__link" href="/releases">Download</a><div class="toggle_vylO colorModeToggle_DEke"><button class="clean-btn toggleButton_gllP toggleButtonDisabled_aARS" type="button" disabled="" title="Switch between dark and light mode (currently light mode)" aria-label="Switch between dark and light mode (currently light mode)" aria-live="polite"><svg viewBox="0 0 24 24" width="24" height="24" class="lightToggleIcon_pyhR"><path fill="currentColor" d="M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"></path></svg><svg viewBox="0 0 24 24" width="24" height="24" class="darkToggleIcon_wfgR"><path fill="currentColor" d="M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"></path></svg></button></div><div class="searchBox_ZlJk"></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div></nav><div id="docusaurus_skipToContent_fallback" class="main-wrapper mainWrapper_z2l0 docsWrapper_BCFX"><button aria-label="Scroll back to top" class="clean-btn theme-back-to-top-button backToTopButton_sjWU" type="button"></button><div class="docPage__5DB"><main class="docMainContainer_gTbr docMainContainerEnhanced_Uz_u"><div class="container padding-top--md padding-bottom--lg"><div class="row"><div class="col docItemCol_VOVn"><div class="docItemContainer_Djhp"><article><span class="theme-doc-version-badge badge badge--secondary">Version: 4.17.0</span><div class="tocCollapsible_ETCw theme-doc-toc-mobile tocMobile_ITEo"><button type="button" class="clean-btn tocCollapsibleButton_TO0P">On this page</button></div><div class="theme-doc-markdown markdown"><header><h1>Metric collection</h1></header><p>BookKeeper enables metrics collection through a variety of <a href="#stats-providers">stats providers</a>.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="stats-providers">Stats providers<a href="#stats-providers" class="hash-link" aria-label="Direct link to Stats providers" title="Direct link to Stats providers">​</a></h2><p>BookKeeper has stats provider implementations for these sinks:</p><table><thead><tr><th align="left">Provider</th><th align="left">Provider class name</th></tr></thead><tbody><tr><td align="left"><a href="https://mvnrepository.com/artifact/org.apache.bookkeeper.stats/codahale-metrics-provider" target="_blank" rel="noopener noreferrer">Codahale Metrics</a></td><td align="left"><code>org.apache.bookkeeper.stats.CodahaleMetricsProvider</code></td></tr><tr><td align="left"><a href="https://prometheus.io/" target="_blank" rel="noopener noreferrer">Prometheus</a></td><td align="left"><code>org.apache.bookkeeper.stats.prometheus.PrometheusMetricsProvider</code></td></tr></tbody></table><blockquote><p>The <a href="https://github.com/apache/bookkeeper/tree/master/bookkeeper-stats-providers/codahale-metrics-provider" target="_blank" rel="noopener noreferrer">Codahale Metrics</a> stats provider is the default provider.</p></blockquote><h2 class="anchor anchorWithStickyNavbar_LWe7" id="enabling-stats-providers-in-bookies">Enabling stats providers in bookies<a href="#enabling-stats-providers-in-bookies" class="hash-link" aria-label="Direct link to Enabling stats providers in bookies" title="Direct link to Enabling stats providers in bookies">​</a></h2><p>Two stats-related <a href="/docs/reference/config/">configuration parameters</a> are available for bookies:</p><table><thead><tr><th align="left">Parameter</th><th align="left">Description</th><th align="left">Default</th></tr></thead><tbody><tr><td align="left"><code>enableStatistics</code></td><td align="left">Whether statistics are enabled for the bookie</td><td align="left"><code>false</code></td></tr><tr><td align="left"><code>sanityCheckMetricsEnabled</code></td><td align="left">Flag to enable sanity check metrics in bookie stats</td><td align="left"><code>false</code></td></tr><tr><td align="left"><code>statsProviderClass</code></td><td align="left">The stats provider class used by the bookie</td><td align="left"><code>org.apache.bookkeeper.stats.CodahaleMetricsProvider</code></td></tr></tbody></table><p>To enable stats:</p><ul><li>set the <code>enableStatistics</code> parameter to <code>true</code></li><li>set <code>statsProviderClass</code> to the desired provider (see the <a href="#stats-providers">table above</a> for a listing of classes)</li></ul></div></article><nav class="pagination-nav docusaurus-mt-lg" aria-label="Docs pages navigation"></nav></div></div><div class="col col--3"><div class="tableOfContents_bqdL thin-scrollbar theme-doc-toc-desktop"><ul class="table-of-contents table-of-contents__left-border"><li><a href="#stats-providers" class="table-of-contents__link toc-highlight">Stats providers</a></li><li><a href="#enabling-stats-providers-in-bookies" class="table-of-contents__link toc-highlight">Enabling stats providers in bookies</a></li></ul></div></div></div></div></main></div></div><footer class="footer footer--dark"><div class="container container-fluid"><div class="row footer__links"><div class="col footer__col"><div class="footer__title">Documentation</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/docs/overview">Overview</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/getting-started/installation">Getting started</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/deployment/manual">Deployment</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/admin/bookies">Administration</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/api/overview">API</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/security/overview">Security</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/development/protocol">Development</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/reference/config">Reference</a></li></ul></div><div class="col footer__col"><div class="footer__title">Community</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/community/mailing-lists">Mailing lists</a></li><li class="footer__item"><a class="footer__link-item" href="/community/slack">Slack</a></li><li class="footer__item"><a href="https://github.com/apache/bookkeeper" target="_blank" rel="noopener noreferrer" class="footer__link-item">Github<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a href="https://twitter.com/asfbookkeeper" target="_blank" rel="noopener noreferrer" class="footer__link-item">Twitter<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div><div class="col footer__col"><div class="footer__title">Project</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/project/who">Who are we?</a></li><li class="footer__item"><a class="footer__link-item" href="/project/bylaws">Bylaws</a></li><li class="footer__item"><a href="https://apache.org/licenses" target="_blank" rel="noopener noreferrer" class="footer__link-item">License<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a class="footer__link-item" href="/project/privacy">Privacy policy</a></li><li class="footer__item"><a href="https://www.apache.org/foundation/sponsorship.html" target="_blank" rel="noopener noreferrer" class="footer__link-item">Sponsorship<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a href="https://www.apache.org/foundation/thanks.html" target="_blank" rel="noopener noreferrer" class="footer__link-item">Thanks<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div></div><div class="footer__bottom text--center"><div class="footer__copyright"><footer class="footer">
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navbar__brand" href="/"><div class="navbar__logo"><img src="/img/bk-logo.svg" alt="Apache Bookkeeper" class="themedImage_ToTc themedImage--light_HNdA"><img src="/img/bk-logo.svg" alt="Apache Bookkeeper" class="themedImage_ToTc themedImage--dark_i4oU"></div><b class="navbar__title text--truncate">Apache BookKeeper</b></a><a aria-current="page" class="navbar__item navbar__link navbar__link--active" href="/docs/overview/">Documentation</a><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Community</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/community/mailing-lists">Mailing lists</a></li><li><a class="dropdown__link" href="/community/slack">Slack</a></li><li><a href="https://github.com/apache/bookkeeper/issues" target="_blank" rel="noopener noreferrer" class="dropdown__link">Github issues<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a class="dropdown__link" href="/community/releases">Release management</a></li><li><a class="dropdown__link" href="/community/meeting">Community meetings</a></li><li><a class="dropdown__link" href="/community/contributing">Contribution guide</a></li><li><a class="dropdown__link" href="/community/coding-guide">Coding guide</a></li><li><a class="dropdown__link" href="/community/testing">Testing guide</a></li><li><a class="dropdown__link" href="/community/issue-report">Issue report guide</a></li><li><a class="dropdown__link" href="/community/release-guide">Release guide</a></li><li><a class="dropdown__link" href="/community/presentations">Presentations</a></li><li><a class="dropdown__link" href="/community/bookkeeper-proposals">BookKeeper proposals (BP)</a></li></ul></div><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Project</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/project/who">Who are we?</a></li><li><a class="dropdown__link" href="/project/bylaws">Bylaws</a></li><li><a href="https://apache.org/licenses" target="_blank" rel="noopener noreferrer" class="dropdown__link">License<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a class="dropdown__link" href="/project/privacy">Privacy policy</a></li><li><a href="https://www.apache.org/foundation/sponsorship.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Sponsorship<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a href="https://www.apache.org/foundation/thanks.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Thanks<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div></div><div class="navbar__items navbar__items--right"><div class="navbar__item dropdown dropdown--hoverable dropdown--right"><a class="navbar__link" aria-haspopup="true" aria-expanded="false" role="button" href="/docs/overview/">4.17.0</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/docs/next/admin/metrics">Next</a></li><li><a aria-current="page" class="dropdown__link dropdown__link--active" href="/docs/admin/metrics">4.17.0</a></li><li><a class="dropdown__link" href="/docs/4.16.5/admin/metrics">4.16.5</a></li><li><a class="dropdown__link" href="/docs/4.15.5/admin/metrics">4.15.5</a></li><li><a class="dropdown__link" href="/docs/4.14.8/admin/metrics">4.14.8</a></li><li><a class="dropdown__link" href="/docs/4.13.0/admin/metrics">4.13.0</a></li><li><a class="dropdown__link" href="/docs/4.12.1/admin/metrics">4.12.1</a></li><li><a class="dropdown__link" href="/docs/4.11.1/admin/metrics">4.11.1</a></li><li><a class="dropdown__link" href="/docs/4.10.0/admin/metrics">4.10.0</a></li><li><a class="dropdown__link" href="/docs/4.9.2/admin/metrics">4.9.2</a></li><li><a class="dropdown__link" href="/docs/4.8.2/admin/metrics">4.8.2</a></li><li><a class="dropdown__link" href="/docs/4.7.3/admin/metrics">4.7.3</a></li><li><a class="dropdown__link" href="/docs/4.6.2/admin/metrics">4.6.2</a></li><li><a class="dropdown__link" href="/docs/4.5.1/admin/metrics">4.5.1</a></li></ul></div><a class="navbar__item navbar__link" href="/releases">Download</a><div class="toggle_vylO colorModeToggle_DEke"><button class="clean-btn toggleButton_gllP toggleButtonDisabled_aARS" type="button" disabled="" title="Switch between dark and light mode (currently light mode)" aria-label="Switch between dark and light mode (currently light mode)" aria-live="polite"><svg viewBox="0 0 24 24" width="24" height="24" class="lightToggleIcon_pyhR"><path fill="currentColor" d="M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"></path></svg><svg viewBox="0 0 24 24" width="24" height="24" class="darkToggleIcon_wfgR"><path fill="currentColor" d="M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"></path></svg></button></div><div class="searchBox_ZlJk"></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div></nav><div id="docusaurus_skipToContent_fallback" class="main-wrapper mainWrapper_z2l0 docsWrapper_BCFX"><button aria-label="Scroll back to top" class="clean-btn theme-back-to-top-button backToTopButton_sjWU" type="button"></button><div class="docPage__5DB"><aside class="theme-doc-sidebar-container docSidebarContainer_b6E3"><div class="sidebarViewport_Xe31"><div class="sidebar_njMd"><nav aria-label="Docs sidebar" class="menu thin-scrollbar menu_SIkG"><ul class="theme-doc-sidebar-menu menu__list"><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-1 menu__list-item"><a class="menu__link" href="/docs/overview/">Overview</a></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/getting-started/installation">Getting started</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/deployment/manual">Deployment</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret menu__link--active" aria-expanded="true" href="/docs/admin/bookies">Administration</a></div><ul style="display:block;overflow:visible;height:auto" class="menu__list"><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/admin/bookies">BookKeeper administration</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/admin/autorecovery">AutoRecovery</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link menu__link--active" aria-current="page" tabindex="0" href="/docs/admin/metrics">Metrics collection</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/admin/upgrade">Upgrade</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/admin/http">Admin REST API</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/admin/decomission">Decommissioning Bookies</a></li></ul></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/api/overview">API</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/security/overview">Security</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/development/protocol">Development</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/reference/config">Reference</a></div></li></ul></nav></div></div></aside><main class="docMainContainer_gTbr"><div class="container padding-top--md padding-bottom--lg"><div class="row"><div class="col docItemCol_VOVn"><div class="docItemContainer_Djhp"><article><span class="theme-doc-version-badge badge badge--secondary">Version: 4.17.0</span><div class="tocCollapsible_ETCw theme-doc-toc-mobile tocMobile_ITEo"><button type="button" class="clean-btn tocCollapsibleButton_TO0P">On this page</button></div><div class="theme-doc-markdown markdown"><header><h1>Metric collection</h1></header><p>BookKeeper enables metrics collection through a variety of <a href="#stats-providers">stats providers</a>.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="stats-providers">Stats providers<a href="#stats-providers" class="hash-link" aria-label="Direct link to Stats providers" title="Direct link to Stats providers">​</a></h2><p>BookKeeper has stats provider implementations for these sinks:</p><table><thead><tr><th align="left">Provider</th><th align="left">Provider class name</th></tr></thead><tbody><tr><td align="left"><a href="https://mvnrepository.com/artifact/org.apache.bookkeeper.stats/codahale-metrics-provider" target="_blank" rel="noopener noreferrer">Codahale Metrics</a></td><td align="left"><code>org.apache.bookkeeper.stats.CodahaleMetricsProvider</code></td></tr><tr><td align="left"><a href="https://prometheus.io/" target="_blank" rel="noopener noreferrer">Prometheus</a></td><td align="left"><code>org.apache.bookkeeper.stats.prometheus.PrometheusMetricsProvider</code></td></tr></tbody></table><blockquote><p>The <a href="https://github.com/apache/bookkeeper/tree/master/bookkeeper-stats-providers/codahale-metrics-provider" target="_blank" rel="noopener noreferrer">Codahale Metrics</a> stats provider is the default provider.</p></blockquote><h2 class="anchor anchorWithStickyNavbar_LWe7" id="enabling-stats-providers-in-bookies">Enabling stats providers in bookies<a href="#enabling-stats-providers-in-bookies" class="hash-link" aria-label="Direct link to Enabling stats providers in bookies" title="Direct link to Enabling stats providers in bookies">​</a></h2><p>Two stats-related <a href="/docs/reference/config/">configuration parameters</a> are available for bookies:</p><table><thead><tr><th align="left">Parameter</th><th align="left">Description</th><th align="left">Default</th></tr></thead><tbody><tr><td align="left"><code>enableStatistics</code></td><td align="left">Whether statistics are enabled for the bookie</td><td align="left"><code>false</code></td></tr><tr><td align="left"><code>sanityCheckMetricsEnabled</code></td><td align="left">Flag to enable sanity check metrics in bookie stats</td><td align="left"><code>false</code></td></tr><tr><td align="left"><code>statsProviderClass</code></td><td align="left">The stats provider class used by the bookie</td><td align="left"><code>org.apache.bookkeeper.stats.CodahaleMetricsProvider</code></td></tr></tbody></table><p>To enable stats:</p><ul><li>set the <code>enableStatistics</code> parameter to <code>true</code></li><li>set <code>statsProviderClass</code> to the desired provider (see the <a href="#stats-providers">table above</a> for a listing of classes)</li></ul></div></article><nav class="pagination-nav docusaurus-mt-lg" aria-label="Docs pages navigation"><a class="pagination-nav__link pagination-nav__link--prev" href="/docs/admin/autorecovery"><div class="pagination-nav__sublabel">Previous</div><div class="pagination-nav__label">Using AutoRecovery</div></a><a class="pagination-nav__link pagination-nav__link--next" href="/docs/admin/upgrade"><div class="pagination-nav__sublabel">Next</div><div class="pagination-nav__label">Upgrade</div></a></nav></div></div><div class="col col--3"><div class="tableOfContents_bqdL thin-scrollbar theme-doc-toc-desktop"><ul class="table-of-contents table-of-contents__left-border"><li><a href="#stats-providers" class="table-of-contents__link toc-highlight">Stats providers</a></li><li><a href="#enabling-stats-providers-in-bookies" class="table-of-contents__link toc-highlight">Enabling stats providers in bookies</a></li></ul></div></div></div></div></main></div></div><footer class="footer footer--dark"><div class="container container-fluid"><div class="row footer__links"><div class="col footer__col"><div class="footer__title">Documentation</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/docs/overview">Overview</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/getting-started/installation">Getting started</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/deployment/manual">Deployment</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/admin/bookies">Administration</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/api/overview">API</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/security/overview">Security</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/development/protocol">Development</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/reference/config">Reference</a></li></ul></div><div class="col footer__col"><div class="footer__title">Community</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/community/mailing-lists">Mailing lists</a></li><li class="footer__item"><a class="footer__link-item" href="/community/slack">Slack</a></li><li class="footer__item"><a href="https://github.com/apache/bookkeeper" target="_blank" rel="noopener noreferrer" class="footer__link-item">Github<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a href="https://twitter.com/asfbookkeeper" target="_blank" rel="noopener noreferrer" class="footer__link-item">Twitter<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div><div class="col footer__col"><div class="footer__title">Project</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/project/who">Who are we?</a></li><li class="footer__item"><a class="footer__link-item" href="/project/bylaws">Bylaws</a></li><li class="footer__item"><a href="https://apache.org/licenses" target="_blank" rel="noopener noreferrer" class="footer__link-item">License<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a class="footer__link-item" href="/project/privacy">Privacy policy</a></li><li class="footer__item"><a href="https://www.apache.org/foundation/sponsorship.html" target="_blank" rel="noopener noreferrer" class="footer__link-item">Sponsorship<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a href="https://www.apache.org/foundation/thanks.html" target="_blank" rel="noopener noreferrer" class="footer__link-item">Thanks<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div></div><div class="footer__bottom text--center"><div class="footer__copyright"><footer class="footer">
         <div class="container">
           <div class="content has-text-centered">
             <p>
@@ -22,7 +22,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/admin/perf/index.html b/content/docs/admin/perf/index.html
index 34e4833..593853f 100644
--- a/content/docs/admin/perf/index.html
+++ b/content/docs/admin/perf/index.html
@@ -4,12 +4,12 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">Performance tuning | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/admin/perf"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.17.0"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.17.0"><meta data-rh="true" name="docsearch:version" content="4.17.0"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.17.0"><meta data-rh="true" property="og:title" content="Performance tuning | Apache BookKeeper"><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/admin/perf"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/admin/perf" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/admin/perf" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
-<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navbar__brand" href="/"><div class="navbar__logo"><img src="/img/bk-logo.svg" alt="Apache Bookkeeper" class="themedImage_ToTc themedImage--light_HNdA"><img src="/img/bk-logo.svg" alt="Apache Bookkeeper" class="themedImage_ToTc themedImage--dark_i4oU"></div><b class="navbar__title text--truncate">Apache BookKeeper</b></a><a class="navbar__item navbar__link" href="/docs/overview/">Documentation</a><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Community</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/community/mailing-lists">Mailing lists</a></li><li><a class="dropdown__link" href="/community/slack">Slack</a></li><li><a href="https://github.com/apache/bookkeeper/issues" target="_blank" rel="noopener noreferrer" class="dropdown__link">Github issues<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a class="dropdown__link" href="/community/releases">Release management</a></li><li><a class="dropdown__link" href="/community/meeting">Community meetings</a></li><li><a class="dropdown__link" href="/community/contributing">Contribution guide</a></li><li><a class="dropdown__link" href="/community/coding-guide">Coding guide</a></li><li><a class="dropdown__link" href="/community/testing">Testing guide</a></li><li><a class="dropdown__link" href="/community/issue-report">Issue report guide</a></li><li><a class="dropdown__link" href="/community/release-guide">Release guide</a></li><li><a class="dropdown__link" href="/community/presentations">Presentations</a></li><li><a class="dropdown__link" href="/community/bookkeeper-proposals">BookKeeper proposals (BP)</a></li></ul></div><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Project</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/project/who">Who are we?</a></li><li><a class="dropdown__link" href="/project/bylaws">Bylaws</a></li><li><a href="https://apache.org/licenses" target="_blank" rel="noopener noreferrer" class="dropdown__link">License<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a class="dropdown__link" href="/project/privacy">Privacy policy</a></li><li><a href="https://www.apache.org/foundation/sponsorship.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Sponsorship<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a href="https://www.apache.org/foundation/thanks.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Thanks<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div></div><div class="navbar__items navbar__items--right"><div class="navbar__item dropdown dropdown--hoverable dropdown--right"><a class="navbar__link" aria-haspopup="true" aria-expanded="false" role="button" href="/docs/admin/autorecovery">4.17.0</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/docs/next/admin/perf">Next</a></li><li><a aria-current="page" class="dropdown__link dropdown__link--active" href="/docs/admin/perf">4.17.0</a></li><li><a class="dropdown__link" href="/docs/4.16.5/admin/perf">4.16.5</a></li><li><a class="dropdown__link" href="/docs/4.15.5/admin/perf">4.15.5</a></li><li><a class="dropdown__link" href="/docs/4.14.8/admin/perf">4.14.8</a></li><li><a class="dropdown__link" href="/docs/4.13.0/admin/perf">4.13.0</a></li><li><a class="dropdown__link" href="/docs/4.12.1/admin/perf">4.12.1</a></li><li><a class="dropdown__link" href="/docs/4.11.1/admin/perf">4.11.1</a></li><li><a class="dropdown__link" href="/docs/4.10.0/admin/perf">4.10.0</a></li><li><a class="dropdown__link" href="/docs/4.9.2/admin/perf">4.9.2</a></li><li><a class="dropdown__link" href="/docs/4.8.2/admin/perf">4.8.2</a></li><li><a class="dropdown__link" href="/docs/4.7.3/admin/perf">4.7.3</a></li><li><a class="dropdown__link" href="/docs/4.6.2/admin/perf">4.6.2</a></li><li><a class="dropdown__link" href="/docs/4.5.1/admin/perf">4.5.1</a></li></ul></div><a class="navbar__item navbar__link" href="/releases">Download</a><div class="toggle_vylO colorModeToggle_DEke"><button class="clean-btn toggleButton_gllP toggleButtonDisabled_aARS" type="button" disabled="" title="Switch between dark and light mode (currently light mode)" aria-label="Switch between dark and light mode (currently light mode)" aria-live="polite"><svg viewBox="0 0 24 24" width="24" height="24" class="lightToggleIcon_pyhR"><path fill="currentColor" d="M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"></path></svg><svg viewBox="0 0 24 24" width="24" height="24" class="darkToggleIcon_wfgR"><path fill="currentColor" d="M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"></path></svg></button></div><div class="searchBox_ZlJk"></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div></nav><div id="docusaurus_skipToContent_fallback" class="main-wrapper mainWrapper_z2l0 docsWrapper_BCFX"><button aria-label="Scroll back to top" class="clean-btn theme-back-to-top-button backToTopButton_sjWU" type="button"></button><div class="docPage__5DB"><main class="docMainContainer_gTbr docMainContainerEnhanced_Uz_u"><div class="container padding-top--md padding-bottom--lg"><div class="row"><div class="col docItemCol_VOVn"><div class="docItemContainer_Djhp"><article><span class="theme-doc-version-badge badge badge--secondary">Version: 4.17.0</span><div class="theme-doc-markdown markdown"><header><h1>Performance tuning</h1></header></div></article><nav class="pagination-nav docusaurus-mt-lg" aria-label="Docs pages navigation"></nav></div></div></div></div></main></div></div><footer class="footer footer--dark"><div class="container container-fluid"><div class="row footer__links"><div class="col footer__col"><div class="footer__title">Documentation</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/docs/overview">Overview</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/getting-started/installation">Getting started</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/deployment/manual">Deployment</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/admin/bookies">Administration</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/api/overview">API</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/security/overview">Security</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/development/protocol">Development</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/reference/config">Reference</a></li></ul></div><div class="col footer__col"><div class="footer__title">Community</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/community/mailing-lists">Mailing lists</a></li><li class="footer__item"><a class="footer__link-item" href="/community/slack">Slack</a></li><li class="footer__item"><a href="https://github.com/apache/bookkeeper" target="_blank" rel="noopener noreferrer" class="footer__link-item">Github<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a href="https://twitter.com/asfbookkeeper" target="_blank" rel="noopener noreferrer" class="footer__link-item">Twitter<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div><div class="col footer__col"><div class="footer__title">Project</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/project/who">Who are we?</a></li><li class="footer__item"><a class="footer__link-item" href="/project/bylaws">Bylaws</a></li><li class="footer__item"><a href="https://apache.org/licenses" target="_blank" rel="noopener noreferrer" class="footer__link-item">License<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a class="footer__link-item" href="/project/privacy">Privacy policy</a></li><li class="footer__item"><a href="https://www.apache.org/foundation/sponsorship.html" target="_blank" rel="noopener noreferrer" class="footer__link-item">Sponsorship<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a href="https://www.apache.org/foundation/thanks.html" target="_blank" rel="noopener noreferrer" class="footer__link-item">Thanks<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div></div><div class="footer__bottom text--center"><div class="footer__copyright"><footer class="footer">
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navbar__brand" href="/"><div class="navbar__logo"><img src="/img/bk-logo.svg" alt="Apache Bookkeeper" class="themedImage_ToTc themedImage--light_HNdA"><img src="/img/bk-logo.svg" alt="Apache Bookkeeper" class="themedImage_ToTc themedImage--dark_i4oU"></div><b class="navbar__title text--truncate">Apache BookKeeper</b></a><a class="navbar__item navbar__link" href="/docs/overview/">Documentation</a><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Community</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/community/mailing-lists">Mailing lists</a></li><li><a class="dropdown__link" href="/community/slack">Slack</a></li><li><a href="https://github.com/apache/bookkeeper/issues" target="_blank" rel="noopener noreferrer" class="dropdown__link">Github issues<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a class="dropdown__link" href="/community/releases">Release management</a></li><li><a class="dropdown__link" href="/community/meeting">Community meetings</a></li><li><a class="dropdown__link" href="/community/contributing">Contribution guide</a></li><li><a class="dropdown__link" href="/community/coding-guide">Coding guide</a></li><li><a class="dropdown__link" href="/community/testing">Testing guide</a></li><li><a class="dropdown__link" href="/community/issue-report">Issue report guide</a></li><li><a class="dropdown__link" href="/community/release-guide">Release guide</a></li><li><a class="dropdown__link" href="/community/presentations">Presentations</a></li><li><a class="dropdown__link" href="/community/bookkeeper-proposals">BookKeeper proposals (BP)</a></li></ul></div><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Project</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/project/who">Who are we?</a></li><li><a class="dropdown__link" href="/project/bylaws">Bylaws</a></li><li><a href="https://apache.org/licenses" target="_blank" rel="noopener noreferrer" class="dropdown__link">License<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a class="dropdown__link" href="/project/privacy">Privacy policy</a></li><li><a href="https://www.apache.org/foundation/sponsorship.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Sponsorship<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a href="https://www.apache.org/foundation/thanks.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Thanks<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div></div><div class="navbar__items navbar__items--right"><div class="navbar__item dropdown dropdown--hoverable dropdown--right"><a class="navbar__link" aria-haspopup="true" aria-expanded="false" role="button" href="/docs/overview/">4.17.0</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/docs/next/admin/perf">Next</a></li><li><a aria-current="page" class="dropdown__link dropdown__link--active" href="/docs/admin/perf">4.17.0</a></li><li><a class="dropdown__link" href="/docs/4.16.5/admin/perf">4.16.5</a></li><li><a class="dropdown__link" href="/docs/4.15.5/admin/perf">4.15.5</a></li><li><a class="dropdown__link" href="/docs/4.14.8/admin/perf">4.14.8</a></li><li><a class="dropdown__link" href="/docs/4.13.0/admin/perf">4.13.0</a></li><li><a class="dropdown__link" href="/docs/4.12.1/admin/perf">4.12.1</a></li><li><a class="dropdown__link" href="/docs/4.11.1/admin/perf">4.11.1</a></li><li><a class="dropdown__link" href="/docs/4.10.0/admin/perf">4.10.0</a></li><li><a class="dropdown__link" href="/docs/4.9.2/admin/perf">4.9.2</a></li><li><a class="dropdown__link" href="/docs/4.8.2/admin/perf">4.8.2</a></li><li><a class="dropdown__link" href="/docs/4.7.3/admin/perf">4.7.3</a></li><li><a class="dropdown__link" href="/docs/4.6.2/admin/perf">4.6.2</a></li><li><a class="dropdown__link" href="/docs/4.5.1/admin/perf">4.5.1</a></li></ul></div><a class="navbar__item navbar__link" href="/releases">Download</a><div class="toggle_vylO colorModeToggle_DEke"><button class="clean-btn toggleButton_gllP toggleButtonDisabled_aARS" type="button" disabled="" title="Switch between dark and light mode (currently light mode)" aria-label="Switch between dark and light mode (currently light mode)" aria-live="polite"><svg viewBox="0 0 24 24" width="24" height="24" class="lightToggleIcon_pyhR"><path fill="currentColor" d="M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"></path></svg><svg viewBox="0 0 24 24" width="24" height="24" class="darkToggleIcon_wfgR"><path fill="currentColor" d="M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"></path></svg></button></div><div class="searchBox_ZlJk"></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div></nav><div id="docusaurus_skipToContent_fallback" class="main-wrapper mainWrapper_z2l0 docsWrapper_BCFX"><button aria-label="Scroll back to top" class="clean-btn theme-back-to-top-button backToTopButton_sjWU" type="button"></button><div class="docPage__5DB"><main class="docMainContainer_gTbr docMainContainerEnhanced_Uz_u"><div class="container padding-top--md padding-bottom--lg"><div class="row"><div class="col docItemCol_VOVn"><div class="docItemContainer_Djhp"><article><span class="theme-doc-version-badge badge badge--secondary">Version: 4.17.0</span><div class="theme-doc-markdown markdown"><header><h1>Performance tuning</h1></header></div></article><nav class="pagination-nav docusaurus-mt-lg" aria-label="Docs pages navigation"></nav></div></div></div></div></main></div></div><footer class="footer footer--dark"><div class="container container-fluid"><div class="row footer__links"><div class="col footer__col"><div class="footer__title">Documentation</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/docs/overview">Overview</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/getting-started/installation">Getting started</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/deployment/manual">Deployment</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/admin/bookies">Administration</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/api/overview">API</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/security/overview">Security</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/development/protocol">Development</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/reference/config">Reference</a></li></ul></div><div class="col footer__col"><div class="footer__title">Community</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/community/mailing-lists">Mailing lists</a></li><li class="footer__item"><a class="footer__link-item" href="/community/slack">Slack</a></li><li class="footer__item"><a href="https://github.com/apache/bookkeeper" target="_blank" rel="noopener noreferrer" class="footer__link-item">Github<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a href="https://twitter.com/asfbookkeeper" target="_blank" rel="noopener noreferrer" class="footer__link-item">Twitter<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div><div class="col footer__col"><div class="footer__title">Project</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/project/who">Who are we?</a></li><li class="footer__item"><a class="footer__link-item" href="/project/bylaws">Bylaws</a></li><li class="footer__item"><a href="https://apache.org/licenses" target="_blank" rel="noopener noreferrer" class="footer__link-item">License<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a class="footer__link-item" href="/project/privacy">Privacy policy</a></li><li class="footer__item"><a href="https://www.apache.org/foundation/sponsorship.html" target="_blank" rel="noopener noreferrer" class="footer__link-item">Sponsorship<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a href="https://www.apache.org/foundation/thanks.html" target="_blank" rel="noopener noreferrer" class="footer__link-item">Thanks<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div></div><div class="footer__bottom text--center"><div class="footer__copyright"><footer class="footer">
         <div class="container">
           <div class="content has-text-centered">
             <p>
@@ -22,7 +22,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/admin/placement/index.html b/content/docs/admin/placement/index.html
index 1226743..3d542e7 100644
--- a/content/docs/admin/placement/index.html
+++ b/content/docs/admin/placement/index.html
@@ -4,12 +4,12 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">Customized placement policies | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/admin/placement"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.17.0"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.17.0"><meta data-rh="true" name="docsearch:version" content="4.17.0"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.17.0"><meta data-rh="true" property="og:title" content="Customized placement policies | Apache BookKeeper"><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/admin/placement"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/admin/placement" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/admin/placement" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
-<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navbar__brand" href="/"><div class="navbar__logo"><img src="/img/bk-logo.svg" alt="Apache Bookkeeper" class="themedImage_ToTc themedImage--light_HNdA"><img src="/img/bk-logo.svg" alt="Apache Bookkeeper" class="themedImage_ToTc themedImage--dark_i4oU"></div><b class="navbar__title text--truncate">Apache BookKeeper</b></a><a class="navbar__item navbar__link" href="/docs/overview/">Documentation</a><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Community</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/community/mailing-lists">Mailing lists</a></li><li><a class="dropdown__link" href="/community/slack">Slack</a></li><li><a href="https://github.com/apache/bookkeeper/issues" target="_blank" rel="noopener noreferrer" class="dropdown__link">Github issues<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a class="dropdown__link" href="/community/releases">Release management</a></li><li><a class="dropdown__link" href="/community/meeting">Community meetings</a></li><li><a class="dropdown__link" href="/community/contributing">Contribution guide</a></li><li><a class="dropdown__link" href="/community/coding-guide">Coding guide</a></li><li><a class="dropdown__link" href="/community/testing">Testing guide</a></li><li><a class="dropdown__link" href="/community/issue-report">Issue report guide</a></li><li><a class="dropdown__link" href="/community/release-guide">Release guide</a></li><li><a class="dropdown__link" href="/community/presentations">Presentations</a></li><li><a class="dropdown__link" href="/community/bookkeeper-proposals">BookKeeper proposals (BP)</a></li></ul></div><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Project</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/project/who">Who are we?</a></li><li><a class="dropdown__link" href="/project/bylaws">Bylaws</a></li><li><a href="https://apache.org/licenses" target="_blank" rel="noopener noreferrer" class="dropdown__link">License<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a class="dropdown__link" href="/project/privacy">Privacy policy</a></li><li><a href="https://www.apache.org/foundation/sponsorship.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Sponsorship<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a href="https://www.apache.org/foundation/thanks.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Thanks<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div></div><div class="navbar__items navbar__items--right"><div class="navbar__item dropdown dropdown--hoverable dropdown--right"><a class="navbar__link" aria-haspopup="true" aria-expanded="false" role="button" href="/docs/admin/autorecovery">4.17.0</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/docs/next/admin/placement">Next</a></li><li><a aria-current="page" class="dropdown__link dropdown__link--active" href="/docs/admin/placement">4.17.0</a></li><li><a class="dropdown__link" href="/docs/4.16.5/admin/placement">4.16.5</a></li><li><a class="dropdown__link" href="/docs/4.15.5/admin/placement">4.15.5</a></li><li><a class="dropdown__link" href="/docs/4.14.8/admin/placement">4.14.8</a></li><li><a class="dropdown__link" href="/docs/4.13.0/admin/placement">4.13.0</a></li><li><a class="dropdown__link" href="/docs/4.12.1/admin/placement">4.12.1</a></li><li><a class="dropdown__link" href="/docs/4.11.1/admin/placement">4.11.1</a></li><li><a class="dropdown__link" href="/docs/4.10.0/admin/placement">4.10.0</a></li><li><a class="dropdown__link" href="/docs/4.9.2/admin/placement">4.9.2</a></li><li><a class="dropdown__link" href="/docs/4.8.2/admin/placement">4.8.2</a></li><li><a class="dropdown__link" href="/docs/4.7.3/admin/placement">4.7.3</a></li><li><a class="dropdown__link" href="/docs/4.6.2/admin/placement">4.6.2</a></li><li><a class="dropdown__link" href="/docs/4.5.1/admin/placement">4.5.1</a></li></ul></div><a class="navbar__item navbar__link" href="/releases">Download</a><div class="toggle_vylO colorModeToggle_DEke"><button class="clean-btn toggleButton_gllP toggleButtonDisabled_aARS" type="button" disabled="" title="Switch between dark and light mode (currently light mode)" aria-label="Switch between dark and light mode (currently light mode)" aria-live="polite"><svg viewBox="0 0 24 24" width="24" height="24" class="lightToggleIcon_pyhR"><path fill="currentColor" d="M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"></path></svg><svg viewBox="0 0 24 24" width="24" height="24" class="darkToggleIcon_wfgR"><path fill="currentColor" d="M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"></path></svg></button></div><div class="searchBox_ZlJk"></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div></nav><div id="docusaurus_skipToContent_fallback" class="main-wrapper mainWrapper_z2l0 docsWrapper_BCFX"><button aria-label="Scroll back to top" class="clean-btn theme-back-to-top-button backToTopButton_sjWU" type="button"></button><div class="docPage__5DB"><main class="docMainContainer_gTbr docMainContainerEnhanced_Uz_u"><div class="container padding-top--md padding-bottom--lg"><div class="row"><div class="col docItemCol_VOVn"><div class="docItemContainer_Djhp"><article><span class="theme-doc-version-badge badge badge--secondary">Version: 4.17.0</span><div class="theme-doc-markdown markdown"><header><h1>Customized placement policies</h1></header></div></article><nav class="pagination-nav docusaurus-mt-lg" aria-label="Docs pages navigation"></nav></div></div></div></div></main></div></div><footer class="footer footer--dark"><div class="container container-fluid"><div class="row footer__links"><div class="col footer__col"><div class="footer__title">Documentation</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/docs/overview">Overview</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/getting-started/installation">Getting started</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/deployment/manual">Deployment</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/admin/bookies">Administration</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/api/overview">API</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/security/overview">Security</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/development/protocol">Development</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/reference/config">Reference</a></li></ul></div><div class="col footer__col"><div class="footer__title">Community</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/community/mailing-lists">Mailing lists</a></li><li class="footer__item"><a class="footer__link-item" href="/community/slack">Slack</a></li><li class="footer__item"><a href="https://github.com/apache/bookkeeper" target="_blank" rel="noopener noreferrer" class="footer__link-item">Github<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a href="https://twitter.com/asfbookkeeper" target="_blank" rel="noopener noreferrer" class="footer__link-item">Twitter<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div><div class="col footer__col"><div class="footer__title">Project</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/project/who">Who are we?</a></li><li class="footer__item"><a class="footer__link-item" href="/project/bylaws">Bylaws</a></li><li class="footer__item"><a href="https://apache.org/licenses" target="_blank" rel="noopener noreferrer" class="footer__link-item">License<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a class="footer__link-item" href="/project/privacy">Privacy policy</a></li><li class="footer__item"><a href="https://www.apache.org/foundation/sponsorship.html" target="_blank" rel="noopener noreferrer" class="footer__link-item">Sponsorship<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a href="https://www.apache.org/foundation/thanks.html" target="_blank" rel="noopener noreferrer" class="footer__link-item">Thanks<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div></div><div class="footer__bottom text--center"><div class="footer__copyright"><footer class="footer">
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navbar__brand" href="/"><div class="navbar__logo"><img src="/img/bk-logo.svg" alt="Apache Bookkeeper" class="themedImage_ToTc themedImage--light_HNdA"><img src="/img/bk-logo.svg" alt="Apache Bookkeeper" class="themedImage_ToTc themedImage--dark_i4oU"></div><b class="navbar__title text--truncate">Apache BookKeeper</b></a><a class="navbar__item navbar__link" href="/docs/overview/">Documentation</a><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Community</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/community/mailing-lists">Mailing lists</a></li><li><a class="dropdown__link" href="/community/slack">Slack</a></li><li><a href="https://github.com/apache/bookkeeper/issues" target="_blank" rel="noopener noreferrer" class="dropdown__link">Github issues<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a class="dropdown__link" href="/community/releases">Release management</a></li><li><a class="dropdown__link" href="/community/meeting">Community meetings</a></li><li><a class="dropdown__link" href="/community/contributing">Contribution guide</a></li><li><a class="dropdown__link" href="/community/coding-guide">Coding guide</a></li><li><a class="dropdown__link" href="/community/testing">Testing guide</a></li><li><a class="dropdown__link" href="/community/issue-report">Issue report guide</a></li><li><a class="dropdown__link" href="/community/release-guide">Release guide</a></li><li><a class="dropdown__link" href="/community/presentations">Presentations</a></li><li><a class="dropdown__link" href="/community/bookkeeper-proposals">BookKeeper proposals (BP)</a></li></ul></div><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Project</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/project/who">Who are we?</a></li><li><a class="dropdown__link" href="/project/bylaws">Bylaws</a></li><li><a href="https://apache.org/licenses" target="_blank" rel="noopener noreferrer" class="dropdown__link">License<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a class="dropdown__link" href="/project/privacy">Privacy policy</a></li><li><a href="https://www.apache.org/foundation/sponsorship.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Sponsorship<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a href="https://www.apache.org/foundation/thanks.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Thanks<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div></div><div class="navbar__items navbar__items--right"><div class="navbar__item dropdown dropdown--hoverable dropdown--right"><a class="navbar__link" aria-haspopup="true" aria-expanded="false" role="button" href="/docs/overview/">4.17.0</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/docs/next/admin/placement">Next</a></li><li><a aria-current="page" class="dropdown__link dropdown__link--active" href="/docs/admin/placement">4.17.0</a></li><li><a class="dropdown__link" href="/docs/4.16.5/admin/placement">4.16.5</a></li><li><a class="dropdown__link" href="/docs/4.15.5/admin/placement">4.15.5</a></li><li><a class="dropdown__link" href="/docs/4.14.8/admin/placement">4.14.8</a></li><li><a class="dropdown__link" href="/docs/4.13.0/admin/placement">4.13.0</a></li><li><a class="dropdown__link" href="/docs/4.12.1/admin/placement">4.12.1</a></li><li><a class="dropdown__link" href="/docs/4.11.1/admin/placement">4.11.1</a></li><li><a class="dropdown__link" href="/docs/4.10.0/admin/placement">4.10.0</a></li><li><a class="dropdown__link" href="/docs/4.9.2/admin/placement">4.9.2</a></li><li><a class="dropdown__link" href="/docs/4.8.2/admin/placement">4.8.2</a></li><li><a class="dropdown__link" href="/docs/4.7.3/admin/placement">4.7.3</a></li><li><a class="dropdown__link" href="/docs/4.6.2/admin/placement">4.6.2</a></li><li><a class="dropdown__link" href="/docs/4.5.1/admin/placement">4.5.1</a></li></ul></div><a class="navbar__item navbar__link" href="/releases">Download</a><div class="toggle_vylO colorModeToggle_DEke"><button class="clean-btn toggleButton_gllP toggleButtonDisabled_aARS" type="button" disabled="" title="Switch between dark and light mode (currently light mode)" aria-label="Switch between dark and light mode (currently light mode)" aria-live="polite"><svg viewBox="0 0 24 24" width="24" height="24" class="lightToggleIcon_pyhR"><path fill="currentColor" d="M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"></path></svg><svg viewBox="0 0 24 24" width="24" height="24" class="darkToggleIcon_wfgR"><path fill="currentColor" d="M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"></path></svg></button></div><div class="searchBox_ZlJk"></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div></nav><div id="docusaurus_skipToContent_fallback" class="main-wrapper mainWrapper_z2l0 docsWrapper_BCFX"><button aria-label="Scroll back to top" class="clean-btn theme-back-to-top-button backToTopButton_sjWU" type="button"></button><div class="docPage__5DB"><main class="docMainContainer_gTbr docMainContainerEnhanced_Uz_u"><div class="container padding-top--md padding-bottom--lg"><div class="row"><div class="col docItemCol_VOVn"><div class="docItemContainer_Djhp"><article><span class="theme-doc-version-badge badge badge--secondary">Version: 4.17.0</span><div class="theme-doc-markdown markdown"><header><h1>Customized placement policies</h1></header></div></article><nav class="pagination-nav docusaurus-mt-lg" aria-label="Docs pages navigation"></nav></div></div></div></div></main></div></div><footer class="footer footer--dark"><div class="container container-fluid"><div class="row footer__links"><div class="col footer__col"><div class="footer__title">Documentation</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/docs/overview">Overview</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/getting-started/installation">Getting started</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/deployment/manual">Deployment</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/admin/bookies">Administration</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/api/overview">API</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/security/overview">Security</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/development/protocol">Development</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/reference/config">Reference</a></li></ul></div><div class="col footer__col"><div class="footer__title">Community</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/community/mailing-lists">Mailing lists</a></li><li class="footer__item"><a class="footer__link-item" href="/community/slack">Slack</a></li><li class="footer__item"><a href="https://github.com/apache/bookkeeper" target="_blank" rel="noopener noreferrer" class="footer__link-item">Github<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a href="https://twitter.com/asfbookkeeper" target="_blank" rel="noopener noreferrer" class="footer__link-item">Twitter<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div><div class="col footer__col"><div class="footer__title">Project</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/project/who">Who are we?</a></li><li class="footer__item"><a class="footer__link-item" href="/project/bylaws">Bylaws</a></li><li class="footer__item"><a href="https://apache.org/licenses" target="_blank" rel="noopener noreferrer" class="footer__link-item">License<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a class="footer__link-item" href="/project/privacy">Privacy policy</a></li><li class="footer__item"><a href="https://www.apache.org/foundation/sponsorship.html" target="_blank" rel="noopener noreferrer" class="footer__link-item">Sponsorship<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a href="https://www.apache.org/foundation/thanks.html" target="_blank" rel="noopener noreferrer" class="footer__link-item">Thanks<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div></div><div class="footer__bottom text--center"><div class="footer__copyright"><footer class="footer">
         <div class="container">
           <div class="content has-text-centered">
             <p>
@@ -22,7 +22,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/admin/upgrade/index.html b/content/docs/admin/upgrade/index.html
index abb1655..9ff9580 100644
--- a/content/docs/admin/upgrade/index.html
+++ b/content/docs/admin/upgrade/index.html
@@ -4,19 +4,19 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">Upgrade | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/admin/upgrade"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.17.0"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.17.0"><meta data-rh="true" name="docsearch:version" content="4.17.0"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.17.0"><meta data-rh="true" property="og:title" content="Upgrade | Apache BookKeeper"><meta data-rh="true" name="description" content="If you have questions about upgrades (or need help), please feel free to reach out to us by mailing list or Slack Channel."><meta data-rh="true" property="og:description" content="If you have questions about upgrades (or need help), please feel free to reach out to us by mailing list or Slack Channel."><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/admin/upgrade"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/admin/upgrade" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/admin/upgrade" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
-<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navbar__brand" href="/"><div class="navbar__logo"><img src="/img/bk-logo.svg" alt="Apache Bookkeeper" class="themedImage_ToTc themedImage--light_HNdA"><img src="/img/bk-logo.svg" alt="Apache Bookkeeper" class="themedImage_ToTc themedImage--dark_i4oU"></div><b class="navbar__title text--truncate">Apache BookKeeper</b></a><a class="navbar__item navbar__link" href="/docs/overview/">Documentation</a><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Community</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/community/mailing-lists">Mailing lists</a></li><li><a class="dropdown__link" href="/community/slack">Slack</a></li><li><a href="https://github.com/apache/bookkeeper/issues" target="_blank" rel="noopener noreferrer" class="dropdown__link">Github issues<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a class="dropdown__link" href="/community/releases">Release management</a></li><li><a class="dropdown__link" href="/community/meeting">Community meetings</a></li><li><a class="dropdown__link" href="/community/contributing">Contribution guide</a></li><li><a class="dropdown__link" href="/community/coding-guide">Coding guide</a></li><li><a class="dropdown__link" href="/community/testing">Testing guide</a></li><li><a class="dropdown__link" href="/community/issue-report">Issue report guide</a></li><li><a class="dropdown__link" href="/community/release-guide">Release guide</a></li><li><a class="dropdown__link" href="/community/presentations">Presentations</a></li><li><a class="dropdown__link" href="/community/bookkeeper-proposals">BookKeeper proposals (BP)</a></li></ul></div><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Project</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/project/who">Who are we?</a></li><li><a class="dropdown__link" href="/project/bylaws">Bylaws</a></li><li><a href="https://apache.org/licenses" target="_blank" rel="noopener noreferrer" class="dropdown__link">License<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a class="dropdown__link" href="/project/privacy">Privacy policy</a></li><li><a href="https://www.apache.org/foundation/sponsorship.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Sponsorship<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a href="https://www.apache.org/foundation/thanks.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Thanks<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div></div><div class="navbar__items navbar__items--right"><div class="navbar__item dropdown dropdown--hoverable dropdown--right"><a class="navbar__link" aria-haspopup="true" aria-expanded="false" role="button" href="/docs/admin/autorecovery">4.17.0</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/docs/next/admin/upgrade">Next</a></li><li><a aria-current="page" class="dropdown__link dropdown__link--active" href="/docs/admin/upgrade">4.17.0</a></li><li><a class="dropdown__link" href="/docs/4.16.5/admin/upgrade">4.16.5</a></li><li><a class="dropdown__link" href="/docs/4.15.5/admin/upgrade">4.15.5</a></li><li><a class="dropdown__link" href="/docs/4.14.8/admin/upgrade">4.14.8</a></li><li><a class="dropdown__link" href="/docs/4.13.0/admin/upgrade">4.13.0</a></li><li><a class="dropdown__link" href="/docs/4.12.1/admin/upgrade">4.12.1</a></li><li><a class="dropdown__link" href="/docs/4.11.1/admin/upgrade">4.11.1</a></li><li><a class="dropdown__link" href="/docs/4.10.0/admin/upgrade">4.10.0</a></li><li><a class="dropdown__link" href="/docs/4.9.2/admin/upgrade">4.9.2</a></li><li><a class="dropdown__link" href="/docs/4.8.2/admin/upgrade">4.8.2</a></li><li><a class="dropdown__link" href="/docs/4.7.3/admin/upgrade">4.7.3</a></li><li><a class="dropdown__link" href="/docs/4.6.2/admin/upgrade">4.6.2</a></li><li><a class="dropdown__link" href="/docs/4.5.1/admin/upgrade">4.5.1</a></li></ul></div><a class="navbar__item navbar__link" href="/releases">Download</a><div class="toggle_vylO colorModeToggle_DEke"><button class="clean-btn toggleButton_gllP toggleButtonDisabled_aARS" type="button" disabled="" title="Switch between dark and light mode (currently light mode)" aria-label="Switch between dark and light mode (currently light mode)" aria-live="polite"><svg viewBox="0 0 24 24" width="24" height="24" class="lightToggleIcon_pyhR"><path fill="currentColor" d="M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"></path></svg><svg viewBox="0 0 24 24" width="24" height="24" class="darkToggleIcon_wfgR"><path fill="currentColor" d="M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"></path></svg></button></div><div class="searchBox_ZlJk"></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div></nav><div id="docusaurus_skipToContent_fallback" class="main-wrapper mainWrapper_z2l0 docsWrapper_BCFX"><button aria-label="Scroll back to top" class="clean-btn theme-back-to-top-button backToTopButton_sjWU" type="button"></button><div class="docPage__5DB"><main class="docMainContainer_gTbr docMainContainerEnhanced_Uz_u"><div class="container padding-top--md padding-bottom--lg"><div class="row"><div class="col docItemCol_VOVn"><div class="docItemContainer_Djhp"><article><span class="theme-doc-version-badge badge badge--secondary">Version: 4.17.0</span><div class="tocCollapsible_ETCw theme-doc-toc-mobile tocMobile_ITEo"><button type="button" class="clean-btn tocCollapsibleButton_TO0P">On this page</button></div><div class="theme-doc-markdown markdown"><header><h1>Upgrade</h1></header><blockquote><p>If you have questions about upgrades (or need help), please feel free to reach out to us by <a href="/community/mailing-lists">mailing list</a> or <a href="/community/slack">Slack Channel</a>.</p></blockquote><h2 class="anchor anchorWithStickyNavbar_LWe7" id="overview">Overview<a href="#overview" class="hash-link" aria-label="Direct link to Overview" title="Direct link to Overview">​</a></h2><p>Consider the below guidelines in preparation for upgrading.</p><ul><li>Always back up all your configuration files before upgrading.</li><li>Read through the documentation and draft an upgrade plan that matches your specific requirements and environment before starting the upgrade process.
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navbar__brand" href="/"><div class="navbar__logo"><img src="/img/bk-logo.svg" alt="Apache Bookkeeper" class="themedImage_ToTc themedImage--light_HNdA"><img src="/img/bk-logo.svg" alt="Apache Bookkeeper" class="themedImage_ToTc themedImage--dark_i4oU"></div><b class="navbar__title text--truncate">Apache BookKeeper</b></a><a aria-current="page" class="navbar__item navbar__link navbar__link--active" href="/docs/overview/">Documentation</a><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Community</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/community/mailing-lists">Mailing lists</a></li><li><a class="dropdown__link" href="/community/slack">Slack</a></li><li><a href="https://github.com/apache/bookkeeper/issues" target="_blank" rel="noopener noreferrer" class="dropdown__link">Github issues<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a class="dropdown__link" href="/community/releases">Release management</a></li><li><a class="dropdown__link" href="/community/meeting">Community meetings</a></li><li><a class="dropdown__link" href="/community/contributing">Contribution guide</a></li><li><a class="dropdown__link" href="/community/coding-guide">Coding guide</a></li><li><a class="dropdown__link" href="/community/testing">Testing guide</a></li><li><a class="dropdown__link" href="/community/issue-report">Issue report guide</a></li><li><a class="dropdown__link" href="/community/release-guide">Release guide</a></li><li><a class="dropdown__link" href="/community/presentations">Presentations</a></li><li><a class="dropdown__link" href="/community/bookkeeper-proposals">BookKeeper proposals (BP)</a></li></ul></div><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Project</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/project/who">Who are we?</a></li><li><a class="dropdown__link" href="/project/bylaws">Bylaws</a></li><li><a href="https://apache.org/licenses" target="_blank" rel="noopener noreferrer" class="dropdown__link">License<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a class="dropdown__link" href="/project/privacy">Privacy policy</a></li><li><a href="https://www.apache.org/foundation/sponsorship.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Sponsorship<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a href="https://www.apache.org/foundation/thanks.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Thanks<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div></div><div class="navbar__items navbar__items--right"><div class="navbar__item dropdown dropdown--hoverable dropdown--right"><a class="navbar__link" aria-haspopup="true" aria-expanded="false" role="button" href="/docs/overview/">4.17.0</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/docs/next/admin/upgrade">Next</a></li><li><a aria-current="page" class="dropdown__link dropdown__link--active" href="/docs/admin/upgrade">4.17.0</a></li><li><a class="dropdown__link" href="/docs/4.16.5/admin/upgrade">4.16.5</a></li><li><a class="dropdown__link" href="/docs/4.15.5/admin/upgrade">4.15.5</a></li><li><a class="dropdown__link" href="/docs/4.14.8/admin/upgrade">4.14.8</a></li><li><a class="dropdown__link" href="/docs/4.13.0/admin/upgrade">4.13.0</a></li><li><a class="dropdown__link" href="/docs/4.12.1/admin/upgrade">4.12.1</a></li><li><a class="dropdown__link" href="/docs/4.11.1/admin/upgrade">4.11.1</a></li><li><a class="dropdown__link" href="/docs/4.10.0/admin/upgrade">4.10.0</a></li><li><a class="dropdown__link" href="/docs/4.9.2/admin/upgrade">4.9.2</a></li><li><a class="dropdown__link" href="/docs/4.8.2/admin/upgrade">4.8.2</a></li><li><a class="dropdown__link" href="/docs/4.7.3/admin/upgrade">4.7.3</a></li><li><a class="dropdown__link" href="/docs/4.6.2/admin/upgrade">4.6.2</a></li><li><a class="dropdown__link" href="/docs/4.5.1/admin/upgrade">4.5.1</a></li></ul></div><a class="navbar__item navbar__link" href="/releases">Download</a><div class="toggle_vylO colorModeToggle_DEke"><button class="clean-btn toggleButton_gllP toggleButtonDisabled_aARS" type="button" disabled="" title="Switch between dark and light mode (currently light mode)" aria-label="Switch between dark and light mode (currently light mode)" aria-live="polite"><svg viewBox="0 0 24 24" width="24" height="24" class="lightToggleIcon_pyhR"><path fill="currentColor" d="M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"></path></svg><svg viewBox="0 0 24 24" width="24" height="24" class="darkToggleIcon_wfgR"><path fill="currentColor" d="M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"></path></svg></button></div><div class="searchBox_ZlJk"></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div></nav><div id="docusaurus_skipToContent_fallback" class="main-wrapper mainWrapper_z2l0 docsWrapper_BCFX"><button aria-label="Scroll back to top" class="clean-btn theme-back-to-top-button backToTopButton_sjWU" type="button"></button><div class="docPage__5DB"><aside class="theme-doc-sidebar-container docSidebarContainer_b6E3"><div class="sidebarViewport_Xe31"><div class="sidebar_njMd"><nav aria-label="Docs sidebar" class="menu thin-scrollbar menu_SIkG"><ul class="theme-doc-sidebar-menu menu__list"><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-1 menu__list-item"><a class="menu__link" href="/docs/overview/">Overview</a></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/getting-started/installation">Getting started</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/deployment/manual">Deployment</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret menu__link--active" aria-expanded="true" href="/docs/admin/bookies">Administration</a></div><ul style="display:block;overflow:visible;height:auto" class="menu__list"><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/admin/bookies">BookKeeper administration</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/admin/autorecovery">AutoRecovery</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/admin/metrics">Metrics collection</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link menu__link--active" aria-current="page" tabindex="0" href="/docs/admin/upgrade">Upgrade</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/admin/http">Admin REST API</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/admin/decomission">Decommissioning Bookies</a></li></ul></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/api/overview">API</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/security/overview">Security</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/development/protocol">Development</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/reference/config">Reference</a></div></li></ul></nav></div></div></aside><main class="docMainContainer_gTbr"><div class="container padding-top--md padding-bottom--lg"><div class="row"><div class="col docItemCol_VOVn"><div class="docItemContainer_Djhp"><article><span class="theme-doc-version-badge badge badge--secondary">Version: 4.17.0</span><div class="tocCollapsible_ETCw theme-doc-toc-mobile tocMobile_ITEo"><button type="button" class="clean-btn tocCollapsibleButton_TO0P">On this page</button></div><div class="theme-doc-markdown markdown"><header><h1>Upgrade</h1></header><blockquote><p>If you have questions about upgrades (or need help), please feel free to reach out to us by <a href="/community/mailing-lists">mailing list</a> or <a href="/community/slack">Slack Channel</a>.</p></blockquote><h2 class="anchor anchorWithStickyNavbar_LWe7" id="overview">Overview<a href="#overview" class="hash-link" aria-label="Direct link to Overview" title="Direct link to Overview">​</a></h2><p>Consider the below guidelines in preparation for upgrading.</p><ul><li>Always back up all your configuration files before upgrading.</li><li>Read through the documentation and draft an upgrade plan that matches your specific requirements and environment before starting the upgrade process.
 Put differently, don&#x27;t start working through the guide on a live cluster. Read guide entirely, make a plan, then execute the plan.</li><li>Pay careful consideration to the order in which components are upgraded. In general, you need to upgrade bookies first and then upgrade your clients.</li><li>If autorecovery is running along with bookies, you need to pay attention to the upgrade sequence.</li><li>Read the release notes carefully for each release. They contain not only information about noteworthy features, but also changes to configurations
 that may impact your upgrade.</li><li>Always upgrade one or a small set of bookies to canary new version before upgraing all bookies in your cluster.</li></ul><h2 class="anchor anchorWithStickyNavbar_LWe7" id="canary">Canary<a href="#canary" class="hash-link" aria-label="Direct link to Canary" title="Direct link to Canary">​</a></h2><p>It is wise to canary an upgraded version in one or small set of bookies before upgrading all bookies in your live cluster.</p><p>You can follow below steps on how to canary a upgraded version:</p><ol><li>Stop a Bookie.</li><li>Upgrade the binary and configuration.</li><li>Start the Bookie in <code>ReadOnly</code> mode. This can be used to verify if the Bookie of this new version can run well for read workload.</li><li>Once the Bookie is running at <code>ReadOnly</code> mode successfully for a while, restart the Bookie in <code>Write/Read</code> mode.</li><li>After step 4, the Bookie will serve both write and read traffic.</li></ol><h3 class="anchor anchorWithStickyNavbar_LWe7" id="rollback-canaries">Rollback Canaries<a href="#rollback-canaries" class="hash-link" aria-label="Direct link to Rollback Canaries" title="Direct link to Rollback Canaries">​</a></h3><p>If problems occur during canarying an upgraded version, you can simply take down the problematic Bookie node. The remain bookies in the old cluster
 will repair this problematic bookie node by autorecovery. Nothing needs to be worried about.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="upgrade-steps">Upgrade Steps<a href="#upgrade-steps" class="hash-link" aria-label="Direct link to Upgrade Steps" title="Direct link to Upgrade Steps">​</a></h2><p>Once you determined a version is safe to upgrade in a few nodes in your cluster, you can perform following steps to upgrade all bookies in your cluster.</p><ol><li>Determine if autorecovery is running along with bookies. If yes, check if the clients (either new clients with new binary or old clients with new configurations)
 are allowed to talk to old bookies; if clients are not allowed to talk to old bookies, please <a href="/docs/reference/cli/#autorecovery-1">disable autorecovery</a> during upgrade.</li><li>Decide on performing a rolling upgrade or a downtime upgrade.</li><li>Upgrade all Bookies (more below)</li><li>If autorecovery was disabled during upgrade, <a href="/docs/reference/cli/#autorecovery-1">enable autorecovery</a>.</li><li>After all bookies are upgraded, build applications that use <code>BookKeeper client</code> against the new bookkeeper libraries and deploy the new versions.</li></ol><h3 class="anchor anchorWithStickyNavbar_LWe7" id="upgrade-bookies">Upgrade Bookies<a href="#upgrade-bookies" class="hash-link" aria-label="Direct link to Upgrade Bookies" title="Direct link to Upgrade Bookies">​</a></h3><p>In a rolling upgrade scenario, upgrade one Bookie at a time. In a downtime upgrade scenario, take the entire cluster down, upgrade each Bookie, then start the cluster.</p><p>For each Bookie:</p><ol><li>Stop the bookie.</li><li>Upgrade the software (either new binary or new configuration)</li><li>Start the bookie.</li></ol><h2 class="anchor anchorWithStickyNavbar_LWe7" id="upgrade-guides">Upgrade Guides<a href="#upgrade-guides" class="hash-link" aria-label="Direct link to Upgrade Guides" title="Direct link to Upgrade Guides">​</a></h2><p>We describes the general upgrade method in Apache BookKeeper as above. We will cover the details for individual versions.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="46x-to-470-upgrade">4.6.x to 4.7.0 upgrade<a href="#46x-to-470-upgrade" class="hash-link" aria-label="Direct link to 4.6.x to 4.7.0 upgrade" title="Direct link to 4.6.x to 4.7.0 upgrade">​</a></h3><p>There isn&#x27;t any protocol related backward compabilities changes in 4.7.0. So you can follow the general upgrade sequence to upgrade from 4.6.x to 4.7.0.</p><p>However, we list a list of changes that you might want to know.</p><h4 class="anchor anchorWithStickyNavbar_LWe7" id="common-configuration-changes">Common Configuration Changes<a href="#common-configuration-changes" class="hash-link" aria-label="Direct link to Common Configuration Changes" title="Direct link to Common Configuration Changes">​</a></h4><p>This section documents the common configuration changes that applied for both clients and servers.</p><h5 class="anchor anchorWithStickyNavbar_LWe7" id="new-settings">New Settings<a href="#new-settings" class="hash-link" aria-label="Direct link to New Settings" title="Direct link to New Settings">​</a></h5><p>Following settings are newly added in 4.7.0.</p><table><thead><tr><th>Name</th><th>Default Value</th><th>Description</th></tr></thead><tbody><tr><td>allowShadedLedgerManagerFactoryClass</td><td>false</td><td>The allows bookkeeper client to connect to a bookkeeper cluster using a shaded ledger manager factory</td></tr><tr><td>shadedLedgerManagerFactoryClassPrefix</td><td><code>dlshade.</code></td><td>The shaded ledger manager factory prefix. This is used when <code>allowShadedLedgerManagerFactoryClass</code> is set to true</td></tr><tr><td>metadataServiceUri</td><td>null</td><td>metadata service uri that bookkeeper is used for loading corresponding metadata driver and resolving its metadata service location</td></tr><tr><td>permittedStartupUsers</td><td>null</td><td>The list of users are permitted to run the bookie process. Any users can run the bookie process if it is not set</td></tr></tbody></table><h5 class="anchor anchorWithStickyNavbar_LWe7" id="deprecated-settings">Deprecated Settings<a href="#deprecated-settings" class="hash-link" aria-label="Direct link to Deprecated Settings" title="Direct link to Deprecated Settings">​</a></h5><p>There are no common settings deprecated at 4.7.0.</p><h5 class="anchor anchorWithStickyNavbar_LWe7" id="changed-settings">Changed Settings<a href="#changed-settings" class="hash-link" aria-label="Direct link to Changed Settings" title="Direct link to Changed Settings">​</a></h5><p>There are no common settings whose default value are changed at 4.7.0.</p><h4 class="anchor anchorWithStickyNavbar_LWe7" id="server-configuration-changes">Server Configuration Changes<a href="#server-configuration-changes" class="hash-link" aria-label="Direct link to Server Configuration Changes" title="Direct link to Server Configuration Changes">​</a></h4><h5 class="anchor anchorWithStickyNavbar_LWe7" id="new-settings-1">New Settings<a href="#new-settings-1" class="hash-link" aria-label="Direct link to New Settings" title="Direct link to New Settings">​</a></h5><p>Following settings are newly added in 4.7.0.</p><table><thead><tr><th>Name</th><th>Default Value</th><th>Description</th></tr></thead><tbody><tr><td>verifyMetadataOnGC</td><td>false</td><td>Whether the bookie is configured to double check the ledgers&#x27; metadata prior to garbage collecting them</td></tr><tr><td>auditorLedgerVerificationPercentage</td><td>0</td><td>The percentage of a ledger (fragment)&#x27;s entries will be verified by Auditor before claiming a ledger (fragment) is missing</td></tr><tr><td>numHighPriorityWorkerThreads</td><td>8</td><td>The number of threads that should be used for high priority requests (i.e. recovery reads and adds, and fencing). If zero, reads are handled by Netty threads directly.</td></tr><tr><td>useShortHostName</td><td>false</td><td>Whether the bookie should use short hostname or <a href="https://en.wikipedia.org/wiki/Fully_qualified_domain_name" target="_blank" rel="noopener noreferrer">FQDN</a> hostname for registration and ledger metadata when useHostNameAsBookieID is enabled.</td></tr><tr><td>minUsableSizeForEntryLogCreation</td><td>1.2 * <code>logSizeLimit</code></td><td>Minimum safe usable size to be available in ledger directory for bookie to create entry log files (in bytes).</td></tr><tr><td>minUsableSizeForHighPriorityWrites</td><td>1.2 * <code>logSizeLimit</code></td><td>Minimum safe usable size to be available in ledger directory for bookie to accept high priority writes even it is in readonly mode.</td></tr></tbody></table><h5 class="anchor anchorWithStickyNavbar_LWe7" id="deprecated-settings-1">Deprecated Settings<a href="#deprecated-settings-1" class="hash-link" aria-label="Direct link to Deprecated Settings" title="Direct link to Deprecated Settings">​</a></h5><p>Following settings are deprecated since 4.7.0.</p><table><thead><tr><th>Name</th><th>Description</th></tr></thead><tbody><tr><td>registrationManagerClass</td><td>The registration manager class used by server to discover registration manager. It is replaced by <code>metadataServiceUri</code>.</td></tr></tbody></table><h5 class="anchor anchorWithStickyNavbar_LWe7" id="changed-settings-1">Changed Settings<a href="#changed-settings-1" class="hash-link" aria-label="Direct link to Changed Settings" title="Direct link to Changed Settings">​</a></h5><p>The default values of following settings are changed since 4.7.0.</p><table><thead><tr><th>Name</th><th>Old Default Value</th><th>New Default Value</th><th>Notes</th></tr></thead><tbody><tr><td>numLongPollWorkerThreads</td><td>10</td><td>0</td><td>If the number of threads is zero or negative, bookie can fallback to use read threads for long poll. This allows not creating threads if application doesn&#x27;t use long poll feature.</td></tr></tbody></table><h4 class="anchor anchorWithStickyNavbar_LWe7" id="client-configuration-changes">Client Configuration Changes<a href="#client-configuration-changes" class="hash-link" aria-label="Direct link to Client Configuration Changes" title="Direct link to Client Configuration Changes">​</a></h4><h5 class="anchor anchorWithStickyNavbar_LWe7" id="new-settings-2">New Settings<a href="#new-settings-2" class="hash-link" aria-label="Direct link to New Settings" title="Direct link to New Settings">​</a></h5><p>Following settings are newly added in 4.7.0.</p><table><thead><tr><th>Name</th><th>Default Value</th><th>Description</th></tr></thead><tbody><tr><td>maxNumEnsembleChanges</td><td>Integer.MAX<!-- -->_<!-- -->VALUE</td><td>The max allowed ensemble change number before sealing a ledger on failures</td></tr><tr><td>timeoutMonitorIntervalSec</td><td>min(<code>addEntryTimeoutSec</code>, <code>addEntryQuorumTimeoutSec</code>, <code>readEntryTimeoutSec</code>)</td><td>The interval between successive executions of the operation timeout monitor, in seconds</td></tr><tr><td>ensemblePlacementPolicyOrderSlowBookies</td><td>false</td><td>Flag to enable/disable reordering slow bookies in placement policy</td></tr></tbody></table><h5 class="anchor anchorWithStickyNavbar_LWe7" id="deprecated-settings-2">Deprecated Settings<a href="#deprecated-settings-2" class="hash-link" aria-label="Direct link to Deprecated Settings" title="Direct link to Deprecated Settings">​</a></h5><p>Following settings are deprecated since 4.7.0.</p><table><thead><tr><th>Name</th><th>Description</th></tr></thead><tbody><tr><td>clientKeyStoreType</td><td>Replaced by <code>tlsKeyStoreType</code></td></tr><tr><td>clientKeyStore</td><td>Replaced by <code>tlsKeyStore</code></td></tr><tr><td>clientKeyStorePasswordPath</td><td>Replaced by <code>tlsKeyStorePasswordPath</code></td></tr><tr><td>clientTrustStoreType</td><td>Replaced by <code>tlsTrustStoreType</code></td></tr><tr><td>clientTrustStore</td><td>Replaced by <code>tlsTrustStore</code></td></tr><tr><td>clientTrustStorePasswordPath</td><td>Replaced by <code>tlsTrustStorePasswordPath</code></td></tr><tr><td>registrationClientClass</td><td>The registration client class used by client to discover registration service. It is replaced by <code>metadataServiceUri</code>.</td></tr></tbody></table><h5 class="anchor anchorWithStickyNavbar_LWe7" id="changed-settings-2">Changed Settings<a href="#changed-settings-2" class="hash-link" aria-label="Direct link to Changed Settings" title="Direct link to Changed Settings">​</a></h5><p>The default values of following settings are changed since 4.7.0.</p><table><thead><tr><th>Name</th><th>Old Default Value</th><th>New Default Value</th><th>Notes</th></tr></thead><tbody><tr><td>enableDigestTypeAutodetection</td><td>false</td><td>true</td><td>Autodetect the digest type and passwd when opening a ledger. It will ignore the provided digest type, but still verify the provided passwd.</td></tr></tbody></table><h3 class="anchor anchorWithStickyNavbar_LWe7" id="47x-to-48x-upgrade">4.7.x to 4.8.X upgrade<a href="#47x-to-48x-upgrade" class="hash-link" aria-label="Direct link to 4.7.x to 4.8.X upgrade" title="Direct link to 4.7.x to 4.8.X upgrade">​</a></h3><p>In 4.8.x a new feature is added to persist explicitLac in FileInfo and explicitLac entry in Journal. (Note: Currently this feature is not available if your ledgerStorageClass is DbLedgerStorage, ISSUE #1533 is going to address it) Hence current journal format version is bumped to 6 and current FileInfo header version is bumped to 1. But since default config values of &#x27;journalFormatVersionToWrite&#x27; and &#x27;fileInfoFormatVersionToWrite&#x27; are set to older versions, this feature is off by default. To enable this feature those config values should be set to current versions. Once this is enabled then we cannot rollback to previous Bookie versions (4.7.x and older), since older version code would not be able to deal with explicitLac entry in Journal file while replaying journal and also reading Header of Index files / FileInfo would fail reading Index files with newer FileInfo version. So in summary, it is a non-rollbackable feature and it applies even if explicitLac is not being used.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="45x-to-46x-upgrade">4.5.x to 4.6.x upgrade<a href="#45x-to-46x-upgrade" class="hash-link" aria-label="Direct link to 4.5.x to 4.6.x upgrade" title="Direct link to 4.5.x to 4.6.x upgrade">​</a></h3><p>There isn&#x27;t any protocol related backward compabilities changes in 4.6.x. So you can follow the general upgrade sequence to upgrade from 4.5.x to 4.6.x.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="44x-to-45x-upgrade">4.4.x to 4.5.x upgrade<a href="#44x-to-45x-upgrade" class="hash-link" aria-label="Direct link to 4.4.x to 4.5.x upgrade" title="Direct link to 4.4.x to 4.5.x upgrade">​</a></h3><p>There isn&#x27;t any protocol related backward compabilities changes in 4.5.0. So you can follow the general upgrade sequence to upgrade from 4.4.x to 4.5.x.
 However, we list a list of things that you might want to know.</p><ol><li>4.5.x upgrades netty from 3.x to 4.x. The memory usage pattern might be changed a bit. Netty 4 uses more direct memory. Please pay attention to your memory usage
 and adjust the JVM settings accordingly.</li><li><code>multi journals</code> is a non-rollbackable feature. If you configure a bookie to use multiple journals on 4.5.x you can not roll the bookie back to use 4.4.x. You have
-to take a bookie out and recover it if you want to rollback to 4.4.x.</li></ol><p>If you are planning to upgrade a non-secured cluster to a secured cluster enabling security features in 4.5.0, please read <a href="/docs/security/overview">BookKeeper Security</a> for more details.</p></div></article><nav class="pagination-nav docusaurus-mt-lg" aria-label="Docs pages navigation"></nav></div></div><div class="col col--3"><div class="tableOfContents_bqdL thin-scrollbar theme-doc-toc-desktop"><ul class="table-of-contents table-of-contents__left-border"><li><a href="#overview" class="table-of-contents__link toc-highlight">Overview</a></li><li><a href="#canary" class="table-of-contents__link toc-highlight">Canary</a><ul><li><a href="#rollback-canaries" class="table-of-contents__link toc-highlight">Rollback Canaries</a></li></ul></li><li><a href="#upgrade-steps" class="table-of-contents__link toc-highlight">Upgrade Steps</a><ul><li><a href="#upgrade-bookies" class="table-of-contents__link toc-highlight">Upgrade Bookies</a></li></ul></li><li><a href="#upgrade-guides" class="table-of-contents__link toc-highlight">Upgrade Guides</a><ul><li><a href="#46x-to-470-upgrade" class="table-of-contents__link toc-highlight">4.6.x to 4.7.0 upgrade</a></li><li><a href="#47x-to-48x-upgrade" class="table-of-contents__link toc-highlight">4.7.x to 4.8.X upgrade</a></li><li><a href="#45x-to-46x-upgrade" class="table-of-contents__link toc-highlight">4.5.x to 4.6.x upgrade</a></li><li><a href="#44x-to-45x-upgrade" class="table-of-contents__link toc-highlight">4.4.x to 4.5.x upgrade</a></li></ul></li></ul></div></div></div></div></main></div></div><footer class="footer footer--dark"><div class="container container-fluid"><div class="row footer__links"><div class="col footer__col"><div class="footer__title">Documentation</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/docs/overview">Overview</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/getting-started/installation">Getting started</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/deployment/manual">Deployment</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/admin/bookies">Administration</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/api/overview">API</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/security/overview">Security</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/development/protocol">Development</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/reference/config">Reference</a></li></ul></div><div class="col footer__col"><div class="footer__title">Community</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/community/mailing-lists">Mailing lists</a></li><li class="footer__item"><a class="footer__link-item" href="/community/slack">Slack</a></li><li class="footer__item"><a href="https://github.com/apache/bookkeeper" target="_blank" rel="noopener noreferrer" class="footer__link-item">Github<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a href="https://twitter.com/asfbookkeeper" target="_blank" rel="noopener noreferrer" class="footer__link-item">Twitter<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div><div class="col footer__col"><div class="footer__title">Project</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/project/who">Who are we?</a></li><li class="footer__item"><a class="footer__link-item" href="/project/bylaws">Bylaws</a></li><li class="footer__item"><a href="https://apache.org/licenses" target="_blank" rel="noopener noreferrer" class="footer__link-item">License<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a class="footer__link-item" href="/project/privacy">Privacy policy</a></li><li class="footer__item"><a href="https://www.apache.org/foundation/sponsorship.html" target="_blank" rel="noopener noreferrer" class="footer__link-item">Sponsorship<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a href="https://www.apache.org/foundation/thanks.html" target="_blank" rel="noopener noreferrer" class="footer__link-item">Thanks<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div></div><div class="footer__bottom text--center"><div class="footer__copyright"><footer class="footer">
+to take a bookie out and recover it if you want to rollback to 4.4.x.</li></ol><p>If you are planning to upgrade a non-secured cluster to a secured cluster enabling security features in 4.5.0, please read <a href="/docs/security/overview">BookKeeper Security</a> for more details.</p></div></article><nav class="pagination-nav docusaurus-mt-lg" aria-label="Docs pages navigation"><a class="pagination-nav__link pagination-nav__link--prev" href="/docs/admin/metrics"><div class="pagination-nav__sublabel">Previous</div><div class="pagination-nav__label">Metric collection</div></a><a class="pagination-nav__link pagination-nav__link--next" href="/docs/admin/http"><div class="pagination-nav__sublabel">Next</div><div class="pagination-nav__label">BookKeeper Admin REST API</div></a></nav></div></div><div class="col col--3"><div class="tableOfContents_bqdL thin-scrollbar theme-doc-toc-desktop"><ul class="table-of-contents table-of-contents__left-border"><li><a href="#overview" class="table-of-contents__link toc-highlight">Overview</a></li><li><a href="#canary" class="table-of-contents__link toc-highlight">Canary</a><ul><li><a href="#rollback-canaries" class="table-of-contents__link toc-highlight">Rollback Canaries</a></li></ul></li><li><a href="#upgrade-steps" class="table-of-contents__link toc-highlight">Upgrade Steps</a><ul><li><a href="#upgrade-bookies" class="table-of-contents__link toc-highlight">Upgrade Bookies</a></li></ul></li><li><a href="#upgrade-guides" class="table-of-contents__link toc-highlight">Upgrade Guides</a><ul><li><a href="#46x-to-470-upgrade" class="table-of-contents__link toc-highlight">4.6.x to 4.7.0 upgrade</a></li><li><a href="#47x-to-48x-upgrade" class="table-of-contents__link toc-highlight">4.7.x to 4.8.X upgrade</a></li><li><a href="#45x-to-46x-upgrade" class="table-of-contents__link toc-highlight">4.5.x to 4.6.x upgrade</a></li><li><a href="#44x-to-45x-upgrade" class="table-of-contents__link toc-highlight">4.4.x to 4.5.x upgrade</a></li></ul></li></ul></div></div></div></div></main></div></div><footer class="footer footer--dark"><div class="container container-fluid"><div class="row footer__links"><div class="col footer__col"><div class="footer__title">Documentation</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/docs/overview">Overview</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/getting-started/installation">Getting started</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/deployment/manual">Deployment</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/admin/bookies">Administration</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/api/overview">API</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/security/overview">Security</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/development/protocol">Development</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/reference/config">Reference</a></li></ul></div><div class="col footer__col"><div class="footer__title">Community</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/community/mailing-lists">Mailing lists</a></li><li class="footer__item"><a class="footer__link-item" href="/community/slack">Slack</a></li><li class="footer__item"><a href="https://github.com/apache/bookkeeper" target="_blank" rel="noopener noreferrer" class="footer__link-item">Github<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a href="https://twitter.com/asfbookkeeper" target="_blank" rel="noopener noreferrer" class="footer__link-item">Twitter<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div><div class="col footer__col"><div class="footer__title">Project</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/project/who">Who are we?</a></li><li class="footer__item"><a class="footer__link-item" href="/project/bylaws">Bylaws</a></li><li class="footer__item"><a href="https://apache.org/licenses" target="_blank" rel="noopener noreferrer" class="footer__link-item">License<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a class="footer__link-item" href="/project/privacy">Privacy policy</a></li><li class="footer__item"><a href="https://www.apache.org/foundation/sponsorship.html" target="_blank" rel="noopener noreferrer" class="footer__link-item">Sponsorship<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a href="https://www.apache.org/foundation/thanks.html" target="_blank" rel="noopener noreferrer" class="footer__link-item">Thanks<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div></div><div class="footer__bottom text--center"><div class="footer__copyright"><footer class="footer">
         <div class="container">
           <div class="content has-text-centered">
             <p>
@@ -29,7 +29,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/api/distributedlog-api/index.html b/content/docs/api/distributedlog-api/index.html
index 221ae1c..820ad0c 100644
--- a/content/docs/api/distributedlog-api/index.html
+++ b/content/docs/api/distributedlog-api/index.html
@@ -4,12 +4,12 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">DistributedLog | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/api/distributedlog-api"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.17.0"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.17.0"><meta data-rh="true" name="docsearch:version" content="4.17.0"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.17.0"><meta data-rh="true" property="og:title" content="DistributedLog | Apache BookKeeper"><meta data-rh="true" name="description" content="DistributedLog began its life as a separate project under the Apache Foundation. It was merged into BookKeeper in 2017."><meta data-rh="true" property="og:description" content="DistributedLog began its life as a separate project under the Apache Foundation. It was merged into BookKeeper in 2017."><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/api/distributedlog-api"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/api/distributedlog-api" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/api/distributedlog-api" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
-<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navbar__brand" href="/"><div class="navbar__logo"><img src="/img/bk-logo.svg" alt="Apache Bookkeeper" class="themedImage_ToTc themedImage--light_HNdA"><img src="/img/bk-logo.svg" alt="Apache Bookkeeper" class="themedImage_ToTc themedImage--dark_i4oU"></div><b class="navbar__title text--truncate">Apache BookKeeper</b></a><a class="navbar__item navbar__link" href="/docs/overview/">Documentation</a><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Community</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/community/mailing-lists">Mailing lists</a></li><li><a class="dropdown__link" href="/community/slack">Slack</a></li><li><a href="https://github.com/apache/bookkeeper/issues" target="_blank" rel="noopener noreferrer" class="dropdown__link">Github issues<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a class="dropdown__link" href="/community/releases">Release management</a></li><li><a class="dropdown__link" href="/community/meeting">Community meetings</a></li><li><a class="dropdown__link" href="/community/contributing">Contribution guide</a></li><li><a class="dropdown__link" href="/community/coding-guide">Coding guide</a></li><li><a class="dropdown__link" href="/community/testing">Testing guide</a></li><li><a class="dropdown__link" href="/community/issue-report">Issue report guide</a></li><li><a class="dropdown__link" href="/community/release-guide">Release guide</a></li><li><a class="dropdown__link" href="/community/presentations">Presentations</a></li><li><a class="dropdown__link" href="/community/bookkeeper-proposals">BookKeeper proposals (BP)</a></li></ul></div><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Project</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/project/who">Who are we?</a></li><li><a class="dropdown__link" href="/project/bylaws">Bylaws</a></li><li><a href="https://apache.org/licenses" target="_blank" rel="noopener noreferrer" class="dropdown__link">License<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a class="dropdown__link" href="/project/privacy">Privacy policy</a></li><li><a href="https://www.apache.org/foundation/sponsorship.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Sponsorship<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a href="https://www.apache.org/foundation/thanks.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Thanks<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div></div><div class="navbar__items navbar__items--right"><div class="navbar__item dropdown dropdown--hoverable dropdown--right"><a class="navbar__link" aria-haspopup="true" aria-expanded="false" role="button" href="/docs/admin/autorecovery">4.17.0</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/docs/next/api/distributedlog-api">Next</a></li><li><a aria-current="page" class="dropdown__link dropdown__link--active" href="/docs/api/distributedlog-api">4.17.0</a></li><li><a class="dropdown__link" href="/docs/4.16.5/api/distributedlog-api">4.16.5</a></li><li><a class="dropdown__link" href="/docs/4.15.5/api/distributedlog-api">4.15.5</a></li><li><a class="dropdown__link" href="/docs/4.14.8/api/distributedlog-api">4.14.8</a></li><li><a class="dropdown__link" href="/docs/4.13.0/api/distributedlog-api">4.13.0</a></li><li><a class="dropdown__link" href="/docs/4.12.1/api/distributedlog-api">4.12.1</a></li><li><a class="dropdown__link" href="/docs/4.11.1/api/distributedlog-api">4.11.1</a></li><li><a class="dropdown__link" href="/docs/4.10.0/api/distributedlog-api">4.10.0</a></li><li><a class="dropdown__link" href="/docs/4.9.2/api/distributedlog-api">4.9.2</a></li><li><a class="dropdown__link" href="/docs/4.8.2/api/distributedlog-api">4.8.2</a></li><li><a class="dropdown__link" href="/docs/4.7.3/api/distributedlog-api">4.7.3</a></li><li><a class="dropdown__link" href="/docs/4.6.2/api/distributedlog-api">4.6.2</a></li><li><a class="dropdown__link" href="/docs/4.5.1/api/distributedlog-api">4.5.1</a></li></ul></div><a class="navbar__item navbar__link" href="/releases">Download</a><div class="toggle_vylO colorModeToggle_DEke"><button class="clean-btn toggleButton_gllP toggleButtonDisabled_aARS" type="button" disabled="" title="Switch between dark and light mode (currently light mode)" aria-label="Switch between dark and light mode (currently light mode)" aria-live="polite"><svg viewBox="0 0 24 24" width="24" height="24" class="lightToggleIcon_pyhR"><path fill="currentColor" d="M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"></path></svg><svg viewBox="0 0 24 24" width="24" height="24" class="darkToggleIcon_wfgR"><path fill="currentColor" d="M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"></path></svg></button></div><div class="searchBox_ZlJk"></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div></nav><div id="docusaurus_skipToContent_fallback" class="main-wrapper mainWrapper_z2l0 docsWrapper_BCFX"><button aria-label="Scroll back to top" class="clean-btn theme-back-to-top-button backToTopButton_sjWU" type="button"></button><div class="docPage__5DB"><main class="docMainContainer_gTbr docMainContainerEnhanced_Uz_u"><div class="container padding-top--md padding-bottom--lg"><div class="row"><div class="col docItemCol_VOVn"><div class="docItemContainer_Djhp"><article><span class="theme-doc-version-badge badge badge--secondary">Version: 4.17.0</span><div class="tocCollapsible_ETCw theme-doc-toc-mobile tocMobile_ITEo"><button type="button" class="clean-btn tocCollapsibleButton_TO0P">On this page</button></div><div class="theme-doc-markdown markdown"><header><h1>DistributedLog</h1></header><blockquote><p>DistributedLog began its life as a separate project under the Apache Foundation. It was merged into BookKeeper in 2017.</p></blockquote><p>The DistributedLog API is an easy-to-use interface for managing BookKeeper entries that enables you to use BookKeeper without needing to interact with <a href="/docs/api/ledger-api">ledgers</a> directly.</p><p>DistributedLog (DL) maintains sequences of records in categories called <em>logs</em> (aka <em>log streams</em>). <em>Writers</em> append records to DL logs, while <em>readers</em> fetch and process those records.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="architecture">Architecture<a href="#architecture" class="hash-link" aria-label="Direct link to Architecture" title="Direct link to Architecture">​</a></h2><p>The diagram below illustrates how the DistributedLog API works with BookKeeper:</p><p><img loading="lazy" alt="DistributedLog API" src="/assets/images/distributedlog-e72b5c54b4a5ca53e33a6740bb2b4242.png" width="818" height="441" class="img_ev3q"></p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="logs">Logs<a href="#logs" class="hash-link" aria-label="Direct link to Logs" title="Direct link to Logs">​</a></h2><p>A <em>log</em> in DistributedLog is an ordered, immutable sequence of <em>log records</em>.</p><p>The diagram below illustrates the anatomy of a log stream:</p><p><img loading="lazy" alt="DistributedLog log" src="/assets/images/logs-4fa7115af12e41a46d64d9e300847af4.png" width="620" height="516" class="img_ev3q"></p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="log-records">Log records<a href="#log-records" class="hash-link" aria-label="Direct link to Log records" title="Direct link to Log records">​</a></h3><p>Each log record is a sequence of bytes. Applications are responsible for serializing and deserializing byte sequences stored in log records.</p><p>Log records are written sequentially into a <em>log stream</em> and assigned with a a unique sequence number called a DLSN (<strong>D</strong>istributed<strong>L</strong>og <strong>S</strong>equence <strong>N</strong>umber).</p><p>In addition to a DLSN, applications can assign their own sequence number when constructing log records. Application-defined sequence numbers are known as <em>TransactionIDs</em> (or <em>txid</em>). Either a DLSN or a TransactionID can be used for positioning readers to start reading from a specific log record.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="log-segments">Log segments<a href="#log-segments" class="hash-link" aria-label="Direct link to Log segments" title="Direct link to Log segments">​</a></h3><p>Each log is broken down into <em>log segments</em> that contain subsets of records. Log segments are distributed and stored in BookKeeper. DistributedLog rolls the log segments based on the configured <em>rolling policy</em>, which be either</p><ul><li>a configurable period of time (such as every 2 hours), or</li><li>a configurable maximum size (such as every 128 MB).</li></ul><p>The data in logs is divided up into equally sized log segments and distributed evenly across bookies. This allows logs to scale beyond a size that would fit on a single server and spreads read traffic across the cluster.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="namespaces">Namespaces<a href="#namespaces" class="hash-link" aria-label="Direct link to Namespaces" title="Direct link to Namespaces">​</a></h3><p>Log streams that belong to the same organization are typically categorized and managed under a <em>namespace</em>. DistributedLog namespaces essentially enable applications to locate log streams. Applications can perform the following actions under a namespace:</p><ul><li>create streams</li><li>delete streams</li><li>truncate streams to a given sequence number (either a DLSN or a TransactionID)</li></ul><h2 class="anchor anchorWithStickyNavbar_LWe7" id="writers">Writers<a href="#writers" class="hash-link" aria-label="Direct link to Writers" title="Direct link to Writers">​</a></h2><p>Through the DistributedLog API, writers write data into logs of their choice. All records are appended into logs in order. The sequencing is performed by the writer, which means that there is only one active writer for a log at any given time.</p><p>DistributedLog guarantees correctness when two writers attempt to write to the same log when a network partition occurs using a <em>fencing</em> mechanism in the log segment store.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="write-proxy">Write Proxy<a href="#write-proxy" class="hash-link" aria-label="Direct link to Write Proxy" title="Direct link to Write Proxy">​</a></h3><p>Log writers are served and managed in a service tier called the <em>Write Proxy</em> (see the diagram <a href="#architecture">above</a>). The Write Proxy is used for accepting writes from a large number of clients.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="readers">Readers<a href="#readers" class="hash-link" aria-label="Direct link to Readers" title="Direct link to Readers">​</a></h2><p>DistributedLog readers read records from logs of their choice, starting with a provided position. The provided position can be either a DLSN or a TransactionID.</p><p>Readers read records from logs in strict order. Different readers can read records from different positions in the same log.</p><p>Unlike other pub-sub systems, DistributedLog doesn&#x27;t record or manage readers&#x27; positions. This means that tracking is the responsibility of applications, as different applications may have different requirements for tracking and coordinating positions. This is hard to get right with a single approach. Distributed databases, for example, might store reader positions along with SSTables, so they would resume applying transactions from the positions store in SSTables. Tracking reader positions could easily be done at the application level using various stores (such as ZooKeeper, the filesystem, or key-value stores).</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="read-proxy">Read Proxy<a href="#read-proxy" class="hash-link" aria-label="Direct link to Read Proxy" title="Direct link to Read Proxy">​</a></h3><p>Log records can be cached in a service tier called the <em>Read Proxy</em> to serve a large number of readers. See the diagram <a href="#architecture">above</a>. The Read Proxy is the analogue of the <a href="#write-proxy">Write Proxy</a>.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="guarantees">Guarantees<a href="#guarantees" class="hash-link" aria-label="Direct link to Guarantees" title="Direct link to Guarantees">​</a></h2><p>The DistributedLog API for BookKeeper provides a number of guarantees for applications:</p><ul><li>Records written by a <a href="#writers">writer</a> to a <a href="#logs">log</a> are appended in the order in which they are written. If a record <strong>R1</strong> is written by the same writer as a record <strong>R2</strong>, <strong>R1</strong> will have a smaller sequence number than <strong>R2</strong>.</li><li><a href="#readers">Readers</a> see <a href="#log-records">records</a> in the same order in which they are <a href="#writers">written</a> to the log.</li><li>All records are persisted on disk by BookKeeper before acknowledgements, which guarantees durability.</li><li>For a log with a replication factor of N, DistributedLog tolerates up to N-1 server failures without losing any records.</li></ul><h2 class="anchor anchorWithStickyNavbar_LWe7" id="api">API<a href="#api" class="hash-link" aria-label="Direct link to API" title="Direct link to API">​</a></h2><p>Documentation for the DistributedLog API can be found <a href="https://bookkeeper.apache.org/docs/next/api/distributedlog-api" target="_blank" rel="noopener noreferrer">here</a>.</p><blockquote><p>At a later date, the DistributedLog API docs will be added here.</p></blockquote></div></article><nav class="pagination-nav docusaurus-mt-lg" aria-label="Docs pages navigation"></nav></div></div><div class="col col--3"><div class="tableOfContents_bqdL thin-scrollbar theme-doc-toc-desktop"><ul class="table-of-contents table-of-contents__left-border"><li><a href="#architecture" class="table-of-contents__link toc-highlight">Architecture</a></li><li><a href="#logs" class="table-of-contents__link toc-highlight">Logs</a><ul><li><a href="#log-records" class="table-of-contents__link toc-highlight">Log records</a></li><li><a href="#log-segments" class="table-of-contents__link toc-highlight">Log segments</a></li><li><a href="#namespaces" class="table-of-contents__link toc-highlight">Namespaces</a></li></ul></li><li><a href="#writers" class="table-of-contents__link toc-highlight">Writers</a><ul><li><a href="#write-proxy" class="table-of-contents__link toc-highlight">Write Proxy</a></li></ul></li><li><a href="#readers" class="table-of-contents__link toc-highlight">Readers</a><ul><li><a href="#read-proxy" class="table-of-contents__link toc-highlight">Read Proxy</a></li></ul></li><li><a href="#guarantees" class="table-of-contents__link toc-highlight">Guarantees</a></li><li><a href="#api" class="table-of-contents__link toc-highlight">API</a></li></ul></div></div></div></div></main></div></div><footer class="footer footer--dark"><div class="container container-fluid"><div class="row footer__links"><div class="col footer__col"><div class="footer__title">Documentation</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/docs/overview">Overview</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/getting-started/installation">Getting started</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/deployment/manual">Deployment</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/admin/bookies">Administration</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/api/overview">API</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/security/overview">Security</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/development/protocol">Development</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/reference/config">Reference</a></li></ul></div><div class="col footer__col"><div class="footer__title">Community</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/community/mailing-lists">Mailing lists</a></li><li class="footer__item"><a class="footer__link-item" href="/community/slack">Slack</a></li><li class="footer__item"><a href="https://github.com/apache/bookkeeper" target="_blank" rel="noopener noreferrer" class="footer__link-item">Github<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a href="https://twitter.com/asfbookkeeper" target="_blank" rel="noopener noreferrer" class="footer__link-item">Twitter<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div><div class="col footer__col"><div class="footer__title">Project</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/project/who">Who are we?</a></li><li class="footer__item"><a class="footer__link-item" href="/project/bylaws">Bylaws</a></li><li class="footer__item"><a href="https://apache.org/licenses" target="_blank" rel="noopener noreferrer" class="footer__link-item">License<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a class="footer__link-item" href="/project/privacy">Privacy policy</a></li><li class="footer__item"><a href="https://www.apache.org/foundation/sponsorship.html" target="_blank" rel="noopener noreferrer" class="footer__link-item">Sponsorship<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a href="https://www.apache.org/foundation/thanks.html" target="_blank" rel="noopener noreferrer" class="footer__link-item">Thanks<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div></div><div class="footer__bottom text--center"><div class="footer__copyright"><footer class="footer">
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navbar__brand" href="/"><div class="navbar__logo"><img src="/img/bk-logo.svg" alt="Apache Bookkeeper" class="themedImage_ToTc themedImage--light_HNdA"><img src="/img/bk-logo.svg" alt="Apache Bookkeeper" class="themedImage_ToTc themedImage--dark_i4oU"></div><b class="navbar__title text--truncate">Apache BookKeeper</b></a><a aria-current="page" class="navbar__item navbar__link navbar__link--active" href="/docs/overview/">Documentation</a><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Community</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/community/mailing-lists">Mailing lists</a></li><li><a class="dropdown__link" href="/community/slack">Slack</a></li><li><a href="https://github.com/apache/bookkeeper/issues" target="_blank" rel="noopener noreferrer" class="dropdown__link">Github issues<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a class="dropdown__link" href="/community/releases">Release management</a></li><li><a class="dropdown__link" href="/community/meeting">Community meetings</a></li><li><a class="dropdown__link" href="/community/contributing">Contribution guide</a></li><li><a class="dropdown__link" href="/community/coding-guide">Coding guide</a></li><li><a class="dropdown__link" href="/community/testing">Testing guide</a></li><li><a class="dropdown__link" href="/community/issue-report">Issue report guide</a></li><li><a class="dropdown__link" href="/community/release-guide">Release guide</a></li><li><a class="dropdown__link" href="/community/presentations">Presentations</a></li><li><a class="dropdown__link" href="/community/bookkeeper-proposals">BookKeeper proposals (BP)</a></li></ul></div><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Project</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/project/who">Who are we?</a></li><li><a class="dropdown__link" href="/project/bylaws">Bylaws</a></li><li><a href="https://apache.org/licenses" target="_blank" rel="noopener noreferrer" class="dropdown__link">License<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a class="dropdown__link" href="/project/privacy">Privacy policy</a></li><li><a href="https://www.apache.org/foundation/sponsorship.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Sponsorship<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a href="https://www.apache.org/foundation/thanks.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Thanks<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div></div><div class="navbar__items navbar__items--right"><div class="navbar__item dropdown dropdown--hoverable dropdown--right"><a class="navbar__link" aria-haspopup="true" aria-expanded="false" role="button" href="/docs/overview/">4.17.0</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/docs/next/api/distributedlog-api">Next</a></li><li><a aria-current="page" class="dropdown__link dropdown__link--active" href="/docs/api/distributedlog-api">4.17.0</a></li><li><a class="dropdown__link" href="/docs/4.16.5/api/distributedlog-api">4.16.5</a></li><li><a class="dropdown__link" href="/docs/4.15.5/api/distributedlog-api">4.15.5</a></li><li><a class="dropdown__link" href="/docs/4.14.8/api/distributedlog-api">4.14.8</a></li><li><a class="dropdown__link" href="/docs/4.13.0/api/distributedlog-api">4.13.0</a></li><li><a class="dropdown__link" href="/docs/4.12.1/api/distributedlog-api">4.12.1</a></li><li><a class="dropdown__link" href="/docs/4.11.1/api/distributedlog-api">4.11.1</a></li><li><a class="dropdown__link" href="/docs/4.10.0/api/distributedlog-api">4.10.0</a></li><li><a class="dropdown__link" href="/docs/4.9.2/api/distributedlog-api">4.9.2</a></li><li><a class="dropdown__link" href="/docs/4.8.2/api/distributedlog-api">4.8.2</a></li><li><a class="dropdown__link" href="/docs/4.7.3/api/distributedlog-api">4.7.3</a></li><li><a class="dropdown__link" href="/docs/4.6.2/api/distributedlog-api">4.6.2</a></li><li><a class="dropdown__link" href="/docs/4.5.1/api/distributedlog-api">4.5.1</a></li></ul></div><a class="navbar__item navbar__link" href="/releases">Download</a><div class="toggle_vylO colorModeToggle_DEke"><button class="clean-btn toggleButton_gllP toggleButtonDisabled_aARS" type="button" disabled="" title="Switch between dark and light mode (currently light mode)" aria-label="Switch between dark and light mode (currently light mode)" aria-live="polite"><svg viewBox="0 0 24 24" width="24" height="24" class="lightToggleIcon_pyhR"><path fill="currentColor" d="M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"></path></svg><svg viewBox="0 0 24 24" width="24" height="24" class="darkToggleIcon_wfgR"><path fill="currentColor" d="M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"></path></svg></button></div><div class="searchBox_ZlJk"></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div></nav><div id="docusaurus_skipToContent_fallback" class="main-wrapper mainWrapper_z2l0 docsWrapper_BCFX"><button aria-label="Scroll back to top" class="clean-btn theme-back-to-top-button backToTopButton_sjWU" type="button"></button><div class="docPage__5DB"><aside class="theme-doc-sidebar-container docSidebarContainer_b6E3"><div class="sidebarViewport_Xe31"><div class="sidebar_njMd"><nav aria-label="Docs sidebar" class="menu thin-scrollbar menu_SIkG"><ul class="theme-doc-sidebar-menu menu__list"><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-1 menu__list-item"><a class="menu__link" href="/docs/overview/">Overview</a></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/getting-started/installation">Getting started</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/deployment/manual">Deployment</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/admin/bookies">Administration</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret menu__link--active" aria-expanded="true" href="/docs/api/overview">API</a></div><ul style="display:block;overflow:visible;height:auto" class="menu__list"><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/api/overview">Overview</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/api/ledger-api">Ledger API</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/api/ledger-adv-api">Advanced Ledger API</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link menu__link--active" aria-current="page" tabindex="0" href="/docs/api/distributedlog-api">DistributedLog</a></li></ul></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/security/overview">Security</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/development/protocol">Development</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/reference/config">Reference</a></div></li></ul></nav></div></div></aside><main class="docMainContainer_gTbr"><div class="container padding-top--md padding-bottom--lg"><div class="row"><div class="col docItemCol_VOVn"><div class="docItemContainer_Djhp"><article><span class="theme-doc-version-badge badge badge--secondary">Version: 4.17.0</span><div class="tocCollapsible_ETCw theme-doc-toc-mobile tocMobile_ITEo"><button type="button" class="clean-btn tocCollapsibleButton_TO0P">On this page</button></div><div class="theme-doc-markdown markdown"><header><h1>DistributedLog</h1></header><blockquote><p>DistributedLog began its life as a separate project under the Apache Foundation. It was merged into BookKeeper in 2017.</p></blockquote><p>The DistributedLog API is an easy-to-use interface for managing BookKeeper entries that enables you to use BookKeeper without needing to interact with <a href="/docs/api/ledger-api">ledgers</a> directly.</p><p>DistributedLog (DL) maintains sequences of records in categories called <em>logs</em> (aka <em>log streams</em>). <em>Writers</em> append records to DL logs, while <em>readers</em> fetch and process those records.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="architecture">Architecture<a href="#architecture" class="hash-link" aria-label="Direct link to Architecture" title="Direct link to Architecture">​</a></h2><p>The diagram below illustrates how the DistributedLog API works with BookKeeper:</p><p><img loading="lazy" alt="DistributedLog API" src="/assets/images/distributedlog-e72b5c54b4a5ca53e33a6740bb2b4242.png" width="818" height="441" class="img_ev3q"></p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="logs">Logs<a href="#logs" class="hash-link" aria-label="Direct link to Logs" title="Direct link to Logs">​</a></h2><p>A <em>log</em> in DistributedLog is an ordered, immutable sequence of <em>log records</em>.</p><p>The diagram below illustrates the anatomy of a log stream:</p><p><img loading="lazy" alt="DistributedLog log" src="/assets/images/logs-4fa7115af12e41a46d64d9e300847af4.png" width="620" height="516" class="img_ev3q"></p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="log-records">Log records<a href="#log-records" class="hash-link" aria-label="Direct link to Log records" title="Direct link to Log records">​</a></h3><p>Each log record is a sequence of bytes. Applications are responsible for serializing and deserializing byte sequences stored in log records.</p><p>Log records are written sequentially into a <em>log stream</em> and assigned with a a unique sequence number called a DLSN (<strong>D</strong>istributed<strong>L</strong>og <strong>S</strong>equence <strong>N</strong>umber).</p><p>In addition to a DLSN, applications can assign their own sequence number when constructing log records. Application-defined sequence numbers are known as <em>TransactionIDs</em> (or <em>txid</em>). Either a DLSN or a TransactionID can be used for positioning readers to start reading from a specific log record.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="log-segments">Log segments<a href="#log-segments" class="hash-link" aria-label="Direct link to Log segments" title="Direct link to Log segments">​</a></h3><p>Each log is broken down into <em>log segments</em> that contain subsets of records. Log segments are distributed and stored in BookKeeper. DistributedLog rolls the log segments based on the configured <em>rolling policy</em>, which be either</p><ul><li>a configurable period of time (such as every 2 hours), or</li><li>a configurable maximum size (such as every 128 MB).</li></ul><p>The data in logs is divided up into equally sized log segments and distributed evenly across bookies. This allows logs to scale beyond a size that would fit on a single server and spreads read traffic across the cluster.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="namespaces">Namespaces<a href="#namespaces" class="hash-link" aria-label="Direct link to Namespaces" title="Direct link to Namespaces">​</a></h3><p>Log streams that belong to the same organization are typically categorized and managed under a <em>namespace</em>. DistributedLog namespaces essentially enable applications to locate log streams. Applications can perform the following actions under a namespace:</p><ul><li>create streams</li><li>delete streams</li><li>truncate streams to a given sequence number (either a DLSN or a TransactionID)</li></ul><h2 class="anchor anchorWithStickyNavbar_LWe7" id="writers">Writers<a href="#writers" class="hash-link" aria-label="Direct link to Writers" title="Direct link to Writers">​</a></h2><p>Through the DistributedLog API, writers write data into logs of their choice. All records are appended into logs in order. The sequencing is performed by the writer, which means that there is only one active writer for a log at any given time.</p><p>DistributedLog guarantees correctness when two writers attempt to write to the same log when a network partition occurs using a <em>fencing</em> mechanism in the log segment store.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="write-proxy">Write Proxy<a href="#write-proxy" class="hash-link" aria-label="Direct link to Write Proxy" title="Direct link to Write Proxy">​</a></h3><p>Log writers are served and managed in a service tier called the <em>Write Proxy</em> (see the diagram <a href="#architecture">above</a>). The Write Proxy is used for accepting writes from a large number of clients.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="readers">Readers<a href="#readers" class="hash-link" aria-label="Direct link to Readers" title="Direct link to Readers">​</a></h2><p>DistributedLog readers read records from logs of their choice, starting with a provided position. The provided position can be either a DLSN or a TransactionID.</p><p>Readers read records from logs in strict order. Different readers can read records from different positions in the same log.</p><p>Unlike other pub-sub systems, DistributedLog doesn&#x27;t record or manage readers&#x27; positions. This means that tracking is the responsibility of applications, as different applications may have different requirements for tracking and coordinating positions. This is hard to get right with a single approach. Distributed databases, for example, might store reader positions along with SSTables, so they would resume applying transactions from the positions store in SSTables. Tracking reader positions could easily be done at the application level using various stores (such as ZooKeeper, the filesystem, or key-value stores).</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="read-proxy">Read Proxy<a href="#read-proxy" class="hash-link" aria-label="Direct link to Read Proxy" title="Direct link to Read Proxy">​</a></h3><p>Log records can be cached in a service tier called the <em>Read Proxy</em> to serve a large number of readers. See the diagram <a href="#architecture">above</a>. The Read Proxy is the analogue of the <a href="#write-proxy">Write Proxy</a>.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="guarantees">Guarantees<a href="#guarantees" class="hash-link" aria-label="Direct link to Guarantees" title="Direct link to Guarantees">​</a></h2><p>The DistributedLog API for BookKeeper provides a number of guarantees for applications:</p><ul><li>Records written by a <a href="#writers">writer</a> to a <a href="#logs">log</a> are appended in the order in which they are written. If a record <strong>R1</strong> is written by the same writer as a record <strong>R2</strong>, <strong>R1</strong> will have a smaller sequence number than <strong>R2</strong>.</li><li><a href="#readers">Readers</a> see <a href="#log-records">records</a> in the same order in which they are <a href="#writers">written</a> to the log.</li><li>All records are persisted on disk by BookKeeper before acknowledgements, which guarantees durability.</li><li>For a log with a replication factor of N, DistributedLog tolerates up to N-1 server failures without losing any records.</li></ul><h2 class="anchor anchorWithStickyNavbar_LWe7" id="api">API<a href="#api" class="hash-link" aria-label="Direct link to API" title="Direct link to API">​</a></h2><p>Documentation for the DistributedLog API can be found <a href="https://bookkeeper.apache.org/docs/next/api/distributedlog-api" target="_blank" rel="noopener noreferrer">here</a>.</p><blockquote><p>At a later date, the DistributedLog API docs will be added here.</p></blockquote></div></article><nav class="pagination-nav docusaurus-mt-lg" aria-label="Docs pages navigation"><a class="pagination-nav__link pagination-nav__link--prev" href="/docs/api/ledger-adv-api"><div class="pagination-nav__sublabel">Previous</div><div class="pagination-nav__label">The Advanced Ledger API</div></a><a class="pagination-nav__link pagination-nav__link--next" href="/docs/security/overview"><div class="pagination-nav__sublabel">Next</div><div class="pagination-nav__label">BookKeeper Security</div></a></nav></div></div><div class="col col--3"><div class="tableOfContents_bqdL thin-scrollbar theme-doc-toc-desktop"><ul class="table-of-contents table-of-contents__left-border"><li><a href="#architecture" class="table-of-contents__link toc-highlight">Architecture</a></li><li><a href="#logs" class="table-of-contents__link toc-highlight">Logs</a><ul><li><a href="#log-records" class="table-of-contents__link toc-highlight">Log records</a></li><li><a href="#log-segments" class="table-of-contents__link toc-highlight">Log segments</a></li><li><a href="#namespaces" class="table-of-contents__link toc-highlight">Namespaces</a></li></ul></li><li><a href="#writers" class="table-of-contents__link toc-highlight">Writers</a><ul><li><a href="#write-proxy" class="table-of-contents__link toc-highlight">Write Proxy</a></li></ul></li><li><a href="#readers" class="table-of-contents__link toc-highlight">Readers</a><ul><li><a href="#read-proxy" class="table-of-contents__link toc-highlight">Read Proxy</a></li></ul></li><li><a href="#guarantees" class="table-of-contents__link toc-highlight">Guarantees</a></li><li><a href="#api" class="table-of-contents__link toc-highlight">API</a></li></ul></div></div></div></div></main></div></div><footer class="footer footer--dark"><div class="container container-fluid"><div class="row footer__links"><div class="col footer__col"><div class="footer__title">Documentation</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/docs/overview">Overview</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/getting-started/installation">Getting started</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/deployment/manual">Deployment</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/admin/bookies">Administration</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/api/overview">API</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/security/overview">Security</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/development/protocol">Development</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/reference/config">Reference</a></li></ul></div><div class="col footer__col"><div class="footer__title">Community</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/community/mailing-lists">Mailing lists</a></li><li class="footer__item"><a class="footer__link-item" href="/community/slack">Slack</a></li><li class="footer__item"><a href="https://github.com/apache/bookkeeper" target="_blank" rel="noopener noreferrer" class="footer__link-item">Github<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a href="https://twitter.com/asfbookkeeper" target="_blank" rel="noopener noreferrer" class="footer__link-item">Twitter<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div><div class="col footer__col"><div class="footer__title">Project</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/project/who">Who are we?</a></li><li class="footer__item"><a class="footer__link-item" href="/project/bylaws">Bylaws</a></li><li class="footer__item"><a href="https://apache.org/licenses" target="_blank" rel="noopener noreferrer" class="footer__link-item">License<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a class="footer__link-item" href="/project/privacy">Privacy policy</a></li><li class="footer__item"><a href="https://www.apache.org/foundation/sponsorship.html" target="_blank" rel="noopener noreferrer" class="footer__link-item">Sponsorship<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a href="https://www.apache.org/foundation/thanks.html" target="_blank" rel="noopener noreferrer" class="footer__link-item">Thanks<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div></div><div class="footer__bottom text--center"><div class="footer__copyright"><footer class="footer">
         <div class="container">
           <div class="content has-text-centered">
             <p>
@@ -22,7 +22,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/api/ledger-adv-api/index.html b/content/docs/api/ledger-adv-api/index.html
index 8e843e9..f9c689b 100644
--- a/content/docs/api/ledger-adv-api/index.html
+++ b/content/docs/api/ledger-adv-api/index.html
@@ -4,17 +4,17 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">The Advanced Ledger API | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/api/ledger-adv-api"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.17.0"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.17.0"><meta data-rh="true" name="docsearch:version" content="4.17.0"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.17.0"><meta data-rh="true" property="og:title" content="The Advanced Ledger API | Apache BookKeeper"><meta data-rh="true" name="description" content="In release 4.5.0, Apache BookKeeper introduces a few advanced API for advanced usage."><meta data-rh="true" property="og:description" content="In release 4.5.0, Apache BookKeeper introduces a few advanced API for advanced usage."><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/api/ledger-adv-api"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/api/ledger-adv-api" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/api/ledger-adv-api" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
-<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navbar__brand" href="/"><div class="navbar__logo"><img src="/img/bk-logo.svg" alt="Apache Bookkeeper" class="themedImage_ToTc themedImage--light_HNdA"><img src="/img/bk-logo.svg" alt="Apache Bookkeeper" class="themedImage_ToTc themedImage--dark_i4oU"></div><b class="navbar__title text--truncate">Apache BookKeeper</b></a><a class="navbar__item navbar__link" href="/docs/overview/">Documentation</a><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Community</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/community/mailing-lists">Mailing lists</a></li><li><a class="dropdown__link" href="/community/slack">Slack</a></li><li><a href="https://github.com/apache/bookkeeper/issues" target="_blank" rel="noopener noreferrer" class="dropdown__link">Github issues<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a class="dropdown__link" href="/community/releases">Release management</a></li><li><a class="dropdown__link" href="/community/meeting">Community meetings</a></li><li><a class="dropdown__link" href="/community/contributing">Contribution guide</a></li><li><a class="dropdown__link" href="/community/coding-guide">Coding guide</a></li><li><a class="dropdown__link" href="/community/testing">Testing guide</a></li><li><a class="dropdown__link" href="/community/issue-report">Issue report guide</a></li><li><a class="dropdown__link" href="/community/release-guide">Release guide</a></li><li><a class="dropdown__link" href="/community/presentations">Presentations</a></li><li><a class="dropdown__link" href="/community/bookkeeper-proposals">BookKeeper proposals (BP)</a></li></ul></div><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Project</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/project/who">Who are we?</a></li><li><a class="dropdown__link" href="/project/bylaws">Bylaws</a></li><li><a href="https://apache.org/licenses" target="_blank" rel="noopener noreferrer" class="dropdown__link">License<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a class="dropdown__link" href="/project/privacy">Privacy policy</a></li><li><a href="https://www.apache.org/foundation/sponsorship.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Sponsorship<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a href="https://www.apache.org/foundation/thanks.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Thanks<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div></div><div class="navbar__items navbar__items--right"><div class="navbar__item dropdown dropdown--hoverable dropdown--right"><a class="navbar__link" aria-haspopup="true" aria-expanded="false" role="button" href="/docs/admin/autorecovery">4.17.0</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/docs/next/api/ledger-adv-api">Next</a></li><li><a aria-current="page" class="dropdown__link dropdown__link--active" href="/docs/api/ledger-adv-api">4.17.0</a></li><li><a class="dropdown__link" href="/docs/4.16.5/api/ledger-adv-api">4.16.5</a></li><li><a class="dropdown__link" href="/docs/4.15.5/api/ledger-adv-api">4.15.5</a></li><li><a class="dropdown__link" href="/docs/4.14.8/api/ledger-adv-api">4.14.8</a></li><li><a class="dropdown__link" href="/docs/4.13.0/api/ledger-adv-api">4.13.0</a></li><li><a class="dropdown__link" href="/docs/4.12.1/api/ledger-adv-api">4.12.1</a></li><li><a class="dropdown__link" href="/docs/4.11.1/api/ledger-adv-api">4.11.1</a></li><li><a class="dropdown__link" href="/docs/4.10.0/api/ledger-adv-api">4.10.0</a></li><li><a class="dropdown__link" href="/docs/4.9.2/api/ledger-adv-api">4.9.2</a></li><li><a class="dropdown__link" href="/docs/4.8.2/api/ledger-adv-api">4.8.2</a></li><li><a class="dropdown__link" href="/docs/4.7.3/api/ledger-adv-api">4.7.3</a></li><li><a class="dropdown__link" href="/docs/4.6.2/api/ledger-adv-api">4.6.2</a></li><li><a class="dropdown__link" href="/docs/4.5.1/api/ledger-adv-api">4.5.1</a></li></ul></div><a class="navbar__item navbar__link" href="/releases">Download</a><div class="toggle_vylO colorModeToggle_DEke"><button class="clean-btn toggleButton_gllP toggleButtonDisabled_aARS" type="button" disabled="" title="Switch between dark and light mode (currently light mode)" aria-label="Switch between dark and light mode (currently light mode)" aria-live="polite"><svg viewBox="0 0 24 24" width="24" height="24" class="lightToggleIcon_pyhR"><path fill="currentColor" d="M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"></path></svg><svg viewBox="0 0 24 24" width="24" height="24" class="darkToggleIcon_wfgR"><path fill="currentColor" d="M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"></path></svg></button></div><div class="searchBox_ZlJk"></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div></nav><div id="docusaurus_skipToContent_fallback" class="main-wrapper mainWrapper_z2l0 docsWrapper_BCFX"><button aria-label="Scroll back to top" class="clean-btn theme-back-to-top-button backToTopButton_sjWU" type="button"></button><div class="docPage__5DB"><main class="docMainContainer_gTbr docMainContainerEnhanced_Uz_u"><div class="container padding-top--md padding-bottom--lg"><div class="row"><div class="col docItemCol_VOVn"><div class="docItemContainer_Djhp"><article><span class="theme-doc-version-badge badge badge--secondary">Version: 4.17.0</span><div class="tocCollapsible_ETCw theme-doc-toc-mobile tocMobile_ITEo"><button type="button" class="clean-btn tocCollapsibleButton_TO0P">On this page</button></div><div class="theme-doc-markdown markdown"><header><h1>The Advanced Ledger API</h1></header><p>In release <code>4.5.0</code>, Apache BookKeeper introduces a few advanced API for advanced usage.
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navbar__brand" href="/"><div class="navbar__logo"><img src="/img/bk-logo.svg" alt="Apache Bookkeeper" class="themedImage_ToTc themedImage--light_HNdA"><img src="/img/bk-logo.svg" alt="Apache Bookkeeper" class="themedImage_ToTc themedImage--dark_i4oU"></div><b class="navbar__title text--truncate">Apache BookKeeper</b></a><a aria-current="page" class="navbar__item navbar__link navbar__link--active" href="/docs/overview/">Documentation</a><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Community</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/community/mailing-lists">Mailing lists</a></li><li><a class="dropdown__link" href="/community/slack">Slack</a></li><li><a href="https://github.com/apache/bookkeeper/issues" target="_blank" rel="noopener noreferrer" class="dropdown__link">Github issues<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a class="dropdown__link" href="/community/releases">Release management</a></li><li><a class="dropdown__link" href="/community/meeting">Community meetings</a></li><li><a class="dropdown__link" href="/community/contributing">Contribution guide</a></li><li><a class="dropdown__link" href="/community/coding-guide">Coding guide</a></li><li><a class="dropdown__link" href="/community/testing">Testing guide</a></li><li><a class="dropdown__link" href="/community/issue-report">Issue report guide</a></li><li><a class="dropdown__link" href="/community/release-guide">Release guide</a></li><li><a class="dropdown__link" href="/community/presentations">Presentations</a></li><li><a class="dropdown__link" href="/community/bookkeeper-proposals">BookKeeper proposals (BP)</a></li></ul></div><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Project</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/project/who">Who are we?</a></li><li><a class="dropdown__link" href="/project/bylaws">Bylaws</a></li><li><a href="https://apache.org/licenses" target="_blank" rel="noopener noreferrer" class="dropdown__link">License<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a class="dropdown__link" href="/project/privacy">Privacy policy</a></li><li><a href="https://www.apache.org/foundation/sponsorship.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Sponsorship<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a href="https://www.apache.org/foundation/thanks.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Thanks<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div></div><div class="navbar__items navbar__items--right"><div class="navbar__item dropdown dropdown--hoverable dropdown--right"><a class="navbar__link" aria-haspopup="true" aria-expanded="false" role="button" href="/docs/overview/">4.17.0</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/docs/next/api/ledger-adv-api">Next</a></li><li><a aria-current="page" class="dropdown__link dropdown__link--active" href="/docs/api/ledger-adv-api">4.17.0</a></li><li><a class="dropdown__link" href="/docs/4.16.5/api/ledger-adv-api">4.16.5</a></li><li><a class="dropdown__link" href="/docs/4.15.5/api/ledger-adv-api">4.15.5</a></li><li><a class="dropdown__link" href="/docs/4.14.8/api/ledger-adv-api">4.14.8</a></li><li><a class="dropdown__link" href="/docs/4.13.0/api/ledger-adv-api">4.13.0</a></li><li><a class="dropdown__link" href="/docs/4.12.1/api/ledger-adv-api">4.12.1</a></li><li><a class="dropdown__link" href="/docs/4.11.1/api/ledger-adv-api">4.11.1</a></li><li><a class="dropdown__link" href="/docs/4.10.0/api/ledger-adv-api">4.10.0</a></li><li><a class="dropdown__link" href="/docs/4.9.2/api/ledger-adv-api">4.9.2</a></li><li><a class="dropdown__link" href="/docs/4.8.2/api/ledger-adv-api">4.8.2</a></li><li><a class="dropdown__link" href="/docs/4.7.3/api/ledger-adv-api">4.7.3</a></li><li><a class="dropdown__link" href="/docs/4.6.2/api/ledger-adv-api">4.6.2</a></li><li><a class="dropdown__link" href="/docs/4.5.1/api/ledger-adv-api">4.5.1</a></li></ul></div><a class="navbar__item navbar__link" href="/releases">Download</a><div class="toggle_vylO colorModeToggle_DEke"><button class="clean-btn toggleButton_gllP toggleButtonDisabled_aARS" type="button" disabled="" title="Switch between dark and light mode (currently light mode)" aria-label="Switch between dark and light mode (currently light mode)" aria-live="polite"><svg viewBox="0 0 24 24" width="24" height="24" class="lightToggleIcon_pyhR"><path fill="currentColor" d="M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"></path></svg><svg viewBox="0 0 24 24" width="24" height="24" class="darkToggleIcon_wfgR"><path fill="currentColor" d="M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"></path></svg></button></div><div class="searchBox_ZlJk"></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div></nav><div id="docusaurus_skipToContent_fallback" class="main-wrapper mainWrapper_z2l0 docsWrapper_BCFX"><button aria-label="Scroll back to top" class="clean-btn theme-back-to-top-button backToTopButton_sjWU" type="button"></button><div class="docPage__5DB"><aside class="theme-doc-sidebar-container docSidebarContainer_b6E3"><div class="sidebarViewport_Xe31"><div class="sidebar_njMd"><nav aria-label="Docs sidebar" class="menu thin-scrollbar menu_SIkG"><ul class="theme-doc-sidebar-menu menu__list"><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-1 menu__list-item"><a class="menu__link" href="/docs/overview/">Overview</a></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/getting-started/installation">Getting started</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/deployment/manual">Deployment</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/admin/bookies">Administration</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret menu__link--active" aria-expanded="true" href="/docs/api/overview">API</a></div><ul style="display:block;overflow:visible;height:auto" class="menu__list"><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/api/overview">Overview</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/api/ledger-api">Ledger API</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link menu__link--active" aria-current="page" tabindex="0" href="/docs/api/ledger-adv-api">Advanced Ledger API</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/api/distributedlog-api">DistributedLog</a></li></ul></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/security/overview">Security</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/development/protocol">Development</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/reference/config">Reference</a></div></li></ul></nav></div></div></aside><main class="docMainContainer_gTbr"><div class="container padding-top--md padding-bottom--lg"><div class="row"><div class="col docItemCol_VOVn"><div class="docItemContainer_Djhp"><article><span class="theme-doc-version-badge badge badge--secondary">Version: 4.17.0</span><div class="tocCollapsible_ETCw theme-doc-toc-mobile tocMobile_ITEo"><button type="button" class="clean-btn tocCollapsibleButton_TO0P">On this page</button></div><div class="theme-doc-markdown markdown"><header><h1>The Advanced Ledger API</h1></header><p>In release <code>4.5.0</code>, Apache BookKeeper introduces a few advanced API for advanced usage.
 This sections covers these advanced APIs.</p><blockquote><p>Before learn the advanced API, please read <a href="/docs/api/ledger-api">Ledger API</a> first.</p></blockquote><h2 class="anchor anchorWithStickyNavbar_LWe7" id="ledgerhandleadv">LedgerHandleAdv<a href="#ledgerhandleadv" class="hash-link" aria-label="Direct link to LedgerHandleAdv" title="Direct link to LedgerHandleAdv">​</a></h2><p><a href="https://bookkeeper.apache.org//docs/latest/api/javadoc/org/apache/bookkeeper/client/LedgerHandleAdv" target="_blank" rel="noopener noreferrer"><code>LedgerHandleAdv</code></a> is an advanced extension of <a href="https://bookkeeper.apache.org//docs/latest/api/javadoc/org/apache/bookkeeper/client/LedgerHandle" target="_blank" rel="noopener noreferrer"><code>LedgerHandle</code></a>.
 It allows user passing in an <code>entryId</code> when adding an entry.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="creating-advanced-ledgers">Creating advanced ledgers<a href="#creating-advanced-ledgers" class="hash-link" aria-label="Direct link to Creating advanced ledgers" title="Direct link to Creating advanced ledgers">​</a></h3><p>Here&#x27;s an exmaple:</p><div class="language-java codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-java codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">byte[] passwd = &quot;some-passwd&quot;.getBytes();</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">LedgerHandleAdv handle = bkClient.createLedgerAdv(</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    3, 3, 2, // replica settings</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    DigestType.CRC32,</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    passwd);</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>You can also create advanced ledgers asynchronously.</p><div class="language-java codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-java codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">class LedgerCreationCallback implements AsyncCallback.CreateCallback {</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    public void createComplete(int returnCode, LedgerHandle handle, Object ctx) {</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        System.out.println(&quot;Ledger successfully created&quot;);</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    }</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">}</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">client.asyncCreateLedgerAdv(</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        3, // ensemble size</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        3, // write quorum size</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        2, // ack quorum size</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        BookKeeper.DigestType.CRC32,</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        password,</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        new LedgerCreationCallback(),</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        &quot;some context&quot;</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">);</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>Besides the APIs above, BookKeeper allows users providing <code>ledger-id</code> when creating advanced ledgers.</p><div class="language-java codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-java codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">long ledgerId = ...; // the ledger id is generated externally.</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">byte[] passwd = &quot;some-passwd&quot;.getBytes();</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">LedgerHandleAdv handle = bkClient.createLedgerAdv(</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    ledgerId, // ledger id generated externally</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    3, 3, 2, // replica settings</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    DigestType.CRC32,</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    passwd);</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><blockquote><p>Please note, it is users&#x27; responsibility to provide a unique ledger id when using the API above.
 If a ledger already exists when users try to create an advanced ledger with same ledger id,
 a <a href="https://bookkeeper.apache.org//docs/latest/api/javadoc/org/apache/bookkeeper/client/BKException.BKLedgerExistException.html" target="_blank" rel="noopener noreferrer">LedgerExistsException</a> is thrown by the bookkeeper client.</p></blockquote><p>Creating advanced ledgers can be done throught a fluent API since 4.6.</p><div class="language-java codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-java codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">BookKeeper bk = ...;</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">byte[] passwd = &quot;some-passwd&quot;.getBytes();</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">WriteHandle wh = bk.newCreateLedgerOp()</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    .withDigestType(DigestType.CRC32)</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    .withPassword(passwd)</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    .withEnsembleSize(3)</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    .withWriteQuorumSize(3)</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    .withAckQuorumSize(2)</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    .makeAdv()                  // convert the create ledger builder to create ledger adv builder</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    .withLedgerId(1234L)</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    .execute()                  // execute the creation op</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    .get();                     // wait for the execution to complete</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><h3 class="anchor anchorWithStickyNavbar_LWe7" id="add-entries">Add Entries<a href="#add-entries" class="hash-link" aria-label="Direct link to Add Entries" title="Direct link to Add Entries">​</a></h3><p>The normal <a href="/docs/api/ledger-api/#adding-entries-to-ledgers">add entries api</a> in advanced ledgers are disabled. Instead, when users want to add entries
-to advanced ledgers, an entry id is required to pass in along with the entry data when adding an entry.</p><div class="language-java codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-java codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">long entryId = ...; // entry id generated externally</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">ledger.addEntry(entryId, &quot;Some entry data&quot;.getBytes());</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>If you are using the new API, you can do as following:</p><div class="language-java codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-java codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">WriteHandle wh = ...;</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">long entryId = ...; // entry id generated externally</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">wh.write(entryId, &quot;Some entry data&quot;.getBytes()).get();</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>A few notes when using this API:</p><ul><li>The entry id has to be non-negative.</li><li>Clients are okay to add entries out of order.</li><li>However, the entries are only acknowledged in a monotonic order starting from 0.</li></ul><h3 class="anchor anchorWithStickyNavbar_LWe7" id="read-entries">Read Entries<a href="#read-entries" class="hash-link" aria-label="Direct link to Read Entries" title="Direct link to Read Entries">​</a></h3><p>The read entries api in advanced ledgers remain same as <a href="/docs/api/ledger-api/#reading-entries-from-ledgers">normal ledgers</a>.</p></div></article><nav class="pagination-nav docusaurus-mt-lg" aria-label="Docs pages navigation"></nav></div></div><div class="col col--3"><div class="tableOfContents_bqdL thin-scrollbar theme-doc-toc-desktop"><ul class="table-of-contents table-of-contents__left-border"><li><a href="#ledgerhandleadv" class="table-of-contents__link toc-highlight">LedgerHandleAdv</a><ul><li><a href="#creating-advanced-ledgers" class="table-of-contents__link toc-highlight">Creating advanced ledgers</a></li><li><a href="#add-entries" class="table-of-contents__link toc-highlight">Add Entries</a></li><li><a href="#read-entries" class="table-of-contents__link toc-highlight">Read Entries</a></li></ul></li></ul></div></div></div></div></main></div></div><footer class="footer footer--dark"><div class="container container-fluid"><div class="row footer__links"><div class="col footer__col"><div class="footer__title">Documentation</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/docs/overview">Overview</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/getting-started/installation">Getting started</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/deployment/manual">Deployment</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/admin/bookies">Administration</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/api/overview">API</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/security/overview">Security</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/development/protocol">Development</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/reference/config">Reference</a></li></ul></div><div class="col footer__col"><div class="footer__title">Community</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/community/mailing-lists">Mailing lists</a></li><li class="footer__item"><a class="footer__link-item" href="/community/slack">Slack</a></li><li class="footer__item"><a href="https://github.com/apache/bookkeeper" target="_blank" rel="noopener noreferrer" class="footer__link-item">Github<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a href="https://twitter.com/asfbookkeeper" target="_blank" rel="noopener noreferrer" class="footer__link-item">Twitter<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div><div class="col footer__col"><div class="footer__title">Project</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/project/who">Who are we?</a></li><li class="footer__item"><a class="footer__link-item" href="/project/bylaws">Bylaws</a></li><li class="footer__item"><a href="https://apache.org/licenses" target="_blank" rel="noopener noreferrer" class="footer__link-item">License<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a class="footer__link-item" href="/project/privacy">Privacy policy</a></li><li class="footer__item"><a href="https://www.apache.org/foundation/sponsorship.html" target="_blank" rel="noopener noreferrer" class="footer__link-item">Sponsorship<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a href="https://www.apache.org/foundation/thanks.html" target="_blank" rel="noopener noreferrer" class="footer__link-item">Thanks<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div></div><div class="footer__bottom text--center"><div class="footer__copyright"><footer class="footer">
+to advanced ledgers, an entry id is required to pass in along with the entry data when adding an entry.</p><div class="language-java codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-java codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">long entryId = ...; // entry id generated externally</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">ledger.addEntry(entryId, &quot;Some entry data&quot;.getBytes());</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>If you are using the new API, you can do as following:</p><div class="language-java codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-java codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">WriteHandle wh = ...;</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">long entryId = ...; // entry id generated externally</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">wh.write(entryId, &quot;Some entry data&quot;.getBytes()).get();</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>A few notes when using this API:</p><ul><li>The entry id has to be non-negative.</li><li>Clients are okay to add entries out of order.</li><li>However, the entries are only acknowledged in a monotonic order starting from 0.</li></ul><h3 class="anchor anchorWithStickyNavbar_LWe7" id="read-entries">Read Entries<a href="#read-entries" class="hash-link" aria-label="Direct link to Read Entries" title="Direct link to Read Entries">​</a></h3><p>The read entries api in advanced ledgers remain same as <a href="/docs/api/ledger-api/#reading-entries-from-ledgers">normal ledgers</a>.</p></div></article><nav class="pagination-nav docusaurus-mt-lg" aria-label="Docs pages navigation"><a class="pagination-nav__link pagination-nav__link--prev" href="/docs/api/ledger-api"><div class="pagination-nav__sublabel">Previous</div><div class="pagination-nav__label">The Ledger API</div></a><a class="pagination-nav__link pagination-nav__link--next" href="/docs/api/distributedlog-api"><div class="pagination-nav__sublabel">Next</div><div class="pagination-nav__label">DistributedLog</div></a></nav></div></div><div class="col col--3"><div class="tableOfContents_bqdL thin-scrollbar theme-doc-toc-desktop"><ul class="table-of-contents table-of-contents__left-border"><li><a href="#ledgerhandleadv" class="table-of-contents__link toc-highlight">LedgerHandleAdv</a><ul><li><a href="#creating-advanced-ledgers" class="table-of-contents__link toc-highlight">Creating advanced ledgers</a></li><li><a href="#add-entries" class="table-of-contents__link toc-highlight">Add Entries</a></li><li><a href="#read-entries" class="table-of-contents__link toc-highlight">Read Entries</a></li></ul></li></ul></div></div></div></div></main></div></div><footer class="footer footer--dark"><div class="container container-fluid"><div class="row footer__links"><div class="col footer__col"><div class="footer__title">Documentation</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/docs/overview">Overview</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/getting-started/installation">Getting started</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/deployment/manual">Deployment</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/admin/bookies">Administration</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/api/overview">API</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/security/overview">Security</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/development/protocol">Development</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/reference/config">Reference</a></li></ul></div><div class="col footer__col"><div class="footer__title">Community</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/community/mailing-lists">Mailing lists</a></li><li class="footer__item"><a class="footer__link-item" href="/community/slack">Slack</a></li><li class="footer__item"><a href="https://github.com/apache/bookkeeper" target="_blank" rel="noopener noreferrer" class="footer__link-item">Github<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a href="https://twitter.com/asfbookkeeper" target="_blank" rel="noopener noreferrer" class="footer__link-item">Twitter<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div><div class="col footer__col"><div class="footer__title">Project</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/project/who">Who are we?</a></li><li class="footer__item"><a class="footer__link-item" href="/project/bylaws">Bylaws</a></li><li class="footer__item"><a href="https://apache.org/licenses" target="_blank" rel="noopener noreferrer" class="footer__link-item">License<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a class="footer__link-item" href="/project/privacy">Privacy policy</a></li><li class="footer__item"><a href="https://www.apache.org/foundation/sponsorship.html" target="_blank" rel="noopener noreferrer" class="footer__link-item">Sponsorship<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a href="https://www.apache.org/foundation/thanks.html" target="_blank" rel="noopener noreferrer" class="footer__link-item">Thanks<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div></div><div class="footer__bottom text--center"><div class="footer__copyright"><footer class="footer">
         <div class="container">
           <div class="content has-text-centered">
             <p>
@@ -27,7 +27,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/api/ledger-api/index.html b/content/docs/api/ledger-api/index.html
index 0b289f0..10031cc 100644
--- a/content/docs/api/ledger-api/index.html
+++ b/content/docs/api/ledger-api/index.html
@@ -4,12 +4,12 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">The Ledger API | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/api/ledger-api"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.17.0"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.17.0"><meta data-rh="true" name="docsearch:version" content="4.17.0"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.17.0"><meta data-rh="true" property="og:title" content="The Ledger API | Apache BookKeeper"><meta data-rh="true" name="description" content="The ledger API is a lower-level API for BookKeeper that enables you to interact with ledgers directly."><meta data-rh="true" property="og:description" content="The ledger API is a lower-level API for BookKeeper that enables you to interact with ledgers directly."><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/api/ledger-api"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/api/ledger-api" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/api/ledger-api" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
-<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navbar__brand" href="/"><div class="navbar__logo"><img src="/img/bk-logo.svg" alt="Apache Bookkeeper" class="themedImage_ToTc themedImage--light_HNdA"><img src="/img/bk-logo.svg" alt="Apache Bookkeeper" class="themedImage_ToTc themedImage--dark_i4oU"></div><b class="navbar__title text--truncate">Apache BookKeeper</b></a><a class="navbar__item navbar__link" href="/docs/overview/">Documentation</a><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Community</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/community/mailing-lists">Mailing lists</a></li><li><a class="dropdown__link" href="/community/slack">Slack</a></li><li><a href="https://github.com/apache/bookkeeper/issues" target="_blank" rel="noopener noreferrer" class="dropdown__link">Github issues<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a class="dropdown__link" href="/community/releases">Release management</a></li><li><a class="dropdown__link" href="/community/meeting">Community meetings</a></li><li><a class="dropdown__link" href="/community/contributing">Contribution guide</a></li><li><a class="dropdown__link" href="/community/coding-guide">Coding guide</a></li><li><a class="dropdown__link" href="/community/testing">Testing guide</a></li><li><a class="dropdown__link" href="/community/issue-report">Issue report guide</a></li><li><a class="dropdown__link" href="/community/release-guide">Release guide</a></li><li><a class="dropdown__link" href="/community/presentations">Presentations</a></li><li><a class="dropdown__link" href="/community/bookkeeper-proposals">BookKeeper proposals (BP)</a></li></ul></div><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Project</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/project/who">Who are we?</a></li><li><a class="dropdown__link" href="/project/bylaws">Bylaws</a></li><li><a href="https://apache.org/licenses" target="_blank" rel="noopener noreferrer" class="dropdown__link">License<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a class="dropdown__link" href="/project/privacy">Privacy policy</a></li><li><a href="https://www.apache.org/foundation/sponsorship.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Sponsorship<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a href="https://www.apache.org/foundation/thanks.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Thanks<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div></div><div class="navbar__items navbar__items--right"><div class="navbar__item dropdown dropdown--hoverable dropdown--right"><a class="navbar__link" aria-haspopup="true" aria-expanded="false" role="button" href="/docs/admin/autorecovery">4.17.0</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/docs/next/api/ledger-api">Next</a></li><li><a aria-current="page" class="dropdown__link dropdown__link--active" href="/docs/api/ledger-api">4.17.0</a></li><li><a class="dropdown__link" href="/docs/4.16.5/api/ledger-api">4.16.5</a></li><li><a class="dropdown__link" href="/docs/4.15.5/api/ledger-api">4.15.5</a></li><li><a class="dropdown__link" href="/docs/4.14.8/api/ledger-api">4.14.8</a></li><li><a class="dropdown__link" href="/docs/4.13.0/api/ledger-api">4.13.0</a></li><li><a class="dropdown__link" href="/docs/4.12.1/api/ledger-api">4.12.1</a></li><li><a class="dropdown__link" href="/docs/4.11.1/api/ledger-api">4.11.1</a></li><li><a class="dropdown__link" href="/docs/4.10.0/api/ledger-api">4.10.0</a></li><li><a class="dropdown__link" href="/docs/4.9.2/api/ledger-api">4.9.2</a></li><li><a class="dropdown__link" href="/docs/4.8.2/api/ledger-api">4.8.2</a></li><li><a class="dropdown__link" href="/docs/4.7.3/api/ledger-api">4.7.3</a></li><li><a class="dropdown__link" href="/docs/4.6.2/api/ledger-api">4.6.2</a></li><li><a class="dropdown__link" href="/docs/4.5.1/api/ledger-api">4.5.1</a></li></ul></div><a class="navbar__item navbar__link" href="/releases">Download</a><div class="toggle_vylO colorModeToggle_DEke"><button class="clean-btn toggleButton_gllP toggleButtonDisabled_aARS" type="button" disabled="" title="Switch between dark and light mode (currently light mode)" aria-label="Switch between dark and light mode (currently light mode)" aria-live="polite"><svg viewBox="0 0 24 24" width="24" height="24" class="lightToggleIcon_pyhR"><path fill="currentColor" d="M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"></path></svg><svg viewBox="0 0 24 24" width="24" height="24" class="darkToggleIcon_wfgR"><path fill="currentColor" d="M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"></path></svg></button></div><div class="searchBox_ZlJk"></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div></nav><div id="docusaurus_skipToContent_fallback" class="main-wrapper mainWrapper_z2l0 docsWrapper_BCFX"><button aria-label="Scroll back to top" class="clean-btn theme-back-to-top-button backToTopButton_sjWU" type="button"></button><div class="docPage__5DB"><main class="docMainContainer_gTbr docMainContainerEnhanced_Uz_u"><div class="container padding-top--md padding-bottom--lg"><div class="row"><div class="col docItemCol_VOVn"><div class="docItemContainer_Djhp"><article><span class="theme-doc-version-badge badge badge--secondary">Version: 4.17.0</span><div class="tocCollapsible_ETCw theme-doc-toc-mobile tocMobile_ITEo"><button type="button" class="clean-btn tocCollapsibleButton_TO0P">On this page</button></div><div class="theme-doc-markdown markdown"><header><h1>The Ledger API</h1></header><p>The ledger API is a lower-level API for BookKeeper that enables you to interact with ledgers directly.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="the-java-ledger-api-client">The Java ledger API client<a href="#the-java-ledger-api-client" class="hash-link" aria-label="Direct link to The Java ledger API client" title="Direct link to The Java ledger API client">​</a></h2><p>To get started with the Java client for BookKeeper, install the <code>bookkeeper-server</code> library as a dependency in your Java application.</p><blockquote><p>For a more in-depth tutorial that involves a real use case for BookKeeper, see the <a href="#example-application">Example application</a> guide.</p></blockquote><h2 class="anchor anchorWithStickyNavbar_LWe7" id="installation">Installation<a href="#installation" class="hash-link" aria-label="Direct link to Installation" title="Direct link to Installation">​</a></h2><p>The BookKeeper Java client library is available via <a href="http://search.maven.org/" target="_blank" rel="noopener noreferrer">Maven Central</a> and can be installed using <a href="#maven">Maven</a>, <a href="#gradle">Gradle</a>, and other build tools.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="maven">Maven<a href="#maven" class="hash-link" aria-label="Direct link to Maven" title="Direct link to Maven">​</a></h3><p>If you&#x27;re using <a href="https://maven.apache.org/" target="_blank" rel="noopener noreferrer">Maven</a>, add this to your <a href="https://maven.apache.org/guides/introduction/introduction-to-the-pom.html" target="_blank" rel="noopener noreferrer"><code>pom.xml</code></a> build configuration file:</p><div class="language-xml codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-xml codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token comment" style="color:#999988;font-style:italic">&lt;!-- in your &lt;properties&gt; block --&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">bookkeeper.version</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain">4.16.4</span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag" style="color:#00009f">bookkeeper.version</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic">&lt;!-- in your &lt;dependencies&gt; block --&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">dependency</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">groupId</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain">org.apache.bookkeeper</span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag" style="color:#00009f">groupId</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">artifactId</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain">bookkeeper-server</span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag" style="color:#00009f">artifactId</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">version</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain">${bookkeeper.version}</span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag" style="color:#00009f">version</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag" style="color:#00009f">dependency</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>BookKeeper uses google <a href="https://github.com/google/protobuf/tree/master/java" target="_blank" rel="noopener noreferrer">protobuf</a> and <a href="https://github.com/google/guava" target="_blank" rel="noopener noreferrer">guava</a> libraries
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navbar__brand" href="/"><div class="navbar__logo"><img src="/img/bk-logo.svg" alt="Apache Bookkeeper" class="themedImage_ToTc themedImage--light_HNdA"><img src="/img/bk-logo.svg" alt="Apache Bookkeeper" class="themedImage_ToTc themedImage--dark_i4oU"></div><b class="navbar__title text--truncate">Apache BookKeeper</b></a><a aria-current="page" class="navbar__item navbar__link navbar__link--active" href="/docs/overview/">Documentation</a><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Community</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/community/mailing-lists">Mailing lists</a></li><li><a class="dropdown__link" href="/community/slack">Slack</a></li><li><a href="https://github.com/apache/bookkeeper/issues" target="_blank" rel="noopener noreferrer" class="dropdown__link">Github issues<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a class="dropdown__link" href="/community/releases">Release management</a></li><li><a class="dropdown__link" href="/community/meeting">Community meetings</a></li><li><a class="dropdown__link" href="/community/contributing">Contribution guide</a></li><li><a class="dropdown__link" href="/community/coding-guide">Coding guide</a></li><li><a class="dropdown__link" href="/community/testing">Testing guide</a></li><li><a class="dropdown__link" href="/community/issue-report">Issue report guide</a></li><li><a class="dropdown__link" href="/community/release-guide">Release guide</a></li><li><a class="dropdown__link" href="/community/presentations">Presentations</a></li><li><a class="dropdown__link" href="/community/bookkeeper-proposals">BookKeeper proposals (BP)</a></li></ul></div><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Project</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/project/who">Who are we?</a></li><li><a class="dropdown__link" href="/project/bylaws">Bylaws</a></li><li><a href="https://apache.org/licenses" target="_blank" rel="noopener noreferrer" class="dropdown__link">License<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a class="dropdown__link" href="/project/privacy">Privacy policy</a></li><li><a href="https://www.apache.org/foundation/sponsorship.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Sponsorship<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a href="https://www.apache.org/foundation/thanks.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Thanks<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div></div><div class="navbar__items navbar__items--right"><div class="navbar__item dropdown dropdown--hoverable dropdown--right"><a class="navbar__link" aria-haspopup="true" aria-expanded="false" role="button" href="/docs/overview/">4.17.0</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/docs/next/api/ledger-api">Next</a></li><li><a aria-current="page" class="dropdown__link dropdown__link--active" href="/docs/api/ledger-api">4.17.0</a></li><li><a class="dropdown__link" href="/docs/4.16.5/api/ledger-api">4.16.5</a></li><li><a class="dropdown__link" href="/docs/4.15.5/api/ledger-api">4.15.5</a></li><li><a class="dropdown__link" href="/docs/4.14.8/api/ledger-api">4.14.8</a></li><li><a class="dropdown__link" href="/docs/4.13.0/api/ledger-api">4.13.0</a></li><li><a class="dropdown__link" href="/docs/4.12.1/api/ledger-api">4.12.1</a></li><li><a class="dropdown__link" href="/docs/4.11.1/api/ledger-api">4.11.1</a></li><li><a class="dropdown__link" href="/docs/4.10.0/api/ledger-api">4.10.0</a></li><li><a class="dropdown__link" href="/docs/4.9.2/api/ledger-api">4.9.2</a></li><li><a class="dropdown__link" href="/docs/4.8.2/api/ledger-api">4.8.2</a></li><li><a class="dropdown__link" href="/docs/4.7.3/api/ledger-api">4.7.3</a></li><li><a class="dropdown__link" href="/docs/4.6.2/api/ledger-api">4.6.2</a></li><li><a class="dropdown__link" href="/docs/4.5.1/api/ledger-api">4.5.1</a></li></ul></div><a class="navbar__item navbar__link" href="/releases">Download</a><div class="toggle_vylO colorModeToggle_DEke"><button class="clean-btn toggleButton_gllP toggleButtonDisabled_aARS" type="button" disabled="" title="Switch between dark and light mode (currently light mode)" aria-label="Switch between dark and light mode (currently light mode)" aria-live="polite"><svg viewBox="0 0 24 24" width="24" height="24" class="lightToggleIcon_pyhR"><path fill="currentColor" d="M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"></path></svg><svg viewBox="0 0 24 24" width="24" height="24" class="darkToggleIcon_wfgR"><path fill="currentColor" d="M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"></path></svg></button></div><div class="searchBox_ZlJk"></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div></nav><div id="docusaurus_skipToContent_fallback" class="main-wrapper mainWrapper_z2l0 docsWrapper_BCFX"><button aria-label="Scroll back to top" class="clean-btn theme-back-to-top-button backToTopButton_sjWU" type="button"></button><div class="docPage__5DB"><aside class="theme-doc-sidebar-container docSidebarContainer_b6E3"><div class="sidebarViewport_Xe31"><div class="sidebar_njMd"><nav aria-label="Docs sidebar" class="menu thin-scrollbar menu_SIkG"><ul class="theme-doc-sidebar-menu menu__list"><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-1 menu__list-item"><a class="menu__link" href="/docs/overview/">Overview</a></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/getting-started/installation">Getting started</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/deployment/manual">Deployment</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/admin/bookies">Administration</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret menu__link--active" aria-expanded="true" href="/docs/api/overview">API</a></div><ul style="display:block;overflow:visible;height:auto" class="menu__list"><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/api/overview">Overview</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link menu__link--active" aria-current="page" tabindex="0" href="/docs/api/ledger-api">Ledger API</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/api/ledger-adv-api">Advanced Ledger API</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/api/distributedlog-api">DistributedLog</a></li></ul></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/security/overview">Security</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/development/protocol">Development</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/reference/config">Reference</a></div></li></ul></nav></div></div></aside><main class="docMainContainer_gTbr"><div class="container padding-top--md padding-bottom--lg"><div class="row"><div class="col docItemCol_VOVn"><div class="docItemContainer_Djhp"><article><span class="theme-doc-version-badge badge badge--secondary">Version: 4.17.0</span><div class="tocCollapsible_ETCw theme-doc-toc-mobile tocMobile_ITEo"><button type="button" class="clean-btn tocCollapsibleButton_TO0P">On this page</button></div><div class="theme-doc-markdown markdown"><header><h1>The Ledger API</h1></header><p>The ledger API is a lower-level API for BookKeeper that enables you to interact with ledgers directly.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="the-java-ledger-api-client">The Java ledger API client<a href="#the-java-ledger-api-client" class="hash-link" aria-label="Direct link to The Java ledger API client" title="Direct link to The Java ledger API client">​</a></h2><p>To get started with the Java client for BookKeeper, install the <code>bookkeeper-server</code> library as a dependency in your Java application.</p><blockquote><p>For a more in-depth tutorial that involves a real use case for BookKeeper, see the <a href="#example-application">Example application</a> guide.</p></blockquote><h2 class="anchor anchorWithStickyNavbar_LWe7" id="installation">Installation<a href="#installation" class="hash-link" aria-label="Direct link to Installation" title="Direct link to Installation">​</a></h2><p>The BookKeeper Java client library is available via <a href="http://search.maven.org/" target="_blank" rel="noopener noreferrer">Maven Central</a> and can be installed using <a href="#maven">Maven</a>, <a href="#gradle">Gradle</a>, and other build tools.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="maven">Maven<a href="#maven" class="hash-link" aria-label="Direct link to Maven" title="Direct link to Maven">​</a></h3><p>If you&#x27;re using <a href="https://maven.apache.org/" target="_blank" rel="noopener noreferrer">Maven</a>, add this to your <a href="https://maven.apache.org/guides/introduction/introduction-to-the-pom.html" target="_blank" rel="noopener noreferrer"><code>pom.xml</code></a> build configuration file:</p><div class="language-xml codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-xml codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token comment" style="color:#999988;font-style:italic">&lt;!-- in your &lt;properties&gt; block --&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">bookkeeper.version</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain">4.16.4</span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag" style="color:#00009f">bookkeeper.version</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic">&lt;!-- in your &lt;dependencies&gt; block --&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">dependency</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">groupId</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain">org.apache.bookkeeper</span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag" style="color:#00009f">groupId</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">artifactId</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain">bookkeeper-server</span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag" style="color:#00009f">artifactId</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">version</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain">${bookkeeper.version}</span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag" style="color:#00009f">version</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag" style="color:#00009f">dependency</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>BookKeeper uses google <a href="https://github.com/google/protobuf/tree/master/java" target="_blank" rel="noopener noreferrer">protobuf</a> and <a href="https://github.com/google/guava" target="_blank" rel="noopener noreferrer">guava</a> libraries
 a lot. If your application might include different versions of protobuf or guava introduced by other dependencies, you can choose to use the
 shaded library, which relocate classes of protobuf and guava into a different namespace to avoid conflicts.</p><div class="language-xml codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-xml codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token comment" style="color:#999988;font-style:italic">&lt;!-- in your &lt;properties&gt; block --&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">bookkeeper.version</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain">4.16.4</span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag" style="color:#00009f">bookkeeper.version</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic">&lt;!-- in your &lt;dependencies&gt; block --&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">dependency</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">groupId</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain">org.apache.bookkeeper</span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag" style="color:#00009f">groupId</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">artifactId</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain">bookkeeper-server-shaded</span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag" style="color:#00009f">artifactId</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">version</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain">${bookkeeper.version}</span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag" style="color:#00009f">version</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag" style="color:#00009f">dependency</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><h3 class="anchor anchorWithStickyNavbar_LWe7" id="gradle">Gradle<a href="#gradle" class="hash-link" aria-label="Direct link to Gradle" title="Direct link to Gradle">​</a></h3><p>If you&#x27;re using <a href="https://gradle.org/" target="_blank" rel="noopener noreferrer">Gradle</a>, add this to your <a href="https://spring.io/guides/gs/gradle/" target="_blank" rel="noopener noreferrer"><code>build.gradle</code></a> build configuration file:</p><div class="language-groovy codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-groovy codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">dependencies {</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    compile group: &#x27;org.apache.bookkeeper&#x27;, name: &#x27;bookkeeper-server&#x27;, version: &#x27;4.16.4&#x27;</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">}</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">// Alternatively:</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">dependencies {</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    compile &#x27;org.apache.bookkeeper:bookkeeper-server:4.16.4&#x27;</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">}</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>Similarly as using maven, you can also configure to use the shaded jars.</p><div class="language-groovy codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-groovy codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">// use the `bookkeeper-server-shaded` jar</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">dependencies {</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    compile &#x27;org.apache.bookkeeper:bookkeeper-server-shaded:{{ site.latest-version }}&#x27;</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">}</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><h2 class="anchor anchorWithStickyNavbar_LWe7" id="connection-string">Connection string<a href="#connection-string" class="hash-link" aria-label="Direct link to Connection string" title="Direct link to Connection string">​</a></h2><p>When interacting with BookKeeper using the Java client, you need to provide your client with a connection string, for which you have three options:</p><ul><li>Provide your entire ZooKeeper connection string, for example <code>zk1:2181,zk2:2181,zk3:2181</code>.</li><li>Provide a host and port for one node in your ZooKeeper cluster, for example <code>zk1:2181</code>. In general, it&#x27;s better to provide a full connection string (in case the ZooKeeper node you attempt to connect to is down).</li><li>If your ZooKeeper cluster can be discovered via DNS, you can provide the DNS name, for example <code>my-zookeeper-cluster.com</code>.</li></ul><h2 class="anchor anchorWithStickyNavbar_LWe7" id="creating-a-new-client">Creating a new client<a href="#creating-a-new-client" class="hash-link" aria-label="Direct link to Creating a new client" title="Direct link to Creating a new client">​</a></h2><p>In order to create a new <a href="https://bookkeeper.apache.org//docs/latest/api/javadoc/org/apache/bookkeeper/client/BookKeeper" target="_blank" rel="noopener noreferrer"><code>BookKeeper</code></a> client object, you need to pass in a <a href="#connection-string">connection string</a>. Here is an example client object using a ZooKeeper connection string:</p><div class="language-java codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-java codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">try {</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    String connectionString = &quot;127.0.0.1:2181&quot;; // For a single-node, local ZooKeeper cluster</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    BookKeeper bkClient = new BookKeeper(connectionString);</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">} catch (InterruptedException | IOException | KeeperException e) {</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    e.printStackTrace();</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">}</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><blockquote><p>If you&#x27;re running BookKeeper <a href="/docs/getting-started/run-locally">locally</a>, using the <a href="/docs/reference/cli#bookkeeper-localbookie"><code>localbookie</code></a> command, use <code>&quot;127.0.0.1:2181&quot;</code> for your connection string, as in the example above.</p></blockquote><p>There are, however, other ways that you can create a client object:</p><ul><li><p>By passing in a <a href="https://bookkeeper.apache.org//docs/latest/api/javadoc/org/apache/bookkeeper/conf/ClientConfiguration" target="_blank" rel="noopener noreferrer"><code>ClientConfiguration</code></a> object. Here&#x27;s an example:</p><div class="language-java codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-java codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">ClientConfiguration config = new ClientConfiguration();</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">config.setZkServers(zkConnectionString);</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">config.setAddEntryTimeout(2000);</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">BookKeeper bkClient = new BookKeeper(config);</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div></li><li><p>By specifying a <code>ClientConfiguration</code> and a <a href="http://zookeeper.apache.org/doc/current/api/org/apache/zookeeper/ZooKeeper.html" target="_blank" rel="noopener noreferrer"><code>ZooKeeper</code></a> client object:</p><div class="language-java codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-java codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">ClientConfiguration config = new ClientConfiguration();</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">config.setAddEntryTimeout(5000);</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">ZooKeeper zkClient = new ZooKeeper(/* client args */);</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">BookKeeper bkClient = new BookKeeper(config, zkClient);</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div></li><li><p>Using the <code>forConfig</code> method:</p><div class="language-java codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-java codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">BookKeeper bkClient = BookKeeper.forConfig(conf).build();</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div></li></ul><h2 class="anchor anchorWithStickyNavbar_LWe7" id="creating-ledgers">Creating ledgers<a href="#creating-ledgers" class="hash-link" aria-label="Direct link to Creating ledgers" title="Direct link to Creating ledgers">​</a></h2><p>The easiest way to create a ledger using the Java client is via the <code>createLedger</code> method, which creates a new ledger synchronously and returns a <a href="https://bookkeeper.apache.org//docs/latest/api/javadoc/org/apache/bookkeeper/client/LedgerHandle" target="_blank" rel="noopener noreferrer"><code>LedgerHandle</code></a>. You must specify at least a <a href="https://bookkeeper.apache.org//docs/latest/api/javadoc/org/apache/bookkeeper/client/BookKeeper.DigestType" target="_blank" rel="noopener noreferrer"><code>DigestType</code></a> and a password.</p><p>Here&#x27;s an example:</p><div class="language-java codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-java codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">byte[] password = &quot;some-password&quot;.getBytes();</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">LedgerHandle handle = bkClient.createLedger(BookKeeper.DigestType.MAC, password);</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>You can also create ledgers asynchronously</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="create-ledgers-asynchronously">Create ledgers asynchronously<a href="#create-ledgers-asynchronously" class="hash-link" aria-label="Direct link to Create ledgers asynchronously" title="Direct link to Create ledgers asynchronously">​</a></h3><div class="language-java codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-java codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">class LedgerCreationCallback implements AsyncCallback.CreateCallback {</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    public void createComplete(int returnCode, LedgerHandle handle, Object ctx) {</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        System.out.println(&quot;Ledger successfully created&quot;);</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    }</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">}</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">client.asyncCreateLedger(</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        3,</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        2,</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        BookKeeper.DigestType.MAC,</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        password,</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        new LedgerCreationCallback(),</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        &quot;some context&quot;</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">);</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><h2 class="anchor anchorWithStickyNavbar_LWe7" id="adding-entries-to-ledgers">Adding entries to ledgers<a href="#adding-entries-to-ledgers" class="hash-link" aria-label="Direct link to Adding entries to ledgers" title="Direct link to Adding entries to ledgers">​</a></h2><div class="language-java codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-java codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">long entryId = ledger.addEntry(&quot;Some entry data&quot;.getBytes());</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><h3 class="anchor anchorWithStickyNavbar_LWe7" id="add-entries-asynchronously">Add entries asynchronously<a href="#add-entries-asynchronously" class="hash-link" aria-label="Direct link to Add entries asynchronously" title="Direct link to Add entries asynchronously">​</a></h3><h2 class="anchor anchorWithStickyNavbar_LWe7" id="reading-entries-from-ledgers">Reading entries from ledgers<a href="#reading-entries-from-ledgers" class="hash-link" aria-label="Direct link to Reading entries from ledgers" title="Direct link to Reading entries from ledgers">​</a></h2><div class="language-java codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-java codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">Enumerator&lt;LedgerEntry&gt; entries = handle.readEntries(1, 99);</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>To read all possible entries from the ledger:</p><div class="language-java codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-java codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">Enumerator&lt;LedgerEntry&gt; entries =</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  handle.readEntries(0, handle.getLastAddConfirmed());</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">while (entries.hasNextElement()) {</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    LedgerEntry entry = entries.nextElement();</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    System.out.println(&quot;Successfully read entry &quot; + entry.getId());</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">}</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><h3 class="anchor anchorWithStickyNavbar_LWe7" id="reading-entries-after-the-lastaddconfirmed-range">Reading entries after the LastAddConfirmed range<a href="#reading-entries-after-the-lastaddconfirmed-range" class="hash-link" aria-label="Direct link to Reading entries after the LastAddConfirmed range" title="Direct link to Reading entries after the LastAddConfirmed range">​</a></h3><p><code>readUnconfirmedEntries</code> allowing to read after the LastAddConfirmed range.
 It lets the client read without checking the local value of LastAddConfirmed, so that it is possible to read entries for which the writer has not received the acknowledge yet.
@@ -33,7 +33,7 @@
 Such entries will be still readable using readUnconfirmed() API, but they won&#x27;t be readable using Long Poll reads or regular read() API.</p><p>In order to get guarantees of durability the writer must use explicitly the <a href="https://bookkeeper.apache.org//docs/latest/api/javadoc/org/apache/bookkeeper/client/api/ForceableHandle" target="_blank" rel="noopener noreferrer">force()</a> API which will return only after all the bookies in the ensemble acknowledge the call after
 performing an fsync to the disk which is storing the journal.
 This way the LastAddConfirmed pointer is advanced on the writer side and it will be eventually available to the readers.</p><p>The <em>close()</em> operation on the writer writes on ledger&#x27;s metadata the current LastAddConfirmed pointer, <strong>it is up to the application to call force() before issuing the close command</strong>.
-In case that you never call explicitly <a href="https://bookkeeper.apache.org//docs/latest/api/javadoc/org/apache/bookkeeper/client/api/ForceableHandle" target="_blank" rel="noopener noreferrer">force()</a> the LastAddConfirmed will remain unset (-1) on ledger metadata and regular readers won&#x27;t be able to access data.</p><div class="language-java codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-java codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">BookKeeper bk = ...;</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">long ledgerId = ...;</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">WriteHandle wh = bk.newCreateLedgerOp()</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    .withDigestType(DigestType.CRC32)</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    .withPassword(password)</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    .withEnsembleSize(3)</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    .withWriteQuorumSize(3)</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    .withAckQuorumSize(2)</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    .withWriteFlags(DEFERRED_SYNC)</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    .execute()          // execute the creation op</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    .get();             // wait for the execution to complete</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">wh.force().get();  // wait for fsync, make data available to readers and to the replicator</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">wh.close(); // seal the ledger</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div></div></article><nav class="pagination-nav docusaurus-mt-lg" aria-label="Docs pages navigation"></nav></div></div><div class="col col--3"><div class="tableOfContents_bqdL thin-scrollbar theme-doc-toc-desktop"><ul class="table-of-contents table-of-contents__left-border"><li><a href="#the-java-ledger-api-client" class="table-of-contents__link toc-highlight">The Java ledger API client</a></li><li><a href="#installation" class="table-of-contents__link toc-highlight">Installation</a><ul><li><a href="#maven" class="table-of-contents__link toc-highlight">Maven</a></li><li><a href="#gradle" class="table-of-contents__link toc-highlight">Gradle</a></li></ul></li><li><a href="#connection-string" class="table-of-contents__link toc-highlight">Connection string</a></li><li><a href="#creating-a-new-client" class="table-of-contents__link toc-highlight">Creating a new client</a></li><li><a href="#creating-ledgers" class="table-of-contents__link toc-highlight">Creating ledgers</a><ul><li><a href="#create-ledgers-asynchronously" class="table-of-contents__link toc-highlight">Create ledgers asynchronously</a></li></ul></li><li><a href="#adding-entries-to-ledgers" class="table-of-contents__link toc-highlight">Adding entries to ledgers</a><ul><li><a href="#add-entries-asynchronously" class="table-of-contents__link toc-highlight">Add entries asynchronously</a></li></ul></li><li><a href="#reading-entries-from-ledgers" class="table-of-contents__link toc-highlight">Reading entries from ledgers</a><ul><li><a href="#reading-entries-after-the-lastaddconfirmed-range" class="table-of-contents__link toc-highlight">Reading entries after the LastAddConfirmed range</a></li></ul></li><li><a href="#deleting-ledgers" class="table-of-contents__link toc-highlight">Deleting ledgers</a><ul><li><a href="#delete-ledgers-asynchronously" class="table-of-contents__link toc-highlight">Delete ledgers asynchronously</a></li></ul></li><li><a href="#simple-example" class="table-of-contents__link toc-highlight">Simple example</a></li><li><a href="#example-application" class="table-of-contents__link toc-highlight">Example application</a><ul><li><a href="#setup" class="table-of-contents__link toc-highlight">Setup</a></li><li><a href="#goal" class="table-of-contents__link toc-highlight">Goal</a></li><li><a href="#the-base-application" class="table-of-contents__link toc-highlight">The base application</a></li><li><a href="#leaders-and-followers-and-a-bit-of-background" class="table-of-contents__link toc-highlight">Leaders and followers (and a bit of background)</a></li><li><a href="#why-not-just-use-zookeeper" class="table-of-contents__link toc-highlight">Why not just use ZooKeeper?</a></li><li><a href="#electing-a-leader" class="table-of-contents__link toc-highlight">Electing a leader</a></li></ul></li><li><a href="#new-api" class="table-of-contents__link toc-highlight">New API</a><ul><li><a href="#create-a-new-client" class="table-of-contents__link toc-highlight">Create a new client</a></li><li><a href="#create-ledgers" class="table-of-contents__link toc-highlight">Create ledgers</a></li><li><a href="#write-flags" class="table-of-contents__link toc-highlight">Write flags</a></li><li><a href="#append-entries-to-ledgers" class="table-of-contents__link toc-highlight">Append entries to ledgers</a></li><li><a href="#open-ledgers" class="table-of-contents__link toc-highlight">Open ledgers</a></li><li><a href="#read-entries-from-ledgers" class="table-of-contents__link toc-highlight">Read entries from ledgers</a></li><li><a href="#read-unconfirmed-entries-from-ledgers" class="table-of-contents__link toc-highlight">Read unconfirmed entries from ledgers</a></li><li><a href="#tailing-reads" class="table-of-contents__link toc-highlight">Tailing Reads</a></li><li><a href="#delete-ledgers" class="table-of-contents__link toc-highlight">Delete ledgers</a></li><li><a href="#relaxing-durability" class="table-of-contents__link toc-highlight">Relaxing Durability</a></li></ul></li></ul></div></div></div></div></main></div></div><footer class="footer footer--dark"><div class="container container-fluid"><div class="row footer__links"><div class="col footer__col"><div class="footer__title">Documentation</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/docs/overview">Overview</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/getting-started/installation">Getting started</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/deployment/manual">Deployment</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/admin/bookies">Administration</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/api/overview">API</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/security/overview">Security</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/development/protocol">Development</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/reference/config">Reference</a></li></ul></div><div class="col footer__col"><div class="footer__title">Community</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/community/mailing-lists">Mailing lists</a></li><li class="footer__item"><a class="footer__link-item" href="/community/slack">Slack</a></li><li class="footer__item"><a href="https://github.com/apache/bookkeeper" target="_blank" rel="noopener noreferrer" class="footer__link-item">Github<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a href="https://twitter.com/asfbookkeeper" target="_blank" rel="noopener noreferrer" class="footer__link-item">Twitter<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div><div class="col footer__col"><div class="footer__title">Project</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/project/who">Who are we?</a></li><li class="footer__item"><a class="footer__link-item" href="/project/bylaws">Bylaws</a></li><li class="footer__item"><a href="https://apache.org/licenses" target="_blank" rel="noopener noreferrer" class="footer__link-item">License<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a class="footer__link-item" href="/project/privacy">Privacy policy</a></li><li class="footer__item"><a href="https://www.apache.org/foundation/sponsorship.html" target="_blank" rel="noopener noreferrer" class="footer__link-item">Sponsorship<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a href="https://www.apache.org/foundation/thanks.html" target="_blank" rel="noopener noreferrer" class="footer__link-item">Thanks<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div></div><div class="footer__bottom text--center"><div class="footer__copyright"><footer class="footer">
+In case that you never call explicitly <a href="https://bookkeeper.apache.org//docs/latest/api/javadoc/org/apache/bookkeeper/client/api/ForceableHandle" target="_blank" rel="noopener noreferrer">force()</a> the LastAddConfirmed will remain unset (-1) on ledger metadata and regular readers won&#x27;t be able to access data.</p><div class="language-java codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-java codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">BookKeeper bk = ...;</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">long ledgerId = ...;</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">WriteHandle wh = bk.newCreateLedgerOp()</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    .withDigestType(DigestType.CRC32)</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    .withPassword(password)</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    .withEnsembleSize(3)</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    .withWriteQuorumSize(3)</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    .withAckQuorumSize(2)</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    .withWriteFlags(DEFERRED_SYNC)</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    .execute()          // execute the creation op</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    .get();             // wait for the execution to complete</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">wh.force().get();  // wait for fsync, make data available to readers and to the replicator</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">wh.close(); // seal the ledger</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div></div></article><nav class="pagination-nav docusaurus-mt-lg" aria-label="Docs pages navigation"><a class="pagination-nav__link pagination-nav__link--prev" href="/docs/api/overview"><div class="pagination-nav__sublabel">Previous</div><div class="pagination-nav__label">BookKeeper API</div></a><a class="pagination-nav__link pagination-nav__link--next" href="/docs/api/ledger-adv-api"><div class="pagination-nav__sublabel">Next</div><div class="pagination-nav__label">The Advanced Ledger API</div></a></nav></div></div><div class="col col--3"><div class="tableOfContents_bqdL thin-scrollbar theme-doc-toc-desktop"><ul class="table-of-contents table-of-contents__left-border"><li><a href="#the-java-ledger-api-client" class="table-of-contents__link toc-highlight">The Java ledger API client</a></li><li><a href="#installation" class="table-of-contents__link toc-highlight">Installation</a><ul><li><a href="#maven" class="table-of-contents__link toc-highlight">Maven</a></li><li><a href="#gradle" class="table-of-contents__link toc-highlight">Gradle</a></li></ul></li><li><a href="#connection-string" class="table-of-contents__link toc-highlight">Connection string</a></li><li><a href="#creating-a-new-client" class="table-of-contents__link toc-highlight">Creating a new client</a></li><li><a href="#creating-ledgers" class="table-of-contents__link toc-highlight">Creating ledgers</a><ul><li><a href="#create-ledgers-asynchronously" class="table-of-contents__link toc-highlight">Create ledgers asynchronously</a></li></ul></li><li><a href="#adding-entries-to-ledgers" class="table-of-contents__link toc-highlight">Adding entries to ledgers</a><ul><li><a href="#add-entries-asynchronously" class="table-of-contents__link toc-highlight">Add entries asynchronously</a></li></ul></li><li><a href="#reading-entries-from-ledgers" class="table-of-contents__link toc-highlight">Reading entries from ledgers</a><ul><li><a href="#reading-entries-after-the-lastaddconfirmed-range" class="table-of-contents__link toc-highlight">Reading entries after the LastAddConfirmed range</a></li></ul></li><li><a href="#deleting-ledgers" class="table-of-contents__link toc-highlight">Deleting ledgers</a><ul><li><a href="#delete-ledgers-asynchronously" class="table-of-contents__link toc-highlight">Delete ledgers asynchronously</a></li></ul></li><li><a href="#simple-example" class="table-of-contents__link toc-highlight">Simple example</a></li><li><a href="#example-application" class="table-of-contents__link toc-highlight">Example application</a><ul><li><a href="#setup" class="table-of-contents__link toc-highlight">Setup</a></li><li><a href="#goal" class="table-of-contents__link toc-highlight">Goal</a></li><li><a href="#the-base-application" class="table-of-contents__link toc-highlight">The base application</a></li><li><a href="#leaders-and-followers-and-a-bit-of-background" class="table-of-contents__link toc-highlight">Leaders and followers (and a bit of background)</a></li><li><a href="#why-not-just-use-zookeeper" class="table-of-contents__link toc-highlight">Why not just use ZooKeeper?</a></li><li><a href="#electing-a-leader" class="table-of-contents__link toc-highlight">Electing a leader</a></li></ul></li><li><a href="#new-api" class="table-of-contents__link toc-highlight">New API</a><ul><li><a href="#create-a-new-client" class="table-of-contents__link toc-highlight">Create a new client</a></li><li><a href="#create-ledgers" class="table-of-contents__link toc-highlight">Create ledgers</a></li><li><a href="#write-flags" class="table-of-contents__link toc-highlight">Write flags</a></li><li><a href="#append-entries-to-ledgers" class="table-of-contents__link toc-highlight">Append entries to ledgers</a></li><li><a href="#open-ledgers" class="table-of-contents__link toc-highlight">Open ledgers</a></li><li><a href="#read-entries-from-ledgers" class="table-of-contents__link toc-highlight">Read entries from ledgers</a></li><li><a href="#read-unconfirmed-entries-from-ledgers" class="table-of-contents__link toc-highlight">Read unconfirmed entries from ledgers</a></li><li><a href="#tailing-reads" class="table-of-contents__link toc-highlight">Tailing Reads</a></li><li><a href="#delete-ledgers" class="table-of-contents__link toc-highlight">Delete ledgers</a></li><li><a href="#relaxing-durability" class="table-of-contents__link toc-highlight">Relaxing Durability</a></li></ul></li></ul></div></div></div></div></main></div></div><footer class="footer footer--dark"><div class="container container-fluid"><div class="row footer__links"><div class="col footer__col"><div class="footer__title">Documentation</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/docs/overview">Overview</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/getting-started/installation">Getting started</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/deployment/manual">Deployment</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/admin/bookies">Administration</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/api/overview">API</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/security/overview">Security</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/development/protocol">Development</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/reference/config">Reference</a></li></ul></div><div class="col footer__col"><div class="footer__title">Community</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/community/mailing-lists">Mailing lists</a></li><li class="footer__item"><a class="footer__link-item" href="/community/slack">Slack</a></li><li class="footer__item"><a href="https://github.com/apache/bookkeeper" target="_blank" rel="noopener noreferrer" class="footer__link-item">Github<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a href="https://twitter.com/asfbookkeeper" target="_blank" rel="noopener noreferrer" class="footer__link-item">Twitter<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div><div class="col footer__col"><div class="footer__title">Project</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/project/who">Who are we?</a></li><li class="footer__item"><a class="footer__link-item" href="/project/bylaws">Bylaws</a></li><li class="footer__item"><a href="https://apache.org/licenses" target="_blank" rel="noopener noreferrer" class="footer__link-item">License<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a class="footer__link-item" href="/project/privacy">Privacy policy</a></li><li class="footer__item"><a href="https://www.apache.org/foundation/sponsorship.html" target="_blank" rel="noopener noreferrer" class="footer__link-item">Sponsorship<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a href="https://www.apache.org/foundation/thanks.html" target="_blank" rel="noopener noreferrer" class="footer__link-item">Thanks<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div></div><div class="footer__bottom text--center"><div class="footer__copyright"><footer class="footer">
         <div class="container">
           <div class="content has-text-centered">
             <p>
@@ -46,7 +46,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/api/overview/index.html b/content/docs/api/overview/index.html
index a5f6a6b..98242eb 100644
--- a/content/docs/api/overview/index.html
+++ b/content/docs/api/overview/index.html
@@ -4,14 +4,14 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">BookKeeper API | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/api/overview"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.17.0"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.17.0"><meta data-rh="true" name="docsearch:version" content="4.17.0"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.17.0"><meta data-rh="true" property="og:title" content="BookKeeper API | Apache BookKeeper"><meta data-rh="true" name="description" content="BookKeeper offers a few APIs that applications can use to interact with it:"><meta data-rh="true" property="og:description" content="BookKeeper offers a few APIs that applications can use to interact with it:"><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/api/overview"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/api/overview" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/api/overview" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
-<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navbar__brand" href="/"><div class="navbar__logo"><img src="/img/bk-logo.svg" alt="Apache Bookkeeper" class="themedImage_ToTc themedImage--light_HNdA"><img src="/img/bk-logo.svg" alt="Apache Bookkeeper" class="themedImage_ToTc themedImage--dark_i4oU"></div><b class="navbar__title text--truncate">Apache BookKeeper</b></a><a class="navbar__item navbar__link" href="/docs/overview/">Documentation</a><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Community</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/community/mailing-lists">Mailing lists</a></li><li><a class="dropdown__link" href="/community/slack">Slack</a></li><li><a href="https://github.com/apache/bookkeeper/issues" target="_blank" rel="noopener noreferrer" class="dropdown__link">Github issues<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a class="dropdown__link" href="/community/releases">Release management</a></li><li><a class="dropdown__link" href="/community/meeting">Community meetings</a></li><li><a class="dropdown__link" href="/community/contributing">Contribution guide</a></li><li><a class="dropdown__link" href="/community/coding-guide">Coding guide</a></li><li><a class="dropdown__link" href="/community/testing">Testing guide</a></li><li><a class="dropdown__link" href="/community/issue-report">Issue report guide</a></li><li><a class="dropdown__link" href="/community/release-guide">Release guide</a></li><li><a class="dropdown__link" href="/community/presentations">Presentations</a></li><li><a class="dropdown__link" href="/community/bookkeeper-proposals">BookKeeper proposals (BP)</a></li></ul></div><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Project</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/project/who">Who are we?</a></li><li><a class="dropdown__link" href="/project/bylaws">Bylaws</a></li><li><a href="https://apache.org/licenses" target="_blank" rel="noopener noreferrer" class="dropdown__link">License<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a class="dropdown__link" href="/project/privacy">Privacy policy</a></li><li><a href="https://www.apache.org/foundation/sponsorship.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Sponsorship<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a href="https://www.apache.org/foundation/thanks.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Thanks<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div></div><div class="navbar__items navbar__items--right"><div class="navbar__item dropdown dropdown--hoverable dropdown--right"><a class="navbar__link" aria-haspopup="true" aria-expanded="false" role="button" href="/docs/admin/autorecovery">4.17.0</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/docs/next/api/overview">Next</a></li><li><a aria-current="page" class="dropdown__link dropdown__link--active" href="/docs/api/overview">4.17.0</a></li><li><a class="dropdown__link" href="/docs/4.16.5/api/overview">4.16.5</a></li><li><a class="dropdown__link" href="/docs/4.15.5/api/overview">4.15.5</a></li><li><a class="dropdown__link" href="/docs/4.14.8/api/overview">4.14.8</a></li><li><a class="dropdown__link" href="/docs/4.13.0/api/overview">4.13.0</a></li><li><a class="dropdown__link" href="/docs/4.12.1/api/overview">4.12.1</a></li><li><a class="dropdown__link" href="/docs/4.11.1/api/overview">4.11.1</a></li><li><a class="dropdown__link" href="/docs/4.10.0/api/overview">4.10.0</a></li><li><a class="dropdown__link" href="/docs/4.9.2/api/overview">4.9.2</a></li><li><a class="dropdown__link" href="/docs/4.8.2/api/overview">4.8.2</a></li><li><a class="dropdown__link" href="/docs/4.7.3/api/overview">4.7.3</a></li><li><a class="dropdown__link" href="/docs/4.6.2/api/overview">4.6.2</a></li><li><a class="dropdown__link" href="/docs/4.5.1/api/overview">4.5.1</a></li></ul></div><a class="navbar__item navbar__link" href="/releases">Download</a><div class="toggle_vylO colorModeToggle_DEke"><button class="clean-btn toggleButton_gllP toggleButtonDisabled_aARS" type="button" disabled="" title="Switch between dark and light mode (currently light mode)" aria-label="Switch between dark and light mode (currently light mode)" aria-live="polite"><svg viewBox="0 0 24 24" width="24" height="24" class="lightToggleIcon_pyhR"><path fill="currentColor" d="M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"></path></svg><svg viewBox="0 0 24 24" width="24" height="24" class="darkToggleIcon_wfgR"><path fill="currentColor" d="M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"></path></svg></button></div><div class="searchBox_ZlJk"></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div></nav><div id="docusaurus_skipToContent_fallback" class="main-wrapper mainWrapper_z2l0 docsWrapper_BCFX"><button aria-label="Scroll back to top" class="clean-btn theme-back-to-top-button backToTopButton_sjWU" type="button"></button><div class="docPage__5DB"><main class="docMainContainer_gTbr docMainContainerEnhanced_Uz_u"><div class="container padding-top--md padding-bottom--lg"><div class="row"><div class="col docItemCol_VOVn"><div class="docItemContainer_Djhp"><article><span class="theme-doc-version-badge badge badge--secondary">Version: 4.17.0</span><div class="tocCollapsible_ETCw theme-doc-toc-mobile tocMobile_ITEo"><button type="button" class="clean-btn tocCollapsibleButton_TO0P">On this page</button></div><div class="theme-doc-markdown markdown"><header><h1>BookKeeper API</h1></header><p>BookKeeper offers a few APIs that applications can use to interact with it:</p><ul><li>The <a href="/docs/api/ledger-api">ledger API</a> is a lower-level API that enables you to interact with ledgers directly</li><li>The <a href="/docs/api/ledger-adv-api">Ledger Advanced API</a> is an advanced extension to <a href="/docs/api/ledger-api">Ledger API</a> to provide more flexibilities to applications.</li><li>The <a href="/docs/api/distributedlog-api">DistributedLog API</a> is a higher-level API that provides convenient abstractions.</li></ul><h2 class="anchor anchorWithStickyNavbar_LWe7" id="trade-offs">Trade-offs<a href="#trade-offs" class="hash-link" aria-label="Direct link to Trade-offs" title="Direct link to Trade-offs">​</a></h2><p>The <code>Ledger API</code> provides direct access to ledgers and thus enables you to use BookKeeper however you&#x27;d like.</p><p>However, in most of use cases, if you want a <code>log stream</code>-like abstraction, it requires you to manage things like tracking list of ledgers,
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navbar__brand" href="/"><div class="navbar__logo"><img src="/img/bk-logo.svg" alt="Apache Bookkeeper" class="themedImage_ToTc themedImage--light_HNdA"><img src="/img/bk-logo.svg" alt="Apache Bookkeeper" class="themedImage_ToTc themedImage--dark_i4oU"></div><b class="navbar__title text--truncate">Apache BookKeeper</b></a><a aria-current="page" class="navbar__item navbar__link navbar__link--active" href="/docs/overview/">Documentation</a><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Community</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/community/mailing-lists">Mailing lists</a></li><li><a class="dropdown__link" href="/community/slack">Slack</a></li><li><a href="https://github.com/apache/bookkeeper/issues" target="_blank" rel="noopener noreferrer" class="dropdown__link">Github issues<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a class="dropdown__link" href="/community/releases">Release management</a></li><li><a class="dropdown__link" href="/community/meeting">Community meetings</a></li><li><a class="dropdown__link" href="/community/contributing">Contribution guide</a></li><li><a class="dropdown__link" href="/community/coding-guide">Coding guide</a></li><li><a class="dropdown__link" href="/community/testing">Testing guide</a></li><li><a class="dropdown__link" href="/community/issue-report">Issue report guide</a></li><li><a class="dropdown__link" href="/community/release-guide">Release guide</a></li><li><a class="dropdown__link" href="/community/presentations">Presentations</a></li><li><a class="dropdown__link" href="/community/bookkeeper-proposals">BookKeeper proposals (BP)</a></li></ul></div><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Project</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/project/who">Who are we?</a></li><li><a class="dropdown__link" href="/project/bylaws">Bylaws</a></li><li><a href="https://apache.org/licenses" target="_blank" rel="noopener noreferrer" class="dropdown__link">License<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a class="dropdown__link" href="/project/privacy">Privacy policy</a></li><li><a href="https://www.apache.org/foundation/sponsorship.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Sponsorship<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a href="https://www.apache.org/foundation/thanks.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Thanks<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div></div><div class="navbar__items navbar__items--right"><div class="navbar__item dropdown dropdown--hoverable dropdown--right"><a class="navbar__link" aria-haspopup="true" aria-expanded="false" role="button" href="/docs/overview/">4.17.0</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/docs/next/api/overview">Next</a></li><li><a aria-current="page" class="dropdown__link dropdown__link--active" href="/docs/api/overview">4.17.0</a></li><li><a class="dropdown__link" href="/docs/4.16.5/api/overview">4.16.5</a></li><li><a class="dropdown__link" href="/docs/4.15.5/api/overview">4.15.5</a></li><li><a class="dropdown__link" href="/docs/4.14.8/api/overview">4.14.8</a></li><li><a class="dropdown__link" href="/docs/4.13.0/api/overview">4.13.0</a></li><li><a class="dropdown__link" href="/docs/4.12.1/api/overview">4.12.1</a></li><li><a class="dropdown__link" href="/docs/4.11.1/api/overview">4.11.1</a></li><li><a class="dropdown__link" href="/docs/4.10.0/api/overview">4.10.0</a></li><li><a class="dropdown__link" href="/docs/4.9.2/api/overview">4.9.2</a></li><li><a class="dropdown__link" href="/docs/4.8.2/api/overview">4.8.2</a></li><li><a class="dropdown__link" href="/docs/4.7.3/api/overview">4.7.3</a></li><li><a class="dropdown__link" href="/docs/4.6.2/api/overview">4.6.2</a></li><li><a class="dropdown__link" href="/docs/4.5.1/api/overview">4.5.1</a></li></ul></div><a class="navbar__item navbar__link" href="/releases">Download</a><div class="toggle_vylO colorModeToggle_DEke"><button class="clean-btn toggleButton_gllP toggleButtonDisabled_aARS" type="button" disabled="" title="Switch between dark and light mode (currently light mode)" aria-label="Switch between dark and light mode (currently light mode)" aria-live="polite"><svg viewBox="0 0 24 24" width="24" height="24" class="lightToggleIcon_pyhR"><path fill="currentColor" d="M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"></path></svg><svg viewBox="0 0 24 24" width="24" height="24" class="darkToggleIcon_wfgR"><path fill="currentColor" d="M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"></path></svg></button></div><div class="searchBox_ZlJk"></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div></nav><div id="docusaurus_skipToContent_fallback" class="main-wrapper mainWrapper_z2l0 docsWrapper_BCFX"><button aria-label="Scroll back to top" class="clean-btn theme-back-to-top-button backToTopButton_sjWU" type="button"></button><div class="docPage__5DB"><aside class="theme-doc-sidebar-container docSidebarContainer_b6E3"><div class="sidebarViewport_Xe31"><div class="sidebar_njMd"><nav aria-label="Docs sidebar" class="menu thin-scrollbar menu_SIkG"><ul class="theme-doc-sidebar-menu menu__list"><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-1 menu__list-item"><a class="menu__link" href="/docs/overview/">Overview</a></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/getting-started/installation">Getting started</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/deployment/manual">Deployment</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/admin/bookies">Administration</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret menu__link--active" aria-expanded="true" href="/docs/api/overview">API</a></div><ul style="display:block;overflow:visible;height:auto" class="menu__list"><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link menu__link--active" aria-current="page" tabindex="0" href="/docs/api/overview">Overview</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/api/ledger-api">Ledger API</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/api/ledger-adv-api">Advanced Ledger API</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/api/distributedlog-api">DistributedLog</a></li></ul></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/security/overview">Security</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/development/protocol">Development</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/reference/config">Reference</a></div></li></ul></nav></div></div></aside><main class="docMainContainer_gTbr"><div class="container padding-top--md padding-bottom--lg"><div class="row"><div class="col docItemCol_VOVn"><div class="docItemContainer_Djhp"><article><span class="theme-doc-version-badge badge badge--secondary">Version: 4.17.0</span><div class="tocCollapsible_ETCw theme-doc-toc-mobile tocMobile_ITEo"><button type="button" class="clean-btn tocCollapsibleButton_TO0P">On this page</button></div><div class="theme-doc-markdown markdown"><header><h1>BookKeeper API</h1></header><p>BookKeeper offers a few APIs that applications can use to interact with it:</p><ul><li>The <a href="/docs/api/ledger-api">ledger API</a> is a lower-level API that enables you to interact with ledgers directly</li><li>The <a href="/docs/api/ledger-adv-api">Ledger Advanced API</a> is an advanced extension to <a href="/docs/api/ledger-api">Ledger API</a> to provide more flexibilities to applications.</li><li>The <a href="/docs/api/distributedlog-api">DistributedLog API</a> is a higher-level API that provides convenient abstractions.</li></ul><h2 class="anchor anchorWithStickyNavbar_LWe7" id="trade-offs">Trade-offs<a href="#trade-offs" class="hash-link" aria-label="Direct link to Trade-offs" title="Direct link to Trade-offs">​</a></h2><p>The <code>Ledger API</code> provides direct access to ledgers and thus enables you to use BookKeeper however you&#x27;d like.</p><p>However, in most of use cases, if you want a <code>log stream</code>-like abstraction, it requires you to manage things like tracking list of ledgers,
 managing rolling ledgers and data retention on your own. In such cases, you are recommended to use <a href="/docs/api/distributedlog-api">DistributedLog API</a>,
-with semantics resembling continous log streams from the standpoint of applications.</p></div></article><nav class="pagination-nav docusaurus-mt-lg" aria-label="Docs pages navigation"></nav></div></div><div class="col col--3"><div class="tableOfContents_bqdL thin-scrollbar theme-doc-toc-desktop"><ul class="table-of-contents table-of-contents__left-border"><li><a href="#trade-offs" class="table-of-contents__link toc-highlight">Trade-offs</a></li></ul></div></div></div></div></main></div></div><footer class="footer footer--dark"><div class="container container-fluid"><div class="row footer__links"><div class="col footer__col"><div class="footer__title">Documentation</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/docs/overview">Overview</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/getting-started/installation">Getting started</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/deployment/manual">Deployment</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/admin/bookies">Administration</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/api/overview">API</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/security/overview">Security</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/development/protocol">Development</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/reference/config">Reference</a></li></ul></div><div class="col footer__col"><div class="footer__title">Community</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/community/mailing-lists">Mailing lists</a></li><li class="footer__item"><a class="footer__link-item" href="/community/slack">Slack</a></li><li class="footer__item"><a href="https://github.com/apache/bookkeeper" target="_blank" rel="noopener noreferrer" class="footer__link-item">Github<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a href="https://twitter.com/asfbookkeeper" target="_blank" rel="noopener noreferrer" class="footer__link-item">Twitter<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div><div class="col footer__col"><div class="footer__title">Project</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/project/who">Who are we?</a></li><li class="footer__item"><a class="footer__link-item" href="/project/bylaws">Bylaws</a></li><li class="footer__item"><a href="https://apache.org/licenses" target="_blank" rel="noopener noreferrer" class="footer__link-item">License<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a class="footer__link-item" href="/project/privacy">Privacy policy</a></li><li class="footer__item"><a href="https://www.apache.org/foundation/sponsorship.html" target="_blank" rel="noopener noreferrer" class="footer__link-item">Sponsorship<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a href="https://www.apache.org/foundation/thanks.html" target="_blank" rel="noopener noreferrer" class="footer__link-item">Thanks<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div></div><div class="footer__bottom text--center"><div class="footer__copyright"><footer class="footer">
+with semantics resembling continous log streams from the standpoint of applications.</p></div></article><nav class="pagination-nav docusaurus-mt-lg" aria-label="Docs pages navigation"><a class="pagination-nav__link pagination-nav__link--prev" href="/docs/admin/decomission"><div class="pagination-nav__sublabel">Previous</div><div class="pagination-nav__label">Decommission Bookies</div></a><a class="pagination-nav__link pagination-nav__link--next" href="/docs/api/ledger-api"><div class="pagination-nav__sublabel">Next</div><div class="pagination-nav__label">The Ledger API</div></a></nav></div></div><div class="col col--3"><div class="tableOfContents_bqdL thin-scrollbar theme-doc-toc-desktop"><ul class="table-of-contents table-of-contents__left-border"><li><a href="#trade-offs" class="table-of-contents__link toc-highlight">Trade-offs</a></li></ul></div></div></div></div></main></div></div><footer class="footer footer--dark"><div class="container container-fluid"><div class="row footer__links"><div class="col footer__col"><div class="footer__title">Documentation</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/docs/overview">Overview</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/getting-started/installation">Getting started</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/deployment/manual">Deployment</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/admin/bookies">Administration</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/api/overview">API</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/security/overview">Security</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/development/protocol">Development</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/reference/config">Reference</a></li></ul></div><div class="col footer__col"><div class="footer__title">Community</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/community/mailing-lists">Mailing lists</a></li><li class="footer__item"><a class="footer__link-item" href="/community/slack">Slack</a></li><li class="footer__item"><a href="https://github.com/apache/bookkeeper" target="_blank" rel="noopener noreferrer" class="footer__link-item">Github<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a href="https://twitter.com/asfbookkeeper" target="_blank" rel="noopener noreferrer" class="footer__link-item">Twitter<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div><div class="col footer__col"><div class="footer__title">Project</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/project/who">Who are we?</a></li><li class="footer__item"><a class="footer__link-item" href="/project/bylaws">Bylaws</a></li><li class="footer__item"><a href="https://apache.org/licenses" target="_blank" rel="noopener noreferrer" class="footer__link-item">License<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a class="footer__link-item" href="/project/privacy">Privacy policy</a></li><li class="footer__item"><a href="https://www.apache.org/foundation/sponsorship.html" target="_blank" rel="noopener noreferrer" class="footer__link-item">Sponsorship<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a href="https://www.apache.org/foundation/thanks.html" target="_blank" rel="noopener noreferrer" class="footer__link-item">Thanks<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div></div><div class="footer__bottom text--center"><div class="footer__copyright"><footer class="footer">
         <div class="container">
           <div class="content has-text-centered">
             <p>
@@ -24,7 +24,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/deployment/kubernetes/index.html b/content/docs/deployment/kubernetes/index.html
index d268316..6ead448 100644
--- a/content/docs/deployment/kubernetes/index.html
+++ b/content/docs/deployment/kubernetes/index.html
@@ -4,19 +4,19 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">Deploying Apache BookKeeper on Kubernetes | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/deployment/kubernetes"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.17.0"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.17.0"><meta data-rh="true" name="docsearch:version" content="4.17.0"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.17.0"><meta data-rh="true" property="og:title" content="Deploying Apache BookKeeper on Kubernetes | Apache BookKeeper"><meta data-rh="true" name="description" content="Apache BookKeeper can be easily deployed in Kubernetes clusters. The managed clusters on Google Container Engine is the most convenient way."><meta data-rh="true" property="og:description" content="Apache BookKeeper can be easily deployed in Kubernetes clusters. The managed clusters on Google Container Engine is the most convenient way."><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/deployment/kubernetes"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/deployment/kubernetes" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/deployment/kubernetes" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
-<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navbar__brand" href="/"><div class="navbar__logo"><img src="/img/bk-logo.svg" alt="Apache Bookkeeper" class="themedImage_ToTc themedImage--light_HNdA"><img src="/img/bk-logo.svg" alt="Apache Bookkeeper" class="themedImage_ToTc themedImage--dark_i4oU"></div><b class="navbar__title text--truncate">Apache BookKeeper</b></a><a class="navbar__item navbar__link" href="/docs/overview/">Documentation</a><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Community</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/community/mailing-lists">Mailing lists</a></li><li><a class="dropdown__link" href="/community/slack">Slack</a></li><li><a href="https://github.com/apache/bookkeeper/issues" target="_blank" rel="noopener noreferrer" class="dropdown__link">Github issues<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a class="dropdown__link" href="/community/releases">Release management</a></li><li><a class="dropdown__link" href="/community/meeting">Community meetings</a></li><li><a class="dropdown__link" href="/community/contributing">Contribution guide</a></li><li><a class="dropdown__link" href="/community/coding-guide">Coding guide</a></li><li><a class="dropdown__link" href="/community/testing">Testing guide</a></li><li><a class="dropdown__link" href="/community/issue-report">Issue report guide</a></li><li><a class="dropdown__link" href="/community/release-guide">Release guide</a></li><li><a class="dropdown__link" href="/community/presentations">Presentations</a></li><li><a class="dropdown__link" href="/community/bookkeeper-proposals">BookKeeper proposals (BP)</a></li></ul></div><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Project</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/project/who">Who are we?</a></li><li><a class="dropdown__link" href="/project/bylaws">Bylaws</a></li><li><a href="https://apache.org/licenses" target="_blank" rel="noopener noreferrer" class="dropdown__link">License<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a class="dropdown__link" href="/project/privacy">Privacy policy</a></li><li><a href="https://www.apache.org/foundation/sponsorship.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Sponsorship<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a href="https://www.apache.org/foundation/thanks.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Thanks<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div></div><div class="navbar__items navbar__items--right"><div class="navbar__item dropdown dropdown--hoverable dropdown--right"><a class="navbar__link" aria-haspopup="true" aria-expanded="false" role="button" href="/docs/admin/autorecovery">4.17.0</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/docs/next/deployment/kubernetes">Next</a></li><li><a aria-current="page" class="dropdown__link dropdown__link--active" href="/docs/deployment/kubernetes">4.17.0</a></li><li><a class="dropdown__link" href="/docs/4.16.5/deployment/kubernetes">4.16.5</a></li><li><a class="dropdown__link" href="/docs/4.15.5/deployment/kubernetes">4.15.5</a></li><li><a class="dropdown__link" href="/docs/4.14.8/deployment/kubernetes">4.14.8</a></li><li><a class="dropdown__link" href="/docs/4.13.0/deployment/kubernetes">4.13.0</a></li><li><a class="dropdown__link" href="/docs/4.12.1/deployment/kubernetes">4.12.1</a></li><li><a class="dropdown__link" href="/docs/4.11.1/deployment/kubernetes">4.11.1</a></li><li><a class="dropdown__link" href="/docs/4.10.0/deployment/kubernetes">4.10.0</a></li><li><a class="dropdown__link" href="/docs/4.9.2/deployment/kubernetes">4.9.2</a></li><li><a class="dropdown__link" href="/docs/4.8.2/deployment/kubernetes">4.8.2</a></li><li><a class="dropdown__link" href="/docs/4.7.3/deployment/kubernetes">4.7.3</a></li><li><a class="dropdown__link" href="/docs/4.6.2/deployment/kubernetes">4.6.2</a></li><li><a class="dropdown__link" href="/docs/4.5.1/deployment/kubernetes">4.5.1</a></li></ul></div><a class="navbar__item navbar__link" href="/releases">Download</a><div class="toggle_vylO colorModeToggle_DEke"><button class="clean-btn toggleButton_gllP toggleButtonDisabled_aARS" type="button" disabled="" title="Switch between dark and light mode (currently light mode)" aria-label="Switch between dark and light mode (currently light mode)" aria-live="polite"><svg viewBox="0 0 24 24" width="24" height="24" class="lightToggleIcon_pyhR"><path fill="currentColor" d="M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"></path></svg><svg viewBox="0 0 24 24" width="24" height="24" class="darkToggleIcon_wfgR"><path fill="currentColor" d="M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"></path></svg></button></div><div class="searchBox_ZlJk"></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div></nav><div id="docusaurus_skipToContent_fallback" class="main-wrapper mainWrapper_z2l0 docsWrapper_BCFX"><button aria-label="Scroll back to top" class="clean-btn theme-back-to-top-button backToTopButton_sjWU" type="button"></button><div class="docPage__5DB"><main class="docMainContainer_gTbr docMainContainerEnhanced_Uz_u"><div class="container padding-top--md padding-bottom--lg"><div class="row"><div class="col docItemCol_VOVn"><div class="docItemContainer_Djhp"><article><span class="theme-doc-version-badge badge badge--secondary">Version: 4.17.0</span><div class="tocCollapsible_ETCw theme-doc-toc-mobile tocMobile_ITEo"><button type="button" class="clean-btn tocCollapsibleButton_TO0P">On this page</button></div><div class="theme-doc-markdown markdown"><header><h1>Deploying Apache BookKeeper on Kubernetes</h1></header><p>Apache BookKeeper can be easily deployed in <a href="https://kubernetes.io/" target="_blank" rel="noopener noreferrer">Kubernetes</a> clusters. The managed clusters on <a href="https://cloud.google.com/compute/" target="_blank" rel="noopener noreferrer">Google Container Engine</a> is the most convenient way.</p><p>The deployment method shown in this guide relies on <a href="http://yaml.org/" target="_blank" rel="noopener noreferrer">YAML</a> definitions for Kubernetes <a href="https://kubernetes.io/docs/resources-reference/v1.6/" target="_blank" rel="noopener noreferrer">resources</a>. The <a href="https://github.com/apache/bookkeeper/tree/master/deploy/kubernetes" target="_blank" rel="noopener noreferrer"><code>kubernetes</code></a> subdirectory holds resource definitions for:</p><ul><li>A three-node ZooKeeper cluster</li><li>A BookKeeper cluster with a bookie runs on each node.</li></ul><h2 class="anchor anchorWithStickyNavbar_LWe7" id="setup-on-google-container-engine">Setup on Google Container Engine<a href="#setup-on-google-container-engine" class="hash-link" aria-label="Direct link to Setup on Google Container Engine" title="Direct link to Setup on Google Container Engine">​</a></h2><p>To get started, get source code of <a href="https://github.com/apache/bookkeeper/tree/master/deploy/kubernetes" target="_blank" rel="noopener noreferrer"><code>kubernetes</code></a> from github by git clone.</p><p>If you&#x27;d like to change the number of bookies,  or ZooKeeper nodes in your BookKeeper cluster, modify the <code>replicas</code> parameter in the <code>spec</code> section of the appropriate <a href="https://kubernetes.io/docs/concepts/workloads/controllers/deployment/" target="_blank" rel="noopener noreferrer"><code>Deployment</code></a> or <a href="https://kubernetes.io/docs/concepts/workloads/controllers/statefulset/" target="_blank" rel="noopener noreferrer"><code>StatefulSet</code></a> resource.</p><p><a href="https://cloud.google.com/container-engine" target="_blank" rel="noopener noreferrer">Google Container Engine</a> (GKE) automates the creation and management of Kubernetes clusters in <a href="https://cloud.google.com/compute/" target="_blank" rel="noopener noreferrer">Google Compute Engine</a> (GCE).</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="prerequisites">Prerequisites<a href="#prerequisites" class="hash-link" aria-label="Direct link to Prerequisites" title="Direct link to Prerequisites">​</a></h3><p>To get started, you&#x27;ll need:</p><ul><li>A Google Cloud Platform account, which you can sign up for at <a href="https://cloud.google.com" target="_blank" rel="noopener noreferrer">cloud.google.com</a></li><li>An existing Cloud Platform project</li><li>The <a href="https://cloud.google.com/sdk/downloads" target="_blank" rel="noopener noreferrer">Google Cloud SDK</a> (in particular the <a href="https://cloud.google.com/sdk/gcloud/" target="_blank" rel="noopener noreferrer"><code>gcloud</code></a> and <a href="https://kubernetes.io/docs/tasks/tools/" target="_blank" rel="noopener noreferrer"><code>kubectl</code></a> tools).</li></ul><h3 class="anchor anchorWithStickyNavbar_LWe7" id="create-a-new-kubernetes-cluster">Create a new Kubernetes cluster<a href="#create-a-new-kubernetes-cluster" class="hash-link" aria-label="Direct link to Create a new Kubernetes cluster" title="Direct link to Create a new Kubernetes cluster">​</a></h3><p>You can create a new GKE cluster using the <a href="https://cloud.google.com/sdk/gcloud/reference/container/clusters/create" target="_blank" rel="noopener noreferrer"><code>container clusters create</code></a> command for <code>gcloud</code>. This command enables you to specify the number of nodes in the cluster, the machine types of those nodes, and more.</p><p>As an example, we&#x27;ll create a new GKE cluster for Kubernetes version <a href="https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG.md#v164" target="_blank" rel="noopener noreferrer">1.6.4</a> in the <a href="https://cloud.google.com/compute/docs/regions-zones/regions-zones#available" target="_blank" rel="noopener noreferrer">us-central1-a</a> zone. The cluster will be named <code>bookkeeper-gke-cluster</code> and will consist of three VMs, each using two locally attached SSDs and running on <a href="https://cloud.google.com/compute/docs/machine-types" target="_blank" rel="noopener noreferrer">n1-standard-8</a> machines. These SSDs will be used by Bookie instances, one for the BookKeeper journal and the other for storing the actual data.</p><div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">$ gcloud config </span><span class="token builtin class-name">set</span><span class="token plain"> compute/zone us-central1-a</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">$ gcloud config </span><span class="token builtin class-name">set</span><span class="token plain"> project your-project-name</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">$ gcloud container clusters create bookkeeper-gke-cluster </span><span class="token punctuation" style="color:#393A34">\</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  --machine-type</span><span class="token operator" style="color:#393A34">=</span><span class="token plain">n1-standard-8 </span><span class="token punctuation" style="color:#393A34">\</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  --num-nodes</span><span class="token operator" style="color:#393A34">=</span><span class="token number" style="color:#36acaa">3</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">\</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  --local-ssd-count</span><span class="token operator" style="color:#393A34">=</span><span class="token number" style="color:#36acaa">2</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">\</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  --enable-kubernetes-alpha</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>By default, bookies will run on all the machines that have locally attached SSD disks. In this example, all of those machines will have two SSDs, but you can add different types of machines to the cluster later. You can control which machines host bookie servers using <a href="https://kubernetes.io/docs/concepts/overview/working-with-objects/labels" target="_blank" rel="noopener noreferrer">labels</a>.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="dashboard">Dashboard<a href="#dashboard" class="hash-link" aria-label="Direct link to Dashboard" title="Direct link to Dashboard">​</a></h3><p>You can observe your cluster in the <a href="https://kubernetes.io/docs/tasks/access-application-cluster/web-ui-dashboard/" target="_blank" rel="noopener noreferrer">Kubernetes Dashboard</a> by downloading the credentials for your Kubernetes cluster and opening up a proxy to the cluster:</p><div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">$ gcloud container clusters get-credentials bookkeeper-gke-cluster </span><span class="token punctuation" style="color:#393A34">\</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  --zone</span><span class="token operator" style="color:#393A34">=</span><span class="token plain">us-central1-a </span><span class="token punctuation" style="color:#393A34">\</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  --project</span><span class="token operator" style="color:#393A34">=</span><span class="token plain">your-project-name</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">$ kubectl proxy</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>By default, the proxy will be opened on port 8001. Now you can navigate to <a href="http://localhost:8001/ui" target="_blank" rel="noopener noreferrer">localhost:8001/ui</a> in your browser to access the dashboard. At first your GKE cluster will be empty, but that will change as you begin deploying.</p><p>When you create a cluster, your <code>kubectl</code> config in <code>~/.kube/config</code> (on MacOS and Linux) will be updated for you, so you probably won&#x27;t need to change your configuration. Nonetheless, you can ensure that <code>kubectl</code> can interact with your cluster by listing the nodes in the cluster:</p><div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">$ kubectl get nodes</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>If <code>kubectl</code> is working with your cluster, you can proceed to deploy ZooKeeper and Bookies.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="zookeeper">ZooKeeper<a href="#zookeeper" class="hash-link" aria-label="Direct link to ZooKeeper" title="Direct link to ZooKeeper">​</a></h3><p>You <em>must</em> deploy ZooKeeper as the first component, as it is a dependency for the others.</p><div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">$ kubectl apply -f zookeeper.yaml</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>Wait until all three ZooKeeper server pods are up and have the status <code>Running</code>. You can check on the status of the ZooKeeper pods at any time:</p><div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">$ kubectl get pods -l </span><span class="token assign-left variable" style="color:#36acaa">component</span><span class="token operator" style="color:#393A34">=</span><span class="token plain">zookeeper</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">NAME      READY     STATUS             RESTARTS   AGE</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">zk-0      </span><span class="token number" style="color:#36acaa">1</span><span class="token plain">/1       Running            </span><span class="token number" style="color:#36acaa">0</span><span class="token plain">          18m</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">zk-1      </span><span class="token number" style="color:#36acaa">1</span><span class="token plain">/1       Running            </span><span class="token number" style="color:#36acaa">0</span><span class="token plain">          17m</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">zk-2      </span><span class="token number" style="color:#36acaa">0</span><span class="token plain">/1       Running            </span><span class="token number" style="color:#36acaa">6</span><span class="token plain">          15m</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>This step may take several minutes, as Kubernetes needs to download the Docker image on the VMs.</p><p>If you want to connect to one of the remote zookeeper server, you can use<a href="https://github.com/rgs1/zk_shell" target="_blank" rel="noopener noreferrer">zk-shell</a>, you need to forward a local port to the
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navbar__brand" href="/"><div class="navbar__logo"><img src="/img/bk-logo.svg" alt="Apache Bookkeeper" class="themedImage_ToTc themedImage--light_HNdA"><img src="/img/bk-logo.svg" alt="Apache Bookkeeper" class="themedImage_ToTc themedImage--dark_i4oU"></div><b class="navbar__title text--truncate">Apache BookKeeper</b></a><a aria-current="page" class="navbar__item navbar__link navbar__link--active" href="/docs/overview/">Documentation</a><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Community</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/community/mailing-lists">Mailing lists</a></li><li><a class="dropdown__link" href="/community/slack">Slack</a></li><li><a href="https://github.com/apache/bookkeeper/issues" target="_blank" rel="noopener noreferrer" class="dropdown__link">Github issues<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a class="dropdown__link" href="/community/releases">Release management</a></li><li><a class="dropdown__link" href="/community/meeting">Community meetings</a></li><li><a class="dropdown__link" href="/community/contributing">Contribution guide</a></li><li><a class="dropdown__link" href="/community/coding-guide">Coding guide</a></li><li><a class="dropdown__link" href="/community/testing">Testing guide</a></li><li><a class="dropdown__link" href="/community/issue-report">Issue report guide</a></li><li><a class="dropdown__link" href="/community/release-guide">Release guide</a></li><li><a class="dropdown__link" href="/community/presentations">Presentations</a></li><li><a class="dropdown__link" href="/community/bookkeeper-proposals">BookKeeper proposals (BP)</a></li></ul></div><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Project</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/project/who">Who are we?</a></li><li><a class="dropdown__link" href="/project/bylaws">Bylaws</a></li><li><a href="https://apache.org/licenses" target="_blank" rel="noopener noreferrer" class="dropdown__link">License<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a class="dropdown__link" href="/project/privacy">Privacy policy</a></li><li><a href="https://www.apache.org/foundation/sponsorship.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Sponsorship<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a href="https://www.apache.org/foundation/thanks.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Thanks<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div></div><div class="navbar__items navbar__items--right"><div class="navbar__item dropdown dropdown--hoverable dropdown--right"><a class="navbar__link" aria-haspopup="true" aria-expanded="false" role="button" href="/docs/overview/">4.17.0</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/docs/next/deployment/kubernetes">Next</a></li><li><a aria-current="page" class="dropdown__link dropdown__link--active" href="/docs/deployment/kubernetes">4.17.0</a></li><li><a class="dropdown__link" href="/docs/4.16.5/deployment/kubernetes">4.16.5</a></li><li><a class="dropdown__link" href="/docs/4.15.5/deployment/kubernetes">4.15.5</a></li><li><a class="dropdown__link" href="/docs/4.14.8/deployment/kubernetes">4.14.8</a></li><li><a class="dropdown__link" href="/docs/4.13.0/deployment/kubernetes">4.13.0</a></li><li><a class="dropdown__link" href="/docs/4.12.1/deployment/kubernetes">4.12.1</a></li><li><a class="dropdown__link" href="/docs/4.11.1/deployment/kubernetes">4.11.1</a></li><li><a class="dropdown__link" href="/docs/4.10.0/deployment/kubernetes">4.10.0</a></li><li><a class="dropdown__link" href="/docs/4.9.2/deployment/kubernetes">4.9.2</a></li><li><a class="dropdown__link" href="/docs/4.8.2/deployment/kubernetes">4.8.2</a></li><li><a class="dropdown__link" href="/docs/4.7.3/deployment/kubernetes">4.7.3</a></li><li><a class="dropdown__link" href="/docs/4.6.2/deployment/kubernetes">4.6.2</a></li><li><a class="dropdown__link" href="/docs/4.5.1/deployment/kubernetes">4.5.1</a></li></ul></div><a class="navbar__item navbar__link" href="/releases">Download</a><div class="toggle_vylO colorModeToggle_DEke"><button class="clean-btn toggleButton_gllP toggleButtonDisabled_aARS" type="button" disabled="" title="Switch between dark and light mode (currently light mode)" aria-label="Switch between dark and light mode (currently light mode)" aria-live="polite"><svg viewBox="0 0 24 24" width="24" height="24" class="lightToggleIcon_pyhR"><path fill="currentColor" d="M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"></path></svg><svg viewBox="0 0 24 24" width="24" height="24" class="darkToggleIcon_wfgR"><path fill="currentColor" d="M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"></path></svg></button></div><div class="searchBox_ZlJk"></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div></nav><div id="docusaurus_skipToContent_fallback" class="main-wrapper mainWrapper_z2l0 docsWrapper_BCFX"><button aria-label="Scroll back to top" class="clean-btn theme-back-to-top-button backToTopButton_sjWU" type="button"></button><div class="docPage__5DB"><aside class="theme-doc-sidebar-container docSidebarContainer_b6E3"><div class="sidebarViewport_Xe31"><div class="sidebar_njMd"><nav aria-label="Docs sidebar" class="menu thin-scrollbar menu_SIkG"><ul class="theme-doc-sidebar-menu menu__list"><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-1 menu__list-item"><a class="menu__link" href="/docs/overview/">Overview</a></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/getting-started/installation">Getting started</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret menu__link--active" aria-expanded="true" href="/docs/deployment/manual">Deployment</a></div><ul style="display:block;overflow:visible;height:auto" class="menu__list"><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/deployment/manual">Manual deployment</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link menu__link--active" aria-current="page" tabindex="0" href="/docs/deployment/kubernetes">BookKeeper on Kubernetes</a></li></ul></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/admin/bookies">Administration</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/api/overview">API</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/security/overview">Security</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/development/protocol">Development</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/reference/config">Reference</a></div></li></ul></nav></div></div></aside><main class="docMainContainer_gTbr"><div class="container padding-top--md padding-bottom--lg"><div class="row"><div class="col docItemCol_VOVn"><div class="docItemContainer_Djhp"><article><span class="theme-doc-version-badge badge badge--secondary">Version: 4.17.0</span><div class="tocCollapsible_ETCw theme-doc-toc-mobile tocMobile_ITEo"><button type="button" class="clean-btn tocCollapsibleButton_TO0P">On this page</button></div><div class="theme-doc-markdown markdown"><header><h1>Deploying Apache BookKeeper on Kubernetes</h1></header><p>Apache BookKeeper can be easily deployed in <a href="https://kubernetes.io/" target="_blank" rel="noopener noreferrer">Kubernetes</a> clusters. The managed clusters on <a href="https://cloud.google.com/compute/" target="_blank" rel="noopener noreferrer">Google Container Engine</a> is the most convenient way.</p><p>The deployment method shown in this guide relies on <a href="http://yaml.org/" target="_blank" rel="noopener noreferrer">YAML</a> definitions for Kubernetes <a href="https://kubernetes.io/docs/resources-reference/v1.6/" target="_blank" rel="noopener noreferrer">resources</a>. The <a href="https://github.com/apache/bookkeeper/tree/master/deploy/kubernetes" target="_blank" rel="noopener noreferrer"><code>kubernetes</code></a> subdirectory holds resource definitions for:</p><ul><li>A three-node ZooKeeper cluster</li><li>A BookKeeper cluster with a bookie runs on each node.</li></ul><h2 class="anchor anchorWithStickyNavbar_LWe7" id="setup-on-google-container-engine">Setup on Google Container Engine<a href="#setup-on-google-container-engine" class="hash-link" aria-label="Direct link to Setup on Google Container Engine" title="Direct link to Setup on Google Container Engine">​</a></h2><p>To get started, get source code of <a href="https://github.com/apache/bookkeeper/tree/master/deploy/kubernetes" target="_blank" rel="noopener noreferrer"><code>kubernetes</code></a> from github by git clone.</p><p>If you&#x27;d like to change the number of bookies,  or ZooKeeper nodes in your BookKeeper cluster, modify the <code>replicas</code> parameter in the <code>spec</code> section of the appropriate <a href="https://kubernetes.io/docs/concepts/workloads/controllers/deployment/" target="_blank" rel="noopener noreferrer"><code>Deployment</code></a> or <a href="https://kubernetes.io/docs/concepts/workloads/controllers/statefulset/" target="_blank" rel="noopener noreferrer"><code>StatefulSet</code></a> resource.</p><p><a href="https://cloud.google.com/container-engine" target="_blank" rel="noopener noreferrer">Google Container Engine</a> (GKE) automates the creation and management of Kubernetes clusters in <a href="https://cloud.google.com/compute/" target="_blank" rel="noopener noreferrer">Google Compute Engine</a> (GCE).</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="prerequisites">Prerequisites<a href="#prerequisites" class="hash-link" aria-label="Direct link to Prerequisites" title="Direct link to Prerequisites">​</a></h3><p>To get started, you&#x27;ll need:</p><ul><li>A Google Cloud Platform account, which you can sign up for at <a href="https://cloud.google.com" target="_blank" rel="noopener noreferrer">cloud.google.com</a></li><li>An existing Cloud Platform project</li><li>The <a href="https://cloud.google.com/sdk/downloads" target="_blank" rel="noopener noreferrer">Google Cloud SDK</a> (in particular the <a href="https://cloud.google.com/sdk/gcloud/" target="_blank" rel="noopener noreferrer"><code>gcloud</code></a> and <a href="https://kubernetes.io/docs/tasks/tools/" target="_blank" rel="noopener noreferrer"><code>kubectl</code></a> tools).</li></ul><h3 class="anchor anchorWithStickyNavbar_LWe7" id="create-a-new-kubernetes-cluster">Create a new Kubernetes cluster<a href="#create-a-new-kubernetes-cluster" class="hash-link" aria-label="Direct link to Create a new Kubernetes cluster" title="Direct link to Create a new Kubernetes cluster">​</a></h3><p>You can create a new GKE cluster using the <a href="https://cloud.google.com/sdk/gcloud/reference/container/clusters/create" target="_blank" rel="noopener noreferrer"><code>container clusters create</code></a> command for <code>gcloud</code>. This command enables you to specify the number of nodes in the cluster, the machine types of those nodes, and more.</p><p>As an example, we&#x27;ll create a new GKE cluster for Kubernetes version <a href="https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG.md#v164" target="_blank" rel="noopener noreferrer">1.6.4</a> in the <a href="https://cloud.google.com/compute/docs/regions-zones/regions-zones#available" target="_blank" rel="noopener noreferrer">us-central1-a</a> zone. The cluster will be named <code>bookkeeper-gke-cluster</code> and will consist of three VMs, each using two locally attached SSDs and running on <a href="https://cloud.google.com/compute/docs/machine-types" target="_blank" rel="noopener noreferrer">n1-standard-8</a> machines. These SSDs will be used by Bookie instances, one for the BookKeeper journal and the other for storing the actual data.</p><div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">$ gcloud config </span><span class="token builtin class-name">set</span><span class="token plain"> compute/zone us-central1-a</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">$ gcloud config </span><span class="token builtin class-name">set</span><span class="token plain"> project your-project-name</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">$ gcloud container clusters create bookkeeper-gke-cluster </span><span class="token punctuation" style="color:#393A34">\</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  --machine-type</span><span class="token operator" style="color:#393A34">=</span><span class="token plain">n1-standard-8 </span><span class="token punctuation" style="color:#393A34">\</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  --num-nodes</span><span class="token operator" style="color:#393A34">=</span><span class="token number" style="color:#36acaa">3</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">\</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  --local-ssd-count</span><span class="token operator" style="color:#393A34">=</span><span class="token number" style="color:#36acaa">2</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">\</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  --enable-kubernetes-alpha</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>By default, bookies will run on all the machines that have locally attached SSD disks. In this example, all of those machines will have two SSDs, but you can add different types of machines to the cluster later. You can control which machines host bookie servers using <a href="https://kubernetes.io/docs/concepts/overview/working-with-objects/labels" target="_blank" rel="noopener noreferrer">labels</a>.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="dashboard">Dashboard<a href="#dashboard" class="hash-link" aria-label="Direct link to Dashboard" title="Direct link to Dashboard">​</a></h3><p>You can observe your cluster in the <a href="https://kubernetes.io/docs/tasks/access-application-cluster/web-ui-dashboard/" target="_blank" rel="noopener noreferrer">Kubernetes Dashboard</a> by downloading the credentials for your Kubernetes cluster and opening up a proxy to the cluster:</p><div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">$ gcloud container clusters get-credentials bookkeeper-gke-cluster </span><span class="token punctuation" style="color:#393A34">\</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  --zone</span><span class="token operator" style="color:#393A34">=</span><span class="token plain">us-central1-a </span><span class="token punctuation" style="color:#393A34">\</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  --project</span><span class="token operator" style="color:#393A34">=</span><span class="token plain">your-project-name</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">$ kubectl proxy</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>By default, the proxy will be opened on port 8001. Now you can navigate to <a href="http://localhost:8001/ui" target="_blank" rel="noopener noreferrer">localhost:8001/ui</a> in your browser to access the dashboard. At first your GKE cluster will be empty, but that will change as you begin deploying.</p><p>When you create a cluster, your <code>kubectl</code> config in <code>~/.kube/config</code> (on MacOS and Linux) will be updated for you, so you probably won&#x27;t need to change your configuration. Nonetheless, you can ensure that <code>kubectl</code> can interact with your cluster by listing the nodes in the cluster:</p><div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">$ kubectl get nodes</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>If <code>kubectl</code> is working with your cluster, you can proceed to deploy ZooKeeper and Bookies.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="zookeeper">ZooKeeper<a href="#zookeeper" class="hash-link" aria-label="Direct link to ZooKeeper" title="Direct link to ZooKeeper">​</a></h3><p>You <em>must</em> deploy ZooKeeper as the first component, as it is a dependency for the others.</p><div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">$ kubectl apply -f zookeeper.yaml</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>Wait until all three ZooKeeper server pods are up and have the status <code>Running</code>. You can check on the status of the ZooKeeper pods at any time:</p><div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">$ kubectl get pods -l </span><span class="token assign-left variable" style="color:#36acaa">component</span><span class="token operator" style="color:#393A34">=</span><span class="token plain">zookeeper</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">NAME      READY     STATUS             RESTARTS   AGE</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">zk-0      </span><span class="token number" style="color:#36acaa">1</span><span class="token plain">/1       Running            </span><span class="token number" style="color:#36acaa">0</span><span class="token plain">          18m</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">zk-1      </span><span class="token number" style="color:#36acaa">1</span><span class="token plain">/1       Running            </span><span class="token number" style="color:#36acaa">0</span><span class="token plain">          17m</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">zk-2      </span><span class="token number" style="color:#36acaa">0</span><span class="token plain">/1       Running            </span><span class="token number" style="color:#36acaa">6</span><span class="token plain">          15m</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>This step may take several minutes, as Kubernetes needs to download the Docker image on the VMs.</p><p>If you want to connect to one of the remote zookeeper server, you can use<a href="https://github.com/rgs1/zk_shell" target="_blank" rel="noopener noreferrer">zk-shell</a>, you need to forward a local port to the
 remote zookeeper server:</p><div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">$ kubectl port-forward zk-0 </span><span class="token number" style="color:#36acaa">2181</span><span class="token plain">:2181</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">$ zk-shell localhost </span><span class="token number" style="color:#36acaa">2181</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><h3 class="anchor anchorWithStickyNavbar_LWe7" id="deploy-bookies">Deploy Bookies<a href="#deploy-bookies" class="hash-link" aria-label="Direct link to Deploy Bookies" title="Direct link to Deploy Bookies">​</a></h3><p>Once ZooKeeper cluster is Running, you can then deploy the bookies. You can deploy the bookies either using a <a href="https://kubernetes.io/docs/concepts/workloads/controllers/daemonset/" target="_blank" rel="noopener noreferrer">DaemonSet</a> or a <a href="https://kubernetes.io/docs/concepts/workloads/controllers/statefulset/" target="_blank" rel="noopener noreferrer">StatefulSet</a>.</p><blockquote><p>NOTE: <em>DaemonSet</em> vs <em>StatefulSet</em></p><p>A <em>DaemonSet</em> ensures that all (or some) nodes run a pod of bookie instance. As nodes are added to the cluster, bookie pods are added automatically to them. As nodes are removed from the
 cluster, those bookie pods are garbage collected. The bookies deployed in a DaemonSet stores data on the local disks on those nodes. So it doesn&#x27;t require any external storage for Persistent
 Volumes.</p><p>A <em>StatefulSet</em> maintains a sticky identity for the pods that it runs and manages. It provides stable and unique network identifiers, and stable and persistent storage for each pod. The pods
 are not interchangeable, the idenifiers for each pod are maintained across any rescheduling.</p><p>Which one to use? A <em>DaemonSet</em> is the easiest way to deploy a bookkeeper cluster, because it doesn&#x27;t require additional persistent volume provisioner and use local disks. BookKeeper manages
 the data replication. It maintains the best latency property. However, it uses <code>hostIP</code> and <code>hostPort</code> for communications between pods. In some k8s platform (such as DC/OS), <code>hostIP</code> and
 <code>hostPort</code> are not well supported. A <em>StatefulSet</em> is only practical when deploying in a cloud environment or any K8S installation that has persistent volumes available. Also be aware, latency
-can be potentially higher when using persistent volumes, because there is usually built-in replication in the persistent volumes.</p></blockquote><div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token comment" style="color:#999988;font-style:italic"># deploy bookies in a daemon set</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">$ kubectl apply -f bookkeeper.yaml</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic"># deploy bookies in a stateful set</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">$ kubectl apply -f bookkeeper.stateful.yaml</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>You can check on the status of the Bookie pods for these components either in the Kubernetes Dashboard or using <code>kubectl</code>:</p><div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">$ kubectl get pods</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>While all BookKeeper pods is Running, by zk-shell you could find all available bookies under /ledgers/</p><p>You could also run a <a href="https://github.com/ivankelly/bookkeeper-tutorial/" target="_blank" rel="noopener noreferrer">bookkeeper tutorial</a> instance, which named as &#x27;dice&#x27; here, in this bookkeeper cluster.</p><div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">$kubectl run -i --tty --attach dice --image</span><span class="token operator" style="color:#393A34">=</span><span class="token plain">caiok/bookkeeper-tutorial --env </span><span class="token assign-left variable" style="color:#36acaa">ZOOKEEPER_SERVERS</span><span class="token operator" style="color:#393A34">=</span><span class="token string" style="color:#e3116c">&quot;zk-0.zookeeper&quot;</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>An example output of Dice instance is like this:</p><div class="language-aidl codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-aidl codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">➜ $ kubectl run -i --tty --attach dice --image=caiok/bookkeeper-tutorial --env ZOOKEEPER_SERVERS=&quot;zk-0.zookeeper&quot;          </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">If you don&#x27;t see a command prompt, try pressing enter.</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">Value = 1, epoch = 5, leading</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">Value = 2, epoch = 5, leading</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">Value = 1, epoch = 5, leading</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">Value = 4, epoch = 5, leading</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">Value = 5, epoch = 5, leading</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">Value = 4, epoch = 5, leading</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">Value = 3, epoch = 5, leading</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">Value = 5, epoch = 5, leading</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">Value = 3, epoch = 5, leading</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">Value = 2, epoch = 5, leading</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">Value = 1, epoch = 5, leading</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">Value = 4, epoch = 5, leading</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">Value = 2, epoch = 5, leading</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><h3 class="anchor anchorWithStickyNavbar_LWe7" id="un-deploy">Un-Deploy<a href="#un-deploy" class="hash-link" aria-label="Direct link to Un-Deploy" title="Direct link to Un-Deploy">​</a></h3><p>Delete Demo dice instance</p><div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">$kubectl delete deployment dice      </span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>Delete BookKeeper</p><div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">$ kubectl delete -f bookkeeper.yaml    </span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>Delete ZooKeeper</p><div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">$ kubectl delete -f zookeeper.yaml    </span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>Delete cluster</p><div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">$ gcloud container clusters delete bookkeeper-gke-cluster    </span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div></div></article><nav class="pagination-nav docusaurus-mt-lg" aria-label="Docs pages navigation"></nav></div></div><div class="col col--3"><div class="tableOfContents_bqdL thin-scrollbar theme-doc-toc-desktop"><ul class="table-of-contents table-of-contents__left-border"><li><a href="#setup-on-google-container-engine" class="table-of-contents__link toc-highlight">Setup on Google Container Engine</a><ul><li><a href="#prerequisites" class="table-of-contents__link toc-highlight">Prerequisites</a></li><li><a href="#create-a-new-kubernetes-cluster" class="table-of-contents__link toc-highlight">Create a new Kubernetes cluster</a></li><li><a href="#dashboard" class="table-of-contents__link toc-highlight">Dashboard</a></li><li><a href="#zookeeper" class="table-of-contents__link toc-highlight">ZooKeeper</a></li><li><a href="#deploy-bookies" class="table-of-contents__link toc-highlight">Deploy Bookies</a></li><li><a href="#un-deploy" class="table-of-contents__link toc-highlight">Un-Deploy</a></li></ul></li></ul></div></div></div></div></main></div></div><footer class="footer footer--dark"><div class="container container-fluid"><div class="row footer__links"><div class="col footer__col"><div class="footer__title">Documentation</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/docs/overview">Overview</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/getting-started/installation">Getting started</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/deployment/manual">Deployment</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/admin/bookies">Administration</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/api/overview">API</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/security/overview">Security</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/development/protocol">Development</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/reference/config">Reference</a></li></ul></div><div class="col footer__col"><div class="footer__title">Community</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/community/mailing-lists">Mailing lists</a></li><li class="footer__item"><a class="footer__link-item" href="/community/slack">Slack</a></li><li class="footer__item"><a href="https://github.com/apache/bookkeeper" target="_blank" rel="noopener noreferrer" class="footer__link-item">Github<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a href="https://twitter.com/asfbookkeeper" target="_blank" rel="noopener noreferrer" class="footer__link-item">Twitter<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div><div class="col footer__col"><div class="footer__title">Project</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/project/who">Who are we?</a></li><li class="footer__item"><a class="footer__link-item" href="/project/bylaws">Bylaws</a></li><li class="footer__item"><a href="https://apache.org/licenses" target="_blank" rel="noopener noreferrer" class="footer__link-item">License<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a class="footer__link-item" href="/project/privacy">Privacy policy</a></li><li class="footer__item"><a href="https://www.apache.org/foundation/sponsorship.html" target="_blank" rel="noopener noreferrer" class="footer__link-item">Sponsorship<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a href="https://www.apache.org/foundation/thanks.html" target="_blank" rel="noopener noreferrer" class="footer__link-item">Thanks<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div></div><div class="footer__bottom text--center"><div class="footer__copyright"><footer class="footer">
+can be potentially higher when using persistent volumes, because there is usually built-in replication in the persistent volumes.</p></blockquote><div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token comment" style="color:#999988;font-style:italic"># deploy bookies in a daemon set</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">$ kubectl apply -f bookkeeper.yaml</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic"># deploy bookies in a stateful set</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">$ kubectl apply -f bookkeeper.stateful.yaml</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>You can check on the status of the Bookie pods for these components either in the Kubernetes Dashboard or using <code>kubectl</code>:</p><div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">$ kubectl get pods</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>While all BookKeeper pods is Running, by zk-shell you could find all available bookies under /ledgers/</p><p>You could also run a <a href="https://github.com/ivankelly/bookkeeper-tutorial/" target="_blank" rel="noopener noreferrer">bookkeeper tutorial</a> instance, which named as &#x27;dice&#x27; here, in this bookkeeper cluster.</p><div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">$kubectl run -i --tty --attach dice --image</span><span class="token operator" style="color:#393A34">=</span><span class="token plain">caiok/bookkeeper-tutorial --env </span><span class="token assign-left variable" style="color:#36acaa">ZOOKEEPER_SERVERS</span><span class="token operator" style="color:#393A34">=</span><span class="token string" style="color:#e3116c">&quot;zk-0.zookeeper&quot;</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>An example output of Dice instance is like this:</p><div class="language-aidl codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-aidl codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">➜ $ kubectl run -i --tty --attach dice --image=caiok/bookkeeper-tutorial --env ZOOKEEPER_SERVERS=&quot;zk-0.zookeeper&quot;          </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">If you don&#x27;t see a command prompt, try pressing enter.</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">Value = 1, epoch = 5, leading</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">Value = 2, epoch = 5, leading</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">Value = 1, epoch = 5, leading</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">Value = 4, epoch = 5, leading</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">Value = 5, epoch = 5, leading</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">Value = 4, epoch = 5, leading</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">Value = 3, epoch = 5, leading</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">Value = 5, epoch = 5, leading</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">Value = 3, epoch = 5, leading</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">Value = 2, epoch = 5, leading</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">Value = 1, epoch = 5, leading</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">Value = 4, epoch = 5, leading</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">Value = 2, epoch = 5, leading</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><h3 class="anchor anchorWithStickyNavbar_LWe7" id="un-deploy">Un-Deploy<a href="#un-deploy" class="hash-link" aria-label="Direct link to Un-Deploy" title="Direct link to Un-Deploy">​</a></h3><p>Delete Demo dice instance</p><div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">$kubectl delete deployment dice      </span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>Delete BookKeeper</p><div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">$ kubectl delete -f bookkeeper.yaml    </span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>Delete ZooKeeper</p><div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">$ kubectl delete -f zookeeper.yaml    </span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>Delete cluster</p><div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">$ gcloud container clusters delete bookkeeper-gke-cluster    </span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div></div></article><nav class="pagination-nav docusaurus-mt-lg" aria-label="Docs pages navigation"><a class="pagination-nav__link pagination-nav__link--prev" href="/docs/deployment/manual"><div class="pagination-nav__sublabel">Previous</div><div class="pagination-nav__label">Manual deployment</div></a><a class="pagination-nav__link pagination-nav__link--next" href="/docs/admin/bookies"><div class="pagination-nav__sublabel">Next</div><div class="pagination-nav__label">BookKeeper administration</div></a></nav></div></div><div class="col col--3"><div class="tableOfContents_bqdL thin-scrollbar theme-doc-toc-desktop"><ul class="table-of-contents table-of-contents__left-border"><li><a href="#setup-on-google-container-engine" class="table-of-contents__link toc-highlight">Setup on Google Container Engine</a><ul><li><a href="#prerequisites" class="table-of-contents__link toc-highlight">Prerequisites</a></li><li><a href="#create-a-new-kubernetes-cluster" class="table-of-contents__link toc-highlight">Create a new Kubernetes cluster</a></li><li><a href="#dashboard" class="table-of-contents__link toc-highlight">Dashboard</a></li><li><a href="#zookeeper" class="table-of-contents__link toc-highlight">ZooKeeper</a></li><li><a href="#deploy-bookies" class="table-of-contents__link toc-highlight">Deploy Bookies</a></li><li><a href="#un-deploy" class="table-of-contents__link toc-highlight">Un-Deploy</a></li></ul></li></ul></div></div></div></div></main></div></div><footer class="footer footer--dark"><div class="container container-fluid"><div class="row footer__links"><div class="col footer__col"><div class="footer__title">Documentation</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/docs/overview">Overview</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/getting-started/installation">Getting started</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/deployment/manual">Deployment</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/admin/bookies">Administration</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/api/overview">API</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/security/overview">Security</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/development/protocol">Development</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/reference/config">Reference</a></li></ul></div><div class="col footer__col"><div class="footer__title">Community</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/community/mailing-lists">Mailing lists</a></li><li class="footer__item"><a class="footer__link-item" href="/community/slack">Slack</a></li><li class="footer__item"><a href="https://github.com/apache/bookkeeper" target="_blank" rel="noopener noreferrer" class="footer__link-item">Github<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a href="https://twitter.com/asfbookkeeper" target="_blank" rel="noopener noreferrer" class="footer__link-item">Twitter<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div><div class="col footer__col"><div class="footer__title">Project</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/project/who">Who are we?</a></li><li class="footer__item"><a class="footer__link-item" href="/project/bylaws">Bylaws</a></li><li class="footer__item"><a href="https://apache.org/licenses" target="_blank" rel="noopener noreferrer" class="footer__link-item">License<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a class="footer__link-item" href="/project/privacy">Privacy policy</a></li><li class="footer__item"><a href="https://www.apache.org/foundation/sponsorship.html" target="_blank" rel="noopener noreferrer" class="footer__link-item">Sponsorship<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a href="https://www.apache.org/foundation/thanks.html" target="_blank" rel="noopener noreferrer" class="footer__link-item">Thanks<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div></div><div class="footer__bottom text--center"><div class="footer__copyright"><footer class="footer">
         <div class="container">
           <div class="content has-text-centered">
             <p>
@@ -29,7 +29,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/deployment/manual/index.html b/content/docs/deployment/manual/index.html
index fe4ea17..8b11a54 100644
--- a/content/docs/deployment/manual/index.html
+++ b/content/docs/deployment/manual/index.html
@@ -4,12 +4,12 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">Manual deployment | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/deployment/manual"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.17.0"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.17.0"><meta data-rh="true" name="docsearch:version" content="4.17.0"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.17.0"><meta data-rh="true" property="og:title" content="Manual deployment | Apache BookKeeper"><meta data-rh="true" name="description" content="A BookKeeper cluster consists of two main components:"><meta data-rh="true" property="og:description" content="A BookKeeper cluster consists of two main components:"><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/deployment/manual"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/deployment/manual" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/deployment/manual" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
-<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navbar__brand" href="/"><div class="navbar__logo"><img src="/img/bk-logo.svg" alt="Apache Bookkeeper" class="themedImage_ToTc themedImage--light_HNdA"><img src="/img/bk-logo.svg" alt="Apache Bookkeeper" class="themedImage_ToTc themedImage--dark_i4oU"></div><b class="navbar__title text--truncate">Apache BookKeeper</b></a><a class="navbar__item navbar__link" href="/docs/overview/">Documentation</a><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Community</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/community/mailing-lists">Mailing lists</a></li><li><a class="dropdown__link" href="/community/slack">Slack</a></li><li><a href="https://github.com/apache/bookkeeper/issues" target="_blank" rel="noopener noreferrer" class="dropdown__link">Github issues<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a class="dropdown__link" href="/community/releases">Release management</a></li><li><a class="dropdown__link" href="/community/meeting">Community meetings</a></li><li><a class="dropdown__link" href="/community/contributing">Contribution guide</a></li><li><a class="dropdown__link" href="/community/coding-guide">Coding guide</a></li><li><a class="dropdown__link" href="/community/testing">Testing guide</a></li><li><a class="dropdown__link" href="/community/issue-report">Issue report guide</a></li><li><a class="dropdown__link" href="/community/release-guide">Release guide</a></li><li><a class="dropdown__link" href="/community/presentations">Presentations</a></li><li><a class="dropdown__link" href="/community/bookkeeper-proposals">BookKeeper proposals (BP)</a></li></ul></div><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Project</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/project/who">Who are we?</a></li><li><a class="dropdown__link" href="/project/bylaws">Bylaws</a></li><li><a href="https://apache.org/licenses" target="_blank" rel="noopener noreferrer" class="dropdown__link">License<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a class="dropdown__link" href="/project/privacy">Privacy policy</a></li><li><a href="https://www.apache.org/foundation/sponsorship.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Sponsorship<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a href="https://www.apache.org/foundation/thanks.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Thanks<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div></div><div class="navbar__items navbar__items--right"><div class="navbar__item dropdown dropdown--hoverable dropdown--right"><a class="navbar__link" aria-haspopup="true" aria-expanded="false" role="button" href="/docs/admin/autorecovery">4.17.0</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/docs/next/deployment/manual">Next</a></li><li><a aria-current="page" class="dropdown__link dropdown__link--active" href="/docs/deployment/manual">4.17.0</a></li><li><a class="dropdown__link" href="/docs/4.16.5/deployment/manual">4.16.5</a></li><li><a class="dropdown__link" href="/docs/4.15.5/deployment/manual">4.15.5</a></li><li><a class="dropdown__link" href="/docs/4.14.8/deployment/manual">4.14.8</a></li><li><a class="dropdown__link" href="/docs/4.13.0/deployment/manual">4.13.0</a></li><li><a class="dropdown__link" href="/docs/4.12.1/deployment/manual">4.12.1</a></li><li><a class="dropdown__link" href="/docs/4.11.1/deployment/manual">4.11.1</a></li><li><a class="dropdown__link" href="/docs/4.10.0/deployment/manual">4.10.0</a></li><li><a class="dropdown__link" href="/docs/4.9.2/deployment/manual">4.9.2</a></li><li><a class="dropdown__link" href="/docs/4.8.2/deployment/manual">4.8.2</a></li><li><a class="dropdown__link" href="/docs/4.7.3/deployment/manual">4.7.3</a></li><li><a class="dropdown__link" href="/docs/4.6.2/deployment/manual">4.6.2</a></li><li><a class="dropdown__link" href="/docs/4.5.1/deployment/manual">4.5.1</a></li></ul></div><a class="navbar__item navbar__link" href="/releases">Download</a><div class="toggle_vylO colorModeToggle_DEke"><button class="clean-btn toggleButton_gllP toggleButtonDisabled_aARS" type="button" disabled="" title="Switch between dark and light mode (currently light mode)" aria-label="Switch between dark and light mode (currently light mode)" aria-live="polite"><svg viewBox="0 0 24 24" width="24" height="24" class="lightToggleIcon_pyhR"><path fill="currentColor" d="M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"></path></svg><svg viewBox="0 0 24 24" width="24" height="24" class="darkToggleIcon_wfgR"><path fill="currentColor" d="M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"></path></svg></button></div><div class="searchBox_ZlJk"></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div></nav><div id="docusaurus_skipToContent_fallback" class="main-wrapper mainWrapper_z2l0 docsWrapper_BCFX"><button aria-label="Scroll back to top" class="clean-btn theme-back-to-top-button backToTopButton_sjWU" type="button"></button><div class="docPage__5DB"><main class="docMainContainer_gTbr docMainContainerEnhanced_Uz_u"><div class="container padding-top--md padding-bottom--lg"><div class="row"><div class="col docItemCol_VOVn"><div class="docItemContainer_Djhp"><article><span class="theme-doc-version-badge badge badge--secondary">Version: 4.17.0</span><div class="tocCollapsible_ETCw theme-doc-toc-mobile tocMobile_ITEo"><button type="button" class="clean-btn tocCollapsibleButton_TO0P">On this page</button></div><div class="theme-doc-markdown markdown"><header><h1>Manual deployment</h1></header><p>A BookKeeper cluster consists of two main components:</p><ul><li>A <a href="#zookeeper-setup">ZooKeeper</a> cluster that is used for configuration- and coordination-related tasks</li><li>An <a href="#starting-up-bookies">ensemble</a> of bookies</li></ul><h2 class="anchor anchorWithStickyNavbar_LWe7" id="zookeeper-setup">ZooKeeper setup<a href="#zookeeper-setup" class="hash-link" aria-label="Direct link to ZooKeeper setup" title="Direct link to ZooKeeper setup">​</a></h2><p>We won&#x27;t provide a full guide to setting up a ZooKeeper cluster here. We recommend that you consult <a href="https://zookeeper.apache.org/doc/current/zookeeperAdmin.html" target="_blank" rel="noopener noreferrer">this guide</a> in the official ZooKeeper documentation.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="cluster-metadata-setup">Cluster metadata setup<a href="#cluster-metadata-setup" class="hash-link" aria-label="Direct link to Cluster metadata setup" title="Direct link to Cluster metadata setup">​</a></h2><p>Once your ZooKeeper cluster is up and running, there is some metadata that needs to be written to ZooKeeper, so you need to modify the bookie&#x27;s configuration to make sure that it points to the right ZooKeeper cluster.</p><p>On each bookie host, you need to <a href="/docs/getting-started/installation#download">download</a> the BookKeeper package as a tarball. Once you&#x27;ve done that, you need to configure the bookie by setting values in the <code>bookkeeper-server/conf/bk_server.conf</code> config file. The one parameter that you will absolutely need to change is the <code>metadataServiceUri</code> parameter, which you will need to set to the ZooKeeper connection string for your ZooKeeper cluster. Here&#x27;s an example:</p><div class="language-properties codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-properties codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">metadataServiceUri=zk+hierarchical://100.0.0.1:2181;100.0.0.2:2181;100.0.0.3:2181/ledgers</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><blockquote><p>A full listing of configurable parameters available in <code>bookkeeper-server/conf/bk_server.conf</code> can be found in the <a href="/docs/reference/config">Configuration</a> reference manual.</p></blockquote><p>Once the bookie&#x27;s configuration is set, you can set up cluster metadata for the cluster by running the following command from any bookie in the cluster:</p><div class="language-shell codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-shell codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">$ bookkeeper-server/bin/bookkeeper shell metaformat</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>You can run in the formatting </p><blockquote><p>The <code>metaformat</code> command performs all the necessary ZooKeeper cluster metadata tasks and thus only needs to be run <em>once</em> and from <em>any</em> bookie in the BookKeeper cluster.</p></blockquote><p>Once cluster metadata formatting has been completed, your BookKeeper cluster is ready to go!</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="starting-up-bookies">Starting up bookies<a href="#starting-up-bookies" class="hash-link" aria-label="Direct link to Starting up bookies" title="Direct link to Starting up bookies">​</a></h2><p>Before you start up your bookies, you should make sure that all bookie hosts have the correct configuration, then you can start up as many bookies as you&#x27;d like to form a cluster by using the <a href="/docs/reference/cli#bookkeeper-bookie"><code>bookie</code></a> command of the <a href="/docs/reference/cli#bookkeeper"><code>bookkeeper</code></a> CLI tool:</p><div class="language-shell codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-shell codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">$ bookkeeper-server/bin/bookkeeper bookie</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><h3 class="anchor anchorWithStickyNavbar_LWe7" id="system-requirements">System requirements<a href="#system-requirements" class="hash-link" aria-label="Direct link to System requirements" title="Direct link to System requirements">​</a></h3><p>The number of bookies you should run in a BookKeeper cluster depends on the quorum mode that you&#x27;ve chosen, the desired throughput, and the number of clients using the cluster simultaneously.</p><table><thead><tr><th align="left">Quorum type</th><th align="left">Number of bookies</th></tr></thead><tbody><tr><td align="left">Self-verifying quorum</td><td align="left">3</td></tr><tr><td align="left">Generic</td><td align="left">4</td></tr></tbody></table><p>Increasing the number of bookies will enable higher throughput, and there is <strong>no upper limit</strong> on the number of bookies. </p></div></article><nav class="pagination-nav docusaurus-mt-lg" aria-label="Docs pages navigation"></nav></div></div><div class="col col--3"><div class="tableOfContents_bqdL thin-scrollbar theme-doc-toc-desktop"><ul class="table-of-contents table-of-contents__left-border"><li><a href="#zookeeper-setup" class="table-of-contents__link toc-highlight">ZooKeeper setup</a></li><li><a href="#cluster-metadata-setup" class="table-of-contents__link toc-highlight">Cluster metadata setup</a></li><li><a href="#starting-up-bookies" class="table-of-contents__link toc-highlight">Starting up bookies</a><ul><li><a href="#system-requirements" class="table-of-contents__link toc-highlight">System requirements</a></li></ul></li></ul></div></div></div></div></main></div></div><footer class="footer footer--dark"><div class="container container-fluid"><div class="row footer__links"><div class="col footer__col"><div class="footer__title">Documentation</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/docs/overview">Overview</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/getting-started/installation">Getting started</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/deployment/manual">Deployment</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/admin/bookies">Administration</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/api/overview">API</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/security/overview">Security</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/development/protocol">Development</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/reference/config">Reference</a></li></ul></div><div class="col footer__col"><div class="footer__title">Community</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/community/mailing-lists">Mailing lists</a></li><li class="footer__item"><a class="footer__link-item" href="/community/slack">Slack</a></li><li class="footer__item"><a href="https://github.com/apache/bookkeeper" target="_blank" rel="noopener noreferrer" class="footer__link-item">Github<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a href="https://twitter.com/asfbookkeeper" target="_blank" rel="noopener noreferrer" class="footer__link-item">Twitter<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div><div class="col footer__col"><div class="footer__title">Project</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/project/who">Who are we?</a></li><li class="footer__item"><a class="footer__link-item" href="/project/bylaws">Bylaws</a></li><li class="footer__item"><a href="https://apache.org/licenses" target="_blank" rel="noopener noreferrer" class="footer__link-item">License<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a class="footer__link-item" href="/project/privacy">Privacy policy</a></li><li class="footer__item"><a href="https://www.apache.org/foundation/sponsorship.html" target="_blank" rel="noopener noreferrer" class="footer__link-item">Sponsorship<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a href="https://www.apache.org/foundation/thanks.html" target="_blank" rel="noopener noreferrer" class="footer__link-item">Thanks<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div></div><div class="footer__bottom text--center"><div class="footer__copyright"><footer class="footer">
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navbar__brand" href="/"><div class="navbar__logo"><img src="/img/bk-logo.svg" alt="Apache Bookkeeper" class="themedImage_ToTc themedImage--light_HNdA"><img src="/img/bk-logo.svg" alt="Apache Bookkeeper" class="themedImage_ToTc themedImage--dark_i4oU"></div><b class="navbar__title text--truncate">Apache BookKeeper</b></a><a aria-current="page" class="navbar__item navbar__link navbar__link--active" href="/docs/overview/">Documentation</a><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Community</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/community/mailing-lists">Mailing lists</a></li><li><a class="dropdown__link" href="/community/slack">Slack</a></li><li><a href="https://github.com/apache/bookkeeper/issues" target="_blank" rel="noopener noreferrer" class="dropdown__link">Github issues<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a class="dropdown__link" href="/community/releases">Release management</a></li><li><a class="dropdown__link" href="/community/meeting">Community meetings</a></li><li><a class="dropdown__link" href="/community/contributing">Contribution guide</a></li><li><a class="dropdown__link" href="/community/coding-guide">Coding guide</a></li><li><a class="dropdown__link" href="/community/testing">Testing guide</a></li><li><a class="dropdown__link" href="/community/issue-report">Issue report guide</a></li><li><a class="dropdown__link" href="/community/release-guide">Release guide</a></li><li><a class="dropdown__link" href="/community/presentations">Presentations</a></li><li><a class="dropdown__link" href="/community/bookkeeper-proposals">BookKeeper proposals (BP)</a></li></ul></div><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Project</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/project/who">Who are we?</a></li><li><a class="dropdown__link" href="/project/bylaws">Bylaws</a></li><li><a href="https://apache.org/licenses" target="_blank" rel="noopener noreferrer" class="dropdown__link">License<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a class="dropdown__link" href="/project/privacy">Privacy policy</a></li><li><a href="https://www.apache.org/foundation/sponsorship.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Sponsorship<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a href="https://www.apache.org/foundation/thanks.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Thanks<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div></div><div class="navbar__items navbar__items--right"><div class="navbar__item dropdown dropdown--hoverable dropdown--right"><a class="navbar__link" aria-haspopup="true" aria-expanded="false" role="button" href="/docs/overview/">4.17.0</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/docs/next/deployment/manual">Next</a></li><li><a aria-current="page" class="dropdown__link dropdown__link--active" href="/docs/deployment/manual">4.17.0</a></li><li><a class="dropdown__link" href="/docs/4.16.5/deployment/manual">4.16.5</a></li><li><a class="dropdown__link" href="/docs/4.15.5/deployment/manual">4.15.5</a></li><li><a class="dropdown__link" href="/docs/4.14.8/deployment/manual">4.14.8</a></li><li><a class="dropdown__link" href="/docs/4.13.0/deployment/manual">4.13.0</a></li><li><a class="dropdown__link" href="/docs/4.12.1/deployment/manual">4.12.1</a></li><li><a class="dropdown__link" href="/docs/4.11.1/deployment/manual">4.11.1</a></li><li><a class="dropdown__link" href="/docs/4.10.0/deployment/manual">4.10.0</a></li><li><a class="dropdown__link" href="/docs/4.9.2/deployment/manual">4.9.2</a></li><li><a class="dropdown__link" href="/docs/4.8.2/deployment/manual">4.8.2</a></li><li><a class="dropdown__link" href="/docs/4.7.3/deployment/manual">4.7.3</a></li><li><a class="dropdown__link" href="/docs/4.6.2/deployment/manual">4.6.2</a></li><li><a class="dropdown__link" href="/docs/4.5.1/deployment/manual">4.5.1</a></li></ul></div><a class="navbar__item navbar__link" href="/releases">Download</a><div class="toggle_vylO colorModeToggle_DEke"><button class="clean-btn toggleButton_gllP toggleButtonDisabled_aARS" type="button" disabled="" title="Switch between dark and light mode (currently light mode)" aria-label="Switch between dark and light mode (currently light mode)" aria-live="polite"><svg viewBox="0 0 24 24" width="24" height="24" class="lightToggleIcon_pyhR"><path fill="currentColor" d="M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"></path></svg><svg viewBox="0 0 24 24" width="24" height="24" class="darkToggleIcon_wfgR"><path fill="currentColor" d="M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"></path></svg></button></div><div class="searchBox_ZlJk"></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div></nav><div id="docusaurus_skipToContent_fallback" class="main-wrapper mainWrapper_z2l0 docsWrapper_BCFX"><button aria-label="Scroll back to top" class="clean-btn theme-back-to-top-button backToTopButton_sjWU" type="button"></button><div class="docPage__5DB"><aside class="theme-doc-sidebar-container docSidebarContainer_b6E3"><div class="sidebarViewport_Xe31"><div class="sidebar_njMd"><nav aria-label="Docs sidebar" class="menu thin-scrollbar menu_SIkG"><ul class="theme-doc-sidebar-menu menu__list"><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-1 menu__list-item"><a class="menu__link" href="/docs/overview/">Overview</a></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/getting-started/installation">Getting started</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret menu__link--active" aria-expanded="true" href="/docs/deployment/manual">Deployment</a></div><ul style="display:block;overflow:visible;height:auto" class="menu__list"><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link menu__link--active" aria-current="page" tabindex="0" href="/docs/deployment/manual">Manual deployment</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/deployment/kubernetes">BookKeeper on Kubernetes</a></li></ul></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/admin/bookies">Administration</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/api/overview">API</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/security/overview">Security</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/development/protocol">Development</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/reference/config">Reference</a></div></li></ul></nav></div></div></aside><main class="docMainContainer_gTbr"><div class="container padding-top--md padding-bottom--lg"><div class="row"><div class="col docItemCol_VOVn"><div class="docItemContainer_Djhp"><article><span class="theme-doc-version-badge badge badge--secondary">Version: 4.17.0</span><div class="tocCollapsible_ETCw theme-doc-toc-mobile tocMobile_ITEo"><button type="button" class="clean-btn tocCollapsibleButton_TO0P">On this page</button></div><div class="theme-doc-markdown markdown"><header><h1>Manual deployment</h1></header><p>A BookKeeper cluster consists of two main components:</p><ul><li>A <a href="#zookeeper-setup">ZooKeeper</a> cluster that is used for configuration- and coordination-related tasks</li><li>An <a href="#starting-up-bookies">ensemble</a> of bookies</li></ul><h2 class="anchor anchorWithStickyNavbar_LWe7" id="zookeeper-setup">ZooKeeper setup<a href="#zookeeper-setup" class="hash-link" aria-label="Direct link to ZooKeeper setup" title="Direct link to ZooKeeper setup">​</a></h2><p>We won&#x27;t provide a full guide to setting up a ZooKeeper cluster here. We recommend that you consult <a href="https://zookeeper.apache.org/doc/current/zookeeperAdmin.html" target="_blank" rel="noopener noreferrer">this guide</a> in the official ZooKeeper documentation.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="cluster-metadata-setup">Cluster metadata setup<a href="#cluster-metadata-setup" class="hash-link" aria-label="Direct link to Cluster metadata setup" title="Direct link to Cluster metadata setup">​</a></h2><p>Once your ZooKeeper cluster is up and running, there is some metadata that needs to be written to ZooKeeper, so you need to modify the bookie&#x27;s configuration to make sure that it points to the right ZooKeeper cluster.</p><p>On each bookie host, you need to <a href="/docs/getting-started/installation#download">download</a> the BookKeeper package as a tarball. Once you&#x27;ve done that, you need to configure the bookie by setting values in the <code>bookkeeper-server/conf/bk_server.conf</code> config file. The one parameter that you will absolutely need to change is the <code>metadataServiceUri</code> parameter, which you will need to set to the ZooKeeper connection string for your ZooKeeper cluster. Here&#x27;s an example:</p><div class="language-properties codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-properties codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">metadataServiceUri=zk+hierarchical://100.0.0.1:2181;100.0.0.2:2181;100.0.0.3:2181/ledgers</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><blockquote><p>A full listing of configurable parameters available in <code>bookkeeper-server/conf/bk_server.conf</code> can be found in the <a href="/docs/reference/config">Configuration</a> reference manual.</p></blockquote><p>Once the bookie&#x27;s configuration is set, you can set up cluster metadata for the cluster by running the following command from any bookie in the cluster:</p><div class="language-shell codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-shell codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">$ bookkeeper-server/bin/bookkeeper shell metaformat</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>You can run in the formatting </p><blockquote><p>The <code>metaformat</code> command performs all the necessary ZooKeeper cluster metadata tasks and thus only needs to be run <em>once</em> and from <em>any</em> bookie in the BookKeeper cluster.</p></blockquote><p>Once cluster metadata formatting has been completed, your BookKeeper cluster is ready to go!</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="starting-up-bookies">Starting up bookies<a href="#starting-up-bookies" class="hash-link" aria-label="Direct link to Starting up bookies" title="Direct link to Starting up bookies">​</a></h2><p>Before you start up your bookies, you should make sure that all bookie hosts have the correct configuration, then you can start up as many bookies as you&#x27;d like to form a cluster by using the <a href="/docs/reference/cli#bookkeeper-bookie"><code>bookie</code></a> command of the <a href="/docs/reference/cli#bookkeeper"><code>bookkeeper</code></a> CLI tool:</p><div class="language-shell codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-shell codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">$ bookkeeper-server/bin/bookkeeper bookie</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><h3 class="anchor anchorWithStickyNavbar_LWe7" id="system-requirements">System requirements<a href="#system-requirements" class="hash-link" aria-label="Direct link to System requirements" title="Direct link to System requirements">​</a></h3><p>The number of bookies you should run in a BookKeeper cluster depends on the quorum mode that you&#x27;ve chosen, the desired throughput, and the number of clients using the cluster simultaneously.</p><table><thead><tr><th align="left">Quorum type</th><th align="left">Number of bookies</th></tr></thead><tbody><tr><td align="left">Self-verifying quorum</td><td align="left">3</td></tr><tr><td align="left">Generic</td><td align="left">4</td></tr></tbody></table><p>Increasing the number of bookies will enable higher throughput, and there is <strong>no upper limit</strong> on the number of bookies. </p></div></article><nav class="pagination-nav docusaurus-mt-lg" aria-label="Docs pages navigation"><a class="pagination-nav__link pagination-nav__link--prev" href="/docs/getting-started/concepts"><div class="pagination-nav__sublabel">Previous</div><div class="pagination-nav__label">BookKeeper concepts and architecture</div></a><a class="pagination-nav__link pagination-nav__link--next" href="/docs/deployment/kubernetes"><div class="pagination-nav__sublabel">Next</div><div class="pagination-nav__label">Deploying Apache BookKeeper on Kubernetes</div></a></nav></div></div><div class="col col--3"><div class="tableOfContents_bqdL thin-scrollbar theme-doc-toc-desktop"><ul class="table-of-contents table-of-contents__left-border"><li><a href="#zookeeper-setup" class="table-of-contents__link toc-highlight">ZooKeeper setup</a></li><li><a href="#cluster-metadata-setup" class="table-of-contents__link toc-highlight">Cluster metadata setup</a></li><li><a href="#starting-up-bookies" class="table-of-contents__link toc-highlight">Starting up bookies</a><ul><li><a href="#system-requirements" class="table-of-contents__link toc-highlight">System requirements</a></li></ul></li></ul></div></div></div></div></main></div></div><footer class="footer footer--dark"><div class="container container-fluid"><div class="row footer__links"><div class="col footer__col"><div class="footer__title">Documentation</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/docs/overview">Overview</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/getting-started/installation">Getting started</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/deployment/manual">Deployment</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/admin/bookies">Administration</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/api/overview">API</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/security/overview">Security</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/development/protocol">Development</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/reference/config">Reference</a></li></ul></div><div class="col footer__col"><div class="footer__title">Community</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/community/mailing-lists">Mailing lists</a></li><li class="footer__item"><a class="footer__link-item" href="/community/slack">Slack</a></li><li class="footer__item"><a href="https://github.com/apache/bookkeeper" target="_blank" rel="noopener noreferrer" class="footer__link-item">Github<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a href="https://twitter.com/asfbookkeeper" target="_blank" rel="noopener noreferrer" class="footer__link-item">Twitter<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div><div class="col footer__col"><div class="footer__title">Project</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/project/who">Who are we?</a></li><li class="footer__item"><a class="footer__link-item" href="/project/bylaws">Bylaws</a></li><li class="footer__item"><a href="https://apache.org/licenses" target="_blank" rel="noopener noreferrer" class="footer__link-item">License<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a class="footer__link-item" href="/project/privacy">Privacy policy</a></li><li class="footer__item"><a href="https://www.apache.org/foundation/sponsorship.html" target="_blank" rel="noopener noreferrer" class="footer__link-item">Sponsorship<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a href="https://www.apache.org/foundation/thanks.html" target="_blank" rel="noopener noreferrer" class="footer__link-item">Thanks<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div></div><div class="footer__bottom text--center"><div class="footer__copyright"><footer class="footer">
         <div class="container">
           <div class="content has-text-centered">
             <p>
@@ -22,7 +22,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/development/codebase/index.html b/content/docs/development/codebase/index.html
index 2842d18..605e3b1 100644
--- a/content/docs/development/codebase/index.html
+++ b/content/docs/development/codebase/index.html
@@ -4,12 +4,12 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">The BookKeeper codebase | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/development/codebase"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.17.0"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.17.0"><meta data-rh="true" name="docsearch:version" content="4.17.0"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.17.0"><meta data-rh="true" property="og:title" content="The BookKeeper codebase | Apache BookKeeper"><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/development/codebase"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/development/codebase" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/development/codebase" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
-<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navbar__brand" href="/"><div class="navbar__logo"><img src="/img/bk-logo.svg" alt="Apache Bookkeeper" class="themedImage_ToTc themedImage--light_HNdA"><img src="/img/bk-logo.svg" alt="Apache Bookkeeper" class="themedImage_ToTc themedImage--dark_i4oU"></div><b class="navbar__title text--truncate">Apache BookKeeper</b></a><a class="navbar__item navbar__link" href="/docs/overview/">Documentation</a><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Community</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/community/mailing-lists">Mailing lists</a></li><li><a class="dropdown__link" href="/community/slack">Slack</a></li><li><a href="https://github.com/apache/bookkeeper/issues" target="_blank" rel="noopener noreferrer" class="dropdown__link">Github issues<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a class="dropdown__link" href="/community/releases">Release management</a></li><li><a class="dropdown__link" href="/community/meeting">Community meetings</a></li><li><a class="dropdown__link" href="/community/contributing">Contribution guide</a></li><li><a class="dropdown__link" href="/community/coding-guide">Coding guide</a></li><li><a class="dropdown__link" href="/community/testing">Testing guide</a></li><li><a class="dropdown__link" href="/community/issue-report">Issue report guide</a></li><li><a class="dropdown__link" href="/community/release-guide">Release guide</a></li><li><a class="dropdown__link" href="/community/presentations">Presentations</a></li><li><a class="dropdown__link" href="/community/bookkeeper-proposals">BookKeeper proposals (BP)</a></li></ul></div><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Project</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/project/who">Who are we?</a></li><li><a class="dropdown__link" href="/project/bylaws">Bylaws</a></li><li><a href="https://apache.org/licenses" target="_blank" rel="noopener noreferrer" class="dropdown__link">License<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a class="dropdown__link" href="/project/privacy">Privacy policy</a></li><li><a href="https://www.apache.org/foundation/sponsorship.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Sponsorship<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a href="https://www.apache.org/foundation/thanks.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Thanks<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div></div><div class="navbar__items navbar__items--right"><div class="navbar__item dropdown dropdown--hoverable dropdown--right"><a class="navbar__link" aria-haspopup="true" aria-expanded="false" role="button" href="/docs/admin/autorecovery">4.17.0</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/docs/next/development/codebase">Next</a></li><li><a aria-current="page" class="dropdown__link dropdown__link--active" href="/docs/development/codebase">4.17.0</a></li><li><a class="dropdown__link" href="/docs/4.16.5/development/codebase">4.16.5</a></li><li><a class="dropdown__link" href="/docs/4.15.5/development/codebase">4.15.5</a></li><li><a class="dropdown__link" href="/docs/4.14.8/development/codebase">4.14.8</a></li><li><a class="dropdown__link" href="/docs/4.13.0/development/codebase">4.13.0</a></li><li><a class="dropdown__link" href="/docs/4.12.1/development/codebase">4.12.1</a></li><li><a class="dropdown__link" href="/docs/4.11.1/development/codebase">4.11.1</a></li><li><a class="dropdown__link" href="/docs/4.10.0/development/codebase">4.10.0</a></li><li><a class="dropdown__link" href="/docs/4.9.2/development/codebase">4.9.2</a></li><li><a class="dropdown__link" href="/docs/4.8.2/development/codebase">4.8.2</a></li><li><a class="dropdown__link" href="/docs/4.7.3/development/codebase">4.7.3</a></li><li><a class="dropdown__link" href="/docs/4.6.2/development/codebase">4.6.2</a></li><li><a class="dropdown__link" href="/docs/4.5.1/development/codebase">4.5.1</a></li></ul></div><a class="navbar__item navbar__link" href="/releases">Download</a><div class="toggle_vylO colorModeToggle_DEke"><button class="clean-btn toggleButton_gllP toggleButtonDisabled_aARS" type="button" disabled="" title="Switch between dark and light mode (currently light mode)" aria-label="Switch between dark and light mode (currently light mode)" aria-live="polite"><svg viewBox="0 0 24 24" width="24" height="24" class="lightToggleIcon_pyhR"><path fill="currentColor" d="M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"></path></svg><svg viewBox="0 0 24 24" width="24" height="24" class="darkToggleIcon_wfgR"><path fill="currentColor" d="M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"></path></svg></button></div><div class="searchBox_ZlJk"></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div></nav><div id="docusaurus_skipToContent_fallback" class="main-wrapper mainWrapper_z2l0 docsWrapper_BCFX"><button aria-label="Scroll back to top" class="clean-btn theme-back-to-top-button backToTopButton_sjWU" type="button"></button><div class="docPage__5DB"><main class="docMainContainer_gTbr docMainContainerEnhanced_Uz_u"><div class="container padding-top--md padding-bottom--lg"><div class="row"><div class="col docItemCol_VOVn"><div class="docItemContainer_Djhp"><article><span class="theme-doc-version-badge badge badge--secondary">Version: 4.17.0</span><div class="theme-doc-markdown markdown"><header><h1>The BookKeeper codebase</h1></header></div></article><nav class="pagination-nav docusaurus-mt-lg" aria-label="Docs pages navigation"></nav></div></div></div></div></main></div></div><footer class="footer footer--dark"><div class="container container-fluid"><div class="row footer__links"><div class="col footer__col"><div class="footer__title">Documentation</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/docs/overview">Overview</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/getting-started/installation">Getting started</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/deployment/manual">Deployment</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/admin/bookies">Administration</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/api/overview">API</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/security/overview">Security</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/development/protocol">Development</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/reference/config">Reference</a></li></ul></div><div class="col footer__col"><div class="footer__title">Community</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/community/mailing-lists">Mailing lists</a></li><li class="footer__item"><a class="footer__link-item" href="/community/slack">Slack</a></li><li class="footer__item"><a href="https://github.com/apache/bookkeeper" target="_blank" rel="noopener noreferrer" class="footer__link-item">Github<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a href="https://twitter.com/asfbookkeeper" target="_blank" rel="noopener noreferrer" class="footer__link-item">Twitter<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div><div class="col footer__col"><div class="footer__title">Project</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/project/who">Who are we?</a></li><li class="footer__item"><a class="footer__link-item" href="/project/bylaws">Bylaws</a></li><li class="footer__item"><a href="https://apache.org/licenses" target="_blank" rel="noopener noreferrer" class="footer__link-item">License<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a class="footer__link-item" href="/project/privacy">Privacy policy</a></li><li class="footer__item"><a href="https://www.apache.org/foundation/sponsorship.html" target="_blank" rel="noopener noreferrer" class="footer__link-item">Sponsorship<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a href="https://www.apache.org/foundation/thanks.html" target="_blank" rel="noopener noreferrer" class="footer__link-item">Thanks<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div></div><div class="footer__bottom text--center"><div class="footer__copyright"><footer class="footer">
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navbar__brand" href="/"><div class="navbar__logo"><img src="/img/bk-logo.svg" alt="Apache Bookkeeper" class="themedImage_ToTc themedImage--light_HNdA"><img src="/img/bk-logo.svg" alt="Apache Bookkeeper" class="themedImage_ToTc themedImage--dark_i4oU"></div><b class="navbar__title text--truncate">Apache BookKeeper</b></a><a class="navbar__item navbar__link" href="/docs/overview/">Documentation</a><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Community</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/community/mailing-lists">Mailing lists</a></li><li><a class="dropdown__link" href="/community/slack">Slack</a></li><li><a href="https://github.com/apache/bookkeeper/issues" target="_blank" rel="noopener noreferrer" class="dropdown__link">Github issues<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a class="dropdown__link" href="/community/releases">Release management</a></li><li><a class="dropdown__link" href="/community/meeting">Community meetings</a></li><li><a class="dropdown__link" href="/community/contributing">Contribution guide</a></li><li><a class="dropdown__link" href="/community/coding-guide">Coding guide</a></li><li><a class="dropdown__link" href="/community/testing">Testing guide</a></li><li><a class="dropdown__link" href="/community/issue-report">Issue report guide</a></li><li><a class="dropdown__link" href="/community/release-guide">Release guide</a></li><li><a class="dropdown__link" href="/community/presentations">Presentations</a></li><li><a class="dropdown__link" href="/community/bookkeeper-proposals">BookKeeper proposals (BP)</a></li></ul></div><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Project</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/project/who">Who are we?</a></li><li><a class="dropdown__link" href="/project/bylaws">Bylaws</a></li><li><a href="https://apache.org/licenses" target="_blank" rel="noopener noreferrer" class="dropdown__link">License<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a class="dropdown__link" href="/project/privacy">Privacy policy</a></li><li><a href="https://www.apache.org/foundation/sponsorship.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Sponsorship<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a href="https://www.apache.org/foundation/thanks.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Thanks<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div></div><div class="navbar__items navbar__items--right"><div class="navbar__item dropdown dropdown--hoverable dropdown--right"><a class="navbar__link" aria-haspopup="true" aria-expanded="false" role="button" href="/docs/overview/">4.17.0</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/docs/next/development/codebase">Next</a></li><li><a aria-current="page" class="dropdown__link dropdown__link--active" href="/docs/development/codebase">4.17.0</a></li><li><a class="dropdown__link" href="/docs/4.16.5/development/codebase">4.16.5</a></li><li><a class="dropdown__link" href="/docs/4.15.5/development/codebase">4.15.5</a></li><li><a class="dropdown__link" href="/docs/4.14.8/development/codebase">4.14.8</a></li><li><a class="dropdown__link" href="/docs/4.13.0/development/codebase">4.13.0</a></li><li><a class="dropdown__link" href="/docs/4.12.1/development/codebase">4.12.1</a></li><li><a class="dropdown__link" href="/docs/4.11.1/development/codebase">4.11.1</a></li><li><a class="dropdown__link" href="/docs/4.10.0/development/codebase">4.10.0</a></li><li><a class="dropdown__link" href="/docs/4.9.2/development/codebase">4.9.2</a></li><li><a class="dropdown__link" href="/docs/4.8.2/development/codebase">4.8.2</a></li><li><a class="dropdown__link" href="/docs/4.7.3/development/codebase">4.7.3</a></li><li><a class="dropdown__link" href="/docs/4.6.2/development/codebase">4.6.2</a></li><li><a class="dropdown__link" href="/docs/4.5.1/development/codebase">4.5.1</a></li></ul></div><a class="navbar__item navbar__link" href="/releases">Download</a><div class="toggle_vylO colorModeToggle_DEke"><button class="clean-btn toggleButton_gllP toggleButtonDisabled_aARS" type="button" disabled="" title="Switch between dark and light mode (currently light mode)" aria-label="Switch between dark and light mode (currently light mode)" aria-live="polite"><svg viewBox="0 0 24 24" width="24" height="24" class="lightToggleIcon_pyhR"><path fill="currentColor" d="M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"></path></svg><svg viewBox="0 0 24 24" width="24" height="24" class="darkToggleIcon_wfgR"><path fill="currentColor" d="M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"></path></svg></button></div><div class="searchBox_ZlJk"></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div></nav><div id="docusaurus_skipToContent_fallback" class="main-wrapper mainWrapper_z2l0 docsWrapper_BCFX"><button aria-label="Scroll back to top" class="clean-btn theme-back-to-top-button backToTopButton_sjWU" type="button"></button><div class="docPage__5DB"><main class="docMainContainer_gTbr docMainContainerEnhanced_Uz_u"><div class="container padding-top--md padding-bottom--lg"><div class="row"><div class="col docItemCol_VOVn"><div class="docItemContainer_Djhp"><article><span class="theme-doc-version-badge badge badge--secondary">Version: 4.17.0</span><div class="theme-doc-markdown markdown"><header><h1>The BookKeeper codebase</h1></header></div></article><nav class="pagination-nav docusaurus-mt-lg" aria-label="Docs pages navigation"></nav></div></div></div></div></main></div></div><footer class="footer footer--dark"><div class="container container-fluid"><div class="row footer__links"><div class="col footer__col"><div class="footer__title">Documentation</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/docs/overview">Overview</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/getting-started/installation">Getting started</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/deployment/manual">Deployment</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/admin/bookies">Administration</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/api/overview">API</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/security/overview">Security</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/development/protocol">Development</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/reference/config">Reference</a></li></ul></div><div class="col footer__col"><div class="footer__title">Community</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/community/mailing-lists">Mailing lists</a></li><li class="footer__item"><a class="footer__link-item" href="/community/slack">Slack</a></li><li class="footer__item"><a href="https://github.com/apache/bookkeeper" target="_blank" rel="noopener noreferrer" class="footer__link-item">Github<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a href="https://twitter.com/asfbookkeeper" target="_blank" rel="noopener noreferrer" class="footer__link-item">Twitter<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div><div class="col footer__col"><div class="footer__title">Project</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/project/who">Who are we?</a></li><li class="footer__item"><a class="footer__link-item" href="/project/bylaws">Bylaws</a></li><li class="footer__item"><a href="https://apache.org/licenses" target="_blank" rel="noopener noreferrer" class="footer__link-item">License<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a class="footer__link-item" href="/project/privacy">Privacy policy</a></li><li class="footer__item"><a href="https://www.apache.org/foundation/sponsorship.html" target="_blank" rel="noopener noreferrer" class="footer__link-item">Sponsorship<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a href="https://www.apache.org/foundation/thanks.html" target="_blank" rel="noopener noreferrer" class="footer__link-item">Thanks<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div></div><div class="footer__bottom text--center"><div class="footer__copyright"><footer class="footer">
         <div class="container">
           <div class="content has-text-centered">
             <p>
@@ -22,7 +22,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/development/protocol/index.html b/content/docs/development/protocol/index.html
index a130b81..d698b5d 100644
--- a/content/docs/development/protocol/index.html
+++ b/content/docs/development/protocol/index.html
@@ -4,12 +4,12 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">The BookKeeper protocol | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/development/protocol"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.17.0"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.17.0"><meta data-rh="true" name="docsearch:version" content="4.17.0"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.17.0"><meta data-rh="true" property="og:title" content="The BookKeeper protocol | Apache BookKeeper"><meta data-rh="true" name="description" content="BookKeeper uses a special replication protocol for guaranteeing persistent storage of entries in an ensemble of bookies."><meta data-rh="true" property="og:description" content="BookKeeper uses a special replication protocol for guaranteeing persistent storage of entries in an ensemble of bookies."><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/development/protocol"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/development/protocol" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/development/protocol" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
-<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navbar__brand" href="/"><div class="navbar__logo"><img src="/img/bk-logo.svg" alt="Apache Bookkeeper" class="themedImage_ToTc themedImage--light_HNdA"><img src="/img/bk-logo.svg" alt="Apache Bookkeeper" class="themedImage_ToTc themedImage--dark_i4oU"></div><b class="navbar__title text--truncate">Apache BookKeeper</b></a><a class="navbar__item navbar__link" href="/docs/overview/">Documentation</a><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Community</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/community/mailing-lists">Mailing lists</a></li><li><a class="dropdown__link" href="/community/slack">Slack</a></li><li><a href="https://github.com/apache/bookkeeper/issues" target="_blank" rel="noopener noreferrer" class="dropdown__link">Github issues<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a class="dropdown__link" href="/community/releases">Release management</a></li><li><a class="dropdown__link" href="/community/meeting">Community meetings</a></li><li><a class="dropdown__link" href="/community/contributing">Contribution guide</a></li><li><a class="dropdown__link" href="/community/coding-guide">Coding guide</a></li><li><a class="dropdown__link" href="/community/testing">Testing guide</a></li><li><a class="dropdown__link" href="/community/issue-report">Issue report guide</a></li><li><a class="dropdown__link" href="/community/release-guide">Release guide</a></li><li><a class="dropdown__link" href="/community/presentations">Presentations</a></li><li><a class="dropdown__link" href="/community/bookkeeper-proposals">BookKeeper proposals (BP)</a></li></ul></div><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Project</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/project/who">Who are we?</a></li><li><a class="dropdown__link" href="/project/bylaws">Bylaws</a></li><li><a href="https://apache.org/licenses" target="_blank" rel="noopener noreferrer" class="dropdown__link">License<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a class="dropdown__link" href="/project/privacy">Privacy policy</a></li><li><a href="https://www.apache.org/foundation/sponsorship.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Sponsorship<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a href="https://www.apache.org/foundation/thanks.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Thanks<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div></div><div class="navbar__items navbar__items--right"><div class="navbar__item dropdown dropdown--hoverable dropdown--right"><a class="navbar__link" aria-haspopup="true" aria-expanded="false" role="button" href="/docs/admin/autorecovery">4.17.0</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/docs/next/development/protocol">Next</a></li><li><a aria-current="page" class="dropdown__link dropdown__link--active" href="/docs/development/protocol">4.17.0</a></li><li><a class="dropdown__link" href="/docs/4.16.5/development/protocol">4.16.5</a></li><li><a class="dropdown__link" href="/docs/4.15.5/development/protocol">4.15.5</a></li><li><a class="dropdown__link" href="/docs/4.14.8/development/protocol">4.14.8</a></li><li><a class="dropdown__link" href="/docs/4.13.0/development/protocol">4.13.0</a></li><li><a class="dropdown__link" href="/docs/4.12.1/development/protocol">4.12.1</a></li><li><a class="dropdown__link" href="/docs/4.11.1/development/protocol">4.11.1</a></li><li><a class="dropdown__link" href="/docs/4.10.0/development/protocol">4.10.0</a></li><li><a class="dropdown__link" href="/docs/4.9.2/development/protocol">4.9.2</a></li><li><a class="dropdown__link" href="/docs/4.8.2/development/protocol">4.8.2</a></li><li><a class="dropdown__link" href="/docs/4.7.3/development/protocol">4.7.3</a></li><li><a class="dropdown__link" href="/docs/4.6.2/development/protocol">4.6.2</a></li><li><a class="dropdown__link" href="/docs/4.5.1/development/protocol">4.5.1</a></li></ul></div><a class="navbar__item navbar__link" href="/releases">Download</a><div class="toggle_vylO colorModeToggle_DEke"><button class="clean-btn toggleButton_gllP toggleButtonDisabled_aARS" type="button" disabled="" title="Switch between dark and light mode (currently light mode)" aria-label="Switch between dark and light mode (currently light mode)" aria-live="polite"><svg viewBox="0 0 24 24" width="24" height="24" class="lightToggleIcon_pyhR"><path fill="currentColor" d="M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"></path></svg><svg viewBox="0 0 24 24" width="24" height="24" class="darkToggleIcon_wfgR"><path fill="currentColor" d="M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"></path></svg></button></div><div class="searchBox_ZlJk"></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div></nav><div id="docusaurus_skipToContent_fallback" class="main-wrapper mainWrapper_z2l0 docsWrapper_BCFX"><button aria-label="Scroll back to top" class="clean-btn theme-back-to-top-button backToTopButton_sjWU" type="button"></button><div class="docPage__5DB"><main class="docMainContainer_gTbr docMainContainerEnhanced_Uz_u"><div class="container padding-top--md padding-bottom--lg"><div class="row"><div class="col docItemCol_VOVn"><div class="docItemContainer_Djhp"><article><span class="theme-doc-version-badge badge badge--secondary">Version: 4.17.0</span><div class="tocCollapsible_ETCw theme-doc-toc-mobile tocMobile_ITEo"><button type="button" class="clean-btn tocCollapsibleButton_TO0P">On this page</button></div><div class="theme-doc-markdown markdown"><header><h1>The BookKeeper protocol</h1></header><p>BookKeeper uses a special replication protocol for guaranteeing persistent storage of entries in an ensemble of bookies.</p><blockquote><p>This document assumes that you have some knowledge of leader election and log replication and how these can be used in a distributed system. If not, we recommend reading the <a href="/docs/api/ledger-api#example-application">example application</a> documentation first.</p></blockquote><h2 class="anchor anchorWithStickyNavbar_LWe7" id="ledgers">Ledgers<a href="#ledgers" class="hash-link" aria-label="Direct link to Ledgers" title="Direct link to Ledgers">​</a></h2><p>Ledgers are the basic building block of BookKeeper and the level at which BookKeeper makes its persistent storage guarantees. A replicated log consists of an ordered list of ledgers. See <a href="#ledgers-to-logs">Ledgers to logs</a> for info on building a replicated log from ledgers.</p><p>Ledgers are composed of metadata and entries. The metadata is stored in ZooKeeper, which provides a <em>compare-and-swap</em> (CAS) operation. Entries are stored on storage nodes known as bookies.</p><p>A ledger has a single writer and multiple readers (SWMR).</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="ledger-metadata">Ledger metadata<a href="#ledger-metadata" class="hash-link" aria-label="Direct link to Ledger metadata" title="Direct link to Ledger metadata">​</a></h3><p>A ledger&#x27;s metadata contains the following:</p><table><thead><tr><th align="left">Parameter</th><th align="left">Name</th><th align="left">Meaning</th></tr></thead><tbody><tr><td align="left">Identifer</td><td align="left"></td><td align="left">A 64-bit integer, unique within the system</td></tr><tr><td align="left">Ensemble size</td><td align="left"><strong>E</strong></td><td align="left">The number of nodes the ledger is stored on</td></tr><tr><td align="left">Write quorum size</td><td align="left"><strong>Q<sub>w</sub></strong></td><td align="left">The number of nodes each entry is written to. In effect, the max replication for the entry.</td></tr><tr><td align="left">Ack quorum size</td><td align="left"><strong>Q<sub>a</sub></strong></td><td align="left">The number of nodes an entry must be acknowledged on. In effect, the minimum replication for the entry.</td></tr><tr><td align="left">Current state</td><td align="left"></td><td align="left">The current status of the ledger. One of <code>OPEN</code>, <code>CLOSED</code>, or <code>IN_RECOVERY</code>.</td></tr><tr><td align="left">Last entry</td><td align="left"></td><td align="left">The last entry in the ledger or <code>NULL</code> is the current state is not <code>CLOSED</code>.</td></tr></tbody></table><p>In addition, each ledger&#x27;s metadata consists of one or more <em>fragments</em>. Each fragment is either</p><ul><li>the first entry of a fragment or</li><li>a list of bookies for the fragment.</li></ul><p>When creating a ledger, the following invariant must hold:</p><p><strong>E &gt;= Q<sub>w</sub> &gt;= Qa</strong></p><p>Thus, the ensemble size (<strong>E</strong>) must be larger than the write quorum size (<strong>Q<sub>w</sub></strong>), which must in turn be larger than the ack quorum size (<strong>Q<sub>a</sub></strong>). If that condition does not hold, then the ledger creation operation will fail.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="ensembles">Ensembles<a href="#ensembles" class="hash-link" aria-label="Direct link to Ensembles" title="Direct link to Ensembles">​</a></h3><p>When a ledger is created, <strong>E</strong> bookies are chosen for the entries of that ledger. The bookies are the initial ensemble of the ledger. A ledger can have multiple ensembles, but an entry has only one ensemble. Changes in the ensemble involve a new fragment being added to the ledger.</p><p>Take the following example. In this ledger, with ensemble size of 3, there are two fragments and thus two ensembles, one starting at entry 0, the second at entry 12. The second ensemble differs from the first only by its first element. This could be because bookie1 has failed and therefore had to be replaced.</p><table><thead><tr><th align="left">First entry</th><th align="left">Bookies</th></tr></thead><tbody><tr><td align="left">0</td><td align="left">B1, B2, B3</td></tr><tr><td align="left">12</td><td align="left">B4, B2, B3</td></tr></tbody></table><h3 class="anchor anchorWithStickyNavbar_LWe7" id="write-quorums">Write quorums<a href="#write-quorums" class="hash-link" aria-label="Direct link to Write quorums" title="Direct link to Write quorums">​</a></h3><p>Each entry in the log is written to <strong>Q<sub>w</sub></strong> nodes. This is considered the write quorum for that entry. The write quorum is the subsequence of the ensemble, <strong>Q<sub>w</sub></strong> in length, and starting at the bookie at index (entryid % <strong>E</strong>).</p><p>For example, in a ledger of <strong>E</strong> = 4, <strong>Q<sub>w</sub></strong> = 3, and <strong>Q<sub>a</sub></strong> = 2, with an ensemble consisting of B1, B2, B3, and B4, the write quorums for the first 6 entries will be:</p><table><thead><tr><th align="left">Entry</th><th align="left">Write quorum</th></tr></thead><tbody><tr><td align="left">0</td><td align="left">B1, B2, B3</td></tr><tr><td align="left">1</td><td align="left">B2, B3, B4</td></tr><tr><td align="left">2</td><td align="left">B3, B4, B1</td></tr><tr><td align="left">3</td><td align="left">B4, B1, B2</td></tr><tr><td align="left">4</td><td align="left">B1, B2, B3</td></tr><tr><td align="left">5</td><td align="left">B2, B3, B4</td></tr></tbody></table><p>There are only <strong>E</strong> distinct write quorums in any ensemble. If <strong>Q<sub>w</sub></strong> = <strong>E</strong>, then there is only one, as no striping occurs.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="ack-quorums">Ack quorums<a href="#ack-quorums" class="hash-link" aria-label="Direct link to Ack quorums" title="Direct link to Ack quorums">​</a></h3><p>The ack quorum for an entry is any subset of the write quorum of size <strong>Q<sub>a</sub></strong>. If <strong>Q<sub>a</sub></strong> bookies acknowledge an entry, it means it has been fully replicated.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="guarantees">Guarantees<a href="#guarantees" class="hash-link" aria-label="Direct link to Guarantees" title="Direct link to Guarantees">​</a></h3><p>The system can tolerate <strong>Q<sub>a</sub></strong> – 1 failures without data loss.</p><p>Bookkeeper guarantees that:</p><ol><li>All updates to a ledger will be read in the same order as they were written.</li><li>All clients will read the same sequence of updates from the ledger.</li></ol><h2 class="anchor anchorWithStickyNavbar_LWe7" id="writing-to-ledgers">Writing to ledgers<a href="#writing-to-ledgers" class="hash-link" aria-label="Direct link to Writing to ledgers" title="Direct link to Writing to ledgers">​</a></h2><p>writer, ensuring that entry ids are sequential is trivial. A bookie acknowledges a write once it has been persisted to disk and is therefore durable. Once <strong>Q<sub>a</sub></strong> bookies from the write quorum acknowledge the write, the write is acknowledged to the client, but only if all entries with lower entry ids in the ledger have already been acknowledged to the client.</p><p>The entry written contains the ledger id, the entry id, the last add confirmed and the payload. The last add confirmed is the last entry which had been acknowledged to the client when this entry was written. Sending this with the entry speeds up recovery of the ledger in the case that the writer crashes.</p><p>Another client can also read entries in the ledger up as far as the last add confirmed, as we guarantee that all entries thus far have been replicated on Qa nodes, and therefore all future readers will be able to also read it. However, to read like this, the ledger should be opened with a non-fencing open. Otherwise, it would kill the writer.</p><p>If a node fails to acknowledge a write, the writer will create a new ensemble by replacing the failed node in the current ensemble. It creates a new fragment with this ensemble, starting from the first message that has not been acknowledged to the client. Creating the new fragment involves making a CAS write to the metadata. If the CAS write fails, someone else has modified something in the ledger metadata. This concurrent modification could have been caused by recovery or rereplication. We reread the metadata. If the state of the ledger is no longer <code>OPEN</code>, we send an error to the client for any outstanding writes. Otherwise, we try to replace the failed node again.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="closing-a-ledger-as-a-writer">Closing a ledger as a writer<a href="#closing-a-ledger-as-a-writer" class="hash-link" aria-label="Direct link to Closing a ledger as a writer" title="Direct link to Closing a ledger as a writer">​</a></h3><p>Closing a ledger is straightforward for a writer. The writer makes a CAS write to the metadata, changing the state to <code>CLOSED</code> and setting the last entry of the ledger to the last entry which we have acknowledged to the client.</p><p>If the CAS write fails, it means someone else has modified the metadata. We reread the metadata, and retry closing as long as the state of the ledger is still <code>OPEN</code>. If the state is <code>IN_RECOVERY</code> we send an error to the client. If the state is <code>CLOSED</code> and the last entry is the same as the last entry we have acknowledged to the client, we complete the close operation successfully. If the last entry is different from what we have acknowledged to the client, we send an error to the client.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="closing-a-ledger-as-a-reader">Closing a ledger as a reader<a href="#closing-a-ledger-as-a-reader" class="hash-link" aria-label="Direct link to Closing a ledger as a reader" title="Direct link to Closing a ledger as a reader">​</a></h3><p>A reader can also force a ledger to close. Forcing the ledger to close will prevent any writer from adding new entries to the ledger. This is called fencing. This can occur when a writer has crashed or become unavailable, and a new writer wants to take over writing to the log. The new writer must ensure that it has seen all updates from the previous writer, and prevent the previous writer from making any new updates before making any updates of its own.</p><p>To recover a ledger, we first update the state in the metadata to IN_RECOVERY. We then send a fence message to all the bookies in the last fragment of the ledger. When a bookie receives a fence message for a ledger, the fenced state of the ledger is persisted to disk. Once we receive a response from at least (<strong>Q<sub>w</sub></strong> - <strong>Q<sub>a</sub></strong>)+1 bookies from each write quorum in the ensemble, the ledger is fenced.</p><p>By ensuring we have received a response from at last (<strong>Q<sub>w</sub></strong> - <strong>Q<sub>a</sub></strong>) + 1 bookies in each write quorum, we ensure that, if the old writer is alive and tries to add a new entry there will be no write quorum in which Qa bookies will accept the write. If the old writer tries to update the ensemble, it will fail on the CAS metadata write, and then see that the ledger is in IN_RECOVERY state, and that it therefore shouldn’t try to write to it.</p><p>The old writer will be able to write entries to individual bookies (we can’t guarantee that the fence message reaches all bookies), but as it will not be able reach ack quorum, it will not be able to send a success response to its client. The client will get a LedgerFenced error instead.</p><p>It is important to note that when you get a ledger fenced message for an entry, it doesn’t mean that the entry has not been written. It means that the entry may or may not have been written, and this can only be determined after the ledger is recovered. In effect, LedgerFenced should be treated like a timeout.</p><p>Once the ledger is fenced, recovery can begin. Recovery means finding the last entry of the ledger and closing the ledger. To find the last entry of the ledger, the client asks all bookies for the highest last add confirmed value they have seen. It waits until it has received a response at least (<strong>Q<sub>w</sub></strong> - <strong>Q<sub>a</sub></strong>) + 1 bookies from each write quorum, and takes the highest response as the entry id to start reading forward from. It then starts reading forward in the ledger, one entry at a time, replicating all entries it sees to the entire write quorum for that entry. Once it can no longer read any more entries, it updates the state in the metadata to <code>CLOSED</code>, and sets the last entry of the ledger to the last entry it wrote. Multiple readers can try to recovery a ledger at the same time, but as the metadata write is CAS they will all converge on the same last entry of the ledger.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="ledgers-to-logs">Ledgers to logs<a href="#ledgers-to-logs" class="hash-link" aria-label="Direct link to Ledgers to logs" title="Direct link to Ledgers to logs">​</a></h2><p>In BookKeeper, ledgers can be used to build a replicated log for your system. All guarantees provided by BookKeeper are at the ledger level. Guarantees on the whole log can be built using the ledger guarantees and any consistent datastore with a compare-and-swap (CAS) primitive. BookKeeper uses ZooKeeper as the datastore but others could theoretically be used.</p><p>A log in BookKeeper is built from some number of ledgers, with a fixed order. A ledger represents a single segment of the log. A ledger could be the whole period that one node was the leader, or there could be multiple ledgers for a single period of leadership. However, there can only ever be one leader that adds entries to a single ledger. Ledgers cannot be reopened for writing once they have been closed/recovered.</p><blockquote><p>BookKeeper does <em>not</em> provide leader election. You must use a system like ZooKeeper for this.</p></blockquote><p>In many cases, leader election is really leader suggestion. Multiple nodes could think that they are leader at any one time. It is the job of the log to guarantee that only one can write changes to the system.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="opening-a-log">Opening a log<a href="#opening-a-log" class="hash-link" aria-label="Direct link to Opening a log" title="Direct link to Opening a log">​</a></h3><p>Once a node thinks it is leader for a particular log, it must take the following steps:</p><ol><li>Read the list of ledgers for the log</li><li>Fence the last two ledgers in the list. Two ledgers are fenced because the writer may be writing to the second-to-last ledger while adding the last ledger to the list.</li><li>Create a new ledger</li><li>Add the new ledger to the ledger list</li><li>Write the new ledger back to the datastore using a CAS operation</li></ol><p>The fencing in step 2 and the CAS operation in step 5 prevent two nodes from thinking that they have leadership at any one time.</p><p>The CAS operation will fail if the list of ledgers has changed between reading it and writing back the new list. When the CAS operation fails, the leader must start at step 1 again. Even better, they should check that they are in fact still the leader with the system that is providing leader election. The protocol will work correctly without this step, though it will be able to make very little progress if two nodes think they are leader and are duelling for the log.</p><p>The node must not serve any writes until step 5 completes successfully.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="rolling-ledgers">Rolling ledgers<a href="#rolling-ledgers" class="hash-link" aria-label="Direct link to Rolling ledgers" title="Direct link to Rolling ledgers">​</a></h3><p>The leader may wish to close the current ledger and open a new one every so often. Ledgers can only be deleted as a whole. If you don&#x27;t roll the log, you won&#x27;t be able to clean up old entries in the log without a leader change. By closing the current ledger and adding a new one, the leader allows the log to be truncated whenever that data is no longer needed. The steps for rolling the log is similar to those for creating a new ledger.</p><ol><li>Create a new ledger</li><li>Add the new ledger to the ledger list</li><li>Write the new ledger list to the datastore using CAS</li><li>Close the previous ledger</li></ol><p>By deferring the closing of the previous ledger until step 4, we can continue writing to the log while we perform metadata update operations to add the new ledger. This is safe as long as you fence the last 2 ledgers when acquiring leadership.</p></div></article><nav class="pagination-nav docusaurus-mt-lg" aria-label="Docs pages navigation"></nav></div></div><div class="col col--3"><div class="tableOfContents_bqdL thin-scrollbar theme-doc-toc-desktop"><ul class="table-of-contents table-of-contents__left-border"><li><a href="#ledgers" class="table-of-contents__link toc-highlight">Ledgers</a><ul><li><a href="#ledger-metadata" class="table-of-contents__link toc-highlight">Ledger metadata</a></li><li><a href="#ensembles" class="table-of-contents__link toc-highlight">Ensembles</a></li><li><a href="#write-quorums" class="table-of-contents__link toc-highlight">Write quorums</a></li><li><a href="#ack-quorums" class="table-of-contents__link toc-highlight">Ack quorums</a></li><li><a href="#guarantees" class="table-of-contents__link toc-highlight">Guarantees</a></li></ul></li><li><a href="#writing-to-ledgers" class="table-of-contents__link toc-highlight">Writing to ledgers</a><ul><li><a href="#closing-a-ledger-as-a-writer" class="table-of-contents__link toc-highlight">Closing a ledger as a writer</a></li><li><a href="#closing-a-ledger-as-a-reader" class="table-of-contents__link toc-highlight">Closing a ledger as a reader</a></li></ul></li><li><a href="#ledgers-to-logs" class="table-of-contents__link toc-highlight">Ledgers to logs</a><ul><li><a href="#opening-a-log" class="table-of-contents__link toc-highlight">Opening a log</a></li><li><a href="#rolling-ledgers" class="table-of-contents__link toc-highlight">Rolling ledgers</a></li></ul></li></ul></div></div></div></div></main></div></div><footer class="footer footer--dark"><div class="container container-fluid"><div class="row footer__links"><div class="col footer__col"><div class="footer__title">Documentation</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/docs/overview">Overview</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/getting-started/installation">Getting started</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/deployment/manual">Deployment</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/admin/bookies">Administration</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/api/overview">API</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/security/overview">Security</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/development/protocol">Development</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/reference/config">Reference</a></li></ul></div><div class="col footer__col"><div class="footer__title">Community</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/community/mailing-lists">Mailing lists</a></li><li class="footer__item"><a class="footer__link-item" href="/community/slack">Slack</a></li><li class="footer__item"><a href="https://github.com/apache/bookkeeper" target="_blank" rel="noopener noreferrer" class="footer__link-item">Github<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a href="https://twitter.com/asfbookkeeper" target="_blank" rel="noopener noreferrer" class="footer__link-item">Twitter<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div><div class="col footer__col"><div class="footer__title">Project</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/project/who">Who are we?</a></li><li class="footer__item"><a class="footer__link-item" href="/project/bylaws">Bylaws</a></li><li class="footer__item"><a href="https://apache.org/licenses" target="_blank" rel="noopener noreferrer" class="footer__link-item">License<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a class="footer__link-item" href="/project/privacy">Privacy policy</a></li><li class="footer__item"><a href="https://www.apache.org/foundation/sponsorship.html" target="_blank" rel="noopener noreferrer" class="footer__link-item">Sponsorship<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a href="https://www.apache.org/foundation/thanks.html" target="_blank" rel="noopener noreferrer" class="footer__link-item">Thanks<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div></div><div class="footer__bottom text--center"><div class="footer__copyright"><footer class="footer">
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navbar__brand" href="/"><div class="navbar__logo"><img src="/img/bk-logo.svg" alt="Apache Bookkeeper" class="themedImage_ToTc themedImage--light_HNdA"><img src="/img/bk-logo.svg" alt="Apache Bookkeeper" class="themedImage_ToTc themedImage--dark_i4oU"></div><b class="navbar__title text--truncate">Apache BookKeeper</b></a><a aria-current="page" class="navbar__item navbar__link navbar__link--active" href="/docs/overview/">Documentation</a><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Community</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/community/mailing-lists">Mailing lists</a></li><li><a class="dropdown__link" href="/community/slack">Slack</a></li><li><a href="https://github.com/apache/bookkeeper/issues" target="_blank" rel="noopener noreferrer" class="dropdown__link">Github issues<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a class="dropdown__link" href="/community/releases">Release management</a></li><li><a class="dropdown__link" href="/community/meeting">Community meetings</a></li><li><a class="dropdown__link" href="/community/contributing">Contribution guide</a></li><li><a class="dropdown__link" href="/community/coding-guide">Coding guide</a></li><li><a class="dropdown__link" href="/community/testing">Testing guide</a></li><li><a class="dropdown__link" href="/community/issue-report">Issue report guide</a></li><li><a class="dropdown__link" href="/community/release-guide">Release guide</a></li><li><a class="dropdown__link" href="/community/presentations">Presentations</a></li><li><a class="dropdown__link" href="/community/bookkeeper-proposals">BookKeeper proposals (BP)</a></li></ul></div><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Project</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/project/who">Who are we?</a></li><li><a class="dropdown__link" href="/project/bylaws">Bylaws</a></li><li><a href="https://apache.org/licenses" target="_blank" rel="noopener noreferrer" class="dropdown__link">License<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a class="dropdown__link" href="/project/privacy">Privacy policy</a></li><li><a href="https://www.apache.org/foundation/sponsorship.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Sponsorship<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a href="https://www.apache.org/foundation/thanks.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Thanks<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div></div><div class="navbar__items navbar__items--right"><div class="navbar__item dropdown dropdown--hoverable dropdown--right"><a class="navbar__link" aria-haspopup="true" aria-expanded="false" role="button" href="/docs/overview/">4.17.0</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/docs/next/development/protocol">Next</a></li><li><a aria-current="page" class="dropdown__link dropdown__link--active" href="/docs/development/protocol">4.17.0</a></li><li><a class="dropdown__link" href="/docs/4.16.5/development/protocol">4.16.5</a></li><li><a class="dropdown__link" href="/docs/4.15.5/development/protocol">4.15.5</a></li><li><a class="dropdown__link" href="/docs/4.14.8/development/protocol">4.14.8</a></li><li><a class="dropdown__link" href="/docs/4.13.0/development/protocol">4.13.0</a></li><li><a class="dropdown__link" href="/docs/4.12.1/development/protocol">4.12.1</a></li><li><a class="dropdown__link" href="/docs/4.11.1/development/protocol">4.11.1</a></li><li><a class="dropdown__link" href="/docs/4.10.0/development/protocol">4.10.0</a></li><li><a class="dropdown__link" href="/docs/4.9.2/development/protocol">4.9.2</a></li><li><a class="dropdown__link" href="/docs/4.8.2/development/protocol">4.8.2</a></li><li><a class="dropdown__link" href="/docs/4.7.3/development/protocol">4.7.3</a></li><li><a class="dropdown__link" href="/docs/4.6.2/development/protocol">4.6.2</a></li><li><a class="dropdown__link" href="/docs/4.5.1/development/protocol">4.5.1</a></li></ul></div><a class="navbar__item navbar__link" href="/releases">Download</a><div class="toggle_vylO colorModeToggle_DEke"><button class="clean-btn toggleButton_gllP toggleButtonDisabled_aARS" type="button" disabled="" title="Switch between dark and light mode (currently light mode)" aria-label="Switch between dark and light mode (currently light mode)" aria-live="polite"><svg viewBox="0 0 24 24" width="24" height="24" class="lightToggleIcon_pyhR"><path fill="currentColor" d="M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"></path></svg><svg viewBox="0 0 24 24" width="24" height="24" class="darkToggleIcon_wfgR"><path fill="currentColor" d="M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"></path></svg></button></div><div class="searchBox_ZlJk"></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div></nav><div id="docusaurus_skipToContent_fallback" class="main-wrapper mainWrapper_z2l0 docsWrapper_BCFX"><button aria-label="Scroll back to top" class="clean-btn theme-back-to-top-button backToTopButton_sjWU" type="button"></button><div class="docPage__5DB"><aside class="theme-doc-sidebar-container docSidebarContainer_b6E3"><div class="sidebarViewport_Xe31"><div class="sidebar_njMd"><nav aria-label="Docs sidebar" class="menu thin-scrollbar menu_SIkG"><ul class="theme-doc-sidebar-menu menu__list"><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-1 menu__list-item"><a class="menu__link" href="/docs/overview/">Overview</a></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/getting-started/installation">Getting started</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/deployment/manual">Deployment</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/admin/bookies">Administration</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/api/overview">API</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/security/overview">Security</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret menu__link--active" aria-expanded="true" href="/docs/development/protocol">Development</a></div><ul style="display:block;overflow:visible;height:auto" class="menu__list"><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link menu__link--active" aria-current="page" tabindex="0" href="/docs/development/protocol">BookKeeper protocol</a></li></ul></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/reference/config">Reference</a></div></li></ul></nav></div></div></aside><main class="docMainContainer_gTbr"><div class="container padding-top--md padding-bottom--lg"><div class="row"><div class="col docItemCol_VOVn"><div class="docItemContainer_Djhp"><article><span class="theme-doc-version-badge badge badge--secondary">Version: 4.17.0</span><div class="tocCollapsible_ETCw theme-doc-toc-mobile tocMobile_ITEo"><button type="button" class="clean-btn tocCollapsibleButton_TO0P">On this page</button></div><div class="theme-doc-markdown markdown"><header><h1>The BookKeeper protocol</h1></header><p>BookKeeper uses a special replication protocol for guaranteeing persistent storage of entries in an ensemble of bookies.</p><blockquote><p>This document assumes that you have some knowledge of leader election and log replication and how these can be used in a distributed system. If not, we recommend reading the <a href="/docs/api/ledger-api#example-application">example application</a> documentation first.</p></blockquote><h2 class="anchor anchorWithStickyNavbar_LWe7" id="ledgers">Ledgers<a href="#ledgers" class="hash-link" aria-label="Direct link to Ledgers" title="Direct link to Ledgers">​</a></h2><p>Ledgers are the basic building block of BookKeeper and the level at which BookKeeper makes its persistent storage guarantees. A replicated log consists of an ordered list of ledgers. See <a href="#ledgers-to-logs">Ledgers to logs</a> for info on building a replicated log from ledgers.</p><p>Ledgers are composed of metadata and entries. The metadata is stored in ZooKeeper, which provides a <em>compare-and-swap</em> (CAS) operation. Entries are stored on storage nodes known as bookies.</p><p>A ledger has a single writer and multiple readers (SWMR).</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="ledger-metadata">Ledger metadata<a href="#ledger-metadata" class="hash-link" aria-label="Direct link to Ledger metadata" title="Direct link to Ledger metadata">​</a></h3><p>A ledger&#x27;s metadata contains the following:</p><table><thead><tr><th align="left">Parameter</th><th align="left">Name</th><th align="left">Meaning</th></tr></thead><tbody><tr><td align="left">Identifer</td><td align="left"></td><td align="left">A 64-bit integer, unique within the system</td></tr><tr><td align="left">Ensemble size</td><td align="left"><strong>E</strong></td><td align="left">The number of nodes the ledger is stored on</td></tr><tr><td align="left">Write quorum size</td><td align="left"><strong>Q<sub>w</sub></strong></td><td align="left">The number of nodes each entry is written to. In effect, the max replication for the entry.</td></tr><tr><td align="left">Ack quorum size</td><td align="left"><strong>Q<sub>a</sub></strong></td><td align="left">The number of nodes an entry must be acknowledged on. In effect, the minimum replication for the entry.</td></tr><tr><td align="left">Current state</td><td align="left"></td><td align="left">The current status of the ledger. One of <code>OPEN</code>, <code>CLOSED</code>, or <code>IN_RECOVERY</code>.</td></tr><tr><td align="left">Last entry</td><td align="left"></td><td align="left">The last entry in the ledger or <code>NULL</code> is the current state is not <code>CLOSED</code>.</td></tr></tbody></table><p>In addition, each ledger&#x27;s metadata consists of one or more <em>fragments</em>. Each fragment is either</p><ul><li>the first entry of a fragment or</li><li>a list of bookies for the fragment.</li></ul><p>When creating a ledger, the following invariant must hold:</p><p><strong>E &gt;= Q<sub>w</sub> &gt;= Qa</strong></p><p>Thus, the ensemble size (<strong>E</strong>) must be larger than the write quorum size (<strong>Q<sub>w</sub></strong>), which must in turn be larger than the ack quorum size (<strong>Q<sub>a</sub></strong>). If that condition does not hold, then the ledger creation operation will fail.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="ensembles">Ensembles<a href="#ensembles" class="hash-link" aria-label="Direct link to Ensembles" title="Direct link to Ensembles">​</a></h3><p>When a ledger is created, <strong>E</strong> bookies are chosen for the entries of that ledger. The bookies are the initial ensemble of the ledger. A ledger can have multiple ensembles, but an entry has only one ensemble. Changes in the ensemble involve a new fragment being added to the ledger.</p><p>Take the following example. In this ledger, with ensemble size of 3, there are two fragments and thus two ensembles, one starting at entry 0, the second at entry 12. The second ensemble differs from the first only by its first element. This could be because bookie1 has failed and therefore had to be replaced.</p><table><thead><tr><th align="left">First entry</th><th align="left">Bookies</th></tr></thead><tbody><tr><td align="left">0</td><td align="left">B1, B2, B3</td></tr><tr><td align="left">12</td><td align="left">B4, B2, B3</td></tr></tbody></table><h3 class="anchor anchorWithStickyNavbar_LWe7" id="write-quorums">Write quorums<a href="#write-quorums" class="hash-link" aria-label="Direct link to Write quorums" title="Direct link to Write quorums">​</a></h3><p>Each entry in the log is written to <strong>Q<sub>w</sub></strong> nodes. This is considered the write quorum for that entry. The write quorum is the subsequence of the ensemble, <strong>Q<sub>w</sub></strong> in length, and starting at the bookie at index (entryid % <strong>E</strong>).</p><p>For example, in a ledger of <strong>E</strong> = 4, <strong>Q<sub>w</sub></strong> = 3, and <strong>Q<sub>a</sub></strong> = 2, with an ensemble consisting of B1, B2, B3, and B4, the write quorums for the first 6 entries will be:</p><table><thead><tr><th align="left">Entry</th><th align="left">Write quorum</th></tr></thead><tbody><tr><td align="left">0</td><td align="left">B1, B2, B3</td></tr><tr><td align="left">1</td><td align="left">B2, B3, B4</td></tr><tr><td align="left">2</td><td align="left">B3, B4, B1</td></tr><tr><td align="left">3</td><td align="left">B4, B1, B2</td></tr><tr><td align="left">4</td><td align="left">B1, B2, B3</td></tr><tr><td align="left">5</td><td align="left">B2, B3, B4</td></tr></tbody></table><p>There are only <strong>E</strong> distinct write quorums in any ensemble. If <strong>Q<sub>w</sub></strong> = <strong>E</strong>, then there is only one, as no striping occurs.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="ack-quorums">Ack quorums<a href="#ack-quorums" class="hash-link" aria-label="Direct link to Ack quorums" title="Direct link to Ack quorums">​</a></h3><p>The ack quorum for an entry is any subset of the write quorum of size <strong>Q<sub>a</sub></strong>. If <strong>Q<sub>a</sub></strong> bookies acknowledge an entry, it means it has been fully replicated.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="guarantees">Guarantees<a href="#guarantees" class="hash-link" aria-label="Direct link to Guarantees" title="Direct link to Guarantees">​</a></h3><p>The system can tolerate <strong>Q<sub>a</sub></strong> – 1 failures without data loss.</p><p>Bookkeeper guarantees that:</p><ol><li>All updates to a ledger will be read in the same order as they were written.</li><li>All clients will read the same sequence of updates from the ledger.</li></ol><h2 class="anchor anchorWithStickyNavbar_LWe7" id="writing-to-ledgers">Writing to ledgers<a href="#writing-to-ledgers" class="hash-link" aria-label="Direct link to Writing to ledgers" title="Direct link to Writing to ledgers">​</a></h2><p>writer, ensuring that entry ids are sequential is trivial. A bookie acknowledges a write once it has been persisted to disk and is therefore durable. Once <strong>Q<sub>a</sub></strong> bookies from the write quorum acknowledge the write, the write is acknowledged to the client, but only if all entries with lower entry ids in the ledger have already been acknowledged to the client.</p><p>The entry written contains the ledger id, the entry id, the last add confirmed and the payload. The last add confirmed is the last entry which had been acknowledged to the client when this entry was written. Sending this with the entry speeds up recovery of the ledger in the case that the writer crashes.</p><p>Another client can also read entries in the ledger up as far as the last add confirmed, as we guarantee that all entries thus far have been replicated on Qa nodes, and therefore all future readers will be able to also read it. However, to read like this, the ledger should be opened with a non-fencing open. Otherwise, it would kill the writer.</p><p>If a node fails to acknowledge a write, the writer will create a new ensemble by replacing the failed node in the current ensemble. It creates a new fragment with this ensemble, starting from the first message that has not been acknowledged to the client. Creating the new fragment involves making a CAS write to the metadata. If the CAS write fails, someone else has modified something in the ledger metadata. This concurrent modification could have been caused by recovery or rereplication. We reread the metadata. If the state of the ledger is no longer <code>OPEN</code>, we send an error to the client for any outstanding writes. Otherwise, we try to replace the failed node again.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="closing-a-ledger-as-a-writer">Closing a ledger as a writer<a href="#closing-a-ledger-as-a-writer" class="hash-link" aria-label="Direct link to Closing a ledger as a writer" title="Direct link to Closing a ledger as a writer">​</a></h3><p>Closing a ledger is straightforward for a writer. The writer makes a CAS write to the metadata, changing the state to <code>CLOSED</code> and setting the last entry of the ledger to the last entry which we have acknowledged to the client.</p><p>If the CAS write fails, it means someone else has modified the metadata. We reread the metadata, and retry closing as long as the state of the ledger is still <code>OPEN</code>. If the state is <code>IN_RECOVERY</code> we send an error to the client. If the state is <code>CLOSED</code> and the last entry is the same as the last entry we have acknowledged to the client, we complete the close operation successfully. If the last entry is different from what we have acknowledged to the client, we send an error to the client.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="closing-a-ledger-as-a-reader">Closing a ledger as a reader<a href="#closing-a-ledger-as-a-reader" class="hash-link" aria-label="Direct link to Closing a ledger as a reader" title="Direct link to Closing a ledger as a reader">​</a></h3><p>A reader can also force a ledger to close. Forcing the ledger to close will prevent any writer from adding new entries to the ledger. This is called fencing. This can occur when a writer has crashed or become unavailable, and a new writer wants to take over writing to the log. The new writer must ensure that it has seen all updates from the previous writer, and prevent the previous writer from making any new updates before making any updates of its own.</p><p>To recover a ledger, we first update the state in the metadata to IN_RECOVERY. We then send a fence message to all the bookies in the last fragment of the ledger. When a bookie receives a fence message for a ledger, the fenced state of the ledger is persisted to disk. Once we receive a response from at least (<strong>Q<sub>w</sub></strong> - <strong>Q<sub>a</sub></strong>)+1 bookies from each write quorum in the ensemble, the ledger is fenced.</p><p>By ensuring we have received a response from at last (<strong>Q<sub>w</sub></strong> - <strong>Q<sub>a</sub></strong>) + 1 bookies in each write quorum, we ensure that, if the old writer is alive and tries to add a new entry there will be no write quorum in which Qa bookies will accept the write. If the old writer tries to update the ensemble, it will fail on the CAS metadata write, and then see that the ledger is in IN_RECOVERY state, and that it therefore shouldn’t try to write to it.</p><p>The old writer will be able to write entries to individual bookies (we can’t guarantee that the fence message reaches all bookies), but as it will not be able reach ack quorum, it will not be able to send a success response to its client. The client will get a LedgerFenced error instead.</p><p>It is important to note that when you get a ledger fenced message for an entry, it doesn’t mean that the entry has not been written. It means that the entry may or may not have been written, and this can only be determined after the ledger is recovered. In effect, LedgerFenced should be treated like a timeout.</p><p>Once the ledger is fenced, recovery can begin. Recovery means finding the last entry of the ledger and closing the ledger. To find the last entry of the ledger, the client asks all bookies for the highest last add confirmed value they have seen. It waits until it has received a response at least (<strong>Q<sub>w</sub></strong> - <strong>Q<sub>a</sub></strong>) + 1 bookies from each write quorum, and takes the highest response as the entry id to start reading forward from. It then starts reading forward in the ledger, one entry at a time, replicating all entries it sees to the entire write quorum for that entry. Once it can no longer read any more entries, it updates the state in the metadata to <code>CLOSED</code>, and sets the last entry of the ledger to the last entry it wrote. Multiple readers can try to recovery a ledger at the same time, but as the metadata write is CAS they will all converge on the same last entry of the ledger.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="ledgers-to-logs">Ledgers to logs<a href="#ledgers-to-logs" class="hash-link" aria-label="Direct link to Ledgers to logs" title="Direct link to Ledgers to logs">​</a></h2><p>In BookKeeper, ledgers can be used to build a replicated log for your system. All guarantees provided by BookKeeper are at the ledger level. Guarantees on the whole log can be built using the ledger guarantees and any consistent datastore with a compare-and-swap (CAS) primitive. BookKeeper uses ZooKeeper as the datastore but others could theoretically be used.</p><p>A log in BookKeeper is built from some number of ledgers, with a fixed order. A ledger represents a single segment of the log. A ledger could be the whole period that one node was the leader, or there could be multiple ledgers for a single period of leadership. However, there can only ever be one leader that adds entries to a single ledger. Ledgers cannot be reopened for writing once they have been closed/recovered.</p><blockquote><p>BookKeeper does <em>not</em> provide leader election. You must use a system like ZooKeeper for this.</p></blockquote><p>In many cases, leader election is really leader suggestion. Multiple nodes could think that they are leader at any one time. It is the job of the log to guarantee that only one can write changes to the system.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="opening-a-log">Opening a log<a href="#opening-a-log" class="hash-link" aria-label="Direct link to Opening a log" title="Direct link to Opening a log">​</a></h3><p>Once a node thinks it is leader for a particular log, it must take the following steps:</p><ol><li>Read the list of ledgers for the log</li><li>Fence the last two ledgers in the list. Two ledgers are fenced because the writer may be writing to the second-to-last ledger while adding the last ledger to the list.</li><li>Create a new ledger</li><li>Add the new ledger to the ledger list</li><li>Write the new ledger back to the datastore using a CAS operation</li></ol><p>The fencing in step 2 and the CAS operation in step 5 prevent two nodes from thinking that they have leadership at any one time.</p><p>The CAS operation will fail if the list of ledgers has changed between reading it and writing back the new list. When the CAS operation fails, the leader must start at step 1 again. Even better, they should check that they are in fact still the leader with the system that is providing leader election. The protocol will work correctly without this step, though it will be able to make very little progress if two nodes think they are leader and are duelling for the log.</p><p>The node must not serve any writes until step 5 completes successfully.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="rolling-ledgers">Rolling ledgers<a href="#rolling-ledgers" class="hash-link" aria-label="Direct link to Rolling ledgers" title="Direct link to Rolling ledgers">​</a></h3><p>The leader may wish to close the current ledger and open a new one every so often. Ledgers can only be deleted as a whole. If you don&#x27;t roll the log, you won&#x27;t be able to clean up old entries in the log without a leader change. By closing the current ledger and adding a new one, the leader allows the log to be truncated whenever that data is no longer needed. The steps for rolling the log is similar to those for creating a new ledger.</p><ol><li>Create a new ledger</li><li>Add the new ledger to the ledger list</li><li>Write the new ledger list to the datastore using CAS</li><li>Close the previous ledger</li></ol><p>By deferring the closing of the previous ledger until step 4, we can continue writing to the log while we perform metadata update operations to add the new ledger. This is safe as long as you fence the last 2 ledgers when acquiring leadership.</p></div></article><nav class="pagination-nav docusaurus-mt-lg" aria-label="Docs pages navigation"><a class="pagination-nav__link pagination-nav__link--prev" href="/docs/security/zookeeper"><div class="pagination-nav__sublabel">Previous</div><div class="pagination-nav__label">ZooKeeper Authentication</div></a><a class="pagination-nav__link pagination-nav__link--next" href="/docs/reference/config"><div class="pagination-nav__sublabel">Next</div><div class="pagination-nav__label">BookKeeper configuration</div></a></nav></div></div><div class="col col--3"><div class="tableOfContents_bqdL thin-scrollbar theme-doc-toc-desktop"><ul class="table-of-contents table-of-contents__left-border"><li><a href="#ledgers" class="table-of-contents__link toc-highlight">Ledgers</a><ul><li><a href="#ledger-metadata" class="table-of-contents__link toc-highlight">Ledger metadata</a></li><li><a href="#ensembles" class="table-of-contents__link toc-highlight">Ensembles</a></li><li><a href="#write-quorums" class="table-of-contents__link toc-highlight">Write quorums</a></li><li><a href="#ack-quorums" class="table-of-contents__link toc-highlight">Ack quorums</a></li><li><a href="#guarantees" class="table-of-contents__link toc-highlight">Guarantees</a></li></ul></li><li><a href="#writing-to-ledgers" class="table-of-contents__link toc-highlight">Writing to ledgers</a><ul><li><a href="#closing-a-ledger-as-a-writer" class="table-of-contents__link toc-highlight">Closing a ledger as a writer</a></li><li><a href="#closing-a-ledger-as-a-reader" class="table-of-contents__link toc-highlight">Closing a ledger as a reader</a></li></ul></li><li><a href="#ledgers-to-logs" class="table-of-contents__link toc-highlight">Ledgers to logs</a><ul><li><a href="#opening-a-log" class="table-of-contents__link toc-highlight">Opening a log</a></li><li><a href="#rolling-ledgers" class="table-of-contents__link toc-highlight">Rolling ledgers</a></li></ul></li></ul></div></div></div></div></main></div></div><footer class="footer footer--dark"><div class="container container-fluid"><div class="row footer__links"><div class="col footer__col"><div class="footer__title">Documentation</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/docs/overview">Overview</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/getting-started/installation">Getting started</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/deployment/manual">Deployment</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/admin/bookies">Administration</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/api/overview">API</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/security/overview">Security</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/development/protocol">Development</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/reference/config">Reference</a></li></ul></div><div class="col footer__col"><div class="footer__title">Community</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/community/mailing-lists">Mailing lists</a></li><li class="footer__item"><a class="footer__link-item" href="/community/slack">Slack</a></li><li class="footer__item"><a href="https://github.com/apache/bookkeeper" target="_blank" rel="noopener noreferrer" class="footer__link-item">Github<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a href="https://twitter.com/asfbookkeeper" target="_blank" rel="noopener noreferrer" class="footer__link-item">Twitter<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div><div class="col footer__col"><div class="footer__title">Project</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/project/who">Who are we?</a></li><li class="footer__item"><a class="footer__link-item" href="/project/bylaws">Bylaws</a></li><li class="footer__item"><a href="https://apache.org/licenses" target="_blank" rel="noopener noreferrer" class="footer__link-item">License<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a class="footer__link-item" href="/project/privacy">Privacy policy</a></li><li class="footer__item"><a href="https://www.apache.org/foundation/sponsorship.html" target="_blank" rel="noopener noreferrer" class="footer__link-item">Sponsorship<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a href="https://www.apache.org/foundation/thanks.html" target="_blank" rel="noopener noreferrer" class="footer__link-item">Thanks<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div></div><div class="footer__bottom text--center"><div class="footer__copyright"><footer class="footer">
         <div class="container">
           <div class="content has-text-centered">
             <p>
@@ -22,7 +22,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/getting-started/concepts/index.html b/content/docs/getting-started/concepts/index.html
index 0a07a98..89c00e4 100644
--- a/content/docs/getting-started/concepts/index.html
+++ b/content/docs/getting-started/concepts/index.html
@@ -4,12 +4,12 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">BookKeeper concepts and architecture | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/getting-started/concepts"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.17.0"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.17.0"><meta data-rh="true" name="docsearch:version" content="4.17.0"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.17.0"><meta data-rh="true" property="og:title" content="BookKeeper concepts and architecture | Apache BookKeeper"><meta data-rh="true" name="description" content="BookKeeper is a service that provides persistent storage of streams of log entries---aka records---in sequences called ledgers. BookKeeper replicates stored entries across multiple servers."><meta data-rh="true" property="og:description" content="BookKeeper is a service that provides persistent storage of streams of log entries---aka records---in sequences called ledgers. BookKeeper replicates stored entries across multiple servers."><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/getting-started/concepts"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/getting-started/concepts" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/getting-started/concepts" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
-<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navbar__brand" href="/"><div class="navbar__logo"><img src="/img/bk-logo.svg" alt="Apache Bookkeeper" class="themedImage_ToTc themedImage--light_HNdA"><img src="/img/bk-logo.svg" alt="Apache Bookkeeper" class="themedImage_ToTc themedImage--dark_i4oU"></div><b class="navbar__title text--truncate">Apache BookKeeper</b></a><a class="navbar__item navbar__link" href="/docs/overview/">Documentation</a><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Community</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/community/mailing-lists">Mailing lists</a></li><li><a class="dropdown__link" href="/community/slack">Slack</a></li><li><a href="https://github.com/apache/bookkeeper/issues" target="_blank" rel="noopener noreferrer" class="dropdown__link">Github issues<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a class="dropdown__link" href="/community/releases">Release management</a></li><li><a class="dropdown__link" href="/community/meeting">Community meetings</a></li><li><a class="dropdown__link" href="/community/contributing">Contribution guide</a></li><li><a class="dropdown__link" href="/community/coding-guide">Coding guide</a></li><li><a class="dropdown__link" href="/community/testing">Testing guide</a></li><li><a class="dropdown__link" href="/community/issue-report">Issue report guide</a></li><li><a class="dropdown__link" href="/community/release-guide">Release guide</a></li><li><a class="dropdown__link" href="/community/presentations">Presentations</a></li><li><a class="dropdown__link" href="/community/bookkeeper-proposals">BookKeeper proposals (BP)</a></li></ul></div><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Project</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/project/who">Who are we?</a></li><li><a class="dropdown__link" href="/project/bylaws">Bylaws</a></li><li><a href="https://apache.org/licenses" target="_blank" rel="noopener noreferrer" class="dropdown__link">License<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a class="dropdown__link" href="/project/privacy">Privacy policy</a></li><li><a href="https://www.apache.org/foundation/sponsorship.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Sponsorship<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a href="https://www.apache.org/foundation/thanks.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Thanks<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div></div><div class="navbar__items navbar__items--right"><div class="navbar__item dropdown dropdown--hoverable dropdown--right"><a class="navbar__link" aria-haspopup="true" aria-expanded="false" role="button" href="/docs/admin/autorecovery">4.17.0</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/docs/next/getting-started/concepts">Next</a></li><li><a aria-current="page" class="dropdown__link dropdown__link--active" href="/docs/getting-started/concepts">4.17.0</a></li><li><a class="dropdown__link" href="/docs/4.16.5/getting-started/concepts">4.16.5</a></li><li><a class="dropdown__link" href="/docs/4.15.5/getting-started/concepts">4.15.5</a></li><li><a class="dropdown__link" href="/docs/4.14.8/getting-started/concepts">4.14.8</a></li><li><a class="dropdown__link" href="/docs/4.13.0/getting-started/concepts">4.13.0</a></li><li><a class="dropdown__link" href="/docs/4.12.1/getting-started/concepts">4.12.1</a></li><li><a class="dropdown__link" href="/docs/4.11.1/getting-started/concepts">4.11.1</a></li><li><a class="dropdown__link" href="/docs/4.10.0/getting-started/concepts">4.10.0</a></li><li><a class="dropdown__link" href="/docs/4.9.2/getting-started/concepts">4.9.2</a></li><li><a class="dropdown__link" href="/docs/4.8.2/getting-started/concepts">4.8.2</a></li><li><a class="dropdown__link" href="/docs/4.7.3/getting-started/concepts">4.7.3</a></li><li><a class="dropdown__link" href="/docs/4.6.2/getting-started/concepts">4.6.2</a></li><li><a class="dropdown__link" href="/docs/4.5.1/getting-started/concepts">4.5.1</a></li></ul></div><a class="navbar__item navbar__link" href="/releases">Download</a><div class="toggle_vylO colorModeToggle_DEke"><button class="clean-btn toggleButton_gllP toggleButtonDisabled_aARS" type="button" disabled="" title="Switch between dark and light mode (currently light mode)" aria-label="Switch between dark and light mode (currently light mode)" aria-live="polite"><svg viewBox="0 0 24 24" width="24" height="24" class="lightToggleIcon_pyhR"><path fill="currentColor" d="M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"></path></svg><svg viewBox="0 0 24 24" width="24" height="24" class="darkToggleIcon_wfgR"><path fill="currentColor" d="M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"></path></svg></button></div><div class="searchBox_ZlJk"></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div></nav><div id="docusaurus_skipToContent_fallback" class="main-wrapper mainWrapper_z2l0 docsWrapper_BCFX"><button aria-label="Scroll back to top" class="clean-btn theme-back-to-top-button backToTopButton_sjWU" type="button"></button><div class="docPage__5DB"><main class="docMainContainer_gTbr docMainContainerEnhanced_Uz_u"><div class="container padding-top--md padding-bottom--lg"><div class="row"><div class="col docItemCol_VOVn"><div class="docItemContainer_Djhp"><article><span class="theme-doc-version-badge badge badge--secondary">Version: 4.17.0</span><div class="tocCollapsible_ETCw theme-doc-toc-mobile tocMobile_ITEo"><button type="button" class="clean-btn tocCollapsibleButton_TO0P">On this page</button></div><div class="theme-doc-markdown markdown"><header><h1>BookKeeper concepts and architecture</h1></header><p>BookKeeper is a service that provides persistent storage of streams of log <a href="#entries">entries</a>---aka <em>records</em>---in sequences called <a href="#ledgers">ledgers</a>. BookKeeper replicates stored entries across multiple servers.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="basic-terms">Basic terms<a href="#basic-terms" class="hash-link" aria-label="Direct link to Basic terms" title="Direct link to Basic terms">​</a></h2><p>In BookKeeper:</p><ul><li>each unit of a log is an <a href="#entries"><em>entry</em></a> (aka record)</li><li>streams of log entries are called <a href="#ledgers"><em>ledgers</em></a></li><li>individual servers storing ledgers of entries are called <a href="#bookies"><em>bookies</em></a></li></ul><p>BookKeeper is designed to be reliable and resilient to a wide variety of failures. Bookies can crash, corrupt data, or discard data, but as long as there are enough bookies behaving correctly in the ensemble the service as a whole will behave correctly.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="entries">Entries<a href="#entries" class="hash-link" aria-label="Direct link to Entries" title="Direct link to Entries">​</a></h2><blockquote><p><strong>Entries</strong> contain the actual data written to ledgers, along with some important metadata.</p></blockquote><p>BookKeeper entries are sequences of bytes that are written to <a href="#ledgers">ledgers</a>. Each entry has the following fields:</p><table><thead><tr><th align="left">Field</th><th align="left">Java type</th><th align="left">Description</th></tr></thead><tbody><tr><td align="left">Ledger number</td><td align="left"><code>long</code></td><td align="left">The ID of the ledger to which the entry has been written</td></tr><tr><td align="left">Entry number</td><td align="left"><code>long</code></td><td align="left">The unique ID of the entry</td></tr><tr><td align="left">Last confirmed (LC)</td><td align="left"><code>long</code></td><td align="left">The ID of the last recorded entry</td></tr><tr><td align="left">Data</td><td align="left"><code>byte[]</code></td><td align="left">The entry&#x27;s data (written by the client application)</td></tr><tr><td align="left">Authentication code</td><td align="left"><code>byte[]</code></td><td align="left">The message auth code, which includes <em>all</em> other fields in the entry</td></tr></tbody></table><h2 class="anchor anchorWithStickyNavbar_LWe7" id="ledgers">Ledgers<a href="#ledgers" class="hash-link" aria-label="Direct link to Ledgers" title="Direct link to Ledgers">​</a></h2><blockquote><p><strong>Ledgers</strong> are the basic unit of storage in BookKeeper.</p></blockquote><p>Ledgers are sequences of entries, while each entry is a sequence of bytes. Entries are written to a ledger:</p><ul><li>sequentially, and</li><li>at most once.</li></ul><p>This means that ledgers have <em>append-only</em> semantics. Entries cannot be modified once they&#x27;ve been written to a ledger. Determining the proper write order is the responsibility of <a href="#clients">client applications</a>.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="clients-and-apis">Clients and APIs<a href="#clients-and-apis" class="hash-link" aria-label="Direct link to Clients and APIs" title="Direct link to Clients and APIs">​</a></h2><blockquote><p>BookKeeper clients have two main roles: they create and delete ledgers, and they read entries from and write entries to ledgers.</p><p>BookKeeper provides both a lower-level and a higher-level API for ledger interaction.</p></blockquote><p>There are currently two APIs that can be used for interacting with BookKeeper:</p><ul><li>The <a href="/docs/api/ledger-api">ledger API</a> is a lower-level API that enables you to interact with ledgers directly.</li><li>The <a href="/docs/api/distributedlog-api">DistributedLog API</a> is a higher-level API that enables you to use BookKeeper without directly interacting with ledgers.</li></ul><p>In general, you should choose the API based on how much granular control you need over ledger semantics. The two APIs can also both be used within a single application.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="bookies">Bookies<a href="#bookies" class="hash-link" aria-label="Direct link to Bookies" title="Direct link to Bookies">​</a></h2><blockquote><p><strong>Bookies</strong> are individual BookKeeper servers that handle ledgers (more specifically, fragments of ledgers). Bookies function as part of an ensemble.</p></blockquote><p>A bookie is an individual BookKeeper storage server. Individual bookies store fragments of ledgers, not entire ledgers (for the sake of performance). For any given ledger <strong>L</strong>, an <em>ensemble</em> is the group of bookies storing the entries in <strong>L</strong>.</p><p>Whenever entries are written to a ledger, those entries are striped across the ensemble (written to a sub-group of bookies rather than to all bookies).</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="motivation">Motivation<a href="#motivation" class="hash-link" aria-label="Direct link to Motivation" title="Direct link to Motivation">​</a></h3><blockquote><p>BookKeeper was initially inspired by the NameNode server in HDFS but its uses now extend far beyond this.</p></blockquote><p>The initial motivation for BookKeeper comes from the <a href="http://hadoop.apache.org/" target="_blank" rel="noopener noreferrer">Hadoop</a> ecosystem. In the <a href="https://cwiki.apache.org/confluence/display/HADOOP2/HDFS" target="_blank" rel="noopener noreferrer">Hadoop Distributed File System</a> (HDFS), a special node called the <a href="https://cwiki.apache.org/confluence/display/HADOOP2/NameNode" target="_blank" rel="noopener noreferrer">NameNode</a> logs all operations in a reliable fashion, which ensures that recovery is possible in case of crashes.</p><p>The NameNode, however, served only as initial inspiration for BookKeeper. The applications for BookKeeper extend far beyond this and include essentially any application that requires an append-based storage system. BookKeeper provides a number of advantages for such applications:</p><ul><li>Highly efficient writes</li><li>High fault tolerance via replication of messages within ensembles of bookies</li><li>High throughput for write operations via striping (across as many bookies as you wish)</li></ul><h2 class="anchor anchorWithStickyNavbar_LWe7" id="metadata-storage">Metadata storage<a href="#metadata-storage" class="hash-link" aria-label="Direct link to Metadata storage" title="Direct link to Metadata storage">​</a></h2><p>The BookKeeper metadata store maintains all the metadata of the BookKeeper cluster, such as <a href="#ledgers">ledger</a> metadata, available bookies, and so on. Currently, BookKeeper uses <a href="https://zookeeper.apache.org" target="_blank" rel="noopener noreferrer">ZooKeeper</a> for metadata storage. </p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="data-management-in-bookies">Data management in bookies<a href="#data-management-in-bookies" class="hash-link" aria-label="Direct link to Data management in bookies" title="Direct link to Data management in bookies">​</a></h2><p>Bookies manage data in a <a href="https://en.wikipedia.org/wiki/Log-structured_file_system" target="_blank" rel="noopener noreferrer">log-structured</a> way, which is implemented using three types of files:</p><ul><li><a href="#journals">journals</a></li><li><a href="#entry-logs">entry logs</a></li><li><a href="#index-files">index files</a></li></ul><h3 class="anchor anchorWithStickyNavbar_LWe7" id="journals">Journals<a href="#journals" class="hash-link" aria-label="Direct link to Journals" title="Direct link to Journals">​</a></h3><p>A journal file contains BookKeeper transaction logs. Before any update to a ledger takes place, the bookie ensures that a transaction describing the update is written to non-volatile storage. A new journal file is created once the bookie starts or the older journal file reaches the journal file size threshold.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="entry-logs">Entry logs<a href="#entry-logs" class="hash-link" aria-label="Direct link to Entry logs" title="Direct link to Entry logs">​</a></h3><p>An entry log file manages the written entries received from BookKeeper clients. Entries from different ledgers are aggregated and written sequentially, while their offsets are kept as pointers in a <a href="#ledger-cache">ledger cache</a> for fast lookup.</p><p>A new entry log file is created once the bookie starts or the older entry log file reaches the entry log size threshold. Old entry log files are removed by the Garbage Collector Thread once they are not associated with any active ledger.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="index-files">Index files<a href="#index-files" class="hash-link" aria-label="Direct link to Index files" title="Direct link to Index files">​</a></h3><p>An index file is created for each ledger, which comprises a header and several fixed-length index pages that record the offsets of data stored in entry log files.</p><p>Since updating index files would introduce random disk I/O index files are updated lazily by a sync thread running in the background. This ensures speedy performance for updates. Before index pages are persisted to disk, they are gathered in a ledger cache for lookup.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="ledger-cache">Ledger cache<a href="#ledger-cache" class="hash-link" aria-label="Direct link to Ledger cache" title="Direct link to Ledger cache">​</a></h3><p>Ledger indexes pages are cached in a memory pool, which allows for more efficient management of disk head scheduling.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="adding-entries">Adding entries<a href="#adding-entries" class="hash-link" aria-label="Direct link to Adding entries" title="Direct link to Adding entries">​</a></h3><p>When a client instructs a bookie to write an entry to a ledger, the entry will go through the following steps to be persisted on disk:</p><ol><li>The entry is appended to an <a href="#entry-logs">entry log</a></li><li>The index of the entry is updated in the <a href="#ledger-cache">ledger cache</a></li><li>A transaction corresponding to this entry update is appended to the <a href="#journals">journal</a></li><li>A response is sent to the BookKeeper client</li></ol><blockquote><p>For performance reasons, the entry log buffers entries in memory and commits them in batches, while the ledger cache holds index pages in memory and flushes them lazily. This process is described in more detail in the <a href="#data-flush">Data flush</a> section below.</p></blockquote><h3 class="anchor anchorWithStickyNavbar_LWe7" id="data-flush">Data flush<a href="#data-flush" class="hash-link" aria-label="Direct link to Data flush" title="Direct link to Data flush">​</a></h3><p>Ledger index pages are flushed to index files in the following two cases:</p><ul><li>The ledger cache memory limit is reached. There is no more space available to hold newer index pages. Dirty index pages will be evicted from the ledger cache and persisted to index files.</li><li>A background thread synchronous thread is responsible for flushing index pages from the ledger cache to index files periodically.</li></ul><p>Besides flushing index pages, the sync thread is responsible for rolling journal files in case that journal files use too much disk space. The data flush flow in the sync thread is as follows:</p><ul><li><p>A <code>LastLogMark</code> is recorded in memory. The <code>LastLogMark</code> indicates that those entries before it have been persisted (to both index and entry log files) and contains two parts:</p><ol><li>A <code>txnLogId</code> (the file ID of a journal)</li><li>A <code>txnLogPos</code> (offset in a journal)</li></ol></li><li><p>Dirty index pages are flushed from the ledger cache to the index file, and entry log files are flushed to ensure that all buffered entries in entry log files are persisted to disk.</p><p>  Ideally, a bookie only needs to flush index pages and entry log files that contain entries before <code>LastLogMark</code>. There is, however, no such information in the ledger and entry log mapping to journal files. Consequently, the thread flushes the ledger cache and entry log entirely here, and may flush entries after the <code>LastLogMark</code>. Flushing more is not a problem, though, just redundant.</p></li><li><p>The <code>LastLogMark</code> is persisted to disk, which means that entries added before <code>LastLogMark</code> whose entry data and index page were also persisted to disk. It is now time to safely remove journal files created earlier than <code>txnLogId</code>.</p></li></ul><p>If the bookie has crashed before persisting <code>LastLogMark</code> to disk, it still has journal files containing entries for which index pages may not have been persisted. Consequently, when this bookie restarts, it inspects journal files to restore those entries and data isn&#x27;t lost.</p><p>Using the above data flush mechanism, it is safe for the sync thread to skip data flushing when the bookie shuts down. However, in the entry logger it uses a buffered channel to write entries in batches and there might be data buffered in the buffered channel upon a shut down. The bookie needs to ensure that the entry log flushes its buffered data during shutdown. Otherwise, entry log files become corrupted with partial entries.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="data-compaction">Data compaction<a href="#data-compaction" class="hash-link" aria-label="Direct link to Data compaction" title="Direct link to Data compaction">​</a></h3><p>On bookies, entries of different ledgers are interleaved in entry log files. A bookie runs a garbage collector thread to delete un-associated entry log files to reclaim disk space. If a given entry log file contains entries from a ledger that has not been deleted, then the entry log file would never be removed and the occupied disk space never reclaimed. In order to avoid such a case, a bookie server compacts entry log files in a garbage collector thread to reclaim disk space.</p><p>There are two kinds of compaction running with different frequency: minor compaction and major compaction. The differences between minor compaction and major compaction lies in their threshold value and compaction interval.</p><ul><li>The garbage collection threshold is the size percentage of an entry log file occupied by those undeleted ledgers. The default minor compaction threshold is 0.2, while the major compaction threshold is 0.8.</li><li>The garbage collection interval is how frequently to run the compaction. The default minor compaction interval is 1 hour, while the major compaction threshold is 1 day.</li></ul><blockquote><p>If either the threshold or interval is set to less than or equal to zero, compaction is disabled.</p></blockquote><p>The data compaction flow in the garbage collector thread is as follows:</p><ul><li>The thread scans entry log files to get their entry log metadata, which records a list of ledgers comprising an entry log and their corresponding percentages.</li><li>With the normal garbage collection flow, once the bookie determines that a ledger has been deleted, the ledger will be removed from the entry log metadata and the size of the entry log reduced.</li><li>If the remaining size of an entry log file reaches a specified threshold, the entries of active ledgers in the entry log will be copied to a new entry log file.</li><li>Once all valid entries have been copied, the old entry log file is deleted.</li></ul><h2 class="anchor anchorWithStickyNavbar_LWe7" id="zookeeper-metadata">ZooKeeper metadata<a href="#zookeeper-metadata" class="hash-link" aria-label="Direct link to ZooKeeper metadata" title="Direct link to ZooKeeper metadata">​</a></h2><p>BookKeeper requires a ZooKeeper installation for storing <a href="#ledger">ledger</a> metadata. Whenever you construct a <a href="https://bookkeeper.apache.org//docs/latest/api/javadoc/org/apache/bookkeeper/client/BookKeeper" target="_blank" rel="noopener noreferrer"><code>BookKeeper</code></a> client object, you need to pass a list of ZooKeeper servers as a parameter to the constructor, like this:</p><div class="language-java codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-java codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">String zkConnectionString = &quot;127.0.0.1:2181&quot;;</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">BookKeeper bkClient = new BookKeeper(zkConnectionString);</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><blockquote><p>For more info on using the BookKeeper Java client, see <a href="/docs/api/ledger-api#the-java-ledger-api-client">this guide</a>.</p></blockquote><h2 class="anchor anchorWithStickyNavbar_LWe7" id="ledger-manager">Ledger manager<a href="#ledger-manager" class="hash-link" aria-label="Direct link to Ledger manager" title="Direct link to Ledger manager">​</a></h2><p>A <em>ledger manager</em> handles ledgers&#x27; metadata (which is stored in ZooKeeper). BookKeeper offers two types of ledger managers: the <a href="#flat-ledger-manager">flat ledger manager</a> and the <a href="#hierarchical-ledger-manager">hierarchical ledger manager</a>. Both ledger managers extend the <a href="https://bookkeeper.apache.org//docs/latest/api/javadoc/org/apache/bookkeeper/meta/AbstractZkLedgerManager" target="_blank" rel="noopener noreferrer"><code>AbstractZkLedgerManager</code></a> abstract class.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="hierarchical-ledger-manager">Hierarchical ledger manager<a href="#hierarchical-ledger-manager" class="hash-link" aria-label="Direct link to Hierarchical ledger manager" title="Direct link to Hierarchical ledger manager">​</a></h3><blockquote><p>default ledger manager.</p><p>The hierarchical ledger manager is able to manage very large numbers of BookKeeper ledgers (&gt; 50,000).</p></blockquote><p>The <em>hierarchical ledger manager</em>, implemented in the <a href="https://bookkeeper.apache.org//docs/latest/api/javadoc/org/apache/bookkeeper/meta/HierarchicalLedgerManager" target="_blank" rel="noopener noreferrer"><code>HierarchicalLedgerManager</code></a> class, first obtains a global unique ID from ZooKeeper using an <a href="https://zookeeper.apache.org/doc/current/api/org/apache/zookeeper/CreateMode.html#EPHEMERAL_SEQUENTIAL" target="_blank" rel="noopener noreferrer"><code>EPHEMERAL_SEQUENTIAL</code></a> znode. Since ZooKeeper&#x27;s sequence counter has a format of <code>%10d</code> (10 digits with 0 padding, for example <code>&lt;path&gt;0000000001</code>), the hierarchical ledger manager splits the generated ID into 3 parts:</p><div class="language-shell codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-shell codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token punctuation" style="color:#393A34">{</span><span class="token plain">level1 </span><span class="token punctuation" style="color:#393A34">(</span><span class="token number" style="color:#36acaa">2</span><span class="token plain"> digits</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain">level2 </span><span class="token punctuation" style="color:#393A34">(</span><span class="token number" style="color:#36acaa">4</span><span class="token plain"> digits</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain">level3 </span><span class="token punctuation" style="color:#393A34">(</span><span class="token number" style="color:#36acaa">4</span><span class="token plain"> digits</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">}</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>These three parts are used to form the actual ledger node path to store ledger metadata:</p><div class="language-shell codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-shell codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token punctuation" style="color:#393A34">{</span><span class="token plain">ledgers_root_path</span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain">/</span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain">level1</span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain">/</span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain">level2</span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain">/L</span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain">level3</span><span class="token punctuation" style="color:#393A34">}</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>For example, ledger 0000000001 is split into three parts, 00, 0000, and 00001, and stored in znode <code>/{ledgers_root_path}/00/0000/L0001</code>. Each znode could have as many 10,000 ledgers, which avoids the problem of the child list being larger than the maximum ZooKeeper packet size (which is the <a href="https://issues.apache.org/jira/browse/BOOKKEEPER-39" target="_blank" rel="noopener noreferrer">limitation</a> that initially prompted the creation of the hierarchical ledger manager).</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="flat-ledger-manager">Flat ledger manager<a href="#flat-ledger-manager" class="hash-link" aria-label="Direct link to Flat ledger manager" title="Direct link to Flat ledger manager">​</a></h3><blockquote><p>deprecated since 4.7.0, not recommand now.</p></blockquote><p>The <em>flat ledger manager</em>, implemented in the <a href="https://bookkeeper.apache.org//docs/latest/api/javadoc/org/apache/bookkeeper/meta/FlatLedgerManager.html" target="_blank" rel="noopener noreferrer"><code>FlatLedgerManager</code></a> class, stores all ledgers&#x27; metadata in child nodes of a single ZooKeeper path. The flat ledger manager creates <a href="https://zookeeper.apache.org/doc/current/zookeeperProgrammers.html#Sequence+Nodes+--+Unique+Naming" target="_blank" rel="noopener noreferrer">sequential nodes</a> to ensure the uniqueness of the ledger ID and prefixes all nodes with <code>L</code>. Bookie servers manage their own active ledgers in a hash map so that it&#x27;s easy to find which ledgers have been deleted from ZooKeeper and then garbage collect them.</p><p>The flat ledger manager&#x27;s garbage collection follow proceeds as follows:</p><ul><li>All existing ledgers are fetched from ZooKeeper (<code>zkActiveLedgers</code>)</li><li>All ledgers currently active within the bookie are fetched (<code>bkActiveLedgers</code>)</li><li>The currently actively ledgers are looped through to determine which ledgers don&#x27;t currently exist in ZooKeeper. Those are then garbage collected.</li><li>The <em>hierarchical ledger manager</em> stores ledgers&#x27; metadata in two-level <a href="https://zookeeper.apache.org/doc/current/zookeeperOver.html#Nodes+and+ephemeral+nodes" target="_blank" rel="noopener noreferrer">znodes</a>.</li></ul></div></article><nav class="pagination-nav docusaurus-mt-lg" aria-label="Docs pages navigation"></nav></div></div><div class="col col--3"><div class="tableOfContents_bqdL thin-scrollbar theme-doc-toc-desktop"><ul class="table-of-contents table-of-contents__left-border"><li><a href="#basic-terms" class="table-of-contents__link toc-highlight">Basic terms</a></li><li><a href="#entries" class="table-of-contents__link toc-highlight">Entries</a></li><li><a href="#ledgers" class="table-of-contents__link toc-highlight">Ledgers</a></li><li><a href="#clients-and-apis" class="table-of-contents__link toc-highlight">Clients and APIs</a></li><li><a href="#bookies" class="table-of-contents__link toc-highlight">Bookies</a><ul><li><a href="#motivation" class="table-of-contents__link toc-highlight">Motivation</a></li></ul></li><li><a href="#metadata-storage" class="table-of-contents__link toc-highlight">Metadata storage</a></li><li><a href="#data-management-in-bookies" class="table-of-contents__link toc-highlight">Data management in bookies</a><ul><li><a href="#journals" class="table-of-contents__link toc-highlight">Journals</a></li><li><a href="#entry-logs" class="table-of-contents__link toc-highlight">Entry logs</a></li><li><a href="#index-files" class="table-of-contents__link toc-highlight">Index files</a></li><li><a href="#ledger-cache" class="table-of-contents__link toc-highlight">Ledger cache</a></li><li><a href="#adding-entries" class="table-of-contents__link toc-highlight">Adding entries</a></li><li><a href="#data-flush" class="table-of-contents__link toc-highlight">Data flush</a></li><li><a href="#data-compaction" class="table-of-contents__link toc-highlight">Data compaction</a></li></ul></li><li><a href="#zookeeper-metadata" class="table-of-contents__link toc-highlight">ZooKeeper metadata</a></li><li><a href="#ledger-manager" class="table-of-contents__link toc-highlight">Ledger manager</a><ul><li><a href="#hierarchical-ledger-manager" class="table-of-contents__link toc-highlight">Hierarchical ledger manager</a></li><li><a href="#flat-ledger-manager" class="table-of-contents__link toc-highlight">Flat ledger manager</a></li></ul></li></ul></div></div></div></div></main></div></div><footer class="footer footer--dark"><div class="container container-fluid"><div class="row footer__links"><div class="col footer__col"><div class="footer__title">Documentation</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/docs/overview">Overview</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/getting-started/installation">Getting started</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/deployment/manual">Deployment</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/admin/bookies">Administration</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/api/overview">API</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/security/overview">Security</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/development/protocol">Development</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/reference/config">Reference</a></li></ul></div><div class="col footer__col"><div class="footer__title">Community</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/community/mailing-lists">Mailing lists</a></li><li class="footer__item"><a class="footer__link-item" href="/community/slack">Slack</a></li><li class="footer__item"><a href="https://github.com/apache/bookkeeper" target="_blank" rel="noopener noreferrer" class="footer__link-item">Github<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a href="https://twitter.com/asfbookkeeper" target="_blank" rel="noopener noreferrer" class="footer__link-item">Twitter<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div><div class="col footer__col"><div class="footer__title">Project</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/project/who">Who are we?</a></li><li class="footer__item"><a class="footer__link-item" href="/project/bylaws">Bylaws</a></li><li class="footer__item"><a href="https://apache.org/licenses" target="_blank" rel="noopener noreferrer" class="footer__link-item">License<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a class="footer__link-item" href="/project/privacy">Privacy policy</a></li><li class="footer__item"><a href="https://www.apache.org/foundation/sponsorship.html" target="_blank" rel="noopener noreferrer" class="footer__link-item">Sponsorship<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a href="https://www.apache.org/foundation/thanks.html" target="_blank" rel="noopener noreferrer" class="footer__link-item">Thanks<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div></div><div class="footer__bottom text--center"><div class="footer__copyright"><footer class="footer">
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navbar__brand" href="/"><div class="navbar__logo"><img src="/img/bk-logo.svg" alt="Apache Bookkeeper" class="themedImage_ToTc themedImage--light_HNdA"><img src="/img/bk-logo.svg" alt="Apache Bookkeeper" class="themedImage_ToTc themedImage--dark_i4oU"></div><b class="navbar__title text--truncate">Apache BookKeeper</b></a><a aria-current="page" class="navbar__item navbar__link navbar__link--active" href="/docs/overview/">Documentation</a><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Community</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/community/mailing-lists">Mailing lists</a></li><li><a class="dropdown__link" href="/community/slack">Slack</a></li><li><a href="https://github.com/apache/bookkeeper/issues" target="_blank" rel="noopener noreferrer" class="dropdown__link">Github issues<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a class="dropdown__link" href="/community/releases">Release management</a></li><li><a class="dropdown__link" href="/community/meeting">Community meetings</a></li><li><a class="dropdown__link" href="/community/contributing">Contribution guide</a></li><li><a class="dropdown__link" href="/community/coding-guide">Coding guide</a></li><li><a class="dropdown__link" href="/community/testing">Testing guide</a></li><li><a class="dropdown__link" href="/community/issue-report">Issue report guide</a></li><li><a class="dropdown__link" href="/community/release-guide">Release guide</a></li><li><a class="dropdown__link" href="/community/presentations">Presentations</a></li><li><a class="dropdown__link" href="/community/bookkeeper-proposals">BookKeeper proposals (BP)</a></li></ul></div><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Project</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/project/who">Who are we?</a></li><li><a class="dropdown__link" href="/project/bylaws">Bylaws</a></li><li><a href="https://apache.org/licenses" target="_blank" rel="noopener noreferrer" class="dropdown__link">License<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a class="dropdown__link" href="/project/privacy">Privacy policy</a></li><li><a href="https://www.apache.org/foundation/sponsorship.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Sponsorship<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a href="https://www.apache.org/foundation/thanks.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Thanks<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div></div><div class="navbar__items navbar__items--right"><div class="navbar__item dropdown dropdown--hoverable dropdown--right"><a class="navbar__link" aria-haspopup="true" aria-expanded="false" role="button" href="/docs/overview/">4.17.0</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/docs/next/getting-started/concepts">Next</a></li><li><a aria-current="page" class="dropdown__link dropdown__link--active" href="/docs/getting-started/concepts">4.17.0</a></li><li><a class="dropdown__link" href="/docs/4.16.5/getting-started/concepts">4.16.5</a></li><li><a class="dropdown__link" href="/docs/4.15.5/getting-started/concepts">4.15.5</a></li><li><a class="dropdown__link" href="/docs/4.14.8/getting-started/concepts">4.14.8</a></li><li><a class="dropdown__link" href="/docs/4.13.0/getting-started/concepts">4.13.0</a></li><li><a class="dropdown__link" href="/docs/4.12.1/getting-started/concepts">4.12.1</a></li><li><a class="dropdown__link" href="/docs/4.11.1/getting-started/concepts">4.11.1</a></li><li><a class="dropdown__link" href="/docs/4.10.0/getting-started/concepts">4.10.0</a></li><li><a class="dropdown__link" href="/docs/4.9.2/getting-started/concepts">4.9.2</a></li><li><a class="dropdown__link" href="/docs/4.8.2/getting-started/concepts">4.8.2</a></li><li><a class="dropdown__link" href="/docs/4.7.3/getting-started/concepts">4.7.3</a></li><li><a class="dropdown__link" href="/docs/4.6.2/getting-started/concepts">4.6.2</a></li><li><a class="dropdown__link" href="/docs/4.5.1/getting-started/concepts">4.5.1</a></li></ul></div><a class="navbar__item navbar__link" href="/releases">Download</a><div class="toggle_vylO colorModeToggle_DEke"><button class="clean-btn toggleButton_gllP toggleButtonDisabled_aARS" type="button" disabled="" title="Switch between dark and light mode (currently light mode)" aria-label="Switch between dark and light mode (currently light mode)" aria-live="polite"><svg viewBox="0 0 24 24" width="24" height="24" class="lightToggleIcon_pyhR"><path fill="currentColor" d="M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"></path></svg><svg viewBox="0 0 24 24" width="24" height="24" class="darkToggleIcon_wfgR"><path fill="currentColor" d="M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"></path></svg></button></div><div class="searchBox_ZlJk"></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div></nav><div id="docusaurus_skipToContent_fallback" class="main-wrapper mainWrapper_z2l0 docsWrapper_BCFX"><button aria-label="Scroll back to top" class="clean-btn theme-back-to-top-button backToTopButton_sjWU" type="button"></button><div class="docPage__5DB"><aside class="theme-doc-sidebar-container docSidebarContainer_b6E3"><div class="sidebarViewport_Xe31"><div class="sidebar_njMd"><nav aria-label="Docs sidebar" class="menu thin-scrollbar menu_SIkG"><ul class="theme-doc-sidebar-menu menu__list"><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-1 menu__list-item"><a class="menu__link" href="/docs/overview/">Overview</a></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret menu__link--active" aria-expanded="true" href="/docs/getting-started/installation">Getting started</a></div><ul style="display:block;overflow:visible;height:auto" class="menu__list"><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/getting-started/installation">Installation</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/getting-started/run-locally">Run bookies locally</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link menu__link--active" aria-current="page" tabindex="0" href="/docs/getting-started/concepts">Concepts and architecture</a></li></ul></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/deployment/manual">Deployment</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/admin/bookies">Administration</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/api/overview">API</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/security/overview">Security</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/development/protocol">Development</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/reference/config">Reference</a></div></li></ul></nav></div></div></aside><main class="docMainContainer_gTbr"><div class="container padding-top--md padding-bottom--lg"><div class="row"><div class="col docItemCol_VOVn"><div class="docItemContainer_Djhp"><article><span class="theme-doc-version-badge badge badge--secondary">Version: 4.17.0</span><div class="tocCollapsible_ETCw theme-doc-toc-mobile tocMobile_ITEo"><button type="button" class="clean-btn tocCollapsibleButton_TO0P">On this page</button></div><div class="theme-doc-markdown markdown"><header><h1>BookKeeper concepts and architecture</h1></header><p>BookKeeper is a service that provides persistent storage of streams of log <a href="#entries">entries</a>---aka <em>records</em>---in sequences called <a href="#ledgers">ledgers</a>. BookKeeper replicates stored entries across multiple servers.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="basic-terms">Basic terms<a href="#basic-terms" class="hash-link" aria-label="Direct link to Basic terms" title="Direct link to Basic terms">​</a></h2><p>In BookKeeper:</p><ul><li>each unit of a log is an <a href="#entries"><em>entry</em></a> (aka record)</li><li>streams of log entries are called <a href="#ledgers"><em>ledgers</em></a></li><li>individual servers storing ledgers of entries are called <a href="#bookies"><em>bookies</em></a></li></ul><p>BookKeeper is designed to be reliable and resilient to a wide variety of failures. Bookies can crash, corrupt data, or discard data, but as long as there are enough bookies behaving correctly in the ensemble the service as a whole will behave correctly.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="entries">Entries<a href="#entries" class="hash-link" aria-label="Direct link to Entries" title="Direct link to Entries">​</a></h2><blockquote><p><strong>Entries</strong> contain the actual data written to ledgers, along with some important metadata.</p></blockquote><p>BookKeeper entries are sequences of bytes that are written to <a href="#ledgers">ledgers</a>. Each entry has the following fields:</p><table><thead><tr><th align="left">Field</th><th align="left">Java type</th><th align="left">Description</th></tr></thead><tbody><tr><td align="left">Ledger number</td><td align="left"><code>long</code></td><td align="left">The ID of the ledger to which the entry has been written</td></tr><tr><td align="left">Entry number</td><td align="left"><code>long</code></td><td align="left">The unique ID of the entry</td></tr><tr><td align="left">Last confirmed (LC)</td><td align="left"><code>long</code></td><td align="left">The ID of the last recorded entry</td></tr><tr><td align="left">Data</td><td align="left"><code>byte[]</code></td><td align="left">The entry&#x27;s data (written by the client application)</td></tr><tr><td align="left">Authentication code</td><td align="left"><code>byte[]</code></td><td align="left">The message auth code, which includes <em>all</em> other fields in the entry</td></tr></tbody></table><h2 class="anchor anchorWithStickyNavbar_LWe7" id="ledgers">Ledgers<a href="#ledgers" class="hash-link" aria-label="Direct link to Ledgers" title="Direct link to Ledgers">​</a></h2><blockquote><p><strong>Ledgers</strong> are the basic unit of storage in BookKeeper.</p></blockquote><p>Ledgers are sequences of entries, while each entry is a sequence of bytes. Entries are written to a ledger:</p><ul><li>sequentially, and</li><li>at most once.</li></ul><p>This means that ledgers have <em>append-only</em> semantics. Entries cannot be modified once they&#x27;ve been written to a ledger. Determining the proper write order is the responsibility of <a href="#clients">client applications</a>.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="clients-and-apis">Clients and APIs<a href="#clients-and-apis" class="hash-link" aria-label="Direct link to Clients and APIs" title="Direct link to Clients and APIs">​</a></h2><blockquote><p>BookKeeper clients have two main roles: they create and delete ledgers, and they read entries from and write entries to ledgers.</p><p>BookKeeper provides both a lower-level and a higher-level API for ledger interaction.</p></blockquote><p>There are currently two APIs that can be used for interacting with BookKeeper:</p><ul><li>The <a href="/docs/api/ledger-api">ledger API</a> is a lower-level API that enables you to interact with ledgers directly.</li><li>The <a href="/docs/api/distributedlog-api">DistributedLog API</a> is a higher-level API that enables you to use BookKeeper without directly interacting with ledgers.</li></ul><p>In general, you should choose the API based on how much granular control you need over ledger semantics. The two APIs can also both be used within a single application.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="bookies">Bookies<a href="#bookies" class="hash-link" aria-label="Direct link to Bookies" title="Direct link to Bookies">​</a></h2><blockquote><p><strong>Bookies</strong> are individual BookKeeper servers that handle ledgers (more specifically, fragments of ledgers). Bookies function as part of an ensemble.</p></blockquote><p>A bookie is an individual BookKeeper storage server. Individual bookies store fragments of ledgers, not entire ledgers (for the sake of performance). For any given ledger <strong>L</strong>, an <em>ensemble</em> is the group of bookies storing the entries in <strong>L</strong>.</p><p>Whenever entries are written to a ledger, those entries are striped across the ensemble (written to a sub-group of bookies rather than to all bookies).</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="motivation">Motivation<a href="#motivation" class="hash-link" aria-label="Direct link to Motivation" title="Direct link to Motivation">​</a></h3><blockquote><p>BookKeeper was initially inspired by the NameNode server in HDFS but its uses now extend far beyond this.</p></blockquote><p>The initial motivation for BookKeeper comes from the <a href="http://hadoop.apache.org/" target="_blank" rel="noopener noreferrer">Hadoop</a> ecosystem. In the <a href="https://cwiki.apache.org/confluence/display/HADOOP2/HDFS" target="_blank" rel="noopener noreferrer">Hadoop Distributed File System</a> (HDFS), a special node called the <a href="https://cwiki.apache.org/confluence/display/HADOOP2/NameNode" target="_blank" rel="noopener noreferrer">NameNode</a> logs all operations in a reliable fashion, which ensures that recovery is possible in case of crashes.</p><p>The NameNode, however, served only as initial inspiration for BookKeeper. The applications for BookKeeper extend far beyond this and include essentially any application that requires an append-based storage system. BookKeeper provides a number of advantages for such applications:</p><ul><li>Highly efficient writes</li><li>High fault tolerance via replication of messages within ensembles of bookies</li><li>High throughput for write operations via striping (across as many bookies as you wish)</li></ul><h2 class="anchor anchorWithStickyNavbar_LWe7" id="metadata-storage">Metadata storage<a href="#metadata-storage" class="hash-link" aria-label="Direct link to Metadata storage" title="Direct link to Metadata storage">​</a></h2><p>The BookKeeper metadata store maintains all the metadata of the BookKeeper cluster, such as <a href="#ledgers">ledger</a> metadata, available bookies, and so on. Currently, BookKeeper uses <a href="https://zookeeper.apache.org" target="_blank" rel="noopener noreferrer">ZooKeeper</a> for metadata storage. </p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="data-management-in-bookies">Data management in bookies<a href="#data-management-in-bookies" class="hash-link" aria-label="Direct link to Data management in bookies" title="Direct link to Data management in bookies">​</a></h2><p>Bookies manage data in a <a href="https://en.wikipedia.org/wiki/Log-structured_file_system" target="_blank" rel="noopener noreferrer">log-structured</a> way, which is implemented using three types of files:</p><ul><li><a href="#journals">journals</a></li><li><a href="#entry-logs">entry logs</a></li><li><a href="#index-files">index files</a></li></ul><h3 class="anchor anchorWithStickyNavbar_LWe7" id="journals">Journals<a href="#journals" class="hash-link" aria-label="Direct link to Journals" title="Direct link to Journals">​</a></h3><p>A journal file contains BookKeeper transaction logs. Before any update to a ledger takes place, the bookie ensures that a transaction describing the update is written to non-volatile storage. A new journal file is created once the bookie starts or the older journal file reaches the journal file size threshold.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="entry-logs">Entry logs<a href="#entry-logs" class="hash-link" aria-label="Direct link to Entry logs" title="Direct link to Entry logs">​</a></h3><p>An entry log file manages the written entries received from BookKeeper clients. Entries from different ledgers are aggregated and written sequentially, while their offsets are kept as pointers in a <a href="#ledger-cache">ledger cache</a> for fast lookup.</p><p>A new entry log file is created once the bookie starts or the older entry log file reaches the entry log size threshold. Old entry log files are removed by the Garbage Collector Thread once they are not associated with any active ledger.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="index-files">Index files<a href="#index-files" class="hash-link" aria-label="Direct link to Index files" title="Direct link to Index files">​</a></h3><p>An index file is created for each ledger, which comprises a header and several fixed-length index pages that record the offsets of data stored in entry log files.</p><p>Since updating index files would introduce random disk I/O index files are updated lazily by a sync thread running in the background. This ensures speedy performance for updates. Before index pages are persisted to disk, they are gathered in a ledger cache for lookup.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="ledger-cache">Ledger cache<a href="#ledger-cache" class="hash-link" aria-label="Direct link to Ledger cache" title="Direct link to Ledger cache">​</a></h3><p>Ledger indexes pages are cached in a memory pool, which allows for more efficient management of disk head scheduling.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="adding-entries">Adding entries<a href="#adding-entries" class="hash-link" aria-label="Direct link to Adding entries" title="Direct link to Adding entries">​</a></h3><p>When a client instructs a bookie to write an entry to a ledger, the entry will go through the following steps to be persisted on disk:</p><ol><li>The entry is appended to an <a href="#entry-logs">entry log</a></li><li>The index of the entry is updated in the <a href="#ledger-cache">ledger cache</a></li><li>A transaction corresponding to this entry update is appended to the <a href="#journals">journal</a></li><li>A response is sent to the BookKeeper client</li></ol><blockquote><p>For performance reasons, the entry log buffers entries in memory and commits them in batches, while the ledger cache holds index pages in memory and flushes them lazily. This process is described in more detail in the <a href="#data-flush">Data flush</a> section below.</p></blockquote><h3 class="anchor anchorWithStickyNavbar_LWe7" id="data-flush">Data flush<a href="#data-flush" class="hash-link" aria-label="Direct link to Data flush" title="Direct link to Data flush">​</a></h3><p>Ledger index pages are flushed to index files in the following two cases:</p><ul><li>The ledger cache memory limit is reached. There is no more space available to hold newer index pages. Dirty index pages will be evicted from the ledger cache and persisted to index files.</li><li>A background thread synchronous thread is responsible for flushing index pages from the ledger cache to index files periodically.</li></ul><p>Besides flushing index pages, the sync thread is responsible for rolling journal files in case that journal files use too much disk space. The data flush flow in the sync thread is as follows:</p><ul><li><p>A <code>LastLogMark</code> is recorded in memory. The <code>LastLogMark</code> indicates that those entries before it have been persisted (to both index and entry log files) and contains two parts:</p><ol><li>A <code>txnLogId</code> (the file ID of a journal)</li><li>A <code>txnLogPos</code> (offset in a journal)</li></ol></li><li><p>Dirty index pages are flushed from the ledger cache to the index file, and entry log files are flushed to ensure that all buffered entries in entry log files are persisted to disk.</p><p>  Ideally, a bookie only needs to flush index pages and entry log files that contain entries before <code>LastLogMark</code>. There is, however, no such information in the ledger and entry log mapping to journal files. Consequently, the thread flushes the ledger cache and entry log entirely here, and may flush entries after the <code>LastLogMark</code>. Flushing more is not a problem, though, just redundant.</p></li><li><p>The <code>LastLogMark</code> is persisted to disk, which means that entries added before <code>LastLogMark</code> whose entry data and index page were also persisted to disk. It is now time to safely remove journal files created earlier than <code>txnLogId</code>.</p></li></ul><p>If the bookie has crashed before persisting <code>LastLogMark</code> to disk, it still has journal files containing entries for which index pages may not have been persisted. Consequently, when this bookie restarts, it inspects journal files to restore those entries and data isn&#x27;t lost.</p><p>Using the above data flush mechanism, it is safe for the sync thread to skip data flushing when the bookie shuts down. However, in the entry logger it uses a buffered channel to write entries in batches and there might be data buffered in the buffered channel upon a shut down. The bookie needs to ensure that the entry log flushes its buffered data during shutdown. Otherwise, entry log files become corrupted with partial entries.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="data-compaction">Data compaction<a href="#data-compaction" class="hash-link" aria-label="Direct link to Data compaction" title="Direct link to Data compaction">​</a></h3><p>On bookies, entries of different ledgers are interleaved in entry log files. A bookie runs a garbage collector thread to delete un-associated entry log files to reclaim disk space. If a given entry log file contains entries from a ledger that has not been deleted, then the entry log file would never be removed and the occupied disk space never reclaimed. In order to avoid such a case, a bookie server compacts entry log files in a garbage collector thread to reclaim disk space.</p><p>There are two kinds of compaction running with different frequency: minor compaction and major compaction. The differences between minor compaction and major compaction lies in their threshold value and compaction interval.</p><ul><li>The garbage collection threshold is the size percentage of an entry log file occupied by those undeleted ledgers. The default minor compaction threshold is 0.2, while the major compaction threshold is 0.8.</li><li>The garbage collection interval is how frequently to run the compaction. The default minor compaction interval is 1 hour, while the major compaction threshold is 1 day.</li></ul><blockquote><p>If either the threshold or interval is set to less than or equal to zero, compaction is disabled.</p></blockquote><p>The data compaction flow in the garbage collector thread is as follows:</p><ul><li>The thread scans entry log files to get their entry log metadata, which records a list of ledgers comprising an entry log and their corresponding percentages.</li><li>With the normal garbage collection flow, once the bookie determines that a ledger has been deleted, the ledger will be removed from the entry log metadata and the size of the entry log reduced.</li><li>If the remaining size of an entry log file reaches a specified threshold, the entries of active ledgers in the entry log will be copied to a new entry log file.</li><li>Once all valid entries have been copied, the old entry log file is deleted.</li></ul><h2 class="anchor anchorWithStickyNavbar_LWe7" id="zookeeper-metadata">ZooKeeper metadata<a href="#zookeeper-metadata" class="hash-link" aria-label="Direct link to ZooKeeper metadata" title="Direct link to ZooKeeper metadata">​</a></h2><p>BookKeeper requires a ZooKeeper installation for storing <a href="#ledger">ledger</a> metadata. Whenever you construct a <a href="https://bookkeeper.apache.org//docs/latest/api/javadoc/org/apache/bookkeeper/client/BookKeeper" target="_blank" rel="noopener noreferrer"><code>BookKeeper</code></a> client object, you need to pass a list of ZooKeeper servers as a parameter to the constructor, like this:</p><div class="language-java codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-java codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">String zkConnectionString = &quot;127.0.0.1:2181&quot;;</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">BookKeeper bkClient = new BookKeeper(zkConnectionString);</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><blockquote><p>For more info on using the BookKeeper Java client, see <a href="/docs/api/ledger-api#the-java-ledger-api-client">this guide</a>.</p></blockquote><h2 class="anchor anchorWithStickyNavbar_LWe7" id="ledger-manager">Ledger manager<a href="#ledger-manager" class="hash-link" aria-label="Direct link to Ledger manager" title="Direct link to Ledger manager">​</a></h2><p>A <em>ledger manager</em> handles ledgers&#x27; metadata (which is stored in ZooKeeper). BookKeeper offers two types of ledger managers: the <a href="#flat-ledger-manager">flat ledger manager</a> and the <a href="#hierarchical-ledger-manager">hierarchical ledger manager</a>. Both ledger managers extend the <a href="https://bookkeeper.apache.org//docs/latest/api/javadoc/org/apache/bookkeeper/meta/AbstractZkLedgerManager" target="_blank" rel="noopener noreferrer"><code>AbstractZkLedgerManager</code></a> abstract class.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="hierarchical-ledger-manager">Hierarchical ledger manager<a href="#hierarchical-ledger-manager" class="hash-link" aria-label="Direct link to Hierarchical ledger manager" title="Direct link to Hierarchical ledger manager">​</a></h3><blockquote><p>default ledger manager.</p><p>The hierarchical ledger manager is able to manage very large numbers of BookKeeper ledgers (&gt; 50,000).</p></blockquote><p>The <em>hierarchical ledger manager</em>, implemented in the <a href="https://bookkeeper.apache.org//docs/latest/api/javadoc/org/apache/bookkeeper/meta/HierarchicalLedgerManager" target="_blank" rel="noopener noreferrer"><code>HierarchicalLedgerManager</code></a> class, first obtains a global unique ID from ZooKeeper using an <a href="https://zookeeper.apache.org/doc/current/api/org/apache/zookeeper/CreateMode.html#EPHEMERAL_SEQUENTIAL" target="_blank" rel="noopener noreferrer"><code>EPHEMERAL_SEQUENTIAL</code></a> znode. Since ZooKeeper&#x27;s sequence counter has a format of <code>%10d</code> (10 digits with 0 padding, for example <code>&lt;path&gt;0000000001</code>), the hierarchical ledger manager splits the generated ID into 3 parts:</p><div class="language-shell codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-shell codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token punctuation" style="color:#393A34">{</span><span class="token plain">level1 </span><span class="token punctuation" style="color:#393A34">(</span><span class="token number" style="color:#36acaa">2</span><span class="token plain"> digits</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain">level2 </span><span class="token punctuation" style="color:#393A34">(</span><span class="token number" style="color:#36acaa">4</span><span class="token plain"> digits</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain">level3 </span><span class="token punctuation" style="color:#393A34">(</span><span class="token number" style="color:#36acaa">4</span><span class="token plain"> digits</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">}</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>These three parts are used to form the actual ledger node path to store ledger metadata:</p><div class="language-shell codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-shell codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token punctuation" style="color:#393A34">{</span><span class="token plain">ledgers_root_path</span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain">/</span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain">level1</span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain">/</span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain">level2</span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain">/L</span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain">level3</span><span class="token punctuation" style="color:#393A34">}</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>For example, ledger 0000000001 is split into three parts, 00, 0000, and 00001, and stored in znode <code>/{ledgers_root_path}/00/0000/L0001</code>. Each znode could have as many 10,000 ledgers, which avoids the problem of the child list being larger than the maximum ZooKeeper packet size (which is the <a href="https://issues.apache.org/jira/browse/BOOKKEEPER-39" target="_blank" rel="noopener noreferrer">limitation</a> that initially prompted the creation of the hierarchical ledger manager).</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="flat-ledger-manager">Flat ledger manager<a href="#flat-ledger-manager" class="hash-link" aria-label="Direct link to Flat ledger manager" title="Direct link to Flat ledger manager">​</a></h3><blockquote><p>deprecated since 4.7.0, not recommand now.</p></blockquote><p>The <em>flat ledger manager</em>, implemented in the <a href="https://bookkeeper.apache.org//docs/latest/api/javadoc/org/apache/bookkeeper/meta/FlatLedgerManager.html" target="_blank" rel="noopener noreferrer"><code>FlatLedgerManager</code></a> class, stores all ledgers&#x27; metadata in child nodes of a single ZooKeeper path. The flat ledger manager creates <a href="https://zookeeper.apache.org/doc/current/zookeeperProgrammers.html#Sequence+Nodes+--+Unique+Naming" target="_blank" rel="noopener noreferrer">sequential nodes</a> to ensure the uniqueness of the ledger ID and prefixes all nodes with <code>L</code>. Bookie servers manage their own active ledgers in a hash map so that it&#x27;s easy to find which ledgers have been deleted from ZooKeeper and then garbage collect them.</p><p>The flat ledger manager&#x27;s garbage collection follow proceeds as follows:</p><ul><li>All existing ledgers are fetched from ZooKeeper (<code>zkActiveLedgers</code>)</li><li>All ledgers currently active within the bookie are fetched (<code>bkActiveLedgers</code>)</li><li>The currently actively ledgers are looped through to determine which ledgers don&#x27;t currently exist in ZooKeeper. Those are then garbage collected.</li><li>The <em>hierarchical ledger manager</em> stores ledgers&#x27; metadata in two-level <a href="https://zookeeper.apache.org/doc/current/zookeeperOver.html#Nodes+and+ephemeral+nodes" target="_blank" rel="noopener noreferrer">znodes</a>.</li></ul></div></article><nav class="pagination-nav docusaurus-mt-lg" aria-label="Docs pages navigation"><a class="pagination-nav__link pagination-nav__link--prev" href="/docs/getting-started/run-locally"><div class="pagination-nav__sublabel">Previous</div><div class="pagination-nav__label">Run bookies locally</div></a><a class="pagination-nav__link pagination-nav__link--next" href="/docs/deployment/manual"><div class="pagination-nav__sublabel">Next</div><div class="pagination-nav__label">Manual deployment</div></a></nav></div></div><div class="col col--3"><div class="tableOfContents_bqdL thin-scrollbar theme-doc-toc-desktop"><ul class="table-of-contents table-of-contents__left-border"><li><a href="#basic-terms" class="table-of-contents__link toc-highlight">Basic terms</a></li><li><a href="#entries" class="table-of-contents__link toc-highlight">Entries</a></li><li><a href="#ledgers" class="table-of-contents__link toc-highlight">Ledgers</a></li><li><a href="#clients-and-apis" class="table-of-contents__link toc-highlight">Clients and APIs</a></li><li><a href="#bookies" class="table-of-contents__link toc-highlight">Bookies</a><ul><li><a href="#motivation" class="table-of-contents__link toc-highlight">Motivation</a></li></ul></li><li><a href="#metadata-storage" class="table-of-contents__link toc-highlight">Metadata storage</a></li><li><a href="#data-management-in-bookies" class="table-of-contents__link toc-highlight">Data management in bookies</a><ul><li><a href="#journals" class="table-of-contents__link toc-highlight">Journals</a></li><li><a href="#entry-logs" class="table-of-contents__link toc-highlight">Entry logs</a></li><li><a href="#index-files" class="table-of-contents__link toc-highlight">Index files</a></li><li><a href="#ledger-cache" class="table-of-contents__link toc-highlight">Ledger cache</a></li><li><a href="#adding-entries" class="table-of-contents__link toc-highlight">Adding entries</a></li><li><a href="#data-flush" class="table-of-contents__link toc-highlight">Data flush</a></li><li><a href="#data-compaction" class="table-of-contents__link toc-highlight">Data compaction</a></li></ul></li><li><a href="#zookeeper-metadata" class="table-of-contents__link toc-highlight">ZooKeeper metadata</a></li><li><a href="#ledger-manager" class="table-of-contents__link toc-highlight">Ledger manager</a><ul><li><a href="#hierarchical-ledger-manager" class="table-of-contents__link toc-highlight">Hierarchical ledger manager</a></li><li><a href="#flat-ledger-manager" class="table-of-contents__link toc-highlight">Flat ledger manager</a></li></ul></li></ul></div></div></div></div></main></div></div><footer class="footer footer--dark"><div class="container container-fluid"><div class="row footer__links"><div class="col footer__col"><div class="footer__title">Documentation</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/docs/overview">Overview</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/getting-started/installation">Getting started</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/deployment/manual">Deployment</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/admin/bookies">Administration</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/api/overview">API</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/security/overview">Security</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/development/protocol">Development</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/reference/config">Reference</a></li></ul></div><div class="col footer__col"><div class="footer__title">Community</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/community/mailing-lists">Mailing lists</a></li><li class="footer__item"><a class="footer__link-item" href="/community/slack">Slack</a></li><li class="footer__item"><a href="https://github.com/apache/bookkeeper" target="_blank" rel="noopener noreferrer" class="footer__link-item">Github<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a href="https://twitter.com/asfbookkeeper" target="_blank" rel="noopener noreferrer" class="footer__link-item">Twitter<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div><div class="col footer__col"><div class="footer__title">Project</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/project/who">Who are we?</a></li><li class="footer__item"><a class="footer__link-item" href="/project/bylaws">Bylaws</a></li><li class="footer__item"><a href="https://apache.org/licenses" target="_blank" rel="noopener noreferrer" class="footer__link-item">License<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a class="footer__link-item" href="/project/privacy">Privacy policy</a></li><li class="footer__item"><a href="https://www.apache.org/foundation/sponsorship.html" target="_blank" rel="noopener noreferrer" class="footer__link-item">Sponsorship<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a href="https://www.apache.org/foundation/thanks.html" target="_blank" rel="noopener noreferrer" class="footer__link-item">Thanks<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div></div><div class="footer__bottom text--center"><div class="footer__copyright"><footer class="footer">
         <div class="container">
           <div class="content has-text-centered">
             <p>
@@ -22,7 +22,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/getting-started/installation/index.html b/content/docs/getting-started/installation/index.html
index 16a17e7..771c2ab 100644
--- a/content/docs/getting-started/installation/index.html
+++ b/content/docs/getting-started/installation/index.html
@@ -4,12 +4,12 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">BookKeeper installation | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/getting-started/installation"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.17.0"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.17.0"><meta data-rh="true" name="docsearch:version" content="4.17.0"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.17.0"><meta data-rh="true" property="og:title" content="BookKeeper installation | Apache BookKeeper"><meta data-rh="true" name="description" content="You can install BookKeeper either by downloading a GZipped tarball package, using the Docker image or cloning the BookKeeper repository."><meta data-rh="true" property="og:description" content="You can install BookKeeper either by downloading a GZipped tarball package, using the Docker image or cloning the BookKeeper repository."><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/getting-started/installation"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/getting-started/installation" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/getting-started/installation" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
-<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navbar__brand" href="/"><div class="navbar__logo"><img src="/img/bk-logo.svg" alt="Apache Bookkeeper" class="themedImage_ToTc themedImage--light_HNdA"><img src="/img/bk-logo.svg" alt="Apache Bookkeeper" class="themedImage_ToTc themedImage--dark_i4oU"></div><b class="navbar__title text--truncate">Apache BookKeeper</b></a><a class="navbar__item navbar__link" href="/docs/overview/">Documentation</a><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Community</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/community/mailing-lists">Mailing lists</a></li><li><a class="dropdown__link" href="/community/slack">Slack</a></li><li><a href="https://github.com/apache/bookkeeper/issues" target="_blank" rel="noopener noreferrer" class="dropdown__link">Github issues<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a class="dropdown__link" href="/community/releases">Release management</a></li><li><a class="dropdown__link" href="/community/meeting">Community meetings</a></li><li><a class="dropdown__link" href="/community/contributing">Contribution guide</a></li><li><a class="dropdown__link" href="/community/coding-guide">Coding guide</a></li><li><a class="dropdown__link" href="/community/testing">Testing guide</a></li><li><a class="dropdown__link" href="/community/issue-report">Issue report guide</a></li><li><a class="dropdown__link" href="/community/release-guide">Release guide</a></li><li><a class="dropdown__link" href="/community/presentations">Presentations</a></li><li><a class="dropdown__link" href="/community/bookkeeper-proposals">BookKeeper proposals (BP)</a></li></ul></div><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Project</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/project/who">Who are we?</a></li><li><a class="dropdown__link" href="/project/bylaws">Bylaws</a></li><li><a href="https://apache.org/licenses" target="_blank" rel="noopener noreferrer" class="dropdown__link">License<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a class="dropdown__link" href="/project/privacy">Privacy policy</a></li><li><a href="https://www.apache.org/foundation/sponsorship.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Sponsorship<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a href="https://www.apache.org/foundation/thanks.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Thanks<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div></div><div class="navbar__items navbar__items--right"><div class="navbar__item dropdown dropdown--hoverable dropdown--right"><a class="navbar__link" aria-haspopup="true" aria-expanded="false" role="button" href="/docs/admin/autorecovery">4.17.0</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/docs/next/getting-started/installation">Next</a></li><li><a aria-current="page" class="dropdown__link dropdown__link--active" href="/docs/getting-started/installation">4.17.0</a></li><li><a class="dropdown__link" href="/docs/4.16.5/getting-started/installation">4.16.5</a></li><li><a class="dropdown__link" href="/docs/4.15.5/getting-started/installation">4.15.5</a></li><li><a class="dropdown__link" href="/docs/4.14.8/getting-started/installation">4.14.8</a></li><li><a class="dropdown__link" href="/docs/4.13.0/getting-started/installation">4.13.0</a></li><li><a class="dropdown__link" href="/docs/4.12.1/getting-started/installation">4.12.1</a></li><li><a class="dropdown__link" href="/docs/4.11.1/getting-started/installation">4.11.1</a></li><li><a class="dropdown__link" href="/docs/4.10.0/getting-started/installation">4.10.0</a></li><li><a class="dropdown__link" href="/docs/4.9.2/getting-started/installation">4.9.2</a></li><li><a class="dropdown__link" href="/docs/4.8.2/getting-started/installation">4.8.2</a></li><li><a class="dropdown__link" href="/docs/4.7.3/getting-started/installation">4.7.3</a></li><li><a class="dropdown__link" href="/docs/4.6.2/getting-started/installation">4.6.2</a></li><li><a class="dropdown__link" href="/docs/4.5.1/getting-started/installation">4.5.1</a></li></ul></div><a class="navbar__item navbar__link" href="/releases">Download</a><div class="toggle_vylO colorModeToggle_DEke"><button class="clean-btn toggleButton_gllP toggleButtonDisabled_aARS" type="button" disabled="" title="Switch between dark and light mode (currently light mode)" aria-label="Switch between dark and light mode (currently light mode)" aria-live="polite"><svg viewBox="0 0 24 24" width="24" height="24" class="lightToggleIcon_pyhR"><path fill="currentColor" d="M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"></path></svg><svg viewBox="0 0 24 24" width="24" height="24" class="darkToggleIcon_wfgR"><path fill="currentColor" d="M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"></path></svg></button></div><div class="searchBox_ZlJk"></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div></nav><div id="docusaurus_skipToContent_fallback" class="main-wrapper mainWrapper_z2l0 docsWrapper_BCFX"><button aria-label="Scroll back to top" class="clean-btn theme-back-to-top-button backToTopButton_sjWU" type="button"></button><div class="docPage__5DB"><main class="docMainContainer_gTbr docMainContainerEnhanced_Uz_u"><div class="container padding-top--md padding-bottom--lg"><div class="row"><div class="col docItemCol_VOVn"><div class="docItemContainer_Djhp"><article><span class="theme-doc-version-badge badge badge--secondary">Version: 4.17.0</span><div class="tocCollapsible_ETCw theme-doc-toc-mobile tocMobile_ITEo"><button type="button" class="clean-btn tocCollapsibleButton_TO0P">On this page</button></div><div class="theme-doc-markdown markdown"><header><h1>BookKeeper installation</h1></header><p>You can install BookKeeper either by <a href="#download">downloading</a> a <a href="http://www.gzip.org/" target="_blank" rel="noopener noreferrer">GZipped</a> tarball package, using the <a href="https://hub.docker.com/r/apache/bookkeeper/tags" target="_blank" rel="noopener noreferrer">Docker image</a> or <a href="#clone">cloning</a> the BookKeeper repository.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="requirements">Requirements<a href="#requirements" class="hash-link" aria-label="Direct link to Requirements" title="Direct link to Requirements">​</a></h2><ul><li><a href="https://www.opengroup.org/membership/forums/platform/unix" target="_blank" rel="noopener noreferrer">Unix environment</a></li><li><a href="http://www.oracle.com/technetwork/java/javase/downloads/index.html" target="_blank" rel="noopener noreferrer">Java Development Kit 1.8</a> or later</li></ul><h2 class="anchor anchorWithStickyNavbar_LWe7" id="download">Download<a href="#download" class="hash-link" aria-label="Direct link to Download" title="Direct link to Download">​</a></h2><p>You can download Apache BookKeeper releases from the <a href="/releases">Download page</a>.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="clone">Clone<a href="#clone" class="hash-link" aria-label="Direct link to Clone" title="Direct link to Clone">​</a></h2><p>To build BookKeeper from source, clone the repository from the <a href="https://github.com/apache/bookkeeper" target="_blank" rel="noopener noreferrer">GitHub mirror</a>:</p><div class="language-shell codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-shell codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">$ </span><span class="token function" style="color:#d73a49">git</span><span class="token plain"> clone https://github.com/apache/bookkeeper</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><h2 class="anchor anchorWithStickyNavbar_LWe7" id="build-using-maven">Build using Maven<a href="#build-using-maven" class="hash-link" aria-label="Direct link to Build using Maven" title="Direct link to Build using Maven">​</a></h2><p>Once you have the BookKeeper on your local machine, either by <a href="#download">downloading</a> or <a href="#clone">cloning</a> it, you can then build BookKeeper from source using Maven:</p><div class="language-shell codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-shell codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">$ mvn package</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>Since 4.8.0, bookkeeper introduces <code>table service</code>. If you would like to build and tryout table service, you can build it with <code>stream</code> profile.</p><div class="language-shell codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-shell codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">$ mvn package -Dstream</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><blockquote><p>You can skip tests by adding the <code>-DskipTests</code> flag when running <code>mvn package</code>.</p></blockquote><h3 class="anchor anchorWithStickyNavbar_LWe7" id="useful-maven-commands">Useful Maven commands<a href="#useful-maven-commands" class="hash-link" aria-label="Direct link to Useful Maven commands" title="Direct link to Useful Maven commands">​</a></h3><p>Some other useful Maven commands beyond <code>mvn package</code>:</p><table><thead><tr><th align="left">Command</th><th align="left">Action</th></tr></thead><tbody><tr><td align="left"><code>mvn clean</code></td><td align="left">Removes build artifacts</td></tr><tr><td align="left"><code>mvn compile</code></td><td align="left">Compiles JAR files from Java sources</td></tr><tr><td align="left"><code>mvn compile spotbugs:spotbugs</code></td><td align="left">Compile using the Maven <a href="https://github.com/spotbugs/spotbugs-maven-plugin" target="_blank" rel="noopener noreferrer">SpotBugs</a> plugin</td></tr><tr><td align="left"><code>mvn install</code></td><td align="left">Install the BookKeeper JAR locally in your local Maven cache (usually in the <code>~/.m2</code> directory)</td></tr><tr><td align="left"><code>mvn deploy</code></td><td align="left">Deploy the BookKeeper JAR to the Maven repo (if you have the proper credentials)</td></tr><tr><td align="left"><code>mvn verify</code></td><td align="left">Performs a wide variety of verification and validation tasks</td></tr><tr><td align="left"><code>mvn apache-rat:check</code></td><td align="left">Run Maven using the <a href="http://creadur.apache.org/rat/apache-rat-plugin/" target="_blank" rel="noopener noreferrer">Apache Rat</a> plugin</td></tr><tr><td align="left"><code>mvn compile javadoc:aggregate</code></td><td align="left">Build Javadocs locally</td></tr><tr><td align="left"><code>mvn -am -pl bookkeeper-dist/server package</code></td><td align="left">Build a server distribution using the Maven <a href="http://maven.apache.org/plugins/maven-assembly-plugin/" target="_blank" rel="noopener noreferrer">Assembly</a> plugin</td></tr></tbody></table><blockquote><p>You can enable <code>table service</code> by adding the <code>-Dstream</code> flag when running above commands.</p></blockquote><h2 class="anchor anchorWithStickyNavbar_LWe7" id="package-directory">Package directory<a href="#package-directory" class="hash-link" aria-label="Direct link to Package directory" title="Direct link to Package directory">​</a></h2><p>The BookKeeper project contains several subfolders that you should be aware of:</p><table><thead><tr><th align="left">Subfolder</th><th align="left">Contains</th></tr></thead><tbody><tr><td align="left"><a href="https://github.com/apache/bookkeeper/tree/master/bookkeeper-server" target="_blank" rel="noopener noreferrer"><code>bookkeeper-server</code></a></td><td align="left">The BookKeeper server and client</td></tr><tr><td align="left"><a href="https://github.com/apache/bookkeeper/tree/master/bookkeeper-benchmark" target="_blank" rel="noopener noreferrer"><code>bookkeeper-benchmark</code></a></td><td align="left">A benchmarking suite for measuring BookKeeper performance</td></tr><tr><td align="left"><a href="https://github.com/apache/bookkeeper/tree/master/bookkeeper-stats" target="_blank" rel="noopener noreferrer"><code>bookkeeper-stats</code></a></td><td align="left">A BookKeeper stats library</td></tr><tr><td align="left"><a href="https://github.com/apache/bookkeeper/tree/master/bookkeeper-stats-providers" target="_blank" rel="noopener noreferrer"><code>bookkeeper-stats-providers</code></a></td><td align="left">BookKeeper stats providers</td></tr></tbody></table></div></article><nav class="pagination-nav docusaurus-mt-lg" aria-label="Docs pages navigation"></nav></div></div><div class="col col--3"><div class="tableOfContents_bqdL thin-scrollbar theme-doc-toc-desktop"><ul class="table-of-contents table-of-contents__left-border"><li><a href="#requirements" class="table-of-contents__link toc-highlight">Requirements</a></li><li><a href="#download" class="table-of-contents__link toc-highlight">Download</a></li><li><a href="#clone" class="table-of-contents__link toc-highlight">Clone</a></li><li><a href="#build-using-maven" class="table-of-contents__link toc-highlight">Build using Maven</a><ul><li><a href="#useful-maven-commands" class="table-of-contents__link toc-highlight">Useful Maven commands</a></li></ul></li><li><a href="#package-directory" class="table-of-contents__link toc-highlight">Package directory</a></li></ul></div></div></div></div></main></div></div><footer class="footer footer--dark"><div class="container container-fluid"><div class="row footer__links"><div class="col footer__col"><div class="footer__title">Documentation</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/docs/overview">Overview</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/getting-started/installation">Getting started</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/deployment/manual">Deployment</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/admin/bookies">Administration</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/api/overview">API</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/security/overview">Security</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/development/protocol">Development</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/reference/config">Reference</a></li></ul></div><div class="col footer__col"><div class="footer__title">Community</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/community/mailing-lists">Mailing lists</a></li><li class="footer__item"><a class="footer__link-item" href="/community/slack">Slack</a></li><li class="footer__item"><a href="https://github.com/apache/bookkeeper" target="_blank" rel="noopener noreferrer" class="footer__link-item">Github<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a href="https://twitter.com/asfbookkeeper" target="_blank" rel="noopener noreferrer" class="footer__link-item">Twitter<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div><div class="col footer__col"><div class="footer__title">Project</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/project/who">Who are we?</a></li><li class="footer__item"><a class="footer__link-item" href="/project/bylaws">Bylaws</a></li><li class="footer__item"><a href="https://apache.org/licenses" target="_blank" rel="noopener noreferrer" class="footer__link-item">License<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a class="footer__link-item" href="/project/privacy">Privacy policy</a></li><li class="footer__item"><a href="https://www.apache.org/foundation/sponsorship.html" target="_blank" rel="noopener noreferrer" class="footer__link-item">Sponsorship<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a href="https://www.apache.org/foundation/thanks.html" target="_blank" rel="noopener noreferrer" class="footer__link-item">Thanks<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div></div><div class="footer__bottom text--center"><div class="footer__copyright"><footer class="footer">
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navbar__brand" href="/"><div class="navbar__logo"><img src="/img/bk-logo.svg" alt="Apache Bookkeeper" class="themedImage_ToTc themedImage--light_HNdA"><img src="/img/bk-logo.svg" alt="Apache Bookkeeper" class="themedImage_ToTc themedImage--dark_i4oU"></div><b class="navbar__title text--truncate">Apache BookKeeper</b></a><a aria-current="page" class="navbar__item navbar__link navbar__link--active" href="/docs/overview/">Documentation</a><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Community</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/community/mailing-lists">Mailing lists</a></li><li><a class="dropdown__link" href="/community/slack">Slack</a></li><li><a href="https://github.com/apache/bookkeeper/issues" target="_blank" rel="noopener noreferrer" class="dropdown__link">Github issues<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a class="dropdown__link" href="/community/releases">Release management</a></li><li><a class="dropdown__link" href="/community/meeting">Community meetings</a></li><li><a class="dropdown__link" href="/community/contributing">Contribution guide</a></li><li><a class="dropdown__link" href="/community/coding-guide">Coding guide</a></li><li><a class="dropdown__link" href="/community/testing">Testing guide</a></li><li><a class="dropdown__link" href="/community/issue-report">Issue report guide</a></li><li><a class="dropdown__link" href="/community/release-guide">Release guide</a></li><li><a class="dropdown__link" href="/community/presentations">Presentations</a></li><li><a class="dropdown__link" href="/community/bookkeeper-proposals">BookKeeper proposals (BP)</a></li></ul></div><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Project</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/project/who">Who are we?</a></li><li><a class="dropdown__link" href="/project/bylaws">Bylaws</a></li><li><a href="https://apache.org/licenses" target="_blank" rel="noopener noreferrer" class="dropdown__link">License<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a class="dropdown__link" href="/project/privacy">Privacy policy</a></li><li><a href="https://www.apache.org/foundation/sponsorship.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Sponsorship<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a href="https://www.apache.org/foundation/thanks.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Thanks<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div></div><div class="navbar__items navbar__items--right"><div class="navbar__item dropdown dropdown--hoverable dropdown--right"><a class="navbar__link" aria-haspopup="true" aria-expanded="false" role="button" href="/docs/overview/">4.17.0</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/docs/next/getting-started/installation">Next</a></li><li><a aria-current="page" class="dropdown__link dropdown__link--active" href="/docs/getting-started/installation">4.17.0</a></li><li><a class="dropdown__link" href="/docs/4.16.5/getting-started/installation">4.16.5</a></li><li><a class="dropdown__link" href="/docs/4.15.5/getting-started/installation">4.15.5</a></li><li><a class="dropdown__link" href="/docs/4.14.8/getting-started/installation">4.14.8</a></li><li><a class="dropdown__link" href="/docs/4.13.0/getting-started/installation">4.13.0</a></li><li><a class="dropdown__link" href="/docs/4.12.1/getting-started/installation">4.12.1</a></li><li><a class="dropdown__link" href="/docs/4.11.1/getting-started/installation">4.11.1</a></li><li><a class="dropdown__link" href="/docs/4.10.0/getting-started/installation">4.10.0</a></li><li><a class="dropdown__link" href="/docs/4.9.2/getting-started/installation">4.9.2</a></li><li><a class="dropdown__link" href="/docs/4.8.2/getting-started/installation">4.8.2</a></li><li><a class="dropdown__link" href="/docs/4.7.3/getting-started/installation">4.7.3</a></li><li><a class="dropdown__link" href="/docs/4.6.2/getting-started/installation">4.6.2</a></li><li><a class="dropdown__link" href="/docs/4.5.1/getting-started/installation">4.5.1</a></li></ul></div><a class="navbar__item navbar__link" href="/releases">Download</a><div class="toggle_vylO colorModeToggle_DEke"><button class="clean-btn toggleButton_gllP toggleButtonDisabled_aARS" type="button" disabled="" title="Switch between dark and light mode (currently light mode)" aria-label="Switch between dark and light mode (currently light mode)" aria-live="polite"><svg viewBox="0 0 24 24" width="24" height="24" class="lightToggleIcon_pyhR"><path fill="currentColor" d="M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"></path></svg><svg viewBox="0 0 24 24" width="24" height="24" class="darkToggleIcon_wfgR"><path fill="currentColor" d="M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"></path></svg></button></div><div class="searchBox_ZlJk"></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div></nav><div id="docusaurus_skipToContent_fallback" class="main-wrapper mainWrapper_z2l0 docsWrapper_BCFX"><button aria-label="Scroll back to top" class="clean-btn theme-back-to-top-button backToTopButton_sjWU" type="button"></button><div class="docPage__5DB"><aside class="theme-doc-sidebar-container docSidebarContainer_b6E3"><div class="sidebarViewport_Xe31"><div class="sidebar_njMd"><nav aria-label="Docs sidebar" class="menu thin-scrollbar menu_SIkG"><ul class="theme-doc-sidebar-menu menu__list"><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-1 menu__list-item"><a class="menu__link" href="/docs/overview/">Overview</a></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret menu__link--active" aria-expanded="true" href="/docs/getting-started/installation">Getting started</a></div><ul style="display:block;overflow:visible;height:auto" class="menu__list"><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link menu__link--active" aria-current="page" tabindex="0" href="/docs/getting-started/installation">Installation</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/getting-started/run-locally">Run bookies locally</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/getting-started/concepts">Concepts and architecture</a></li></ul></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/deployment/manual">Deployment</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/admin/bookies">Administration</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/api/overview">API</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/security/overview">Security</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/development/protocol">Development</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/reference/config">Reference</a></div></li></ul></nav></div></div></aside><main class="docMainContainer_gTbr"><div class="container padding-top--md padding-bottom--lg"><div class="row"><div class="col docItemCol_VOVn"><div class="docItemContainer_Djhp"><article><span class="theme-doc-version-badge badge badge--secondary">Version: 4.17.0</span><div class="tocCollapsible_ETCw theme-doc-toc-mobile tocMobile_ITEo"><button type="button" class="clean-btn tocCollapsibleButton_TO0P">On this page</button></div><div class="theme-doc-markdown markdown"><header><h1>BookKeeper installation</h1></header><p>You can install BookKeeper either by <a href="#download">downloading</a> a <a href="http://www.gzip.org/" target="_blank" rel="noopener noreferrer">GZipped</a> tarball package, using the <a href="https://hub.docker.com/r/apache/bookkeeper/tags" target="_blank" rel="noopener noreferrer">Docker image</a> or <a href="#clone">cloning</a> the BookKeeper repository.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="requirements">Requirements<a href="#requirements" class="hash-link" aria-label="Direct link to Requirements" title="Direct link to Requirements">​</a></h2><ul><li><a href="https://www.opengroup.org/membership/forums/platform/unix" target="_blank" rel="noopener noreferrer">Unix environment</a></li><li><a href="http://www.oracle.com/technetwork/java/javase/downloads/index.html" target="_blank" rel="noopener noreferrer">Java Development Kit 1.8</a> or later</li></ul><h2 class="anchor anchorWithStickyNavbar_LWe7" id="download">Download<a href="#download" class="hash-link" aria-label="Direct link to Download" title="Direct link to Download">​</a></h2><p>You can download Apache BookKeeper releases from the <a href="/releases">Download page</a>.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="clone">Clone<a href="#clone" class="hash-link" aria-label="Direct link to Clone" title="Direct link to Clone">​</a></h2><p>To build BookKeeper from source, clone the repository from the <a href="https://github.com/apache/bookkeeper" target="_blank" rel="noopener noreferrer">GitHub mirror</a>:</p><div class="language-shell codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-shell codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">$ </span><span class="token function" style="color:#d73a49">git</span><span class="token plain"> clone https://github.com/apache/bookkeeper</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><h2 class="anchor anchorWithStickyNavbar_LWe7" id="build-using-maven">Build using Maven<a href="#build-using-maven" class="hash-link" aria-label="Direct link to Build using Maven" title="Direct link to Build using Maven">​</a></h2><p>Once you have the BookKeeper on your local machine, either by <a href="#download">downloading</a> or <a href="#clone">cloning</a> it, you can then build BookKeeper from source using Maven:</p><div class="language-shell codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-shell codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">$ mvn package</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>Since 4.8.0, bookkeeper introduces <code>table service</code>. If you would like to build and tryout table service, you can build it with <code>stream</code> profile.</p><div class="language-shell codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-shell codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">$ mvn package -Dstream</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><blockquote><p>You can skip tests by adding the <code>-DskipTests</code> flag when running <code>mvn package</code>.</p></blockquote><h3 class="anchor anchorWithStickyNavbar_LWe7" id="useful-maven-commands">Useful Maven commands<a href="#useful-maven-commands" class="hash-link" aria-label="Direct link to Useful Maven commands" title="Direct link to Useful Maven commands">​</a></h3><p>Some other useful Maven commands beyond <code>mvn package</code>:</p><table><thead><tr><th align="left">Command</th><th align="left">Action</th></tr></thead><tbody><tr><td align="left"><code>mvn clean</code></td><td align="left">Removes build artifacts</td></tr><tr><td align="left"><code>mvn compile</code></td><td align="left">Compiles JAR files from Java sources</td></tr><tr><td align="left"><code>mvn compile spotbugs:spotbugs</code></td><td align="left">Compile using the Maven <a href="https://github.com/spotbugs/spotbugs-maven-plugin" target="_blank" rel="noopener noreferrer">SpotBugs</a> plugin</td></tr><tr><td align="left"><code>mvn install</code></td><td align="left">Install the BookKeeper JAR locally in your local Maven cache (usually in the <code>~/.m2</code> directory)</td></tr><tr><td align="left"><code>mvn deploy</code></td><td align="left">Deploy the BookKeeper JAR to the Maven repo (if you have the proper credentials)</td></tr><tr><td align="left"><code>mvn verify</code></td><td align="left">Performs a wide variety of verification and validation tasks</td></tr><tr><td align="left"><code>mvn apache-rat:check</code></td><td align="left">Run Maven using the <a href="http://creadur.apache.org/rat/apache-rat-plugin/" target="_blank" rel="noopener noreferrer">Apache Rat</a> plugin</td></tr><tr><td align="left"><code>mvn compile javadoc:aggregate</code></td><td align="left">Build Javadocs locally</td></tr><tr><td align="left"><code>mvn -am -pl bookkeeper-dist/server package</code></td><td align="left">Build a server distribution using the Maven <a href="http://maven.apache.org/plugins/maven-assembly-plugin/" target="_blank" rel="noopener noreferrer">Assembly</a> plugin</td></tr></tbody></table><blockquote><p>You can enable <code>table service</code> by adding the <code>-Dstream</code> flag when running above commands.</p></blockquote><h2 class="anchor anchorWithStickyNavbar_LWe7" id="package-directory">Package directory<a href="#package-directory" class="hash-link" aria-label="Direct link to Package directory" title="Direct link to Package directory">​</a></h2><p>The BookKeeper project contains several subfolders that you should be aware of:</p><table><thead><tr><th align="left">Subfolder</th><th align="left">Contains</th></tr></thead><tbody><tr><td align="left"><a href="https://github.com/apache/bookkeeper/tree/master/bookkeeper-server" target="_blank" rel="noopener noreferrer"><code>bookkeeper-server</code></a></td><td align="left">The BookKeeper server and client</td></tr><tr><td align="left"><a href="https://github.com/apache/bookkeeper/tree/master/bookkeeper-benchmark" target="_blank" rel="noopener noreferrer"><code>bookkeeper-benchmark</code></a></td><td align="left">A benchmarking suite for measuring BookKeeper performance</td></tr><tr><td align="left"><a href="https://github.com/apache/bookkeeper/tree/master/bookkeeper-stats" target="_blank" rel="noopener noreferrer"><code>bookkeeper-stats</code></a></td><td align="left">A BookKeeper stats library</td></tr><tr><td align="left"><a href="https://github.com/apache/bookkeeper/tree/master/bookkeeper-stats-providers" target="_blank" rel="noopener noreferrer"><code>bookkeeper-stats-providers</code></a></td><td align="left">BookKeeper stats providers</td></tr></tbody></table></div></article><nav class="pagination-nav docusaurus-mt-lg" aria-label="Docs pages navigation"><a class="pagination-nav__link pagination-nav__link--prev" href="/docs/overview/"><div class="pagination-nav__sublabel">Previous</div><div class="pagination-nav__label">Apache BookKeeper 4.16.4-SNAPSHOT</div></a><a class="pagination-nav__link pagination-nav__link--next" href="/docs/getting-started/run-locally"><div class="pagination-nav__sublabel">Next</div><div class="pagination-nav__label">Run bookies locally</div></a></nav></div></div><div class="col col--3"><div class="tableOfContents_bqdL thin-scrollbar theme-doc-toc-desktop"><ul class="table-of-contents table-of-contents__left-border"><li><a href="#requirements" class="table-of-contents__link toc-highlight">Requirements</a></li><li><a href="#download" class="table-of-contents__link toc-highlight">Download</a></li><li><a href="#clone" class="table-of-contents__link toc-highlight">Clone</a></li><li><a href="#build-using-maven" class="table-of-contents__link toc-highlight">Build using Maven</a><ul><li><a href="#useful-maven-commands" class="table-of-contents__link toc-highlight">Useful Maven commands</a></li></ul></li><li><a href="#package-directory" class="table-of-contents__link toc-highlight">Package directory</a></li></ul></div></div></div></div></main></div></div><footer class="footer footer--dark"><div class="container container-fluid"><div class="row footer__links"><div class="col footer__col"><div class="footer__title">Documentation</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/docs/overview">Overview</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/getting-started/installation">Getting started</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/deployment/manual">Deployment</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/admin/bookies">Administration</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/api/overview">API</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/security/overview">Security</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/development/protocol">Development</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/reference/config">Reference</a></li></ul></div><div class="col footer__col"><div class="footer__title">Community</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/community/mailing-lists">Mailing lists</a></li><li class="footer__item"><a class="footer__link-item" href="/community/slack">Slack</a></li><li class="footer__item"><a href="https://github.com/apache/bookkeeper" target="_blank" rel="noopener noreferrer" class="footer__link-item">Github<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a href="https://twitter.com/asfbookkeeper" target="_blank" rel="noopener noreferrer" class="footer__link-item">Twitter<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div><div class="col footer__col"><div class="footer__title">Project</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/project/who">Who are we?</a></li><li class="footer__item"><a class="footer__link-item" href="/project/bylaws">Bylaws</a></li><li class="footer__item"><a href="https://apache.org/licenses" target="_blank" rel="noopener noreferrer" class="footer__link-item">License<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a class="footer__link-item" href="/project/privacy">Privacy policy</a></li><li class="footer__item"><a href="https://www.apache.org/foundation/sponsorship.html" target="_blank" rel="noopener noreferrer" class="footer__link-item">Sponsorship<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a href="https://www.apache.org/foundation/thanks.html" target="_blank" rel="noopener noreferrer" class="footer__link-item">Thanks<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div></div><div class="footer__bottom text--center"><div class="footer__copyright"><footer class="footer">
         <div class="container">
           <div class="content has-text-centered">
             <p>
@@ -22,7 +22,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/getting-started/run-locally/index.html b/content/docs/getting-started/run-locally/index.html
index 0cfc1c2..c151645 100644
--- a/content/docs/getting-started/run-locally/index.html
+++ b/content/docs/getting-started/run-locally/index.html
@@ -4,12 +4,12 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">Run bookies locally | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/getting-started/run-locally"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.17.0"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.17.0"><meta data-rh="true" name="docsearch:version" content="4.17.0"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.17.0"><meta data-rh="true" property="og:title" content="Run bookies locally | Apache BookKeeper"><meta data-rh="true" name="description" content="Bookies are individual BookKeeper servers. You can run an ensemble of bookies locally on a single machine using the localbookie command of the bookkeeper CLI tool and specifying the number of bookies you&#x27;d like to include in the ensemble."><meta data-rh="true" property="og:description" content="Bookies are individual BookKeeper servers. You can run an ensemble of bookies locally on a single machine using the localbookie command of the bookkeeper CLI tool and specifying the number of bookies you&#x27;d like to include in the ensemble."><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/getting-started/run-locally"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/getting-started/run-locally" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/getting-started/run-locally" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
-<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navbar__brand" href="/"><div class="navbar__logo"><img src="/img/bk-logo.svg" alt="Apache Bookkeeper" class="themedImage_ToTc themedImage--light_HNdA"><img src="/img/bk-logo.svg" alt="Apache Bookkeeper" class="themedImage_ToTc themedImage--dark_i4oU"></div><b class="navbar__title text--truncate">Apache BookKeeper</b></a><a class="navbar__item navbar__link" href="/docs/overview/">Documentation</a><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Community</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/community/mailing-lists">Mailing lists</a></li><li><a class="dropdown__link" href="/community/slack">Slack</a></li><li><a href="https://github.com/apache/bookkeeper/issues" target="_blank" rel="noopener noreferrer" class="dropdown__link">Github issues<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a class="dropdown__link" href="/community/releases">Release management</a></li><li><a class="dropdown__link" href="/community/meeting">Community meetings</a></li><li><a class="dropdown__link" href="/community/contributing">Contribution guide</a></li><li><a class="dropdown__link" href="/community/coding-guide">Coding guide</a></li><li><a class="dropdown__link" href="/community/testing">Testing guide</a></li><li><a class="dropdown__link" href="/community/issue-report">Issue report guide</a></li><li><a class="dropdown__link" href="/community/release-guide">Release guide</a></li><li><a class="dropdown__link" href="/community/presentations">Presentations</a></li><li><a class="dropdown__link" href="/community/bookkeeper-proposals">BookKeeper proposals (BP)</a></li></ul></div><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Project</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/project/who">Who are we?</a></li><li><a class="dropdown__link" href="/project/bylaws">Bylaws</a></li><li><a href="https://apache.org/licenses" target="_blank" rel="noopener noreferrer" class="dropdown__link">License<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a class="dropdown__link" href="/project/privacy">Privacy policy</a></li><li><a href="https://www.apache.org/foundation/sponsorship.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Sponsorship<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a href="https://www.apache.org/foundation/thanks.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Thanks<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div></div><div class="navbar__items navbar__items--right"><div class="navbar__item dropdown dropdown--hoverable dropdown--right"><a class="navbar__link" aria-haspopup="true" aria-expanded="false" role="button" href="/docs/admin/autorecovery">4.17.0</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/docs/next/getting-started/run-locally">Next</a></li><li><a aria-current="page" class="dropdown__link dropdown__link--active" href="/docs/getting-started/run-locally">4.17.0</a></li><li><a class="dropdown__link" href="/docs/4.16.5/getting-started/run-locally">4.16.5</a></li><li><a class="dropdown__link" href="/docs/4.15.5/getting-started/run-locally">4.15.5</a></li><li><a class="dropdown__link" href="/docs/4.14.8/getting-started/run-locally">4.14.8</a></li><li><a class="dropdown__link" href="/docs/4.13.0/getting-started/run-locally">4.13.0</a></li><li><a class="dropdown__link" href="/docs/4.12.1/getting-started/run-locally">4.12.1</a></li><li><a class="dropdown__link" href="/docs/4.11.1/getting-started/run-locally">4.11.1</a></li><li><a class="dropdown__link" href="/docs/4.10.0/getting-started/run-locally">4.10.0</a></li><li><a class="dropdown__link" href="/docs/4.9.2/getting-started/run-locally">4.9.2</a></li><li><a class="dropdown__link" href="/docs/4.8.2/getting-started/run-locally">4.8.2</a></li><li><a class="dropdown__link" href="/docs/4.7.3/getting-started/run-locally">4.7.3</a></li><li><a class="dropdown__link" href="/docs/4.6.2/getting-started/run-locally">4.6.2</a></li><li><a class="dropdown__link" href="/docs/4.5.1/getting-started/run-locally">4.5.1</a></li></ul></div><a class="navbar__item navbar__link" href="/releases">Download</a><div class="toggle_vylO colorModeToggle_DEke"><button class="clean-btn toggleButton_gllP toggleButtonDisabled_aARS" type="button" disabled="" title="Switch between dark and light mode (currently light mode)" aria-label="Switch between dark and light mode (currently light mode)" aria-live="polite"><svg viewBox="0 0 24 24" width="24" height="24" class="lightToggleIcon_pyhR"><path fill="currentColor" d="M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"></path></svg><svg viewBox="0 0 24 24" width="24" height="24" class="darkToggleIcon_wfgR"><path fill="currentColor" d="M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"></path></svg></button></div><div class="searchBox_ZlJk"></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div></nav><div id="docusaurus_skipToContent_fallback" class="main-wrapper mainWrapper_z2l0 docsWrapper_BCFX"><button aria-label="Scroll back to top" class="clean-btn theme-back-to-top-button backToTopButton_sjWU" type="button"></button><div class="docPage__5DB"><main class="docMainContainer_gTbr docMainContainerEnhanced_Uz_u"><div class="container padding-top--md padding-bottom--lg"><div class="row"><div class="col docItemCol_VOVn"><div class="docItemContainer_Djhp"><article><span class="theme-doc-version-badge badge badge--secondary">Version: 4.17.0</span><div class="theme-doc-markdown markdown"><header><h1>Run bookies locally</h1></header><p>Bookies are individual BookKeeper servers. You can run an ensemble of bookies locally on a single machine using the <a href="/docs/reference/cli#bookkeeper-localbookie"><code>localbookie</code></a> command of the <code>bookkeeper</code> CLI tool and specifying the number of bookies you&#x27;d like to include in the ensemble.</p><p>This would start up an ensemble with 10 bookies:</p><div class="language-shell codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-shell codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">$ bin/bookkeeper localbookie </span><span class="token number" style="color:#36acaa">10</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><blockquote><p>When you start up an ensemble using <code>localbookie</code>, all bookies run in a single JVM process.</p></blockquote></div></article><nav class="pagination-nav docusaurus-mt-lg" aria-label="Docs pages navigation"></nav></div></div></div></div></main></div></div><footer class="footer footer--dark"><div class="container container-fluid"><div class="row footer__links"><div class="col footer__col"><div class="footer__title">Documentation</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/docs/overview">Overview</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/getting-started/installation">Getting started</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/deployment/manual">Deployment</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/admin/bookies">Administration</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/api/overview">API</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/security/overview">Security</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/development/protocol">Development</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/reference/config">Reference</a></li></ul></div><div class="col footer__col"><div class="footer__title">Community</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/community/mailing-lists">Mailing lists</a></li><li class="footer__item"><a class="footer__link-item" href="/community/slack">Slack</a></li><li class="footer__item"><a href="https://github.com/apache/bookkeeper" target="_blank" rel="noopener noreferrer" class="footer__link-item">Github<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a href="https://twitter.com/asfbookkeeper" target="_blank" rel="noopener noreferrer" class="footer__link-item">Twitter<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div><div class="col footer__col"><div class="footer__title">Project</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/project/who">Who are we?</a></li><li class="footer__item"><a class="footer__link-item" href="/project/bylaws">Bylaws</a></li><li class="footer__item"><a href="https://apache.org/licenses" target="_blank" rel="noopener noreferrer" class="footer__link-item">License<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a class="footer__link-item" href="/project/privacy">Privacy policy</a></li><li class="footer__item"><a href="https://www.apache.org/foundation/sponsorship.html" target="_blank" rel="noopener noreferrer" class="footer__link-item">Sponsorship<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a href="https://www.apache.org/foundation/thanks.html" target="_blank" rel="noopener noreferrer" class="footer__link-item">Thanks<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div></div><div class="footer__bottom text--center"><div class="footer__copyright"><footer class="footer">
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navbar__brand" href="/"><div class="navbar__logo"><img src="/img/bk-logo.svg" alt="Apache Bookkeeper" class="themedImage_ToTc themedImage--light_HNdA"><img src="/img/bk-logo.svg" alt="Apache Bookkeeper" class="themedImage_ToTc themedImage--dark_i4oU"></div><b class="navbar__title text--truncate">Apache BookKeeper</b></a><a aria-current="page" class="navbar__item navbar__link navbar__link--active" href="/docs/overview/">Documentation</a><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Community</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/community/mailing-lists">Mailing lists</a></li><li><a class="dropdown__link" href="/community/slack">Slack</a></li><li><a href="https://github.com/apache/bookkeeper/issues" target="_blank" rel="noopener noreferrer" class="dropdown__link">Github issues<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a class="dropdown__link" href="/community/releases">Release management</a></li><li><a class="dropdown__link" href="/community/meeting">Community meetings</a></li><li><a class="dropdown__link" href="/community/contributing">Contribution guide</a></li><li><a class="dropdown__link" href="/community/coding-guide">Coding guide</a></li><li><a class="dropdown__link" href="/community/testing">Testing guide</a></li><li><a class="dropdown__link" href="/community/issue-report">Issue report guide</a></li><li><a class="dropdown__link" href="/community/release-guide">Release guide</a></li><li><a class="dropdown__link" href="/community/presentations">Presentations</a></li><li><a class="dropdown__link" href="/community/bookkeeper-proposals">BookKeeper proposals (BP)</a></li></ul></div><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Project</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/project/who">Who are we?</a></li><li><a class="dropdown__link" href="/project/bylaws">Bylaws</a></li><li><a href="https://apache.org/licenses" target="_blank" rel="noopener noreferrer" class="dropdown__link">License<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a class="dropdown__link" href="/project/privacy">Privacy policy</a></li><li><a href="https://www.apache.org/foundation/sponsorship.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Sponsorship<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a href="https://www.apache.org/foundation/thanks.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Thanks<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div></div><div class="navbar__items navbar__items--right"><div class="navbar__item dropdown dropdown--hoverable dropdown--right"><a class="navbar__link" aria-haspopup="true" aria-expanded="false" role="button" href="/docs/overview/">4.17.0</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/docs/next/getting-started/run-locally">Next</a></li><li><a aria-current="page" class="dropdown__link dropdown__link--active" href="/docs/getting-started/run-locally">4.17.0</a></li><li><a class="dropdown__link" href="/docs/4.16.5/getting-started/run-locally">4.16.5</a></li><li><a class="dropdown__link" href="/docs/4.15.5/getting-started/run-locally">4.15.5</a></li><li><a class="dropdown__link" href="/docs/4.14.8/getting-started/run-locally">4.14.8</a></li><li><a class="dropdown__link" href="/docs/4.13.0/getting-started/run-locally">4.13.0</a></li><li><a class="dropdown__link" href="/docs/4.12.1/getting-started/run-locally">4.12.1</a></li><li><a class="dropdown__link" href="/docs/4.11.1/getting-started/run-locally">4.11.1</a></li><li><a class="dropdown__link" href="/docs/4.10.0/getting-started/run-locally">4.10.0</a></li><li><a class="dropdown__link" href="/docs/4.9.2/getting-started/run-locally">4.9.2</a></li><li><a class="dropdown__link" href="/docs/4.8.2/getting-started/run-locally">4.8.2</a></li><li><a class="dropdown__link" href="/docs/4.7.3/getting-started/run-locally">4.7.3</a></li><li><a class="dropdown__link" href="/docs/4.6.2/getting-started/run-locally">4.6.2</a></li><li><a class="dropdown__link" href="/docs/4.5.1/getting-started/run-locally">4.5.1</a></li></ul></div><a class="navbar__item navbar__link" href="/releases">Download</a><div class="toggle_vylO colorModeToggle_DEke"><button class="clean-btn toggleButton_gllP toggleButtonDisabled_aARS" type="button" disabled="" title="Switch between dark and light mode (currently light mode)" aria-label="Switch between dark and light mode (currently light mode)" aria-live="polite"><svg viewBox="0 0 24 24" width="24" height="24" class="lightToggleIcon_pyhR"><path fill="currentColor" d="M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"></path></svg><svg viewBox="0 0 24 24" width="24" height="24" class="darkToggleIcon_wfgR"><path fill="currentColor" d="M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"></path></svg></button></div><div class="searchBox_ZlJk"></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div></nav><div id="docusaurus_skipToContent_fallback" class="main-wrapper mainWrapper_z2l0 docsWrapper_BCFX"><button aria-label="Scroll back to top" class="clean-btn theme-back-to-top-button backToTopButton_sjWU" type="button"></button><div class="docPage__5DB"><aside class="theme-doc-sidebar-container docSidebarContainer_b6E3"><div class="sidebarViewport_Xe31"><div class="sidebar_njMd"><nav aria-label="Docs sidebar" class="menu thin-scrollbar menu_SIkG"><ul class="theme-doc-sidebar-menu menu__list"><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-1 menu__list-item"><a class="menu__link" href="/docs/overview/">Overview</a></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret menu__link--active" aria-expanded="true" href="/docs/getting-started/installation">Getting started</a></div><ul style="display:block;overflow:visible;height:auto" class="menu__list"><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/getting-started/installation">Installation</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link menu__link--active" aria-current="page" tabindex="0" href="/docs/getting-started/run-locally">Run bookies locally</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/getting-started/concepts">Concepts and architecture</a></li></ul></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/deployment/manual">Deployment</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/admin/bookies">Administration</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/api/overview">API</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/security/overview">Security</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/development/protocol">Development</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/reference/config">Reference</a></div></li></ul></nav></div></div></aside><main class="docMainContainer_gTbr"><div class="container padding-top--md padding-bottom--lg"><div class="row"><div class="col docItemCol_VOVn"><div class="docItemContainer_Djhp"><article><span class="theme-doc-version-badge badge badge--secondary">Version: 4.17.0</span><div class="theme-doc-markdown markdown"><header><h1>Run bookies locally</h1></header><p>Bookies are individual BookKeeper servers. You can run an ensemble of bookies locally on a single machine using the <a href="/docs/reference/cli#bookkeeper-localbookie"><code>localbookie</code></a> command of the <code>bookkeeper</code> CLI tool and specifying the number of bookies you&#x27;d like to include in the ensemble.</p><p>This would start up an ensemble with 10 bookies:</p><div class="language-shell codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-shell codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">$ bin/bookkeeper localbookie </span><span class="token number" style="color:#36acaa">10</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><blockquote><p>When you start up an ensemble using <code>localbookie</code>, all bookies run in a single JVM process.</p></blockquote></div></article><nav class="pagination-nav docusaurus-mt-lg" aria-label="Docs pages navigation"><a class="pagination-nav__link pagination-nav__link--prev" href="/docs/getting-started/installation"><div class="pagination-nav__sublabel">Previous</div><div class="pagination-nav__label">BookKeeper installation</div></a><a class="pagination-nav__link pagination-nav__link--next" href="/docs/getting-started/concepts"><div class="pagination-nav__sublabel">Next</div><div class="pagination-nav__label">BookKeeper concepts and architecture</div></a></nav></div></div></div></div></main></div></div><footer class="footer footer--dark"><div class="container container-fluid"><div class="row footer__links"><div class="col footer__col"><div class="footer__title">Documentation</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/docs/overview">Overview</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/getting-started/installation">Getting started</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/deployment/manual">Deployment</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/admin/bookies">Administration</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/api/overview">API</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/security/overview">Security</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/development/protocol">Development</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/reference/config">Reference</a></li></ul></div><div class="col footer__col"><div class="footer__title">Community</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/community/mailing-lists">Mailing lists</a></li><li class="footer__item"><a class="footer__link-item" href="/community/slack">Slack</a></li><li class="footer__item"><a href="https://github.com/apache/bookkeeper" target="_blank" rel="noopener noreferrer" class="footer__link-item">Github<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a href="https://twitter.com/asfbookkeeper" target="_blank" rel="noopener noreferrer" class="footer__link-item">Twitter<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div><div class="col footer__col"><div class="footer__title">Project</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/project/who">Who are we?</a></li><li class="footer__item"><a class="footer__link-item" href="/project/bylaws">Bylaws</a></li><li class="footer__item"><a href="https://apache.org/licenses" target="_blank" rel="noopener noreferrer" class="footer__link-item">License<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a class="footer__link-item" href="/project/privacy">Privacy policy</a></li><li class="footer__item"><a href="https://www.apache.org/foundation/sponsorship.html" target="_blank" rel="noopener noreferrer" class="footer__link-item">Sponsorship<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a href="https://www.apache.org/foundation/thanks.html" target="_blank" rel="noopener noreferrer" class="footer__link-item">Thanks<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div></div><div class="footer__bottom text--center"><div class="footer__copyright"><footer class="footer">
         <div class="container">
           <div class="content has-text-centered">
             <p>
@@ -22,7 +22,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/latest/api/javadoc/member-search-index.zip b/content/docs/latest/api/javadoc/member-search-index.zip
index c98cb87..405e29a 100644
--- a/content/docs/latest/api/javadoc/member-search-index.zip
+++ b/content/docs/latest/api/javadoc/member-search-index.zip
Binary files differ
diff --git a/content/docs/latest/api/javadoc/package-search-index.zip b/content/docs/latest/api/javadoc/package-search-index.zip
index e036c25..be0d5f4 100644
--- a/content/docs/latest/api/javadoc/package-search-index.zip
+++ b/content/docs/latest/api/javadoc/package-search-index.zip
Binary files differ
diff --git a/content/docs/latest/api/javadoc/type-search-index.zip b/content/docs/latest/api/javadoc/type-search-index.zip
index 39986c7..8d6006b 100644
--- a/content/docs/latest/api/javadoc/type-search-index.zip
+++ b/content/docs/latest/api/javadoc/type-search-index.zip
Binary files differ
diff --git a/content/docs/next/admin/autorecovery/index.html b/content/docs/next/admin/autorecovery/index.html
index b48a52d..601ebf7 100644
--- a/content/docs/next/admin/autorecovery/index.html
+++ b/content/docs/next/admin/autorecovery/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">Using AutoRecovery | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/next/admin/autorecovery"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="current"><meta data-rh="true" name="docusaurus_tag" content="docs-default-current"><meta data-rh="true" name="docsearch:version" content="current"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-current"><meta data-rh="true" property="og:title" content="Using AutoRecovery | Apache BookKeeper"><meta data-rh="true" name="description" content="When a bookie crashes, all ledgers on that bookie become under-replicated. In order to bring all ledgers in your BookKeeper cluster back to full replication, you&#x27;ll need to recover the data from any offline bookies. There are two ways to recover bookies&#x27; data:"><meta data-rh="true" property="og:description" content="When a bookie crashes, all ledgers on that bookie become under-replicated. In order to bring all ledgers in your BookKeeper cluster back to full replication, you&#x27;ll need to recover the data from any offline bookies. There are two ways to recover bookies&#x27; data:"><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/next/admin/autorecovery"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/next/admin/autorecovery" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/next/admin/autorecovery" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -23,7 +23,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/next/admin/bookies/index.html b/content/docs/next/admin/bookies/index.html
index 21ba874..6c9fb72 100644
--- a/content/docs/next/admin/bookies/index.html
+++ b/content/docs/next/admin/bookies/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">BookKeeper administration | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/next/admin/bookies"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="current"><meta data-rh="true" name="docusaurus_tag" content="docs-default-current"><meta data-rh="true" name="docsearch:version" content="current"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-current"><meta data-rh="true" property="og:title" content="BookKeeper administration | Apache BookKeeper"><meta data-rh="true" name="description" content="This document is a guide to deploying, administering, and maintaining BookKeeper. It also discusses best practices and common problems."><meta data-rh="true" property="og:description" content="This document is a guide to deploying, administering, and maintaining BookKeeper. It also discusses best practices and common problems."><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/next/admin/bookies"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/next/admin/bookies" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/next/admin/bookies" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -22,7 +22,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/next/admin/decomission/index.html b/content/docs/next/admin/decomission/index.html
index d9e7966..444da98 100644
--- a/content/docs/next/admin/decomission/index.html
+++ b/content/docs/next/admin/decomission/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">Decommission Bookies | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/next/admin/decomission"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="current"><meta data-rh="true" name="docusaurus_tag" content="docs-default-current"><meta data-rh="true" name="docsearch:version" content="current"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-current"><meta data-rh="true" property="og:title" content="Decommission Bookies | Apache BookKeeper"><meta data-rh="true" name="description" content="In case the user wants to decommission a bookie, the following process is useful to follow in order to verify if the"><meta data-rh="true" property="og:description" content="In case the user wants to decommission a bookie, the following process is useful to follow in order to verify if the"><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/next/admin/decomission"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/next/admin/decomission" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/next/admin/decomission" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -33,7 +33,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/next/admin/geo-replication/index.html b/content/docs/next/admin/geo-replication/index.html
index f73dc91..55bf41c 100644
--- a/content/docs/next/admin/geo-replication/index.html
+++ b/content/docs/next/admin/geo-replication/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">Geo-replication | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/next/admin/geo-replication"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="current"><meta data-rh="true" name="docusaurus_tag" content="docs-default-current"><meta data-rh="true" name="docsearch:version" content="current"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-current"><meta data-rh="true" property="og:title" content="Geo-replication | Apache BookKeeper"><meta data-rh="true" name="description" content="Geo-replication is the replication of data across BookKeeper clusters. In order to enable geo-replication for a group of BookKeeper clusters,"><meta data-rh="true" property="og:description" content="Geo-replication is the replication of data across BookKeeper clusters. In order to enable geo-replication for a group of BookKeeper clusters,"><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/next/admin/geo-replication"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/next/admin/geo-replication" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/next/admin/geo-replication" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -22,7 +22,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/next/admin/http/index.html b/content/docs/next/admin/http/index.html
index 9fd5ab8..06788fa 100644
--- a/content/docs/next/admin/http/index.html
+++ b/content/docs/next/admin/http/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">BookKeeper Admin REST API | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/next/admin/http"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="current"><meta data-rh="true" name="docusaurus_tag" content="docs-default-current"><meta data-rh="true" name="docsearch:version" content="current"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-current"><meta data-rh="true" property="og:title" content="BookKeeper Admin REST API | Apache BookKeeper"><meta data-rh="true" name="description" content="This document introduces BookKeeper HTTP endpoints, which can be used for BookKeeper administration."><meta data-rh="true" property="og:description" content="This document introduces BookKeeper HTTP endpoints, which can be used for BookKeeper administration."><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/next/admin/http"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/next/admin/http" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/next/admin/http" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -29,7 +29,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/next/admin/metrics/index.html b/content/docs/next/admin/metrics/index.html
index e732f2c..47d9a28 100644
--- a/content/docs/next/admin/metrics/index.html
+++ b/content/docs/next/admin/metrics/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">Metric collection | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/next/admin/metrics"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="current"><meta data-rh="true" name="docusaurus_tag" content="docs-default-current"><meta data-rh="true" name="docsearch:version" content="current"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-current"><meta data-rh="true" property="og:title" content="Metric collection | Apache BookKeeper"><meta data-rh="true" name="description" content="BookKeeper enables metrics collection through a variety of stats providers."><meta data-rh="true" property="og:description" content="BookKeeper enables metrics collection through a variety of stats providers."><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/next/admin/metrics"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/next/admin/metrics" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/next/admin/metrics" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -22,7 +22,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/next/admin/perf/index.html b/content/docs/next/admin/perf/index.html
index c7d5e15..40c95f6 100644
--- a/content/docs/next/admin/perf/index.html
+++ b/content/docs/next/admin/perf/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">Performance tuning | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/next/admin/perf"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="current"><meta data-rh="true" name="docusaurus_tag" content="docs-default-current"><meta data-rh="true" name="docsearch:version" content="current"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-current"><meta data-rh="true" property="og:title" content="Performance tuning | Apache BookKeeper"><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/next/admin/perf"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/next/admin/perf" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/next/admin/perf" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -22,7 +22,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/next/admin/placement/index.html b/content/docs/next/admin/placement/index.html
index cc087e3..a2a26a0 100644
--- a/content/docs/next/admin/placement/index.html
+++ b/content/docs/next/admin/placement/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">Customized placement policies | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/next/admin/placement"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="current"><meta data-rh="true" name="docusaurus_tag" content="docs-default-current"><meta data-rh="true" name="docsearch:version" content="current"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-current"><meta data-rh="true" property="og:title" content="Customized placement policies | Apache BookKeeper"><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/next/admin/placement"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/next/admin/placement" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/next/admin/placement" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -22,7 +22,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/next/admin/upgrade/index.html b/content/docs/next/admin/upgrade/index.html
index 33c8478..ee13794 100644
--- a/content/docs/next/admin/upgrade/index.html
+++ b/content/docs/next/admin/upgrade/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">Upgrade | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/next/admin/upgrade"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="current"><meta data-rh="true" name="docusaurus_tag" content="docs-default-current"><meta data-rh="true" name="docsearch:version" content="current"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-current"><meta data-rh="true" property="og:title" content="Upgrade | Apache BookKeeper"><meta data-rh="true" name="description" content="If you have questions about upgrades (or need help), please feel free to reach out to us by mailing list or Slack Channel."><meta data-rh="true" property="og:description" content="If you have questions about upgrades (or need help), please feel free to reach out to us by mailing list or Slack Channel."><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/next/admin/upgrade"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/next/admin/upgrade" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/next/admin/upgrade" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -64,7 +64,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/next/api/distributedlog-api/index.html b/content/docs/next/api/distributedlog-api/index.html
index 8c28c62..d2ee3bc 100644
--- a/content/docs/next/api/distributedlog-api/index.html
+++ b/content/docs/next/api/distributedlog-api/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">DistributedLog | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/next/api/distributedlog-api"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="current"><meta data-rh="true" name="docusaurus_tag" content="docs-default-current"><meta data-rh="true" name="docsearch:version" content="current"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-current"><meta data-rh="true" property="og:title" content="DistributedLog | Apache BookKeeper"><meta data-rh="true" name="description" content="DistributedLog began its life as a separate project under the Apache Foundation. It was merged into BookKeeper in 2017."><meta data-rh="true" property="og:description" content="DistributedLog began its life as a separate project under the Apache Foundation. It was merged into BookKeeper in 2017."><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/next/api/distributedlog-api"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/next/api/distributedlog-api" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/next/api/distributedlog-api" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -22,7 +22,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/next/api/ledger-adv-api/index.html b/content/docs/next/api/ledger-adv-api/index.html
index 3e31632..6d5c862 100644
--- a/content/docs/next/api/ledger-adv-api/index.html
+++ b/content/docs/next/api/ledger-adv-api/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">The Advanced Ledger API | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/next/api/ledger-adv-api"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="current"><meta data-rh="true" name="docusaurus_tag" content="docs-default-current"><meta data-rh="true" name="docsearch:version" content="current"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-current"><meta data-rh="true" property="og:title" content="The Advanced Ledger API | Apache BookKeeper"><meta data-rh="true" name="description" content="In release 4.5.0, Apache BookKeeper introduces a few advanced API for advanced usage."><meta data-rh="true" property="og:description" content="In release 4.5.0, Apache BookKeeper introduces a few advanced API for advanced usage."><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/next/api/ledger-adv-api"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/next/api/ledger-adv-api" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/next/api/ledger-adv-api" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -27,7 +27,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/next/api/ledger-api/index.html b/content/docs/next/api/ledger-api/index.html
index 9dcc9f6..418d1b6 100644
--- a/content/docs/next/api/ledger-api/index.html
+++ b/content/docs/next/api/ledger-api/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">The Ledger API | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/next/api/ledger-api"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="current"><meta data-rh="true" name="docusaurus_tag" content="docs-default-current"><meta data-rh="true" name="docsearch:version" content="current"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-current"><meta data-rh="true" property="og:title" content="The Ledger API | Apache BookKeeper"><meta data-rh="true" name="description" content="The ledger API is a lower-level API for BookKeeper that enables you to interact with ledgers directly."><meta data-rh="true" property="og:description" content="The ledger API is a lower-level API for BookKeeper that enables you to interact with ledgers directly."><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/next/api/ledger-api"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/next/api/ledger-api" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/next/api/ledger-api" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -46,7 +46,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/next/api/overview/index.html b/content/docs/next/api/overview/index.html
index 0ad032b..f5875a0 100644
--- a/content/docs/next/api/overview/index.html
+++ b/content/docs/next/api/overview/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">BookKeeper API | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/next/api/overview"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="current"><meta data-rh="true" name="docusaurus_tag" content="docs-default-current"><meta data-rh="true" name="docsearch:version" content="current"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-current"><meta data-rh="true" property="og:title" content="BookKeeper API | Apache BookKeeper"><meta data-rh="true" name="description" content="BookKeeper offers a few APIs that applications can use to interact with it:"><meta data-rh="true" property="og:description" content="BookKeeper offers a few APIs that applications can use to interact with it:"><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/next/api/overview"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/next/api/overview" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/next/api/overview" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -24,7 +24,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/next/deployment/kubernetes/index.html b/content/docs/next/deployment/kubernetes/index.html
index f78f620..b586c1d 100644
--- a/content/docs/next/deployment/kubernetes/index.html
+++ b/content/docs/next/deployment/kubernetes/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">Deploying Apache BookKeeper on Kubernetes | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/next/deployment/kubernetes"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="current"><meta data-rh="true" name="docusaurus_tag" content="docs-default-current"><meta data-rh="true" name="docsearch:version" content="current"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-current"><meta data-rh="true" property="og:title" content="Deploying Apache BookKeeper on Kubernetes | Apache BookKeeper"><meta data-rh="true" name="description" content="Apache BookKeeper can be easily deployed in Kubernetes clusters. The managed clusters on Google Container Engine is the most convenient way."><meta data-rh="true" property="og:description" content="Apache BookKeeper can be easily deployed in Kubernetes clusters. The managed clusters on Google Container Engine is the most convenient way."><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/next/deployment/kubernetes"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/next/deployment/kubernetes" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/next/deployment/kubernetes" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -29,7 +29,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/next/deployment/manual/index.html b/content/docs/next/deployment/manual/index.html
index 61cea78..7d5c83c 100644
--- a/content/docs/next/deployment/manual/index.html
+++ b/content/docs/next/deployment/manual/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">Manual deployment | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/next/deployment/manual"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="current"><meta data-rh="true" name="docusaurus_tag" content="docs-default-current"><meta data-rh="true" name="docsearch:version" content="current"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-current"><meta data-rh="true" property="og:title" content="Manual deployment | Apache BookKeeper"><meta data-rh="true" name="description" content="A BookKeeper cluster consists of two main components:"><meta data-rh="true" property="og:description" content="A BookKeeper cluster consists of two main components:"><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/next/deployment/manual"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/next/deployment/manual" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/next/deployment/manual" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -22,7 +22,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/next/development/codebase/index.html b/content/docs/next/development/codebase/index.html
index 7ffa969..a42c4f2 100644
--- a/content/docs/next/development/codebase/index.html
+++ b/content/docs/next/development/codebase/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">The BookKeeper codebase | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/next/development/codebase"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="current"><meta data-rh="true" name="docusaurus_tag" content="docs-default-current"><meta data-rh="true" name="docsearch:version" content="current"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-current"><meta data-rh="true" property="og:title" content="The BookKeeper codebase | Apache BookKeeper"><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/next/development/codebase"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/next/development/codebase" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/next/development/codebase" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -22,7 +22,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/next/development/protocol/index.html b/content/docs/next/development/protocol/index.html
index 8efa98b..6144ab5 100644
--- a/content/docs/next/development/protocol/index.html
+++ b/content/docs/next/development/protocol/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">The BookKeeper protocol | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/next/development/protocol"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="current"><meta data-rh="true" name="docusaurus_tag" content="docs-default-current"><meta data-rh="true" name="docsearch:version" content="current"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-current"><meta data-rh="true" property="og:title" content="The BookKeeper protocol | Apache BookKeeper"><meta data-rh="true" name="description" content="BookKeeper uses a special replication protocol for guaranteeing persistent storage of entries in an ensemble of bookies."><meta data-rh="true" property="og:description" content="BookKeeper uses a special replication protocol for guaranteeing persistent storage of entries in an ensemble of bookies."><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/next/development/protocol"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/next/development/protocol" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/next/development/protocol" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -22,7 +22,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/next/getting-started/concepts/index.html b/content/docs/next/getting-started/concepts/index.html
index 54eafca..c230653 100644
--- a/content/docs/next/getting-started/concepts/index.html
+++ b/content/docs/next/getting-started/concepts/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">BookKeeper concepts and architecture | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/next/getting-started/concepts"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="current"><meta data-rh="true" name="docusaurus_tag" content="docs-default-current"><meta data-rh="true" name="docsearch:version" content="current"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-current"><meta data-rh="true" property="og:title" content="BookKeeper concepts and architecture | Apache BookKeeper"><meta data-rh="true" name="description" content="BookKeeper is a service that provides persistent storage of streams of log entries---aka records---in sequences called ledgers. BookKeeper replicates stored entries across multiple servers."><meta data-rh="true" property="og:description" content="BookKeeper is a service that provides persistent storage of streams of log entries---aka records---in sequences called ledgers. BookKeeper replicates stored entries across multiple servers."><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/next/getting-started/concepts"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/next/getting-started/concepts" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/next/getting-started/concepts" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -22,7 +22,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/next/getting-started/installation/index.html b/content/docs/next/getting-started/installation/index.html
index 9a3da7e..bd37111 100644
--- a/content/docs/next/getting-started/installation/index.html
+++ b/content/docs/next/getting-started/installation/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">BookKeeper installation | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/next/getting-started/installation"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="current"><meta data-rh="true" name="docusaurus_tag" content="docs-default-current"><meta data-rh="true" name="docsearch:version" content="current"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-current"><meta data-rh="true" property="og:title" content="BookKeeper installation | Apache BookKeeper"><meta data-rh="true" name="description" content="You can install BookKeeper either by downloading a GZipped tarball package, using the Docker image or cloning the BookKeeper repository."><meta data-rh="true" property="og:description" content="You can install BookKeeper either by downloading a GZipped tarball package, using the Docker image or cloning the BookKeeper repository."><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/next/getting-started/installation"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/next/getting-started/installation" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/next/getting-started/installation" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -22,7 +22,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/next/getting-started/run-locally/index.html b/content/docs/next/getting-started/run-locally/index.html
index 05c0134..58813de 100644
--- a/content/docs/next/getting-started/run-locally/index.html
+++ b/content/docs/next/getting-started/run-locally/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">Run bookies locally | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/next/getting-started/run-locally"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="current"><meta data-rh="true" name="docusaurus_tag" content="docs-default-current"><meta data-rh="true" name="docsearch:version" content="current"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-current"><meta data-rh="true" property="og:title" content="Run bookies locally | Apache BookKeeper"><meta data-rh="true" name="description" content="Bookies are individual BookKeeper servers. You can run an ensemble of bookies locally on a single machine using the localbookie command of the bookkeeper CLI tool and specifying the number of bookies you&#x27;d like to include in the ensemble."><meta data-rh="true" property="og:description" content="Bookies are individual BookKeeper servers. You can run an ensemble of bookies locally on a single machine using the localbookie command of the bookkeeper CLI tool and specifying the number of bookies you&#x27;d like to include in the ensemble."><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/next/getting-started/run-locally"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/next/getting-started/run-locally" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/next/getting-started/run-locally" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -22,7 +22,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/next/overview/index.html b/content/docs/next/overview/index.html
index 9948ac6..3cde5b2 100644
--- a/content/docs/next/overview/index.html
+++ b/content/docs/next/overview/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">Apache BookKeeper 4.18.0-SNAPSHOT | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/next/overview/"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="current"><meta data-rh="true" name="docusaurus_tag" content="docs-default-current"><meta data-rh="true" name="docsearch:version" content="current"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-current"><meta data-rh="true" property="og:title" content="Apache BookKeeper 4.18.0-SNAPSHOT | Apache BookKeeper"><meta data-rh="true" name="description" content="&lt;!--"><meta data-rh="true" property="og:description" content="&lt;!--"><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/next/overview/"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/next/overview/" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/next/overview/" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -24,7 +24,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/next/reference/cli/index.html b/content/docs/next/reference/cli/index.html
index ed2a7a5..2d1f9ee 100644
--- a/content/docs/next/reference/cli/index.html
+++ b/content/docs/next/reference/cli/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">BookKeeper CLI tool reference | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/next/reference/cli"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="current"><meta data-rh="true" name="docusaurus_tag" content="docs-default-current"><meta data-rh="true" name="docsearch:version" content="current"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-current"><meta data-rh="true" property="og:title" content="BookKeeper CLI tool reference | Apache BookKeeper"><meta data-rh="true" name="description" content="bookkeeper command"><meta data-rh="true" property="og:description" content="bookkeeper command"><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/next/reference/cli"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/next/reference/cli" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/next/reference/cli" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -29,7 +29,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/next/reference/config/index.html b/content/docs/next/reference/config/index.html
index d73e782..8e01ad3 100644
--- a/content/docs/next/reference/config/index.html
+++ b/content/docs/next/reference/config/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">BookKeeper configuration | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/next/reference/config"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="current"><meta data-rh="true" name="docusaurus_tag" content="docs-default-current"><meta data-rh="true" name="docsearch:version" content="current"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-current"><meta data-rh="true" property="og:title" content="BookKeeper configuration | Apache BookKeeper"><meta data-rh="true" name="description" content="The table below lists parameters that you can set to configure bookies. All configuration takes place in the bk_server.conf file in the bookkeeper-server/conf directory of your BookKeeper installation."><meta data-rh="true" property="og:description" content="The table below lists parameters that you can set to configure bookies. All configuration takes place in the bk_server.conf file in the bookkeeper-server/conf directory of your BookKeeper installation."><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/next/reference/config"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/next/reference/config" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/next/reference/config" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -29,7 +29,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/next/security/overview/index.html b/content/docs/next/security/overview/index.html
index 244a1d0..5954c54 100644
--- a/content/docs/next/security/overview/index.html
+++ b/content/docs/next/security/overview/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">BookKeeper Security | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/next/security/overview"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="current"><meta data-rh="true" name="docusaurus_tag" content="docs-default-current"><meta data-rh="true" name="docsearch:version" content="current"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-current"><meta data-rh="true" property="og:title" content="BookKeeper Security | Apache BookKeeper"><meta data-rh="true" name="description" content="In the 4.5.0 release, the BookKeeper community added a number of features that can be used, together or separately, to secure a BookKeeper cluster."><meta data-rh="true" property="og:description" content="In the 4.5.0 release, the BookKeeper community added a number of features that can be used, together or separately, to secure a BookKeeper cluster."><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/next/security/overview"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/next/security/overview" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/next/security/overview" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -23,7 +23,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/next/security/sasl/index.html b/content/docs/next/security/sasl/index.html
index b729b40..08663d7 100644
--- a/content/docs/next/security/sasl/index.html
+++ b/content/docs/next/security/sasl/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">Authentication using SASL | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/next/security/sasl"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="current"><meta data-rh="true" name="docusaurus_tag" content="docs-default-current"><meta data-rh="true" name="docsearch:version" content="current"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-current"><meta data-rh="true" property="og:title" content="Authentication using SASL | Apache BookKeeper"><meta data-rh="true" name="description" content="Bookies support client authentication via SASL. Currently we only support GSSAPI (Kerberos). We will start"><meta data-rh="true" property="og:description" content="Bookies support client authentication via SASL. Currently we only support GSSAPI (Kerberos). We will start"><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/next/security/sasl"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/next/security/sasl" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/next/security/sasl" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -45,7 +45,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/next/security/tls/index.html b/content/docs/next/security/tls/index.html
index 16ff4e0..113d0c7 100644
--- a/content/docs/next/security/tls/index.html
+++ b/content/docs/next/security/tls/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">Encryption and Authentication using TLS | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/next/security/tls"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="current"><meta data-rh="true" name="docusaurus_tag" content="docs-default-current"><meta data-rh="true" name="docsearch:version" content="current"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-current"><meta data-rh="true" property="og:title" content="Encryption and Authentication using TLS | Apache BookKeeper"><meta data-rh="true" name="description" content="Apache BookKeeper allows clients and autorecovery daemons to communicate over TLS, although this is not enabled by default."><meta data-rh="true" property="og:description" content="Apache BookKeeper allows clients and autorecovery daemons to communicate over TLS, although this is not enabled by default."><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/next/security/tls"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/next/security/tls" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/next/security/tls" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -53,7 +53,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/next/security/zookeeper/index.html b/content/docs/next/security/zookeeper/index.html
index 5b37af1..978dd15 100644
--- a/content/docs/next/security/zookeeper/index.html
+++ b/content/docs/next/security/zookeeper/index.html
@@ -4,8 +4,8 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">ZooKeeper Authentication | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/next/security/zookeeper"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="current"><meta data-rh="true" name="docusaurus_tag" content="docs-default-current"><meta data-rh="true" name="docsearch:version" content="current"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-current"><meta data-rh="true" property="og:title" content="ZooKeeper Authentication | Apache BookKeeper"><meta data-rh="true" name="description" content="New Clusters"><meta data-rh="true" property="og:description" content="New Clusters"><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/next/security/zookeeper"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/next/security/zookeeper" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/next/security/zookeeper" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -29,7 +29,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/overview/index.html b/content/docs/overview/index.html
index 06ee809..fa5786f 100644
--- a/content/docs/overview/index.html
+++ b/content/docs/overview/index.html
@@ -4,14 +4,14 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">Apache BookKeeper 4.16.4-SNAPSHOT | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/overview/"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.17.0"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.17.0"><meta data-rh="true" name="docsearch:version" content="4.17.0"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.17.0"><meta data-rh="true" property="og:title" content="Apache BookKeeper 4.16.4-SNAPSHOT | Apache BookKeeper"><meta data-rh="true" name="description" content="&lt;!--"><meta data-rh="true" property="og:description" content="&lt;!--"><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/overview/"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/overview/" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/overview/" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
-<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navbar__brand" href="/"><div class="navbar__logo"><img src="/img/bk-logo.svg" alt="Apache Bookkeeper" class="themedImage_ToTc themedImage--light_HNdA"><img src="/img/bk-logo.svg" alt="Apache Bookkeeper" class="themedImage_ToTc themedImage--dark_i4oU"></div><b class="navbar__title text--truncate">Apache BookKeeper</b></a><a aria-current="page" class="navbar__item navbar__link navbar__link--active" href="/docs/overview/">Documentation</a><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Community</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/community/mailing-lists">Mailing lists</a></li><li><a class="dropdown__link" href="/community/slack">Slack</a></li><li><a href="https://github.com/apache/bookkeeper/issues" target="_blank" rel="noopener noreferrer" class="dropdown__link">Github issues<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a class="dropdown__link" href="/community/releases">Release management</a></li><li><a class="dropdown__link" href="/community/meeting">Community meetings</a></li><li><a class="dropdown__link" href="/community/contributing">Contribution guide</a></li><li><a class="dropdown__link" href="/community/coding-guide">Coding guide</a></li><li><a class="dropdown__link" href="/community/testing">Testing guide</a></li><li><a class="dropdown__link" href="/community/issue-report">Issue report guide</a></li><li><a class="dropdown__link" href="/community/release-guide">Release guide</a></li><li><a class="dropdown__link" href="/community/presentations">Presentations</a></li><li><a class="dropdown__link" href="/community/bookkeeper-proposals">BookKeeper proposals (BP)</a></li></ul></div><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Project</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/project/who">Who are we?</a></li><li><a class="dropdown__link" href="/project/bylaws">Bylaws</a></li><li><a href="https://apache.org/licenses" target="_blank" rel="noopener noreferrer" class="dropdown__link">License<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a class="dropdown__link" href="/project/privacy">Privacy policy</a></li><li><a href="https://www.apache.org/foundation/sponsorship.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Sponsorship<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a href="https://www.apache.org/foundation/thanks.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Thanks<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div></div><div class="navbar__items navbar__items--right"><div class="navbar__item dropdown dropdown--hoverable dropdown--right"><a class="navbar__link" aria-haspopup="true" aria-expanded="false" role="button" href="/docs/admin/autorecovery">4.17.0</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/docs/next/overview/">Next</a></li><li><a aria-current="page" class="dropdown__link dropdown__link--active" href="/docs/overview/">4.17.0</a></li><li><a class="dropdown__link" href="/docs/4.16.5/overview/">4.16.5</a></li><li><a class="dropdown__link" href="/docs/4.15.5/overview/">4.15.5</a></li><li><a class="dropdown__link" href="/docs/4.14.8/overview/">4.14.8</a></li><li><a class="dropdown__link" href="/docs/4.13.0/overview/">4.13.0</a></li><li><a class="dropdown__link" href="/docs/4.12.1/overview/">4.12.1</a></li><li><a class="dropdown__link" href="/docs/4.11.1/overview/">4.11.1</a></li><li><a class="dropdown__link" href="/docs/4.10.0/overview/">4.10.0</a></li><li><a class="dropdown__link" href="/docs/4.9.2/overview/">4.9.2</a></li><li><a class="dropdown__link" href="/docs/4.8.2/overview/">4.8.2</a></li><li><a class="dropdown__link" href="/docs/4.7.3/overview/">4.7.3</a></li><li><a class="dropdown__link" href="/docs/4.6.2/overview/">4.6.2</a></li><li><a class="dropdown__link" href="/docs/4.5.1/overview/">4.5.1</a></li></ul></div><a class="navbar__item navbar__link" href="/releases">Download</a><div class="toggle_vylO colorModeToggle_DEke"><button class="clean-btn toggleButton_gllP toggleButtonDisabled_aARS" type="button" disabled="" title="Switch between dark and light mode (currently light mode)" aria-label="Switch between dark and light mode (currently light mode)" aria-live="polite"><svg viewBox="0 0 24 24" width="24" height="24" class="lightToggleIcon_pyhR"><path fill="currentColor" d="M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"></path></svg><svg viewBox="0 0 24 24" width="24" height="24" class="darkToggleIcon_wfgR"><path fill="currentColor" d="M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"></path></svg></button></div><div class="searchBox_ZlJk"></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div></nav><div id="docusaurus_skipToContent_fallback" class="main-wrapper mainWrapper_z2l0 docsWrapper_BCFX"><button aria-label="Scroll back to top" class="clean-btn theme-back-to-top-button backToTopButton_sjWU" type="button"></button><div class="docPage__5DB"><main class="docMainContainer_gTbr docMainContainerEnhanced_Uz_u"><div class="container padding-top--md padding-bottom--lg"><div class="row"><div class="col docItemCol_VOVn"><div class="docItemContainer_Djhp"><article><span class="theme-doc-version-badge badge badge--secondary">Version: 4.17.0</span><div class="tocCollapsible_ETCw theme-doc-toc-mobile tocMobile_ITEo"><button type="button" class="clean-btn tocCollapsibleButton_TO0P">On this page</button></div><div class="theme-doc-markdown markdown"><header><h1>Apache BookKeeper 4.16.4-SNAPSHOT</h1></header><p>This documentation is for Apache BookKeeper<!-- -->™<!-- --> version 4.16.4.</p><p>Apache BookKeeper<!-- -->™<!-- --> is a scalable, fault-tolerant, low-latency storage service optimized for real-time workloads. It offers durability, replication, and strong consistency as essentials for building reliable real-time applications.</p><p>BookKeeper is suitable for a wide variety of use cases, including:</p><table><thead><tr><th align="left">Use case</th><th align="left">Example</th></tr></thead><tbody><tr><td align="left"><a href="https://en.wikipedia.org/wiki/Write-ahead_logging" target="_blank" rel="noopener noreferrer">WAL</a> (write-ahead logging)</td><td align="left">The HDFS <a href="https://hadoop.apache.org/docs/r2.5.2/hadoop-project-dist/hadoop-hdfs/HDFSHighAvailabilityWithNFS.html#BookKeeper_as_a_Shared_storage_EXPERIMENTAL" target="_blank" rel="noopener noreferrer">namenode</a></td></tr><tr><td align="left"><a href="https://en.wikipedia.org/wiki/Write-ahead_logging" target="_blank" rel="noopener noreferrer">WAL</a> (write-ahead logging)</td><td align="left">Twitter <a href="https://blog.twitter.com/engineering/en_us/a/2016/strong-consistency-in-manhattan.html" target="_blank" rel="noopener noreferrer">Manhattan</a></td></tr><tr><td align="left"><a href="https://en.wikipedia.org/wiki/Write-ahead_logging" target="_blank" rel="noopener noreferrer">WAL</a> (write-ahead logging)</td><td align="left"><a href="https://github.com/diennea/herddb" target="_blank" rel="noopener noreferrer">HerdDB</a></td></tr><tr><td align="left"><a href="https://en.wikipedia.org/wiki/Write-ahead_logging" target="_blank" rel="noopener noreferrer">WAL</a> (write-ahead logging)</td><td align="left"><a href="https://github.com/pravega/pravega" target="_blank" rel="noopener noreferrer">Pravega</a></td></tr><tr><td align="left">Message storage</td><td align="left"><a href="https://pulsar.apache.org/docs/concepts-architecture-overview#persistent-storage" target="_blank" rel="noopener noreferrer">Apache Pulsar</a></td></tr><tr><td align="left">Offset/cursor storage</td><td align="left"><a href="https://pulsar.apache.org/docs/concepts-architecture-overview#persistent-storage" target="_blank" rel="noopener noreferrer">Apache Pulsar</a></td></tr><tr><td align="left">Object/<a href="https://en.wikipedia.org/wiki/Binary_large_object" target="_blank" rel="noopener noreferrer">BLOB</a> storage</td><td align="left">Storing snapshots to replicated state machines</td></tr></tbody></table><p>Learn more about Apache BookKeeper<!-- -->™<!-- --> and what it can do for your organization:</p><ul><li><a href="/release-notes#4164">Apache BookKeeper 4.16.4 Release Notes</a></li><li><a href="https://bookkeeper.apache.org//docs/latest/api/javadoc" target="_blank" rel="noopener noreferrer">Java API docs</a></li></ul><p>Or start <a href="/docs/getting-started/installation">using</a> Apache BookKeeper today.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="users">Users<a href="#users" class="hash-link" aria-label="Direct link to Users" title="Direct link to Users">​</a></h3><ul><li><strong>Concepts</strong>: Start with <a href="/docs/getting-started/concepts">concepts</a>. This will help you to fully understand
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navbar__brand" href="/"><div class="navbar__logo"><img src="/img/bk-logo.svg" alt="Apache Bookkeeper" class="themedImage_ToTc themedImage--light_HNdA"><img src="/img/bk-logo.svg" alt="Apache Bookkeeper" class="themedImage_ToTc themedImage--dark_i4oU"></div><b class="navbar__title text--truncate">Apache BookKeeper</b></a><a aria-current="page" class="navbar__item navbar__link navbar__link--active" href="/docs/overview/">Documentation</a><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Community</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/community/mailing-lists">Mailing lists</a></li><li><a class="dropdown__link" href="/community/slack">Slack</a></li><li><a href="https://github.com/apache/bookkeeper/issues" target="_blank" rel="noopener noreferrer" class="dropdown__link">Github issues<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a class="dropdown__link" href="/community/releases">Release management</a></li><li><a class="dropdown__link" href="/community/meeting">Community meetings</a></li><li><a class="dropdown__link" href="/community/contributing">Contribution guide</a></li><li><a class="dropdown__link" href="/community/coding-guide">Coding guide</a></li><li><a class="dropdown__link" href="/community/testing">Testing guide</a></li><li><a class="dropdown__link" href="/community/issue-report">Issue report guide</a></li><li><a class="dropdown__link" href="/community/release-guide">Release guide</a></li><li><a class="dropdown__link" href="/community/presentations">Presentations</a></li><li><a class="dropdown__link" href="/community/bookkeeper-proposals">BookKeeper proposals (BP)</a></li></ul></div><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Project</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/project/who">Who are we?</a></li><li><a class="dropdown__link" href="/project/bylaws">Bylaws</a></li><li><a href="https://apache.org/licenses" target="_blank" rel="noopener noreferrer" class="dropdown__link">License<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a class="dropdown__link" href="/project/privacy">Privacy policy</a></li><li><a href="https://www.apache.org/foundation/sponsorship.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Sponsorship<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a href="https://www.apache.org/foundation/thanks.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Thanks<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div></div><div class="navbar__items navbar__items--right"><div class="navbar__item dropdown dropdown--hoverable dropdown--right"><a aria-current="page" class="navbar__link active" aria-haspopup="true" aria-expanded="false" role="button" href="/docs/overview/">4.17.0</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/docs/next/overview/">Next</a></li><li><a aria-current="page" class="dropdown__link dropdown__link--active" href="/docs/overview/">4.17.0</a></li><li><a class="dropdown__link" href="/docs/4.16.5/overview/">4.16.5</a></li><li><a class="dropdown__link" href="/docs/4.15.5/overview/">4.15.5</a></li><li><a class="dropdown__link" href="/docs/4.14.8/overview/">4.14.8</a></li><li><a class="dropdown__link" href="/docs/4.13.0/overview/">4.13.0</a></li><li><a class="dropdown__link" href="/docs/4.12.1/overview/">4.12.1</a></li><li><a class="dropdown__link" href="/docs/4.11.1/overview/">4.11.1</a></li><li><a class="dropdown__link" href="/docs/4.10.0/overview/">4.10.0</a></li><li><a class="dropdown__link" href="/docs/4.9.2/overview/">4.9.2</a></li><li><a class="dropdown__link" href="/docs/4.8.2/overview/">4.8.2</a></li><li><a class="dropdown__link" href="/docs/4.7.3/overview/">4.7.3</a></li><li><a class="dropdown__link" href="/docs/4.6.2/overview/">4.6.2</a></li><li><a class="dropdown__link" href="/docs/4.5.1/overview/">4.5.1</a></li></ul></div><a class="navbar__item navbar__link" href="/releases">Download</a><div class="toggle_vylO colorModeToggle_DEke"><button class="clean-btn toggleButton_gllP toggleButtonDisabled_aARS" type="button" disabled="" title="Switch between dark and light mode (currently light mode)" aria-label="Switch between dark and light mode (currently light mode)" aria-live="polite"><svg viewBox="0 0 24 24" width="24" height="24" class="lightToggleIcon_pyhR"><path fill="currentColor" d="M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"></path></svg><svg viewBox="0 0 24 24" width="24" height="24" class="darkToggleIcon_wfgR"><path fill="currentColor" d="M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"></path></svg></button></div><div class="searchBox_ZlJk"></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div></nav><div id="docusaurus_skipToContent_fallback" class="main-wrapper mainWrapper_z2l0 docsWrapper_BCFX"><button aria-label="Scroll back to top" class="clean-btn theme-back-to-top-button backToTopButton_sjWU" type="button"></button><div class="docPage__5DB"><aside class="theme-doc-sidebar-container docSidebarContainer_b6E3"><div class="sidebarViewport_Xe31"><div class="sidebar_njMd"><nav aria-label="Docs sidebar" class="menu thin-scrollbar menu_SIkG"><ul class="theme-doc-sidebar-menu menu__list"><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-1 menu__list-item"><a class="menu__link menu__link--active" aria-current="page" href="/docs/overview/">Overview</a></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/getting-started/installation">Getting started</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/deployment/manual">Deployment</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/admin/bookies">Administration</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/api/overview">API</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/security/overview">Security</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/development/protocol">Development</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/reference/config">Reference</a></div></li></ul></nav></div></div></aside><main class="docMainContainer_gTbr"><div class="container padding-top--md padding-bottom--lg"><div class="row"><div class="col docItemCol_VOVn"><div class="docItemContainer_Djhp"><article><span class="theme-doc-version-badge badge badge--secondary">Version: 4.17.0</span><div class="tocCollapsible_ETCw theme-doc-toc-mobile tocMobile_ITEo"><button type="button" class="clean-btn tocCollapsibleButton_TO0P">On this page</button></div><div class="theme-doc-markdown markdown"><header><h1>Apache BookKeeper 4.16.4-SNAPSHOT</h1></header><p>This documentation is for Apache BookKeeper<!-- -->™<!-- --> version 4.16.4.</p><p>Apache BookKeeper<!-- -->™<!-- --> is a scalable, fault-tolerant, low-latency storage service optimized for real-time workloads. It offers durability, replication, and strong consistency as essentials for building reliable real-time applications.</p><p>BookKeeper is suitable for a wide variety of use cases, including:</p><table><thead><tr><th align="left">Use case</th><th align="left">Example</th></tr></thead><tbody><tr><td align="left"><a href="https://en.wikipedia.org/wiki/Write-ahead_logging" target="_blank" rel="noopener noreferrer">WAL</a> (write-ahead logging)</td><td align="left">The HDFS <a href="https://hadoop.apache.org/docs/r2.5.2/hadoop-project-dist/hadoop-hdfs/HDFSHighAvailabilityWithNFS.html#BookKeeper_as_a_Shared_storage_EXPERIMENTAL" target="_blank" rel="noopener noreferrer">namenode</a></td></tr><tr><td align="left"><a href="https://en.wikipedia.org/wiki/Write-ahead_logging" target="_blank" rel="noopener noreferrer">WAL</a> (write-ahead logging)</td><td align="left">Twitter <a href="https://blog.twitter.com/engineering/en_us/a/2016/strong-consistency-in-manhattan.html" target="_blank" rel="noopener noreferrer">Manhattan</a></td></tr><tr><td align="left"><a href="https://en.wikipedia.org/wiki/Write-ahead_logging" target="_blank" rel="noopener noreferrer">WAL</a> (write-ahead logging)</td><td align="left"><a href="https://github.com/diennea/herddb" target="_blank" rel="noopener noreferrer">HerdDB</a></td></tr><tr><td align="left"><a href="https://en.wikipedia.org/wiki/Write-ahead_logging" target="_blank" rel="noopener noreferrer">WAL</a> (write-ahead logging)</td><td align="left"><a href="https://github.com/pravega/pravega" target="_blank" rel="noopener noreferrer">Pravega</a></td></tr><tr><td align="left">Message storage</td><td align="left"><a href="https://pulsar.apache.org/docs/concepts-architecture-overview#persistent-storage" target="_blank" rel="noopener noreferrer">Apache Pulsar</a></td></tr><tr><td align="left">Offset/cursor storage</td><td align="left"><a href="https://pulsar.apache.org/docs/concepts-architecture-overview#persistent-storage" target="_blank" rel="noopener noreferrer">Apache Pulsar</a></td></tr><tr><td align="left">Object/<a href="https://en.wikipedia.org/wiki/Binary_large_object" target="_blank" rel="noopener noreferrer">BLOB</a> storage</td><td align="left">Storing snapshots to replicated state machines</td></tr></tbody></table><p>Learn more about Apache BookKeeper<!-- -->™<!-- --> and what it can do for your organization:</p><ul><li><a href="/release-notes#4164">Apache BookKeeper 4.16.4 Release Notes</a></li><li><a href="https://bookkeeper.apache.org//docs/latest/api/javadoc" target="_blank" rel="noopener noreferrer">Java API docs</a></li></ul><p>Or start <a href="/docs/getting-started/installation">using</a> Apache BookKeeper today.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="users">Users<a href="#users" class="hash-link" aria-label="Direct link to Users" title="Direct link to Users">​</a></h3><ul><li><strong>Concepts</strong>: Start with <a href="/docs/getting-started/concepts">concepts</a>. This will help you to fully understand
 the other parts of the documentation, including the setup, integration and operation guides.</li><li><strong>Getting Started</strong>: Install <a href="/docs/getting-started/installation">Apache BookKeeper</a> and run bookies <a href="/docs/getting-started/run-locally">locally</a></li><li><strong>API</strong>: Read the <a href="/docs/api/overview">API</a> documentation to learn how to use Apache BookKeeper to build your applications.</li><li><strong>Deployment</strong>: The <a href="/docs/deployment/manual">Deployment Guide</a> shows how to deploy Apache BookKeeper to production clusters.</li></ul><h3 class="anchor anchorWithStickyNavbar_LWe7" id="administrators">Administrators<a href="#administrators" class="hash-link" aria-label="Direct link to Administrators" title="Direct link to Administrators">​</a></h3><ul><li><strong>Operations</strong>: The <a href="/docs/admin/bookies">Admin Guide</a> shows how to run Apache BookKeeper on production, what are the production
-considerations and best practices.</li></ul><h3 class="anchor anchorWithStickyNavbar_LWe7" id="contributors">Contributors<a href="#contributors" class="hash-link" aria-label="Direct link to Contributors" title="Direct link to Contributors">​</a></h3><ul><li><strong>Details</strong>: Learn <a href="/docs/development/protocol">design details</a> to know more internals.</li></ul></div></article><nav class="pagination-nav docusaurus-mt-lg" aria-label="Docs pages navigation"></nav></div></div><div class="col col--3"><div class="tableOfContents_bqdL thin-scrollbar theme-doc-toc-desktop"><ul class="table-of-contents table-of-contents__left-border"><li><a href="#users" class="table-of-contents__link toc-highlight">Users</a></li><li><a href="#administrators" class="table-of-contents__link toc-highlight">Administrators</a></li><li><a href="#contributors" class="table-of-contents__link toc-highlight">Contributors</a></li></ul></div></div></div></div></main></div></div><footer class="footer footer--dark"><div class="container container-fluid"><div class="row footer__links"><div class="col footer__col"><div class="footer__title">Documentation</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/docs/overview">Overview</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/getting-started/installation">Getting started</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/deployment/manual">Deployment</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/admin/bookies">Administration</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/api/overview">API</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/security/overview">Security</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/development/protocol">Development</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/reference/config">Reference</a></li></ul></div><div class="col footer__col"><div class="footer__title">Community</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/community/mailing-lists">Mailing lists</a></li><li class="footer__item"><a class="footer__link-item" href="/community/slack">Slack</a></li><li class="footer__item"><a href="https://github.com/apache/bookkeeper" target="_blank" rel="noopener noreferrer" class="footer__link-item">Github<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a href="https://twitter.com/asfbookkeeper" target="_blank" rel="noopener noreferrer" class="footer__link-item">Twitter<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div><div class="col footer__col"><div class="footer__title">Project</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/project/who">Who are we?</a></li><li class="footer__item"><a class="footer__link-item" href="/project/bylaws">Bylaws</a></li><li class="footer__item"><a href="https://apache.org/licenses" target="_blank" rel="noopener noreferrer" class="footer__link-item">License<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a class="footer__link-item" href="/project/privacy">Privacy policy</a></li><li class="footer__item"><a href="https://www.apache.org/foundation/sponsorship.html" target="_blank" rel="noopener noreferrer" class="footer__link-item">Sponsorship<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a href="https://www.apache.org/foundation/thanks.html" target="_blank" rel="noopener noreferrer" class="footer__link-item">Thanks<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div></div><div class="footer__bottom text--center"><div class="footer__copyright"><footer class="footer">
+considerations and best practices.</li></ul><h3 class="anchor anchorWithStickyNavbar_LWe7" id="contributors">Contributors<a href="#contributors" class="hash-link" aria-label="Direct link to Contributors" title="Direct link to Contributors">​</a></h3><ul><li><strong>Details</strong>: Learn <a href="/docs/development/protocol">design details</a> to know more internals.</li></ul></div></article><nav class="pagination-nav docusaurus-mt-lg" aria-label="Docs pages navigation"><a class="pagination-nav__link pagination-nav__link--next" href="/docs/getting-started/installation"><div class="pagination-nav__sublabel">Next</div><div class="pagination-nav__label">BookKeeper installation</div></a></nav></div></div><div class="col col--3"><div class="tableOfContents_bqdL thin-scrollbar theme-doc-toc-desktop"><ul class="table-of-contents table-of-contents__left-border"><li><a href="#users" class="table-of-contents__link toc-highlight">Users</a></li><li><a href="#administrators" class="table-of-contents__link toc-highlight">Administrators</a></li><li><a href="#contributors" class="table-of-contents__link toc-highlight">Contributors</a></li></ul></div></div></div></div></main></div></div><footer class="footer footer--dark"><div class="container container-fluid"><div class="row footer__links"><div class="col footer__col"><div class="footer__title">Documentation</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/docs/overview">Overview</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/getting-started/installation">Getting started</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/deployment/manual">Deployment</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/admin/bookies">Administration</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/api/overview">API</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/security/overview">Security</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/development/protocol">Development</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/reference/config">Reference</a></li></ul></div><div class="col footer__col"><div class="footer__title">Community</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/community/mailing-lists">Mailing lists</a></li><li class="footer__item"><a class="footer__link-item" href="/community/slack">Slack</a></li><li class="footer__item"><a href="https://github.com/apache/bookkeeper" target="_blank" rel="noopener noreferrer" class="footer__link-item">Github<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a href="https://twitter.com/asfbookkeeper" target="_blank" rel="noopener noreferrer" class="footer__link-item">Twitter<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div><div class="col footer__col"><div class="footer__title">Project</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/project/who">Who are we?</a></li><li class="footer__item"><a class="footer__link-item" href="/project/bylaws">Bylaws</a></li><li class="footer__item"><a href="https://apache.org/licenses" target="_blank" rel="noopener noreferrer" class="footer__link-item">License<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a class="footer__link-item" href="/project/privacy">Privacy policy</a></li><li class="footer__item"><a href="https://www.apache.org/foundation/sponsorship.html" target="_blank" rel="noopener noreferrer" class="footer__link-item">Sponsorship<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a href="https://www.apache.org/foundation/thanks.html" target="_blank" rel="noopener noreferrer" class="footer__link-item">Thanks<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div></div><div class="footer__bottom text--center"><div class="footer__copyright"><footer class="footer">
         <div class="container">
           <div class="content has-text-centered">
             <p>
@@ -24,7 +24,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/reference/cli/index.html b/content/docs/reference/cli/index.html
index c7aa601..1b1c62e 100644
--- a/content/docs/reference/cli/index.html
+++ b/content/docs/reference/cli/index.html
@@ -4,19 +4,19 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">BookKeeper CLI tool reference | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/reference/cli"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.17.0"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.17.0"><meta data-rh="true" name="docsearch:version" content="4.17.0"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.17.0"><meta data-rh="true" property="og:title" content="BookKeeper CLI tool reference | Apache BookKeeper"><meta data-rh="true" name="description" content="bookkeeper command"><meta data-rh="true" property="og:description" content="bookkeeper command"><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/reference/cli"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/reference/cli" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/reference/cli" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
-<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navbar__brand" href="/"><div class="navbar__logo"><img src="/img/bk-logo.svg" alt="Apache Bookkeeper" class="themedImage_ToTc themedImage--light_HNdA"><img src="/img/bk-logo.svg" alt="Apache Bookkeeper" class="themedImage_ToTc themedImage--dark_i4oU"></div><b class="navbar__title text--truncate">Apache BookKeeper</b></a><a class="navbar__item navbar__link" href="/docs/overview/">Documentation</a><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Community</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/community/mailing-lists">Mailing lists</a></li><li><a class="dropdown__link" href="/community/slack">Slack</a></li><li><a href="https://github.com/apache/bookkeeper/issues" target="_blank" rel="noopener noreferrer" class="dropdown__link">Github issues<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a class="dropdown__link" href="/community/releases">Release management</a></li><li><a class="dropdown__link" href="/community/meeting">Community meetings</a></li><li><a class="dropdown__link" href="/community/contributing">Contribution guide</a></li><li><a class="dropdown__link" href="/community/coding-guide">Coding guide</a></li><li><a class="dropdown__link" href="/community/testing">Testing guide</a></li><li><a class="dropdown__link" href="/community/issue-report">Issue report guide</a></li><li><a class="dropdown__link" href="/community/release-guide">Release guide</a></li><li><a class="dropdown__link" href="/community/presentations">Presentations</a></li><li><a class="dropdown__link" href="/community/bookkeeper-proposals">BookKeeper proposals (BP)</a></li></ul></div><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Project</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/project/who">Who are we?</a></li><li><a class="dropdown__link" href="/project/bylaws">Bylaws</a></li><li><a href="https://apache.org/licenses" target="_blank" rel="noopener noreferrer" class="dropdown__link">License<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a class="dropdown__link" href="/project/privacy">Privacy policy</a></li><li><a href="https://www.apache.org/foundation/sponsorship.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Sponsorship<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a href="https://www.apache.org/foundation/thanks.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Thanks<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div></div><div class="navbar__items navbar__items--right"><div class="navbar__item dropdown dropdown--hoverable dropdown--right"><a class="navbar__link" aria-haspopup="true" aria-expanded="false" role="button" href="/docs/admin/autorecovery">4.17.0</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/docs/next/reference/cli">Next</a></li><li><a aria-current="page" class="dropdown__link dropdown__link--active" href="/docs/reference/cli">4.17.0</a></li><li><a class="dropdown__link" href="/docs/4.16.5/reference/cli">4.16.5</a></li><li><a class="dropdown__link" href="/docs/4.15.5/reference/cli">4.15.5</a></li><li><a class="dropdown__link" href="/docs/4.14.8/reference/cli">4.14.8</a></li><li><a class="dropdown__link" href="/docs/4.13.0/reference/cli">4.13.0</a></li><li><a class="dropdown__link" href="/docs/4.12.1/reference/cli">4.12.1</a></li><li><a class="dropdown__link" href="/docs/4.11.1/reference/cli">4.11.1</a></li><li><a class="dropdown__link" href="/docs/4.10.0/reference/cli">4.10.0</a></li><li><a class="dropdown__link" href="/docs/4.9.2/reference/cli">4.9.2</a></li><li><a class="dropdown__link" href="/docs/4.8.2/reference/cli">4.8.2</a></li><li><a class="dropdown__link" href="/docs/4.7.3/reference/cli">4.7.3</a></li><li><a class="dropdown__link" href="/docs/4.6.2/reference/cli">4.6.2</a></li><li><a class="dropdown__link" href="/docs/4.5.1/reference/cli">4.5.1</a></li></ul></div><a class="navbar__item navbar__link" href="/releases">Download</a><div class="toggle_vylO colorModeToggle_DEke"><button class="clean-btn toggleButton_gllP toggleButtonDisabled_aARS" type="button" disabled="" title="Switch between dark and light mode (currently light mode)" aria-label="Switch between dark and light mode (currently light mode)" aria-live="polite"><svg viewBox="0 0 24 24" width="24" height="24" class="lightToggleIcon_pyhR"><path fill="currentColor" d="M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"></path></svg><svg viewBox="0 0 24 24" width="24" height="24" class="darkToggleIcon_wfgR"><path fill="currentColor" d="M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"></path></svg></button></div><div class="searchBox_ZlJk"></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div></nav><div id="docusaurus_skipToContent_fallback" class="main-wrapper mainWrapper_z2l0 docsWrapper_BCFX"><button aria-label="Scroll back to top" class="clean-btn theme-back-to-top-button backToTopButton_sjWU" type="button"></button><div class="docPage__5DB"><main class="docMainContainer_gTbr docMainContainerEnhanced_Uz_u"><div class="container padding-top--md padding-bottom--lg"><div class="row"><div class="col docItemCol_VOVn"><div class="docItemContainer_Djhp"><article><span class="theme-doc-version-badge badge badge--secondary">Version: 4.17.0</span><div class="tocCollapsible_ETCw theme-doc-toc-mobile tocMobile_ITEo"><button type="button" class="clean-btn tocCollapsibleButton_TO0P">On this page</button></div><div class="theme-doc-markdown markdown"><header><h1>BookKeeper CLI tool reference</h1></header><h2 class="anchor anchorWithStickyNavbar_LWe7" id="bookkeeper-command"><code>bookkeeper</code> command<a href="#bookkeeper-command" class="hash-link" aria-label="Direct link to bookkeeper-command" title="Direct link to bookkeeper-command">​</a></h2><p>Manages bookies.</p><h4 class="anchor anchorWithStickyNavbar_LWe7" id="environment-variables">Environment variables<a href="#environment-variables" class="hash-link" aria-label="Direct link to Environment variables" title="Direct link to Environment variables">​</a></h4><table><thead><tr><th>Environment variable</th><th>Description</th><th>Default</th></tr></thead><tbody><tr><td><code>BOOKIE_LOG_CONF</code></td><td>The Log4j configuration file.</td><td><code>${bookkeeperHome}/bookkeeper-server/conf/log4j2.xml</code></td></tr><tr><td><code>BOOKIE_CONF</code></td><td>The configuration file for the bookie.</td><td><code>${bookkeeperHome}/bookkeeper-server/conf/bk_server.conf</code></td></tr><tr><td><code>BOOKIE_EXTRA_CLASSPATH</code></td><td>Extra paths to add to BookKeeper&#x27;s <a href="https://en.wikipedia.org/wiki/Classpath_(Java)" target="_blank" rel="noopener noreferrer">classpath</a>.</td><td></td></tr><tr><td><code>ENTRY_FORMATTER_CLASS</code></td><td>The entry formatter class used to format entries.</td><td></td></tr><tr><td><code>BOOKIE_PID_DIR</code></td><td>The directory where the bookie server PID file is stored.</td><td></td></tr><tr><td><code>BOOKIE_STOP_TIMEOUT</code></td><td>The wait time before forcefully killing the bookie server instance if stopping it is not successful.</td><td></td></tr></tbody></table><h4 class="anchor anchorWithStickyNavbar_LWe7" id="commands">Commands<a href="#commands" class="hash-link" aria-label="Direct link to Commands" title="Direct link to Commands">​</a></h4><h3 class="anchor anchorWithStickyNavbar_LWe7" id="bookkeeper-shell-bookie">bookie<a href="#bookkeeper-shell-bookie" class="hash-link" aria-label="Direct link to bookie" title="Direct link to bookie">​</a></h3><p>Starts up a bookie.</p><h5 class="anchor anchorWithStickyNavbar_LWe7" id="usage">Usage<a href="#usage" class="hash-link" aria-label="Direct link to Usage" title="Direct link to Usage">​</a></h5><div class="language-shell codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-shell codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">$ bin/bookkeeper bookie</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><h3 class="anchor anchorWithStickyNavbar_LWe7" id="bookkeeper-shell-localbookie">localbookie<a href="#bookkeeper-shell-localbookie" class="hash-link" aria-label="Direct link to localbookie" title="Direct link to localbookie">​</a></h3><p>Starts up an ensemble of N bookies in a single JVM process. Typically used for local experimentation and development.</p><h5 class="anchor anchorWithStickyNavbar_LWe7" id="usage-1">Usage<a href="#usage-1" class="hash-link" aria-label="Direct link to Usage" title="Direct link to Usage">​</a></h5><div class="language-shell codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-shell codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">$ bin/bookkeeper localbookie </span><span class="token punctuation" style="color:#393A34">\</span><span class="token plain"> </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    N</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><h3 class="anchor anchorWithStickyNavbar_LWe7" id="bookkeeper-shell-autorecovery">autorecovery<a href="#bookkeeper-shell-autorecovery" class="hash-link" aria-label="Direct link to autorecovery" title="Direct link to autorecovery">​</a></h3><p>Runs the autorecovery service.</p><h5 class="anchor anchorWithStickyNavbar_LWe7" id="usage-2">Usage<a href="#usage-2" class="hash-link" aria-label="Direct link to Usage" title="Direct link to Usage">​</a></h5><div class="language-shell codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-shell codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">$ bin/bookkeeper autorecovery</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><h3 class="anchor anchorWithStickyNavbar_LWe7" id="bookkeeper-shell-upgrade">upgrade<a href="#bookkeeper-shell-upgrade" class="hash-link" aria-label="Direct link to upgrade" title="Direct link to upgrade">​</a></h3><p>Upgrades the bookie&#x27;s filesystem.</p><h5 class="anchor anchorWithStickyNavbar_LWe7" id="usage-3">Usage<a href="#usage-3" class="hash-link" aria-label="Direct link to Usage" title="Direct link to Usage">​</a></h5><div class="language-shell codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-shell codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">$ bin/bookkeeper upgrade </span><span class="token punctuation" style="color:#393A34">\</span><span class="token plain"> </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token operator" style="color:#393A34">&lt;</span><span class="token plain">options</span><span class="token operator" style="color:#393A34">&gt;</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><table><thead><tr><th>Flag</th><th>Description</th></tr></thead><tbody><tr><td>--upgrade</td><td>Upgrade the filesystem.</td></tr><tr><td>--rollback</td><td>Rollback the filesystem to a previous version.</td></tr><tr><td>--finalize</td><td>Mark the upgrade as complete.</td></tr></tbody></table><h3 class="anchor anchorWithStickyNavbar_LWe7" id="bookkeeper-shell-shell">shell<a href="#bookkeeper-shell-shell" class="hash-link" aria-label="Direct link to shell" title="Direct link to shell">​</a></h3><p>Runs the bookie&#x27;s shell for admin commands.</p><h5 class="anchor anchorWithStickyNavbar_LWe7" id="usage-4">Usage<a href="#usage-4" class="hash-link" aria-label="Direct link to Usage" title="Direct link to Usage">​</a></h5><div class="language-shell codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-shell codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">$ bin/bookkeeper shell</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><h3 class="anchor anchorWithStickyNavbar_LWe7" id="bookkeeper-shell-help">help<a href="#bookkeeper-shell-help" class="hash-link" aria-label="Direct link to help" title="Direct link to help">​</a></h3><p>Displays the help message for the <code>bookkeeper</code> tool.</p><h5 class="anchor anchorWithStickyNavbar_LWe7" id="usage-5">Usage<a href="#usage-5" class="hash-link" aria-label="Direct link to Usage" title="Direct link to Usage">​</a></h5><div class="language-shell codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-shell codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">$ bin/bookkeeper </span><span class="token builtin class-name">help</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><h2 class="anchor anchorWithStickyNavbar_LWe7" id="bookkeeper-shell">BookKeeper shell<a href="#bookkeeper-shell" class="hash-link" aria-label="Direct link to BookKeeper shell" title="Direct link to BookKeeper shell">​</a></h2><h3 class="anchor anchorWithStickyNavbar_LWe7" id="bookkeeper-shell-queryautorecoverystatus">queryautorecoverystatus<a href="#bookkeeper-shell-queryautorecoverystatus" class="hash-link" aria-label="Direct link to queryautorecoverystatus" title="Direct link to queryautorecoverystatus">​</a></h3><p>Query the autorecovery status</p><h5 class="anchor anchorWithStickyNavbar_LWe7" id="usage-6">Usage<a href="#usage-6" class="hash-link" aria-label="Direct link to Usage" title="Direct link to Usage">​</a></h5><div class="language-shell codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-shell codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">$ bin/bookkeeper shell queryautorecoverystatus</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><table><thead><tr><th>Flag</th><th>Description</th></tr></thead><tbody><tr><td>-v,--verbose</td><td>List recovering detailed ledger info</td></tr></tbody></table><h3 class="anchor anchorWithStickyNavbar_LWe7" id="bookkeeper-shell-autorecovery">autorecovery<a href="#bookkeeper-shell-autorecovery" class="hash-link" aria-label="Direct link to autorecovery" title="Direct link to autorecovery">​</a></h3><p>Enable or disable autorecovery in the cluster.</p><h5 class="anchor anchorWithStickyNavbar_LWe7" id="usage-7">Usage<a href="#usage-7" class="hash-link" aria-label="Direct link to Usage" title="Direct link to Usage">​</a></h5><div class="language-shell codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-shell codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">$ bin/bookkeeper shell autorecovery </span><span class="token punctuation" style="color:#393A34">\</span><span class="token plain"> </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token operator" style="color:#393A34">&lt;</span><span class="token plain">options</span><span class="token operator" style="color:#393A34">&gt;</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><table><thead><tr><th>Flag</th><th>Description</th></tr></thead><tbody><tr><td>-e,--enable</td><td>Enable autorecovery of underreplicated ledgers</td></tr><tr><td>-d,--disable</td><td>Disable autorecovery of underreplicated ledgers</td></tr></tbody></table><h3 class="anchor anchorWithStickyNavbar_LWe7" id="bookkeeper-shell-bookieformat">bookieformat<a href="#bookkeeper-shell-bookieformat" class="hash-link" aria-label="Direct link to bookieformat" title="Direct link to bookieformat">​</a></h3><p>Format the current server contents.</p><h5 class="anchor anchorWithStickyNavbar_LWe7" id="usage-8">Usage<a href="#usage-8" class="hash-link" aria-label="Direct link to Usage" title="Direct link to Usage">​</a></h5><div class="language-shell codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-shell codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">$ bin/bookkeeper shell bookieformat </span><span class="token punctuation" style="color:#393A34">\</span><span class="token plain"> </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token operator" style="color:#393A34">&lt;</span><span class="token plain">options</span><span class="token operator" style="color:#393A34">&gt;</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><table><thead><tr><th>Flag</th><th>Description</th></tr></thead><tbody><tr><td>-n,--nonInteractive</td><td>Whether to confirm if old data exists.</td></tr><tr><td>-f,--force</td><td>If <!-- -->[nonInteractive]<!-- --> is specified, then whether to force delete the old data without prompt..?</td></tr><tr><td>-d,--deleteCookie</td><td>Delete its cookie on zookeeper</td></tr></tbody></table><h3 class="anchor anchorWithStickyNavbar_LWe7" id="bookkeeper-shell-initbookie">initbookie<a href="#bookkeeper-shell-initbookie" class="hash-link" aria-label="Direct link to initbookie" title="Direct link to initbookie">​</a></h3><p>Initialize new bookie, by making sure that the journalDir, ledgerDirs and
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navbar__brand" href="/"><div class="navbar__logo"><img src="/img/bk-logo.svg" alt="Apache Bookkeeper" class="themedImage_ToTc themedImage--light_HNdA"><img src="/img/bk-logo.svg" alt="Apache Bookkeeper" class="themedImage_ToTc themedImage--dark_i4oU"></div><b class="navbar__title text--truncate">Apache BookKeeper</b></a><a aria-current="page" class="navbar__item navbar__link navbar__link--active" href="/docs/overview/">Documentation</a><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Community</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/community/mailing-lists">Mailing lists</a></li><li><a class="dropdown__link" href="/community/slack">Slack</a></li><li><a href="https://github.com/apache/bookkeeper/issues" target="_blank" rel="noopener noreferrer" class="dropdown__link">Github issues<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a class="dropdown__link" href="/community/releases">Release management</a></li><li><a class="dropdown__link" href="/community/meeting">Community meetings</a></li><li><a class="dropdown__link" href="/community/contributing">Contribution guide</a></li><li><a class="dropdown__link" href="/community/coding-guide">Coding guide</a></li><li><a class="dropdown__link" href="/community/testing">Testing guide</a></li><li><a class="dropdown__link" href="/community/issue-report">Issue report guide</a></li><li><a class="dropdown__link" href="/community/release-guide">Release guide</a></li><li><a class="dropdown__link" href="/community/presentations">Presentations</a></li><li><a class="dropdown__link" href="/community/bookkeeper-proposals">BookKeeper proposals (BP)</a></li></ul></div><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Project</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/project/who">Who are we?</a></li><li><a class="dropdown__link" href="/project/bylaws">Bylaws</a></li><li><a href="https://apache.org/licenses" target="_blank" rel="noopener noreferrer" class="dropdown__link">License<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a class="dropdown__link" href="/project/privacy">Privacy policy</a></li><li><a href="https://www.apache.org/foundation/sponsorship.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Sponsorship<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a href="https://www.apache.org/foundation/thanks.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Thanks<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div></div><div class="navbar__items navbar__items--right"><div class="navbar__item dropdown dropdown--hoverable dropdown--right"><a class="navbar__link" aria-haspopup="true" aria-expanded="false" role="button" href="/docs/overview/">4.17.0</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/docs/next/reference/cli">Next</a></li><li><a aria-current="page" class="dropdown__link dropdown__link--active" href="/docs/reference/cli">4.17.0</a></li><li><a class="dropdown__link" href="/docs/4.16.5/reference/cli">4.16.5</a></li><li><a class="dropdown__link" href="/docs/4.15.5/reference/cli">4.15.5</a></li><li><a class="dropdown__link" href="/docs/4.14.8/reference/cli">4.14.8</a></li><li><a class="dropdown__link" href="/docs/4.13.0/reference/cli">4.13.0</a></li><li><a class="dropdown__link" href="/docs/4.12.1/reference/cli">4.12.1</a></li><li><a class="dropdown__link" href="/docs/4.11.1/reference/cli">4.11.1</a></li><li><a class="dropdown__link" href="/docs/4.10.0/reference/cli">4.10.0</a></li><li><a class="dropdown__link" href="/docs/4.9.2/reference/cli">4.9.2</a></li><li><a class="dropdown__link" href="/docs/4.8.2/reference/cli">4.8.2</a></li><li><a class="dropdown__link" href="/docs/4.7.3/reference/cli">4.7.3</a></li><li><a class="dropdown__link" href="/docs/4.6.2/reference/cli">4.6.2</a></li><li><a class="dropdown__link" href="/docs/4.5.1/reference/cli">4.5.1</a></li></ul></div><a class="navbar__item navbar__link" href="/releases">Download</a><div class="toggle_vylO colorModeToggle_DEke"><button class="clean-btn toggleButton_gllP toggleButtonDisabled_aARS" type="button" disabled="" title="Switch between dark and light mode (currently light mode)" aria-label="Switch between dark and light mode (currently light mode)" aria-live="polite"><svg viewBox="0 0 24 24" width="24" height="24" class="lightToggleIcon_pyhR"><path fill="currentColor" d="M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"></path></svg><svg viewBox="0 0 24 24" width="24" height="24" class="darkToggleIcon_wfgR"><path fill="currentColor" d="M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"></path></svg></button></div><div class="searchBox_ZlJk"></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div></nav><div id="docusaurus_skipToContent_fallback" class="main-wrapper mainWrapper_z2l0 docsWrapper_BCFX"><button aria-label="Scroll back to top" class="clean-btn theme-back-to-top-button backToTopButton_sjWU" type="button"></button><div class="docPage__5DB"><aside class="theme-doc-sidebar-container docSidebarContainer_b6E3"><div class="sidebarViewport_Xe31"><div class="sidebar_njMd"><nav aria-label="Docs sidebar" class="menu thin-scrollbar menu_SIkG"><ul class="theme-doc-sidebar-menu menu__list"><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-1 menu__list-item"><a class="menu__link" href="/docs/overview/">Overview</a></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/getting-started/installation">Getting started</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/deployment/manual">Deployment</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/admin/bookies">Administration</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/api/overview">API</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/security/overview">Security</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/development/protocol">Development</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret menu__link--active" aria-expanded="true" href="/docs/reference/config">Reference</a></div><ul style="display:block;overflow:visible;height:auto" class="menu__list"><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/reference/config">Configuration</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link menu__link--active" aria-current="page" tabindex="0" href="/docs/reference/cli">Command-line tools</a></li></ul></li></ul></nav></div></div></aside><main class="docMainContainer_gTbr"><div class="container padding-top--md padding-bottom--lg"><div class="row"><div class="col docItemCol_VOVn"><div class="docItemContainer_Djhp"><article><span class="theme-doc-version-badge badge badge--secondary">Version: 4.17.0</span><div class="tocCollapsible_ETCw theme-doc-toc-mobile tocMobile_ITEo"><button type="button" class="clean-btn tocCollapsibleButton_TO0P">On this page</button></div><div class="theme-doc-markdown markdown"><header><h1>BookKeeper CLI tool reference</h1></header><h2 class="anchor anchorWithStickyNavbar_LWe7" id="bookkeeper-command"><code>bookkeeper</code> command<a href="#bookkeeper-command" class="hash-link" aria-label="Direct link to bookkeeper-command" title="Direct link to bookkeeper-command">​</a></h2><p>Manages bookies.</p><h4 class="anchor anchorWithStickyNavbar_LWe7" id="environment-variables">Environment variables<a href="#environment-variables" class="hash-link" aria-label="Direct link to Environment variables" title="Direct link to Environment variables">​</a></h4><table><thead><tr><th>Environment variable</th><th>Description</th><th>Default</th></tr></thead><tbody><tr><td><code>BOOKIE_LOG_CONF</code></td><td>The Log4j configuration file.</td><td><code>${bookkeeperHome}/bookkeeper-server/conf/log4j2.xml</code></td></tr><tr><td><code>BOOKIE_CONF</code></td><td>The configuration file for the bookie.</td><td><code>${bookkeeperHome}/bookkeeper-server/conf/bk_server.conf</code></td></tr><tr><td><code>BOOKIE_EXTRA_CLASSPATH</code></td><td>Extra paths to add to BookKeeper&#x27;s <a href="https://en.wikipedia.org/wiki/Classpath_(Java)" target="_blank" rel="noopener noreferrer">classpath</a>.</td><td></td></tr><tr><td><code>ENTRY_FORMATTER_CLASS</code></td><td>The entry formatter class used to format entries.</td><td></td></tr><tr><td><code>BOOKIE_PID_DIR</code></td><td>The directory where the bookie server PID file is stored.</td><td></td></tr><tr><td><code>BOOKIE_STOP_TIMEOUT</code></td><td>The wait time before forcefully killing the bookie server instance if stopping it is not successful.</td><td></td></tr></tbody></table><h4 class="anchor anchorWithStickyNavbar_LWe7" id="commands">Commands<a href="#commands" class="hash-link" aria-label="Direct link to Commands" title="Direct link to Commands">​</a></h4><h3 class="anchor anchorWithStickyNavbar_LWe7" id="bookkeeper-shell-bookie">bookie<a href="#bookkeeper-shell-bookie" class="hash-link" aria-label="Direct link to bookie" title="Direct link to bookie">​</a></h3><p>Starts up a bookie.</p><h5 class="anchor anchorWithStickyNavbar_LWe7" id="usage">Usage<a href="#usage" class="hash-link" aria-label="Direct link to Usage" title="Direct link to Usage">​</a></h5><div class="language-shell codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-shell codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">$ bin/bookkeeper bookie</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><h3 class="anchor anchorWithStickyNavbar_LWe7" id="bookkeeper-shell-localbookie">localbookie<a href="#bookkeeper-shell-localbookie" class="hash-link" aria-label="Direct link to localbookie" title="Direct link to localbookie">​</a></h3><p>Starts up an ensemble of N bookies in a single JVM process. Typically used for local experimentation and development.</p><h5 class="anchor anchorWithStickyNavbar_LWe7" id="usage-1">Usage<a href="#usage-1" class="hash-link" aria-label="Direct link to Usage" title="Direct link to Usage">​</a></h5><div class="language-shell codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-shell codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">$ bin/bookkeeper localbookie </span><span class="token punctuation" style="color:#393A34">\</span><span class="token plain"> </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    N</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><h3 class="anchor anchorWithStickyNavbar_LWe7" id="bookkeeper-shell-autorecovery">autorecovery<a href="#bookkeeper-shell-autorecovery" class="hash-link" aria-label="Direct link to autorecovery" title="Direct link to autorecovery">​</a></h3><p>Runs the autorecovery service.</p><h5 class="anchor anchorWithStickyNavbar_LWe7" id="usage-2">Usage<a href="#usage-2" class="hash-link" aria-label="Direct link to Usage" title="Direct link to Usage">​</a></h5><div class="language-shell codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-shell codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">$ bin/bookkeeper autorecovery</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><h3 class="anchor anchorWithStickyNavbar_LWe7" id="bookkeeper-shell-upgrade">upgrade<a href="#bookkeeper-shell-upgrade" class="hash-link" aria-label="Direct link to upgrade" title="Direct link to upgrade">​</a></h3><p>Upgrades the bookie&#x27;s filesystem.</p><h5 class="anchor anchorWithStickyNavbar_LWe7" id="usage-3">Usage<a href="#usage-3" class="hash-link" aria-label="Direct link to Usage" title="Direct link to Usage">​</a></h5><div class="language-shell codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-shell codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">$ bin/bookkeeper upgrade </span><span class="token punctuation" style="color:#393A34">\</span><span class="token plain"> </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token operator" style="color:#393A34">&lt;</span><span class="token plain">options</span><span class="token operator" style="color:#393A34">&gt;</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><table><thead><tr><th>Flag</th><th>Description</th></tr></thead><tbody><tr><td>--upgrade</td><td>Upgrade the filesystem.</td></tr><tr><td>--rollback</td><td>Rollback the filesystem to a previous version.</td></tr><tr><td>--finalize</td><td>Mark the upgrade as complete.</td></tr></tbody></table><h3 class="anchor anchorWithStickyNavbar_LWe7" id="bookkeeper-shell-shell">shell<a href="#bookkeeper-shell-shell" class="hash-link" aria-label="Direct link to shell" title="Direct link to shell">​</a></h3><p>Runs the bookie&#x27;s shell for admin commands.</p><h5 class="anchor anchorWithStickyNavbar_LWe7" id="usage-4">Usage<a href="#usage-4" class="hash-link" aria-label="Direct link to Usage" title="Direct link to Usage">​</a></h5><div class="language-shell codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-shell codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">$ bin/bookkeeper shell</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><h3 class="anchor anchorWithStickyNavbar_LWe7" id="bookkeeper-shell-help">help<a href="#bookkeeper-shell-help" class="hash-link" aria-label="Direct link to help" title="Direct link to help">​</a></h3><p>Displays the help message for the <code>bookkeeper</code> tool.</p><h5 class="anchor anchorWithStickyNavbar_LWe7" id="usage-5">Usage<a href="#usage-5" class="hash-link" aria-label="Direct link to Usage" title="Direct link to Usage">​</a></h5><div class="language-shell codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-shell codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">$ bin/bookkeeper </span><span class="token builtin class-name">help</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><h2 class="anchor anchorWithStickyNavbar_LWe7" id="bookkeeper-shell">BookKeeper shell<a href="#bookkeeper-shell" class="hash-link" aria-label="Direct link to BookKeeper shell" title="Direct link to BookKeeper shell">​</a></h2><h3 class="anchor anchorWithStickyNavbar_LWe7" id="bookkeeper-shell-queryautorecoverystatus">queryautorecoverystatus<a href="#bookkeeper-shell-queryautorecoverystatus" class="hash-link" aria-label="Direct link to queryautorecoverystatus" title="Direct link to queryautorecoverystatus">​</a></h3><p>Query the autorecovery status</p><h5 class="anchor anchorWithStickyNavbar_LWe7" id="usage-6">Usage<a href="#usage-6" class="hash-link" aria-label="Direct link to Usage" title="Direct link to Usage">​</a></h5><div class="language-shell codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-shell codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">$ bin/bookkeeper shell queryautorecoverystatus</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><table><thead><tr><th>Flag</th><th>Description</th></tr></thead><tbody><tr><td>-v,--verbose</td><td>List recovering detailed ledger info</td></tr></tbody></table><h3 class="anchor anchorWithStickyNavbar_LWe7" id="bookkeeper-shell-autorecovery">autorecovery<a href="#bookkeeper-shell-autorecovery" class="hash-link" aria-label="Direct link to autorecovery" title="Direct link to autorecovery">​</a></h3><p>Enable or disable autorecovery in the cluster.</p><h5 class="anchor anchorWithStickyNavbar_LWe7" id="usage-7">Usage<a href="#usage-7" class="hash-link" aria-label="Direct link to Usage" title="Direct link to Usage">​</a></h5><div class="language-shell codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-shell codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">$ bin/bookkeeper shell autorecovery </span><span class="token punctuation" style="color:#393A34">\</span><span class="token plain"> </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token operator" style="color:#393A34">&lt;</span><span class="token plain">options</span><span class="token operator" style="color:#393A34">&gt;</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><table><thead><tr><th>Flag</th><th>Description</th></tr></thead><tbody><tr><td>-e,--enable</td><td>Enable autorecovery of underreplicated ledgers</td></tr><tr><td>-d,--disable</td><td>Disable autorecovery of underreplicated ledgers</td></tr></tbody></table><h3 class="anchor anchorWithStickyNavbar_LWe7" id="bookkeeper-shell-bookieformat">bookieformat<a href="#bookkeeper-shell-bookieformat" class="hash-link" aria-label="Direct link to bookieformat" title="Direct link to bookieformat">​</a></h3><p>Format the current server contents.</p><h5 class="anchor anchorWithStickyNavbar_LWe7" id="usage-8">Usage<a href="#usage-8" class="hash-link" aria-label="Direct link to Usage" title="Direct link to Usage">​</a></h5><div class="language-shell codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-shell codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">$ bin/bookkeeper shell bookieformat </span><span class="token punctuation" style="color:#393A34">\</span><span class="token plain"> </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token operator" style="color:#393A34">&lt;</span><span class="token plain">options</span><span class="token operator" style="color:#393A34">&gt;</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><table><thead><tr><th>Flag</th><th>Description</th></tr></thead><tbody><tr><td>-n,--nonInteractive</td><td>Whether to confirm if old data exists.</td></tr><tr><td>-f,--force</td><td>If <!-- -->[nonInteractive]<!-- --> is specified, then whether to force delete the old data without prompt..?</td></tr><tr><td>-d,--deleteCookie</td><td>Delete its cookie on zookeeper</td></tr></tbody></table><h3 class="anchor anchorWithStickyNavbar_LWe7" id="bookkeeper-shell-initbookie">initbookie<a href="#bookkeeper-shell-initbookie" class="hash-link" aria-label="Direct link to initbookie" title="Direct link to initbookie">​</a></h3><p>Initialize new bookie, by making sure that the journalDir, ledgerDirs and
 indexDirs are empty and there is no registered Bookie with this BookieId.</p><p>If there is data present in current bookie server, the init operation will fail. If you want to format
 the bookie server, use <code>bookieformat</code>.</p><h5 class="anchor anchorWithStickyNavbar_LWe7" id="usage-9">Usage<a href="#usage-9" class="hash-link" aria-label="Direct link to Usage" title="Direct link to Usage">​</a></h5><div class="language-shell codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-shell codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">$ bin/bookkeeper shell initbookie</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><h3 class="anchor anchorWithStickyNavbar_LWe7" id="bookkeeper-shell-bookieinfo">bookieinfo<a href="#bookkeeper-shell-bookieinfo" class="hash-link" aria-label="Direct link to bookieinfo" title="Direct link to bookieinfo">​</a></h3><p>Retrieve bookie info such as free and total disk space.</p><h5 class="anchor anchorWithStickyNavbar_LWe7" id="usage-10">Usage<a href="#usage-10" class="hash-link" aria-label="Direct link to Usage" title="Direct link to Usage">​</a></h5><div class="language-shell codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-shell codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">$ bin/bookkeeper shell bookieinfo</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><h3 class="anchor anchorWithStickyNavbar_LWe7" id="bookkeeper-shell-bookiesanity">bookiesanity<a href="#bookkeeper-shell-bookiesanity" class="hash-link" aria-label="Direct link to bookiesanity" title="Direct link to bookiesanity">​</a></h3><p>Sanity test for local bookie. Create ledger and write/read entries on the local bookie.</p><h5 class="anchor anchorWithStickyNavbar_LWe7" id="usage-11">Usage<a href="#usage-11" class="hash-link" aria-label="Direct link to Usage" title="Direct link to Usage">​</a></h5><div class="language-shell codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-shell codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">$ bin/bookkeeper shell bookiesanity </span><span class="token punctuation" style="color:#393A34">\</span><span class="token plain"> </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token operator" style="color:#393A34">&lt;</span><span class="token plain">options</span><span class="token operator" style="color:#393A34">&gt;</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><table><thead><tr><th>Flag</th><th>Description</th></tr></thead><tbody><tr><td>-e,--entries N</td><td>Total entries to be added for the test (default 10)</td></tr><tr><td>-t,--timeout N</td><td>Timeout for write/read operations in seconds (default 1)</td></tr></tbody></table><h3 class="anchor anchorWithStickyNavbar_LWe7" id="bookkeeper-shell-decommissionbookie">decommissionbookie<a href="#bookkeeper-shell-decommissionbookie" class="hash-link" aria-label="Direct link to decommissionbookie" title="Direct link to decommissionbookie">​</a></h3><p>Force trigger the Audittask and make sure all the ledgers stored in the decommissioning bookie are replicated.</p><h5 class="anchor anchorWithStickyNavbar_LWe7" id="usage-12">Usage<a href="#usage-12" class="hash-link" aria-label="Direct link to Usage" title="Direct link to Usage">​</a></h5><div class="language-shell codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-shell codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">$ bin/bookkeeper shell decommissionbookie</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><h3 class="anchor anchorWithStickyNavbar_LWe7" id="bookkeeper-shell-deleteledger">deleteledger<a href="#bookkeeper-shell-deleteledger" class="hash-link" aria-label="Direct link to deleteledger" title="Direct link to deleteledger">​</a></h3><p>Delete a ledger</p><h5 class="anchor anchorWithStickyNavbar_LWe7" id="usage-13">Usage<a href="#usage-13" class="hash-link" aria-label="Direct link to Usage" title="Direct link to Usage">​</a></h5><div class="language-shell codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-shell codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">$ bin/bookkeeper shell deleteledger </span><span class="token punctuation" style="color:#393A34">\</span><span class="token plain"> </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token operator" style="color:#393A34">&lt;</span><span class="token plain">options</span><span class="token operator" style="color:#393A34">&gt;</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><table><thead><tr><th>Flag</th><th>Description</th></tr></thead><tbody><tr><td>-l,--ledgerid LEDGER_ID</td><td>Ledger ID</td></tr><tr><td>-f,--force</td><td>Whether to force delete the Ledger without prompt..?</td></tr></tbody></table><h3 class="anchor anchorWithStickyNavbar_LWe7" id="bookkeeper-shell-endpointinfo">endpointinfo<a href="#bookkeeper-shell-endpointinfo" class="hash-link" aria-label="Direct link to endpointinfo" title="Direct link to endpointinfo">​</a></h3><p>Get endpoints of a Bookie.</p><h5 class="anchor anchorWithStickyNavbar_LWe7" id="usage-14">Usage<a href="#usage-14" class="hash-link" aria-label="Direct link to Usage" title="Direct link to Usage">​</a></h5><div class="language-shell codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-shell codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">$ bin/bookkeeper shell endpointinfo</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><h3 class="anchor anchorWithStickyNavbar_LWe7" id="bookkeeper-shell-expandstorage">expandstorage<a href="#bookkeeper-shell-expandstorage" class="hash-link" aria-label="Direct link to expandstorage" title="Direct link to expandstorage">​</a></h3><p>Add new empty ledger/index directories. Update the directories info in the conf file before running the command.</p><h5 class="anchor anchorWithStickyNavbar_LWe7" id="usage-15">Usage<a href="#usage-15" class="hash-link" aria-label="Direct link to Usage" title="Direct link to Usage">​</a></h5><div class="language-shell codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-shell codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">$ bin/bookkeeper shell expandstorage</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><h3 class="anchor anchorWithStickyNavbar_LWe7" id="bookkeeper-shell-help">help<a href="#bookkeeper-shell-help" class="hash-link" aria-label="Direct link to help" title="Direct link to help">​</a></h3><p>Displays the help message.</p><h5 class="anchor anchorWithStickyNavbar_LWe7" id="usage-16">Usage<a href="#usage-16" class="hash-link" aria-label="Direct link to Usage" title="Direct link to Usage">​</a></h5><div class="language-shell codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-shell codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">$ bin/bookkeeper shell </span><span class="token builtin class-name">help</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><h3 class="anchor anchorWithStickyNavbar_LWe7" id="bookkeeper-shell-lastmark">lastmark<a href="#bookkeeper-shell-lastmark" class="hash-link" aria-label="Direct link to lastmark" title="Direct link to lastmark">​</a></h3><p>Print last log marker.</p><h5 class="anchor anchorWithStickyNavbar_LWe7" id="usage-17">Usage<a href="#usage-17" class="hash-link" aria-label="Direct link to Usage" title="Direct link to Usage">​</a></h5><div class="language-shell codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-shell codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">$ bin/bookkeeper shell lastmark</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><h3 class="anchor anchorWithStickyNavbar_LWe7" id="bookkeeper-shell-ledger">ledger<a href="#bookkeeper-shell-ledger" class="hash-link" aria-label="Direct link to ledger" title="Direct link to ledger">​</a></h3><p>Dump ledger index entries into readable format.</p><h5 class="anchor anchorWithStickyNavbar_LWe7" id="usage-18">Usage<a href="#usage-18" class="hash-link" aria-label="Direct link to Usage" title="Direct link to Usage">​</a></h5><div class="language-shell codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-shell codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">$ bin/bookkeeper shell ledger </span><span class="token punctuation" style="color:#393A34">\</span><span class="token plain"> </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token operator" style="color:#393A34">&lt;</span><span class="token plain">options</span><span class="token operator" style="color:#393A34">&gt;</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><table><thead><tr><th>Flag</th><th>Description</th></tr></thead><tbody><tr><td>-m,--meta LEDGER_ID</td><td>Print meta information</td></tr></tbody></table><h3 class="anchor anchorWithStickyNavbar_LWe7" id="bookkeeper-shell-ledgermetadata">ledgermetadata<a href="#bookkeeper-shell-ledgermetadata" class="hash-link" aria-label="Direct link to ledgermetadata" title="Direct link to ledgermetadata">​</a></h3><p>Print the metadata for a ledger.</p><h5 class="anchor anchorWithStickyNavbar_LWe7" id="usage-19">Usage<a href="#usage-19" class="hash-link" aria-label="Direct link to Usage" title="Direct link to Usage">​</a></h5><div class="language-shell codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-shell codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">$ bin/bookkeeper shell ledgermetadata </span><span class="token punctuation" style="color:#393A34">\</span><span class="token plain"> </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token operator" style="color:#393A34">&lt;</span><span class="token plain">options</span><span class="token operator" style="color:#393A34">&gt;</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><table><thead><tr><th>Flag</th><th>Description</th></tr></thead><tbody><tr><td>-l,--ledgerid LEDGER_ID</td><td>Ledger ID</td></tr><tr><td>--dump-to-file FILENAME</td><td>Dump metadata for ledger, to a file</td></tr><tr><td>--restore-from-file FILENAME</td><td>Restore metadata for ledger, from a file</td></tr></tbody></table><h3 class="anchor anchorWithStickyNavbar_LWe7" id="bookkeeper-shell-listbookies">listbookies<a href="#bookkeeper-shell-listbookies" class="hash-link" aria-label="Direct link to listbookies" title="Direct link to listbookies">​</a></h3><p>List the bookies, which are running as either readwrite or readonly mode.</p><h5 class="anchor anchorWithStickyNavbar_LWe7" id="usage-20">Usage<a href="#usage-20" class="hash-link" aria-label="Direct link to Usage" title="Direct link to Usage">​</a></h5><div class="language-shell codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-shell codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">$ bin/bookkeeper shell listbookies </span><span class="token punctuation" style="color:#393A34">\</span><span class="token plain"> </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token operator" style="color:#393A34">&lt;</span><span class="token plain">options</span><span class="token operator" style="color:#393A34">&gt;</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><table><thead><tr><th>Flag</th><th>Description</th></tr></thead><tbody><tr><td>-a,--all</td><td>Print all bookies</td></tr><tr><td>-rw,--readwrite</td><td>Print readwrite bookies</td></tr><tr><td>-ro,--readonly</td><td>Print readonly bookies</td></tr><tr><td>-h,--hostnames</td><td>Also print hostname of the bookie</td></tr></tbody></table><h3 class="anchor anchorWithStickyNavbar_LWe7" id="bookkeeper-shell-listfilesondisc">listfilesondisc<a href="#bookkeeper-shell-listfilesondisc" class="hash-link" aria-label="Direct link to listfilesondisc" title="Direct link to listfilesondisc">​</a></h3><p>List the files in JournalDirectory/LedgerDirectories/IndexDirectories.</p><h5 class="anchor anchorWithStickyNavbar_LWe7" id="usage-21">Usage<a href="#usage-21" class="hash-link" aria-label="Direct link to Usage" title="Direct link to Usage">​</a></h5><div class="language-shell codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-shell codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">$ bin/bookkeeper shell listfilesondisc </span><span class="token punctuation" style="color:#393A34">\</span><span class="token plain"> </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token operator" style="color:#393A34">&lt;</span><span class="token plain">options</span><span class="token operator" style="color:#393A34">&gt;</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><table><thead><tr><th>Flag</th><th>Description</th></tr></thead><tbody><tr><td>-txn,--journal</td><td>Print list of journal files</td></tr><tr><td>-log,--entrylog</td><td>Print list of entryLog files</td></tr><tr><td>-idx,--index</td><td>Print list of index files</td></tr></tbody></table><h3 class="anchor anchorWithStickyNavbar_LWe7" id="bookkeeper-shell-listledgers">listledgers<a href="#bookkeeper-shell-listledgers" class="hash-link" aria-label="Direct link to listledgers" title="Direct link to listledgers">​</a></h3><p>List all ledgers in the cluster (this may take a long time).</p><h5 class="anchor anchorWithStickyNavbar_LWe7" id="usage-22">Usage<a href="#usage-22" class="hash-link" aria-label="Direct link to Usage" title="Direct link to Usage">​</a></h5><div class="language-shell codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-shell codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">$ bin/bookkeeper shell listledgers </span><span class="token punctuation" style="color:#393A34">\</span><span class="token plain"> </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token operator" style="color:#393A34">&lt;</span><span class="token plain">options</span><span class="token operator" style="color:#393A34">&gt;</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><table><thead><tr><th>Flag</th><th>Description</th></tr></thead><tbody><tr><td>-bookieid BOOKIE_ID</td><td>List ledgers residing in this bookie</td></tr><tr><td>-m,--meta</td><td>Print metadata</td></tr></tbody></table><h3 class="anchor anchorWithStickyNavbar_LWe7" id="bookkeeper-shell-listunderreplicated">listunderreplicated<a href="#bookkeeper-shell-listunderreplicated" class="hash-link" aria-label="Direct link to listunderreplicated" title="Direct link to listunderreplicated">​</a></h3><p>List ledgers marked as underreplicated, with optional options to specify missing replica (BookieId) and to exclude missing replica.</p><h5 class="anchor anchorWithStickyNavbar_LWe7" id="usage-23">Usage<a href="#usage-23" class="hash-link" aria-label="Direct link to Usage" title="Direct link to Usage">​</a></h5><div class="language-shell codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-shell codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">$ bin/bookkeeper shell listunderreplicated </span><span class="token punctuation" style="color:#393A34">\</span><span class="token plain"> </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token operator" style="color:#393A34">&lt;</span><span class="token plain">options</span><span class="token operator" style="color:#393A34">&gt;</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><table><thead><tr><th>Flag</th><th>Description</th></tr></thead><tbody><tr><td>-missingreplica BOOKIE_ADDRESS</td><td>Bookie Id of missing replica</td></tr><tr><td>-excludingmissingreplica BOOKIE_ADDRESS</td><td>Bookie Id of missing replica to ignore</td></tr><tr><td>-printmissingreplica</td><td>Whether to print missingreplicas list?</td></tr><tr><td>-printreplicationworkerid</td><td>Whether to print replicationworkerid?</td></tr><tr><td>-c,--onlydisplayledgercount</td><td>Only display underreplicated ledger count</td></tr></tbody></table><h3 class="anchor anchorWithStickyNavbar_LWe7" id="bookkeeper-shell-metaformat">metaformat<a href="#bookkeeper-shell-metaformat" class="hash-link" aria-label="Direct link to metaformat" title="Direct link to metaformat">​</a></h3><p>Format Bookkeeper metadata in Zookeeper. This command is deprecated since 4.7.0,
 in favor of using <code>initnewcluster</code> for initializing a new cluster and <code>nukeexistingcluster</code> for nuking an existing cluster.</p><h5 class="anchor anchorWithStickyNavbar_LWe7" id="usage-24">Usage<a href="#usage-24" class="hash-link" aria-label="Direct link to Usage" title="Direct link to Usage">​</a></h5><div class="language-shell codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-shell codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">$ bin/bookkeeper shell metaformat </span><span class="token punctuation" style="color:#393A34">\</span><span class="token plain"> </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token operator" style="color:#393A34">&lt;</span><span class="token plain">options</span><span class="token operator" style="color:#393A34">&gt;</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><table><thead><tr><th>Flag</th><th>Description</th></tr></thead><tbody><tr><td>-n,--nonInteractive</td><td>Whether to confirm if old data exists..?</td></tr><tr><td>-f,--force</td><td>If <!-- -->[nonInteractive]<!-- --> is specified, then whether to force delete the old data without prompt.</td></tr></tbody></table><h3 class="anchor anchorWithStickyNavbar_LWe7" id="bookkeeper-shell-initnewcluster">initnewcluster<a href="#bookkeeper-shell-initnewcluster" class="hash-link" aria-label="Direct link to initnewcluster" title="Direct link to initnewcluster">​</a></h3><p>Initializes a new bookkeeper cluster. If initnewcluster fails then try nuking
 existing cluster by running nukeexistingcluster before running initnewcluster again</p><h5 class="anchor anchorWithStickyNavbar_LWe7" id="usage-25">Usage<a href="#usage-25" class="hash-link" aria-label="Direct link to Usage" title="Direct link to Usage">​</a></h5><div class="language-shell codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-shell codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">$ bin/bookkeeper shell initnewcluster</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><h3 class="anchor anchorWithStickyNavbar_LWe7" id="bookkeeper-shell-nukeexistingcluster">nukeexistingcluster<a href="#bookkeeper-shell-nukeexistingcluster" class="hash-link" aria-label="Direct link to nukeexistingcluster" title="Direct link to nukeexistingcluster">​</a></h3><p>Nuke bookkeeper cluster by deleting metadata</p><h5 class="anchor anchorWithStickyNavbar_LWe7" id="usage-26">Usage<a href="#usage-26" class="hash-link" aria-label="Direct link to Usage" title="Direct link to Usage">​</a></h5><div class="language-shell codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-shell codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">$ bin/bookkeeper shell nukeexistingcluster </span><span class="token punctuation" style="color:#393A34">\</span><span class="token plain"> </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token operator" style="color:#393A34">&lt;</span><span class="token plain">options</span><span class="token operator" style="color:#393A34">&gt;</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><table><thead><tr><th>Flag</th><th>Description</th></tr></thead><tbody><tr><td>-p,--zkledgersrootpath ZK_LEDGER_ROOT_PATH</td><td>zookeeper ledgers rootpath</td></tr><tr><td>-i,--instanceid INSTANCE_ID</td><td>instance id</td></tr><tr><td>-f,--force</td><td>If instanceid is not specified, then whether to force nuke the metadata without validating instanceid</td></tr></tbody></table><h3 class="anchor anchorWithStickyNavbar_LWe7" id="bookkeeper-shell-lostbookierecoverydelay">lostbookierecoverydelay<a href="#bookkeeper-shell-lostbookierecoverydelay" class="hash-link" aria-label="Direct link to lostbookierecoverydelay" title="Direct link to lostbookierecoverydelay">​</a></h3><p>Setter and Getter for LostBookieRecoveryDelay value (in seconds) in Zookeeper.</p><h5 class="anchor anchorWithStickyNavbar_LWe7" id="usage-27">Usage<a href="#usage-27" class="hash-link" aria-label="Direct link to Usage" title="Direct link to Usage">​</a></h5><div class="language-shell codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-shell codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">$ bin/bookkeeper shell lostbookierecoverydelay </span><span class="token punctuation" style="color:#393A34">\</span><span class="token plain"> </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token operator" style="color:#393A34">&lt;</span><span class="token plain">options</span><span class="token operator" style="color:#393A34">&gt;</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><table><thead><tr><th>Flag</th><th>Description</th></tr></thead><tbody><tr><td>-g,--get</td><td>Get LostBookieRecoveryDelay value (in seconds)</td></tr><tr><td>-s,--set VALUE</td><td>Set LostBookieRecoveryDelay value (in seconds)</td></tr></tbody></table><h3 class="anchor anchorWithStickyNavbar_LWe7" id="bookkeeper-shell-readjournal">readjournal<a href="#bookkeeper-shell-readjournal" class="hash-link" aria-label="Direct link to readjournal" title="Direct link to readjournal">​</a></h3><p>Scan a journal file and format the entries into readable format.</p><h5 class="anchor anchorWithStickyNavbar_LWe7" id="usage-28">Usage<a href="#usage-28" class="hash-link" aria-label="Direct link to Usage" title="Direct link to Usage">​</a></h5><div class="language-shell codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-shell codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">$ bin/bookkeeper shell readjournal </span><span class="token punctuation" style="color:#393A34">\</span><span class="token plain"> </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token operator" style="color:#393A34">&lt;</span><span class="token plain">options</span><span class="token operator" style="color:#393A34">&gt;</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><table><thead><tr><th>Flag</th><th>Description</th></tr></thead><tbody><tr><td>-m,--msg</td><td>Print message body</td></tr><tr><td>-dir JOURNAL_ID or JOURNAL_FILE_NAME</td><td>Journal directory (needed if more than one journal configured)</td></tr></tbody></table><h3 class="anchor anchorWithStickyNavbar_LWe7" id="bookkeeper-shell-readledger">readledger<a href="#bookkeeper-shell-readledger" class="hash-link" aria-label="Direct link to readledger" title="Direct link to readledger">​</a></h3><p>Read a range of entries from a ledger.</p><h5 class="anchor anchorWithStickyNavbar_LWe7" id="usage-29">Usage<a href="#usage-29" class="hash-link" aria-label="Direct link to Usage" title="Direct link to Usage">​</a></h5><div class="language-shell codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-shell codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">$ bin/bookkeeper shell readledger </span><span class="token punctuation" style="color:#393A34">\</span><span class="token plain"> </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token operator" style="color:#393A34">&lt;</span><span class="token plain">ledger_id</span><span class="token operator" style="color:#393A34">&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">[</span><span class="token operator" style="color:#393A34">&lt;</span><span class="token plain">start_entry_id</span><span class="token operator" style="color:#393A34">&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">[</span><span class="token operator" style="color:#393A34">&lt;</span><span class="token plain">end_entry_id</span><span class="token operator" style="color:#393A34">&gt;</span><span class="token punctuation" style="color:#393A34">]</span><span class="token punctuation" style="color:#393A34">]</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><table><thead><tr><th>Flag</th><th>Description</th></tr></thead><tbody><tr><td>-m,--msg</td><td>Print message body</td></tr><tr><td>-l,--ledgerid LEDGER_ID</td><td>Ledger ID</td></tr><tr><td>-fe,--firstentryid ENTRY_ID</td><td>First EntryID</td></tr><tr><td>-le,--lastentryid ENTRY_ID</td><td>Last EntryID</td></tr><tr><td>-b,--bookie BOOKIE_ID</td><td>Only read from a specific bookie</td></tr><tr><td>-r,--force-recovery</td><td>Ensure the ledger is properly closed before reading</td></tr></tbody></table><h3 class="anchor anchorWithStickyNavbar_LWe7" id="bookkeeper-shell-readlog">readlog<a href="#bookkeeper-shell-readlog" class="hash-link" aria-label="Direct link to readlog" title="Direct link to readlog">​</a></h3><p>Scan an entry file and format the entries into readable format.</p><h5 class="anchor anchorWithStickyNavbar_LWe7" id="usage-30">Usage<a href="#usage-30" class="hash-link" aria-label="Direct link to Usage" title="Direct link to Usage">​</a></h5><div class="language-shell codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-shell codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">$ bin/bookkeeper shell readlog </span><span class="token punctuation" style="color:#393A34">\</span><span class="token plain"> </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token operator" style="color:#393A34">&lt;</span><span class="token plain">entry_log_id </span><span class="token operator" style="color:#393A34">|</span><span class="token plain"> entry_log_file_name</span><span class="token operator" style="color:#393A34">&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">\</span><span class="token plain"> </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token operator" style="color:#393A34">&lt;</span><span class="token plain">options</span><span class="token operator" style="color:#393A34">&gt;</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><table><thead><tr><th>Flag</th><th>Description</th></tr></thead><tbody><tr><td>-m,--msg</td><td>Print message body</td></tr><tr><td>-l,--ledgerid LEDGER_ID</td><td>Ledger ID</td></tr><tr><td>-e,--entryid ENTRY_ID</td><td>Entry ID</td></tr><tr><td>-sp,--startpos START_ENTRY_LOG_BYTE_POS</td><td>Start Position</td></tr><tr><td>-ep,--endpos END_ENTRY_LOG_BYTE_POS</td><td>End Position</td></tr></tbody></table><h3 class="anchor anchorWithStickyNavbar_LWe7" id="bookkeeper-shell-recover">recover<a href="#bookkeeper-shell-recover" class="hash-link" aria-label="Direct link to recover" title="Direct link to recover">​</a></h3><p>Recover the ledger data for failed bookie.</p><h5 class="anchor anchorWithStickyNavbar_LWe7" id="usage-31">Usage<a href="#usage-31" class="hash-link" aria-label="Direct link to Usage" title="Direct link to Usage">​</a></h5><div class="language-shell codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-shell codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">$ bin/bookkeeper shell recover </span><span class="token punctuation" style="color:#393A34">\</span><span class="token plain"> </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token operator" style="color:#393A34">&lt;</span><span class="token plain">bookieSrc</span><span class="token punctuation" style="color:#393A34">[</span><span class="token plain">,bookieSrc,</span><span class="token punctuation" style="color:#393A34">..</span><span class="token plain">.</span><span class="token punctuation" style="color:#393A34">]</span><span class="token operator" style="color:#393A34">&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">\</span><span class="token plain"> </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token operator" style="color:#393A34">&lt;</span><span class="token plain">options</span><span class="token operator" style="color:#393A34">&gt;</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><table><thead><tr><th>Flag</th><th>Description</th></tr></thead><tbody><tr><td>-d,--deleteCookie</td><td>Delete cookie node for the bookie.</td></tr><tr><td>-dr,--dryrun</td><td>Printing the recovery plan w/o doing actual recovery</td></tr><tr><td>-f,--force</td><td>Force recovery without confirmation</td></tr><tr><td>-l,--ledger LEDGER_ID</td><td>Recover a specific ledger</td></tr><tr><td>-q,--query</td><td>Query the ledgers that contain given bookies</td></tr><tr><td>-sk,--skipOpenLedgers</td><td>Skip recovering open ledgers</td></tr><tr><td>-sku,--skipUnrecoverableLedgers</td><td>Skip unrecoverable ledgers</td></tr></tbody></table><h3 class="anchor anchorWithStickyNavbar_LWe7" id="bookkeeper-shell-simpletest">simpletest<a href="#bookkeeper-shell-simpletest" class="hash-link" aria-label="Direct link to simpletest" title="Direct link to simpletest">​</a></h3><p>Simple test to create a ledger and write entries to it.</p><h5 class="anchor anchorWithStickyNavbar_LWe7" id="usage-32">Usage<a href="#usage-32" class="hash-link" aria-label="Direct link to Usage" title="Direct link to Usage">​</a></h5><div class="language-shell codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-shell codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">$ bin/bookkeeper shell simpletest </span><span class="token punctuation" style="color:#393A34">\</span><span class="token plain"> </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token operator" style="color:#393A34">&lt;</span><span class="token plain">options</span><span class="token operator" style="color:#393A34">&gt;</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><table><thead><tr><th>Flag</th><th>Description</th></tr></thead><tbody><tr><td>-e,--ensemble N</td><td>Ensemble size (default 3)</td></tr><tr><td>-w,--writeQuorum N</td><td>Write quorum size (default 2)</td></tr><tr><td>-a,--ackQuorum N</td><td>Ack quorum size (default 2)</td></tr><tr><td>-n,--numEntries N</td><td>Entries to write (default 1000)</td></tr></tbody></table><h3 class="anchor anchorWithStickyNavbar_LWe7" id="bookkeeper-shell-triggeraudit">triggeraudit<a href="#bookkeeper-shell-triggeraudit" class="hash-link" aria-label="Direct link to triggeraudit" title="Direct link to triggeraudit">​</a></h3><p>Force trigger the Audit by resetting the lostBookieRecoveryDelay.</p><h5 class="anchor anchorWithStickyNavbar_LWe7" id="usage-33">Usage<a href="#usage-33" class="hash-link" aria-label="Direct link to Usage" title="Direct link to Usage">​</a></h5><div class="language-shell codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-shell codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">$ bin/bookkeeper shell triggeraudit</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><h3 class="anchor anchorWithStickyNavbar_LWe7" id="bookkeeper-shell-updatecookie">updatecookie<a href="#bookkeeper-shell-updatecookie" class="hash-link" aria-label="Direct link to updatecookie" title="Direct link to updatecookie">​</a></h3><p>Update bookie id in cookie.</p><h5 class="anchor anchorWithStickyNavbar_LWe7" id="usage-34">Usage<a href="#usage-34" class="hash-link" aria-label="Direct link to Usage" title="Direct link to Usage">​</a></h5><div class="language-shell codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-shell codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">$ bin/bookkeeper shell updatecookie </span><span class="token punctuation" style="color:#393A34">\</span><span class="token plain"> </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token operator" style="color:#393A34">&lt;</span><span class="token plain">options</span><span class="token operator" style="color:#393A34">&gt;</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><table><thead><tr><th>Flag</th><th>Description</th></tr></thead><tbody><tr><td>-b,--bookieId HOSTNAME or IP</td><td>Bookie Id</td></tr><tr><td>-d,--delete FORCE</td><td>Delete cookie both locally and in ZooKeeper</td></tr><tr><td>-e,--expandstorage</td><td>Expand Storage</td></tr><tr><td>-l,--list</td><td>List paths of all the cookies present locally and on zookkeeper</td></tr></tbody></table><h3 class="anchor anchorWithStickyNavbar_LWe7" id="bookkeeper-shell-updateledgers">updateledgers<a href="#bookkeeper-shell-updateledgers" class="hash-link" aria-label="Direct link to updateledgers" title="Direct link to updateledgers">​</a></h3><p>Update bookie id in ledgers (this may take a long time).</p><h5 class="anchor anchorWithStickyNavbar_LWe7" id="usage-35">Usage<a href="#usage-35" class="hash-link" aria-label="Direct link to Usage" title="Direct link to Usage">​</a></h5><div class="language-shell codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-shell codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">$ bin/bookkeeper shell updateledgers </span><span class="token punctuation" style="color:#393A34">\</span><span class="token plain"> </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token operator" style="color:#393A34">&lt;</span><span class="token plain">options</span><span class="token operator" style="color:#393A34">&gt;</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><table><thead><tr><th>Flag</th><th>Description</th></tr></thead><tbody><tr><td>-b,--bookieId HOSTNAME or IP</td><td>Bookie Id</td></tr><tr><td>-s,--updatespersec</td><td>Number of ledgers updating per second (default 5 per sec)</td></tr><tr><td>-l,--limit N</td><td>Maximum number of ledgers to update (default no limit)</td></tr><tr><td>-v,--verbose</td><td>Print status of the ledger updation (default false)</td></tr><tr><td>-p,--printprogress N</td><td>Print messages on every configured seconds if verbose turned on (default 10 secs)</td></tr><tr><td>-r,--maxOutstandingReads N</td><td>Max outstanding reads (default: 5 * updatespersec)</td></tr></tbody></table><h3 class="anchor anchorWithStickyNavbar_LWe7" id="bookkeeper-shell-updateBookieInLedger">updateBookieInLedger<a href="#bookkeeper-shell-updateBookieInLedger" class="hash-link" aria-label="Direct link to updateBookieInLedger" title="Direct link to updateBookieInLedger">​</a></h3><p>Replace srcBookie with destBookie in ledger metadata. (this may take a long time).
 Useful when Host-reip or data-migration. In that case, shutdown bookie process in src-bookie,
 use this command to update ledger metadata by replacing src-bookie to dest-bookie where data has been copied/moved.
-Start the bookie process on dest-bookie and dest-bookie will serve copied ledger data from src-bookie.</p><h5 class="anchor anchorWithStickyNavbar_LWe7" id="usage-36">Usage<a href="#usage-36" class="hash-link" aria-label="Direct link to Usage" title="Direct link to Usage">​</a></h5><div class="language-shell codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-shell codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">$ bin/bookkeeper shell updateBookieInLedger </span><span class="token punctuation" style="color:#393A34">\</span><span class="token plain"> </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token operator" style="color:#393A34">&lt;</span><span class="token plain">options</span><span class="token operator" style="color:#393A34">&gt;</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><table><thead><tr><th>Flag</th><th>Description</th></tr></thead><tbody><tr><td>-sb,--srcBookie BOOKIE_ID</td><td>Source Bookie Id</td></tr><tr><td>-db,--destBookie BOOKIE_ID</td><td>Destination Bookie Id</td></tr><tr><td>-s,--updatespersec N</td><td>Number of ledgers updating per second (default 5 per sec)</td></tr><tr><td>-l,--limit N</td><td>Maximum number of ledgers to update (default no limit)</td></tr><tr><td>-v,--verbose</td><td>Print status of the ledger updation (default false)</td></tr><tr><td>-p,--printprogress N</td><td>Print messages on every configured seconds if verbose turned on (default 10 secs)</td></tr><tr><td>-r,--maxOutstandingReads N</td><td>Max outstanding reads (default: 5 * updatespersec)</td></tr></tbody></table><h3 class="anchor anchorWithStickyNavbar_LWe7" id="bookkeeper-shell-whoisauditor">whoisauditor<a href="#bookkeeper-shell-whoisauditor" class="hash-link" aria-label="Direct link to whoisauditor" title="Direct link to whoisauditor">​</a></h3><p>Print the node which holds the auditor lock</p><h5 class="anchor anchorWithStickyNavbar_LWe7" id="usage-37">Usage<a href="#usage-37" class="hash-link" aria-label="Direct link to Usage" title="Direct link to Usage">​</a></h5><div class="language-shell codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-shell codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">$ bin/bookkeeper shell whoisauditor</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><h3 class="anchor anchorWithStickyNavbar_LWe7" id="bookkeeper-shell-whatisinstanceid">whatisinstanceid<a href="#bookkeeper-shell-whatisinstanceid" class="hash-link" aria-label="Direct link to whatisinstanceid" title="Direct link to whatisinstanceid">​</a></h3><p>Print the instanceid of the cluster</p><h5 class="anchor anchorWithStickyNavbar_LWe7" id="usage-38">Usage<a href="#usage-38" class="hash-link" aria-label="Direct link to Usage" title="Direct link to Usage">​</a></h5><div class="language-shell codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-shell codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">$ bin/bookkeeper shell whatisinstanceid</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><h3 class="anchor anchorWithStickyNavbar_LWe7" id="bookkeeper-shell-convert-to-db-storage">convert-to-db-storage<a href="#bookkeeper-shell-convert-to-db-storage" class="hash-link" aria-label="Direct link to convert-to-db-storage" title="Direct link to convert-to-db-storage">​</a></h3><p>Convert bookie indexes from InterleavedStorage to DbLedgerStorage format</p><h5 class="anchor anchorWithStickyNavbar_LWe7" id="usage-39">Usage<a href="#usage-39" class="hash-link" aria-label="Direct link to Usage" title="Direct link to Usage">​</a></h5><div class="language-shell codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-shell codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">$ bin/bookkeeper shell convert-to-db-storage</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><h3 class="anchor anchorWithStickyNavbar_LWe7" id="bookkeeper-shell-convert-to-interleaved-storage">convert-to-interleaved-storage<a href="#bookkeeper-shell-convert-to-interleaved-storage" class="hash-link" aria-label="Direct link to convert-to-interleaved-storage" title="Direct link to convert-to-interleaved-storage">​</a></h3><p>Convert bookie indexes from DbLedgerStorage to InterleavedStorage format</p><h5 class="anchor anchorWithStickyNavbar_LWe7" id="usage-40">Usage<a href="#usage-40" class="hash-link" aria-label="Direct link to Usage" title="Direct link to Usage">​</a></h5><div class="language-shell codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-shell codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">$ bin/bookkeeper shell convert-to-interleaved-storage</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><h3 class="anchor anchorWithStickyNavbar_LWe7" id="bookkeeper-shell-rebuild-db-ledger-locations-index">rebuild-db-ledger-locations-index<a href="#bookkeeper-shell-rebuild-db-ledger-locations-index" class="hash-link" aria-label="Direct link to rebuild-db-ledger-locations-index" title="Direct link to rebuild-db-ledger-locations-index">​</a></h3><p>Rebuild DbLedgerStorage locations index</p><h5 class="anchor anchorWithStickyNavbar_LWe7" id="usage-41">Usage<a href="#usage-41" class="hash-link" aria-label="Direct link to Usage" title="Direct link to Usage">​</a></h5><div class="language-shell codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-shell codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">$ bin/bookkeeper shell rebuild-db-ledger-locations-index</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div></div></article><nav class="pagination-nav docusaurus-mt-lg" aria-label="Docs pages navigation"></nav></div></div><div class="col col--3"><div class="tableOfContents_bqdL thin-scrollbar theme-doc-toc-desktop"><ul class="table-of-contents table-of-contents__left-border"><li><a href="#bookkeeper-command" class="table-of-contents__link toc-highlight"><code>bookkeeper</code> command</a><ul><li><a href="#bookkeeper-shell-bookie" class="table-of-contents__link toc-highlight">bookie</a></li><li><a href="#bookkeeper-shell-localbookie" class="table-of-contents__link toc-highlight">localbookie</a></li><li><a href="#bookkeeper-shell-autorecovery" class="table-of-contents__link toc-highlight">autorecovery</a></li><li><a href="#bookkeeper-shell-upgrade" class="table-of-contents__link toc-highlight">upgrade</a></li><li><a href="#bookkeeper-shell-shell" class="table-of-contents__link toc-highlight">shell</a></li><li><a href="#bookkeeper-shell-help" class="table-of-contents__link toc-highlight">help</a></li></ul></li><li><a href="#bookkeeper-shell" class="table-of-contents__link toc-highlight">BookKeeper shell</a><ul><li><a href="#bookkeeper-shell-queryautorecoverystatus" class="table-of-contents__link toc-highlight">queryautorecoverystatus</a></li><li><a href="#bookkeeper-shell-autorecovery" class="table-of-contents__link toc-highlight">autorecovery</a></li><li><a href="#bookkeeper-shell-bookieformat" class="table-of-contents__link toc-highlight">bookieformat</a></li><li><a href="#bookkeeper-shell-initbookie" class="table-of-contents__link toc-highlight">initbookie</a></li><li><a href="#bookkeeper-shell-bookieinfo" class="table-of-contents__link toc-highlight">bookieinfo</a></li><li><a href="#bookkeeper-shell-bookiesanity" class="table-of-contents__link toc-highlight">bookiesanity</a></li><li><a href="#bookkeeper-shell-decommissionbookie" class="table-of-contents__link toc-highlight">decommissionbookie</a></li><li><a href="#bookkeeper-shell-deleteledger" class="table-of-contents__link toc-highlight">deleteledger</a></li><li><a href="#bookkeeper-shell-endpointinfo" class="table-of-contents__link toc-highlight">endpointinfo</a></li><li><a href="#bookkeeper-shell-expandstorage" class="table-of-contents__link toc-highlight">expandstorage</a></li><li><a href="#bookkeeper-shell-help" class="table-of-contents__link toc-highlight">help</a></li><li><a href="#bookkeeper-shell-lastmark" class="table-of-contents__link toc-highlight">lastmark</a></li><li><a href="#bookkeeper-shell-ledger" class="table-of-contents__link toc-highlight">ledger</a></li><li><a href="#bookkeeper-shell-ledgermetadata" class="table-of-contents__link toc-highlight">ledgermetadata</a></li><li><a href="#bookkeeper-shell-listbookies" class="table-of-contents__link toc-highlight">listbookies</a></li><li><a href="#bookkeeper-shell-listfilesondisc" class="table-of-contents__link toc-highlight">listfilesondisc</a></li><li><a href="#bookkeeper-shell-listledgers" class="table-of-contents__link toc-highlight">listledgers</a></li><li><a href="#bookkeeper-shell-listunderreplicated" class="table-of-contents__link toc-highlight">listunderreplicated</a></li><li><a href="#bookkeeper-shell-metaformat" class="table-of-contents__link toc-highlight">metaformat</a></li><li><a href="#bookkeeper-shell-initnewcluster" class="table-of-contents__link toc-highlight">initnewcluster</a></li><li><a href="#bookkeeper-shell-nukeexistingcluster" class="table-of-contents__link toc-highlight">nukeexistingcluster</a></li><li><a href="#bookkeeper-shell-lostbookierecoverydelay" class="table-of-contents__link toc-highlight">lostbookierecoverydelay</a></li><li><a href="#bookkeeper-shell-readjournal" class="table-of-contents__link toc-highlight">readjournal</a></li><li><a href="#bookkeeper-shell-readledger" class="table-of-contents__link toc-highlight">readledger</a></li><li><a href="#bookkeeper-shell-readlog" class="table-of-contents__link toc-highlight">readlog</a></li><li><a href="#bookkeeper-shell-recover" class="table-of-contents__link toc-highlight">recover</a></li><li><a href="#bookkeeper-shell-simpletest" class="table-of-contents__link toc-highlight">simpletest</a></li><li><a href="#bookkeeper-shell-triggeraudit" class="table-of-contents__link toc-highlight">triggeraudit</a></li><li><a href="#bookkeeper-shell-updatecookie" class="table-of-contents__link toc-highlight">updatecookie</a></li><li><a href="#bookkeeper-shell-updateledgers" class="table-of-contents__link toc-highlight">updateledgers</a></li><li><a href="#bookkeeper-shell-updateBookieInLedger" class="table-of-contents__link toc-highlight">updateBookieInLedger</a></li><li><a href="#bookkeeper-shell-whoisauditor" class="table-of-contents__link toc-highlight">whoisauditor</a></li><li><a href="#bookkeeper-shell-whatisinstanceid" class="table-of-contents__link toc-highlight">whatisinstanceid</a></li><li><a href="#bookkeeper-shell-convert-to-db-storage" class="table-of-contents__link toc-highlight">convert-to-db-storage</a></li><li><a href="#bookkeeper-shell-convert-to-interleaved-storage" class="table-of-contents__link toc-highlight">convert-to-interleaved-storage</a></li><li><a href="#bookkeeper-shell-rebuild-db-ledger-locations-index" class="table-of-contents__link toc-highlight">rebuild-db-ledger-locations-index</a></li></ul></li></ul></div></div></div></div></main></div></div><footer class="footer footer--dark"><div class="container container-fluid"><div class="row footer__links"><div class="col footer__col"><div class="footer__title">Documentation</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/docs/overview">Overview</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/getting-started/installation">Getting started</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/deployment/manual">Deployment</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/admin/bookies">Administration</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/api/overview">API</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/security/overview">Security</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/development/protocol">Development</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/reference/config">Reference</a></li></ul></div><div class="col footer__col"><div class="footer__title">Community</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/community/mailing-lists">Mailing lists</a></li><li class="footer__item"><a class="footer__link-item" href="/community/slack">Slack</a></li><li class="footer__item"><a href="https://github.com/apache/bookkeeper" target="_blank" rel="noopener noreferrer" class="footer__link-item">Github<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a href="https://twitter.com/asfbookkeeper" target="_blank" rel="noopener noreferrer" class="footer__link-item">Twitter<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div><div class="col footer__col"><div class="footer__title">Project</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/project/who">Who are we?</a></li><li class="footer__item"><a class="footer__link-item" href="/project/bylaws">Bylaws</a></li><li class="footer__item"><a href="https://apache.org/licenses" target="_blank" rel="noopener noreferrer" class="footer__link-item">License<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a class="footer__link-item" href="/project/privacy">Privacy policy</a></li><li class="footer__item"><a href="https://www.apache.org/foundation/sponsorship.html" target="_blank" rel="noopener noreferrer" class="footer__link-item">Sponsorship<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a href="https://www.apache.org/foundation/thanks.html" target="_blank" rel="noopener noreferrer" class="footer__link-item">Thanks<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div></div><div class="footer__bottom text--center"><div class="footer__copyright"><footer class="footer">
+Start the bookie process on dest-bookie and dest-bookie will serve copied ledger data from src-bookie.</p><h5 class="anchor anchorWithStickyNavbar_LWe7" id="usage-36">Usage<a href="#usage-36" class="hash-link" aria-label="Direct link to Usage" title="Direct link to Usage">​</a></h5><div class="language-shell codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-shell codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">$ bin/bookkeeper shell updateBookieInLedger </span><span class="token punctuation" style="color:#393A34">\</span><span class="token plain"> </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token operator" style="color:#393A34">&lt;</span><span class="token plain">options</span><span class="token operator" style="color:#393A34">&gt;</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><table><thead><tr><th>Flag</th><th>Description</th></tr></thead><tbody><tr><td>-sb,--srcBookie BOOKIE_ID</td><td>Source Bookie Id</td></tr><tr><td>-db,--destBookie BOOKIE_ID</td><td>Destination Bookie Id</td></tr><tr><td>-s,--updatespersec N</td><td>Number of ledgers updating per second (default 5 per sec)</td></tr><tr><td>-l,--limit N</td><td>Maximum number of ledgers to update (default no limit)</td></tr><tr><td>-v,--verbose</td><td>Print status of the ledger updation (default false)</td></tr><tr><td>-p,--printprogress N</td><td>Print messages on every configured seconds if verbose turned on (default 10 secs)</td></tr><tr><td>-r,--maxOutstandingReads N</td><td>Max outstanding reads (default: 5 * updatespersec)</td></tr></tbody></table><h3 class="anchor anchorWithStickyNavbar_LWe7" id="bookkeeper-shell-whoisauditor">whoisauditor<a href="#bookkeeper-shell-whoisauditor" class="hash-link" aria-label="Direct link to whoisauditor" title="Direct link to whoisauditor">​</a></h3><p>Print the node which holds the auditor lock</p><h5 class="anchor anchorWithStickyNavbar_LWe7" id="usage-37">Usage<a href="#usage-37" class="hash-link" aria-label="Direct link to Usage" title="Direct link to Usage">​</a></h5><div class="language-shell codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-shell codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">$ bin/bookkeeper shell whoisauditor</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><h3 class="anchor anchorWithStickyNavbar_LWe7" id="bookkeeper-shell-whatisinstanceid">whatisinstanceid<a href="#bookkeeper-shell-whatisinstanceid" class="hash-link" aria-label="Direct link to whatisinstanceid" title="Direct link to whatisinstanceid">​</a></h3><p>Print the instanceid of the cluster</p><h5 class="anchor anchorWithStickyNavbar_LWe7" id="usage-38">Usage<a href="#usage-38" class="hash-link" aria-label="Direct link to Usage" title="Direct link to Usage">​</a></h5><div class="language-shell codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-shell codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">$ bin/bookkeeper shell whatisinstanceid</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><h3 class="anchor anchorWithStickyNavbar_LWe7" id="bookkeeper-shell-convert-to-db-storage">convert-to-db-storage<a href="#bookkeeper-shell-convert-to-db-storage" class="hash-link" aria-label="Direct link to convert-to-db-storage" title="Direct link to convert-to-db-storage">​</a></h3><p>Convert bookie indexes from InterleavedStorage to DbLedgerStorage format</p><h5 class="anchor anchorWithStickyNavbar_LWe7" id="usage-39">Usage<a href="#usage-39" class="hash-link" aria-label="Direct link to Usage" title="Direct link to Usage">​</a></h5><div class="language-shell codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-shell codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">$ bin/bookkeeper shell convert-to-db-storage</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><h3 class="anchor anchorWithStickyNavbar_LWe7" id="bookkeeper-shell-convert-to-interleaved-storage">convert-to-interleaved-storage<a href="#bookkeeper-shell-convert-to-interleaved-storage" class="hash-link" aria-label="Direct link to convert-to-interleaved-storage" title="Direct link to convert-to-interleaved-storage">​</a></h3><p>Convert bookie indexes from DbLedgerStorage to InterleavedStorage format</p><h5 class="anchor anchorWithStickyNavbar_LWe7" id="usage-40">Usage<a href="#usage-40" class="hash-link" aria-label="Direct link to Usage" title="Direct link to Usage">​</a></h5><div class="language-shell codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-shell codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">$ bin/bookkeeper shell convert-to-interleaved-storage</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><h3 class="anchor anchorWithStickyNavbar_LWe7" id="bookkeeper-shell-rebuild-db-ledger-locations-index">rebuild-db-ledger-locations-index<a href="#bookkeeper-shell-rebuild-db-ledger-locations-index" class="hash-link" aria-label="Direct link to rebuild-db-ledger-locations-index" title="Direct link to rebuild-db-ledger-locations-index">​</a></h3><p>Rebuild DbLedgerStorage locations index</p><h5 class="anchor anchorWithStickyNavbar_LWe7" id="usage-41">Usage<a href="#usage-41" class="hash-link" aria-label="Direct link to Usage" title="Direct link to Usage">​</a></h5><div class="language-shell codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-shell codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">$ bin/bookkeeper shell rebuild-db-ledger-locations-index</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div></div></article><nav class="pagination-nav docusaurus-mt-lg" aria-label="Docs pages navigation"><a class="pagination-nav__link pagination-nav__link--prev" href="/docs/reference/config"><div class="pagination-nav__sublabel">Previous</div><div class="pagination-nav__label">BookKeeper configuration</div></a></nav></div></div><div class="col col--3"><div class="tableOfContents_bqdL thin-scrollbar theme-doc-toc-desktop"><ul class="table-of-contents table-of-contents__left-border"><li><a href="#bookkeeper-command" class="table-of-contents__link toc-highlight"><code>bookkeeper</code> command</a><ul><li><a href="#bookkeeper-shell-bookie" class="table-of-contents__link toc-highlight">bookie</a></li><li><a href="#bookkeeper-shell-localbookie" class="table-of-contents__link toc-highlight">localbookie</a></li><li><a href="#bookkeeper-shell-autorecovery" class="table-of-contents__link toc-highlight">autorecovery</a></li><li><a href="#bookkeeper-shell-upgrade" class="table-of-contents__link toc-highlight">upgrade</a></li><li><a href="#bookkeeper-shell-shell" class="table-of-contents__link toc-highlight">shell</a></li><li><a href="#bookkeeper-shell-help" class="table-of-contents__link toc-highlight">help</a></li></ul></li><li><a href="#bookkeeper-shell" class="table-of-contents__link toc-highlight">BookKeeper shell</a><ul><li><a href="#bookkeeper-shell-queryautorecoverystatus" class="table-of-contents__link toc-highlight">queryautorecoverystatus</a></li><li><a href="#bookkeeper-shell-autorecovery" class="table-of-contents__link toc-highlight">autorecovery</a></li><li><a href="#bookkeeper-shell-bookieformat" class="table-of-contents__link toc-highlight">bookieformat</a></li><li><a href="#bookkeeper-shell-initbookie" class="table-of-contents__link toc-highlight">initbookie</a></li><li><a href="#bookkeeper-shell-bookieinfo" class="table-of-contents__link toc-highlight">bookieinfo</a></li><li><a href="#bookkeeper-shell-bookiesanity" class="table-of-contents__link toc-highlight">bookiesanity</a></li><li><a href="#bookkeeper-shell-decommissionbookie" class="table-of-contents__link toc-highlight">decommissionbookie</a></li><li><a href="#bookkeeper-shell-deleteledger" class="table-of-contents__link toc-highlight">deleteledger</a></li><li><a href="#bookkeeper-shell-endpointinfo" class="table-of-contents__link toc-highlight">endpointinfo</a></li><li><a href="#bookkeeper-shell-expandstorage" class="table-of-contents__link toc-highlight">expandstorage</a></li><li><a href="#bookkeeper-shell-help" class="table-of-contents__link toc-highlight">help</a></li><li><a href="#bookkeeper-shell-lastmark" class="table-of-contents__link toc-highlight">lastmark</a></li><li><a href="#bookkeeper-shell-ledger" class="table-of-contents__link toc-highlight">ledger</a></li><li><a href="#bookkeeper-shell-ledgermetadata" class="table-of-contents__link toc-highlight">ledgermetadata</a></li><li><a href="#bookkeeper-shell-listbookies" class="table-of-contents__link toc-highlight">listbookies</a></li><li><a href="#bookkeeper-shell-listfilesondisc" class="table-of-contents__link toc-highlight">listfilesondisc</a></li><li><a href="#bookkeeper-shell-listledgers" class="table-of-contents__link toc-highlight">listledgers</a></li><li><a href="#bookkeeper-shell-listunderreplicated" class="table-of-contents__link toc-highlight">listunderreplicated</a></li><li><a href="#bookkeeper-shell-metaformat" class="table-of-contents__link toc-highlight">metaformat</a></li><li><a href="#bookkeeper-shell-initnewcluster" class="table-of-contents__link toc-highlight">initnewcluster</a></li><li><a href="#bookkeeper-shell-nukeexistingcluster" class="table-of-contents__link toc-highlight">nukeexistingcluster</a></li><li><a href="#bookkeeper-shell-lostbookierecoverydelay" class="table-of-contents__link toc-highlight">lostbookierecoverydelay</a></li><li><a href="#bookkeeper-shell-readjournal" class="table-of-contents__link toc-highlight">readjournal</a></li><li><a href="#bookkeeper-shell-readledger" class="table-of-contents__link toc-highlight">readledger</a></li><li><a href="#bookkeeper-shell-readlog" class="table-of-contents__link toc-highlight">readlog</a></li><li><a href="#bookkeeper-shell-recover" class="table-of-contents__link toc-highlight">recover</a></li><li><a href="#bookkeeper-shell-simpletest" class="table-of-contents__link toc-highlight">simpletest</a></li><li><a href="#bookkeeper-shell-triggeraudit" class="table-of-contents__link toc-highlight">triggeraudit</a></li><li><a href="#bookkeeper-shell-updatecookie" class="table-of-contents__link toc-highlight">updatecookie</a></li><li><a href="#bookkeeper-shell-updateledgers" class="table-of-contents__link toc-highlight">updateledgers</a></li><li><a href="#bookkeeper-shell-updateBookieInLedger" class="table-of-contents__link toc-highlight">updateBookieInLedger</a></li><li><a href="#bookkeeper-shell-whoisauditor" class="table-of-contents__link toc-highlight">whoisauditor</a></li><li><a href="#bookkeeper-shell-whatisinstanceid" class="table-of-contents__link toc-highlight">whatisinstanceid</a></li><li><a href="#bookkeeper-shell-convert-to-db-storage" class="table-of-contents__link toc-highlight">convert-to-db-storage</a></li><li><a href="#bookkeeper-shell-convert-to-interleaved-storage" class="table-of-contents__link toc-highlight">convert-to-interleaved-storage</a></li><li><a href="#bookkeeper-shell-rebuild-db-ledger-locations-index" class="table-of-contents__link toc-highlight">rebuild-db-ledger-locations-index</a></li></ul></li></ul></div></div></div></div></main></div></div><footer class="footer footer--dark"><div class="container container-fluid"><div class="row footer__links"><div class="col footer__col"><div class="footer__title">Documentation</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/docs/overview">Overview</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/getting-started/installation">Getting started</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/deployment/manual">Deployment</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/admin/bookies">Administration</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/api/overview">API</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/security/overview">Security</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/development/protocol">Development</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/reference/config">Reference</a></li></ul></div><div class="col footer__col"><div class="footer__title">Community</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/community/mailing-lists">Mailing lists</a></li><li class="footer__item"><a class="footer__link-item" href="/community/slack">Slack</a></li><li class="footer__item"><a href="https://github.com/apache/bookkeeper" target="_blank" rel="noopener noreferrer" class="footer__link-item">Github<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a href="https://twitter.com/asfbookkeeper" target="_blank" rel="noopener noreferrer" class="footer__link-item">Twitter<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div><div class="col footer__col"><div class="footer__title">Project</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/project/who">Who are we?</a></li><li class="footer__item"><a class="footer__link-item" href="/project/bylaws">Bylaws</a></li><li class="footer__item"><a href="https://apache.org/licenses" target="_blank" rel="noopener noreferrer" class="footer__link-item">License<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a class="footer__link-item" href="/project/privacy">Privacy policy</a></li><li class="footer__item"><a href="https://www.apache.org/foundation/sponsorship.html" target="_blank" rel="noopener noreferrer" class="footer__link-item">Sponsorship<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a href="https://www.apache.org/foundation/thanks.html" target="_blank" rel="noopener noreferrer" class="footer__link-item">Thanks<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div></div><div class="footer__bottom text--center"><div class="footer__copyright"><footer class="footer">
         <div class="container">
           <div class="content has-text-centered">
             <p>
@@ -29,7 +29,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/reference/config/index.html b/content/docs/reference/config/index.html
index d858817..53aa9ac 100644
--- a/content/docs/reference/config/index.html
+++ b/content/docs/reference/config/index.html
@@ -4,19 +4,19 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">BookKeeper configuration | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/reference/config"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.17.0"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.17.0"><meta data-rh="true" name="docsearch:version" content="4.17.0"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.17.0"><meta data-rh="true" property="og:title" content="BookKeeper configuration | Apache BookKeeper"><meta data-rh="true" name="description" content="The table below lists parameters that you can set to configure bookies. All configuration takes place in the bk_server.conf file in the bookkeeper-server/conf directory of your BookKeeper installation."><meta data-rh="true" property="og:description" content="The table below lists parameters that you can set to configure bookies. All configuration takes place in the bk_server.conf file in the bookkeeper-server/conf directory of your BookKeeper installation."><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/reference/config"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/reference/config" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/reference/config" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
-<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navbar__brand" href="/"><div class="navbar__logo"><img src="/img/bk-logo.svg" alt="Apache Bookkeeper" class="themedImage_ToTc themedImage--light_HNdA"><img src="/img/bk-logo.svg" alt="Apache Bookkeeper" class="themedImage_ToTc themedImage--dark_i4oU"></div><b class="navbar__title text--truncate">Apache BookKeeper</b></a><a class="navbar__item navbar__link" href="/docs/overview/">Documentation</a><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Community</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/community/mailing-lists">Mailing lists</a></li><li><a class="dropdown__link" href="/community/slack">Slack</a></li><li><a href="https://github.com/apache/bookkeeper/issues" target="_blank" rel="noopener noreferrer" class="dropdown__link">Github issues<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a class="dropdown__link" href="/community/releases">Release management</a></li><li><a class="dropdown__link" href="/community/meeting">Community meetings</a></li><li><a class="dropdown__link" href="/community/contributing">Contribution guide</a></li><li><a class="dropdown__link" href="/community/coding-guide">Coding guide</a></li><li><a class="dropdown__link" href="/community/testing">Testing guide</a></li><li><a class="dropdown__link" href="/community/issue-report">Issue report guide</a></li><li><a class="dropdown__link" href="/community/release-guide">Release guide</a></li><li><a class="dropdown__link" href="/community/presentations">Presentations</a></li><li><a class="dropdown__link" href="/community/bookkeeper-proposals">BookKeeper proposals (BP)</a></li></ul></div><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Project</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/project/who">Who are we?</a></li><li><a class="dropdown__link" href="/project/bylaws">Bylaws</a></li><li><a href="https://apache.org/licenses" target="_blank" rel="noopener noreferrer" class="dropdown__link">License<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a class="dropdown__link" href="/project/privacy">Privacy policy</a></li><li><a href="https://www.apache.org/foundation/sponsorship.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Sponsorship<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a href="https://www.apache.org/foundation/thanks.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Thanks<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div></div><div class="navbar__items navbar__items--right"><div class="navbar__item dropdown dropdown--hoverable dropdown--right"><a class="navbar__link" aria-haspopup="true" aria-expanded="false" role="button" href="/docs/admin/autorecovery">4.17.0</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/docs/next/reference/config">Next</a></li><li><a aria-current="page" class="dropdown__link dropdown__link--active" href="/docs/reference/config">4.17.0</a></li><li><a class="dropdown__link" href="/docs/4.16.5/reference/config">4.16.5</a></li><li><a class="dropdown__link" href="/docs/4.15.5/reference/config">4.15.5</a></li><li><a class="dropdown__link" href="/docs/4.14.8/reference/config">4.14.8</a></li><li><a class="dropdown__link" href="/docs/4.13.0/reference/config">4.13.0</a></li><li><a class="dropdown__link" href="/docs/4.12.1/reference/config">4.12.1</a></li><li><a class="dropdown__link" href="/docs/4.11.1/reference/config">4.11.1</a></li><li><a class="dropdown__link" href="/docs/4.10.0/reference/config">4.10.0</a></li><li><a class="dropdown__link" href="/docs/4.9.2/reference/config">4.9.2</a></li><li><a class="dropdown__link" href="/docs/4.8.2/reference/config">4.8.2</a></li><li><a class="dropdown__link" href="/docs/4.7.3/reference/config">4.7.3</a></li><li><a class="dropdown__link" href="/docs/4.6.2/reference/config">4.6.2</a></li><li><a class="dropdown__link" href="/docs/4.5.1/reference/config">4.5.1</a></li></ul></div><a class="navbar__item navbar__link" href="/releases">Download</a><div class="toggle_vylO colorModeToggle_DEke"><button class="clean-btn toggleButton_gllP toggleButtonDisabled_aARS" type="button" disabled="" title="Switch between dark and light mode (currently light mode)" aria-label="Switch between dark and light mode (currently light mode)" aria-live="polite"><svg viewBox="0 0 24 24" width="24" height="24" class="lightToggleIcon_pyhR"><path fill="currentColor" d="M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"></path></svg><svg viewBox="0 0 24 24" width="24" height="24" class="darkToggleIcon_wfgR"><path fill="currentColor" d="M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"></path></svg></button></div><div class="searchBox_ZlJk"></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div></nav><div id="docusaurus_skipToContent_fallback" class="main-wrapper mainWrapper_z2l0 docsWrapper_BCFX"><button aria-label="Scroll back to top" class="clean-btn theme-back-to-top-button backToTopButton_sjWU" type="button"></button><div class="docPage__5DB"><main class="docMainContainer_gTbr docMainContainerEnhanced_Uz_u"><div class="container padding-top--md padding-bottom--lg"><div class="row"><div class="col docItemCol_VOVn"><div class="docItemContainer_Djhp"><article><span class="theme-doc-version-badge badge badge--secondary">Version: 4.17.0</span><div class="tocCollapsible_ETCw theme-doc-toc-mobile tocMobile_ITEo"><button type="button" class="clean-btn tocCollapsibleButton_TO0P">On this page</button></div><div class="theme-doc-markdown markdown"><header><h1>BookKeeper configuration</h1></header><p>The table below lists parameters that you can set to configure bookies. All configuration takes place in the <code>bk_server.conf</code> file in the <code>bookkeeper-server/conf</code> directory of your <a href="/docs/getting-started/installation">BookKeeper installation</a>.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="server-parameters">Server parameters<a href="#server-parameters" class="hash-link" aria-label="Direct link to Server parameters" title="Direct link to Server parameters">​</a></h2><table><thead><tr><th>Parameter</th><th>Description</th><th>Default</th></tr></thead><tbody><tr><td>bookiePort</td><td>The port that the bookie server listens on.</td><td>3181</td></tr><tr><td>allowMultipleDirsUnderSameDiskPartition</td><td>Configure the bookie to allow/disallow multiple ledger/index/journal directories in the same filesystem disk partition.</td><td>true</td></tr><tr><td>listeningInterface</td><td>The network interface that the bookie should listen on. If not set, the bookie will listen on all interfaces.</td><td>eth0</td></tr><tr><td>advertisedAddress</td><td>Configure a specific hostname or IP address that the bookie should use to advertise itself to<br>clients. If not set, bookie will advertised its own IP address or hostname, depending on the<br><code>listeningInterface</code> and <code>useHostNameAsBookieID</code> settings.<br></td><td>eth0</td></tr><tr><td>allowLoopback</td><td>Whether the bookie is allowed to use a loopback interface as its primary<br>interface (the interface it uses to establish its identity). By default, loopback interfaces are <em>not</em> allowed as the primary interface.<br><br>Using a loopback interface as the primary interface usually indicates a configuration error. It&#x27;s fairly common in some VPS setups, for example, to not configure a hostname or to have the hostname resolve to 127.0.0.1. If this is the case, then all bookies in the cluster will establish their identities as 127.0.0.1:3181, and only one will be able to join the cluster. For VPSs configured like this, you should explicitly set the listening interface.<br></td><td>false</td></tr><tr><td>useHostNameAsBookieID</td><td>Whether the bookie should use its hostname to register with the ZooKeeper coordination service. When <code>false</code>, the bookie will use its IP address for the registration.</td><td>false</td></tr><tr><td>useShortHostName</td><td>Whether the bookie should use short hostname or <a href="https://en.wikipedia.org/wiki/Fully_qualified_domain_name" target="_blank" rel="noopener noreferrer">FQDN</a> hostname for registration and ledger metadata when <code>useHostNameAsBookieID</code> is enabled.</td><td>false</td></tr><tr><td>allowEphemeralPorts</td><td>Whether the bookie is allowed to use an ephemeral port (port 0) as its server port. By default, an ephemeral port is not allowed. Using an ephemeral port as the service port usually indicates a configuration error. However, in unit tests, using an ephemeral port will address port conflict problems and allow running tests in parallel.</td><td>false</td></tr><tr><td>enableLocalTransport</td><td>Whether allow the bookie to listen for BookKeeper clients executed on the local JVM.</td><td>false</td></tr><tr><td>disableServerSocketBind</td><td>Whether allow the bookie to disable bind on network interfaces, this bookie will be available only to BookKeeper clients executed on the local JVM.</td><td>false</td></tr><tr><td>bookieDeathWatchInterval</td><td>Interval to watch whether bookie is dead or not, in milliseconds.</td><td>1000</td></tr><tr><td>extraServerComponents</td><td>Configure a list of extra server components to enable and load on a bookie server. This provides a plugin mechanism to run extra server components along with a bookie server.</td><td></td></tr><tr><td>ignoreExtraServerComponentsStartupFailures</td><td>Whether the bookie should ignore startup failures on loading server components specified by <code>extraServerComponents</code>.</td><td>false</td></tr></tbody></table><h2 class="anchor anchorWithStickyNavbar_LWe7" id="worker-thread-settings">Worker thread settings<a href="#worker-thread-settings" class="hash-link" aria-label="Direct link to Worker thread settings" title="Direct link to Worker thread settings">​</a></h2><table><thead><tr><th>Parameter</th><th>Description</th><th>Default</th></tr></thead><tbody><tr><td>numAddWorkerThreads</td><td>The number of threads that handle write requests. if zero, writes are handled by <a href="//netty.io/wiki/thread-model.html" target="_blank" rel="noopener noreferrer">Netty threads</a> directly.</td><td>1</td></tr><tr><td>numReadWorkerThreads</td><td>The number of threads that handle read requests. If zero, reads are handled by <a href="//netty.io/wiki/thread-model.html" target="_blank" rel="noopener noreferrer">Netty threads</a> directly.</td><td>8</td></tr><tr><td>numLongPollWorkerThreads</td><td>The number of threads that handle long poll requests. If zero, long poll requests are handled by <a href="//netty.io/wiki/thread-model.html" target="_blank" rel="noopener noreferrer">Netty threads</a> directly.</td><td></td></tr><tr><td>numJournalCallbackThreads</td><td>The number of threads that handle journal callbacks. If zero, journal callbacks are executed directly on force write threads.</td><td>1</td></tr><tr><td>numHighPriorityWorkerThreads</td><td>The number of threads that should be used for high priority requests (i.e. recovery reads and adds, and fencing). If zero, reads are handled by <a href="//netty.io/wiki/thread-model.html" target="_blank" rel="noopener noreferrer">Netty threads</a> directly.</td><td>8</td></tr><tr><td>maxPendingAddRequestsPerThread</td><td>If read worker threads are enabled, limit the number of pending requests, to avoid the executor queue to grow indefinitely. If zero or negative, the number of pending requests is unlimited.</td><td>10000</td></tr><tr><td>maxPendingReadRequestsPerThread</td><td>If add worker threads are enabled, limit the number of pending requests, to avoid the executor queue to grow indefinitely. If zero or negative, the number of pending requests is unlimited.</td><td>10000</td></tr><tr><td>enableBusyWait</td><td>Option to enable busy-wait settings. Default is false.<br>WARNING: This option will enable spin-waiting on executors and IO threads in order to reduce latency during<br>context switches. The spinning will consume 100% CPU even when bookie is not doing any work. It is recommended to<br>reduce the number of threads in the main workers pool and Netty event loop to only have few CPU cores busy.<br></td><td></td></tr></tbody></table><h2 class="anchor anchorWithStickyNavbar_LWe7" id="long-poll-settings">Long poll settings<a href="#long-poll-settings" class="hash-link" aria-label="Direct link to Long poll settings" title="Direct link to Long poll settings">​</a></h2><table><thead><tr><th>Parameter</th><th>Description</th><th>Default</th></tr></thead><tbody><tr><td>requestTimerTickDurationMs</td><td>The tick duration for long poll request timer, in milliseconds. See <a href="//netty.io/4.1/api/io/netty/util/HashedWheelTimer.html" target="_blank" rel="noopener noreferrer">HashedWheelTimer</a> for more details.</td><td>10</td></tr><tr><td>requestTimerNumTicks</td><td>The number of ticks per wheel for long poll request timer. See <a href="//netty.io/4.1/api/io/netty/util/HashedWheelTimer.html" target="_blank" rel="noopener noreferrer">HashedWheelTimer</a> for more details.</td><td>1024</td></tr></tbody></table><h2 class="anchor anchorWithStickyNavbar_LWe7" id="read-only-mode-support">Read-only mode support<a href="#read-only-mode-support" class="hash-link" aria-label="Direct link to Read-only mode support" title="Direct link to Read-only mode support">​</a></h2><table><thead><tr><th>Parameter</th><th>Description</th><th>Default</th></tr></thead><tbody><tr><td>readOnlyModeEnabled</td><td>If all ledger directories configured are full, then support only read requests for clients. If &quot;readOnlyModeEnabled=true&quot; then on all ledger disks full, bookie will be converted to read-only mode and serve only read requests. Otherwise the bookie will be shutdown. By default, this will be enabled.</td><td>true</td></tr><tr><td>forceReadOnlyBookie</td><td>Whether the bookie is force started in read only mode or not.</td><td>false</td></tr><tr><td>persistBookieStatusEnabled</td><td>Persist the bookie status locally on the disks. So the bookies can keep their status upon restarts.</td><td>false</td></tr><tr><td>readOnlyModeOnAnyDiskFullEnabled</td><td>If any ledger directories configured are full, then support only read requests for clients. If &quot;readOnlyModeOnAnyDiskFullEnabled=true&quot; then on any ledger disks full, bookie will be converted to read-only mode and serve only read requests. When all disks recovered, the bookie will be converted to read-write mode.Otherwise it will obey the <code>readOnlyModeEnabled</code> behavior. By default, this will be disabled.</td><td>false</td></tr></tbody></table><h2 class="anchor anchorWithStickyNavbar_LWe7" id="netty-server-settings">Netty server settings<a href="#netty-server-settings" class="hash-link" aria-label="Direct link to Netty server settings" title="Direct link to Netty server settings">​</a></h2><table><thead><tr><th>Parameter</th><th>Description</th><th>Default</th></tr></thead><tbody><tr><td>serverTcpNoDelay</td><td>This settings is used to enabled/disabled Nagle&#x27;s algorithm, which is a means of improving the efficiency of TCP/IP networks by reducing the number of packets that need to be sent over the network.<br><br>If you are sending many small messages, such that more than one can fit in a single IP packet, setting server.tcpnodelay to false to enable Nagle algorithm can provide better performance.<br></td><td>true</td></tr><tr><td>serverSockKeepalive</td><td>This setting is used to send keep-alive messages on connection-oriented sockets.</td><td>true</td></tr><tr><td>serverTcpLinger</td><td>The socket linger timeout on close. When enabled, a close or shutdown will not return until all queued messages for the socket have been successfully sent or the linger timeout has been reached. Otherwise, the call returns immediately and the closing is done in the background.</td><td></td></tr><tr><td>byteBufAllocatorSizeInitial</td><td>The Recv ByteBuf allocator initial buf size.</td><td>65536</td></tr><tr><td>byteBufAllocatorSizeMin</td><td>The Recv ByteBuf allocator min buf size.</td><td>65536</td></tr><tr><td>byteBufAllocatorSizeMax</td><td>The Recv ByteBuf allocator max buf size.</td><td>1048576</td></tr><tr><td>nettyMaxFrameSizeBytes</td><td>The maximum netty frame size in bytes. Any message received larger than this will be rejected, so when the client-side attempt to send more than the default size bytes, it should set up the corresponding parameter <code>setNettyMaxFrameSizeBytes(int maxSize)</code>, pay attention to the parameter should be less than the value of server-side.</td><td>5242880</td></tr></tbody></table><h2 class="anchor anchorWithStickyNavbar_LWe7" id="http-server-settings">Http server settings<a href="#http-server-settings" class="hash-link" aria-label="Direct link to Http server settings" title="Direct link to Http server settings">​</a></h2><table><thead><tr><th>Parameter</th><th>Description</th><th>Default</th></tr></thead><tbody><tr><td>httpServerEnabled</td><td>The flag enables/disables starting the admin http server.</td><td>false</td></tr><tr><td>httpServerPort</td><td>The http server port to listen on if <code>httpServerEnabled</code> is set to true.</td><td>8080</td></tr><tr><td>httpServerHost</td><td>The http server host to listen on if <code>httpServerEnabled</code> is set to true.</td><td>0.0.0.0</td></tr></tbody></table><h2 class="anchor anchorWithStickyNavbar_LWe7" id="security-settings">Security settings<a href="#security-settings" class="hash-link" aria-label="Direct link to Security settings" title="Direct link to Security settings">​</a></h2><table><thead><tr><th>Parameter</th><th>Description</th><th>Default</th></tr></thead><tbody><tr><td>bookieAuthProviderFactoryClass</td><td>The bookie authentication provider factory class name. If this is null, no authentication will take place.</td><td></td></tr><tr><td>permittedStartupUsers</td><td>The list of users are permitted to run the bookie process. Any users can run the bookie process if it is not set.<br><br>Example settings - &quot;permittedStartupUsers=user1,user2,user3&quot;<br></td><td></td></tr></tbody></table><h2 class="anchor anchorWithStickyNavbar_LWe7" id="tls-settings">TLS settings<a href="#tls-settings" class="hash-link" aria-label="Direct link to TLS settings" title="Direct link to TLS settings">​</a></h2><table><thead><tr><th>Parameter</th><th>Description</th><th>Default</th></tr></thead><tbody><tr><td>tlsProvider</td><td>TLS Provider (JDK or OpenSSL)</td><td>OpenSSL</td></tr><tr><td>tlsProviderFactoryClass</td><td>The path to the class that provides security.</td><td>org.apache.bookkeeper.tls.TLSContextFactory</td></tr><tr><td>tlsClientAuthentication</td><td>Type of security used by server.</td><td>true</td></tr><tr><td>tlsKeyStoreType</td><td>Bookie Keystore type.</td><td>JKS</td></tr><tr><td>tlsKeyStore</td><td>Bookie Keystore location (path).</td><td></td></tr><tr><td>tlsKeyStore</td><td>Bookie Keystore location (path).</td><td></td></tr><tr><td>tlsKeyStorePasswordPath</td><td>Bookie Keystore password path, if the keystore is protected by a password.</td><td></td></tr><tr><td>tlsTrustStoreType</td><td>Bookie Truststore type.</td><td></td></tr><tr><td>tlsTrustStore</td><td>Bookie Truststore location (path).</td><td></td></tr><tr><td>tlsTrustStorePasswordPath</td><td>Bookie Truststore password path, if the truststore is protected by a password.</td><td></td></tr><tr><td>tlsCertificatePath</td><td>Bookie TLS certificate path.</td><td></td></tr></tbody></table><h2 class="anchor anchorWithStickyNavbar_LWe7" id="journal-settings">Journal settings<a href="#journal-settings" class="hash-link" aria-label="Direct link to Journal settings" title="Direct link to Journal settings">​</a></h2><table><thead><tr><th>Parameter</th><th>Description</th><th>Default</th></tr></thead><tbody><tr><td>journalDirectories</td><td>The directories to which Bookkeeper outputs its write-ahead log (WAL). Could define multi directories to store write head logs, separated by &#x27;,&#x27;.<br>For example:<br> journalDirectories=/tmp/bk-journal1,/tmp/bk-journal2<br>If journalDirectories is set, bookies will skip journalDirectory and use this setting directory.<br></td><td>/tmp/bk-journal</td></tr><tr><td>journalDirectory</td><td>@Deprecated since 4.5.0, in favor of using <code>journalDirectories</code>.<br><br>The directory to which Bookkeeper outputs its write-ahead log (WAL).<br></td><td>/tmp/bk-txn</td></tr><tr><td>journalFormatVersionToWrite</td><td>The journal format version to write.<br>Available formats are 1-5:<br> 1: no header<br> 2: a header section was added<br> 3: ledger key was introduced<br> 4: fencing key was introduced<br> 5: expanding header to 512 and padding writes to align sector size configured by <code>journalAlignmentSize</code><br> 6: persisting explicitLac is introduced<br><br>By default, it is <code>6</code>.<br>If you&#x27;d like to disable persisting ExplicitLac, you can set this config to &lt; <code>6</code> and also fileInfoFormatVersionToWrite should be set to 0. If there is mismatch then the serverconfig is considered invalid.<br>You can disable <code>padding-writes</code> by setting journal version back to <code>4</code>. This feature is available in 4.5.0 and onward versions.<br></td><td>6</td></tr><tr><td>journalMaxSizeMB</td><td>Max file size of journal file, in mega bytes. A new journal file will be created when the old one reaches the file size limitation.</td><td>2048</td></tr><tr><td>journalMaxBackups</td><td>Max number of old journal file to kept. Keep a number of old journal files would help data recovery in specia case.</td><td>5</td></tr><tr><td>journalPreAllocSizeMB</td><td>How much space should we pre-allocate at a time in the journal.</td><td>16</td></tr><tr><td>journalWriteBufferSizeKB</td><td>Size of the write buffers used for the journal.</td><td>64</td></tr><tr><td>journalRemoveFromPageCache</td><td>Should we remove pages from page cache after force write</td><td>true</td></tr><tr><td>journalSyncData</td><td>Should the data be fsynced on journal before acknowledgment.<br>By default, data sync is enabled to guarantee durability of writes. Beware - when disabling data sync in the bookie journal<br>might improve the bookie write performance, it will also introduce the possibility of data loss. With no fsync, the journal<br>entries are written in the OS page cache but not flushed to disk. In case of power failure, the affected bookie might lose<br>the unflushed data. If the ledger is replicated to multiple bookies, the chances of data loss are reduced though still present.<br></td><td>true</td></tr><tr><td>journalAdaptiveGroupWrites</td><td>Should we group journal force writes, which optimize group commit for higher throughput.</td><td>true</td></tr><tr><td>journalMaxGroupWaitMSec</td><td>Maximum latency to impose on a journal write to achieve grouping.</td><td>2</td></tr><tr><td>journalBufferedWritesThreshold</td><td>Maximum writes to buffer to achieve grouping.</td><td>524288</td></tr><tr><td>journalFlushWhenQueueEmpty</td><td>If we should flush the journal when journal queue is empty.</td><td>false</td></tr><tr><td>journalAlignmentSize</td><td>All the journal writes and commits should be aligned to given size. If not, zeros will be padded to align to given size.</td><td>512</td></tr><tr><td>journalBufferedEntriesThreshold</td><td>Maximum entries to buffer to impose on a journal write to achieve grouping.</td><td></td></tr><tr><td>journalFlushWhenQueueEmpty</td><td>If we should flush the journal when journal queue is empty.</td><td>false</td></tr><tr><td>journalQueueSize</td><td>Set the size of the journal queue.</td><td>10000</td></tr></tbody></table><h2 class="anchor anchorWithStickyNavbar_LWe7" id="ledger-storage-settings">Ledger storage settings<a href="#ledger-storage-settings" class="hash-link" aria-label="Direct link to Ledger storage settings" title="Direct link to Ledger storage settings">​</a></h2><table><thead><tr><th>Parameter</th><th>Description</th><th>Default</th></tr></thead><tbody><tr><td>ledgerStorageClass</td><td>Ledger storage implementation class<br><br>Options:<br> - org.apache.bookkeeper.bookie.InterleavedLedgerStorage<br> - org.apache.bookkeeper.bookie.SortedLedgerStorage<br> - org.apache.bookkeeper.bookie.storage.ldb.DbLedgerStorage<br></td><td>org.apache.bookkeeper.bookie.SortedLedgerStorage</td></tr><tr><td>sortedLedgerStorageEnabled</td><td>@Deprecated in favor of using <code>ledgerStorageClass</code><br><br>Whether sorted-ledger storage enabled (default true)<br></td><td>true</td></tr><tr><td>ledgerDirectories</td><td>The directory to which Bookkeeper outputs ledger snapshots. You can define multiple directories to store snapshots separated by a comma, for example <code>/tmp/data-dir1,/tmp/data-dir2</code>.</td><td>/tmp/bk-data</td></tr><tr><td>indexDirectories</td><td>The directories in which index files are stored. If not specified, the value of <a href="#ledgerDirectories"><code>ledgerDirectories</code></a> will be used.</td><td>/tmp/bk-data</td></tr><tr><td>minUsableSizeForIndexFileCreation</td><td>Minimum safe usable size to be available in index directory for bookie to create index file while replaying journal at the time of bookie start in readonly mode (in bytes)</td><td>1073741824</td></tr><tr><td>minUsableSizeForEntryLogCreation</td><td>Minimum safe usable size to be available in ledger directory for bookie to create entry log files (in bytes).<br>This parameter allows creating entry log files when there are enough disk spaces, even when<br>the bookie is running at readonly mode because of the disk usage is exceeding <code>diskUsageThreshold</code>.<br>Because compaction, journal replays can still write data to disks when a bookie is readonly.<br></td><td>1.2 * <code>logSizeLimit</code></td></tr><tr><td>minUsableSizeForHighPriorityWrites</td><td>Minimum safe usable size to be available in ledger directory for bookie to accept high priority writes even it is in readonly mode.<br></td><td>1.2 * <code>logSizeLimit</code></td></tr><tr><td>flushInterval</td><td>When entryLogPerLedgerEnabled is enabled, checkpoint doesn&#x27;t happens when a new active entrylog is created / previous one is rolled over. Instead SyncThread checkpoints periodically with &#x27;flushInterval&#x27; delay (in milliseconds) in between executions. Checkpoint flushes both ledger entryLogs and ledger index pages to disk. Flushing entrylog and index files will introduce much random disk I/O. If separating journal dir and ledger dirs each on different devices, flushing would not affect performance. But if putting journal dir and ledger dirs on same device, performance degrade significantly on too frequent flushing. You can consider increment flush interval to get better performance, but you need to pay more time on bookie server restart after failure. This config is used only when entryLogPerLedgerEnabled is enabled.</td><td>10000</td></tr><tr><td>allowStorageExpansion</td><td>Allow the expansion of bookie storage capacity. Newly added ledger and index directories must be empty.</td><td>false</td></tr></tbody></table><h2 class="anchor anchorWithStickyNavbar_LWe7" id="default-entry-log-settings">Default Entry log settings<a href="#default-entry-log-settings" class="hash-link" aria-label="Direct link to Default Entry log settings" title="Direct link to Default Entry log settings">​</a></h2><table><thead><tr><th>Parameter</th><th>Description</th><th>Default</th></tr></thead><tbody><tr><td>logSizeLimit</td><td>Max file size of entry logger, in bytes. A new entry log file will be created when the old one reaches the file size limitation.</td><td>2147483648</td></tr><tr><td>entryLogFilePreallocationEnabled</td><td>Enable/Disable entry logger preallocation</td><td>true</td></tr><tr><td>flushEntrylogBytes</td><td>Entry log flush interval, in bytes. Setting this to 0 or less disables this feature and makes flush happen on log rotation. Flushing in smaller chunks but more frequently reduces spikes in disk I/O. Flushing too frequently may negatively affect performance.</td><td></td></tr><tr><td>readBufferSizeBytes</td><td>The capacity allocated for <a href="https://bookkeeper.apache.org//docs/latest/api/javadoc/org/apache/bookkeeper/bookie/BufferedReadChannel" target="_blank" rel="noopener noreferrer"><code>BufferedReadChannel</code></a>s, in bytes.</td><td>512</td></tr><tr><td>writeBufferSizeBytes</td><td>The number of bytes used as capacity for the write buffer.</td><td>65536</td></tr><tr><td>entryLogPerLedgerEnabled</td><td>Specifies if entryLog per ledger is enabled/disabled. If it is enabled, then there would be a active entrylog for each ledger. It would be ideal to enable this feature if the underlying storage device has multiple DiskPartitions or SSD and if in a given moment, entries of fewer number of active ledgers are written to the bookie.</td><td></td></tr><tr><td>entrylogMapAccessExpiryTimeInSeconds</td><td>config specifying if the entrylog per ledger is enabled, then the amount of time EntryLogManagerForEntryLogPerLedger should wait for closing the entrylog file after the last addEntry call for that ledger, if explicit writeclose for that ledger is not received.</td><td>300</td></tr><tr><td>maximumNumberOfActiveEntryLogs</td><td>in entryLogPerLedger feature, this specifies the maximum number of entrylogs that can be active at a given point in time. If there are more number of active entryLogs then the maximumNumberOfActiveEntryLogs then the entrylog will be evicted from the cache.</td><td>500</td></tr><tr><td>entryLogPerLedgerCounterLimitsMultFactor</td><td>in EntryLogManagerForEntryLogPerLedger, this config value specifies the metrics cache size limits in multiples of entrylogMap cache size limits.</td><td>10</td></tr></tbody></table><h2 class="anchor anchorWithStickyNavbar_LWe7" id="directio-entry-log-settings-only-support-dbledgerstorage">DirectIO Entry log settings (Only support DbLedgerStorage)<a href="#directio-entry-log-settings-only-support-dbledgerstorage" class="hash-link" aria-label="Direct link to DirectIO Entry log settings (Only support DbLedgerStorage)" title="Direct link to DirectIO Entry log settings (Only support DbLedgerStorage)">​</a></h2><table><thead><tr><th>Parameter</th><th>Description</th><th>Default</th></tr></thead><tbody><tr><td>dbStorage_directIOEntryLogger</td><td>Enable/Disable directIO entry logger.</td><td>false</td></tr><tr><td>dbStorage_directIOEntryLoggerTotalWriteBufferSizeMB</td><td>Total write buffer size in megabytes for all the entry directories. The write buffer size of each entry directory needs to be divided by the number of entry directories.</td><td>1/8 of max direct memory</td></tr><tr><td>dbStorage_directIOEntryLoggerTotalReadBufferSizeMB</td><td>Total read buffer size in megabytes for all the entry directories. The read buffer size of each entry directory needs to be divided by the number of entry directories.</td><td>1/8 of max direct memory</td></tr><tr><td>dbStorage_directIOEntryLoggerReadBufferSizeMB</td><td>The buffer size, in megabytes, for each direct reader to read data from the entry log file. An entry log file will have only one direct reader.</td><td>8</td></tr><tr><td>dbStorage_directIOEntryLoggerMaxFdCacheTimeSeconds</td><td>Maximum cache time after a direct reader is accessed.</td><td>300</td></tr><tr><td>logSizeLimit</td><td>Max file size of entry logger, in bytes. A new entry log file will be created when the old one reaches the file size limitation.</td><td>2147483648</td></tr></tbody></table><h2 class="anchor anchorWithStickyNavbar_LWe7" id="entry-log-compaction-settings">Entry log compaction settings<a href="#entry-log-compaction-settings" class="hash-link" aria-label="Direct link to Entry log compaction settings" title="Direct link to Entry log compaction settings">​</a></h2><table><thead><tr><th>Parameter</th><th>Description</th><th>Default</th></tr></thead><tbody><tr><td>isThrottleByBytes</td><td>Throttle compaction by bytes or by entries.</td><td>false</td></tr><tr><td>compactionRate</td><td>The rate at which compaction will read entries. The unit is adds per second.</td><td>1000</td></tr><tr><td>compactionRateByEntries</td><td>Set the rate at which compaction will read entries. The unit is adds per second.</td><td>1000</td></tr><tr><td>compactionRateByBytes</td><td>Set the rate at which compaction will read entries. The unit is bytes added per second.</td><td>1000000</td></tr><tr><td>compactionMaxOutstandingRequests</td><td>Set the maximum number of entries which can be compacted without flushing. When compacting, the entries are written to the entrylog and the new offsets are cached in memory. Once the entrylog is flushed the index is updated with the new offsets. This parameter controls the number of entries added to the entrylog before a flush is forced. A higher value for this parameter means more memory will be used for offsets. Each offset consists of 3 longs. This parameter should <em>not</em> be modified unless you know what you&#x27;re doing.</td><td>100000</td></tr><tr><td>minorCompactionThreshold</td><td>Threshold of minor compaction. For those entry log files whose remaining size percentage reaches below this threshold will be compacted in a minor compaction. If it is set to less than zero, the minor compaction is disabled.</td><td>0.2</td></tr><tr><td>majorCompactionThreshold</td><td>Threshold of major compaction. For those entry log files whose remaining size percentage reaches below this threshold will be compacted in a major compaction. Those entry log files whose remaining size percentage is still higher than the threshold will never be compacted. If it is set to less than zero, the minor compaction is disabled.</td><td>0.8</td></tr><tr><td>minorCompactionInterval</td><td>Interval to run minor compaction, in seconds. If it is set to less than zero, the minor compaction is disabled.</td><td>3600</td></tr><tr><td>majorCompactionInterval</td><td>Interval to run major compaction, in seconds. If it is set to less than zero, the major compaction is disabled.</td><td>86400</td></tr><tr><td>minorCompactionMaxTimeMillis</td><td>Maximum milliseconds to run minor Compaction.</td><td>-1 to run indefinitely.</td></tr><tr><td>majorCompactionMaxTimeMillis</td><td>Maximum milliseconds to run major Compaction.</td><td>-1 to run indefinitely.</td></tr><tr><td>useTransactionalCompaction</td><td>Flag to enable/disable transactional compaction. If it is set to true, it will use transactional compaction, which uses<br>new entry log files to store entries after compaction; otherwise, it will use normal compaction, which shares same entry<br>log file with normal add operations.<br></td><td>false</td></tr></tbody></table><h2 class="anchor anchorWithStickyNavbar_LWe7" id="garbage-collection-settings">Garbage collection settings<a href="#garbage-collection-settings" class="hash-link" aria-label="Direct link to Garbage collection settings" title="Direct link to Garbage collection settings">​</a></h2><table><thead><tr><th>Parameter</th><th>Description</th><th>Default</th></tr></thead><tbody><tr><td>gcWaitTime</td><td>How long the interval to trigger next garbage collection, in milliseconds. Since garbage collection is running in background, too frequent gc will heart performance. It is better to give a higher number of gc interval if there is enough disk capacity.</td><td>1000</td></tr><tr><td>gcOverreplicatedLedgerWaitTime</td><td>How long the interval to trigger next garbage collection of overreplicated ledgers, in milliseconds. This should not be run very frequently since we read the metadata for all the ledgers on the bookie from zk.</td><td>86400000</td></tr><tr><td>gcOverreplicatedLedgerMaxConcurrentRequests</td><td>Max number of concurrent requests in garbage collection of overreplicated ledgers.</td><td>1000</td></tr><tr><td>isForceGCAllowWhenNoSpace</td><td>Whether force compaction is allowed when the disk is full or almost full. Forcing GC may get some space back, but may also fill up disk space more quickly. This is because new log files are created before GC, while old garbage log files are deleted after GC.</td><td>false</td></tr><tr><td>verifyMetadataOnGC</td><td>Whether the bookie should double check if a ledger exists in metadata service prior to gc.</td><td>false</td></tr></tbody></table><h2 class="anchor anchorWithStickyNavbar_LWe7" id="disk-utilization">Disk utilization<a href="#disk-utilization" class="hash-link" aria-label="Direct link to Disk utilization" title="Direct link to Disk utilization">​</a></h2><table><thead><tr><th>Parameter</th><th>Description</th><th>Default</th></tr></thead><tbody><tr><td>diskUsageThreshold</td><td>For each ledger dir, maximum disk space which can be used. Default is 0.95f. i.e. 95% of disk can be used at most after which nothing will be written to that partition. If all ledger dir partions are full, then bookie will turn to readonly mode if &#x27;readOnlyModeEnabled=true&#x27; is set, else it will shutdown. Valid values should be in between 0 and 1 (exclusive).<br></td><td>0.95</td></tr><tr><td>diskUsageWarnThreshold</td><td>The disk free space low water mark threshold. Disk is considered full when usage threshold is exceeded. Disk returns back to non-full state when usage is below low water mark threshold. This prevents it from going back and forth between these states frequently when concurrent writes and compaction are happening. This also prevent bookie from switching frequently between read-only and read-writes states in the same cases.</td><td>0.95</td></tr><tr><td>diskUsageLwmThreshold</td><td>Set the disk free space low water mark threshold. Disk is considered full when usage threshold is exceeded. Disk returns back to non-full state when usage is below low water mark threshold. This prevents it from going back and forth between these states frequently when concurrent writes and compaction are happening. This also prevent bookie from switching frequently between read-only and read-writes states in the same cases.<br></td><td>0.9</td></tr><tr><td>diskCheckInterval</td><td>Disk check interval in milliseconds. Interval to check the ledger dirs usage.</td><td>10000</td></tr></tbody></table><h2 class="anchor anchorWithStickyNavbar_LWe7" id="sorted-ledger-storage-settings">Sorted Ledger Storage Settings<a href="#sorted-ledger-storage-settings" class="hash-link" aria-label="Direct link to Sorted Ledger Storage Settings" title="Direct link to Sorted Ledger Storage Settings">​</a></h2><table><thead><tr><th>Parameter</th><th>Description</th><th>Default</th></tr></thead><tbody><tr><td>skipListSizeLimit</td><td>The skip list data size limitation (default 64MB) in EntryMemTable</td><td>67108864</td></tr><tr><td>skipListArenaChunkSize</td><td>The number of bytes we should use as chunk allocation for org.apache.bookkeeper.bookie.SkipListArena</td><td>4194304</td></tr><tr><td>skipListArenaMaxAllocSize</td><td>The max size we should allocate from the skiplist arena. Allocations larger than this should be allocated directly by the VM to avoid fragmentation.</td><td>131072</td></tr><tr><td>openFileLimit</td><td>Max number of ledger index files could be opened in bookie server. If number of ledger index files reaches this limitation, bookie server started to swap some ledgers from memory to disk. Too frequent swap will affect performance. You can tune this number to gain performance according your requirements.<br></td><td>20000</td></tr><tr><td>fileInfoCacheInitialCapacity</td><td>The minimum total size of the internal file info cache table. Providing a large enough estimate at construction time avoids the need for expensive resizing operations later,<br>but setting this value unnecessarily high wastes memory. The default value is <code>1/4</code> of <code>openFileLimit</code> if openFileLimit is positive, otherwise it is 64.<br></td><td></td></tr><tr><td>fileInfoMaxIdleTime</td><td>The max idle time allowed for an open file info existed in the file info cache. If the file info is idle for a long time, exceed the given time period. The file info will be<br>evicted and closed. If the value is zero or negative, the file info is evicted only when opened files reached <code>openFileLimit</code>.<br></td><td></td></tr><tr><td>fileInfoFormatVersionToWrite</td><td>The fileinfo format version to write.<br>Available formats are 0-1:<br> 0: Initial version<br> 1: persisting explicitLac is introduced<br><br>By default, it is <code>1</code>. If you&#x27;d like to disable persisting ExplicitLac, you can set this config to 0 and also journalFormatVersionToWrite should be set to &lt; 6. If there is mismatch then the serverconfig is considered invalid.<br></td><td>1</td></tr><tr><td>pageSize</td><td>Size of a index page in ledger cache, in bytes. A larger index page can improve performance writing page to disk, which is efficent when you have small number of ledgers and these ledgers have similar number of entries. If you have large number of ledgers and each ledger has fewer entries, smaller index page would improve memory usage.<br></td><td>8192</td></tr><tr><td>pageLimit</td><td>How many index pages provided in ledger cache. If number of index pages reaches this limitation, bookie server starts to swap some ledgers from memory to disk. You can increment this value when you found swap became more frequent. But make sure pageLimit*pageSize should not more than JVM max memory limitation, otherwise you would got OutOfMemoryException. In general, incrementing pageLimit, using smaller index page would gain bettern performance in lager number of ledgers with fewer entries case. If pageLimit is -1, bookie server will use 1/3 of JVM memory to compute the limitation of number of index pages.<br></td><td>-1</td></tr><tr><td>numOfMemtableFlushThreads</td><td>When entryLogPerLedger is enabled SortedLedgerStorage flushes entries from memTable using OrderedExecutor having numOfMemtableFlushThreads number of threads.<br></td><td>8</td></tr></tbody></table><h2 class="anchor anchorWithStickyNavbar_LWe7" id="db-ledger-storage-settings">DB Ledger Storage Settings<a href="#db-ledger-storage-settings" class="hash-link" aria-label="Direct link to DB Ledger Storage Settings" title="Direct link to DB Ledger Storage Settings">​</a></h2><table><thead><tr><th>Parameter</th><th>Description</th><th>Default</th></tr></thead><tbody><tr><td>dbStorage_writeCacheMaxSizeMb</td><td>Size of write cache. Memory is allocated from JVM direct memory. Write cache is used for buffer entries before flushing into the entry log. For good performance, it should be big enough to hold a substantial amount of entries in the flush interval.</td><td>25% of the available direct memory</td></tr><tr><td>dbStorage_readAheadCacheMaxSizeMb</td><td>Size of read cache. Memory is allocated from JVM direct memory. The read cache is pre-filled doing read-ahead whenever a cache miss happens.</td><td>25% of the available direct memroy</td></tr><tr><td>dbStorage_readAheadCacheBatchSize</td><td>How many entries to pre-fill in cache after a read cache miss</td><td>100</td></tr><tr><td>dbStorage_rocksDB_blockSize</td><td>Size of RocksDB block-cache. RocksDB is used for storing ledger indexes.<br>For best performance, this cache should be big enough to hold a significant portion of the index database which can reach ~2GB in some cases.<br></td><td>268435456</td></tr><tr><td>dbStorage_rocksDB_writeBufferSizeMB</td><td>Size of RocksDB write buffer. RocksDB is used for storing ledger indexes.<br></td><td>64</td></tr><tr><td>dbStorage_rocksDB_sstSizeInMB</td><td>Size of RocksDB sst file size in MB. RocksDB is used for storing ledger indexes.<br></td><td>64</td></tr><tr><td>dbStorage_rocksDB_blockSize</td><td></td><td>65536</td></tr><tr><td>dbStorage_rocksDB_bloomFilterBitsPerKey</td><td></td><td>10</td></tr><tr><td>dbStorage_rocksDB_numLevels</td><td></td><td>-1</td></tr><tr><td>dbStorage_rocksDB_numFilesInLevel0</td><td></td><td>10</td></tr><tr><td>dbStorage_rocksDB_maxSizeInLevel1MB</td><td></td><td>256</td></tr></tbody></table><blockquote><p>Note:
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navbar__brand" href="/"><div class="navbar__logo"><img src="/img/bk-logo.svg" alt="Apache Bookkeeper" class="themedImage_ToTc themedImage--light_HNdA"><img src="/img/bk-logo.svg" alt="Apache Bookkeeper" class="themedImage_ToTc themedImage--dark_i4oU"></div><b class="navbar__title text--truncate">Apache BookKeeper</b></a><a aria-current="page" class="navbar__item navbar__link navbar__link--active" href="/docs/overview/">Documentation</a><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Community</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/community/mailing-lists">Mailing lists</a></li><li><a class="dropdown__link" href="/community/slack">Slack</a></li><li><a href="https://github.com/apache/bookkeeper/issues" target="_blank" rel="noopener noreferrer" class="dropdown__link">Github issues<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a class="dropdown__link" href="/community/releases">Release management</a></li><li><a class="dropdown__link" href="/community/meeting">Community meetings</a></li><li><a class="dropdown__link" href="/community/contributing">Contribution guide</a></li><li><a class="dropdown__link" href="/community/coding-guide">Coding guide</a></li><li><a class="dropdown__link" href="/community/testing">Testing guide</a></li><li><a class="dropdown__link" href="/community/issue-report">Issue report guide</a></li><li><a class="dropdown__link" href="/community/release-guide">Release guide</a></li><li><a class="dropdown__link" href="/community/presentations">Presentations</a></li><li><a class="dropdown__link" href="/community/bookkeeper-proposals">BookKeeper proposals (BP)</a></li></ul></div><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Project</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/project/who">Who are we?</a></li><li><a class="dropdown__link" href="/project/bylaws">Bylaws</a></li><li><a href="https://apache.org/licenses" target="_blank" rel="noopener noreferrer" class="dropdown__link">License<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a class="dropdown__link" href="/project/privacy">Privacy policy</a></li><li><a href="https://www.apache.org/foundation/sponsorship.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Sponsorship<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a href="https://www.apache.org/foundation/thanks.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Thanks<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div></div><div class="navbar__items navbar__items--right"><div class="navbar__item dropdown dropdown--hoverable dropdown--right"><a class="navbar__link" aria-haspopup="true" aria-expanded="false" role="button" href="/docs/overview/">4.17.0</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/docs/next/reference/config">Next</a></li><li><a aria-current="page" class="dropdown__link dropdown__link--active" href="/docs/reference/config">4.17.0</a></li><li><a class="dropdown__link" href="/docs/4.16.5/reference/config">4.16.5</a></li><li><a class="dropdown__link" href="/docs/4.15.5/reference/config">4.15.5</a></li><li><a class="dropdown__link" href="/docs/4.14.8/reference/config">4.14.8</a></li><li><a class="dropdown__link" href="/docs/4.13.0/reference/config">4.13.0</a></li><li><a class="dropdown__link" href="/docs/4.12.1/reference/config">4.12.1</a></li><li><a class="dropdown__link" href="/docs/4.11.1/reference/config">4.11.1</a></li><li><a class="dropdown__link" href="/docs/4.10.0/reference/config">4.10.0</a></li><li><a class="dropdown__link" href="/docs/4.9.2/reference/config">4.9.2</a></li><li><a class="dropdown__link" href="/docs/4.8.2/reference/config">4.8.2</a></li><li><a class="dropdown__link" href="/docs/4.7.3/reference/config">4.7.3</a></li><li><a class="dropdown__link" href="/docs/4.6.2/reference/config">4.6.2</a></li><li><a class="dropdown__link" href="/docs/4.5.1/reference/config">4.5.1</a></li></ul></div><a class="navbar__item navbar__link" href="/releases">Download</a><div class="toggle_vylO colorModeToggle_DEke"><button class="clean-btn toggleButton_gllP toggleButtonDisabled_aARS" type="button" disabled="" title="Switch between dark and light mode (currently light mode)" aria-label="Switch between dark and light mode (currently light mode)" aria-live="polite"><svg viewBox="0 0 24 24" width="24" height="24" class="lightToggleIcon_pyhR"><path fill="currentColor" d="M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"></path></svg><svg viewBox="0 0 24 24" width="24" height="24" class="darkToggleIcon_wfgR"><path fill="currentColor" d="M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"></path></svg></button></div><div class="searchBox_ZlJk"></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div></nav><div id="docusaurus_skipToContent_fallback" class="main-wrapper mainWrapper_z2l0 docsWrapper_BCFX"><button aria-label="Scroll back to top" class="clean-btn theme-back-to-top-button backToTopButton_sjWU" type="button"></button><div class="docPage__5DB"><aside class="theme-doc-sidebar-container docSidebarContainer_b6E3"><div class="sidebarViewport_Xe31"><div class="sidebar_njMd"><nav aria-label="Docs sidebar" class="menu thin-scrollbar menu_SIkG"><ul class="theme-doc-sidebar-menu menu__list"><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-1 menu__list-item"><a class="menu__link" href="/docs/overview/">Overview</a></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/getting-started/installation">Getting started</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/deployment/manual">Deployment</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/admin/bookies">Administration</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/api/overview">API</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/security/overview">Security</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/development/protocol">Development</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret menu__link--active" aria-expanded="true" href="/docs/reference/config">Reference</a></div><ul style="display:block;overflow:visible;height:auto" class="menu__list"><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link menu__link--active" aria-current="page" tabindex="0" href="/docs/reference/config">Configuration</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/reference/cli">Command-line tools</a></li></ul></li></ul></nav></div></div></aside><main class="docMainContainer_gTbr"><div class="container padding-top--md padding-bottom--lg"><div class="row"><div class="col docItemCol_VOVn"><div class="docItemContainer_Djhp"><article><span class="theme-doc-version-badge badge badge--secondary">Version: 4.17.0</span><div class="tocCollapsible_ETCw theme-doc-toc-mobile tocMobile_ITEo"><button type="button" class="clean-btn tocCollapsibleButton_TO0P">On this page</button></div><div class="theme-doc-markdown markdown"><header><h1>BookKeeper configuration</h1></header><p>The table below lists parameters that you can set to configure bookies. All configuration takes place in the <code>bk_server.conf</code> file in the <code>bookkeeper-server/conf</code> directory of your <a href="/docs/getting-started/installation">BookKeeper installation</a>.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="server-parameters">Server parameters<a href="#server-parameters" class="hash-link" aria-label="Direct link to Server parameters" title="Direct link to Server parameters">​</a></h2><table><thead><tr><th>Parameter</th><th>Description</th><th>Default</th></tr></thead><tbody><tr><td>bookiePort</td><td>The port that the bookie server listens on.</td><td>3181</td></tr><tr><td>allowMultipleDirsUnderSameDiskPartition</td><td>Configure the bookie to allow/disallow multiple ledger/index/journal directories in the same filesystem disk partition.</td><td>true</td></tr><tr><td>listeningInterface</td><td>The network interface that the bookie should listen on. If not set, the bookie will listen on all interfaces.</td><td>eth0</td></tr><tr><td>advertisedAddress</td><td>Configure a specific hostname or IP address that the bookie should use to advertise itself to<br>clients. If not set, bookie will advertised its own IP address or hostname, depending on the<br><code>listeningInterface</code> and <code>useHostNameAsBookieID</code> settings.<br></td><td>eth0</td></tr><tr><td>allowLoopback</td><td>Whether the bookie is allowed to use a loopback interface as its primary<br>interface (the interface it uses to establish its identity). By default, loopback interfaces are <em>not</em> allowed as the primary interface.<br><br>Using a loopback interface as the primary interface usually indicates a configuration error. It&#x27;s fairly common in some VPS setups, for example, to not configure a hostname or to have the hostname resolve to 127.0.0.1. If this is the case, then all bookies in the cluster will establish their identities as 127.0.0.1:3181, and only one will be able to join the cluster. For VPSs configured like this, you should explicitly set the listening interface.<br></td><td>false</td></tr><tr><td>useHostNameAsBookieID</td><td>Whether the bookie should use its hostname to register with the ZooKeeper coordination service. When <code>false</code>, the bookie will use its IP address for the registration.</td><td>false</td></tr><tr><td>useShortHostName</td><td>Whether the bookie should use short hostname or <a href="https://en.wikipedia.org/wiki/Fully_qualified_domain_name" target="_blank" rel="noopener noreferrer">FQDN</a> hostname for registration and ledger metadata when <code>useHostNameAsBookieID</code> is enabled.</td><td>false</td></tr><tr><td>allowEphemeralPorts</td><td>Whether the bookie is allowed to use an ephemeral port (port 0) as its server port. By default, an ephemeral port is not allowed. Using an ephemeral port as the service port usually indicates a configuration error. However, in unit tests, using an ephemeral port will address port conflict problems and allow running tests in parallel.</td><td>false</td></tr><tr><td>enableLocalTransport</td><td>Whether allow the bookie to listen for BookKeeper clients executed on the local JVM.</td><td>false</td></tr><tr><td>disableServerSocketBind</td><td>Whether allow the bookie to disable bind on network interfaces, this bookie will be available only to BookKeeper clients executed on the local JVM.</td><td>false</td></tr><tr><td>bookieDeathWatchInterval</td><td>Interval to watch whether bookie is dead or not, in milliseconds.</td><td>1000</td></tr><tr><td>extraServerComponents</td><td>Configure a list of extra server components to enable and load on a bookie server. This provides a plugin mechanism to run extra server components along with a bookie server.</td><td></td></tr><tr><td>ignoreExtraServerComponentsStartupFailures</td><td>Whether the bookie should ignore startup failures on loading server components specified by <code>extraServerComponents</code>.</td><td>false</td></tr></tbody></table><h2 class="anchor anchorWithStickyNavbar_LWe7" id="worker-thread-settings">Worker thread settings<a href="#worker-thread-settings" class="hash-link" aria-label="Direct link to Worker thread settings" title="Direct link to Worker thread settings">​</a></h2><table><thead><tr><th>Parameter</th><th>Description</th><th>Default</th></tr></thead><tbody><tr><td>numAddWorkerThreads</td><td>The number of threads that handle write requests. if zero, writes are handled by <a href="//netty.io/wiki/thread-model.html" target="_blank" rel="noopener noreferrer">Netty threads</a> directly.</td><td>1</td></tr><tr><td>numReadWorkerThreads</td><td>The number of threads that handle read requests. If zero, reads are handled by <a href="//netty.io/wiki/thread-model.html" target="_blank" rel="noopener noreferrer">Netty threads</a> directly.</td><td>8</td></tr><tr><td>numLongPollWorkerThreads</td><td>The number of threads that handle long poll requests. If zero, long poll requests are handled by <a href="//netty.io/wiki/thread-model.html" target="_blank" rel="noopener noreferrer">Netty threads</a> directly.</td><td></td></tr><tr><td>numJournalCallbackThreads</td><td>The number of threads that handle journal callbacks. If zero, journal callbacks are executed directly on force write threads.</td><td>1</td></tr><tr><td>numHighPriorityWorkerThreads</td><td>The number of threads that should be used for high priority requests (i.e. recovery reads and adds, and fencing). If zero, reads are handled by <a href="//netty.io/wiki/thread-model.html" target="_blank" rel="noopener noreferrer">Netty threads</a> directly.</td><td>8</td></tr><tr><td>maxPendingAddRequestsPerThread</td><td>If read worker threads are enabled, limit the number of pending requests, to avoid the executor queue to grow indefinitely. If zero or negative, the number of pending requests is unlimited.</td><td>10000</td></tr><tr><td>maxPendingReadRequestsPerThread</td><td>If add worker threads are enabled, limit the number of pending requests, to avoid the executor queue to grow indefinitely. If zero or negative, the number of pending requests is unlimited.</td><td>10000</td></tr><tr><td>enableBusyWait</td><td>Option to enable busy-wait settings. Default is false.<br>WARNING: This option will enable spin-waiting on executors and IO threads in order to reduce latency during<br>context switches. The spinning will consume 100% CPU even when bookie is not doing any work. It is recommended to<br>reduce the number of threads in the main workers pool and Netty event loop to only have few CPU cores busy.<br></td><td></td></tr></tbody></table><h2 class="anchor anchorWithStickyNavbar_LWe7" id="long-poll-settings">Long poll settings<a href="#long-poll-settings" class="hash-link" aria-label="Direct link to Long poll settings" title="Direct link to Long poll settings">​</a></h2><table><thead><tr><th>Parameter</th><th>Description</th><th>Default</th></tr></thead><tbody><tr><td>requestTimerTickDurationMs</td><td>The tick duration for long poll request timer, in milliseconds. See <a href="//netty.io/4.1/api/io/netty/util/HashedWheelTimer.html" target="_blank" rel="noopener noreferrer">HashedWheelTimer</a> for more details.</td><td>10</td></tr><tr><td>requestTimerNumTicks</td><td>The number of ticks per wheel for long poll request timer. See <a href="//netty.io/4.1/api/io/netty/util/HashedWheelTimer.html" target="_blank" rel="noopener noreferrer">HashedWheelTimer</a> for more details.</td><td>1024</td></tr></tbody></table><h2 class="anchor anchorWithStickyNavbar_LWe7" id="read-only-mode-support">Read-only mode support<a href="#read-only-mode-support" class="hash-link" aria-label="Direct link to Read-only mode support" title="Direct link to Read-only mode support">​</a></h2><table><thead><tr><th>Parameter</th><th>Description</th><th>Default</th></tr></thead><tbody><tr><td>readOnlyModeEnabled</td><td>If all ledger directories configured are full, then support only read requests for clients. If &quot;readOnlyModeEnabled=true&quot; then on all ledger disks full, bookie will be converted to read-only mode and serve only read requests. Otherwise the bookie will be shutdown. By default, this will be enabled.</td><td>true</td></tr><tr><td>forceReadOnlyBookie</td><td>Whether the bookie is force started in read only mode or not.</td><td>false</td></tr><tr><td>persistBookieStatusEnabled</td><td>Persist the bookie status locally on the disks. So the bookies can keep their status upon restarts.</td><td>false</td></tr><tr><td>readOnlyModeOnAnyDiskFullEnabled</td><td>If any ledger directories configured are full, then support only read requests for clients. If &quot;readOnlyModeOnAnyDiskFullEnabled=true&quot; then on any ledger disks full, bookie will be converted to read-only mode and serve only read requests. When all disks recovered, the bookie will be converted to read-write mode.Otherwise it will obey the <code>readOnlyModeEnabled</code> behavior. By default, this will be disabled.</td><td>false</td></tr></tbody></table><h2 class="anchor anchorWithStickyNavbar_LWe7" id="netty-server-settings">Netty server settings<a href="#netty-server-settings" class="hash-link" aria-label="Direct link to Netty server settings" title="Direct link to Netty server settings">​</a></h2><table><thead><tr><th>Parameter</th><th>Description</th><th>Default</th></tr></thead><tbody><tr><td>serverTcpNoDelay</td><td>This settings is used to enabled/disabled Nagle&#x27;s algorithm, which is a means of improving the efficiency of TCP/IP networks by reducing the number of packets that need to be sent over the network.<br><br>If you are sending many small messages, such that more than one can fit in a single IP packet, setting server.tcpnodelay to false to enable Nagle algorithm can provide better performance.<br></td><td>true</td></tr><tr><td>serverSockKeepalive</td><td>This setting is used to send keep-alive messages on connection-oriented sockets.</td><td>true</td></tr><tr><td>serverTcpLinger</td><td>The socket linger timeout on close. When enabled, a close or shutdown will not return until all queued messages for the socket have been successfully sent or the linger timeout has been reached. Otherwise, the call returns immediately and the closing is done in the background.</td><td></td></tr><tr><td>byteBufAllocatorSizeInitial</td><td>The Recv ByteBuf allocator initial buf size.</td><td>65536</td></tr><tr><td>byteBufAllocatorSizeMin</td><td>The Recv ByteBuf allocator min buf size.</td><td>65536</td></tr><tr><td>byteBufAllocatorSizeMax</td><td>The Recv ByteBuf allocator max buf size.</td><td>1048576</td></tr><tr><td>nettyMaxFrameSizeBytes</td><td>The maximum netty frame size in bytes. Any message received larger than this will be rejected, so when the client-side attempt to send more than the default size bytes, it should set up the corresponding parameter <code>setNettyMaxFrameSizeBytes(int maxSize)</code>, pay attention to the parameter should be less than the value of server-side.</td><td>5242880</td></tr></tbody></table><h2 class="anchor anchorWithStickyNavbar_LWe7" id="http-server-settings">Http server settings<a href="#http-server-settings" class="hash-link" aria-label="Direct link to Http server settings" title="Direct link to Http server settings">​</a></h2><table><thead><tr><th>Parameter</th><th>Description</th><th>Default</th></tr></thead><tbody><tr><td>httpServerEnabled</td><td>The flag enables/disables starting the admin http server.</td><td>false</td></tr><tr><td>httpServerPort</td><td>The http server port to listen on if <code>httpServerEnabled</code> is set to true.</td><td>8080</td></tr><tr><td>httpServerHost</td><td>The http server host to listen on if <code>httpServerEnabled</code> is set to true.</td><td>0.0.0.0</td></tr></tbody></table><h2 class="anchor anchorWithStickyNavbar_LWe7" id="security-settings">Security settings<a href="#security-settings" class="hash-link" aria-label="Direct link to Security settings" title="Direct link to Security settings">​</a></h2><table><thead><tr><th>Parameter</th><th>Description</th><th>Default</th></tr></thead><tbody><tr><td>bookieAuthProviderFactoryClass</td><td>The bookie authentication provider factory class name. If this is null, no authentication will take place.</td><td></td></tr><tr><td>permittedStartupUsers</td><td>The list of users are permitted to run the bookie process. Any users can run the bookie process if it is not set.<br><br>Example settings - &quot;permittedStartupUsers=user1,user2,user3&quot;<br></td><td></td></tr></tbody></table><h2 class="anchor anchorWithStickyNavbar_LWe7" id="tls-settings">TLS settings<a href="#tls-settings" class="hash-link" aria-label="Direct link to TLS settings" title="Direct link to TLS settings">​</a></h2><table><thead><tr><th>Parameter</th><th>Description</th><th>Default</th></tr></thead><tbody><tr><td>tlsProvider</td><td>TLS Provider (JDK or OpenSSL)</td><td>OpenSSL</td></tr><tr><td>tlsProviderFactoryClass</td><td>The path to the class that provides security.</td><td>org.apache.bookkeeper.tls.TLSContextFactory</td></tr><tr><td>tlsClientAuthentication</td><td>Type of security used by server.</td><td>true</td></tr><tr><td>tlsKeyStoreType</td><td>Bookie Keystore type.</td><td>JKS</td></tr><tr><td>tlsKeyStore</td><td>Bookie Keystore location (path).</td><td></td></tr><tr><td>tlsKeyStore</td><td>Bookie Keystore location (path).</td><td></td></tr><tr><td>tlsKeyStorePasswordPath</td><td>Bookie Keystore password path, if the keystore is protected by a password.</td><td></td></tr><tr><td>tlsTrustStoreType</td><td>Bookie Truststore type.</td><td></td></tr><tr><td>tlsTrustStore</td><td>Bookie Truststore location (path).</td><td></td></tr><tr><td>tlsTrustStorePasswordPath</td><td>Bookie Truststore password path, if the truststore is protected by a password.</td><td></td></tr><tr><td>tlsCertificatePath</td><td>Bookie TLS certificate path.</td><td></td></tr></tbody></table><h2 class="anchor anchorWithStickyNavbar_LWe7" id="journal-settings">Journal settings<a href="#journal-settings" class="hash-link" aria-label="Direct link to Journal settings" title="Direct link to Journal settings">​</a></h2><table><thead><tr><th>Parameter</th><th>Description</th><th>Default</th></tr></thead><tbody><tr><td>journalDirectories</td><td>The directories to which Bookkeeper outputs its write-ahead log (WAL). Could define multi directories to store write head logs, separated by &#x27;,&#x27;.<br>For example:<br> journalDirectories=/tmp/bk-journal1,/tmp/bk-journal2<br>If journalDirectories is set, bookies will skip journalDirectory and use this setting directory.<br></td><td>/tmp/bk-journal</td></tr><tr><td>journalDirectory</td><td>@Deprecated since 4.5.0, in favor of using <code>journalDirectories</code>.<br><br>The directory to which Bookkeeper outputs its write-ahead log (WAL).<br></td><td>/tmp/bk-txn</td></tr><tr><td>journalFormatVersionToWrite</td><td>The journal format version to write.<br>Available formats are 1-5:<br> 1: no header<br> 2: a header section was added<br> 3: ledger key was introduced<br> 4: fencing key was introduced<br> 5: expanding header to 512 and padding writes to align sector size configured by <code>journalAlignmentSize</code><br> 6: persisting explicitLac is introduced<br><br>By default, it is <code>6</code>.<br>If you&#x27;d like to disable persisting ExplicitLac, you can set this config to &lt; <code>6</code> and also fileInfoFormatVersionToWrite should be set to 0. If there is mismatch then the serverconfig is considered invalid.<br>You can disable <code>padding-writes</code> by setting journal version back to <code>4</code>. This feature is available in 4.5.0 and onward versions.<br></td><td>6</td></tr><tr><td>journalMaxSizeMB</td><td>Max file size of journal file, in mega bytes. A new journal file will be created when the old one reaches the file size limitation.</td><td>2048</td></tr><tr><td>journalMaxBackups</td><td>Max number of old journal file to kept. Keep a number of old journal files would help data recovery in specia case.</td><td>5</td></tr><tr><td>journalPreAllocSizeMB</td><td>How much space should we pre-allocate at a time in the journal.</td><td>16</td></tr><tr><td>journalWriteBufferSizeKB</td><td>Size of the write buffers used for the journal.</td><td>64</td></tr><tr><td>journalRemoveFromPageCache</td><td>Should we remove pages from page cache after force write</td><td>true</td></tr><tr><td>journalSyncData</td><td>Should the data be fsynced on journal before acknowledgment.<br>By default, data sync is enabled to guarantee durability of writes. Beware - when disabling data sync in the bookie journal<br>might improve the bookie write performance, it will also introduce the possibility of data loss. With no fsync, the journal<br>entries are written in the OS page cache but not flushed to disk. In case of power failure, the affected bookie might lose<br>the unflushed data. If the ledger is replicated to multiple bookies, the chances of data loss are reduced though still present.<br></td><td>true</td></tr><tr><td>journalAdaptiveGroupWrites</td><td>Should we group journal force writes, which optimize group commit for higher throughput.</td><td>true</td></tr><tr><td>journalMaxGroupWaitMSec</td><td>Maximum latency to impose on a journal write to achieve grouping.</td><td>2</td></tr><tr><td>journalBufferedWritesThreshold</td><td>Maximum writes to buffer to achieve grouping.</td><td>524288</td></tr><tr><td>journalFlushWhenQueueEmpty</td><td>If we should flush the journal when journal queue is empty.</td><td>false</td></tr><tr><td>journalAlignmentSize</td><td>All the journal writes and commits should be aligned to given size. If not, zeros will be padded to align to given size.</td><td>512</td></tr><tr><td>journalBufferedEntriesThreshold</td><td>Maximum entries to buffer to impose on a journal write to achieve grouping.</td><td></td></tr><tr><td>journalFlushWhenQueueEmpty</td><td>If we should flush the journal when journal queue is empty.</td><td>false</td></tr><tr><td>journalQueueSize</td><td>Set the size of the journal queue.</td><td>10000</td></tr></tbody></table><h2 class="anchor anchorWithStickyNavbar_LWe7" id="ledger-storage-settings">Ledger storage settings<a href="#ledger-storage-settings" class="hash-link" aria-label="Direct link to Ledger storage settings" title="Direct link to Ledger storage settings">​</a></h2><table><thead><tr><th>Parameter</th><th>Description</th><th>Default</th></tr></thead><tbody><tr><td>ledgerStorageClass</td><td>Ledger storage implementation class<br><br>Options:<br> - org.apache.bookkeeper.bookie.InterleavedLedgerStorage<br> - org.apache.bookkeeper.bookie.SortedLedgerStorage<br> - org.apache.bookkeeper.bookie.storage.ldb.DbLedgerStorage<br></td><td>org.apache.bookkeeper.bookie.SortedLedgerStorage</td></tr><tr><td>sortedLedgerStorageEnabled</td><td>@Deprecated in favor of using <code>ledgerStorageClass</code><br><br>Whether sorted-ledger storage enabled (default true)<br></td><td>true</td></tr><tr><td>ledgerDirectories</td><td>The directory to which Bookkeeper outputs ledger snapshots. You can define multiple directories to store snapshots separated by a comma, for example <code>/tmp/data-dir1,/tmp/data-dir2</code>.</td><td>/tmp/bk-data</td></tr><tr><td>indexDirectories</td><td>The directories in which index files are stored. If not specified, the value of <a href="#ledgerDirectories"><code>ledgerDirectories</code></a> will be used.</td><td>/tmp/bk-data</td></tr><tr><td>minUsableSizeForIndexFileCreation</td><td>Minimum safe usable size to be available in index directory for bookie to create index file while replaying journal at the time of bookie start in readonly mode (in bytes)</td><td>1073741824</td></tr><tr><td>minUsableSizeForEntryLogCreation</td><td>Minimum safe usable size to be available in ledger directory for bookie to create entry log files (in bytes).<br>This parameter allows creating entry log files when there are enough disk spaces, even when<br>the bookie is running at readonly mode because of the disk usage is exceeding <code>diskUsageThreshold</code>.<br>Because compaction, journal replays can still write data to disks when a bookie is readonly.<br></td><td>1.2 * <code>logSizeLimit</code></td></tr><tr><td>minUsableSizeForHighPriorityWrites</td><td>Minimum safe usable size to be available in ledger directory for bookie to accept high priority writes even it is in readonly mode.<br></td><td>1.2 * <code>logSizeLimit</code></td></tr><tr><td>flushInterval</td><td>When entryLogPerLedgerEnabled is enabled, checkpoint doesn&#x27;t happens when a new active entrylog is created / previous one is rolled over. Instead SyncThread checkpoints periodically with &#x27;flushInterval&#x27; delay (in milliseconds) in between executions. Checkpoint flushes both ledger entryLogs and ledger index pages to disk. Flushing entrylog and index files will introduce much random disk I/O. If separating journal dir and ledger dirs each on different devices, flushing would not affect performance. But if putting journal dir and ledger dirs on same device, performance degrade significantly on too frequent flushing. You can consider increment flush interval to get better performance, but you need to pay more time on bookie server restart after failure. This config is used only when entryLogPerLedgerEnabled is enabled.</td><td>10000</td></tr><tr><td>allowStorageExpansion</td><td>Allow the expansion of bookie storage capacity. Newly added ledger and index directories must be empty.</td><td>false</td></tr></tbody></table><h2 class="anchor anchorWithStickyNavbar_LWe7" id="default-entry-log-settings">Default Entry log settings<a href="#default-entry-log-settings" class="hash-link" aria-label="Direct link to Default Entry log settings" title="Direct link to Default Entry log settings">​</a></h2><table><thead><tr><th>Parameter</th><th>Description</th><th>Default</th></tr></thead><tbody><tr><td>logSizeLimit</td><td>Max file size of entry logger, in bytes. A new entry log file will be created when the old one reaches the file size limitation.</td><td>2147483648</td></tr><tr><td>entryLogFilePreallocationEnabled</td><td>Enable/Disable entry logger preallocation</td><td>true</td></tr><tr><td>flushEntrylogBytes</td><td>Entry log flush interval, in bytes. Setting this to 0 or less disables this feature and makes flush happen on log rotation. Flushing in smaller chunks but more frequently reduces spikes in disk I/O. Flushing too frequently may negatively affect performance.</td><td></td></tr><tr><td>readBufferSizeBytes</td><td>The capacity allocated for <a href="https://bookkeeper.apache.org//docs/latest/api/javadoc/org/apache/bookkeeper/bookie/BufferedReadChannel" target="_blank" rel="noopener noreferrer"><code>BufferedReadChannel</code></a>s, in bytes.</td><td>512</td></tr><tr><td>writeBufferSizeBytes</td><td>The number of bytes used as capacity for the write buffer.</td><td>65536</td></tr><tr><td>entryLogPerLedgerEnabled</td><td>Specifies if entryLog per ledger is enabled/disabled. If it is enabled, then there would be a active entrylog for each ledger. It would be ideal to enable this feature if the underlying storage device has multiple DiskPartitions or SSD and if in a given moment, entries of fewer number of active ledgers are written to the bookie.</td><td></td></tr><tr><td>entrylogMapAccessExpiryTimeInSeconds</td><td>config specifying if the entrylog per ledger is enabled, then the amount of time EntryLogManagerForEntryLogPerLedger should wait for closing the entrylog file after the last addEntry call for that ledger, if explicit writeclose for that ledger is not received.</td><td>300</td></tr><tr><td>maximumNumberOfActiveEntryLogs</td><td>in entryLogPerLedger feature, this specifies the maximum number of entrylogs that can be active at a given point in time. If there are more number of active entryLogs then the maximumNumberOfActiveEntryLogs then the entrylog will be evicted from the cache.</td><td>500</td></tr><tr><td>entryLogPerLedgerCounterLimitsMultFactor</td><td>in EntryLogManagerForEntryLogPerLedger, this config value specifies the metrics cache size limits in multiples of entrylogMap cache size limits.</td><td>10</td></tr></tbody></table><h2 class="anchor anchorWithStickyNavbar_LWe7" id="directio-entry-log-settings-only-support-dbledgerstorage">DirectIO Entry log settings (Only support DbLedgerStorage)<a href="#directio-entry-log-settings-only-support-dbledgerstorage" class="hash-link" aria-label="Direct link to DirectIO Entry log settings (Only support DbLedgerStorage)" title="Direct link to DirectIO Entry log settings (Only support DbLedgerStorage)">​</a></h2><table><thead><tr><th>Parameter</th><th>Description</th><th>Default</th></tr></thead><tbody><tr><td>dbStorage_directIOEntryLogger</td><td>Enable/Disable directIO entry logger.</td><td>false</td></tr><tr><td>dbStorage_directIOEntryLoggerTotalWriteBufferSizeMB</td><td>Total write buffer size in megabytes for all the entry directories. The write buffer size of each entry directory needs to be divided by the number of entry directories.</td><td>1/8 of max direct memory</td></tr><tr><td>dbStorage_directIOEntryLoggerTotalReadBufferSizeMB</td><td>Total read buffer size in megabytes for all the entry directories. The read buffer size of each entry directory needs to be divided by the number of entry directories.</td><td>1/8 of max direct memory</td></tr><tr><td>dbStorage_directIOEntryLoggerReadBufferSizeMB</td><td>The buffer size, in megabytes, for each direct reader to read data from the entry log file. An entry log file will have only one direct reader.</td><td>8</td></tr><tr><td>dbStorage_directIOEntryLoggerMaxFdCacheTimeSeconds</td><td>Maximum cache time after a direct reader is accessed.</td><td>300</td></tr><tr><td>logSizeLimit</td><td>Max file size of entry logger, in bytes. A new entry log file will be created when the old one reaches the file size limitation.</td><td>2147483648</td></tr></tbody></table><h2 class="anchor anchorWithStickyNavbar_LWe7" id="entry-log-compaction-settings">Entry log compaction settings<a href="#entry-log-compaction-settings" class="hash-link" aria-label="Direct link to Entry log compaction settings" title="Direct link to Entry log compaction settings">​</a></h2><table><thead><tr><th>Parameter</th><th>Description</th><th>Default</th></tr></thead><tbody><tr><td>isThrottleByBytes</td><td>Throttle compaction by bytes or by entries.</td><td>false</td></tr><tr><td>compactionRate</td><td>The rate at which compaction will read entries. The unit is adds per second.</td><td>1000</td></tr><tr><td>compactionRateByEntries</td><td>Set the rate at which compaction will read entries. The unit is adds per second.</td><td>1000</td></tr><tr><td>compactionRateByBytes</td><td>Set the rate at which compaction will read entries. The unit is bytes added per second.</td><td>1000000</td></tr><tr><td>compactionMaxOutstandingRequests</td><td>Set the maximum number of entries which can be compacted without flushing. When compacting, the entries are written to the entrylog and the new offsets are cached in memory. Once the entrylog is flushed the index is updated with the new offsets. This parameter controls the number of entries added to the entrylog before a flush is forced. A higher value for this parameter means more memory will be used for offsets. Each offset consists of 3 longs. This parameter should <em>not</em> be modified unless you know what you&#x27;re doing.</td><td>100000</td></tr><tr><td>minorCompactionThreshold</td><td>Threshold of minor compaction. For those entry log files whose remaining size percentage reaches below this threshold will be compacted in a minor compaction. If it is set to less than zero, the minor compaction is disabled.</td><td>0.2</td></tr><tr><td>majorCompactionThreshold</td><td>Threshold of major compaction. For those entry log files whose remaining size percentage reaches below this threshold will be compacted in a major compaction. Those entry log files whose remaining size percentage is still higher than the threshold will never be compacted. If it is set to less than zero, the minor compaction is disabled.</td><td>0.8</td></tr><tr><td>minorCompactionInterval</td><td>Interval to run minor compaction, in seconds. If it is set to less than zero, the minor compaction is disabled.</td><td>3600</td></tr><tr><td>majorCompactionInterval</td><td>Interval to run major compaction, in seconds. If it is set to less than zero, the major compaction is disabled.</td><td>86400</td></tr><tr><td>minorCompactionMaxTimeMillis</td><td>Maximum milliseconds to run minor Compaction.</td><td>-1 to run indefinitely.</td></tr><tr><td>majorCompactionMaxTimeMillis</td><td>Maximum milliseconds to run major Compaction.</td><td>-1 to run indefinitely.</td></tr><tr><td>useTransactionalCompaction</td><td>Flag to enable/disable transactional compaction. If it is set to true, it will use transactional compaction, which uses<br>new entry log files to store entries after compaction; otherwise, it will use normal compaction, which shares same entry<br>log file with normal add operations.<br></td><td>false</td></tr></tbody></table><h2 class="anchor anchorWithStickyNavbar_LWe7" id="garbage-collection-settings">Garbage collection settings<a href="#garbage-collection-settings" class="hash-link" aria-label="Direct link to Garbage collection settings" title="Direct link to Garbage collection settings">​</a></h2><table><thead><tr><th>Parameter</th><th>Description</th><th>Default</th></tr></thead><tbody><tr><td>gcWaitTime</td><td>How long the interval to trigger next garbage collection, in milliseconds. Since garbage collection is running in background, too frequent gc will heart performance. It is better to give a higher number of gc interval if there is enough disk capacity.</td><td>1000</td></tr><tr><td>gcOverreplicatedLedgerWaitTime</td><td>How long the interval to trigger next garbage collection of overreplicated ledgers, in milliseconds. This should not be run very frequently since we read the metadata for all the ledgers on the bookie from zk.</td><td>86400000</td></tr><tr><td>gcOverreplicatedLedgerMaxConcurrentRequests</td><td>Max number of concurrent requests in garbage collection of overreplicated ledgers.</td><td>1000</td></tr><tr><td>isForceGCAllowWhenNoSpace</td><td>Whether force compaction is allowed when the disk is full or almost full. Forcing GC may get some space back, but may also fill up disk space more quickly. This is because new log files are created before GC, while old garbage log files are deleted after GC.</td><td>false</td></tr><tr><td>verifyMetadataOnGC</td><td>Whether the bookie should double check if a ledger exists in metadata service prior to gc.</td><td>false</td></tr></tbody></table><h2 class="anchor anchorWithStickyNavbar_LWe7" id="disk-utilization">Disk utilization<a href="#disk-utilization" class="hash-link" aria-label="Direct link to Disk utilization" title="Direct link to Disk utilization">​</a></h2><table><thead><tr><th>Parameter</th><th>Description</th><th>Default</th></tr></thead><tbody><tr><td>diskUsageThreshold</td><td>For each ledger dir, maximum disk space which can be used. Default is 0.95f. i.e. 95% of disk can be used at most after which nothing will be written to that partition. If all ledger dir partions are full, then bookie will turn to readonly mode if &#x27;readOnlyModeEnabled=true&#x27; is set, else it will shutdown. Valid values should be in between 0 and 1 (exclusive).<br></td><td>0.95</td></tr><tr><td>diskUsageWarnThreshold</td><td>The disk free space low water mark threshold. Disk is considered full when usage threshold is exceeded. Disk returns back to non-full state when usage is below low water mark threshold. This prevents it from going back and forth between these states frequently when concurrent writes and compaction are happening. This also prevent bookie from switching frequently between read-only and read-writes states in the same cases.</td><td>0.95</td></tr><tr><td>diskUsageLwmThreshold</td><td>Set the disk free space low water mark threshold. Disk is considered full when usage threshold is exceeded. Disk returns back to non-full state when usage is below low water mark threshold. This prevents it from going back and forth between these states frequently when concurrent writes and compaction are happening. This also prevent bookie from switching frequently between read-only and read-writes states in the same cases.<br></td><td>0.9</td></tr><tr><td>diskCheckInterval</td><td>Disk check interval in milliseconds. Interval to check the ledger dirs usage.</td><td>10000</td></tr></tbody></table><h2 class="anchor anchorWithStickyNavbar_LWe7" id="sorted-ledger-storage-settings">Sorted Ledger Storage Settings<a href="#sorted-ledger-storage-settings" class="hash-link" aria-label="Direct link to Sorted Ledger Storage Settings" title="Direct link to Sorted Ledger Storage Settings">​</a></h2><table><thead><tr><th>Parameter</th><th>Description</th><th>Default</th></tr></thead><tbody><tr><td>skipListSizeLimit</td><td>The skip list data size limitation (default 64MB) in EntryMemTable</td><td>67108864</td></tr><tr><td>skipListArenaChunkSize</td><td>The number of bytes we should use as chunk allocation for org.apache.bookkeeper.bookie.SkipListArena</td><td>4194304</td></tr><tr><td>skipListArenaMaxAllocSize</td><td>The max size we should allocate from the skiplist arena. Allocations larger than this should be allocated directly by the VM to avoid fragmentation.</td><td>131072</td></tr><tr><td>openFileLimit</td><td>Max number of ledger index files could be opened in bookie server. If number of ledger index files reaches this limitation, bookie server started to swap some ledgers from memory to disk. Too frequent swap will affect performance. You can tune this number to gain performance according your requirements.<br></td><td>20000</td></tr><tr><td>fileInfoCacheInitialCapacity</td><td>The minimum total size of the internal file info cache table. Providing a large enough estimate at construction time avoids the need for expensive resizing operations later,<br>but setting this value unnecessarily high wastes memory. The default value is <code>1/4</code> of <code>openFileLimit</code> if openFileLimit is positive, otherwise it is 64.<br></td><td></td></tr><tr><td>fileInfoMaxIdleTime</td><td>The max idle time allowed for an open file info existed in the file info cache. If the file info is idle for a long time, exceed the given time period. The file info will be<br>evicted and closed. If the value is zero or negative, the file info is evicted only when opened files reached <code>openFileLimit</code>.<br></td><td></td></tr><tr><td>fileInfoFormatVersionToWrite</td><td>The fileinfo format version to write.<br>Available formats are 0-1:<br> 0: Initial version<br> 1: persisting explicitLac is introduced<br><br>By default, it is <code>1</code>. If you&#x27;d like to disable persisting ExplicitLac, you can set this config to 0 and also journalFormatVersionToWrite should be set to &lt; 6. If there is mismatch then the serverconfig is considered invalid.<br></td><td>1</td></tr><tr><td>pageSize</td><td>Size of a index page in ledger cache, in bytes. A larger index page can improve performance writing page to disk, which is efficent when you have small number of ledgers and these ledgers have similar number of entries. If you have large number of ledgers and each ledger has fewer entries, smaller index page would improve memory usage.<br></td><td>8192</td></tr><tr><td>pageLimit</td><td>How many index pages provided in ledger cache. If number of index pages reaches this limitation, bookie server starts to swap some ledgers from memory to disk. You can increment this value when you found swap became more frequent. But make sure pageLimit*pageSize should not more than JVM max memory limitation, otherwise you would got OutOfMemoryException. In general, incrementing pageLimit, using smaller index page would gain bettern performance in lager number of ledgers with fewer entries case. If pageLimit is -1, bookie server will use 1/3 of JVM memory to compute the limitation of number of index pages.<br></td><td>-1</td></tr><tr><td>numOfMemtableFlushThreads</td><td>When entryLogPerLedger is enabled SortedLedgerStorage flushes entries from memTable using OrderedExecutor having numOfMemtableFlushThreads number of threads.<br></td><td>8</td></tr></tbody></table><h2 class="anchor anchorWithStickyNavbar_LWe7" id="db-ledger-storage-settings">DB Ledger Storage Settings<a href="#db-ledger-storage-settings" class="hash-link" aria-label="Direct link to DB Ledger Storage Settings" title="Direct link to DB Ledger Storage Settings">​</a></h2><table><thead><tr><th>Parameter</th><th>Description</th><th>Default</th></tr></thead><tbody><tr><td>dbStorage_writeCacheMaxSizeMb</td><td>Size of write cache. Memory is allocated from JVM direct memory. Write cache is used for buffer entries before flushing into the entry log. For good performance, it should be big enough to hold a substantial amount of entries in the flush interval.</td><td>25% of the available direct memory</td></tr><tr><td>dbStorage_readAheadCacheMaxSizeMb</td><td>Size of read cache. Memory is allocated from JVM direct memory. The read cache is pre-filled doing read-ahead whenever a cache miss happens.</td><td>25% of the available direct memroy</td></tr><tr><td>dbStorage_readAheadCacheBatchSize</td><td>How many entries to pre-fill in cache after a read cache miss</td><td>100</td></tr><tr><td>dbStorage_rocksDB_blockSize</td><td>Size of RocksDB block-cache. RocksDB is used for storing ledger indexes.<br>For best performance, this cache should be big enough to hold a significant portion of the index database which can reach ~2GB in some cases.<br></td><td>268435456</td></tr><tr><td>dbStorage_rocksDB_writeBufferSizeMB</td><td>Size of RocksDB write buffer. RocksDB is used for storing ledger indexes.<br></td><td>64</td></tr><tr><td>dbStorage_rocksDB_sstSizeInMB</td><td>Size of RocksDB sst file size in MB. RocksDB is used for storing ledger indexes.<br></td><td>64</td></tr><tr><td>dbStorage_rocksDB_blockSize</td><td></td><td>65536</td></tr><tr><td>dbStorage_rocksDB_bloomFilterBitsPerKey</td><td></td><td>10</td></tr><tr><td>dbStorage_rocksDB_numLevels</td><td></td><td>-1</td></tr><tr><td>dbStorage_rocksDB_numFilesInLevel0</td><td></td><td>10</td></tr><tr><td>dbStorage_rocksDB_maxSizeInLevel1MB</td><td></td><td>256</td></tr></tbody></table><blockquote><p>Note:
 The RocksDB configuration is deprecated in the bk_server.conf since 4.15.0. It will use independent configuration file.
 There have three configuration file <code>default_rocksdb.conf</code>, <code>entry_location_rocksdb.conf</code> and <code>ledger_metadata_rocksdb.conf</code>.
 <code>default_rocksdb.conf</code> is used for default,command until or test case.
 <code>entry_location_rocksdb.conf</code> is used for location index, lots of writes and much bigger dataset.
 <code>ledger_metadata_rocksdb.conf</code> is used for ledgers db, doesn&#x27;t need particular configuration.</p><p>By default, we are still getting rocksDB properties from the <code>bk_server.conf</code>. If you want to use the independent
 configuration file for the rocksDB, you can rename the configuration files without the suffix <code>.default</code>, then the rocksDB
-used in the storage will load them.</p></blockquote><h2 class="anchor anchorWithStickyNavbar_LWe7" id="metadata-service-settings">Metadata Service Settings<a href="#metadata-service-settings" class="hash-link" aria-label="Direct link to Metadata Service Settings" title="Direct link to Metadata Service Settings">​</a></h2><table><thead><tr><th>Parameter</th><th>Description</th><th>Default</th></tr></thead><tbody><tr><td>metadataServiceUri</td><td>metadata service uri that bookkeeper is used for loading corresponding metadata driver and resolving its metadata service location.</td><td>zk+hierarchical://localhost:2181/ledgers</td></tr><tr><td>ledgerManagerFactoryClass</td><td>@Deprecated in favor of using <code>metadataServiceUri</code><br><br>The ledger manager factory class, which defines how ledgers are stored, managed, and garbage collected. See the <a href="/docs/getting-started/concepts#ledger-manager">Ledger Manager</a> guide for more details.<br></td><td>hierarchical</td></tr><tr><td>allowShadedLedgerManagerFactoryClass</td><td>Sometimes the bookkeeper server classes are shaded. The ledger manager factory classes might be relocated to be under other packages.<br>This would fail the clients using shaded factory classes since the factory classes are stored in cookies and used for verification.<br>Users can enable this flag to allow using shaded ledger manager factory classes to connect to a bookkeeper cluster.<br></td><td>false</td></tr><tr><td>shadedLedgerManagerFactoryClassPrefix</td><td>The shaded ledger manager factory prefix. This is used when <code>allowShadedLedgerManagerFactoryClass</code> is set to true.</td><td>dlshade.</td></tr></tbody></table><h2 class="anchor anchorWithStickyNavbar_LWe7" id="zookeeper-metadata-service-settings">ZooKeeper Metadata Service Settings<a href="#zookeeper-metadata-service-settings" class="hash-link" aria-label="Direct link to ZooKeeper Metadata Service Settings" title="Direct link to ZooKeeper Metadata Service Settings">​</a></h2><table><thead><tr><th>Parameter</th><th>Description</th><th>Default</th></tr></thead><tbody><tr><td>zkLedgersRootPath</td><td>@Deprecated in favor of using <code>metadataServiceUri</code><br><br>Root Zookeeper path to store ledger metadata. This parameter is used by zookeeper-based ledger manager as a root znode to store all ledgers.<br></td><td>/ledgers</td></tr><tr><td>zkServers</td><td>@Deprecated in favor of using <code>metadataServiceUri</code><br><br>A list of one of more servers on which Zookeeper is running. The server list can be comma separated values, for example <code>zkServers=zk1:2181,zk2:2181,zk3:2181</code>.<br></td><td>localhost:2181</td></tr><tr><td>zkTimeout</td><td>ZooKeeper client session timeout in milliseconds. Bookie server will exit if it received SESSION_EXPIRED because it was partitioned off from ZooKeeper for more than the session timeout JVM garbage collection, disk I/O will cause SESSION_EXPIRED. Increment this value could help avoiding this issue.</td><td>10000</td></tr><tr><td>zkRetryBackoffStartMs</td><td>The Zookeeper client backoff retry start time in millis.</td><td>1000</td></tr><tr><td>zkRetryBackoffMaxMs</td><td>The Zookeeper client backoff retry max time in millis.</td><td>10000</td></tr><tr><td>zkRequestRateLimit</td><td>The Zookeeper request limit. It is only enabled when setting a postivie value.</td><td></td></tr><tr><td>zkEnableSecurity</td><td>Set ACLs on every node written on ZooKeeper, this way only allowed users will be able to read and write BookKeeper metadata stored on ZooKeeper. In order to make ACLs work you need to setup ZooKeeper JAAS authentication all the bookies and Client need to share the same user, and this is usually done using Kerberos authentication. See ZooKeeper documentation</td><td>false</td></tr></tbody></table><h2 class="anchor anchorWithStickyNavbar_LWe7" id="statistics">Statistics<a href="#statistics" class="hash-link" aria-label="Direct link to Statistics" title="Direct link to Statistics">​</a></h2><table><thead><tr><th>Parameter</th><th>Description</th><th>Default</th></tr></thead><tbody><tr><td>enableStatistics</td><td>Whether statistics are enabled for the bookie.</td><td>true</td></tr><tr><td>sanityCheckMetricsEnabled</td><td>Flag to enable sanity check metrics in bookie stats.</td><td>false</td></tr><tr><td>statsProviderClass</td><td>Stats provider class.<br>Options:<br> - Prometheus    : org.apache.bookkeeper.stats.prometheus.PrometheusMetricsProvider<br> - Codahale     : org.apache.bookkeeper.stats.codahale.CodahaleMetricsProvider<br> - Twitter Finagle  : org.apache.bookkeeper.stats.twitter.finagle.FinagleStatsProvider<br> - Twitter Ostrich  : org.apache.bookkeeper.stats.twitter.ostrich.OstrichProvider<br> - Twitter Science  : org.apache.bookkeeper.stats.twitter.science.TwitterStatsProvider<br></td><td>org.apache.bookkeeper.stats.prometheus.PrometheusMetricsProvider</td></tr><tr><td>limitStatsLogging</td><td>option to limit stats logging</td><td>true</td></tr></tbody></table><h2 class="anchor anchorWithStickyNavbar_LWe7" id="prometheus-metrics-provider-settings">Prometheus Metrics Provider Settings<a href="#prometheus-metrics-provider-settings" class="hash-link" aria-label="Direct link to Prometheus Metrics Provider Settings" title="Direct link to Prometheus Metrics Provider Settings">​</a></h2><table><thead><tr><th>Parameter</th><th>Description</th><th>Default</th></tr></thead><tbody><tr><td>prometheusStatsHttpAddress</td><td>default bind address for Prometheus metrics exporter</td><td>0.0.0.0</td></tr><tr><td>prometheusStatsHttpPort</td><td>default port for prometheus metrics exporter</td><td>8000</td></tr><tr><td>prometheusStatsLatencyRolloverSeconds</td><td>latency stats rollover interval, in seconds</td><td>60</td></tr></tbody></table><h2 class="anchor anchorWithStickyNavbar_LWe7" id="codahale-metrics-provider-settings">Codahale Metrics Provider Settings<a href="#codahale-metrics-provider-settings" class="hash-link" aria-label="Direct link to Codahale Metrics Provider Settings" title="Direct link to Codahale Metrics Provider Settings">​</a></h2><table><thead><tr><th>Parameter</th><th>Description</th><th>Default</th></tr></thead><tbody><tr><td>codahaleStatsPrefix</td><td>metric name prefix, default is empty.</td><td></td></tr><tr><td>codahaleStatsOutputFrequencySeconds</td><td>the frequency that stats reporters report stats, in seconds.</td><td>60</td></tr><tr><td>codahaleStatsGraphiteEndpoint</td><td>the graphite endpoint for reporting stats. see <a href="//metrics.dropwizard.io/3.1.0/manual/graphite/" target="_blank" rel="noopener noreferrer">graphite reporter</a> for more details.</td><td>null</td></tr><tr><td>codahaleStatsCSVEndpoint</td><td>the directory for reporting stats in csv format. see <a href="//metrics.dropwizard.io/3.1.0/manual/core/#csv" target="_blank" rel="noopener noreferrer">csv reporter</a> for more details.</td><td>null</td></tr><tr><td>codahaleStatsSlf4jEndpoint</td><td>the slf4j endpoint for reporting stats. see <a href="//metrics.dropwizard.io/3.1.0/manual/core/#slf4j" target="_blank" rel="noopener noreferrer">slf4j reporter</a> for more details.</td><td>null</td></tr><tr><td>codahaleStatsJmxEndpoint</td><td>the jmx endpoint for reporting stats. see <a href="//metrics.dropwizard.io/3.1.0/manual/core/#jmx" target="_blank" rel="noopener noreferrer">jmx reporter</a> for more details.</td><td></td></tr></tbody></table><h2 class="anchor anchorWithStickyNavbar_LWe7" id="twitter-ostrich-metrics-provider">Twitter Ostrich Metrics Provider<a href="#twitter-ostrich-metrics-provider" class="hash-link" aria-label="Direct link to Twitter Ostrich Metrics Provider" title="Direct link to Twitter Ostrich Metrics Provider">​</a></h2><table><thead><tr><th>Parameter</th><th>Description</th><th>Default</th></tr></thead><tbody><tr><td>statsExport</td><td>Flag to control whether to expose ostrich metrics via a http endpoint configured by <code>statsHttpPort</code>.</td><td>false</td></tr><tr><td>statsHttpPort</td><td>The http port of exposing ostrich stats if <code>statsExport</code> is set to true</td><td>9002</td></tr></tbody></table><h2 class="anchor anchorWithStickyNavbar_LWe7" id="twitter-science-metrics-provider">Twitter Science Metrics Provider<a href="#twitter-science-metrics-provider" class="hash-link" aria-label="Direct link to Twitter Science Metrics Provider" title="Direct link to Twitter Science Metrics Provider">​</a></h2><table><thead><tr><th>Parameter</th><th>Description</th><th>Default</th></tr></thead><tbody><tr><td>statsExport</td><td>Flag to control whether to expose metrics via a http endpoint configured by <code>statsHttpPort</code>.</td><td>false</td></tr><tr><td>statsHttpPort</td><td>The http port of exposing stats if <code>statsExport</code> is set to true</td><td>9002</td></tr></tbody></table><h2 class="anchor anchorWithStickyNavbar_LWe7" id="autorecovery-general-settings">AutoRecovery general settings<a href="#autorecovery-general-settings" class="hash-link" aria-label="Direct link to AutoRecovery general settings" title="Direct link to AutoRecovery general settings">​</a></h2><table><thead><tr><th>Parameter</th><th>Description</th><th>Default</th></tr></thead><tbody><tr><td>autoRecoveryDaemonEnabled</td><td>Whether the bookie itself can start auto-recovery service also or not.</td><td></td></tr><tr><td>digestType</td><td>The default digest type used for opening ledgers.</td><td>CRC32</td></tr><tr><td>passwd</td><td>The default password used for opening ledgers. Default value is empty string.</td><td></td></tr><tr><td>enableDigestTypeAutodetection</td><td>The flag to enable/disable digest type auto-detection. If it is enabled, the bookkeeper client will ignore the provided digest type provided at <code>digestType</code> and the provided passwd provided at <code>passwd</code>.</td><td>true</td></tr></tbody></table><h2 class="anchor anchorWithStickyNavbar_LWe7" id="autorecovery-placement-settings">AutoRecovery placement settings<a href="#autorecovery-placement-settings" class="hash-link" aria-label="Direct link to AutoRecovery placement settings" title="Direct link to AutoRecovery placement settings">​</a></h2><table><thead><tr><th>Parameter</th><th>Description</th><th>Default</th></tr></thead><tbody><tr><td>ensemblePlacementPolicy</td><td>The ensemble placement policy used for finding bookie for re-replicating entries.<br><br>Options:<br> - org.apache.bookkeeper.client.RackawareEnsemblePlacementPolicy<br> - org.apache.bookkeeper.client.RegionAwareEnsemblePlacementPolicy<br></td><td>org.apache.bookkeeper.client.RackawareEnsemblePlacementPolicy</td></tr><tr><td>reppDnsResolverClass</td><td>The DNS resolver class used for resolving network locations for bookies. The setting is used<br>when using either RackawareEnsemblePlacementPolicy and RegionAwareEnsemblePlacementPolicy.<br></td><td>org.apache.bookkeeper.net.ScriptBasedMapping</td></tr><tr><td>networkTopologyScriptFileName</td><td>The bash script used by <code>ScriptBasedMapping</code> DNS resolver for resolving bookies&#x27; network locations.<br></td><td></td></tr><tr><td>networkTopologyScriptNumberArgs</td><td>The max number of args used in the script provided at <code>networkTopologyScriptFileName</code>.<br></td><td></td></tr><tr><td>minNumRacksPerWriteQuorum</td><td>minimum number of racks per write quorum. RackawareEnsemblePlacementPolicy will try to get bookies from atleast &#x27;minNumRacksPerWriteQuorum&#x27; racks for a writeQuorum.<br></td><td></td></tr><tr><td>enforceMinNumRacksPerWriteQuorum</td><td>&#x27;enforceMinNumRacksPerWriteQuorum&#x27; enforces RackawareEnsemblePlacementPolicy to pick bookies from &#x27;minNumRacksPerWriteQuorum&#x27; racks for a writeQuorum. If it cann&#x27;t find bookie then it would throw BKNotEnoughBookiesException instead of picking random one.<br></td><td></td></tr><tr><td>ignoreLocalNodeInPlacementPolicy</td><td>&#x27;ignoreLocalNodeInPlacementPolicy&#x27; specifies whether to ignore localnode in the internal logic of placement policy. If it is not possible or useful to use Bookkeeper client node&#x27;s (or AutoReplicator) rack/region info. for placement policy then it is better to ignore localnode instead of false alarming with log lines and metrics.<br></td><td></td></tr><tr><td>enforceMinNumFaultDomainsForWrite</td><td>&#x27;enforceMinNumFaultDomainsForWrite&#x27; enforces EnsemblePlacementPolicy to check if a write has made it to bookies in &#x27;minNumRacksPerWriteQuorum&#x27; number of fault domains, before acknowledging the write back.<br></td><td></td></tr><tr><td>minNumZonesPerWriteQuorum</td><td>minimum number of zones per write quorum in ZoneawareEnsemblePlacementPolicy. ZoneawareEnsemblePlacementPolicy would get bookies from atleast &#x27;minNumZonesPerWriteQuorum&#x27; racks for a writeQuorum.<br></td><td>2</td></tr><tr><td>desiredNumZonesPerWriteQuorum</td><td>desired number of zones per write quorum in ZoneawareEnsemblePlacementPolicy. ZoneawareEnsemblePlacementPolicy will try to get bookies from &#x27;desiredNumZonesPerWriteQuorum&#x27; zones for a writeQuorum.<br></td><td>3</td></tr><tr><td>enforceStrictZoneawarePlacement</td><td>in ZoneawareEnsemblePlacementPolicy if strict placement is enabled then minZones/desiredZones in writeQuorum would be maintained otherwise it will pick nodes randomly.<br></td><td>true</td></tr></tbody></table><h2 class="anchor anchorWithStickyNavbar_LWe7" id="autorecovery-auditor-settings">AutoRecovery auditor settings<a href="#autorecovery-auditor-settings" class="hash-link" aria-label="Direct link to AutoRecovery auditor settings" title="Direct link to AutoRecovery auditor settings">​</a></h2><table><thead><tr><th>Parameter</th><th>Description</th><th>Default</th></tr></thead><tbody><tr><td>auditorPeriodicBookieCheckInterval</td><td>The time interval between auditor bookie checks, in seconds. The auditor bookie check checks ledger metadata to see which bookies should contain entries for each ledger. If a bookie that should contain entries is unavailable, then the ledger containing that entry is marked for recovery. Setting this to 0 disables the periodic check. Bookie checks will still run when a bookie fails. The default is once per day.</td><td>86400</td></tr><tr><td>auditorPeriodicCheckInterval</td><td>The time interval, in seconds, at which the auditor will check all ledgers in the cluster. By default this runs once a week.<br><br>Set this to 0 to disable the periodic check completely. Note that periodic checking will put extra load on the cluster, so it should not be run more frequently than once a day.<br></td><td>604800</td></tr><tr><td>auditorPeriodicPlacementPolicyCheckInterval</td><td>The time interval between auditor placement policy checks, in seconds. The auditor placement policy check validates if the ensemble of segments of all the closed ledgers is adhering to the placement policy. It is just monitoring scrutiny but doesn&#x27;t take any corrective measure other than logging error and reporting metrics. By default, it is disabled.</td><td>0</td></tr><tr><td>repairedPlacementPolicyNotAdheringBookieEnabled</td><td>In Auditor, it combines with auditorPeriodicPlacementPolicyCheckInterval, to control is marked ledger id to under replication managed when found a ledger ensemble not adhere to placement policy. In ReplicationWorker, to control is to repair the ledger which the ensemble does not adhere to the placement policy. By default, it is disabled. If you want to enable this feature, consider two factors. 1:Must config RackawareEnsemblePlacementPolicy. 2:There maybe lots of ledger will be mark underreplicated. The replicationWorker will replicate lots of ledger, it will increase read request and write request in bookie server. You should set a suitable rereplicationEntryBatchSize to avoid bookie server pressure.</td><td>false</td></tr><tr><td>auditorLedgerVerificationPercentage</td><td>The percentage of a ledger (fragment)&#x27;s entries will be verified before claiming a fragment as missing. If it is 0, it only verifies the first and last entries of a given fragment.<br></td><td></td></tr><tr><td>lostBookieRecoveryDelay</td><td>How long to wait, in seconds, before starting autorecovery of a lost bookie.</td><td></td></tr><tr><td>storeSystemTimeAsLedgerUnderreplicatedMarkTime</td><td>Enable the Auditor to use system time as underreplicated ledger mark time. If this is enabled, Auditor will write a ctime field into the underreplicated ledger znode.</td><td>true</td></tr><tr><td>underreplicatedLedgerRecoveryGracePeriod</td><td>The grace period (in seconds) for underreplicated ledgers recovery. If ledger is marked underreplicated for more than this period then it will be reported by placementPolicyCheck in Auditor. Setting this to 0 will disable this check.</td><td></td></tr><tr><td>auditorReplicasCheckInterval</td><td>Sets the regularity/interval at which the auditor will run a replicas check of all ledgers, which are closed. This should not be run very often since it validates availability of replicas of all ledgers by querying bookies. Setting this to 0 will completely disable the periodic replicas check. By default it is disabled.</td><td></td></tr></tbody></table><h2 class="anchor anchorWithStickyNavbar_LWe7" id="autorecovery-replication-worker-settings">AutoRecovery replication worker settings<a href="#autorecovery-replication-worker-settings" class="hash-link" aria-label="Direct link to AutoRecovery replication worker settings" title="Direct link to AutoRecovery replication worker settings">​</a></h2><table><thead><tr><th>Parameter</th><th>Description</th><th>Default</th></tr></thead><tbody><tr><td>rereplicationEntryBatchSize</td><td>The number of entries that a replication will rereplicate in parallel.</td><td>10</td></tr><tr><td>openLedgerRereplicationGracePeriod</td><td>The grace period, in milliseconds, that the replication worker waits before fencing and replicating a ledger fragment that&#x27;s still being written to upon bookie failure.</td><td>30000</td></tr><tr><td>lockReleaseOfFailedLedgerGracePeriod</td><td>Set the grace period, in milliseconds, which the replication worker has to wait before releasing the lock after it failed to replicate a ledger. For the first ReplicationWorker.NUM_OF_EXPONENTIAL_BACKOFF_RETRIALS failures it will do exponential backoff then it will bound at lockReleaseOfFailedLedgerGracePeriod.</td><td>300000</td></tr><tr><td>rwRereplicateBackoffMs</td><td>The time to backoff when replication worker encounters exceptions on replicating a ledger, in milliseconds.</td><td>5000</td></tr></tbody></table><h2 class="anchor anchorWithStickyNavbar_LWe7" id="memory-allocator-settings">Memory allocator settings<a href="#memory-allocator-settings" class="hash-link" aria-label="Direct link to Memory allocator settings" title="Direct link to Memory allocator settings">​</a></h2><table><thead><tr><th>Parameter</th><th>Description</th><th>Default</th></tr></thead><tbody><tr><td>allocatorPoolingPolicy</td><td>Define the memory pooling policy.<br><br>Available options are:<br> - PooledDirect: Use Direct memory for all buffers and pool the memory.<br>         Direct memory will avoid the overhead of JVM GC and most<br>         memory copies when reading and writing to socket channel.<br>         Pooling will add memory space overhead due to the fact that<br>         there will be fragmentation in the allocator and that threads<br>         will keep a portion of memory as thread-local to avoid<br>         contention when possible.<br> - UnpooledHeap: Allocate memory from JVM heap without any pooling.<br>         This option has the least overhead in terms of memory usage<br>         since the memory will be automatically reclaimed by the<br>         JVM GC but might impose a performance penalty at high<br>         throughput.<br></td><td>PooledDirect</td></tr><tr><td>allocatorPoolingConcurrency</td><td>Controls the amount of concurrency for the memory pool.<br>Default is to have a number of allocator arenas equals to 2 * CPUS.<br>Decreasing this number will reduce the amount of memory overhead, at the<br>expense of increased allocation contention.<br></td><td>2 * CPUS</td></tr><tr><td>allocatorOutOfMemoryPolicy</td><td>Define the memory allocator out of memory policy.<br><br>Available options are:<br> - FallbackToHeap: If it&#x27;s not possible to allocate a buffer from direct memory,<br>          fallback to allocate an unpooled buffer from JVM heap.<br>          This will help absorb memory allocation spikes because the heap<br>          allocations will naturally slow down the process and will result<br>          if full GC cleanup if the Heap itself is full.<br> - ThrowException: Throw regular OOM exception without taking addition actions.<br></td><td>FallbackToHeap</td></tr><tr><td>allocatorLeakDetectionPolicy</td><td>Define the memory allocator leak detection policy.<br><br>Available options are:<br> - Disabled: No leak detection and no overhead.<br> - Simple: Instruments 1% of the allocated buffer to track for leaks.<br> - Advanced: Instruments 1% of the allocated buffer to track for leaks, reporting<br>       stack traces of places where the buffer was used.<br> - Paranoid: Instruments 100% of the allocated buffer to track for leaks, reporting<br>       stack traces of places where the buffer was used. Introduce very<br>       significant overhead.<br></td><td>Disabled</td></tr></tbody></table></div></article><nav class="pagination-nav docusaurus-mt-lg" aria-label="Docs pages navigation"></nav></div></div><div class="col col--3"><div class="tableOfContents_bqdL thin-scrollbar theme-doc-toc-desktop"><ul class="table-of-contents table-of-contents__left-border"><li><a href="#server-parameters" class="table-of-contents__link toc-highlight">Server parameters</a></li><li><a href="#worker-thread-settings" class="table-of-contents__link toc-highlight">Worker thread settings</a></li><li><a href="#long-poll-settings" class="table-of-contents__link toc-highlight">Long poll settings</a></li><li><a href="#read-only-mode-support" class="table-of-contents__link toc-highlight">Read-only mode support</a></li><li><a href="#netty-server-settings" class="table-of-contents__link toc-highlight">Netty server settings</a></li><li><a href="#http-server-settings" class="table-of-contents__link toc-highlight">Http server settings</a></li><li><a href="#security-settings" class="table-of-contents__link toc-highlight">Security settings</a></li><li><a href="#tls-settings" class="table-of-contents__link toc-highlight">TLS settings</a></li><li><a href="#journal-settings" class="table-of-contents__link toc-highlight">Journal settings</a></li><li><a href="#ledger-storage-settings" class="table-of-contents__link toc-highlight">Ledger storage settings</a></li><li><a href="#default-entry-log-settings" class="table-of-contents__link toc-highlight">Default Entry log settings</a></li><li><a href="#directio-entry-log-settings-only-support-dbledgerstorage" class="table-of-contents__link toc-highlight">DirectIO Entry log settings (Only support DbLedgerStorage)</a></li><li><a href="#entry-log-compaction-settings" class="table-of-contents__link toc-highlight">Entry log compaction settings</a></li><li><a href="#garbage-collection-settings" class="table-of-contents__link toc-highlight">Garbage collection settings</a></li><li><a href="#disk-utilization" class="table-of-contents__link toc-highlight">Disk utilization</a></li><li><a href="#sorted-ledger-storage-settings" class="table-of-contents__link toc-highlight">Sorted Ledger Storage Settings</a></li><li><a href="#db-ledger-storage-settings" class="table-of-contents__link toc-highlight">DB Ledger Storage Settings</a></li><li><a href="#metadata-service-settings" class="table-of-contents__link toc-highlight">Metadata Service Settings</a></li><li><a href="#zookeeper-metadata-service-settings" class="table-of-contents__link toc-highlight">ZooKeeper Metadata Service Settings</a></li><li><a href="#statistics" class="table-of-contents__link toc-highlight">Statistics</a></li><li><a href="#prometheus-metrics-provider-settings" class="table-of-contents__link toc-highlight">Prometheus Metrics Provider Settings</a></li><li><a href="#codahale-metrics-provider-settings" class="table-of-contents__link toc-highlight">Codahale Metrics Provider Settings</a></li><li><a href="#twitter-ostrich-metrics-provider" class="table-of-contents__link toc-highlight">Twitter Ostrich Metrics Provider</a></li><li><a href="#twitter-science-metrics-provider" class="table-of-contents__link toc-highlight">Twitter Science Metrics Provider</a></li><li><a href="#autorecovery-general-settings" class="table-of-contents__link toc-highlight">AutoRecovery general settings</a></li><li><a href="#autorecovery-placement-settings" class="table-of-contents__link toc-highlight">AutoRecovery placement settings</a></li><li><a href="#autorecovery-auditor-settings" class="table-of-contents__link toc-highlight">AutoRecovery auditor settings</a></li><li><a href="#autorecovery-replication-worker-settings" class="table-of-contents__link toc-highlight">AutoRecovery replication worker settings</a></li><li><a href="#memory-allocator-settings" class="table-of-contents__link toc-highlight">Memory allocator settings</a></li></ul></div></div></div></div></main></div></div><footer class="footer footer--dark"><div class="container container-fluid"><div class="row footer__links"><div class="col footer__col"><div class="footer__title">Documentation</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/docs/overview">Overview</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/getting-started/installation">Getting started</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/deployment/manual">Deployment</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/admin/bookies">Administration</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/api/overview">API</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/security/overview">Security</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/development/protocol">Development</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/reference/config">Reference</a></li></ul></div><div class="col footer__col"><div class="footer__title">Community</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/community/mailing-lists">Mailing lists</a></li><li class="footer__item"><a class="footer__link-item" href="/community/slack">Slack</a></li><li class="footer__item"><a href="https://github.com/apache/bookkeeper" target="_blank" rel="noopener noreferrer" class="footer__link-item">Github<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a href="https://twitter.com/asfbookkeeper" target="_blank" rel="noopener noreferrer" class="footer__link-item">Twitter<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div><div class="col footer__col"><div class="footer__title">Project</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/project/who">Who are we?</a></li><li class="footer__item"><a class="footer__link-item" href="/project/bylaws">Bylaws</a></li><li class="footer__item"><a href="https://apache.org/licenses" target="_blank" rel="noopener noreferrer" class="footer__link-item">License<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a class="footer__link-item" href="/project/privacy">Privacy policy</a></li><li class="footer__item"><a href="https://www.apache.org/foundation/sponsorship.html" target="_blank" rel="noopener noreferrer" class="footer__link-item">Sponsorship<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a href="https://www.apache.org/foundation/thanks.html" target="_blank" rel="noopener noreferrer" class="footer__link-item">Thanks<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div></div><div class="footer__bottom text--center"><div class="footer__copyright"><footer class="footer">
+used in the storage will load them.</p></blockquote><h2 class="anchor anchorWithStickyNavbar_LWe7" id="metadata-service-settings">Metadata Service Settings<a href="#metadata-service-settings" class="hash-link" aria-label="Direct link to Metadata Service Settings" title="Direct link to Metadata Service Settings">​</a></h2><table><thead><tr><th>Parameter</th><th>Description</th><th>Default</th></tr></thead><tbody><tr><td>metadataServiceUri</td><td>metadata service uri that bookkeeper is used for loading corresponding metadata driver and resolving its metadata service location.</td><td>zk+hierarchical://localhost:2181/ledgers</td></tr><tr><td>ledgerManagerFactoryClass</td><td>@Deprecated in favor of using <code>metadataServiceUri</code><br><br>The ledger manager factory class, which defines how ledgers are stored, managed, and garbage collected. See the <a href="/docs/getting-started/concepts#ledger-manager">Ledger Manager</a> guide for more details.<br></td><td>hierarchical</td></tr><tr><td>allowShadedLedgerManagerFactoryClass</td><td>Sometimes the bookkeeper server classes are shaded. The ledger manager factory classes might be relocated to be under other packages.<br>This would fail the clients using shaded factory classes since the factory classes are stored in cookies and used for verification.<br>Users can enable this flag to allow using shaded ledger manager factory classes to connect to a bookkeeper cluster.<br></td><td>false</td></tr><tr><td>shadedLedgerManagerFactoryClassPrefix</td><td>The shaded ledger manager factory prefix. This is used when <code>allowShadedLedgerManagerFactoryClass</code> is set to true.</td><td>dlshade.</td></tr></tbody></table><h2 class="anchor anchorWithStickyNavbar_LWe7" id="zookeeper-metadata-service-settings">ZooKeeper Metadata Service Settings<a href="#zookeeper-metadata-service-settings" class="hash-link" aria-label="Direct link to ZooKeeper Metadata Service Settings" title="Direct link to ZooKeeper Metadata Service Settings">​</a></h2><table><thead><tr><th>Parameter</th><th>Description</th><th>Default</th></tr></thead><tbody><tr><td>zkLedgersRootPath</td><td>@Deprecated in favor of using <code>metadataServiceUri</code><br><br>Root Zookeeper path to store ledger metadata. This parameter is used by zookeeper-based ledger manager as a root znode to store all ledgers.<br></td><td>/ledgers</td></tr><tr><td>zkServers</td><td>@Deprecated in favor of using <code>metadataServiceUri</code><br><br>A list of one of more servers on which Zookeeper is running. The server list can be comma separated values, for example <code>zkServers=zk1:2181,zk2:2181,zk3:2181</code>.<br></td><td>localhost:2181</td></tr><tr><td>zkTimeout</td><td>ZooKeeper client session timeout in milliseconds. Bookie server will exit if it received SESSION_EXPIRED because it was partitioned off from ZooKeeper for more than the session timeout JVM garbage collection, disk I/O will cause SESSION_EXPIRED. Increment this value could help avoiding this issue.</td><td>10000</td></tr><tr><td>zkRetryBackoffStartMs</td><td>The Zookeeper client backoff retry start time in millis.</td><td>1000</td></tr><tr><td>zkRetryBackoffMaxMs</td><td>The Zookeeper client backoff retry max time in millis.</td><td>10000</td></tr><tr><td>zkRequestRateLimit</td><td>The Zookeeper request limit. It is only enabled when setting a postivie value.</td><td></td></tr><tr><td>zkEnableSecurity</td><td>Set ACLs on every node written on ZooKeeper, this way only allowed users will be able to read and write BookKeeper metadata stored on ZooKeeper. In order to make ACLs work you need to setup ZooKeeper JAAS authentication all the bookies and Client need to share the same user, and this is usually done using Kerberos authentication. See ZooKeeper documentation</td><td>false</td></tr></tbody></table><h2 class="anchor anchorWithStickyNavbar_LWe7" id="statistics">Statistics<a href="#statistics" class="hash-link" aria-label="Direct link to Statistics" title="Direct link to Statistics">​</a></h2><table><thead><tr><th>Parameter</th><th>Description</th><th>Default</th></tr></thead><tbody><tr><td>enableStatistics</td><td>Whether statistics are enabled for the bookie.</td><td>true</td></tr><tr><td>sanityCheckMetricsEnabled</td><td>Flag to enable sanity check metrics in bookie stats.</td><td>false</td></tr><tr><td>statsProviderClass</td><td>Stats provider class.<br>Options:<br> - Prometheus    : org.apache.bookkeeper.stats.prometheus.PrometheusMetricsProvider<br> - Codahale     : org.apache.bookkeeper.stats.codahale.CodahaleMetricsProvider<br> - Twitter Finagle  : org.apache.bookkeeper.stats.twitter.finagle.FinagleStatsProvider<br> - Twitter Ostrich  : org.apache.bookkeeper.stats.twitter.ostrich.OstrichProvider<br> - Twitter Science  : org.apache.bookkeeper.stats.twitter.science.TwitterStatsProvider<br></td><td>org.apache.bookkeeper.stats.prometheus.PrometheusMetricsProvider</td></tr><tr><td>limitStatsLogging</td><td>option to limit stats logging</td><td>true</td></tr></tbody></table><h2 class="anchor anchorWithStickyNavbar_LWe7" id="prometheus-metrics-provider-settings">Prometheus Metrics Provider Settings<a href="#prometheus-metrics-provider-settings" class="hash-link" aria-label="Direct link to Prometheus Metrics Provider Settings" title="Direct link to Prometheus Metrics Provider Settings">​</a></h2><table><thead><tr><th>Parameter</th><th>Description</th><th>Default</th></tr></thead><tbody><tr><td>prometheusStatsHttpAddress</td><td>default bind address for Prometheus metrics exporter</td><td>0.0.0.0</td></tr><tr><td>prometheusStatsHttpPort</td><td>default port for prometheus metrics exporter</td><td>8000</td></tr><tr><td>prometheusStatsLatencyRolloverSeconds</td><td>latency stats rollover interval, in seconds</td><td>60</td></tr></tbody></table><h2 class="anchor anchorWithStickyNavbar_LWe7" id="codahale-metrics-provider-settings">Codahale Metrics Provider Settings<a href="#codahale-metrics-provider-settings" class="hash-link" aria-label="Direct link to Codahale Metrics Provider Settings" title="Direct link to Codahale Metrics Provider Settings">​</a></h2><table><thead><tr><th>Parameter</th><th>Description</th><th>Default</th></tr></thead><tbody><tr><td>codahaleStatsPrefix</td><td>metric name prefix, default is empty.</td><td></td></tr><tr><td>codahaleStatsOutputFrequencySeconds</td><td>the frequency that stats reporters report stats, in seconds.</td><td>60</td></tr><tr><td>codahaleStatsGraphiteEndpoint</td><td>the graphite endpoint for reporting stats. see <a href="//metrics.dropwizard.io/3.1.0/manual/graphite/" target="_blank" rel="noopener noreferrer">graphite reporter</a> for more details.</td><td>null</td></tr><tr><td>codahaleStatsCSVEndpoint</td><td>the directory for reporting stats in csv format. see <a href="//metrics.dropwizard.io/3.1.0/manual/core/#csv" target="_blank" rel="noopener noreferrer">csv reporter</a> for more details.</td><td>null</td></tr><tr><td>codahaleStatsSlf4jEndpoint</td><td>the slf4j endpoint for reporting stats. see <a href="//metrics.dropwizard.io/3.1.0/manual/core/#slf4j" target="_blank" rel="noopener noreferrer">slf4j reporter</a> for more details.</td><td>null</td></tr><tr><td>codahaleStatsJmxEndpoint</td><td>the jmx endpoint for reporting stats. see <a href="//metrics.dropwizard.io/3.1.0/manual/core/#jmx" target="_blank" rel="noopener noreferrer">jmx reporter</a> for more details.</td><td></td></tr></tbody></table><h2 class="anchor anchorWithStickyNavbar_LWe7" id="twitter-ostrich-metrics-provider">Twitter Ostrich Metrics Provider<a href="#twitter-ostrich-metrics-provider" class="hash-link" aria-label="Direct link to Twitter Ostrich Metrics Provider" title="Direct link to Twitter Ostrich Metrics Provider">​</a></h2><table><thead><tr><th>Parameter</th><th>Description</th><th>Default</th></tr></thead><tbody><tr><td>statsExport</td><td>Flag to control whether to expose ostrich metrics via a http endpoint configured by <code>statsHttpPort</code>.</td><td>false</td></tr><tr><td>statsHttpPort</td><td>The http port of exposing ostrich stats if <code>statsExport</code> is set to true</td><td>9002</td></tr></tbody></table><h2 class="anchor anchorWithStickyNavbar_LWe7" id="twitter-science-metrics-provider">Twitter Science Metrics Provider<a href="#twitter-science-metrics-provider" class="hash-link" aria-label="Direct link to Twitter Science Metrics Provider" title="Direct link to Twitter Science Metrics Provider">​</a></h2><table><thead><tr><th>Parameter</th><th>Description</th><th>Default</th></tr></thead><tbody><tr><td>statsExport</td><td>Flag to control whether to expose metrics via a http endpoint configured by <code>statsHttpPort</code>.</td><td>false</td></tr><tr><td>statsHttpPort</td><td>The http port of exposing stats if <code>statsExport</code> is set to true</td><td>9002</td></tr></tbody></table><h2 class="anchor anchorWithStickyNavbar_LWe7" id="autorecovery-general-settings">AutoRecovery general settings<a href="#autorecovery-general-settings" class="hash-link" aria-label="Direct link to AutoRecovery general settings" title="Direct link to AutoRecovery general settings">​</a></h2><table><thead><tr><th>Parameter</th><th>Description</th><th>Default</th></tr></thead><tbody><tr><td>autoRecoveryDaemonEnabled</td><td>Whether the bookie itself can start auto-recovery service also or not.</td><td></td></tr><tr><td>digestType</td><td>The default digest type used for opening ledgers.</td><td>CRC32</td></tr><tr><td>passwd</td><td>The default password used for opening ledgers. Default value is empty string.</td><td></td></tr><tr><td>enableDigestTypeAutodetection</td><td>The flag to enable/disable digest type auto-detection. If it is enabled, the bookkeeper client will ignore the provided digest type provided at <code>digestType</code> and the provided passwd provided at <code>passwd</code>.</td><td>true</td></tr></tbody></table><h2 class="anchor anchorWithStickyNavbar_LWe7" id="autorecovery-placement-settings">AutoRecovery placement settings<a href="#autorecovery-placement-settings" class="hash-link" aria-label="Direct link to AutoRecovery placement settings" title="Direct link to AutoRecovery placement settings">​</a></h2><table><thead><tr><th>Parameter</th><th>Description</th><th>Default</th></tr></thead><tbody><tr><td>ensemblePlacementPolicy</td><td>The ensemble placement policy used for finding bookie for re-replicating entries.<br><br>Options:<br> - org.apache.bookkeeper.client.RackawareEnsemblePlacementPolicy<br> - org.apache.bookkeeper.client.RegionAwareEnsemblePlacementPolicy<br></td><td>org.apache.bookkeeper.client.RackawareEnsemblePlacementPolicy</td></tr><tr><td>reppDnsResolverClass</td><td>The DNS resolver class used for resolving network locations for bookies. The setting is used<br>when using either RackawareEnsemblePlacementPolicy and RegionAwareEnsemblePlacementPolicy.<br></td><td>org.apache.bookkeeper.net.ScriptBasedMapping</td></tr><tr><td>networkTopologyScriptFileName</td><td>The bash script used by <code>ScriptBasedMapping</code> DNS resolver for resolving bookies&#x27; network locations.<br></td><td></td></tr><tr><td>networkTopologyScriptNumberArgs</td><td>The max number of args used in the script provided at <code>networkTopologyScriptFileName</code>.<br></td><td></td></tr><tr><td>minNumRacksPerWriteQuorum</td><td>minimum number of racks per write quorum. RackawareEnsemblePlacementPolicy will try to get bookies from atleast &#x27;minNumRacksPerWriteQuorum&#x27; racks for a writeQuorum.<br></td><td></td></tr><tr><td>enforceMinNumRacksPerWriteQuorum</td><td>&#x27;enforceMinNumRacksPerWriteQuorum&#x27; enforces RackawareEnsemblePlacementPolicy to pick bookies from &#x27;minNumRacksPerWriteQuorum&#x27; racks for a writeQuorum. If it cann&#x27;t find bookie then it would throw BKNotEnoughBookiesException instead of picking random one.<br></td><td></td></tr><tr><td>ignoreLocalNodeInPlacementPolicy</td><td>&#x27;ignoreLocalNodeInPlacementPolicy&#x27; specifies whether to ignore localnode in the internal logic of placement policy. If it is not possible or useful to use Bookkeeper client node&#x27;s (or AutoReplicator) rack/region info. for placement policy then it is better to ignore localnode instead of false alarming with log lines and metrics.<br></td><td></td></tr><tr><td>enforceMinNumFaultDomainsForWrite</td><td>&#x27;enforceMinNumFaultDomainsForWrite&#x27; enforces EnsemblePlacementPolicy to check if a write has made it to bookies in &#x27;minNumRacksPerWriteQuorum&#x27; number of fault domains, before acknowledging the write back.<br></td><td></td></tr><tr><td>minNumZonesPerWriteQuorum</td><td>minimum number of zones per write quorum in ZoneawareEnsemblePlacementPolicy. ZoneawareEnsemblePlacementPolicy would get bookies from atleast &#x27;minNumZonesPerWriteQuorum&#x27; racks for a writeQuorum.<br></td><td>2</td></tr><tr><td>desiredNumZonesPerWriteQuorum</td><td>desired number of zones per write quorum in ZoneawareEnsemblePlacementPolicy. ZoneawareEnsemblePlacementPolicy will try to get bookies from &#x27;desiredNumZonesPerWriteQuorum&#x27; zones for a writeQuorum.<br></td><td>3</td></tr><tr><td>enforceStrictZoneawarePlacement</td><td>in ZoneawareEnsemblePlacementPolicy if strict placement is enabled then minZones/desiredZones in writeQuorum would be maintained otherwise it will pick nodes randomly.<br></td><td>true</td></tr></tbody></table><h2 class="anchor anchorWithStickyNavbar_LWe7" id="autorecovery-auditor-settings">AutoRecovery auditor settings<a href="#autorecovery-auditor-settings" class="hash-link" aria-label="Direct link to AutoRecovery auditor settings" title="Direct link to AutoRecovery auditor settings">​</a></h2><table><thead><tr><th>Parameter</th><th>Description</th><th>Default</th></tr></thead><tbody><tr><td>auditorPeriodicBookieCheckInterval</td><td>The time interval between auditor bookie checks, in seconds. The auditor bookie check checks ledger metadata to see which bookies should contain entries for each ledger. If a bookie that should contain entries is unavailable, then the ledger containing that entry is marked for recovery. Setting this to 0 disables the periodic check. Bookie checks will still run when a bookie fails. The default is once per day.</td><td>86400</td></tr><tr><td>auditorPeriodicCheckInterval</td><td>The time interval, in seconds, at which the auditor will check all ledgers in the cluster. By default this runs once a week.<br><br>Set this to 0 to disable the periodic check completely. Note that periodic checking will put extra load on the cluster, so it should not be run more frequently than once a day.<br></td><td>604800</td></tr><tr><td>auditorPeriodicPlacementPolicyCheckInterval</td><td>The time interval between auditor placement policy checks, in seconds. The auditor placement policy check validates if the ensemble of segments of all the closed ledgers is adhering to the placement policy. It is just monitoring scrutiny but doesn&#x27;t take any corrective measure other than logging error and reporting metrics. By default, it is disabled.</td><td>0</td></tr><tr><td>repairedPlacementPolicyNotAdheringBookieEnabled</td><td>In Auditor, it combines with auditorPeriodicPlacementPolicyCheckInterval, to control is marked ledger id to under replication managed when found a ledger ensemble not adhere to placement policy. In ReplicationWorker, to control is to repair the ledger which the ensemble does not adhere to the placement policy. By default, it is disabled. If you want to enable this feature, consider two factors. 1:Must config RackawareEnsemblePlacementPolicy. 2:There maybe lots of ledger will be mark underreplicated. The replicationWorker will replicate lots of ledger, it will increase read request and write request in bookie server. You should set a suitable rereplicationEntryBatchSize to avoid bookie server pressure.</td><td>false</td></tr><tr><td>auditorLedgerVerificationPercentage</td><td>The percentage of a ledger (fragment)&#x27;s entries will be verified before claiming a fragment as missing. If it is 0, it only verifies the first and last entries of a given fragment.<br></td><td></td></tr><tr><td>lostBookieRecoveryDelay</td><td>How long to wait, in seconds, before starting autorecovery of a lost bookie.</td><td></td></tr><tr><td>storeSystemTimeAsLedgerUnderreplicatedMarkTime</td><td>Enable the Auditor to use system time as underreplicated ledger mark time. If this is enabled, Auditor will write a ctime field into the underreplicated ledger znode.</td><td>true</td></tr><tr><td>underreplicatedLedgerRecoveryGracePeriod</td><td>The grace period (in seconds) for underreplicated ledgers recovery. If ledger is marked underreplicated for more than this period then it will be reported by placementPolicyCheck in Auditor. Setting this to 0 will disable this check.</td><td></td></tr><tr><td>auditorReplicasCheckInterval</td><td>Sets the regularity/interval at which the auditor will run a replicas check of all ledgers, which are closed. This should not be run very often since it validates availability of replicas of all ledgers by querying bookies. Setting this to 0 will completely disable the periodic replicas check. By default it is disabled.</td><td></td></tr></tbody></table><h2 class="anchor anchorWithStickyNavbar_LWe7" id="autorecovery-replication-worker-settings">AutoRecovery replication worker settings<a href="#autorecovery-replication-worker-settings" class="hash-link" aria-label="Direct link to AutoRecovery replication worker settings" title="Direct link to AutoRecovery replication worker settings">​</a></h2><table><thead><tr><th>Parameter</th><th>Description</th><th>Default</th></tr></thead><tbody><tr><td>rereplicationEntryBatchSize</td><td>The number of entries that a replication will rereplicate in parallel.</td><td>10</td></tr><tr><td>openLedgerRereplicationGracePeriod</td><td>The grace period, in milliseconds, that the replication worker waits before fencing and replicating a ledger fragment that&#x27;s still being written to upon bookie failure.</td><td>30000</td></tr><tr><td>lockReleaseOfFailedLedgerGracePeriod</td><td>Set the grace period, in milliseconds, which the replication worker has to wait before releasing the lock after it failed to replicate a ledger. For the first ReplicationWorker.NUM_OF_EXPONENTIAL_BACKOFF_RETRIALS failures it will do exponential backoff then it will bound at lockReleaseOfFailedLedgerGracePeriod.</td><td>300000</td></tr><tr><td>rwRereplicateBackoffMs</td><td>The time to backoff when replication worker encounters exceptions on replicating a ledger, in milliseconds.</td><td>5000</td></tr></tbody></table><h2 class="anchor anchorWithStickyNavbar_LWe7" id="memory-allocator-settings">Memory allocator settings<a href="#memory-allocator-settings" class="hash-link" aria-label="Direct link to Memory allocator settings" title="Direct link to Memory allocator settings">​</a></h2><table><thead><tr><th>Parameter</th><th>Description</th><th>Default</th></tr></thead><tbody><tr><td>allocatorPoolingPolicy</td><td>Define the memory pooling policy.<br><br>Available options are:<br> - PooledDirect: Use Direct memory for all buffers and pool the memory.<br>         Direct memory will avoid the overhead of JVM GC and most<br>         memory copies when reading and writing to socket channel.<br>         Pooling will add memory space overhead due to the fact that<br>         there will be fragmentation in the allocator and that threads<br>         will keep a portion of memory as thread-local to avoid<br>         contention when possible.<br> - UnpooledHeap: Allocate memory from JVM heap without any pooling.<br>         This option has the least overhead in terms of memory usage<br>         since the memory will be automatically reclaimed by the<br>         JVM GC but might impose a performance penalty at high<br>         throughput.<br></td><td>PooledDirect</td></tr><tr><td>allocatorPoolingConcurrency</td><td>Controls the amount of concurrency for the memory pool.<br>Default is to have a number of allocator arenas equals to 2 * CPUS.<br>Decreasing this number will reduce the amount of memory overhead, at the<br>expense of increased allocation contention.<br></td><td>2 * CPUS</td></tr><tr><td>allocatorOutOfMemoryPolicy</td><td>Define the memory allocator out of memory policy.<br><br>Available options are:<br> - FallbackToHeap: If it&#x27;s not possible to allocate a buffer from direct memory,<br>          fallback to allocate an unpooled buffer from JVM heap.<br>          This will help absorb memory allocation spikes because the heap<br>          allocations will naturally slow down the process and will result<br>          if full GC cleanup if the Heap itself is full.<br> - ThrowException: Throw regular OOM exception without taking addition actions.<br></td><td>FallbackToHeap</td></tr><tr><td>allocatorLeakDetectionPolicy</td><td>Define the memory allocator leak detection policy.<br><br>Available options are:<br> - Disabled: No leak detection and no overhead.<br> - Simple: Instruments 1% of the allocated buffer to track for leaks.<br> - Advanced: Instruments 1% of the allocated buffer to track for leaks, reporting<br>       stack traces of places where the buffer was used.<br> - Paranoid: Instruments 100% of the allocated buffer to track for leaks, reporting<br>       stack traces of places where the buffer was used. Introduce very<br>       significant overhead.<br></td><td>Disabled</td></tr></tbody></table></div></article><nav class="pagination-nav docusaurus-mt-lg" aria-label="Docs pages navigation"><a class="pagination-nav__link pagination-nav__link--prev" href="/docs/development/protocol"><div class="pagination-nav__sublabel">Previous</div><div class="pagination-nav__label">The BookKeeper protocol</div></a><a class="pagination-nav__link pagination-nav__link--next" href="/docs/reference/cli"><div class="pagination-nav__sublabel">Next</div><div class="pagination-nav__label">BookKeeper CLI tool reference</div></a></nav></div></div><div class="col col--3"><div class="tableOfContents_bqdL thin-scrollbar theme-doc-toc-desktop"><ul class="table-of-contents table-of-contents__left-border"><li><a href="#server-parameters" class="table-of-contents__link toc-highlight">Server parameters</a></li><li><a href="#worker-thread-settings" class="table-of-contents__link toc-highlight">Worker thread settings</a></li><li><a href="#long-poll-settings" class="table-of-contents__link toc-highlight">Long poll settings</a></li><li><a href="#read-only-mode-support" class="table-of-contents__link toc-highlight">Read-only mode support</a></li><li><a href="#netty-server-settings" class="table-of-contents__link toc-highlight">Netty server settings</a></li><li><a href="#http-server-settings" class="table-of-contents__link toc-highlight">Http server settings</a></li><li><a href="#security-settings" class="table-of-contents__link toc-highlight">Security settings</a></li><li><a href="#tls-settings" class="table-of-contents__link toc-highlight">TLS settings</a></li><li><a href="#journal-settings" class="table-of-contents__link toc-highlight">Journal settings</a></li><li><a href="#ledger-storage-settings" class="table-of-contents__link toc-highlight">Ledger storage settings</a></li><li><a href="#default-entry-log-settings" class="table-of-contents__link toc-highlight">Default Entry log settings</a></li><li><a href="#directio-entry-log-settings-only-support-dbledgerstorage" class="table-of-contents__link toc-highlight">DirectIO Entry log settings (Only support DbLedgerStorage)</a></li><li><a href="#entry-log-compaction-settings" class="table-of-contents__link toc-highlight">Entry log compaction settings</a></li><li><a href="#garbage-collection-settings" class="table-of-contents__link toc-highlight">Garbage collection settings</a></li><li><a href="#disk-utilization" class="table-of-contents__link toc-highlight">Disk utilization</a></li><li><a href="#sorted-ledger-storage-settings" class="table-of-contents__link toc-highlight">Sorted Ledger Storage Settings</a></li><li><a href="#db-ledger-storage-settings" class="table-of-contents__link toc-highlight">DB Ledger Storage Settings</a></li><li><a href="#metadata-service-settings" class="table-of-contents__link toc-highlight">Metadata Service Settings</a></li><li><a href="#zookeeper-metadata-service-settings" class="table-of-contents__link toc-highlight">ZooKeeper Metadata Service Settings</a></li><li><a href="#statistics" class="table-of-contents__link toc-highlight">Statistics</a></li><li><a href="#prometheus-metrics-provider-settings" class="table-of-contents__link toc-highlight">Prometheus Metrics Provider Settings</a></li><li><a href="#codahale-metrics-provider-settings" class="table-of-contents__link toc-highlight">Codahale Metrics Provider Settings</a></li><li><a href="#twitter-ostrich-metrics-provider" class="table-of-contents__link toc-highlight">Twitter Ostrich Metrics Provider</a></li><li><a href="#twitter-science-metrics-provider" class="table-of-contents__link toc-highlight">Twitter Science Metrics Provider</a></li><li><a href="#autorecovery-general-settings" class="table-of-contents__link toc-highlight">AutoRecovery general settings</a></li><li><a href="#autorecovery-placement-settings" class="table-of-contents__link toc-highlight">AutoRecovery placement settings</a></li><li><a href="#autorecovery-auditor-settings" class="table-of-contents__link toc-highlight">AutoRecovery auditor settings</a></li><li><a href="#autorecovery-replication-worker-settings" class="table-of-contents__link toc-highlight">AutoRecovery replication worker settings</a></li><li><a href="#memory-allocator-settings" class="table-of-contents__link toc-highlight">Memory allocator settings</a></li></ul></div></div></div></div></main></div></div><footer class="footer footer--dark"><div class="container container-fluid"><div class="row footer__links"><div class="col footer__col"><div class="footer__title">Documentation</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/docs/overview">Overview</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/getting-started/installation">Getting started</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/deployment/manual">Deployment</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/admin/bookies">Administration</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/api/overview">API</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/security/overview">Security</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/development/protocol">Development</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/reference/config">Reference</a></li></ul></div><div class="col footer__col"><div class="footer__title">Community</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/community/mailing-lists">Mailing lists</a></li><li class="footer__item"><a class="footer__link-item" href="/community/slack">Slack</a></li><li class="footer__item"><a href="https://github.com/apache/bookkeeper" target="_blank" rel="noopener noreferrer" class="footer__link-item">Github<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a href="https://twitter.com/asfbookkeeper" target="_blank" rel="noopener noreferrer" class="footer__link-item">Twitter<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div><div class="col footer__col"><div class="footer__title">Project</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/project/who">Who are we?</a></li><li class="footer__item"><a class="footer__link-item" href="/project/bylaws">Bylaws</a></li><li class="footer__item"><a href="https://apache.org/licenses" target="_blank" rel="noopener noreferrer" class="footer__link-item">License<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a class="footer__link-item" href="/project/privacy">Privacy policy</a></li><li class="footer__item"><a href="https://www.apache.org/foundation/sponsorship.html" target="_blank" rel="noopener noreferrer" class="footer__link-item">Sponsorship<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a href="https://www.apache.org/foundation/thanks.html" target="_blank" rel="noopener noreferrer" class="footer__link-item">Thanks<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div></div><div class="footer__bottom text--center"><div class="footer__copyright"><footer class="footer">
         <div class="container">
           <div class="content has-text-centered">
             <p>
@@ -29,7 +29,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/security/overview/index.html b/content/docs/security/overview/index.html
index 9f0a8db..69e006d 100644
--- a/content/docs/security/overview/index.html
+++ b/content/docs/security/overview/index.html
@@ -4,13 +4,13 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">BookKeeper Security | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/security/overview"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.17.0"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.17.0"><meta data-rh="true" name="docsearch:version" content="4.17.0"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.17.0"><meta data-rh="true" property="og:title" content="BookKeeper Security | Apache BookKeeper"><meta data-rh="true" name="description" content="In the 4.5.0 release, the BookKeeper community added a number of features that can be used, together or separately, to secure a BookKeeper cluster."><meta data-rh="true" property="og:description" content="In the 4.5.0 release, the BookKeeper community added a number of features that can be used, together or separately, to secure a BookKeeper cluster."><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/security/overview"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/security/overview" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/security/overview" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
-<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navbar__brand" href="/"><div class="navbar__logo"><img src="/img/bk-logo.svg" alt="Apache Bookkeeper" class="themedImage_ToTc themedImage--light_HNdA"><img src="/img/bk-logo.svg" alt="Apache Bookkeeper" class="themedImage_ToTc themedImage--dark_i4oU"></div><b class="navbar__title text--truncate">Apache BookKeeper</b></a><a class="navbar__item navbar__link" href="/docs/overview/">Documentation</a><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Community</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/community/mailing-lists">Mailing lists</a></li><li><a class="dropdown__link" href="/community/slack">Slack</a></li><li><a href="https://github.com/apache/bookkeeper/issues" target="_blank" rel="noopener noreferrer" class="dropdown__link">Github issues<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a class="dropdown__link" href="/community/releases">Release management</a></li><li><a class="dropdown__link" href="/community/meeting">Community meetings</a></li><li><a class="dropdown__link" href="/community/contributing">Contribution guide</a></li><li><a class="dropdown__link" href="/community/coding-guide">Coding guide</a></li><li><a class="dropdown__link" href="/community/testing">Testing guide</a></li><li><a class="dropdown__link" href="/community/issue-report">Issue report guide</a></li><li><a class="dropdown__link" href="/community/release-guide">Release guide</a></li><li><a class="dropdown__link" href="/community/presentations">Presentations</a></li><li><a class="dropdown__link" href="/community/bookkeeper-proposals">BookKeeper proposals (BP)</a></li></ul></div><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Project</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/project/who">Who are we?</a></li><li><a class="dropdown__link" href="/project/bylaws">Bylaws</a></li><li><a href="https://apache.org/licenses" target="_blank" rel="noopener noreferrer" class="dropdown__link">License<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a class="dropdown__link" href="/project/privacy">Privacy policy</a></li><li><a href="https://www.apache.org/foundation/sponsorship.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Sponsorship<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a href="https://www.apache.org/foundation/thanks.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Thanks<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div></div><div class="navbar__items navbar__items--right"><div class="navbar__item dropdown dropdown--hoverable dropdown--right"><a class="navbar__link" aria-haspopup="true" aria-expanded="false" role="button" href="/docs/admin/autorecovery">4.17.0</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/docs/next/security/overview">Next</a></li><li><a aria-current="page" class="dropdown__link dropdown__link--active" href="/docs/security/overview">4.17.0</a></li><li><a class="dropdown__link" href="/docs/4.16.5/security/overview">4.16.5</a></li><li><a class="dropdown__link" href="/docs/4.15.5/security/overview">4.15.5</a></li><li><a class="dropdown__link" href="/docs/4.14.8/security/overview">4.14.8</a></li><li><a class="dropdown__link" href="/docs/4.13.0/security/overview">4.13.0</a></li><li><a class="dropdown__link" href="/docs/4.12.1/security/overview">4.12.1</a></li><li><a class="dropdown__link" href="/docs/4.11.1/security/overview">4.11.1</a></li><li><a class="dropdown__link" href="/docs/4.10.0/security/overview">4.10.0</a></li><li><a class="dropdown__link" href="/docs/4.9.2/security/overview">4.9.2</a></li><li><a class="dropdown__link" href="/docs/4.8.2/security/overview">4.8.2</a></li><li><a class="dropdown__link" href="/docs/4.7.3/security/overview">4.7.3</a></li><li><a class="dropdown__link" href="/docs/4.6.2/security/overview">4.6.2</a></li><li><a class="dropdown__link" href="/docs/4.5.1/security/overview">4.5.1</a></li></ul></div><a class="navbar__item navbar__link" href="/releases">Download</a><div class="toggle_vylO colorModeToggle_DEke"><button class="clean-btn toggleButton_gllP toggleButtonDisabled_aARS" type="button" disabled="" title="Switch between dark and light mode (currently light mode)" aria-label="Switch between dark and light mode (currently light mode)" aria-live="polite"><svg viewBox="0 0 24 24" width="24" height="24" class="lightToggleIcon_pyhR"><path fill="currentColor" d="M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"></path></svg><svg viewBox="0 0 24 24" width="24" height="24" class="darkToggleIcon_wfgR"><path fill="currentColor" d="M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"></path></svg></button></div><div class="searchBox_ZlJk"></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div></nav><div id="docusaurus_skipToContent_fallback" class="main-wrapper mainWrapper_z2l0 docsWrapper_BCFX"><button aria-label="Scroll back to top" class="clean-btn theme-back-to-top-button backToTopButton_sjWU" type="button"></button><div class="docPage__5DB"><main class="docMainContainer_gTbr docMainContainerEnhanced_Uz_u"><div class="container padding-top--md padding-bottom--lg"><div class="row"><div class="col docItemCol_VOVn"><div class="docItemContainer_Djhp"><article><span class="theme-doc-version-badge badge badge--secondary">Version: 4.17.0</span><div class="tocCollapsible_ETCw theme-doc-toc-mobile tocMobile_ITEo"><button type="button" class="clean-btn tocCollapsibleButton_TO0P">On this page</button></div><div class="theme-doc-markdown markdown"><header><h1>BookKeeper Security</h1></header><p>In the 4.5.0 release, the BookKeeper community added a number of features that can be used, together or separately, to secure a BookKeeper cluster.
-The following security measures are currently supported:</p><ol><li>Authentication of connections to bookies from clients, using either <a href="/docs/security/tls">TLS</a> or <a href="/docs/security/sasl">SASL (Kerberos)</a>.</li><li>Authentication of connections from clients, bookies, autorecovery daemons to <a href="/docs/security/zookeeper">ZooKeeper</a>, when using zookeeper based ledger managers.</li><li>Encryption of data transferred between bookies and clients, between bookies and autorecovery daemons using <a href="/docs/security/tls">TLS</a>.</li></ol><p>It’s worth noting that security is optional - non-secured clusters are supported, as well as a mix of authenticated, unauthenticated, encrypted and non-encrypted clients.</p><p>NOTE: authorization is not yet available in 4.5.0. The Apache BookKeeper community is looking to add this feature in subsequent releases.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="next-steps">Next Steps<a href="#next-steps" class="hash-link" aria-label="Direct link to Next Steps" title="Direct link to Next Steps">​</a></h2><ul><li><a href="/docs/security/tls">Encryption and Authentication using TLS</a></li><li><a href="/docs/security/sasl">Authentication using SASL</a></li><li><a href="/docs/security/zookeeper">ZooKeeper Authentication</a></li></ul></div></article><nav class="pagination-nav docusaurus-mt-lg" aria-label="Docs pages navigation"></nav></div></div><div class="col col--3"><div class="tableOfContents_bqdL thin-scrollbar theme-doc-toc-desktop"><ul class="table-of-contents table-of-contents__left-border"><li><a href="#next-steps" class="table-of-contents__link toc-highlight">Next Steps</a></li></ul></div></div></div></div></main></div></div><footer class="footer footer--dark"><div class="container container-fluid"><div class="row footer__links"><div class="col footer__col"><div class="footer__title">Documentation</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/docs/overview">Overview</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/getting-started/installation">Getting started</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/deployment/manual">Deployment</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/admin/bookies">Administration</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/api/overview">API</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/security/overview">Security</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/development/protocol">Development</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/reference/config">Reference</a></li></ul></div><div class="col footer__col"><div class="footer__title">Community</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/community/mailing-lists">Mailing lists</a></li><li class="footer__item"><a class="footer__link-item" href="/community/slack">Slack</a></li><li class="footer__item"><a href="https://github.com/apache/bookkeeper" target="_blank" rel="noopener noreferrer" class="footer__link-item">Github<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a href="https://twitter.com/asfbookkeeper" target="_blank" rel="noopener noreferrer" class="footer__link-item">Twitter<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div><div class="col footer__col"><div class="footer__title">Project</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/project/who">Who are we?</a></li><li class="footer__item"><a class="footer__link-item" href="/project/bylaws">Bylaws</a></li><li class="footer__item"><a href="https://apache.org/licenses" target="_blank" rel="noopener noreferrer" class="footer__link-item">License<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a class="footer__link-item" href="/project/privacy">Privacy policy</a></li><li class="footer__item"><a href="https://www.apache.org/foundation/sponsorship.html" target="_blank" rel="noopener noreferrer" class="footer__link-item">Sponsorship<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a href="https://www.apache.org/foundation/thanks.html" target="_blank" rel="noopener noreferrer" class="footer__link-item">Thanks<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div></div><div class="footer__bottom text--center"><div class="footer__copyright"><footer class="footer">
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navbar__brand" href="/"><div class="navbar__logo"><img src="/img/bk-logo.svg" alt="Apache Bookkeeper" class="themedImage_ToTc themedImage--light_HNdA"><img src="/img/bk-logo.svg" alt="Apache Bookkeeper" class="themedImage_ToTc themedImage--dark_i4oU"></div><b class="navbar__title text--truncate">Apache BookKeeper</b></a><a aria-current="page" class="navbar__item navbar__link navbar__link--active" href="/docs/overview/">Documentation</a><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Community</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/community/mailing-lists">Mailing lists</a></li><li><a class="dropdown__link" href="/community/slack">Slack</a></li><li><a href="https://github.com/apache/bookkeeper/issues" target="_blank" rel="noopener noreferrer" class="dropdown__link">Github issues<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a class="dropdown__link" href="/community/releases">Release management</a></li><li><a class="dropdown__link" href="/community/meeting">Community meetings</a></li><li><a class="dropdown__link" href="/community/contributing">Contribution guide</a></li><li><a class="dropdown__link" href="/community/coding-guide">Coding guide</a></li><li><a class="dropdown__link" href="/community/testing">Testing guide</a></li><li><a class="dropdown__link" href="/community/issue-report">Issue report guide</a></li><li><a class="dropdown__link" href="/community/release-guide">Release guide</a></li><li><a class="dropdown__link" href="/community/presentations">Presentations</a></li><li><a class="dropdown__link" href="/community/bookkeeper-proposals">BookKeeper proposals (BP)</a></li></ul></div><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Project</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/project/who">Who are we?</a></li><li><a class="dropdown__link" href="/project/bylaws">Bylaws</a></li><li><a href="https://apache.org/licenses" target="_blank" rel="noopener noreferrer" class="dropdown__link">License<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a class="dropdown__link" href="/project/privacy">Privacy policy</a></li><li><a href="https://www.apache.org/foundation/sponsorship.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Sponsorship<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a href="https://www.apache.org/foundation/thanks.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Thanks<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div></div><div class="navbar__items navbar__items--right"><div class="navbar__item dropdown dropdown--hoverable dropdown--right"><a class="navbar__link" aria-haspopup="true" aria-expanded="false" role="button" href="/docs/overview/">4.17.0</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/docs/next/security/overview">Next</a></li><li><a aria-current="page" class="dropdown__link dropdown__link--active" href="/docs/security/overview">4.17.0</a></li><li><a class="dropdown__link" href="/docs/4.16.5/security/overview">4.16.5</a></li><li><a class="dropdown__link" href="/docs/4.15.5/security/overview">4.15.5</a></li><li><a class="dropdown__link" href="/docs/4.14.8/security/overview">4.14.8</a></li><li><a class="dropdown__link" href="/docs/4.13.0/security/overview">4.13.0</a></li><li><a class="dropdown__link" href="/docs/4.12.1/security/overview">4.12.1</a></li><li><a class="dropdown__link" href="/docs/4.11.1/security/overview">4.11.1</a></li><li><a class="dropdown__link" href="/docs/4.10.0/security/overview">4.10.0</a></li><li><a class="dropdown__link" href="/docs/4.9.2/security/overview">4.9.2</a></li><li><a class="dropdown__link" href="/docs/4.8.2/security/overview">4.8.2</a></li><li><a class="dropdown__link" href="/docs/4.7.3/security/overview">4.7.3</a></li><li><a class="dropdown__link" href="/docs/4.6.2/security/overview">4.6.2</a></li><li><a class="dropdown__link" href="/docs/4.5.1/security/overview">4.5.1</a></li></ul></div><a class="navbar__item navbar__link" href="/releases">Download</a><div class="toggle_vylO colorModeToggle_DEke"><button class="clean-btn toggleButton_gllP toggleButtonDisabled_aARS" type="button" disabled="" title="Switch between dark and light mode (currently light mode)" aria-label="Switch between dark and light mode (currently light mode)" aria-live="polite"><svg viewBox="0 0 24 24" width="24" height="24" class="lightToggleIcon_pyhR"><path fill="currentColor" d="M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"></path></svg><svg viewBox="0 0 24 24" width="24" height="24" class="darkToggleIcon_wfgR"><path fill="currentColor" d="M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"></path></svg></button></div><div class="searchBox_ZlJk"></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div></nav><div id="docusaurus_skipToContent_fallback" class="main-wrapper mainWrapper_z2l0 docsWrapper_BCFX"><button aria-label="Scroll back to top" class="clean-btn theme-back-to-top-button backToTopButton_sjWU" type="button"></button><div class="docPage__5DB"><aside class="theme-doc-sidebar-container docSidebarContainer_b6E3"><div class="sidebarViewport_Xe31"><div class="sidebar_njMd"><nav aria-label="Docs sidebar" class="menu thin-scrollbar menu_SIkG"><ul class="theme-doc-sidebar-menu menu__list"><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-1 menu__list-item"><a class="menu__link" href="/docs/overview/">Overview</a></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/getting-started/installation">Getting started</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/deployment/manual">Deployment</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/admin/bookies">Administration</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/api/overview">API</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret menu__link--active" aria-expanded="true" href="/docs/security/overview">Security</a></div><ul style="display:block;overflow:visible;height:auto" class="menu__list"><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link menu__link--active" aria-current="page" tabindex="0" href="/docs/security/overview">Overview</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/security/tls">TLS Authentication</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/security/sasl">SASL Authentication</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/security/zookeeper">ZooKeeper Authentication</a></li></ul></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/development/protocol">Development</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/reference/config">Reference</a></div></li></ul></nav></div></div></aside><main class="docMainContainer_gTbr"><div class="container padding-top--md padding-bottom--lg"><div class="row"><div class="col docItemCol_VOVn"><div class="docItemContainer_Djhp"><article><span class="theme-doc-version-badge badge badge--secondary">Version: 4.17.0</span><div class="tocCollapsible_ETCw theme-doc-toc-mobile tocMobile_ITEo"><button type="button" class="clean-btn tocCollapsibleButton_TO0P">On this page</button></div><div class="theme-doc-markdown markdown"><header><h1>BookKeeper Security</h1></header><p>In the 4.5.0 release, the BookKeeper community added a number of features that can be used, together or separately, to secure a BookKeeper cluster.
+The following security measures are currently supported:</p><ol><li>Authentication of connections to bookies from clients, using either <a href="/docs/security/tls">TLS</a> or <a href="/docs/security/sasl">SASL (Kerberos)</a>.</li><li>Authentication of connections from clients, bookies, autorecovery daemons to <a href="/docs/security/zookeeper">ZooKeeper</a>, when using zookeeper based ledger managers.</li><li>Encryption of data transferred between bookies and clients, between bookies and autorecovery daemons using <a href="/docs/security/tls">TLS</a>.</li></ol><p>It’s worth noting that security is optional - non-secured clusters are supported, as well as a mix of authenticated, unauthenticated, encrypted and non-encrypted clients.</p><p>NOTE: authorization is not yet available in 4.5.0. The Apache BookKeeper community is looking to add this feature in subsequent releases.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="next-steps">Next Steps<a href="#next-steps" class="hash-link" aria-label="Direct link to Next Steps" title="Direct link to Next Steps">​</a></h2><ul><li><a href="/docs/security/tls">Encryption and Authentication using TLS</a></li><li><a href="/docs/security/sasl">Authentication using SASL</a></li><li><a href="/docs/security/zookeeper">ZooKeeper Authentication</a></li></ul></div></article><nav class="pagination-nav docusaurus-mt-lg" aria-label="Docs pages navigation"><a class="pagination-nav__link pagination-nav__link--prev" href="/docs/api/distributedlog-api"><div class="pagination-nav__sublabel">Previous</div><div class="pagination-nav__label">DistributedLog</div></a><a class="pagination-nav__link pagination-nav__link--next" href="/docs/security/tls"><div class="pagination-nav__sublabel">Next</div><div class="pagination-nav__label">Encryption and Authentication using TLS</div></a></nav></div></div><div class="col col--3"><div class="tableOfContents_bqdL thin-scrollbar theme-doc-toc-desktop"><ul class="table-of-contents table-of-contents__left-border"><li><a href="#next-steps" class="table-of-contents__link toc-highlight">Next Steps</a></li></ul></div></div></div></div></main></div></div><footer class="footer footer--dark"><div class="container container-fluid"><div class="row footer__links"><div class="col footer__col"><div class="footer__title">Documentation</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/docs/overview">Overview</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/getting-started/installation">Getting started</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/deployment/manual">Deployment</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/admin/bookies">Administration</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/api/overview">API</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/security/overview">Security</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/development/protocol">Development</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/reference/config">Reference</a></li></ul></div><div class="col footer__col"><div class="footer__title">Community</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/community/mailing-lists">Mailing lists</a></li><li class="footer__item"><a class="footer__link-item" href="/community/slack">Slack</a></li><li class="footer__item"><a href="https://github.com/apache/bookkeeper" target="_blank" rel="noopener noreferrer" class="footer__link-item">Github<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a href="https://twitter.com/asfbookkeeper" target="_blank" rel="noopener noreferrer" class="footer__link-item">Twitter<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div><div class="col footer__col"><div class="footer__title">Project</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/project/who">Who are we?</a></li><li class="footer__item"><a class="footer__link-item" href="/project/bylaws">Bylaws</a></li><li class="footer__item"><a href="https://apache.org/licenses" target="_blank" rel="noopener noreferrer" class="footer__link-item">License<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a class="footer__link-item" href="/project/privacy">Privacy policy</a></li><li class="footer__item"><a href="https://www.apache.org/foundation/sponsorship.html" target="_blank" rel="noopener noreferrer" class="footer__link-item">Sponsorship<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a href="https://www.apache.org/foundation/thanks.html" target="_blank" rel="noopener noreferrer" class="footer__link-item">Thanks<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div></div><div class="footer__bottom text--center"><div class="footer__copyright"><footer class="footer">
         <div class="container">
           <div class="content has-text-centered">
             <p>
@@ -23,7 +23,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/security/sasl/index.html b/content/docs/security/sasl/index.html
index 7466ea2..fbfa8f4 100644
--- a/content/docs/security/sasl/index.html
+++ b/content/docs/security/sasl/index.html
@@ -4,12 +4,12 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">Authentication using SASL | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/security/sasl"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.17.0"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.17.0"><meta data-rh="true" name="docsearch:version" content="4.17.0"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.17.0"><meta data-rh="true" property="og:title" content="Authentication using SASL | Apache BookKeeper"><meta data-rh="true" name="description" content="Bookies support client authentication via SASL. Currently we only support GSSAPI (Kerberos). We will start"><meta data-rh="true" property="og:description" content="Bookies support client authentication via SASL. Currently we only support GSSAPI (Kerberos). We will start"><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/security/sasl"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/security/sasl" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/security/sasl" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
-<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navbar__brand" href="/"><div class="navbar__logo"><img src="/img/bk-logo.svg" alt="Apache Bookkeeper" class="themedImage_ToTc themedImage--light_HNdA"><img src="/img/bk-logo.svg" alt="Apache Bookkeeper" class="themedImage_ToTc themedImage--dark_i4oU"></div><b class="navbar__title text--truncate">Apache BookKeeper</b></a><a class="navbar__item navbar__link" href="/docs/overview/">Documentation</a><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Community</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/community/mailing-lists">Mailing lists</a></li><li><a class="dropdown__link" href="/community/slack">Slack</a></li><li><a href="https://github.com/apache/bookkeeper/issues" target="_blank" rel="noopener noreferrer" class="dropdown__link">Github issues<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a class="dropdown__link" href="/community/releases">Release management</a></li><li><a class="dropdown__link" href="/community/meeting">Community meetings</a></li><li><a class="dropdown__link" href="/community/contributing">Contribution guide</a></li><li><a class="dropdown__link" href="/community/coding-guide">Coding guide</a></li><li><a class="dropdown__link" href="/community/testing">Testing guide</a></li><li><a class="dropdown__link" href="/community/issue-report">Issue report guide</a></li><li><a class="dropdown__link" href="/community/release-guide">Release guide</a></li><li><a class="dropdown__link" href="/community/presentations">Presentations</a></li><li><a class="dropdown__link" href="/community/bookkeeper-proposals">BookKeeper proposals (BP)</a></li></ul></div><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Project</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/project/who">Who are we?</a></li><li><a class="dropdown__link" href="/project/bylaws">Bylaws</a></li><li><a href="https://apache.org/licenses" target="_blank" rel="noopener noreferrer" class="dropdown__link">License<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a class="dropdown__link" href="/project/privacy">Privacy policy</a></li><li><a href="https://www.apache.org/foundation/sponsorship.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Sponsorship<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a href="https://www.apache.org/foundation/thanks.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Thanks<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div></div><div class="navbar__items navbar__items--right"><div class="navbar__item dropdown dropdown--hoverable dropdown--right"><a class="navbar__link" aria-haspopup="true" aria-expanded="false" role="button" href="/docs/admin/autorecovery">4.17.0</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/docs/next/security/sasl">Next</a></li><li><a aria-current="page" class="dropdown__link dropdown__link--active" href="/docs/security/sasl">4.17.0</a></li><li><a class="dropdown__link" href="/docs/4.16.5/security/sasl">4.16.5</a></li><li><a class="dropdown__link" href="/docs/4.15.5/security/sasl">4.15.5</a></li><li><a class="dropdown__link" href="/docs/4.14.8/security/sasl">4.14.8</a></li><li><a class="dropdown__link" href="/docs/4.13.0/security/sasl">4.13.0</a></li><li><a class="dropdown__link" href="/docs/4.12.1/security/sasl">4.12.1</a></li><li><a class="dropdown__link" href="/docs/4.11.1/security/sasl">4.11.1</a></li><li><a class="dropdown__link" href="/docs/4.10.0/security/sasl">4.10.0</a></li><li><a class="dropdown__link" href="/docs/4.9.2/security/sasl">4.9.2</a></li><li><a class="dropdown__link" href="/docs/4.8.2/security/sasl">4.8.2</a></li><li><a class="dropdown__link" href="/docs/4.7.3/security/sasl">4.7.3</a></li><li><a class="dropdown__link" href="/docs/4.6.2/security/sasl">4.6.2</a></li><li><a class="dropdown__link" href="/docs/4.5.1/security/sasl">4.5.1</a></li></ul></div><a class="navbar__item navbar__link" href="/releases">Download</a><div class="toggle_vylO colorModeToggle_DEke"><button class="clean-btn toggleButton_gllP toggleButtonDisabled_aARS" type="button" disabled="" title="Switch between dark and light mode (currently light mode)" aria-label="Switch between dark and light mode (currently light mode)" aria-live="polite"><svg viewBox="0 0 24 24" width="24" height="24" class="lightToggleIcon_pyhR"><path fill="currentColor" d="M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"></path></svg><svg viewBox="0 0 24 24" width="24" height="24" class="darkToggleIcon_wfgR"><path fill="currentColor" d="M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"></path></svg></button></div><div class="searchBox_ZlJk"></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div></nav><div id="docusaurus_skipToContent_fallback" class="main-wrapper mainWrapper_z2l0 docsWrapper_BCFX"><button aria-label="Scroll back to top" class="clean-btn theme-back-to-top-button backToTopButton_sjWU" type="button"></button><div class="docPage__5DB"><main class="docMainContainer_gTbr docMainContainerEnhanced_Uz_u"><div class="container padding-top--md padding-bottom--lg"><div class="row"><div class="col docItemCol_VOVn"><div class="docItemContainer_Djhp"><article><span class="theme-doc-version-badge badge badge--secondary">Version: 4.17.0</span><div class="tocCollapsible_ETCw theme-doc-toc-mobile tocMobile_ITEo"><button type="button" class="clean-btn tocCollapsibleButton_TO0P">On this page</button></div><div class="theme-doc-markdown markdown"><header><h1>Authentication using SASL</h1></header><p>Bookies support client authentication via SASL. Currently we only support GSSAPI (Kerberos). We will start
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navbar__brand" href="/"><div class="navbar__logo"><img src="/img/bk-logo.svg" alt="Apache Bookkeeper" class="themedImage_ToTc themedImage--light_HNdA"><img src="/img/bk-logo.svg" alt="Apache Bookkeeper" class="themedImage_ToTc themedImage--dark_i4oU"></div><b class="navbar__title text--truncate">Apache BookKeeper</b></a><a aria-current="page" class="navbar__item navbar__link navbar__link--active" href="/docs/overview/">Documentation</a><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Community</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/community/mailing-lists">Mailing lists</a></li><li><a class="dropdown__link" href="/community/slack">Slack</a></li><li><a href="https://github.com/apache/bookkeeper/issues" target="_blank" rel="noopener noreferrer" class="dropdown__link">Github issues<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a class="dropdown__link" href="/community/releases">Release management</a></li><li><a class="dropdown__link" href="/community/meeting">Community meetings</a></li><li><a class="dropdown__link" href="/community/contributing">Contribution guide</a></li><li><a class="dropdown__link" href="/community/coding-guide">Coding guide</a></li><li><a class="dropdown__link" href="/community/testing">Testing guide</a></li><li><a class="dropdown__link" href="/community/issue-report">Issue report guide</a></li><li><a class="dropdown__link" href="/community/release-guide">Release guide</a></li><li><a class="dropdown__link" href="/community/presentations">Presentations</a></li><li><a class="dropdown__link" href="/community/bookkeeper-proposals">BookKeeper proposals (BP)</a></li></ul></div><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Project</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/project/who">Who are we?</a></li><li><a class="dropdown__link" href="/project/bylaws">Bylaws</a></li><li><a href="https://apache.org/licenses" target="_blank" rel="noopener noreferrer" class="dropdown__link">License<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a class="dropdown__link" href="/project/privacy">Privacy policy</a></li><li><a href="https://www.apache.org/foundation/sponsorship.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Sponsorship<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a href="https://www.apache.org/foundation/thanks.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Thanks<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div></div><div class="navbar__items navbar__items--right"><div class="navbar__item dropdown dropdown--hoverable dropdown--right"><a class="navbar__link" aria-haspopup="true" aria-expanded="false" role="button" href="/docs/overview/">4.17.0</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/docs/next/security/sasl">Next</a></li><li><a aria-current="page" class="dropdown__link dropdown__link--active" href="/docs/security/sasl">4.17.0</a></li><li><a class="dropdown__link" href="/docs/4.16.5/security/sasl">4.16.5</a></li><li><a class="dropdown__link" href="/docs/4.15.5/security/sasl">4.15.5</a></li><li><a class="dropdown__link" href="/docs/4.14.8/security/sasl">4.14.8</a></li><li><a class="dropdown__link" href="/docs/4.13.0/security/sasl">4.13.0</a></li><li><a class="dropdown__link" href="/docs/4.12.1/security/sasl">4.12.1</a></li><li><a class="dropdown__link" href="/docs/4.11.1/security/sasl">4.11.1</a></li><li><a class="dropdown__link" href="/docs/4.10.0/security/sasl">4.10.0</a></li><li><a class="dropdown__link" href="/docs/4.9.2/security/sasl">4.9.2</a></li><li><a class="dropdown__link" href="/docs/4.8.2/security/sasl">4.8.2</a></li><li><a class="dropdown__link" href="/docs/4.7.3/security/sasl">4.7.3</a></li><li><a class="dropdown__link" href="/docs/4.6.2/security/sasl">4.6.2</a></li><li><a class="dropdown__link" href="/docs/4.5.1/security/sasl">4.5.1</a></li></ul></div><a class="navbar__item navbar__link" href="/releases">Download</a><div class="toggle_vylO colorModeToggle_DEke"><button class="clean-btn toggleButton_gllP toggleButtonDisabled_aARS" type="button" disabled="" title="Switch between dark and light mode (currently light mode)" aria-label="Switch between dark and light mode (currently light mode)" aria-live="polite"><svg viewBox="0 0 24 24" width="24" height="24" class="lightToggleIcon_pyhR"><path fill="currentColor" d="M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"></path></svg><svg viewBox="0 0 24 24" width="24" height="24" class="darkToggleIcon_wfgR"><path fill="currentColor" d="M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"></path></svg></button></div><div class="searchBox_ZlJk"></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div></nav><div id="docusaurus_skipToContent_fallback" class="main-wrapper mainWrapper_z2l0 docsWrapper_BCFX"><button aria-label="Scroll back to top" class="clean-btn theme-back-to-top-button backToTopButton_sjWU" type="button"></button><div class="docPage__5DB"><aside class="theme-doc-sidebar-container docSidebarContainer_b6E3"><div class="sidebarViewport_Xe31"><div class="sidebar_njMd"><nav aria-label="Docs sidebar" class="menu thin-scrollbar menu_SIkG"><ul class="theme-doc-sidebar-menu menu__list"><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-1 menu__list-item"><a class="menu__link" href="/docs/overview/">Overview</a></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/getting-started/installation">Getting started</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/deployment/manual">Deployment</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/admin/bookies">Administration</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/api/overview">API</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret menu__link--active" aria-expanded="true" href="/docs/security/overview">Security</a></div><ul style="display:block;overflow:visible;height:auto" class="menu__list"><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/security/overview">Overview</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/security/tls">TLS Authentication</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link menu__link--active" aria-current="page" tabindex="0" href="/docs/security/sasl">SASL Authentication</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/security/zookeeper">ZooKeeper Authentication</a></li></ul></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/development/protocol">Development</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/reference/config">Reference</a></div></li></ul></nav></div></div></aside><main class="docMainContainer_gTbr"><div class="container padding-top--md padding-bottom--lg"><div class="row"><div class="col docItemCol_VOVn"><div class="docItemContainer_Djhp"><article><span class="theme-doc-version-badge badge badge--secondary">Version: 4.17.0</span><div class="tocCollapsible_ETCw theme-doc-toc-mobile tocMobile_ITEo"><button type="button" class="clean-btn tocCollapsibleButton_TO0P">On this page</button></div><div class="theme-doc-markdown markdown"><header><h1>Authentication using SASL</h1></header><p>Bookies support client authentication via SASL. Currently we only support GSSAPI (Kerberos). We will start
 with a general description of how to configure <code>SASL</code> for bookies, clients and autorecovery daemons, followed
 by mechanism-specific details and wrap up with some operational details.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="sasl-configuration-for-bookies">SASL configuration for Bookies<a href="#sasl-configuration-for-bookies" class="hash-link" aria-label="Direct link to SASL configuration for Bookies" title="Direct link to SASL configuration for Bookies">​</a></h2><ol><li><p>Select the mechanisms to enable in the bookies. <code>GSSAPI</code> is the only mechanism currently supported by BookKeeper.</p></li><li><p>Add a <code>JAAS</code> config file for the selected mechanisms as described in the examples for setting up <a href="#kerberos">GSSAPI (Kerberos)</a>.</p></li><li><p>Pass the <code>JAAS</code> config file location as JVM parameter to each Bookie. For example:</p><div class="language-shell codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-shell codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">-Djava.security.auth.login.config</span><span class="token operator" style="color:#393A34">=</span><span class="token plain">/etc/bookkeeper/bookie_jaas.conf </span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div></li><li><p>Enable SASL auth plugin in bookies, by setting <code>bookieAuthProviderFactoryClass</code> to <code>org.apache.bookkeeper.sasl.SASLBookieAuthProviderFactory</code>.</p></li></ol><div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">```shell</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">bookieAuthProviderFactoryClass=org.apache.bookkeeper.sasl.SASLBookieAuthProviderFactory</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">```</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><ol start="5"><li><p>If you are running <code>autorecovery</code> along with bookies, then you want to enable SASL auth plugin for <code>autorecovery</code>, by setting
 <code>clientAuthProviderFactoryClass</code> to <code>org.apache.bookkeeper.sasl.SASLClientProviderFactory</code>.</p><div class="language-shell codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-shell codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token assign-left variable" style="color:#36acaa">clientAuthProviderFactoryClass</span><span class="token operator" style="color:#393A34">=</span><span class="token plain">org.apache.bookkeeper.sasl.SASLClientProviderFactory</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div></li><li><p>Follow the steps in <a href="#kerberos">GSSAPI (Kerberos)</a> to configure SASL.</p></li></ol><h4 class="anchor anchorWithStickyNavbar_LWe7" id="notes">Important Notes<a href="#notes" class="hash-link" aria-label="Direct link to Important Notes" title="Direct link to Important Notes">​</a></h4><ol><li><code>Bookie</code> is a section name in the JAAS file used by each bookie. This section tells the bookie which principal to use
@@ -32,7 +32,7 @@
 so obtain or create these principals as needed. Then create a <code>JAAS</code> file for each principal. The <code>BookKeeper</code> section describes
 how the clients like writers and readers can connect to the Bookies. The following is an example configuration for a client using
 a keytab (recommended for long-running processes):</p><div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">BookKeeper {</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    com.sun.security.auth.module.Krb5LoginModule required</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    useKeyTab=true</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    storeKey=true</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    keyTab=&quot;/etc/security/keytabs/bookkeeper.keytab&quot;</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    principal=&quot;bookkeeper-client-1@EXAMPLE.COM&quot;;</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">};</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div></li></ol><ol start="2"><li><p>Pass the name of the JAAS file as a JVM parameter to the client JVM:</p><div class="language-shell codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-shell codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">-Djava.security.auth.login.config</span><span class="token operator" style="color:#393A34">=</span><span class="token plain">/etc/bookkeeper/bookkeeper_jaas.conf</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>You may also wish to specify the path to the <code>krb5.conf</code> file (see
-<a href="https://docs.oracle.com/javase/8/docs/technotes/guides/security/jgss/tutorials/KerberosReq.html" target="_blank" rel="noopener noreferrer">JDK’s Kerberos Requirements</a> for more details).</p><div class="language-shell codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-shell codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">-Djava.security.krb5.conf</span><span class="token operator" style="color:#393A34">=</span><span class="token plain">/etc/bookkeeper/krb5.conf</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div></li></ol><ol start="3"><li><p>Make sure the keytabs configured in the <code>bookkeeper_jaas.conf</code> are readable by the operating system user who is starting bookkeeper client.</p></li><li><p>Enable SASL authentication plugin in the client by setting following parameters.</p><div class="language-shell codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-shell codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token assign-left variable" style="color:#36acaa">clientAuthProviderFactoryClass</span><span class="token operator" style="color:#393A34">=</span><span class="token plain">org.apache.bookkeeper.sasl.SASLClientProviderFactory</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div></li></ol><h2 class="anchor anchorWithStickyNavbar_LWe7" id="enabling-logging-for-sasl">Enabling Logging for SASL<a href="#enabling-logging-for-sasl" class="hash-link" aria-label="Direct link to Enabling Logging for SASL" title="Direct link to Enabling Logging for SASL">​</a></h2><p>To enable SASL debug output, you can set <code>sun.security.krb5.debug</code> system property to <code>true</code>.</p></div></article><nav class="pagination-nav docusaurus-mt-lg" aria-label="Docs pages navigation"></nav></div></div><div class="col col--3"><div class="tableOfContents_bqdL thin-scrollbar theme-doc-toc-desktop"><ul class="table-of-contents table-of-contents__left-border"><li><a href="#sasl-configuration-for-bookies" class="table-of-contents__link toc-highlight">SASL configuration for Bookies</a></li><li><a href="#sasl-configuration-for-clients" class="table-of-contents__link toc-highlight">SASL configuration for Clients</a></li><li><a href="#kerberos" class="table-of-contents__link toc-highlight">Authentication using SASL/Kerberos</a><ul><li><a href="#prerequisites" class="table-of-contents__link toc-highlight">Prerequisites</a></li><li><a href="#configuring-bookies" class="table-of-contents__link toc-highlight">Configuring Bookies</a></li><li><a href="#configuring-clients" class="table-of-contents__link toc-highlight">Configuring Clients</a></li></ul></li><li><a href="#enabling-logging-for-sasl" class="table-of-contents__link toc-highlight">Enabling Logging for SASL</a></li></ul></div></div></div></div></main></div></div><footer class="footer footer--dark"><div class="container container-fluid"><div class="row footer__links"><div class="col footer__col"><div class="footer__title">Documentation</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/docs/overview">Overview</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/getting-started/installation">Getting started</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/deployment/manual">Deployment</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/admin/bookies">Administration</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/api/overview">API</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/security/overview">Security</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/development/protocol">Development</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/reference/config">Reference</a></li></ul></div><div class="col footer__col"><div class="footer__title">Community</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/community/mailing-lists">Mailing lists</a></li><li class="footer__item"><a class="footer__link-item" href="/community/slack">Slack</a></li><li class="footer__item"><a href="https://github.com/apache/bookkeeper" target="_blank" rel="noopener noreferrer" class="footer__link-item">Github<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a href="https://twitter.com/asfbookkeeper" target="_blank" rel="noopener noreferrer" class="footer__link-item">Twitter<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div><div class="col footer__col"><div class="footer__title">Project</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/project/who">Who are we?</a></li><li class="footer__item"><a class="footer__link-item" href="/project/bylaws">Bylaws</a></li><li class="footer__item"><a href="https://apache.org/licenses" target="_blank" rel="noopener noreferrer" class="footer__link-item">License<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a class="footer__link-item" href="/project/privacy">Privacy policy</a></li><li class="footer__item"><a href="https://www.apache.org/foundation/sponsorship.html" target="_blank" rel="noopener noreferrer" class="footer__link-item">Sponsorship<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a href="https://www.apache.org/foundation/thanks.html" target="_blank" rel="noopener noreferrer" class="footer__link-item">Thanks<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div></div><div class="footer__bottom text--center"><div class="footer__copyright"><footer class="footer">
+<a href="https://docs.oracle.com/javase/8/docs/technotes/guides/security/jgss/tutorials/KerberosReq.html" target="_blank" rel="noopener noreferrer">JDK’s Kerberos Requirements</a> for more details).</p><div class="language-shell codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-shell codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">-Djava.security.krb5.conf</span><span class="token operator" style="color:#393A34">=</span><span class="token plain">/etc/bookkeeper/krb5.conf</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div></li></ol><ol start="3"><li><p>Make sure the keytabs configured in the <code>bookkeeper_jaas.conf</code> are readable by the operating system user who is starting bookkeeper client.</p></li><li><p>Enable SASL authentication plugin in the client by setting following parameters.</p><div class="language-shell codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-shell codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token assign-left variable" style="color:#36acaa">clientAuthProviderFactoryClass</span><span class="token operator" style="color:#393A34">=</span><span class="token plain">org.apache.bookkeeper.sasl.SASLClientProviderFactory</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div></li></ol><h2 class="anchor anchorWithStickyNavbar_LWe7" id="enabling-logging-for-sasl">Enabling Logging for SASL<a href="#enabling-logging-for-sasl" class="hash-link" aria-label="Direct link to Enabling Logging for SASL" title="Direct link to Enabling Logging for SASL">​</a></h2><p>To enable SASL debug output, you can set <code>sun.security.krb5.debug</code> system property to <code>true</code>.</p></div></article><nav class="pagination-nav docusaurus-mt-lg" aria-label="Docs pages navigation"><a class="pagination-nav__link pagination-nav__link--prev" href="/docs/security/tls"><div class="pagination-nav__sublabel">Previous</div><div class="pagination-nav__label">Encryption and Authentication using TLS</div></a><a class="pagination-nav__link pagination-nav__link--next" href="/docs/security/zookeeper"><div class="pagination-nav__sublabel">Next</div><div class="pagination-nav__label">ZooKeeper Authentication</div></a></nav></div></div><div class="col col--3"><div class="tableOfContents_bqdL thin-scrollbar theme-doc-toc-desktop"><ul class="table-of-contents table-of-contents__left-border"><li><a href="#sasl-configuration-for-bookies" class="table-of-contents__link toc-highlight">SASL configuration for Bookies</a></li><li><a href="#sasl-configuration-for-clients" class="table-of-contents__link toc-highlight">SASL configuration for Clients</a></li><li><a href="#kerberos" class="table-of-contents__link toc-highlight">Authentication using SASL/Kerberos</a><ul><li><a href="#prerequisites" class="table-of-contents__link toc-highlight">Prerequisites</a></li><li><a href="#configuring-bookies" class="table-of-contents__link toc-highlight">Configuring Bookies</a></li><li><a href="#configuring-clients" class="table-of-contents__link toc-highlight">Configuring Clients</a></li></ul></li><li><a href="#enabling-logging-for-sasl" class="table-of-contents__link toc-highlight">Enabling Logging for SASL</a></li></ul></div></div></div></div></main></div></div><footer class="footer footer--dark"><div class="container container-fluid"><div class="row footer__links"><div class="col footer__col"><div class="footer__title">Documentation</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/docs/overview">Overview</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/getting-started/installation">Getting started</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/deployment/manual">Deployment</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/admin/bookies">Administration</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/api/overview">API</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/security/overview">Security</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/development/protocol">Development</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/reference/config">Reference</a></li></ul></div><div class="col footer__col"><div class="footer__title">Community</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/community/mailing-lists">Mailing lists</a></li><li class="footer__item"><a class="footer__link-item" href="/community/slack">Slack</a></li><li class="footer__item"><a href="https://github.com/apache/bookkeeper" target="_blank" rel="noopener noreferrer" class="footer__link-item">Github<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a href="https://twitter.com/asfbookkeeper" target="_blank" rel="noopener noreferrer" class="footer__link-item">Twitter<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div><div class="col footer__col"><div class="footer__title">Project</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/project/who">Who are we?</a></li><li class="footer__item"><a class="footer__link-item" href="/project/bylaws">Bylaws</a></li><li class="footer__item"><a href="https://apache.org/licenses" target="_blank" rel="noopener noreferrer" class="footer__link-item">License<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a class="footer__link-item" href="/project/privacy">Privacy policy</a></li><li class="footer__item"><a href="https://www.apache.org/foundation/sponsorship.html" target="_blank" rel="noopener noreferrer" class="footer__link-item">Sponsorship<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a href="https://www.apache.org/foundation/thanks.html" target="_blank" rel="noopener noreferrer" class="footer__link-item">Thanks<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div></div><div class="footer__bottom text--center"><div class="footer__copyright"><footer class="footer">
         <div class="container">
           <div class="content has-text-centered">
             <p>
@@ -45,7 +45,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/security/tls/index.html b/content/docs/security/tls/index.html
index 3a6e9d5..a91a919 100644
--- a/content/docs/security/tls/index.html
+++ b/content/docs/security/tls/index.html
@@ -4,12 +4,12 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">Encryption and Authentication using TLS | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/security/tls"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.17.0"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.17.0"><meta data-rh="true" name="docsearch:version" content="4.17.0"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.17.0"><meta data-rh="true" property="og:title" content="Encryption and Authentication using TLS | Apache BookKeeper"><meta data-rh="true" name="description" content="Apache BookKeeper allows clients and autorecovery daemons to communicate over TLS, although this is not enabled by default."><meta data-rh="true" property="og:description" content="Apache BookKeeper allows clients and autorecovery daemons to communicate over TLS, although this is not enabled by default."><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/security/tls"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/security/tls" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/security/tls" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
-<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navbar__brand" href="/"><div class="navbar__logo"><img src="/img/bk-logo.svg" alt="Apache Bookkeeper" class="themedImage_ToTc themedImage--light_HNdA"><img src="/img/bk-logo.svg" alt="Apache Bookkeeper" class="themedImage_ToTc themedImage--dark_i4oU"></div><b class="navbar__title text--truncate">Apache BookKeeper</b></a><a class="navbar__item navbar__link" href="/docs/overview/">Documentation</a><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Community</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/community/mailing-lists">Mailing lists</a></li><li><a class="dropdown__link" href="/community/slack">Slack</a></li><li><a href="https://github.com/apache/bookkeeper/issues" target="_blank" rel="noopener noreferrer" class="dropdown__link">Github issues<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a class="dropdown__link" href="/community/releases">Release management</a></li><li><a class="dropdown__link" href="/community/meeting">Community meetings</a></li><li><a class="dropdown__link" href="/community/contributing">Contribution guide</a></li><li><a class="dropdown__link" href="/community/coding-guide">Coding guide</a></li><li><a class="dropdown__link" href="/community/testing">Testing guide</a></li><li><a class="dropdown__link" href="/community/issue-report">Issue report guide</a></li><li><a class="dropdown__link" href="/community/release-guide">Release guide</a></li><li><a class="dropdown__link" href="/community/presentations">Presentations</a></li><li><a class="dropdown__link" href="/community/bookkeeper-proposals">BookKeeper proposals (BP)</a></li></ul></div><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Project</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/project/who">Who are we?</a></li><li><a class="dropdown__link" href="/project/bylaws">Bylaws</a></li><li><a href="https://apache.org/licenses" target="_blank" rel="noopener noreferrer" class="dropdown__link">License<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a class="dropdown__link" href="/project/privacy">Privacy policy</a></li><li><a href="https://www.apache.org/foundation/sponsorship.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Sponsorship<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a href="https://www.apache.org/foundation/thanks.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Thanks<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div></div><div class="navbar__items navbar__items--right"><div class="navbar__item dropdown dropdown--hoverable dropdown--right"><a class="navbar__link" aria-haspopup="true" aria-expanded="false" role="button" href="/docs/admin/autorecovery">4.17.0</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/docs/next/security/tls">Next</a></li><li><a aria-current="page" class="dropdown__link dropdown__link--active" href="/docs/security/tls">4.17.0</a></li><li><a class="dropdown__link" href="/docs/4.16.5/security/tls">4.16.5</a></li><li><a class="dropdown__link" href="/docs/4.15.5/security/tls">4.15.5</a></li><li><a class="dropdown__link" href="/docs/4.14.8/security/tls">4.14.8</a></li><li><a class="dropdown__link" href="/docs/4.13.0/security/tls">4.13.0</a></li><li><a class="dropdown__link" href="/docs/4.12.1/security/tls">4.12.1</a></li><li><a class="dropdown__link" href="/docs/4.11.1/security/tls">4.11.1</a></li><li><a class="dropdown__link" href="/docs/4.10.0/security/tls">4.10.0</a></li><li><a class="dropdown__link" href="/docs/4.9.2/security/tls">4.9.2</a></li><li><a class="dropdown__link" href="/docs/4.8.2/security/tls">4.8.2</a></li><li><a class="dropdown__link" href="/docs/4.7.3/security/tls">4.7.3</a></li><li><a class="dropdown__link" href="/docs/4.6.2/security/tls">4.6.2</a></li><li><a class="dropdown__link" href="/docs/4.5.1/security/tls">4.5.1</a></li></ul></div><a class="navbar__item navbar__link" href="/releases">Download</a><div class="toggle_vylO colorModeToggle_DEke"><button class="clean-btn toggleButton_gllP toggleButtonDisabled_aARS" type="button" disabled="" title="Switch between dark and light mode (currently light mode)" aria-label="Switch between dark and light mode (currently light mode)" aria-live="polite"><svg viewBox="0 0 24 24" width="24" height="24" class="lightToggleIcon_pyhR"><path fill="currentColor" d="M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"></path></svg><svg viewBox="0 0 24 24" width="24" height="24" class="darkToggleIcon_wfgR"><path fill="currentColor" d="M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"></path></svg></button></div><div class="searchBox_ZlJk"></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div></nav><div id="docusaurus_skipToContent_fallback" class="main-wrapper mainWrapper_z2l0 docsWrapper_BCFX"><button aria-label="Scroll back to top" class="clean-btn theme-back-to-top-button backToTopButton_sjWU" type="button"></button><div class="docPage__5DB"><main class="docMainContainer_gTbr docMainContainerEnhanced_Uz_u"><div class="container padding-top--md padding-bottom--lg"><div class="row"><div class="col docItemCol_VOVn"><div class="docItemContainer_Djhp"><article><span class="theme-doc-version-badge badge badge--secondary">Version: 4.17.0</span><div class="tocCollapsible_ETCw theme-doc-toc-mobile tocMobile_ITEo"><button type="button" class="clean-btn tocCollapsibleButton_TO0P">On this page</button></div><div class="theme-doc-markdown markdown"><header><h1>Encryption and Authentication using TLS</h1></header><p>Apache BookKeeper allows clients and autorecovery daemons to communicate over TLS, although this is not enabled by default.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="overview">Overview<a href="#overview" class="hash-link" aria-label="Direct link to Overview" title="Direct link to Overview">​</a></h2><p>The bookies need their own key and certificate in order to use TLS. Clients can optionally provide a key and a certificate
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navbar__brand" href="/"><div class="navbar__logo"><img src="/img/bk-logo.svg" alt="Apache Bookkeeper" class="themedImage_ToTc themedImage--light_HNdA"><img src="/img/bk-logo.svg" alt="Apache Bookkeeper" class="themedImage_ToTc themedImage--dark_i4oU"></div><b class="navbar__title text--truncate">Apache BookKeeper</b></a><a aria-current="page" class="navbar__item navbar__link navbar__link--active" href="/docs/overview/">Documentation</a><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Community</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/community/mailing-lists">Mailing lists</a></li><li><a class="dropdown__link" href="/community/slack">Slack</a></li><li><a href="https://github.com/apache/bookkeeper/issues" target="_blank" rel="noopener noreferrer" class="dropdown__link">Github issues<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a class="dropdown__link" href="/community/releases">Release management</a></li><li><a class="dropdown__link" href="/community/meeting">Community meetings</a></li><li><a class="dropdown__link" href="/community/contributing">Contribution guide</a></li><li><a class="dropdown__link" href="/community/coding-guide">Coding guide</a></li><li><a class="dropdown__link" href="/community/testing">Testing guide</a></li><li><a class="dropdown__link" href="/community/issue-report">Issue report guide</a></li><li><a class="dropdown__link" href="/community/release-guide">Release guide</a></li><li><a class="dropdown__link" href="/community/presentations">Presentations</a></li><li><a class="dropdown__link" href="/community/bookkeeper-proposals">BookKeeper proposals (BP)</a></li></ul></div><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Project</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/project/who">Who are we?</a></li><li><a class="dropdown__link" href="/project/bylaws">Bylaws</a></li><li><a href="https://apache.org/licenses" target="_blank" rel="noopener noreferrer" class="dropdown__link">License<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a class="dropdown__link" href="/project/privacy">Privacy policy</a></li><li><a href="https://www.apache.org/foundation/sponsorship.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Sponsorship<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a href="https://www.apache.org/foundation/thanks.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Thanks<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div></div><div class="navbar__items navbar__items--right"><div class="navbar__item dropdown dropdown--hoverable dropdown--right"><a class="navbar__link" aria-haspopup="true" aria-expanded="false" role="button" href="/docs/overview/">4.17.0</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/docs/next/security/tls">Next</a></li><li><a aria-current="page" class="dropdown__link dropdown__link--active" href="/docs/security/tls">4.17.0</a></li><li><a class="dropdown__link" href="/docs/4.16.5/security/tls">4.16.5</a></li><li><a class="dropdown__link" href="/docs/4.15.5/security/tls">4.15.5</a></li><li><a class="dropdown__link" href="/docs/4.14.8/security/tls">4.14.8</a></li><li><a class="dropdown__link" href="/docs/4.13.0/security/tls">4.13.0</a></li><li><a class="dropdown__link" href="/docs/4.12.1/security/tls">4.12.1</a></li><li><a class="dropdown__link" href="/docs/4.11.1/security/tls">4.11.1</a></li><li><a class="dropdown__link" href="/docs/4.10.0/security/tls">4.10.0</a></li><li><a class="dropdown__link" href="/docs/4.9.2/security/tls">4.9.2</a></li><li><a class="dropdown__link" href="/docs/4.8.2/security/tls">4.8.2</a></li><li><a class="dropdown__link" href="/docs/4.7.3/security/tls">4.7.3</a></li><li><a class="dropdown__link" href="/docs/4.6.2/security/tls">4.6.2</a></li><li><a class="dropdown__link" href="/docs/4.5.1/security/tls">4.5.1</a></li></ul></div><a class="navbar__item navbar__link" href="/releases">Download</a><div class="toggle_vylO colorModeToggle_DEke"><button class="clean-btn toggleButton_gllP toggleButtonDisabled_aARS" type="button" disabled="" title="Switch between dark and light mode (currently light mode)" aria-label="Switch between dark and light mode (currently light mode)" aria-live="polite"><svg viewBox="0 0 24 24" width="24" height="24" class="lightToggleIcon_pyhR"><path fill="currentColor" d="M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"></path></svg><svg viewBox="0 0 24 24" width="24" height="24" class="darkToggleIcon_wfgR"><path fill="currentColor" d="M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"></path></svg></button></div><div class="searchBox_ZlJk"></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div></nav><div id="docusaurus_skipToContent_fallback" class="main-wrapper mainWrapper_z2l0 docsWrapper_BCFX"><button aria-label="Scroll back to top" class="clean-btn theme-back-to-top-button backToTopButton_sjWU" type="button"></button><div class="docPage__5DB"><aside class="theme-doc-sidebar-container docSidebarContainer_b6E3"><div class="sidebarViewport_Xe31"><div class="sidebar_njMd"><nav aria-label="Docs sidebar" class="menu thin-scrollbar menu_SIkG"><ul class="theme-doc-sidebar-menu menu__list"><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-1 menu__list-item"><a class="menu__link" href="/docs/overview/">Overview</a></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/getting-started/installation">Getting started</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/deployment/manual">Deployment</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/admin/bookies">Administration</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/api/overview">API</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret menu__link--active" aria-expanded="true" href="/docs/security/overview">Security</a></div><ul style="display:block;overflow:visible;height:auto" class="menu__list"><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/security/overview">Overview</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link menu__link--active" aria-current="page" tabindex="0" href="/docs/security/tls">TLS Authentication</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/security/sasl">SASL Authentication</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/security/zookeeper">ZooKeeper Authentication</a></li></ul></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/development/protocol">Development</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/reference/config">Reference</a></div></li></ul></nav></div></div></aside><main class="docMainContainer_gTbr"><div class="container padding-top--md padding-bottom--lg"><div class="row"><div class="col docItemCol_VOVn"><div class="docItemContainer_Djhp"><article><span class="theme-doc-version-badge badge badge--secondary">Version: 4.17.0</span><div class="tocCollapsible_ETCw theme-doc-toc-mobile tocMobile_ITEo"><button type="button" class="clean-btn tocCollapsibleButton_TO0P">On this page</button></div><div class="theme-doc-markdown markdown"><header><h1>Encryption and Authentication using TLS</h1></header><p>Apache BookKeeper allows clients and autorecovery daemons to communicate over TLS, although this is not enabled by default.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="overview">Overview<a href="#overview" class="hash-link" aria-label="Direct link to Overview" title="Direct link to Overview">​</a></h2><p>The bookies need their own key and certificate in order to use TLS. Clients can optionally provide a key and a certificate
 for mutual authentication.  Each bookie or client can also be configured with a truststore, which is used to
 determine which certificates (bookie or client identities) to trust (authenticate).</p><p>The truststore can be configured in many ways. To understand the truststore, consider the following two examples:</p><ol><li>the truststore contains one or many certificates;</li><li>it contains a certificate authority (CA).</li></ol><p>In (1), with a list of certificates, the bookie or client will trust any certificate listed in the truststore.
 In (2), with a CA, the bookie or client will trust any certificate that was signed by the CA in the truststore.</p><p>(TBD: benefits)</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="bookie-keystore">Generate TLS key and certificate<a href="#bookie-keystore" class="hash-link" aria-label="Direct link to Generate TLS key and certificate" title="Direct link to Generate TLS key and certificate">​</a></h2><p>The first step of deploying TLS is to generate the key and the certificate for each machine in the cluster.
@@ -40,7 +40,7 @@
 supported. The configs for TLS will be the same as bookies.</p><p>If client authentication is not required by the bookies, the following is a minimal configuration example:</p><div class="language-shell codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-shell codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token assign-left variable" style="color:#36acaa">tlsProvider</span><span class="token operator" style="color:#393A34">=</span><span class="token plain">OpenSSL</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token assign-left variable" style="color:#36acaa">tlsProviderFactoryClass</span><span class="token operator" style="color:#393A34">=</span><span class="token plain">org.apache.bookkeeper.tls.TLSContextFactory</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token assign-left variable" style="color:#36acaa">clientTrustStore</span><span class="token operator" style="color:#393A34">=</span><span class="token plain">/var/private/tls/client.truststore.jks</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token assign-left variable" style="color:#36acaa">clientTrustStorePasswordPath</span><span class="token operator" style="color:#393A34">=</span><span class="token plain">/var/private/tls/client.truststore.passwd</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>If client authentication is required, then a keystore must be created for each client, and the bookies&#x27; truststores must
 trust the certificate in the client&#x27;s keystore. This may be done using commands that are similar to what we used for
 the <a href="#bookie-keystore">bookie keystore</a>.</p><p>And the following must also be configured:</p><div class="language-shell codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-shell codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token assign-left variable" style="color:#36acaa">tlsClientAuthentication</span><span class="token operator" style="color:#393A34">=</span><span class="token plain">true</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token assign-left variable" style="color:#36acaa">clientKeyStore</span><span class="token operator" style="color:#393A34">=</span><span class="token plain">/var/private/tls/client.keystore.jks</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token assign-left variable" style="color:#36acaa">clientKeyStorePasswordPath</span><span class="token operator" style="color:#393A34">=</span><span class="token plain">/var/private/tls/client.keystore.passwd</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>NOTE: it is important to restrict access to the store files and corresponding password files via filesystem permissions.</p><p>(TBD: add example to use tls in bin/bookkeeper script?)</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="enabling-tls-logging">Enabling TLS Logging<a href="#enabling-tls-logging" class="hash-link" aria-label="Direct link to Enabling TLS Logging" title="Direct link to Enabling TLS Logging">​</a></h2><p>You can enable TLS debug logging at the JVM level by starting the bookies and/or clients with <code>javax.net.debug</code> system property. For example:</p><div class="language-shell codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-shell codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">-Djavax.net.debug</span><span class="token operator" style="color:#393A34">=</span><span class="token plain">all</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>You can find more details on this in <a href="http://docs.oracle.com/javase/8/docs/technotes/guides/security/jsse/ReadDebug.html" target="_blank" rel="noopener noreferrer">Oracle documentation</a> on
-<a href="http://docs.oracle.com/javase/8/docs/technotes/guides/security/jsse/ReadDebug.html" target="_blank" rel="noopener noreferrer">debugging SSL/TLS connections</a>.</p></div></article><nav class="pagination-nav docusaurus-mt-lg" aria-label="Docs pages navigation"></nav></div></div><div class="col col--3"><div class="tableOfContents_bqdL thin-scrollbar theme-doc-toc-desktop"><ul class="table-of-contents table-of-contents__left-border"><li><a href="#overview" class="table-of-contents__link toc-highlight">Overview</a></li><li><a href="#bookie-keystore" class="table-of-contents__link toc-highlight">Generate TLS key and certificate</a></li><li><a href="#creating-your-own-ca" class="table-of-contents__link toc-highlight">Creating your own CA</a></li><li><a href="#signing-the-certificate" class="table-of-contents__link toc-highlight">Signing the certificate</a></li><li><a href="#configuring-bookies" class="table-of-contents__link toc-highlight">Configuring Bookies</a></li><li><a href="#configuring-clients" class="table-of-contents__link toc-highlight">Configuring Clients</a></li><li><a href="#enabling-tls-logging" class="table-of-contents__link toc-highlight">Enabling TLS Logging</a></li></ul></div></div></div></div></main></div></div><footer class="footer footer--dark"><div class="container container-fluid"><div class="row footer__links"><div class="col footer__col"><div class="footer__title">Documentation</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/docs/overview">Overview</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/getting-started/installation">Getting started</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/deployment/manual">Deployment</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/admin/bookies">Administration</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/api/overview">API</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/security/overview">Security</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/development/protocol">Development</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/reference/config">Reference</a></li></ul></div><div class="col footer__col"><div class="footer__title">Community</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/community/mailing-lists">Mailing lists</a></li><li class="footer__item"><a class="footer__link-item" href="/community/slack">Slack</a></li><li class="footer__item"><a href="https://github.com/apache/bookkeeper" target="_blank" rel="noopener noreferrer" class="footer__link-item">Github<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a href="https://twitter.com/asfbookkeeper" target="_blank" rel="noopener noreferrer" class="footer__link-item">Twitter<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div><div class="col footer__col"><div class="footer__title">Project</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/project/who">Who are we?</a></li><li class="footer__item"><a class="footer__link-item" href="/project/bylaws">Bylaws</a></li><li class="footer__item"><a href="https://apache.org/licenses" target="_blank" rel="noopener noreferrer" class="footer__link-item">License<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a class="footer__link-item" href="/project/privacy">Privacy policy</a></li><li class="footer__item"><a href="https://www.apache.org/foundation/sponsorship.html" target="_blank" rel="noopener noreferrer" class="footer__link-item">Sponsorship<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a href="https://www.apache.org/foundation/thanks.html" target="_blank" rel="noopener noreferrer" class="footer__link-item">Thanks<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div></div><div class="footer__bottom text--center"><div class="footer__copyright"><footer class="footer">
+<a href="http://docs.oracle.com/javase/8/docs/technotes/guides/security/jsse/ReadDebug.html" target="_blank" rel="noopener noreferrer">debugging SSL/TLS connections</a>.</p></div></article><nav class="pagination-nav docusaurus-mt-lg" aria-label="Docs pages navigation"><a class="pagination-nav__link pagination-nav__link--prev" href="/docs/security/overview"><div class="pagination-nav__sublabel">Previous</div><div class="pagination-nav__label">BookKeeper Security</div></a><a class="pagination-nav__link pagination-nav__link--next" href="/docs/security/sasl"><div class="pagination-nav__sublabel">Next</div><div class="pagination-nav__label">Authentication using SASL</div></a></nav></div></div><div class="col col--3"><div class="tableOfContents_bqdL thin-scrollbar theme-doc-toc-desktop"><ul class="table-of-contents table-of-contents__left-border"><li><a href="#overview" class="table-of-contents__link toc-highlight">Overview</a></li><li><a href="#bookie-keystore" class="table-of-contents__link toc-highlight">Generate TLS key and certificate</a></li><li><a href="#creating-your-own-ca" class="table-of-contents__link toc-highlight">Creating your own CA</a></li><li><a href="#signing-the-certificate" class="table-of-contents__link toc-highlight">Signing the certificate</a></li><li><a href="#configuring-bookies" class="table-of-contents__link toc-highlight">Configuring Bookies</a></li><li><a href="#configuring-clients" class="table-of-contents__link toc-highlight">Configuring Clients</a></li><li><a href="#enabling-tls-logging" class="table-of-contents__link toc-highlight">Enabling TLS Logging</a></li></ul></div></div></div></div></main></div></div><footer class="footer footer--dark"><div class="container container-fluid"><div class="row footer__links"><div class="col footer__col"><div class="footer__title">Documentation</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/docs/overview">Overview</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/getting-started/installation">Getting started</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/deployment/manual">Deployment</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/admin/bookies">Administration</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/api/overview">API</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/security/overview">Security</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/development/protocol">Development</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/reference/config">Reference</a></li></ul></div><div class="col footer__col"><div class="footer__title">Community</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/community/mailing-lists">Mailing lists</a></li><li class="footer__item"><a class="footer__link-item" href="/community/slack">Slack</a></li><li class="footer__item"><a href="https://github.com/apache/bookkeeper" target="_blank" rel="noopener noreferrer" class="footer__link-item">Github<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a href="https://twitter.com/asfbookkeeper" target="_blank" rel="noopener noreferrer" class="footer__link-item">Twitter<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div><div class="col footer__col"><div class="footer__title">Project</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/project/who">Who are we?</a></li><li class="footer__item"><a class="footer__link-item" href="/project/bylaws">Bylaws</a></li><li class="footer__item"><a href="https://apache.org/licenses" target="_blank" rel="noopener noreferrer" class="footer__link-item">License<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a class="footer__link-item" href="/project/privacy">Privacy policy</a></li><li class="footer__item"><a href="https://www.apache.org/foundation/sponsorship.html" target="_blank" rel="noopener noreferrer" class="footer__link-item">Sponsorship<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a href="https://www.apache.org/foundation/thanks.html" target="_blank" rel="noopener noreferrer" class="footer__link-item">Thanks<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div></div><div class="footer__bottom text--center"><div class="footer__copyright"><footer class="footer">
         <div class="container">
           <div class="content has-text-centered">
             <p>
@@ -53,7 +53,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/docs/security/zookeeper/index.html b/content/docs/security/zookeeper/index.html
index d4b3200..3170d8d 100644
--- a/content/docs/security/zookeeper/index.html
+++ b/content/docs/security/zookeeper/index.html
@@ -4,19 +4,19 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">ZooKeeper Authentication | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/docs/security/zookeeper"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="4.17.0"><meta data-rh="true" name="docusaurus_tag" content="docs-default-4.17.0"><meta data-rh="true" name="docsearch:version" content="4.17.0"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-4.17.0"><meta data-rh="true" property="og:title" content="ZooKeeper Authentication | Apache BookKeeper"><meta data-rh="true" name="description" content="New Clusters"><meta data-rh="true" property="og:description" content="New Clusters"><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/docs/security/zookeeper"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/security/zookeeper" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/docs/security/zookeeper" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
-<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navbar__brand" href="/"><div class="navbar__logo"><img src="/img/bk-logo.svg" alt="Apache Bookkeeper" class="themedImage_ToTc themedImage--light_HNdA"><img src="/img/bk-logo.svg" alt="Apache Bookkeeper" class="themedImage_ToTc themedImage--dark_i4oU"></div><b class="navbar__title text--truncate">Apache BookKeeper</b></a><a class="navbar__item navbar__link" href="/docs/overview/">Documentation</a><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Community</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/community/mailing-lists">Mailing lists</a></li><li><a class="dropdown__link" href="/community/slack">Slack</a></li><li><a href="https://github.com/apache/bookkeeper/issues" target="_blank" rel="noopener noreferrer" class="dropdown__link">Github issues<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a class="dropdown__link" href="/community/releases">Release management</a></li><li><a class="dropdown__link" href="/community/meeting">Community meetings</a></li><li><a class="dropdown__link" href="/community/contributing">Contribution guide</a></li><li><a class="dropdown__link" href="/community/coding-guide">Coding guide</a></li><li><a class="dropdown__link" href="/community/testing">Testing guide</a></li><li><a class="dropdown__link" href="/community/issue-report">Issue report guide</a></li><li><a class="dropdown__link" href="/community/release-guide">Release guide</a></li><li><a class="dropdown__link" href="/community/presentations">Presentations</a></li><li><a class="dropdown__link" href="/community/bookkeeper-proposals">BookKeeper proposals (BP)</a></li></ul></div><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Project</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/project/who">Who are we?</a></li><li><a class="dropdown__link" href="/project/bylaws">Bylaws</a></li><li><a href="https://apache.org/licenses" target="_blank" rel="noopener noreferrer" class="dropdown__link">License<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a class="dropdown__link" href="/project/privacy">Privacy policy</a></li><li><a href="https://www.apache.org/foundation/sponsorship.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Sponsorship<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a href="https://www.apache.org/foundation/thanks.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Thanks<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div></div><div class="navbar__items navbar__items--right"><div class="navbar__item dropdown dropdown--hoverable dropdown--right"><a class="navbar__link" aria-haspopup="true" aria-expanded="false" role="button" href="/docs/admin/autorecovery">4.17.0</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/docs/next/security/zookeeper">Next</a></li><li><a aria-current="page" class="dropdown__link dropdown__link--active" href="/docs/security/zookeeper">4.17.0</a></li><li><a class="dropdown__link" href="/docs/4.16.5/security/zookeeper">4.16.5</a></li><li><a class="dropdown__link" href="/docs/4.15.5/security/zookeeper">4.15.5</a></li><li><a class="dropdown__link" href="/docs/4.14.8/security/zookeeper">4.14.8</a></li><li><a class="dropdown__link" href="/docs/4.13.0/security/zookeeper">4.13.0</a></li><li><a class="dropdown__link" href="/docs/4.12.1/security/zookeeper">4.12.1</a></li><li><a class="dropdown__link" href="/docs/4.11.1/security/zookeeper">4.11.1</a></li><li><a class="dropdown__link" href="/docs/4.10.0/security/zookeeper">4.10.0</a></li><li><a class="dropdown__link" href="/docs/4.9.2/security/zookeeper">4.9.2</a></li><li><a class="dropdown__link" href="/docs/4.8.2/security/zookeeper">4.8.2</a></li><li><a class="dropdown__link" href="/docs/4.7.3/security/zookeeper">4.7.3</a></li><li><a class="dropdown__link" href="/docs/4.6.2/security/zookeeper">4.6.2</a></li><li><a class="dropdown__link" href="/docs/4.5.1/security/zookeeper">4.5.1</a></li></ul></div><a class="navbar__item navbar__link" href="/releases">Download</a><div class="toggle_vylO colorModeToggle_DEke"><button class="clean-btn toggleButton_gllP toggleButtonDisabled_aARS" type="button" disabled="" title="Switch between dark and light mode (currently light mode)" aria-label="Switch between dark and light mode (currently light mode)" aria-live="polite"><svg viewBox="0 0 24 24" width="24" height="24" class="lightToggleIcon_pyhR"><path fill="currentColor" d="M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"></path></svg><svg viewBox="0 0 24 24" width="24" height="24" class="darkToggleIcon_wfgR"><path fill="currentColor" d="M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"></path></svg></button></div><div class="searchBox_ZlJk"></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div></nav><div id="docusaurus_skipToContent_fallback" class="main-wrapper mainWrapper_z2l0 docsWrapper_BCFX"><button aria-label="Scroll back to top" class="clean-btn theme-back-to-top-button backToTopButton_sjWU" type="button"></button><div class="docPage__5DB"><main class="docMainContainer_gTbr docMainContainerEnhanced_Uz_u"><div class="container padding-top--md padding-bottom--lg"><div class="row"><div class="col docItemCol_VOVn"><div class="docItemContainer_Djhp"><article><span class="theme-doc-version-badge badge badge--secondary">Version: 4.17.0</span><div class="tocCollapsible_ETCw theme-doc-toc-mobile tocMobile_ITEo"><button type="button" class="clean-btn tocCollapsibleButton_TO0P">On this page</button></div><div class="theme-doc-markdown markdown"><header><h1>ZooKeeper Authentication</h1></header><h2 class="anchor anchorWithStickyNavbar_LWe7" id="new-clusters">New Clusters<a href="#new-clusters" class="hash-link" aria-label="Direct link to New Clusters" title="Direct link to New Clusters">​</a></h2><p>To enable <code>ZooKeeper</code> authentication on Bookies or Clients, there are two necessary steps:</p><ol><li>Create a <code>JAAS</code> login file and set the appropriate system property to point to it as described in <a href="/docs/security/sasl#notes">GSSAPI (Kerberos)</a>.</li><li>Set the configuration property <code>zkEnableSecurity</code> in each bookie to <code>true</code>.</li></ol><p>The metadata stored in <code>ZooKeeper</code> is such that only certain clients will be able to modify and read the corresponding znodes.
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navbar__brand" href="/"><div class="navbar__logo"><img src="/img/bk-logo.svg" alt="Apache Bookkeeper" class="themedImage_ToTc themedImage--light_HNdA"><img src="/img/bk-logo.svg" alt="Apache Bookkeeper" class="themedImage_ToTc themedImage--dark_i4oU"></div><b class="navbar__title text--truncate">Apache BookKeeper</b></a><a aria-current="page" class="navbar__item navbar__link navbar__link--active" href="/docs/overview/">Documentation</a><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Community</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/community/mailing-lists">Mailing lists</a></li><li><a class="dropdown__link" href="/community/slack">Slack</a></li><li><a href="https://github.com/apache/bookkeeper/issues" target="_blank" rel="noopener noreferrer" class="dropdown__link">Github issues<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a class="dropdown__link" href="/community/releases">Release management</a></li><li><a class="dropdown__link" href="/community/meeting">Community meetings</a></li><li><a class="dropdown__link" href="/community/contributing">Contribution guide</a></li><li><a class="dropdown__link" href="/community/coding-guide">Coding guide</a></li><li><a class="dropdown__link" href="/community/testing">Testing guide</a></li><li><a class="dropdown__link" href="/community/issue-report">Issue report guide</a></li><li><a class="dropdown__link" href="/community/release-guide">Release guide</a></li><li><a class="dropdown__link" href="/community/presentations">Presentations</a></li><li><a class="dropdown__link" href="/community/bookkeeper-proposals">BookKeeper proposals (BP)</a></li></ul></div><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Project</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/project/who">Who are we?</a></li><li><a class="dropdown__link" href="/project/bylaws">Bylaws</a></li><li><a href="https://apache.org/licenses" target="_blank" rel="noopener noreferrer" class="dropdown__link">License<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a class="dropdown__link" href="/project/privacy">Privacy policy</a></li><li><a href="https://www.apache.org/foundation/sponsorship.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Sponsorship<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a href="https://www.apache.org/foundation/thanks.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Thanks<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div></div><div class="navbar__items navbar__items--right"><div class="navbar__item dropdown dropdown--hoverable dropdown--right"><a class="navbar__link" aria-haspopup="true" aria-expanded="false" role="button" href="/docs/overview/">4.17.0</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/docs/next/security/zookeeper">Next</a></li><li><a aria-current="page" class="dropdown__link dropdown__link--active" href="/docs/security/zookeeper">4.17.0</a></li><li><a class="dropdown__link" href="/docs/4.16.5/security/zookeeper">4.16.5</a></li><li><a class="dropdown__link" href="/docs/4.15.5/security/zookeeper">4.15.5</a></li><li><a class="dropdown__link" href="/docs/4.14.8/security/zookeeper">4.14.8</a></li><li><a class="dropdown__link" href="/docs/4.13.0/security/zookeeper">4.13.0</a></li><li><a class="dropdown__link" href="/docs/4.12.1/security/zookeeper">4.12.1</a></li><li><a class="dropdown__link" href="/docs/4.11.1/security/zookeeper">4.11.1</a></li><li><a class="dropdown__link" href="/docs/4.10.0/security/zookeeper">4.10.0</a></li><li><a class="dropdown__link" href="/docs/4.9.2/security/zookeeper">4.9.2</a></li><li><a class="dropdown__link" href="/docs/4.8.2/security/zookeeper">4.8.2</a></li><li><a class="dropdown__link" href="/docs/4.7.3/security/zookeeper">4.7.3</a></li><li><a class="dropdown__link" href="/docs/4.6.2/security/zookeeper">4.6.2</a></li><li><a class="dropdown__link" href="/docs/4.5.1/security/zookeeper">4.5.1</a></li></ul></div><a class="navbar__item navbar__link" href="/releases">Download</a><div class="toggle_vylO colorModeToggle_DEke"><button class="clean-btn toggleButton_gllP toggleButtonDisabled_aARS" type="button" disabled="" title="Switch between dark and light mode (currently light mode)" aria-label="Switch between dark and light mode (currently light mode)" aria-live="polite"><svg viewBox="0 0 24 24" width="24" height="24" class="lightToggleIcon_pyhR"><path fill="currentColor" d="M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"></path></svg><svg viewBox="0 0 24 24" width="24" height="24" class="darkToggleIcon_wfgR"><path fill="currentColor" d="M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"></path></svg></button></div><div class="searchBox_ZlJk"></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div></nav><div id="docusaurus_skipToContent_fallback" class="main-wrapper mainWrapper_z2l0 docsWrapper_BCFX"><button aria-label="Scroll back to top" class="clean-btn theme-back-to-top-button backToTopButton_sjWU" type="button"></button><div class="docPage__5DB"><aside class="theme-doc-sidebar-container docSidebarContainer_b6E3"><div class="sidebarViewport_Xe31"><div class="sidebar_njMd"><nav aria-label="Docs sidebar" class="menu thin-scrollbar menu_SIkG"><ul class="theme-doc-sidebar-menu menu__list"><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-1 menu__list-item"><a class="menu__link" href="/docs/overview/">Overview</a></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/getting-started/installation">Getting started</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/deployment/manual">Deployment</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/admin/bookies">Administration</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/api/overview">API</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret menu__link--active" aria-expanded="true" href="/docs/security/overview">Security</a></div><ul style="display:block;overflow:visible;height:auto" class="menu__list"><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/security/overview">Overview</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/security/tls">TLS Authentication</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/security/sasl">SASL Authentication</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link menu__link--active" aria-current="page" tabindex="0" href="/docs/security/zookeeper">ZooKeeper Authentication</a></li></ul></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/development/protocol">Development</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/reference/config">Reference</a></div></li></ul></nav></div></div></aside><main class="docMainContainer_gTbr"><div class="container padding-top--md padding-bottom--lg"><div class="row"><div class="col docItemCol_VOVn"><div class="docItemContainer_Djhp"><article><span class="theme-doc-version-badge badge badge--secondary">Version: 4.17.0</span><div class="tocCollapsible_ETCw theme-doc-toc-mobile tocMobile_ITEo"><button type="button" class="clean-btn tocCollapsibleButton_TO0P">On this page</button></div><div class="theme-doc-markdown markdown"><header><h1>ZooKeeper Authentication</h1></header><h2 class="anchor anchorWithStickyNavbar_LWe7" id="new-clusters">New Clusters<a href="#new-clusters" class="hash-link" aria-label="Direct link to New Clusters" title="Direct link to New Clusters">​</a></h2><p>To enable <code>ZooKeeper</code> authentication on Bookies or Clients, there are two necessary steps:</p><ol><li>Create a <code>JAAS</code> login file and set the appropriate system property to point to it as described in <a href="/docs/security/sasl#notes">GSSAPI (Kerberos)</a>.</li><li>Set the configuration property <code>zkEnableSecurity</code> in each bookie to <code>true</code>.</li></ol><p>The metadata stored in <code>ZooKeeper</code> is such that only certain clients will be able to modify and read the corresponding znodes.
 The rationale behind this decision is that the data stored in ZooKeeper is not sensitive, but inappropriate manipulation of znodes can cause cluster
 disruption.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="migrating-clusters">Migrating Clusters<a href="#migrating-clusters" class="hash-link" aria-label="Direct link to Migrating Clusters" title="Direct link to Migrating Clusters">​</a></h2><p>If you are running a version of BookKeeper that does not support security or simply with security disabled, and you want to make the cluster secure,
 then you need to execute the following steps to enable ZooKeeper authentication with minimal disruption to your operations.</p><ol><li>Perform a rolling restart setting the <code>JAAS</code> login file, which enables bookie or clients to authenticate. At the end of the rolling restart,
 bookies (or clients) are able to manipulate znodes with strict ACLs, but they will not create znodes with those ACLs.</li><li>Perform a second rolling restart of bookies, this time setting the configuration parameter <code>zkEnableSecurity</code> to true, which enables the use
 of secure ACLs when creating znodes.</li><li>Currently we don&#x27;t have provide a tool to set acls on old znodes. You are recommended to set it manually using ZooKeeper tools.</li></ol><p>It is also possible to turn off authentication in a secured cluster. To do it, follow these steps:</p><ol><li>Perform a rolling restart of bookies setting the <code>JAAS</code> login file, which enable bookies to authenticate, but setting <code>zkEnableSecurity</code> to <code>false</code>.
 At the end of rolling restart, bookies stop creating znodes with secure ACLs, but are still able to authenticate and manipulate all znodes.</li><li>You can use ZooKeeper tools to manually reset all ACLs under the znode set in <code>zkLedgersRootPath</code>, which defaults to <code>/ledgers</code>.</li><li>Perform a second rolling restart of bookies, this time omitting the system property that sets the <code>JAAS</code> login file.</li></ol><h2 class="anchor anchorWithStickyNavbar_LWe7" id="migrating-the-zookeeper-ensemble">Migrating the ZooKeeper ensemble<a href="#migrating-the-zookeeper-ensemble" class="hash-link" aria-label="Direct link to Migrating the ZooKeeper ensemble" title="Direct link to Migrating the ZooKeeper ensemble">​</a></h2><p>It is also necessary to enable authentication on the <code>ZooKeeper</code> ensemble. To do it, we need to perform a rolling restart of the ensemble and
-set a few properties. Please refer to the ZooKeeper documentation for more details.</p><ol><li><a href="http://zookeeper.apache.org/doc/r3.4.6/zookeeperProgrammers.html#sc_ZooKeeperAccessControl" target="_blank" rel="noopener noreferrer">Apache ZooKeeper Documentation</a></li><li><a href="https://cwiki.apache.org/confluence/display/ZOOKEEPER/Zookeeper+and+SASL" target="_blank" rel="noopener noreferrer">Apache ZooKeeper Wiki</a></li></ol></div></article><nav class="pagination-nav docusaurus-mt-lg" aria-label="Docs pages navigation"></nav></div></div><div class="col col--3"><div class="tableOfContents_bqdL thin-scrollbar theme-doc-toc-desktop"><ul class="table-of-contents table-of-contents__left-border"><li><a href="#new-clusters" class="table-of-contents__link toc-highlight">New Clusters</a></li><li><a href="#migrating-clusters" class="table-of-contents__link toc-highlight">Migrating Clusters</a></li><li><a href="#migrating-the-zookeeper-ensemble" class="table-of-contents__link toc-highlight">Migrating the ZooKeeper ensemble</a></li></ul></div></div></div></div></main></div></div><footer class="footer footer--dark"><div class="container container-fluid"><div class="row footer__links"><div class="col footer__col"><div class="footer__title">Documentation</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/docs/overview">Overview</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/getting-started/installation">Getting started</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/deployment/manual">Deployment</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/admin/bookies">Administration</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/api/overview">API</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/security/overview">Security</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/development/protocol">Development</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/reference/config">Reference</a></li></ul></div><div class="col footer__col"><div class="footer__title">Community</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/community/mailing-lists">Mailing lists</a></li><li class="footer__item"><a class="footer__link-item" href="/community/slack">Slack</a></li><li class="footer__item"><a href="https://github.com/apache/bookkeeper" target="_blank" rel="noopener noreferrer" class="footer__link-item">Github<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a href="https://twitter.com/asfbookkeeper" target="_blank" rel="noopener noreferrer" class="footer__link-item">Twitter<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div><div class="col footer__col"><div class="footer__title">Project</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/project/who">Who are we?</a></li><li class="footer__item"><a class="footer__link-item" href="/project/bylaws">Bylaws</a></li><li class="footer__item"><a href="https://apache.org/licenses" target="_blank" rel="noopener noreferrer" class="footer__link-item">License<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a class="footer__link-item" href="/project/privacy">Privacy policy</a></li><li class="footer__item"><a href="https://www.apache.org/foundation/sponsorship.html" target="_blank" rel="noopener noreferrer" class="footer__link-item">Sponsorship<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a href="https://www.apache.org/foundation/thanks.html" target="_blank" rel="noopener noreferrer" class="footer__link-item">Thanks<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div></div><div class="footer__bottom text--center"><div class="footer__copyright"><footer class="footer">
+set a few properties. Please refer to the ZooKeeper documentation for more details.</p><ol><li><a href="http://zookeeper.apache.org/doc/r3.4.6/zookeeperProgrammers.html#sc_ZooKeeperAccessControl" target="_blank" rel="noopener noreferrer">Apache ZooKeeper Documentation</a></li><li><a href="https://cwiki.apache.org/confluence/display/ZOOKEEPER/Zookeeper+and+SASL" target="_blank" rel="noopener noreferrer">Apache ZooKeeper Wiki</a></li></ol></div></article><nav class="pagination-nav docusaurus-mt-lg" aria-label="Docs pages navigation"><a class="pagination-nav__link pagination-nav__link--prev" href="/docs/security/sasl"><div class="pagination-nav__sublabel">Previous</div><div class="pagination-nav__label">Authentication using SASL</div></a><a class="pagination-nav__link pagination-nav__link--next" href="/docs/development/protocol"><div class="pagination-nav__sublabel">Next</div><div class="pagination-nav__label">The BookKeeper protocol</div></a></nav></div></div><div class="col col--3"><div class="tableOfContents_bqdL thin-scrollbar theme-doc-toc-desktop"><ul class="table-of-contents table-of-contents__left-border"><li><a href="#new-clusters" class="table-of-contents__link toc-highlight">New Clusters</a></li><li><a href="#migrating-clusters" class="table-of-contents__link toc-highlight">Migrating Clusters</a></li><li><a href="#migrating-the-zookeeper-ensemble" class="table-of-contents__link toc-highlight">Migrating the ZooKeeper ensemble</a></li></ul></div></div></div></div></main></div></div><footer class="footer footer--dark"><div class="container container-fluid"><div class="row footer__links"><div class="col footer__col"><div class="footer__title">Documentation</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/docs/overview">Overview</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/getting-started/installation">Getting started</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/deployment/manual">Deployment</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/admin/bookies">Administration</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/api/overview">API</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/security/overview">Security</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/development/protocol">Development</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/reference/config">Reference</a></li></ul></div><div class="col footer__col"><div class="footer__title">Community</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/community/mailing-lists">Mailing lists</a></li><li class="footer__item"><a class="footer__link-item" href="/community/slack">Slack</a></li><li class="footer__item"><a href="https://github.com/apache/bookkeeper" target="_blank" rel="noopener noreferrer" class="footer__link-item">Github<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a href="https://twitter.com/asfbookkeeper" target="_blank" rel="noopener noreferrer" class="footer__link-item">Twitter<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div><div class="col footer__col"><div class="footer__title">Project</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/project/who">Who are we?</a></li><li class="footer__item"><a class="footer__link-item" href="/project/bylaws">Bylaws</a></li><li class="footer__item"><a href="https://apache.org/licenses" target="_blank" rel="noopener noreferrer" class="footer__link-item">License<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a class="footer__link-item" href="/project/privacy">Privacy policy</a></li><li class="footer__item"><a href="https://www.apache.org/foundation/sponsorship.html" target="_blank" rel="noopener noreferrer" class="footer__link-item">Sponsorship<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a href="https://www.apache.org/foundation/thanks.html" target="_blank" rel="noopener noreferrer" class="footer__link-item">Thanks<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div></div><div class="footer__bottom text--center"><div class="footer__copyright"><footer class="footer">
         <div class="container">
           <div class="content has-text-centered">
             <p>
@@ -29,7 +29,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/index.html b/content/index.html
index 8c57f0d..44b25d8 100644
--- a/content/index.html
+++ b/content/index.html
@@ -4,12 +4,12 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">Hello from Apache BookKeeper | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docusaurus_tag" content="default"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docsearch:docusaurus_tag" content="default"><meta data-rh="true" property="og:title" content="Hello from Apache BookKeeper | Apache BookKeeper"><meta data-rh="true" name="description" content="A scalable, fault-tolerant, and low-latency storage service optimized for real-time workloads&gt;"><meta data-rh="true" property="og:description" content="A scalable, fault-tolerant, and low-latency storage service optimized for real-time workloads&gt;"><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/" hreflang="x-default"><script data-rh="true">function maybeInsertBanner(){window.__DOCUSAURUS_INSERT_BASEURL_BANNER&&insertBanner()}function insertBanner(){var n=document.getElementById("docusaurus-base-url-issue-banner-container");if(n){n.innerHTML='\n<div id="docusaurus-base-url-issue-banner" style="border: thick solid red; background-color: rgb(255, 230, 179); margin: 20px; padding: 20px; font-size: 20px;">\n   <p style="font-weight: bold; font-size: 30px;">Your Docusaurus site did not load properly.</p>\n   <p>A very common reason is a wrong site <a href="https://docusaurus.io/docs/docusaurus.config.js/#baseUrl" style="font-weight: bold;">baseUrl configuration</a>.</p>\n   <p>Current configured baseUrl = <span style="font-weight: bold; color: red;">/</span>  (default value)</p>\n   <p>We suggest trying baseUrl = <span id="docusaurus-base-url-issue-banner-suggestion-container" style="font-weight: bold; color: green;"></span></p>\n</div>\n';var e=document.getElementById("docusaurus-base-url-issue-banner-suggestion-container"),s=window.location.pathname,r="/"===s.substr(-1)?s:s+"/";e.innerHTML=r}}window.__DOCUSAURUS_INSERT_BASEURL_BANNER=!0,document.addEventListener("DOMContentLoaded",maybeInsertBanner)</script><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
-<div id="docusaurus-base-url-issue-banner-container"></div><div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navbar__brand" href="/"><div class="navbar__logo"><img src="/img/bk-logo.svg" alt="Apache Bookkeeper" class="themedImage_ToTc themedImage--light_HNdA"><img src="/img/bk-logo.svg" alt="Apache Bookkeeper" class="themedImage_ToTc themedImage--dark_i4oU"></div><b class="navbar__title text--truncate">Apache BookKeeper</b></a><a class="navbar__item navbar__link" href="/docs/overview/">Documentation</a><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Community</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/community/mailing-lists">Mailing lists</a></li><li><a class="dropdown__link" href="/community/slack">Slack</a></li><li><a href="https://github.com/apache/bookkeeper/issues" target="_blank" rel="noopener noreferrer" class="dropdown__link">Github issues<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a class="dropdown__link" href="/community/releases">Release management</a></li><li><a class="dropdown__link" href="/community/meeting">Community meetings</a></li><li><a class="dropdown__link" href="/community/contributing">Contribution guide</a></li><li><a class="dropdown__link" href="/community/coding-guide">Coding guide</a></li><li><a class="dropdown__link" href="/community/testing">Testing guide</a></li><li><a class="dropdown__link" href="/community/issue-report">Issue report guide</a></li><li><a class="dropdown__link" href="/community/release-guide">Release guide</a></li><li><a class="dropdown__link" href="/community/presentations">Presentations</a></li><li><a class="dropdown__link" href="/community/bookkeeper-proposals">BookKeeper proposals (BP)</a></li></ul></div><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Project</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/project/who">Who are we?</a></li><li><a class="dropdown__link" href="/project/bylaws">Bylaws</a></li><li><a href="https://apache.org/licenses" target="_blank" rel="noopener noreferrer" class="dropdown__link">License<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a class="dropdown__link" href="/project/privacy">Privacy policy</a></li><li><a href="https://www.apache.org/foundation/sponsorship.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Sponsorship<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a href="https://www.apache.org/foundation/thanks.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Thanks<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div></div><div class="navbar__items navbar__items--right"><div class="navbar__item dropdown dropdown--hoverable dropdown--right"><a class="navbar__link" aria-haspopup="true" aria-expanded="false" role="button" href="/docs/admin/autorecovery">4.17.0</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/docs/next/overview/">Next</a></li><li><a class="dropdown__link" href="/docs/admin/autorecovery">4.17.0</a></li><li><a class="dropdown__link" href="/docs/4.16.5/overview/">4.16.5</a></li><li><a class="dropdown__link" href="/docs/4.15.5/overview/">4.15.5</a></li><li><a class="dropdown__link" href="/docs/4.14.8/overview/">4.14.8</a></li><li><a class="dropdown__link" href="/docs/4.13.0/overview/">4.13.0</a></li><li><a class="dropdown__link" href="/docs/4.12.1/overview/">4.12.1</a></li><li><a class="dropdown__link" href="/docs/4.11.1/overview/">4.11.1</a></li><li><a class="dropdown__link" href="/docs/4.10.0/overview/">4.10.0</a></li><li><a class="dropdown__link" href="/docs/4.9.2/overview/">4.9.2</a></li><li><a class="dropdown__link" href="/docs/4.8.2/overview/">4.8.2</a></li><li><a class="dropdown__link" href="/docs/4.7.3/overview/">4.7.3</a></li><li><a class="dropdown__link" href="/docs/4.6.2/overview/">4.6.2</a></li><li><a class="dropdown__link" href="/docs/4.5.1/overview/">4.5.1</a></li></ul></div><a class="navbar__item navbar__link" href="/releases">Download</a><div class="toggle_vylO colorModeToggle_DEke"><button class="clean-btn toggleButton_gllP toggleButtonDisabled_aARS" type="button" disabled="" title="Switch between dark and light mode (currently light mode)" aria-label="Switch between dark and light mode (currently light mode)" aria-live="polite"><svg viewBox="0 0 24 24" width="24" height="24" class="lightToggleIcon_pyhR"><path fill="currentColor" d="M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"></path></svg><svg viewBox="0 0 24 24" width="24" height="24" class="darkToggleIcon_wfgR"><path fill="currentColor" d="M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"></path></svg></button></div><div class="searchBox_ZlJk"></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div></nav><div id="docusaurus_skipToContent_fallback" class="main-wrapper mainWrapper_z2l0"><div class="hero"><div class="container"><div class="row" style="align-items:center"><div class="col col--6"><h1 class="hero__title">Apache BookKeeper</h1><p class="hero__subtitle">A scalable, fault-tolerant, and low-latency storage service optimized for real-time workloads</p><div><a href="docs/getting-started/installation"><button class="button button--primary button--lg margin-right--sm" href="docs/getting-started/installation">Get Started</button></a></div></div><div class="col col--6 padding--lg"><svg width="100%" height="100%" viewBox="-291 -716 801 801" xmlns="http://www.w3.org/2000/svg"><defs><linearGradient id="a" x2="1" gradientTransform="rotate(60.634 613.311 -434.773) scale(877.41)" gradientUnits="userSpaceOnUse"><stop stop-color="#683b1b" offset="0"></stop><stop stop-color="#a1612f" offset="0.371"></stop><stop stop-color="#efa363" offset="1"></stop></linearGradient><linearGradient id="b" x2="1" gradientTransform="rotate(60.634 497.08 -280.197) scale(723.67)" gradientUnits="userSpaceOnUse"><stop stop-color="#683b1b" offset="0"></stop><stop stop-color="#a1612f" offset="0.371"></stop><stop stop-color="#efa363" offset="1"></stop></linearGradient><linearGradient id="c" x2="1" gradientTransform="rotate(60.634 595.444 -438.72) scale(840.9)" gradientUnits="userSpaceOnUse"><stop stop-color="#683b1b" offset="0"></stop><stop stop-color="#a1612f" offset="0.516"></stop><stop stop-color="#bd753d" offset="1"></stop></linearGradient></defs><g fill="none"><title>Canvas 1</title><title>Layer 1</title><path d="M470.15 53.898c-14.119-13.501-31.99-29.638-56.016-48.996 1.107-.237 2.352-.298 3.337-.082 2.395.502 13.553 6.986 15.564 7.111 2.01.139 0-3.558-2.396-5.585-2.395-2.045-11.974-5.221-15.179-6.623-3.161-1.39 4.788-4.44 6.799-6.731 2.01-2.289.384-9.294-1.58-8.53-2.01.76-8.38 9.033-9.193 10.059-.813 1.005-2.011.623-1.198-5.099.813-5.724-2.777-12.45-4.788-11.448-2.01 1.022-7.567 9.537-9.578 9.68-2.01.12-1.198-20.606-1.58-22.008-.43-1.404-1.197 2.289-3.589 1.65-2.395-.626-1.63-9.021-4.788-8.639-3.208.382-8.38 13.978-10.01 13.093-1.579-.885-2.395-16.787-2.395-16.787C366.377-49.997 271.8-116 271.8-116c-101.76-66.766-396.27-210.22-399.87-210.98-3.59-.764-10.773.38-10.773.38s9.578 4.198 10.773 5.724c1.198 1.525-13.168 0-13.168 0-1.964-.26-3.162 8.393-5.172 12.97-2.01 4.58 5.172 4.457 5.172 4.457 16.377 3.296 20.783 5.846 18.387 6.99-2.395 1.145-17.574-2.029-23.178-3.05-5.554-1.024 0 13.23 5.988 21.242 5.986 8.012 17.96 22.509 31.94 24.418 13.981 1.906 18.34 2.411 18.34 3.678 0 1.281-7.183 1.525-13.553 1.022-6.37-.503-7.183.503-4.787 3.558 2.395 3.05 157.22 108.99 171.2 117.64 13.984 8.635 14.75 7.75 38.31 9.154 23.563 1.39 3.974 3.938-5.986 3.679-9.963-.246-11.589 1.784-7.999 2.548 3.593.764 14.366.641 15.18 1.524.812.887-9.964.887-12.785 1.022-2.78.125-1.582-.135 10.773 6.35 12.402 6.483 130.93 79.492 152.05 86.362 21.167 6.868 37.115 8.133 52.294 8.254 15.18.139 7.568 2.289 3.975 3.31-3.593 1.026-25.526.765-30.7.383-5.218-.383-11.203 1.021.77 2.288 11.974 1.265 32.325 8.652 36.346 8.513 3.975-.12 17.527-1.906 25.526-2.791 7.996-.883 7.183 1.907 2.01 4.195-5.218 2.289-20.353 2.03-31.126 1.907-10.776-.12 7.564 3.558 24.326 4.58 16.76 1.023 34.72-5.463 44.298-9.542 9.578-4.072 2.395 1.911 2.395 1.911-4.406 3.174-26.72 10.299-32.706 11.705-5.985 1.386.77 2.15 9.147 1.768 8.38-.382 21.552-7.11 23.944-8.516 2.395-1.403 2.824 2.41-.385 8.011-3.208 5.603 5.989 16.407 7.568 16.668 1.63.241 1.63-3.956.431-7.77-1.197-3.816 5.173-14.361 7.568-16.91 2.395-2.55 5.172.379 5.172 1.143s.432 9.662 0 12.715c-.384 3.053 12.402 12.85 15.564 13.352 3.209.52-1.197-5.2-4.787-9.018-3.593-3.813-1.198-9.676-1.198-9.676 3.208 2.046 8.809 6.366 8.809 6.366s.97-1.368.835-4.093c12.818 10.398 24.807 20.41 36.277 30.157zM-106.36-359.53l-140.5 7.817 3.04 3.234c.75.787.028 1.422-2.155 1.907-2.21.485-5.36.84-9.447 1.074-3.997.23-7.414.237-10.226.038-2.799-.199-4.512-.704-5.132-1.508l-7.298-9.426c-.541-.706.24-1.265 2.36-1.692 2.108-.42 5.048-.734 8.816-.943 3.68-.197 6.81-.215 9.416-.044 2.61.163 4.237.593 4.894 1.289l2.817 2.994 105.78-5.824-9.922-2.194c-1.601-.344-2.552-.613-2.874-.809-.553-.345.178-.71 2.217-1.1 2.03-.378 4.819-.667 8.353-.856 3.208-.167 5.894-.222 8.052-.14 2.17.087 4.475.383 6.942.892zM-69.059-339.86l-157.74 9.408 3.903 4.135c.96 1.016.237 1.836-2.208 2.446-2.436.62-5.976 1.064-10.595 1.345-4.525.276-8.403.276-11.636.006-3.218-.271-5.229-.929-6.02-1.957l-9.322-12.033c-.681-.89.138-1.6 2.483-2.128 2.32-.522 5.601-.91 9.823-1.15 4.127-.243 7.658-.25 10.6-.03 2.962.217 4.857.764 5.686 1.643l3.59 3.795 118.56-6.98-11.68-2.798c-1.89-.429-3.012-.777-3.396-1.024-.717-.432.043-.889 2.257-1.36 2.205-.474 5.273-.82 9.21-1.047 3.583-.207 6.598-.252 9.046-.15 2.455.111 5.141.496 8.034 1.14z" fill="#a7a9ac"></path><path d="m-97.706-299.84-37.775 2.516a691.394 691.394 0 0 1-68.408 1.144c-22.584-.732-35.224-3.024-38.032-6.775-1.58-2.1.078-4.033 4.869-5.808 4.731-1.744 14.29-3.699 28.582-5.853 14.059-2.118 29.398-3.686 46.137-4.724l34.138-2.134c19.935-1.237 40.299-1.603 61.369-1.088 21.28.51 35.017 2.361 41.187 5.611 3.624 1.915 3.934 3.739.863 5.487-3.12 1.773-11.358 3.827-24.835 6.188-13.747 2.4-29.807 4.217-48.095 5.436zm-7.611-5.396c18.062-1.186 32.522-2.992 43.32-5.386 5.816-1.335 7.389-2.757 4.793-4.265-2.476-1.444-8.374-2.36-17.64-2.766-13.919-.6-29.485-.348-46.916.756l-34.905 2.203c-17.546 1.11-32.109 2.825-43.77 5.166-6.592 1.307-9.184 2.778-7.69 4.399 1.43 1.56 6.84 2.592 16.224 3.069 14.31.72 30.952.466 49.714-.767zM43.501-280.47l-208.98 15.039 7.199 7.63c1.785 1.887 1.157 3.391-1.927 4.497-3.105 1.12-7.786 1.915-14.056 2.381-6.141.451-11.526.409-16.092-.14-4.55-.543-7.561-1.786-9.053-3.71l-17.002-21.957c-1.228-1.59-.365-2.836 2.593-3.737 2.949-.893 7.183-1.532 12.746-1.916 5.425-.372 10.147-.35 14.18.07 4.05.413 6.812 1.392 8.278 2.96l6.408 6.798 156.41-11.045-17.665-5.015c-2.812-.777-4.557-1.382-5.254-1.819-1.232-.76-.522-1.542 2.14-2.335 2.623-.788 6.488-1.357 11.591-1.71 4.634-.317 8.63-.363 11.986-.148 3.365.211 7.208.893 11.567 2.035zM36.919-204.33l-53.376 4.596c-32.15 2.763-65.547 3.187-99.47 1.246-33.363-1.89-52.795-6.813-58.545-14.48-3.19-4.247-1.667-8.072 4.365-11.514 5.92-3.366 18.537-7.045 37.613-11.023 18.638-3.877 39.27-6.669 62.123-8.432l46.42-3.58c27.005-2.084 55.236-2.506 85.272-1.263 30.47 1.263 51.688 4.971 63.721 11.323 7.133 3.76 9.497 7.353 6.89 10.752-2.69 3.475-12.503 7.467-29.752 12.013-17.73 4.67-39.533 8.139-65.259 10.364zm-15.714-11.144c25.173-2.112 44.495-5.517 57.851-10.12 7.123-2.544 8.027-5.318 2.877-8.316-4.882-2.836-14.094-4.692-27.622-5.603-20.232-1.344-42.07-1.08-65.863.798l-47.838 3.773c-24.138 1.913-43.764 5.036-59.024 9.47-8.68 2.505-11.605 5.38-8.606 8.65 2.902 3.162 11.258 5.322 25.095 6.432 21.18 1.704 45.158 1.444 71.532-.766zM161.88-115.68l-67.207 7.065c-40.671 4.272-83.966 4.636-128.67 1.13-43.739-3.437-70.147-11.65-79.481-24.105-5.11-6.824-4.134-12.89 2.646-18.261 6.61-5.225 21.533-10.868 44.383-16.886 22.187-5.837 47.082-9.962 75.01-12.485l56.557-5.107c32.809-2.958 67.827-3.387 105.92-1.283 38.773 2.14 67.392 7.966 86.139 17.845 11.214 5.917 16.31 11.566 14.966 16.892-1.398 5.485-11.683 11.775-31.3 18.927-20.306 7.405-46.696 12.88-78.958 16.268zm-25.686-18.227c31.299-3.168 54.343-8.435 69.012-15.645 7.74-3.954 7.411-8.3-.704-13.024-7.655-4.46-20.232-7.395-37.73-8.9-26.115-2.232-53.446-1.988-82.528.717l-58.689 5.47c-29.707 2.77-53.4 7.487-71.285 14.309-10.24 3.875-13.077 8.413-8.286 13.63 4.68 5.09 16.029 8.642 34.142 10.561 27.803 2.934 58.592 2.727 91.639-.607zM504.23-37.449 98.73 14.618l33.607 35.638c8.69 9.213 11.029 16.524 6.705 21.779-4.385 5.378-13.3 9.008-26.752 10.915-13.231 1.874-25.855 1.237-37.706-1.88-11.727-3.075-21.324-9.497-28.707-19.058l-75.835-97.944c-4.966-6.41-5.063-11.23-.445-14.605 4.572-3.33 12.105-5.577 22.687-6.768 10.31-1.142 19.838-.845 28.666.941 8.906 1.81 16.236 5.76 22.08 11.946l26.327 27.921 298.94-36.416-51.534-20.03c-7.94-3.02-13.193-5.34-15.804-6.975-4.621-2.866-5.36-5.676-2.28-8.433 3.043-2.72 9.148-4.588 18.279-5.621 8.29-.936 16.064-.95 23.369-.037 7.336.931 17.014 3.532 29.248 7.89z" fill="#a7a9ac"></path><path d="m-127.38-374.37-133.87 9.378 2.946 2.892c.722.702.053 1.291-2.008 1.766-2.085.477-5.06.849-8.924 1.122-3.778.27-7.011.328-9.673.191-2.648-.139-4.28-.569-4.878-1.291l-7.055-8.43c-.525-.63.204-1.151 2.202-1.57 1.98-.414 4.747-.746 8.3-.995 3.47-.24 6.432-.304 8.896-.193 2.47.104 4.018.47 4.65 1.092l2.723 2.67 100.55-7.004-9.553-1.836c-1.541-.288-2.458-.517-2.767-.69-.541-.306.15-.648 2.085-1.04 1.933-.378 4.591-.688 7.965-.92 3.065-.206 5.635-.299 7.702-.259 2.083.045 4.3.276 6.676.698zM-90.758-356.94l-151.02 10.991 3.796 3.715c.938.915.266 1.675-2.045 2.264-2.305.602-5.663 1.06-10.05 1.382-4.293.316-7.977.374-11.048.173-3.061-.203-4.978-.772-5.747-1.698l-9.063-10.822c-.66-.8.103-1.456 2.314-1.968 2.183-.511 5.282-.915 9.275-1.197 3.91-.284 7.252-.342 10.05-.187 2.812.153 4.625.623 5.426 1.412l3.493 3.403 113.19-8.18-11.317-2.381c-1.826-.362-2.918-.664-3.296-.883-.7-.384.016-.814 2.13-1.279 2.1-.47 5.043-.835 8.818-1.106 3.44-.247 6.338-.334 8.7-.278 2.366.063 4.965.372 7.77.915zM-117.15-319.66l-36.393 2.822a691.2 691.2 0 0 1-65.622 1.944c-21.577-.378-33.666-2.314-36.415-5.713-1.545-1.9-.003-3.69 4.512-5.38 4.463-1.66 13.525-3.58 27.1-5.75 13.37-2.136 28-3.787 44.01-4.978l32.725-2.445c19.17-1.424 38.817-2.058 59.227-1.89 20.664.164 34.088 1.672 40.218 4.585 3.606 1.717 3.981 3.403 1.051 5.064-2.974 1.685-10.92 3.7-23.95 6.071-13.275 2.398-28.794 4.298-46.462 5.67zm-7.527-4.88c17.427-1.34 31.377-3.207 41.765-5.568 5.6-1.313 7.077-2.649 4.5-4.004-2.452-1.3-8.206-2.058-17.199-2.301-13.487-.354-28.522.099-45.293 1.364l-33.497 2.514c-16.796 1.263-30.686 3.039-41.775 5.345-6.264 1.29-8.706 2.671-7.246 4.137 1.398 1.414 6.592 2.285 15.58 2.599 13.722.472 29.679.02 47.685-1.368zM21.439-303.5l-202.98 16.477 7.142 6.987c1.773 1.73 1.207 3.131-1.738 4.19-2.959 1.071-7.455 1.857-13.481 2.356-5.901.485-11.08.503-15.485.042-4.388-.454-7.308-1.572-8.787-3.338l-16.793-20.071c-1.214-1.45-.413-2.607 2.389-3.47 2.802-.858 6.839-1.5 12.152-1.92 5.187-.408 9.71-.449 13.59-.109 3.893.332 6.57 1.199 8.02 2.627l6.33 6.198 151.31-12.143-17.443-4.436c-2.774-.684-4.497-1.227-5.194-1.623-1.23-.688-.566-1.424 1.998-2.19 2.53-.767 6.28-1.346 11.242-1.738 4.515-.356 8.415-.453 11.702-.296 3.299.153 7.086.736 11.398 1.742zM18.275-231.87l-52.541 4.777c-31.505 2.86-64.212 3.523-97.375 1.966-32.481-1.508-51.434-5.955-57.195-13.062-3.19-3.931-1.823-7.51 3.912-10.772 5.623-3.19 17.721-6.735 36.068-10.627 17.959-3.797 37.916-6.614 60.112-8.495l45.249-3.835c26.427-2.238 54.208-2.938 83.94-2.098 30.276.861 51.569 4.127 63.893 10 7.314 3.485 9.866 6.862 7.433 10.104-2.505 3.32-12.11 7.194-29.107 11.659-17.434 4.587-38.96 8.059-64.39 10.384zM2.246-242.26c24.82-2.22 43.826-5.613 56.876-10.09 6.96-2.47 7.727-5.098 2.464-7.878-4.981-2.626-14.206-4.28-27.647-4.997-20.067-1.052-41.584-.58-64.912 1.424l-46.728 4.018c-23.49 2.027-42.494 5.134-57.185 9.42-8.352 2.418-11.104 5.135-8.093 8.161 2.915 2.93 11.101 4.882 24.61 5.8 20.717 1.418 44.17.972 69.956-1.335zM147.91-147.84l-67.486 7.041c-40.624 4.234-83.853 4.706-128.42 1.472-43.348-3.153-69.6-10.89-79.153-22.69-5.22-6.448-4.45-12.196 2.014-17.316 6.3-4.98 20.729-10.4 42.938-16.226 21.602-5.665 45.978-9.736 73.47-12.316l55.923-5.249c32.594-3.057 67.645-3.729 106.07-2.005 39.314 1.76 68.72 7.148 88.437 16.528 11.833 5.64 17.412 11.067 16.383 16.226-1.073 5.316-11.195 11.462-30.8 18.483-20.27 7.254-46.821 12.656-79.38 16.053zm-26.962-17.485c31.455-3.196 54.508-8.384 68.974-15.414 7.63-3.855 7.036-8.04-1.485-12.534-8.021-4.24-20.917-6.975-38.682-8.302-26.43-1.963-53.861-1.545-82.834 1.229L8.71-194.761c-29.33 2.815-52.563 7.435-69.947 14.014-9.95 3.732-12.577 8.056-7.668 12.996 4.806 4.825 16.15 8.163 34.15 9.92 27.72 2.696 58.384 2.376 91.268-.957zM509-71.299 90.73-20.68l36.202 35.429c9.422 9.215 12.23 16.516 8.074 21.721-4.206 5.334-13.162 8.885-26.865 10.675-13.465 1.762-26.408 1.016-38.673-2.18-12.108-3.152-22.187-9.597-30.139-19.13l-80.535-96.24c-5.197-6.215-5.485-10.876-1.013-14.136 4.422-3.22 11.839-5.39 22.356-6.544 10.25-1.106 19.79-.819 28.707.91 9.006 1.754 16.542 5.586 22.696 11.599l27.856 27.265 305.03-35.463-55.087-19.736c-8.434-2.96-14.031-5.231-16.846-6.83-4.969-2.806-5.93-5.557-2.936-8.264 2.958-2.67 9.137-4.513 18.503-5.545 8.515-.935 16.564-.967 24.207-.088 7.683.897 17.93 3.43 30.989 7.692z" fill="#000"></path><path d="m471.42 53.206-11.157-4.62c-11.492-19.68-23.466-39.885-36.299-60.86 0-.553 0-1.138-.047-1.755-.385-6.683-10.776-24.64-11.157-27.72-.24-1.786 1.054-3.266 2.633-3.942 24.038 39.085 41.9 71.64 56.028 98.897z" fill="#f4dcc9"></path><path d="M431.91-42.762c2.395 4.097 4.406 11.55 2.395 11.273-2.01-.247-13.168-13.336-15.564-14.352-1.003-.43-2.251-.338-3.352.153-80.454-130.83-230.1-334.78-540.61-657.68-.24-.278-.525-.523-.766-.8l-1.15.37c-2.012-3.45-10.439-10.903-10.439-10.903s7.183-2.308 10.776-.77c3.593 1.539 298.11 291.05 399.87 425.79 0 0 94.58 133.21 101.76 143.21 0 0 .816 32.094 2.396 33.88 1.629 1.786 6.798-25.656 10.01-26.427 3.161-.77 2.395 16.17 4.787 17.433 2.396 1.293 3.162-6.16 3.59-3.326.385 2.833-.431 44.412 1.58 44.412 2.01-.278 7.564-17.463 9.578-19.526 2.01-2.034 5.603 11.55 4.787 23.098-.816 11.548.385 12.32 1.198 10.287.813-2.064 7.183-18.758 9.193-20.297 1.964-1.541 3.59 12.598 1.58 17.218-2.011 4.62-9.963 10.78-6.802 13.58 3.215 2.834 12.793 9.24 15.185 13.367z" fill="url(#a)"></path><path d="m400.74-47.999.86-.247a2028.367 2028.367 0 0 1 22.365 35.974c.19 5.512-.813 8.253-.813 8.253s-5.604-8.716-8.812-12.843c0 0-2.396 11.828 1.197 19.526 3.59 7.7 8 19.25 4.788 18.201-3.161-1.015-15.945-20.789-15.564-26.95.432-6.16 0-24.116 0-25.654 0-1.538-2.777-7.453-5.172-2.308-2.396 5.142-8.762 26.425-7.565 34.125 1.198 7.7 1.198 16.17-.431 15.677-1.58-.523-10.776-22.33-7.568-33.633 3.209-11.303 2.777-19.003.385-16.17-2.395 2.833-15.564 16.415-23.944 17.185-8.38.77-15.132-.77-9.147-3.572 5.989-2.834 28.303-17.218 32.706-23.623 0 0 7.183-12.073-2.395-3.852-9.578 8.222-27.537 21.314-44.298 19.25-16.761-2.064-35.102-9.487-24.326-9.24 10.773.247 25.908.77 31.127-3.85 5.172-4.619 5.985-10.256-2.014-8.468-7.996 1.786-21.549 5.39-25.523 5.637-4.025.278-24.376-14.629-36.349-17.185-11.971-2.556-5.985-5.39-.766-4.62 5.172.77 27.102 1.296 30.696-.77 3.593-2.063 11.204-6.405-3.975-6.683-15.179-.247-31.127-2.804-52.294-16.662-21.117-13.859-139.64-161.2-152.05-174.29-12.355-13.089-13.553-12.566-10.776-12.813 2.827-.277 13.6-.277 12.787-2.063-.813-1.786-11.589-1.54-15.179-3.08-3.59-1.538-1.963-5.637 8-5.144 9.96.523 29.547-4.62 5.985-7.421-23.563-2.834-24.326-1.048-38.31-18.48-6.56-8.163-44.058-59.503-82.271-112.39-6.32-14.258-40.418-107.34-31.465-115.28 9.578-8.468 61.056 52.36 110.14 110.88 49.086 58.518 177.19 194.03 213.1 234.07 35.349 39.424 124.09 145.22 126.86 148.51z" fill="url(#b)"></path><path d="M423.91-14.027c.047.615.047 1.2.047 1.756a2037.423 2037.423 0 0 0-22.365-35.974c-94.004-148.82-235.13-340.3-526.82-655.12 310.51 322.9 460.16 526.85 540.61 657.68-1.58.677-2.874 2.156-2.633 3.942.381 3.08 10.776 21.037 11.157 27.72z" fill="#f4dcc9"></path><path d="m401.6-48.245-.86.247c-2.777-3.296-91.514-109.09-126.86-148.51-35.915-40.038-164.02-175.55-213.1-234.07-49.083-58.517-100.56-119.35-110.14-110.88-8.956 7.946 25.142 101.02 31.465 115.28-43.388-59.904-87.637-121.78-88.928-125.04-2.395-6.16-1.58-8.191 4.79-7.175 6.37 1.015 13.55.522 13.55-2.064 0-2.556-4.358-3.574-18.34-7.423-13.98-3.85-25.954-33.108-31.94-49.277-5.985-16.17-11.538-44.935-5.985-42.872 5.604 2.063 20.783 8.469 23.178 6.16 2.396-2.309-2.013-7.453-18.39-14.106 0 0-7.183.247-5.172-8.994 2.01-9.241 3.209-26.702 5.172-26.179 0 0 14.366 3.081 13.168 0-.097-.185-.19-.4-.334-.646l1.15-.37c.241.278.526.523.767.8 291.68 314.82 432.81 506.3 526.81 655.12z" fill="url(#c)"></path></g></svg></div></div></div></div></div><footer class="footer footer--dark"><div class="container container-fluid"><div class="row footer__links"><div class="col footer__col"><div class="footer__title">Documentation</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/docs/overview">Overview</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/getting-started/installation">Getting started</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/deployment/manual">Deployment</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/admin/bookies">Administration</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/api/overview">API</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/security/overview">Security</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/development/protocol">Development</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/reference/config">Reference</a></li></ul></div><div class="col footer__col"><div class="footer__title">Community</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/community/mailing-lists">Mailing lists</a></li><li class="footer__item"><a class="footer__link-item" href="/community/slack">Slack</a></li><li class="footer__item"><a href="https://github.com/apache/bookkeeper" target="_blank" rel="noopener noreferrer" class="footer__link-item">Github<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a href="https://twitter.com/asfbookkeeper" target="_blank" rel="noopener noreferrer" class="footer__link-item">Twitter<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div><div class="col footer__col"><div class="footer__title">Project</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/project/who">Who are we?</a></li><li class="footer__item"><a class="footer__link-item" href="/project/bylaws">Bylaws</a></li><li class="footer__item"><a href="https://apache.org/licenses" target="_blank" rel="noopener noreferrer" class="footer__link-item">License<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a class="footer__link-item" href="/project/privacy">Privacy policy</a></li><li class="footer__item"><a href="https://www.apache.org/foundation/sponsorship.html" target="_blank" rel="noopener noreferrer" class="footer__link-item">Sponsorship<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a href="https://www.apache.org/foundation/thanks.html" target="_blank" rel="noopener noreferrer" class="footer__link-item">Thanks<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div></div><div class="footer__bottom text--center"><div class="footer__copyright"><footer class="footer">
+<div id="docusaurus-base-url-issue-banner-container"></div><div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navbar__brand" href="/"><div class="navbar__logo"><img src="/img/bk-logo.svg" alt="Apache Bookkeeper" class="themedImage_ToTc themedImage--light_HNdA"><img src="/img/bk-logo.svg" alt="Apache Bookkeeper" class="themedImage_ToTc themedImage--dark_i4oU"></div><b class="navbar__title text--truncate">Apache BookKeeper</b></a><a class="navbar__item navbar__link" href="/docs/overview/">Documentation</a><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Community</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/community/mailing-lists">Mailing lists</a></li><li><a class="dropdown__link" href="/community/slack">Slack</a></li><li><a href="https://github.com/apache/bookkeeper/issues" target="_blank" rel="noopener noreferrer" class="dropdown__link">Github issues<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a class="dropdown__link" href="/community/releases">Release management</a></li><li><a class="dropdown__link" href="/community/meeting">Community meetings</a></li><li><a class="dropdown__link" href="/community/contributing">Contribution guide</a></li><li><a class="dropdown__link" href="/community/coding-guide">Coding guide</a></li><li><a class="dropdown__link" href="/community/testing">Testing guide</a></li><li><a class="dropdown__link" href="/community/issue-report">Issue report guide</a></li><li><a class="dropdown__link" href="/community/release-guide">Release guide</a></li><li><a class="dropdown__link" href="/community/presentations">Presentations</a></li><li><a class="dropdown__link" href="/community/bookkeeper-proposals">BookKeeper proposals (BP)</a></li></ul></div><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Project</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/project/who">Who are we?</a></li><li><a class="dropdown__link" href="/project/bylaws">Bylaws</a></li><li><a href="https://apache.org/licenses" target="_blank" rel="noopener noreferrer" class="dropdown__link">License<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a class="dropdown__link" href="/project/privacy">Privacy policy</a></li><li><a href="https://www.apache.org/foundation/sponsorship.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Sponsorship<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a href="https://www.apache.org/foundation/thanks.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Thanks<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div></div><div class="navbar__items navbar__items--right"><div class="navbar__item dropdown dropdown--hoverable dropdown--right"><a class="navbar__link" aria-haspopup="true" aria-expanded="false" role="button" href="/docs/overview/">4.17.0</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/docs/next/overview/">Next</a></li><li><a class="dropdown__link" href="/docs/overview/">4.17.0</a></li><li><a class="dropdown__link" href="/docs/4.16.5/overview/">4.16.5</a></li><li><a class="dropdown__link" href="/docs/4.15.5/overview/">4.15.5</a></li><li><a class="dropdown__link" href="/docs/4.14.8/overview/">4.14.8</a></li><li><a class="dropdown__link" href="/docs/4.13.0/overview/">4.13.0</a></li><li><a class="dropdown__link" href="/docs/4.12.1/overview/">4.12.1</a></li><li><a class="dropdown__link" href="/docs/4.11.1/overview/">4.11.1</a></li><li><a class="dropdown__link" href="/docs/4.10.0/overview/">4.10.0</a></li><li><a class="dropdown__link" href="/docs/4.9.2/overview/">4.9.2</a></li><li><a class="dropdown__link" href="/docs/4.8.2/overview/">4.8.2</a></li><li><a class="dropdown__link" href="/docs/4.7.3/overview/">4.7.3</a></li><li><a class="dropdown__link" href="/docs/4.6.2/overview/">4.6.2</a></li><li><a class="dropdown__link" href="/docs/4.5.1/overview/">4.5.1</a></li></ul></div><a class="navbar__item navbar__link" href="/releases">Download</a><div class="toggle_vylO colorModeToggle_DEke"><button class="clean-btn toggleButton_gllP toggleButtonDisabled_aARS" type="button" disabled="" title="Switch between dark and light mode (currently light mode)" aria-label="Switch between dark and light mode (currently light mode)" aria-live="polite"><svg viewBox="0 0 24 24" width="24" height="24" class="lightToggleIcon_pyhR"><path fill="currentColor" d="M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"></path></svg><svg viewBox="0 0 24 24" width="24" height="24" class="darkToggleIcon_wfgR"><path fill="currentColor" d="M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"></path></svg></button></div><div class="searchBox_ZlJk"></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div></nav><div id="docusaurus_skipToContent_fallback" class="main-wrapper mainWrapper_z2l0"><div class="hero"><div class="container"><div class="row" style="align-items:center"><div class="col col--6"><h1 class="hero__title">Apache BookKeeper</h1><p class="hero__subtitle">A scalable, fault-tolerant, and low-latency storage service optimized for real-time workloads</p><div><a href="docs/getting-started/installation"><button class="button button--primary button--lg margin-right--sm" href="docs/getting-started/installation">Get Started</button></a></div></div><div class="col col--6 padding--lg"><svg width="100%" height="100%" viewBox="-291 -716 801 801" xmlns="http://www.w3.org/2000/svg"><defs><linearGradient id="a" x2="1" gradientTransform="rotate(60.634 613.311 -434.773) scale(877.41)" gradientUnits="userSpaceOnUse"><stop stop-color="#683b1b" offset="0"></stop><stop stop-color="#a1612f" offset="0.371"></stop><stop stop-color="#efa363" offset="1"></stop></linearGradient><linearGradient id="b" x2="1" gradientTransform="rotate(60.634 497.08 -280.197) scale(723.67)" gradientUnits="userSpaceOnUse"><stop stop-color="#683b1b" offset="0"></stop><stop stop-color="#a1612f" offset="0.371"></stop><stop stop-color="#efa363" offset="1"></stop></linearGradient><linearGradient id="c" x2="1" gradientTransform="rotate(60.634 595.444 -438.72) scale(840.9)" gradientUnits="userSpaceOnUse"><stop stop-color="#683b1b" offset="0"></stop><stop stop-color="#a1612f" offset="0.516"></stop><stop stop-color="#bd753d" offset="1"></stop></linearGradient></defs><g fill="none"><title>Canvas 1</title><title>Layer 1</title><path d="M470.15 53.898c-14.119-13.501-31.99-29.638-56.016-48.996 1.107-.237 2.352-.298 3.337-.082 2.395.502 13.553 6.986 15.564 7.111 2.01.139 0-3.558-2.396-5.585-2.395-2.045-11.974-5.221-15.179-6.623-3.161-1.39 4.788-4.44 6.799-6.731 2.01-2.289.384-9.294-1.58-8.53-2.01.76-8.38 9.033-9.193 10.059-.813 1.005-2.011.623-1.198-5.099.813-5.724-2.777-12.45-4.788-11.448-2.01 1.022-7.567 9.537-9.578 9.68-2.01.12-1.198-20.606-1.58-22.008-.43-1.404-1.197 2.289-3.589 1.65-2.395-.626-1.63-9.021-4.788-8.639-3.208.382-8.38 13.978-10.01 13.093-1.579-.885-2.395-16.787-2.395-16.787C366.377-49.997 271.8-116 271.8-116c-101.76-66.766-396.27-210.22-399.87-210.98-3.59-.764-10.773.38-10.773.38s9.578 4.198 10.773 5.724c1.198 1.525-13.168 0-13.168 0-1.964-.26-3.162 8.393-5.172 12.97-2.01 4.58 5.172 4.457 5.172 4.457 16.377 3.296 20.783 5.846 18.387 6.99-2.395 1.145-17.574-2.029-23.178-3.05-5.554-1.024 0 13.23 5.988 21.242 5.986 8.012 17.96 22.509 31.94 24.418 13.981 1.906 18.34 2.411 18.34 3.678 0 1.281-7.183 1.525-13.553 1.022-6.37-.503-7.183.503-4.787 3.558 2.395 3.05 157.22 108.99 171.2 117.64 13.984 8.635 14.75 7.75 38.31 9.154 23.563 1.39 3.974 3.938-5.986 3.679-9.963-.246-11.589 1.784-7.999 2.548 3.593.764 14.366.641 15.18 1.524.812.887-9.964.887-12.785 1.022-2.78.125-1.582-.135 10.773 6.35 12.402 6.483 130.93 79.492 152.05 86.362 21.167 6.868 37.115 8.133 52.294 8.254 15.18.139 7.568 2.289 3.975 3.31-3.593 1.026-25.526.765-30.7.383-5.218-.383-11.203 1.021.77 2.288 11.974 1.265 32.325 8.652 36.346 8.513 3.975-.12 17.527-1.906 25.526-2.791 7.996-.883 7.183 1.907 2.01 4.195-5.218 2.289-20.353 2.03-31.126 1.907-10.776-.12 7.564 3.558 24.326 4.58 16.76 1.023 34.72-5.463 44.298-9.542 9.578-4.072 2.395 1.911 2.395 1.911-4.406 3.174-26.72 10.299-32.706 11.705-5.985 1.386.77 2.15 9.147 1.768 8.38-.382 21.552-7.11 23.944-8.516 2.395-1.403 2.824 2.41-.385 8.011-3.208 5.603 5.989 16.407 7.568 16.668 1.63.241 1.63-3.956.431-7.77-1.197-3.816 5.173-14.361 7.568-16.91 2.395-2.55 5.172.379 5.172 1.143s.432 9.662 0 12.715c-.384 3.053 12.402 12.85 15.564 13.352 3.209.52-1.197-5.2-4.787-9.018-3.593-3.813-1.198-9.676-1.198-9.676 3.208 2.046 8.809 6.366 8.809 6.366s.97-1.368.835-4.093c12.818 10.398 24.807 20.41 36.277 30.157zM-106.36-359.53l-140.5 7.817 3.04 3.234c.75.787.028 1.422-2.155 1.907-2.21.485-5.36.84-9.447 1.074-3.997.23-7.414.237-10.226.038-2.799-.199-4.512-.704-5.132-1.508l-7.298-9.426c-.541-.706.24-1.265 2.36-1.692 2.108-.42 5.048-.734 8.816-.943 3.68-.197 6.81-.215 9.416-.044 2.61.163 4.237.593 4.894 1.289l2.817 2.994 105.78-5.824-9.922-2.194c-1.601-.344-2.552-.613-2.874-.809-.553-.345.178-.71 2.217-1.1 2.03-.378 4.819-.667 8.353-.856 3.208-.167 5.894-.222 8.052-.14 2.17.087 4.475.383 6.942.892zM-69.059-339.86l-157.74 9.408 3.903 4.135c.96 1.016.237 1.836-2.208 2.446-2.436.62-5.976 1.064-10.595 1.345-4.525.276-8.403.276-11.636.006-3.218-.271-5.229-.929-6.02-1.957l-9.322-12.033c-.681-.89.138-1.6 2.483-2.128 2.32-.522 5.601-.91 9.823-1.15 4.127-.243 7.658-.25 10.6-.03 2.962.217 4.857.764 5.686 1.643l3.59 3.795 118.56-6.98-11.68-2.798c-1.89-.429-3.012-.777-3.396-1.024-.717-.432.043-.889 2.257-1.36 2.205-.474 5.273-.82 9.21-1.047 3.583-.207 6.598-.252 9.046-.15 2.455.111 5.141.496 8.034 1.14z" fill="#a7a9ac"></path><path d="m-97.706-299.84-37.775 2.516a691.394 691.394 0 0 1-68.408 1.144c-22.584-.732-35.224-3.024-38.032-6.775-1.58-2.1.078-4.033 4.869-5.808 4.731-1.744 14.29-3.699 28.582-5.853 14.059-2.118 29.398-3.686 46.137-4.724l34.138-2.134c19.935-1.237 40.299-1.603 61.369-1.088 21.28.51 35.017 2.361 41.187 5.611 3.624 1.915 3.934 3.739.863 5.487-3.12 1.773-11.358 3.827-24.835 6.188-13.747 2.4-29.807 4.217-48.095 5.436zm-7.611-5.396c18.062-1.186 32.522-2.992 43.32-5.386 5.816-1.335 7.389-2.757 4.793-4.265-2.476-1.444-8.374-2.36-17.64-2.766-13.919-.6-29.485-.348-46.916.756l-34.905 2.203c-17.546 1.11-32.109 2.825-43.77 5.166-6.592 1.307-9.184 2.778-7.69 4.399 1.43 1.56 6.84 2.592 16.224 3.069 14.31.72 30.952.466 49.714-.767zM43.501-280.47l-208.98 15.039 7.199 7.63c1.785 1.887 1.157 3.391-1.927 4.497-3.105 1.12-7.786 1.915-14.056 2.381-6.141.451-11.526.409-16.092-.14-4.55-.543-7.561-1.786-9.053-3.71l-17.002-21.957c-1.228-1.59-.365-2.836 2.593-3.737 2.949-.893 7.183-1.532 12.746-1.916 5.425-.372 10.147-.35 14.18.07 4.05.413 6.812 1.392 8.278 2.96l6.408 6.798 156.41-11.045-17.665-5.015c-2.812-.777-4.557-1.382-5.254-1.819-1.232-.76-.522-1.542 2.14-2.335 2.623-.788 6.488-1.357 11.591-1.71 4.634-.317 8.63-.363 11.986-.148 3.365.211 7.208.893 11.567 2.035zM36.919-204.33l-53.376 4.596c-32.15 2.763-65.547 3.187-99.47 1.246-33.363-1.89-52.795-6.813-58.545-14.48-3.19-4.247-1.667-8.072 4.365-11.514 5.92-3.366 18.537-7.045 37.613-11.023 18.638-3.877 39.27-6.669 62.123-8.432l46.42-3.58c27.005-2.084 55.236-2.506 85.272-1.263 30.47 1.263 51.688 4.971 63.721 11.323 7.133 3.76 9.497 7.353 6.89 10.752-2.69 3.475-12.503 7.467-29.752 12.013-17.73 4.67-39.533 8.139-65.259 10.364zm-15.714-11.144c25.173-2.112 44.495-5.517 57.851-10.12 7.123-2.544 8.027-5.318 2.877-8.316-4.882-2.836-14.094-4.692-27.622-5.603-20.232-1.344-42.07-1.08-65.863.798l-47.838 3.773c-24.138 1.913-43.764 5.036-59.024 9.47-8.68 2.505-11.605 5.38-8.606 8.65 2.902 3.162 11.258 5.322 25.095 6.432 21.18 1.704 45.158 1.444 71.532-.766zM161.88-115.68l-67.207 7.065c-40.671 4.272-83.966 4.636-128.67 1.13-43.739-3.437-70.147-11.65-79.481-24.105-5.11-6.824-4.134-12.89 2.646-18.261 6.61-5.225 21.533-10.868 44.383-16.886 22.187-5.837 47.082-9.962 75.01-12.485l56.557-5.107c32.809-2.958 67.827-3.387 105.92-1.283 38.773 2.14 67.392 7.966 86.139 17.845 11.214 5.917 16.31 11.566 14.966 16.892-1.398 5.485-11.683 11.775-31.3 18.927-20.306 7.405-46.696 12.88-78.958 16.268zm-25.686-18.227c31.299-3.168 54.343-8.435 69.012-15.645 7.74-3.954 7.411-8.3-.704-13.024-7.655-4.46-20.232-7.395-37.73-8.9-26.115-2.232-53.446-1.988-82.528.717l-58.689 5.47c-29.707 2.77-53.4 7.487-71.285 14.309-10.24 3.875-13.077 8.413-8.286 13.63 4.68 5.09 16.029 8.642 34.142 10.561 27.803 2.934 58.592 2.727 91.639-.607zM504.23-37.449 98.73 14.618l33.607 35.638c8.69 9.213 11.029 16.524 6.705 21.779-4.385 5.378-13.3 9.008-26.752 10.915-13.231 1.874-25.855 1.237-37.706-1.88-11.727-3.075-21.324-9.497-28.707-19.058l-75.835-97.944c-4.966-6.41-5.063-11.23-.445-14.605 4.572-3.33 12.105-5.577 22.687-6.768 10.31-1.142 19.838-.845 28.666.941 8.906 1.81 16.236 5.76 22.08 11.946l26.327 27.921 298.94-36.416-51.534-20.03c-7.94-3.02-13.193-5.34-15.804-6.975-4.621-2.866-5.36-5.676-2.28-8.433 3.043-2.72 9.148-4.588 18.279-5.621 8.29-.936 16.064-.95 23.369-.037 7.336.931 17.014 3.532 29.248 7.89z" fill="#a7a9ac"></path><path d="m-127.38-374.37-133.87 9.378 2.946 2.892c.722.702.053 1.291-2.008 1.766-2.085.477-5.06.849-8.924 1.122-3.778.27-7.011.328-9.673.191-2.648-.139-4.28-.569-4.878-1.291l-7.055-8.43c-.525-.63.204-1.151 2.202-1.57 1.98-.414 4.747-.746 8.3-.995 3.47-.24 6.432-.304 8.896-.193 2.47.104 4.018.47 4.65 1.092l2.723 2.67 100.55-7.004-9.553-1.836c-1.541-.288-2.458-.517-2.767-.69-.541-.306.15-.648 2.085-1.04 1.933-.378 4.591-.688 7.965-.92 3.065-.206 5.635-.299 7.702-.259 2.083.045 4.3.276 6.676.698zM-90.758-356.94l-151.02 10.991 3.796 3.715c.938.915.266 1.675-2.045 2.264-2.305.602-5.663 1.06-10.05 1.382-4.293.316-7.977.374-11.048.173-3.061-.203-4.978-.772-5.747-1.698l-9.063-10.822c-.66-.8.103-1.456 2.314-1.968 2.183-.511 5.282-.915 9.275-1.197 3.91-.284 7.252-.342 10.05-.187 2.812.153 4.625.623 5.426 1.412l3.493 3.403 113.19-8.18-11.317-2.381c-1.826-.362-2.918-.664-3.296-.883-.7-.384.016-.814 2.13-1.279 2.1-.47 5.043-.835 8.818-1.106 3.44-.247 6.338-.334 8.7-.278 2.366.063 4.965.372 7.77.915zM-117.15-319.66l-36.393 2.822a691.2 691.2 0 0 1-65.622 1.944c-21.577-.378-33.666-2.314-36.415-5.713-1.545-1.9-.003-3.69 4.512-5.38 4.463-1.66 13.525-3.58 27.1-5.75 13.37-2.136 28-3.787 44.01-4.978l32.725-2.445c19.17-1.424 38.817-2.058 59.227-1.89 20.664.164 34.088 1.672 40.218 4.585 3.606 1.717 3.981 3.403 1.051 5.064-2.974 1.685-10.92 3.7-23.95 6.071-13.275 2.398-28.794 4.298-46.462 5.67zm-7.527-4.88c17.427-1.34 31.377-3.207 41.765-5.568 5.6-1.313 7.077-2.649 4.5-4.004-2.452-1.3-8.206-2.058-17.199-2.301-13.487-.354-28.522.099-45.293 1.364l-33.497 2.514c-16.796 1.263-30.686 3.039-41.775 5.345-6.264 1.29-8.706 2.671-7.246 4.137 1.398 1.414 6.592 2.285 15.58 2.599 13.722.472 29.679.02 47.685-1.368zM21.439-303.5l-202.98 16.477 7.142 6.987c1.773 1.73 1.207 3.131-1.738 4.19-2.959 1.071-7.455 1.857-13.481 2.356-5.901.485-11.08.503-15.485.042-4.388-.454-7.308-1.572-8.787-3.338l-16.793-20.071c-1.214-1.45-.413-2.607 2.389-3.47 2.802-.858 6.839-1.5 12.152-1.92 5.187-.408 9.71-.449 13.59-.109 3.893.332 6.57 1.199 8.02 2.627l6.33 6.198 151.31-12.143-17.443-4.436c-2.774-.684-4.497-1.227-5.194-1.623-1.23-.688-.566-1.424 1.998-2.19 2.53-.767 6.28-1.346 11.242-1.738 4.515-.356 8.415-.453 11.702-.296 3.299.153 7.086.736 11.398 1.742zM18.275-231.87l-52.541 4.777c-31.505 2.86-64.212 3.523-97.375 1.966-32.481-1.508-51.434-5.955-57.195-13.062-3.19-3.931-1.823-7.51 3.912-10.772 5.623-3.19 17.721-6.735 36.068-10.627 17.959-3.797 37.916-6.614 60.112-8.495l45.249-3.835c26.427-2.238 54.208-2.938 83.94-2.098 30.276.861 51.569 4.127 63.893 10 7.314 3.485 9.866 6.862 7.433 10.104-2.505 3.32-12.11 7.194-29.107 11.659-17.434 4.587-38.96 8.059-64.39 10.384zM2.246-242.26c24.82-2.22 43.826-5.613 56.876-10.09 6.96-2.47 7.727-5.098 2.464-7.878-4.981-2.626-14.206-4.28-27.647-4.997-20.067-1.052-41.584-.58-64.912 1.424l-46.728 4.018c-23.49 2.027-42.494 5.134-57.185 9.42-8.352 2.418-11.104 5.135-8.093 8.161 2.915 2.93 11.101 4.882 24.61 5.8 20.717 1.418 44.17.972 69.956-1.335zM147.91-147.84l-67.486 7.041c-40.624 4.234-83.853 4.706-128.42 1.472-43.348-3.153-69.6-10.89-79.153-22.69-5.22-6.448-4.45-12.196 2.014-17.316 6.3-4.98 20.729-10.4 42.938-16.226 21.602-5.665 45.978-9.736 73.47-12.316l55.923-5.249c32.594-3.057 67.645-3.729 106.07-2.005 39.314 1.76 68.72 7.148 88.437 16.528 11.833 5.64 17.412 11.067 16.383 16.226-1.073 5.316-11.195 11.462-30.8 18.483-20.27 7.254-46.821 12.656-79.38 16.053zm-26.962-17.485c31.455-3.196 54.508-8.384 68.974-15.414 7.63-3.855 7.036-8.04-1.485-12.534-8.021-4.24-20.917-6.975-38.682-8.302-26.43-1.963-53.861-1.545-82.834 1.229L8.71-194.761c-29.33 2.815-52.563 7.435-69.947 14.014-9.95 3.732-12.577 8.056-7.668 12.996 4.806 4.825 16.15 8.163 34.15 9.92 27.72 2.696 58.384 2.376 91.268-.957zM509-71.299 90.73-20.68l36.202 35.429c9.422 9.215 12.23 16.516 8.074 21.721-4.206 5.334-13.162 8.885-26.865 10.675-13.465 1.762-26.408 1.016-38.673-2.18-12.108-3.152-22.187-9.597-30.139-19.13l-80.535-96.24c-5.197-6.215-5.485-10.876-1.013-14.136 4.422-3.22 11.839-5.39 22.356-6.544 10.25-1.106 19.79-.819 28.707.91 9.006 1.754 16.542 5.586 22.696 11.599l27.856 27.265 305.03-35.463-55.087-19.736c-8.434-2.96-14.031-5.231-16.846-6.83-4.969-2.806-5.93-5.557-2.936-8.264 2.958-2.67 9.137-4.513 18.503-5.545 8.515-.935 16.564-.967 24.207-.088 7.683.897 17.93 3.43 30.989 7.692z" fill="#000"></path><path d="m471.42 53.206-11.157-4.62c-11.492-19.68-23.466-39.885-36.299-60.86 0-.553 0-1.138-.047-1.755-.385-6.683-10.776-24.64-11.157-27.72-.24-1.786 1.054-3.266 2.633-3.942 24.038 39.085 41.9 71.64 56.028 98.897z" fill="#f4dcc9"></path><path d="M431.91-42.762c2.395 4.097 4.406 11.55 2.395 11.273-2.01-.247-13.168-13.336-15.564-14.352-1.003-.43-2.251-.338-3.352.153-80.454-130.83-230.1-334.78-540.61-657.68-.24-.278-.525-.523-.766-.8l-1.15.37c-2.012-3.45-10.439-10.903-10.439-10.903s7.183-2.308 10.776-.77c3.593 1.539 298.11 291.05 399.87 425.79 0 0 94.58 133.21 101.76 143.21 0 0 .816 32.094 2.396 33.88 1.629 1.786 6.798-25.656 10.01-26.427 3.161-.77 2.395 16.17 4.787 17.433 2.396 1.293 3.162-6.16 3.59-3.326.385 2.833-.431 44.412 1.58 44.412 2.01-.278 7.564-17.463 9.578-19.526 2.01-2.034 5.603 11.55 4.787 23.098-.816 11.548.385 12.32 1.198 10.287.813-2.064 7.183-18.758 9.193-20.297 1.964-1.541 3.59 12.598 1.58 17.218-2.011 4.62-9.963 10.78-6.802 13.58 3.215 2.834 12.793 9.24 15.185 13.367z" fill="url(#a)"></path><path d="m400.74-47.999.86-.247a2028.367 2028.367 0 0 1 22.365 35.974c.19 5.512-.813 8.253-.813 8.253s-5.604-8.716-8.812-12.843c0 0-2.396 11.828 1.197 19.526 3.59 7.7 8 19.25 4.788 18.201-3.161-1.015-15.945-20.789-15.564-26.95.432-6.16 0-24.116 0-25.654 0-1.538-2.777-7.453-5.172-2.308-2.396 5.142-8.762 26.425-7.565 34.125 1.198 7.7 1.198 16.17-.431 15.677-1.58-.523-10.776-22.33-7.568-33.633 3.209-11.303 2.777-19.003.385-16.17-2.395 2.833-15.564 16.415-23.944 17.185-8.38.77-15.132-.77-9.147-3.572 5.989-2.834 28.303-17.218 32.706-23.623 0 0 7.183-12.073-2.395-3.852-9.578 8.222-27.537 21.314-44.298 19.25-16.761-2.064-35.102-9.487-24.326-9.24 10.773.247 25.908.77 31.127-3.85 5.172-4.619 5.985-10.256-2.014-8.468-7.996 1.786-21.549 5.39-25.523 5.637-4.025.278-24.376-14.629-36.349-17.185-11.971-2.556-5.985-5.39-.766-4.62 5.172.77 27.102 1.296 30.696-.77 3.593-2.063 11.204-6.405-3.975-6.683-15.179-.247-31.127-2.804-52.294-16.662-21.117-13.859-139.64-161.2-152.05-174.29-12.355-13.089-13.553-12.566-10.776-12.813 2.827-.277 13.6-.277 12.787-2.063-.813-1.786-11.589-1.54-15.179-3.08-3.59-1.538-1.963-5.637 8-5.144 9.96.523 29.547-4.62 5.985-7.421-23.563-2.834-24.326-1.048-38.31-18.48-6.56-8.163-44.058-59.503-82.271-112.39-6.32-14.258-40.418-107.34-31.465-115.28 9.578-8.468 61.056 52.36 110.14 110.88 49.086 58.518 177.19 194.03 213.1 234.07 35.349 39.424 124.09 145.22 126.86 148.51z" fill="url(#b)"></path><path d="M423.91-14.027c.047.615.047 1.2.047 1.756a2037.423 2037.423 0 0 0-22.365-35.974c-94.004-148.82-235.13-340.3-526.82-655.12 310.51 322.9 460.16 526.85 540.61 657.68-1.58.677-2.874 2.156-2.633 3.942.381 3.08 10.776 21.037 11.157 27.72z" fill="#f4dcc9"></path><path d="m401.6-48.245-.86.247c-2.777-3.296-91.514-109.09-126.86-148.51-35.915-40.038-164.02-175.55-213.1-234.07-49.083-58.517-100.56-119.35-110.14-110.88-8.956 7.946 25.142 101.02 31.465 115.28-43.388-59.904-87.637-121.78-88.928-125.04-2.395-6.16-1.58-8.191 4.79-7.175 6.37 1.015 13.55.522 13.55-2.064 0-2.556-4.358-3.574-18.34-7.423-13.98-3.85-25.954-33.108-31.94-49.277-5.985-16.17-11.538-44.935-5.985-42.872 5.604 2.063 20.783 8.469 23.178 6.16 2.396-2.309-2.013-7.453-18.39-14.106 0 0-7.183.247-5.172-8.994 2.01-9.241 3.209-26.702 5.172-26.179 0 0 14.366 3.081 13.168 0-.097-.185-.19-.4-.334-.646l1.15-.37c.241.278.526.523.767.8 291.68 314.82 432.81 506.3 526.81 655.12z" fill="url(#c)"></path></g></svg></div></div></div></div></div><footer class="footer footer--dark"><div class="container container-fluid"><div class="row footer__links"><div class="col footer__col"><div class="footer__title">Documentation</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/docs/overview">Overview</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/getting-started/installation">Getting started</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/deployment/manual">Deployment</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/admin/bookies">Administration</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/api/overview">API</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/security/overview">Security</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/development/protocol">Development</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/reference/config">Reference</a></li></ul></div><div class="col footer__col"><div class="footer__title">Community</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/community/mailing-lists">Mailing lists</a></li><li class="footer__item"><a class="footer__link-item" href="/community/slack">Slack</a></li><li class="footer__item"><a href="https://github.com/apache/bookkeeper" target="_blank" rel="noopener noreferrer" class="footer__link-item">Github<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a href="https://twitter.com/asfbookkeeper" target="_blank" rel="noopener noreferrer" class="footer__link-item">Twitter<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div><div class="col footer__col"><div class="footer__title">Project</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/project/who">Who are we?</a></li><li class="footer__item"><a class="footer__link-item" href="/project/bylaws">Bylaws</a></li><li class="footer__item"><a href="https://apache.org/licenses" target="_blank" rel="noopener noreferrer" class="footer__link-item">License<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a class="footer__link-item" href="/project/privacy">Privacy policy</a></li><li class="footer__item"><a href="https://www.apache.org/foundation/sponsorship.html" target="_blank" rel="noopener noreferrer" class="footer__link-item">Sponsorship<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a href="https://www.apache.org/foundation/thanks.html" target="_blank" rel="noopener noreferrer" class="footer__link-item">Thanks<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div></div><div class="footer__bottom text--center"><div class="footer__copyright"><footer class="footer">
         <div class="container">
           <div class="content has-text-centered">
             <p>
@@ -22,7 +22,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/project/bylaws/index.html b/content/project/bylaws/index.html
index 42a38d2..4cb9b1f 100644
--- a/content/project/bylaws/index.html
+++ b/content/project/bylaws/index.html
@@ -4,12 +4,12 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">Bylaws | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/project/bylaws"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docusaurus_tag" content="default"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docsearch:docusaurus_tag" content="default"><meta data-rh="true" property="og:title" content="Bylaws | Apache BookKeeper"><meta data-rh="true" name="description" content="This is version 1 of the bylaws. The BookKeeper PMC ratified these bylaws by a 2/3 majority vote on 2014/12/11."><meta data-rh="true" property="og:description" content="This is version 1 of the bylaws. The BookKeeper PMC ratified these bylaws by a 2/3 majority vote on 2014/12/11."><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/project/bylaws"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/project/bylaws" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/project/bylaws" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
-<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navbar__brand" href="/"><div class="navbar__logo"><img src="/img/bk-logo.svg" alt="Apache Bookkeeper" class="themedImage_ToTc themedImage--light_HNdA"><img src="/img/bk-logo.svg" alt="Apache Bookkeeper" class="themedImage_ToTc themedImage--dark_i4oU"></div><b class="navbar__title text--truncate">Apache BookKeeper</b></a><a class="navbar__item navbar__link" href="/docs/overview/">Documentation</a><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Community</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/community/mailing-lists">Mailing lists</a></li><li><a class="dropdown__link" href="/community/slack">Slack</a></li><li><a href="https://github.com/apache/bookkeeper/issues" target="_blank" rel="noopener noreferrer" class="dropdown__link">Github issues<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a class="dropdown__link" href="/community/releases">Release management</a></li><li><a class="dropdown__link" href="/community/meeting">Community meetings</a></li><li><a class="dropdown__link" href="/community/contributing">Contribution guide</a></li><li><a class="dropdown__link" href="/community/coding-guide">Coding guide</a></li><li><a class="dropdown__link" href="/community/testing">Testing guide</a></li><li><a class="dropdown__link" href="/community/issue-report">Issue report guide</a></li><li><a class="dropdown__link" href="/community/release-guide">Release guide</a></li><li><a class="dropdown__link" href="/community/presentations">Presentations</a></li><li><a class="dropdown__link" href="/community/bookkeeper-proposals">BookKeeper proposals (BP)</a></li></ul></div><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Project</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/project/who">Who are we?</a></li><li><a aria-current="page" class="dropdown__link dropdown__link--active" href="/project/bylaws">Bylaws</a></li><li><a href="https://apache.org/licenses" target="_blank" rel="noopener noreferrer" class="dropdown__link">License<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a class="dropdown__link" href="/project/privacy">Privacy policy</a></li><li><a href="https://www.apache.org/foundation/sponsorship.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Sponsorship<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a href="https://www.apache.org/foundation/thanks.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Thanks<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div></div><div class="navbar__items navbar__items--right"><div class="navbar__item dropdown dropdown--hoverable dropdown--right"><a class="navbar__link" aria-haspopup="true" aria-expanded="false" role="button" href="/docs/admin/autorecovery">4.17.0</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/docs/next/overview/">Next</a></li><li><a class="dropdown__link" href="/docs/admin/autorecovery">4.17.0</a></li><li><a class="dropdown__link" href="/docs/4.16.5/overview/">4.16.5</a></li><li><a class="dropdown__link" href="/docs/4.15.5/overview/">4.15.5</a></li><li><a class="dropdown__link" href="/docs/4.14.8/overview/">4.14.8</a></li><li><a class="dropdown__link" href="/docs/4.13.0/overview/">4.13.0</a></li><li><a class="dropdown__link" href="/docs/4.12.1/overview/">4.12.1</a></li><li><a class="dropdown__link" href="/docs/4.11.1/overview/">4.11.1</a></li><li><a class="dropdown__link" href="/docs/4.10.0/overview/">4.10.0</a></li><li><a class="dropdown__link" href="/docs/4.9.2/overview/">4.9.2</a></li><li><a class="dropdown__link" href="/docs/4.8.2/overview/">4.8.2</a></li><li><a class="dropdown__link" href="/docs/4.7.3/overview/">4.7.3</a></li><li><a class="dropdown__link" href="/docs/4.6.2/overview/">4.6.2</a></li><li><a class="dropdown__link" href="/docs/4.5.1/overview/">4.5.1</a></li></ul></div><a class="navbar__item navbar__link" href="/releases">Download</a><div class="toggle_vylO colorModeToggle_DEke"><button class="clean-btn toggleButton_gllP toggleButtonDisabled_aARS" type="button" disabled="" title="Switch between dark and light mode (currently light mode)" aria-label="Switch between dark and light mode (currently light mode)" aria-live="polite"><svg viewBox="0 0 24 24" width="24" height="24" class="lightToggleIcon_pyhR"><path fill="currentColor" d="M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"></path></svg><svg viewBox="0 0 24 24" width="24" height="24" class="darkToggleIcon_wfgR"><path fill="currentColor" d="M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"></path></svg></button></div><div class="searchBox_ZlJk"></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div></nav><div id="docusaurus_skipToContent_fallback" class="main-wrapper mainWrapper_z2l0"><main class="container container--fluid margin-vert--lg"><div class="row mdxPageWrapper_j9I6"><div class="col col--8"><article><h1>Bylaws</h1><blockquote><p>This is version 1 of the bylaws. The BookKeeper PMC ratified these bylaws by a 2/3 majority vote on 2014/12/11.</p></blockquote><h2 class="anchor anchorWithStickyNavbar_LWe7" id="introduction">Introduction<a href="#introduction" class="hash-link" aria-label="Direct link to Introduction" title="Direct link to Introduction">​</a></h2><p>This document defines the bylaws under which the Apache BookKeeper project operates. It defines the roles and responsibilities of the project, who may vote, how voting works, how conflicts are resolved, etc.</p><p>BookKeeper is a project of the <a href="http://www.apache.org/" target="_blank" rel="noopener noreferrer">Apache Software Foundation</a>. The foundation holds the copyright on Apache code including the code in the BookKeeper codebase. The <a href="http://www.apache.org/foundation/faq.html" target="_blank" rel="noopener noreferrer">foundation FAQ</a> explains the operation and background of the foundation.</p><p>BookKeeper is typical of Apache projects in that it operates under a set of principles, known collectively as the Apache Way. If you are new to Apache development, please refer to the <a href="http://incubator.apache.org/" target="_blank" rel="noopener noreferrer">Incubator project</a> for more information on how Apache projects operate.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="roles-and-responsibilities">Roles and responsibilities<a href="#roles-and-responsibilities" class="hash-link" aria-label="Direct link to Roles and responsibilities" title="Direct link to Roles and responsibilities">​</a></h2><p>Apache projects define a set of roles with associated rights and responsibilities. These roles govern what tasks an individual may perform within the project. The roles are defined in the following sections.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="users">Users<a href="#users" class="hash-link" aria-label="Direct link to Users" title="Direct link to Users">​</a></h2><p>The most important participants in the project are people who use our software. The majority of our contributors start out as users and guide their development efforts from the user&#x27;s perspective.</p><p>Users contribute to the Apache projects by providing feedback to contributors in the form of bug reports and feature suggestions. As well, users participate in the Apache community by helping other users on mailing lists and user support forums.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="contributors">Contributors<a href="#contributors" class="hash-link" aria-label="Direct link to Contributors" title="Direct link to Contributors">​</a></h2><p>All of the volunteers who are contributing time, code, documentation, or resources to the BookKeeper Project. A contributor that makes sustained , welcome contributions to the project may be invited to become a committer, though the exact timing of such invitations depends on many factors.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="committers">Committers<a href="#committers" class="hash-link" aria-label="Direct link to Committers" title="Direct link to Committers">​</a></h2><p>The project&#x27;s committers are responsible for the project&#x27;s technical management. Committers have access to a specified set of subproject&#x27;s subversion repositories. Committers on subprojects may cast binding votes on any technical discussion regarding that subproject.</p><p>Committer access is by invitation only and must be approved by lazy consensus of the active PMC members. A Committer is considered emeritus by his or her own declaration or by not reviewing patches or committing patches to the project for over six months. An emeritus committer may request reinstatement of commit access from the PMC which must be approved by lazy consensus of the active PMC members.</p><p>Commit access can be revoked by a unanimous vote of all the active PMC members (except the committer in question if he or she is also a PMC member).</p><p>All Apache committers are required to have a signed <a href="http://www.apache.org/licenses/icla.txt" target="_blank" rel="noopener noreferrer">Contributor License Agreement</a> on file with the Apache Software Foundation. There is a <a href="http://www.apache.org/dev/committers.html" target="_blank" rel="noopener noreferrer">Committer FAQ</a> which provides more details on the requirements for committers.</p><p>A committer who makes a sustained contribution to the project may be invited to become a member of the PMC. The form of contribution is not limited to code. It can also include code review, helping out users on the mailing lists, documentation, etc.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="project-management-committee">Project Management Committee<a href="#project-management-committee" class="hash-link" aria-label="Direct link to Project Management Committee" title="Direct link to Project Management Committee">​</a></h2><p>The PMC is responsible to the board and the ASF for the management and oversight of the Apache BookKeeper codebase. The responsibilities of the PMC include:</p><ul><li>Deciding what is distributed as products of the Apache BookKeeper project. In particular all releases must be approved by the PMC.</li><li>Maintaining the project&#x27;s shared resources, including the codebase repository, mailing lists, websites.</li><li>Speaking on behalf of the project.</li><li>Resolving license disputes regarding products of the project.</li><li>Nominating new PMC members and committers.</li><li>Maintaining these bylaws and other guidelines of the project.</li><li>Membership of the PMC is by invitation only and must be approved by a lazy consensus of active PMC members. A PMC member is considered emeritus by his or her own declaration or by not contributing in any form to the project for over six months. An emeritus member may request reinstatement to the PMC, which must be approved by a lazy consensus of active PMC members.</li><li>Membership of the PMC can be revoked by an unanimous vote of all the active PMC members other than the member in question.</li></ul><p>The chair of the PMC is appointed by the ASF board. The chair is an office holder of the Apache Software Foundation (Vice President, Apache BookKeeper) and has primary responsibility to the board for the management of the projects within the scope of the BookKeeper PMC. The chair reports to the board quarterly on developments within the BookKeeper project.</p><p>When the current chair of the PMC resigns, the PMC votes to recommend a new chair using lazy consensus, but the decision must be ratified by the Apache board.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="decision-making">Decision making<a href="#decision-making" class="hash-link" aria-label="Direct link to Decision making" title="Direct link to Decision making">​</a></h2><p>Within the BookKeeper project, different types of decisions require different forms of approval. For example, the previous section describes several decisions which require &#x27;lazy consensus&#x27; approval. This section defines how voting is performed, the types of approvals, and which types of decision require which type of approval.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="voting">Voting<a href="#voting" class="hash-link" aria-label="Direct link to Voting" title="Direct link to Voting">​</a></h2><p>Decisions regarding the project are made by votes on the primary project development mailing list <a href="mailto:dev@bookkeeper.apache.org." target="_blank" rel="noopener noreferrer">dev@bookkeeper.apache.org.</a> Where necessary, PMC voting may take place on the private BookKeeper PMC mailing list <a href="mailto:private@bookkeeper.apache.org." target="_blank" rel="noopener noreferrer">private@bookkeeper.apache.org.</a> Votes are clearly indicated by subject line starting with <!-- -->[VOTE]<!-- -->. Votes may contain multiple items for approval and these should be clearly separated. Voting is carried out by replying to the vote mail. Voting may take four flavors.</p><table><thead><tr><th align="left">Vote</th><th align="left">Meaning</th></tr></thead><tbody><tr><td align="left">+1</td><td align="left">&#x27;Yes,&#x27; &#x27;Agree,&#x27; or &#x27;the action should be performed.&#x27; In general, this vote also indicates a willingness on the behalf of the voter in &#x27;making it happen&#x27;.</td></tr><tr><td align="left">+0</td><td align="left">This vote indicates a willingness for the action under consideration to go ahead. The voter, however will not be able to help.</td></tr><tr><td align="left">-0</td><td align="left">This vote indicates that the voter does not, in general, agree with the proposed action but is not concerned enough to prevent the action going ahead.</td></tr><tr><td align="left">-1</td><td align="left">This is a negative vote. On issues where consensus is required, this vote counts as a veto. All vetoes must contain an explanation of why the veto is appropriate. Vetoes with no explanation are void. It may also be appropriate for a -1 vote to include an alternative course of action.</td></tr></tbody></table><p>All participants in the BookKeeper project are encouraged to show their agreement with or against a particular action by voting. For technical decisions, only the votes of active committers are binding. Non binding votes are still useful for those with binding votes to understand the perception of an action in the wider BookKeeper community. For PMC decisions, only the votes of PMC members are binding.</p><p>Voting can also be applied to changes already made to the BookKeeper codebase. These typically take the form of a veto (-1) in reply to the commit message sent when the commit is made. Note that this should be a rare occurrence. All efforts should be made to discuss issues when they are still patches before the code is committed.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="approvals">Approvals<a href="#approvals" class="hash-link" aria-label="Direct link to Approvals" title="Direct link to Approvals">​</a></h2><p>There are the types of approvals that can be sought. Different actions require different types of approvals.</p><table><thead><tr><th align="left">Approval type</th><th align="left">Definition</th></tr></thead><tbody><tr><td align="left">Consensus</td><td align="left">For this to pass, all voters with binding votes must vote and there can be no binding vetoes (-1). Consensus votes are rarely required due to the impracticality of getting all eligible voters to cast a vote.</td></tr><tr><td align="left">Lazy Consensus</td><td align="left">Lazy consensus requires 3 binding + 1 votes and no binding vetoes.</td></tr><tr><td align="left">Lazy Majority</td><td align="left">A lazy majority vote requires 3 binding +1 votes and more binding +1 votes that -1 votes.</td></tr><tr><td align="left">Lazy Approval</td><td align="left">An action with lazy approval is implicitly allowed unless a -1 vote is received, at which time, depending on the type of action, either lazy majority or lazy consensus approval must be obtained.</td></tr><tr><td align="left">2/3 Majority</td><td align="left">Some actions require a 2/3 majority of active committers or PMC members to pass. Such actions typically affect the foundation of the project (e.g. adopting a new codebase to replace an existing product). The higher threshold is designed to ensure such changes are strongly supported. To pass this vote requires at least 2/3 of binding vote holders to vote +1.</td></tr></tbody></table><h2 class="anchor anchorWithStickyNavbar_LWe7" id="vetoes">Vetoes<a href="#vetoes" class="hash-link" aria-label="Direct link to Vetoes" title="Direct link to Vetoes">​</a></h2><p>A valid, binding veto cannot be overruled. If a veto is cast, it must be accompanied by a valid reason explaining the reasons for the veto. The validity of a veto, if challenged, can be confirmed by anyone who has a binding vote. This does not necessarily signify agreement with the veto - merely that the veto is valid.</p><p>If you disagree with a valid veto, you must lobby the person casting the veto to withdraw his or her veto. If a veto is not withdrawn, the action that has been vetoed must be reversed in a timely manner.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="actions">Actions<a href="#actions" class="hash-link" aria-label="Direct link to Actions" title="Direct link to Actions">​</a></h2><p>This section describes the various actions which are undertaken within the project, the corresponding approval required for that action and those who have binding votes over the action. It also specifies the minimum length of time that a vote must remain open, measured in business days. In general votes should not be called at times when it is known that interested members of the project will be unavailable.</p><table><thead><tr><th align="left">Action</th><th align="left">Description</th><th align="left">Approval</th><th align="left">Binding Votes</th><th align="left">Min. Length (days)</th></tr></thead><tbody><tr><td align="left">Code Change</td><td align="left">A change made to a codebase of the project and committed by a committer. This includes source code, documentation, website content, etc.</td><td align="left">Lazy approval (not counting the vote of the contributor), moving to lazy majority if a -1 is received</td><td align="left">Active committer</td><td align="left">1</td></tr><tr><td align="left">Release Plan</td><td align="left">Defines the timetable and actions for a release. The plan also nominates a Release Manager.</td><td align="left">Lazy majority</td><td align="left">Active committers</td><td align="left">3</td></tr><tr><td align="left">Product Release</td><td align="left">When a release of one of the project&#x27;s products is ready, a vote is required to accept the release as an official release of the project.</td><td align="left">Lazy Majority</td><td align="left">Active PMC members</td><td align="left">3</td></tr><tr><td align="left">Adoption of New Codebase</td><td align="left">When the codebase for an existing, released product is to be replaced with an alternative codebase. If such a vote fails to gain approval, the existing code base will continue. This also covers the creation of new sub-projects within the project.</td><td align="left">2/3 majority</td><td align="left">Active PMC members</td><td align="left">6</td></tr><tr><td align="left">New Committer or reinstatement</td><td align="left">When a new committer is proposed for the project.</td><td align="left">Lazy consensus</td><td align="left">Active PMC members</td><td align="left">3</td></tr><tr><td align="left">New PMC Member or reinstatement</td><td align="left">When a committer is proposed for the PMC.</td><td align="left">Lazy consensus</td><td align="left">Active PMC members</td><td align="left">3</td></tr><tr><td align="left">Committer Removal</td><td align="left">When removal of commit privileges is sought. Note: Such actions will also be referred to the ASF board by the PMC chair.</td><td align="left">Consensus</td><td align="left">Active PMC members (excluding the committer in question if a member of the PMC).</td><td align="left">6</td></tr><tr><td align="left">PMC Member Removal</td><td align="left">When removal of a PMC member is sought. Note: Such actions will also be referred to the ASF board by the PMC chair.</td><td align="left">Consensus</td><td align="left">Active PMC members (excluding the member in question).</td><td align="left">6</td></tr><tr><td align="left">Modifying Bylaws</td><td align="left">Modifying this document.</td><td align="left">2/3 majority</td><td align="left">Active PMC members</td><td align="left">6</td></tr></tbody></table></article></div><div class="col col--2"><div class="tableOfContents_bqdL thin-scrollbar"><ul class="table-of-contents table-of-contents__left-border"><li><a href="#introduction" class="table-of-contents__link toc-highlight">Introduction</a></li><li><a href="#roles-and-responsibilities" class="table-of-contents__link toc-highlight">Roles and responsibilities</a></li><li><a href="#users" class="table-of-contents__link toc-highlight">Users</a></li><li><a href="#contributors" class="table-of-contents__link toc-highlight">Contributors</a></li><li><a href="#committers" class="table-of-contents__link toc-highlight">Committers</a></li><li><a href="#project-management-committee" class="table-of-contents__link toc-highlight">Project Management Committee</a></li><li><a href="#decision-making" class="table-of-contents__link toc-highlight">Decision making</a></li><li><a href="#voting" class="table-of-contents__link toc-highlight">Voting</a></li><li><a href="#approvals" class="table-of-contents__link toc-highlight">Approvals</a></li><li><a href="#vetoes" class="table-of-contents__link toc-highlight">Vetoes</a></li><li><a href="#actions" class="table-of-contents__link toc-highlight">Actions</a></li></ul></div></div></div></main></div><footer class="footer footer--dark"><div class="container container-fluid"><div class="row footer__links"><div class="col footer__col"><div class="footer__title">Documentation</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/docs/overview">Overview</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/getting-started/installation">Getting started</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/deployment/manual">Deployment</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/admin/bookies">Administration</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/api/overview">API</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/security/overview">Security</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/development/protocol">Development</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/reference/config">Reference</a></li></ul></div><div class="col footer__col"><div class="footer__title">Community</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/community/mailing-lists">Mailing lists</a></li><li class="footer__item"><a class="footer__link-item" href="/community/slack">Slack</a></li><li class="footer__item"><a href="https://github.com/apache/bookkeeper" target="_blank" rel="noopener noreferrer" class="footer__link-item">Github<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a href="https://twitter.com/asfbookkeeper" target="_blank" rel="noopener noreferrer" class="footer__link-item">Twitter<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div><div class="col footer__col"><div class="footer__title">Project</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/project/who">Who are we?</a></li><li class="footer__item"><a class="footer__link-item" href="/project/bylaws">Bylaws</a></li><li class="footer__item"><a href="https://apache.org/licenses" target="_blank" rel="noopener noreferrer" class="footer__link-item">License<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a class="footer__link-item" href="/project/privacy">Privacy policy</a></li><li class="footer__item"><a href="https://www.apache.org/foundation/sponsorship.html" target="_blank" rel="noopener noreferrer" class="footer__link-item">Sponsorship<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a href="https://www.apache.org/foundation/thanks.html" target="_blank" rel="noopener noreferrer" class="footer__link-item">Thanks<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div></div><div class="footer__bottom text--center"><div class="footer__copyright"><footer class="footer">
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navbar__brand" href="/"><div class="navbar__logo"><img src="/img/bk-logo.svg" alt="Apache Bookkeeper" class="themedImage_ToTc themedImage--light_HNdA"><img src="/img/bk-logo.svg" alt="Apache Bookkeeper" class="themedImage_ToTc themedImage--dark_i4oU"></div><b class="navbar__title text--truncate">Apache BookKeeper</b></a><a class="navbar__item navbar__link" href="/docs/overview/">Documentation</a><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Community</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/community/mailing-lists">Mailing lists</a></li><li><a class="dropdown__link" href="/community/slack">Slack</a></li><li><a href="https://github.com/apache/bookkeeper/issues" target="_blank" rel="noopener noreferrer" class="dropdown__link">Github issues<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a class="dropdown__link" href="/community/releases">Release management</a></li><li><a class="dropdown__link" href="/community/meeting">Community meetings</a></li><li><a class="dropdown__link" href="/community/contributing">Contribution guide</a></li><li><a class="dropdown__link" href="/community/coding-guide">Coding guide</a></li><li><a class="dropdown__link" href="/community/testing">Testing guide</a></li><li><a class="dropdown__link" href="/community/issue-report">Issue report guide</a></li><li><a class="dropdown__link" href="/community/release-guide">Release guide</a></li><li><a class="dropdown__link" href="/community/presentations">Presentations</a></li><li><a class="dropdown__link" href="/community/bookkeeper-proposals">BookKeeper proposals (BP)</a></li></ul></div><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Project</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/project/who">Who are we?</a></li><li><a aria-current="page" class="dropdown__link dropdown__link--active" href="/project/bylaws">Bylaws</a></li><li><a href="https://apache.org/licenses" target="_blank" rel="noopener noreferrer" class="dropdown__link">License<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a class="dropdown__link" href="/project/privacy">Privacy policy</a></li><li><a href="https://www.apache.org/foundation/sponsorship.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Sponsorship<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a href="https://www.apache.org/foundation/thanks.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Thanks<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div></div><div class="navbar__items navbar__items--right"><div class="navbar__item dropdown dropdown--hoverable dropdown--right"><a class="navbar__link" aria-haspopup="true" aria-expanded="false" role="button" href="/docs/overview/">4.17.0</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/docs/next/overview/">Next</a></li><li><a class="dropdown__link" href="/docs/overview/">4.17.0</a></li><li><a class="dropdown__link" href="/docs/4.16.5/overview/">4.16.5</a></li><li><a class="dropdown__link" href="/docs/4.15.5/overview/">4.15.5</a></li><li><a class="dropdown__link" href="/docs/4.14.8/overview/">4.14.8</a></li><li><a class="dropdown__link" href="/docs/4.13.0/overview/">4.13.0</a></li><li><a class="dropdown__link" href="/docs/4.12.1/overview/">4.12.1</a></li><li><a class="dropdown__link" href="/docs/4.11.1/overview/">4.11.1</a></li><li><a class="dropdown__link" href="/docs/4.10.0/overview/">4.10.0</a></li><li><a class="dropdown__link" href="/docs/4.9.2/overview/">4.9.2</a></li><li><a class="dropdown__link" href="/docs/4.8.2/overview/">4.8.2</a></li><li><a class="dropdown__link" href="/docs/4.7.3/overview/">4.7.3</a></li><li><a class="dropdown__link" href="/docs/4.6.2/overview/">4.6.2</a></li><li><a class="dropdown__link" href="/docs/4.5.1/overview/">4.5.1</a></li></ul></div><a class="navbar__item navbar__link" href="/releases">Download</a><div class="toggle_vylO colorModeToggle_DEke"><button class="clean-btn toggleButton_gllP toggleButtonDisabled_aARS" type="button" disabled="" title="Switch between dark and light mode (currently light mode)" aria-label="Switch between dark and light mode (currently light mode)" aria-live="polite"><svg viewBox="0 0 24 24" width="24" height="24" class="lightToggleIcon_pyhR"><path fill="currentColor" d="M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"></path></svg><svg viewBox="0 0 24 24" width="24" height="24" class="darkToggleIcon_wfgR"><path fill="currentColor" d="M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"></path></svg></button></div><div class="searchBox_ZlJk"></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div></nav><div id="docusaurus_skipToContent_fallback" class="main-wrapper mainWrapper_z2l0"><main class="container container--fluid margin-vert--lg"><div class="row mdxPageWrapper_j9I6"><div class="col col--8"><article><h1>Bylaws</h1><blockquote><p>This is version 1 of the bylaws. The BookKeeper PMC ratified these bylaws by a 2/3 majority vote on 2014/12/11.</p></blockquote><h2 class="anchor anchorWithStickyNavbar_LWe7" id="introduction">Introduction<a href="#introduction" class="hash-link" aria-label="Direct link to Introduction" title="Direct link to Introduction">​</a></h2><p>This document defines the bylaws under which the Apache BookKeeper project operates. It defines the roles and responsibilities of the project, who may vote, how voting works, how conflicts are resolved, etc.</p><p>BookKeeper is a project of the <a href="http://www.apache.org/" target="_blank" rel="noopener noreferrer">Apache Software Foundation</a>. The foundation holds the copyright on Apache code including the code in the BookKeeper codebase. The <a href="http://www.apache.org/foundation/faq.html" target="_blank" rel="noopener noreferrer">foundation FAQ</a> explains the operation and background of the foundation.</p><p>BookKeeper is typical of Apache projects in that it operates under a set of principles, known collectively as the Apache Way. If you are new to Apache development, please refer to the <a href="http://incubator.apache.org/" target="_blank" rel="noopener noreferrer">Incubator project</a> for more information on how Apache projects operate.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="roles-and-responsibilities">Roles and responsibilities<a href="#roles-and-responsibilities" class="hash-link" aria-label="Direct link to Roles and responsibilities" title="Direct link to Roles and responsibilities">​</a></h2><p>Apache projects define a set of roles with associated rights and responsibilities. These roles govern what tasks an individual may perform within the project. The roles are defined in the following sections.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="users">Users<a href="#users" class="hash-link" aria-label="Direct link to Users" title="Direct link to Users">​</a></h2><p>The most important participants in the project are people who use our software. The majority of our contributors start out as users and guide their development efforts from the user&#x27;s perspective.</p><p>Users contribute to the Apache projects by providing feedback to contributors in the form of bug reports and feature suggestions. As well, users participate in the Apache community by helping other users on mailing lists and user support forums.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="contributors">Contributors<a href="#contributors" class="hash-link" aria-label="Direct link to Contributors" title="Direct link to Contributors">​</a></h2><p>All of the volunteers who are contributing time, code, documentation, or resources to the BookKeeper Project. A contributor that makes sustained , welcome contributions to the project may be invited to become a committer, though the exact timing of such invitations depends on many factors.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="committers">Committers<a href="#committers" class="hash-link" aria-label="Direct link to Committers" title="Direct link to Committers">​</a></h2><p>The project&#x27;s committers are responsible for the project&#x27;s technical management. Committers have access to a specified set of subproject&#x27;s subversion repositories. Committers on subprojects may cast binding votes on any technical discussion regarding that subproject.</p><p>Committer access is by invitation only and must be approved by lazy consensus of the active PMC members. A Committer is considered emeritus by his or her own declaration or by not reviewing patches or committing patches to the project for over six months. An emeritus committer may request reinstatement of commit access from the PMC which must be approved by lazy consensus of the active PMC members.</p><p>Commit access can be revoked by a unanimous vote of all the active PMC members (except the committer in question if he or she is also a PMC member).</p><p>All Apache committers are required to have a signed <a href="http://www.apache.org/licenses/icla.txt" target="_blank" rel="noopener noreferrer">Contributor License Agreement</a> on file with the Apache Software Foundation. There is a <a href="http://www.apache.org/dev/committers.html" target="_blank" rel="noopener noreferrer">Committer FAQ</a> which provides more details on the requirements for committers.</p><p>A committer who makes a sustained contribution to the project may be invited to become a member of the PMC. The form of contribution is not limited to code. It can also include code review, helping out users on the mailing lists, documentation, etc.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="project-management-committee">Project Management Committee<a href="#project-management-committee" class="hash-link" aria-label="Direct link to Project Management Committee" title="Direct link to Project Management Committee">​</a></h2><p>The PMC is responsible to the board and the ASF for the management and oversight of the Apache BookKeeper codebase. The responsibilities of the PMC include:</p><ul><li>Deciding what is distributed as products of the Apache BookKeeper project. In particular all releases must be approved by the PMC.</li><li>Maintaining the project&#x27;s shared resources, including the codebase repository, mailing lists, websites.</li><li>Speaking on behalf of the project.</li><li>Resolving license disputes regarding products of the project.</li><li>Nominating new PMC members and committers.</li><li>Maintaining these bylaws and other guidelines of the project.</li><li>Membership of the PMC is by invitation only and must be approved by a lazy consensus of active PMC members. A PMC member is considered emeritus by his or her own declaration or by not contributing in any form to the project for over six months. An emeritus member may request reinstatement to the PMC, which must be approved by a lazy consensus of active PMC members.</li><li>Membership of the PMC can be revoked by an unanimous vote of all the active PMC members other than the member in question.</li></ul><p>The chair of the PMC is appointed by the ASF board. The chair is an office holder of the Apache Software Foundation (Vice President, Apache BookKeeper) and has primary responsibility to the board for the management of the projects within the scope of the BookKeeper PMC. The chair reports to the board quarterly on developments within the BookKeeper project.</p><p>When the current chair of the PMC resigns, the PMC votes to recommend a new chair using lazy consensus, but the decision must be ratified by the Apache board.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="decision-making">Decision making<a href="#decision-making" class="hash-link" aria-label="Direct link to Decision making" title="Direct link to Decision making">​</a></h2><p>Within the BookKeeper project, different types of decisions require different forms of approval. For example, the previous section describes several decisions which require &#x27;lazy consensus&#x27; approval. This section defines how voting is performed, the types of approvals, and which types of decision require which type of approval.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="voting">Voting<a href="#voting" class="hash-link" aria-label="Direct link to Voting" title="Direct link to Voting">​</a></h2><p>Decisions regarding the project are made by votes on the primary project development mailing list <a href="mailto:dev@bookkeeper.apache.org." target="_blank" rel="noopener noreferrer">dev@bookkeeper.apache.org.</a> Where necessary, PMC voting may take place on the private BookKeeper PMC mailing list <a href="mailto:private@bookkeeper.apache.org." target="_blank" rel="noopener noreferrer">private@bookkeeper.apache.org.</a> Votes are clearly indicated by subject line starting with <!-- -->[VOTE]<!-- -->. Votes may contain multiple items for approval and these should be clearly separated. Voting is carried out by replying to the vote mail. Voting may take four flavors.</p><table><thead><tr><th align="left">Vote</th><th align="left">Meaning</th></tr></thead><tbody><tr><td align="left">+1</td><td align="left">&#x27;Yes,&#x27; &#x27;Agree,&#x27; or &#x27;the action should be performed.&#x27; In general, this vote also indicates a willingness on the behalf of the voter in &#x27;making it happen&#x27;.</td></tr><tr><td align="left">+0</td><td align="left">This vote indicates a willingness for the action under consideration to go ahead. The voter, however will not be able to help.</td></tr><tr><td align="left">-0</td><td align="left">This vote indicates that the voter does not, in general, agree with the proposed action but is not concerned enough to prevent the action going ahead.</td></tr><tr><td align="left">-1</td><td align="left">This is a negative vote. On issues where consensus is required, this vote counts as a veto. All vetoes must contain an explanation of why the veto is appropriate. Vetoes with no explanation are void. It may also be appropriate for a -1 vote to include an alternative course of action.</td></tr></tbody></table><p>All participants in the BookKeeper project are encouraged to show their agreement with or against a particular action by voting. For technical decisions, only the votes of active committers are binding. Non binding votes are still useful for those with binding votes to understand the perception of an action in the wider BookKeeper community. For PMC decisions, only the votes of PMC members are binding.</p><p>Voting can also be applied to changes already made to the BookKeeper codebase. These typically take the form of a veto (-1) in reply to the commit message sent when the commit is made. Note that this should be a rare occurrence. All efforts should be made to discuss issues when they are still patches before the code is committed.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="approvals">Approvals<a href="#approvals" class="hash-link" aria-label="Direct link to Approvals" title="Direct link to Approvals">​</a></h2><p>There are the types of approvals that can be sought. Different actions require different types of approvals.</p><table><thead><tr><th align="left">Approval type</th><th align="left">Definition</th></tr></thead><tbody><tr><td align="left">Consensus</td><td align="left">For this to pass, all voters with binding votes must vote and there can be no binding vetoes (-1). Consensus votes are rarely required due to the impracticality of getting all eligible voters to cast a vote.</td></tr><tr><td align="left">Lazy Consensus</td><td align="left">Lazy consensus requires 3 binding + 1 votes and no binding vetoes.</td></tr><tr><td align="left">Lazy Majority</td><td align="left">A lazy majority vote requires 3 binding +1 votes and more binding +1 votes that -1 votes.</td></tr><tr><td align="left">Lazy Approval</td><td align="left">An action with lazy approval is implicitly allowed unless a -1 vote is received, at which time, depending on the type of action, either lazy majority or lazy consensus approval must be obtained.</td></tr><tr><td align="left">2/3 Majority</td><td align="left">Some actions require a 2/3 majority of active committers or PMC members to pass. Such actions typically affect the foundation of the project (e.g. adopting a new codebase to replace an existing product). The higher threshold is designed to ensure such changes are strongly supported. To pass this vote requires at least 2/3 of binding vote holders to vote +1.</td></tr></tbody></table><h2 class="anchor anchorWithStickyNavbar_LWe7" id="vetoes">Vetoes<a href="#vetoes" class="hash-link" aria-label="Direct link to Vetoes" title="Direct link to Vetoes">​</a></h2><p>A valid, binding veto cannot be overruled. If a veto is cast, it must be accompanied by a valid reason explaining the reasons for the veto. The validity of a veto, if challenged, can be confirmed by anyone who has a binding vote. This does not necessarily signify agreement with the veto - merely that the veto is valid.</p><p>If you disagree with a valid veto, you must lobby the person casting the veto to withdraw his or her veto. If a veto is not withdrawn, the action that has been vetoed must be reversed in a timely manner.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="actions">Actions<a href="#actions" class="hash-link" aria-label="Direct link to Actions" title="Direct link to Actions">​</a></h2><p>This section describes the various actions which are undertaken within the project, the corresponding approval required for that action and those who have binding votes over the action. It also specifies the minimum length of time that a vote must remain open, measured in business days. In general votes should not be called at times when it is known that interested members of the project will be unavailable.</p><table><thead><tr><th align="left">Action</th><th align="left">Description</th><th align="left">Approval</th><th align="left">Binding Votes</th><th align="left">Min. Length (days)</th></tr></thead><tbody><tr><td align="left">Code Change</td><td align="left">A change made to a codebase of the project and committed by a committer. This includes source code, documentation, website content, etc.</td><td align="left">Lazy approval (not counting the vote of the contributor), moving to lazy majority if a -1 is received</td><td align="left">Active committer</td><td align="left">1</td></tr><tr><td align="left">Release Plan</td><td align="left">Defines the timetable and actions for a release. The plan also nominates a Release Manager.</td><td align="left">Lazy majority</td><td align="left">Active committers</td><td align="left">3</td></tr><tr><td align="left">Product Release</td><td align="left">When a release of one of the project&#x27;s products is ready, a vote is required to accept the release as an official release of the project.</td><td align="left">Lazy Majority</td><td align="left">Active PMC members</td><td align="left">3</td></tr><tr><td align="left">Adoption of New Codebase</td><td align="left">When the codebase for an existing, released product is to be replaced with an alternative codebase. If such a vote fails to gain approval, the existing code base will continue. This also covers the creation of new sub-projects within the project.</td><td align="left">2/3 majority</td><td align="left">Active PMC members</td><td align="left">6</td></tr><tr><td align="left">New Committer or reinstatement</td><td align="left">When a new committer is proposed for the project.</td><td align="left">Lazy consensus</td><td align="left">Active PMC members</td><td align="left">3</td></tr><tr><td align="left">New PMC Member or reinstatement</td><td align="left">When a committer is proposed for the PMC.</td><td align="left">Lazy consensus</td><td align="left">Active PMC members</td><td align="left">3</td></tr><tr><td align="left">Committer Removal</td><td align="left">When removal of commit privileges is sought. Note: Such actions will also be referred to the ASF board by the PMC chair.</td><td align="left">Consensus</td><td align="left">Active PMC members (excluding the committer in question if a member of the PMC).</td><td align="left">6</td></tr><tr><td align="left">PMC Member Removal</td><td align="left">When removal of a PMC member is sought. Note: Such actions will also be referred to the ASF board by the PMC chair.</td><td align="left">Consensus</td><td align="left">Active PMC members (excluding the member in question).</td><td align="left">6</td></tr><tr><td align="left">Modifying Bylaws</td><td align="left">Modifying this document.</td><td align="left">2/3 majority</td><td align="left">Active PMC members</td><td align="left">6</td></tr></tbody></table></article></div><div class="col col--2"><div class="tableOfContents_bqdL thin-scrollbar"><ul class="table-of-contents table-of-contents__left-border"><li><a href="#introduction" class="table-of-contents__link toc-highlight">Introduction</a></li><li><a href="#roles-and-responsibilities" class="table-of-contents__link toc-highlight">Roles and responsibilities</a></li><li><a href="#users" class="table-of-contents__link toc-highlight">Users</a></li><li><a href="#contributors" class="table-of-contents__link toc-highlight">Contributors</a></li><li><a href="#committers" class="table-of-contents__link toc-highlight">Committers</a></li><li><a href="#project-management-committee" class="table-of-contents__link toc-highlight">Project Management Committee</a></li><li><a href="#decision-making" class="table-of-contents__link toc-highlight">Decision making</a></li><li><a href="#voting" class="table-of-contents__link toc-highlight">Voting</a></li><li><a href="#approvals" class="table-of-contents__link toc-highlight">Approvals</a></li><li><a href="#vetoes" class="table-of-contents__link toc-highlight">Vetoes</a></li><li><a href="#actions" class="table-of-contents__link toc-highlight">Actions</a></li></ul></div></div></div></main></div><footer class="footer footer--dark"><div class="container container-fluid"><div class="row footer__links"><div class="col footer__col"><div class="footer__title">Documentation</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/docs/overview">Overview</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/getting-started/installation">Getting started</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/deployment/manual">Deployment</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/admin/bookies">Administration</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/api/overview">API</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/security/overview">Security</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/development/protocol">Development</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/reference/config">Reference</a></li></ul></div><div class="col footer__col"><div class="footer__title">Community</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/community/mailing-lists">Mailing lists</a></li><li class="footer__item"><a class="footer__link-item" href="/community/slack">Slack</a></li><li class="footer__item"><a href="https://github.com/apache/bookkeeper" target="_blank" rel="noopener noreferrer" class="footer__link-item">Github<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a href="https://twitter.com/asfbookkeeper" target="_blank" rel="noopener noreferrer" class="footer__link-item">Twitter<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div><div class="col footer__col"><div class="footer__title">Project</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/project/who">Who are we?</a></li><li class="footer__item"><a class="footer__link-item" href="/project/bylaws">Bylaws</a></li><li class="footer__item"><a href="https://apache.org/licenses" target="_blank" rel="noopener noreferrer" class="footer__link-item">License<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a class="footer__link-item" href="/project/privacy">Privacy policy</a></li><li class="footer__item"><a href="https://www.apache.org/foundation/sponsorship.html" target="_blank" rel="noopener noreferrer" class="footer__link-item">Sponsorship<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a href="https://www.apache.org/foundation/thanks.html" target="_blank" rel="noopener noreferrer" class="footer__link-item">Thanks<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div></div><div class="footer__bottom text--center"><div class="footer__copyright"><footer class="footer">
         <div class="container">
           <div class="content has-text-centered">
             <p>
@@ -22,7 +22,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/project/privacy/index.html b/content/project/privacy/index.html
index fcbba73..b4da676 100644
--- a/content/project/privacy/index.html
+++ b/content/project/privacy/index.html
@@ -4,12 +4,12 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">Privacy policy | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/project/privacy"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docusaurus_tag" content="default"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docsearch:docusaurus_tag" content="default"><meta data-rh="true" property="og:title" content="Privacy policy | Apache BookKeeper"><meta data-rh="true" name="description" content="Information about your use of this website is collected using server access logs and a tracking cookie. The collected information consists of the following:"><meta data-rh="true" property="og:description" content="Information about your use of this website is collected using server access logs and a tracking cookie. The collected information consists of the following:"><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/project/privacy"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/project/privacy" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/project/privacy" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
-<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navbar__brand" href="/"><div class="navbar__logo"><img src="/img/bk-logo.svg" alt="Apache Bookkeeper" class="themedImage_ToTc themedImage--light_HNdA"><img src="/img/bk-logo.svg" alt="Apache Bookkeeper" class="themedImage_ToTc themedImage--dark_i4oU"></div><b class="navbar__title text--truncate">Apache BookKeeper</b></a><a class="navbar__item navbar__link" href="/docs/overview/">Documentation</a><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Community</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/community/mailing-lists">Mailing lists</a></li><li><a class="dropdown__link" href="/community/slack">Slack</a></li><li><a href="https://github.com/apache/bookkeeper/issues" target="_blank" rel="noopener noreferrer" class="dropdown__link">Github issues<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a class="dropdown__link" href="/community/releases">Release management</a></li><li><a class="dropdown__link" href="/community/meeting">Community meetings</a></li><li><a class="dropdown__link" href="/community/contributing">Contribution guide</a></li><li><a class="dropdown__link" href="/community/coding-guide">Coding guide</a></li><li><a class="dropdown__link" href="/community/testing">Testing guide</a></li><li><a class="dropdown__link" href="/community/issue-report">Issue report guide</a></li><li><a class="dropdown__link" href="/community/release-guide">Release guide</a></li><li><a class="dropdown__link" href="/community/presentations">Presentations</a></li><li><a class="dropdown__link" href="/community/bookkeeper-proposals">BookKeeper proposals (BP)</a></li></ul></div><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Project</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/project/who">Who are we?</a></li><li><a class="dropdown__link" href="/project/bylaws">Bylaws</a></li><li><a href="https://apache.org/licenses" target="_blank" rel="noopener noreferrer" class="dropdown__link">License<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a aria-current="page" class="dropdown__link dropdown__link--active" href="/project/privacy">Privacy policy</a></li><li><a href="https://www.apache.org/foundation/sponsorship.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Sponsorship<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a href="https://www.apache.org/foundation/thanks.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Thanks<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div></div><div class="navbar__items navbar__items--right"><div class="navbar__item dropdown dropdown--hoverable dropdown--right"><a class="navbar__link" aria-haspopup="true" aria-expanded="false" role="button" href="/docs/admin/autorecovery">4.17.0</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/docs/next/overview/">Next</a></li><li><a class="dropdown__link" href="/docs/admin/autorecovery">4.17.0</a></li><li><a class="dropdown__link" href="/docs/4.16.5/overview/">4.16.5</a></li><li><a class="dropdown__link" href="/docs/4.15.5/overview/">4.15.5</a></li><li><a class="dropdown__link" href="/docs/4.14.8/overview/">4.14.8</a></li><li><a class="dropdown__link" href="/docs/4.13.0/overview/">4.13.0</a></li><li><a class="dropdown__link" href="/docs/4.12.1/overview/">4.12.1</a></li><li><a class="dropdown__link" href="/docs/4.11.1/overview/">4.11.1</a></li><li><a class="dropdown__link" href="/docs/4.10.0/overview/">4.10.0</a></li><li><a class="dropdown__link" href="/docs/4.9.2/overview/">4.9.2</a></li><li><a class="dropdown__link" href="/docs/4.8.2/overview/">4.8.2</a></li><li><a class="dropdown__link" href="/docs/4.7.3/overview/">4.7.3</a></li><li><a class="dropdown__link" href="/docs/4.6.2/overview/">4.6.2</a></li><li><a class="dropdown__link" href="/docs/4.5.1/overview/">4.5.1</a></li></ul></div><a class="navbar__item navbar__link" href="/releases">Download</a><div class="toggle_vylO colorModeToggle_DEke"><button class="clean-btn toggleButton_gllP toggleButtonDisabled_aARS" type="button" disabled="" title="Switch between dark and light mode (currently light mode)" aria-label="Switch between dark and light mode (currently light mode)" aria-live="polite"><svg viewBox="0 0 24 24" width="24" height="24" class="lightToggleIcon_pyhR"><path fill="currentColor" d="M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"></path></svg><svg viewBox="0 0 24 24" width="24" height="24" class="darkToggleIcon_wfgR"><path fill="currentColor" d="M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"></path></svg></button></div><div class="searchBox_ZlJk"></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div></nav><div id="docusaurus_skipToContent_fallback" class="main-wrapper mainWrapper_z2l0"><main class="container container--fluid margin-vert--lg"><div class="row mdxPageWrapper_j9I6"><div class="col col--8"><article><h1>Privacy policy</h1><p>Information about your use of this website is collected using server access logs and a tracking cookie. The collected information consists of the following:</p><ol><li>The IP address from which you access the website</li><li>The type of browser and operating system you use to access our site</li><li>The date and time you access our site</li><li>The pages you visit</li><li>The addresses of pages from where you followed a link to our site. Part of this information is gathered using a tracking cookie set by the <a href="http://www.google.com/analytics/" target="_blank" rel="noopener noreferrer">Google Analytics</a> service and handled by Google as described in their <a href="http://www.google.com/privacy.html" target="_blank" rel="noopener noreferrer">privacy policy</a>. See your browser documentation for instructions on how to disable the cookie if you prefer not to share this data with Google.</li></ol><p>We use the gathered information to help us make our site more useful to visitors and to better understand how and when our site is used. We do not track or collect personally identifiable information or associate gathered data with any personally identifying information from other sources.</p><p>By using this website, you consent to the collection of this data in the manner and for the purpose described above.</p></article></div></div></main></div><footer class="footer footer--dark"><div class="container container-fluid"><div class="row footer__links"><div class="col footer__col"><div class="footer__title">Documentation</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/docs/overview">Overview</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/getting-started/installation">Getting started</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/deployment/manual">Deployment</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/admin/bookies">Administration</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/api/overview">API</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/security/overview">Security</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/development/protocol">Development</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/reference/config">Reference</a></li></ul></div><div class="col footer__col"><div class="footer__title">Community</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/community/mailing-lists">Mailing lists</a></li><li class="footer__item"><a class="footer__link-item" href="/community/slack">Slack</a></li><li class="footer__item"><a href="https://github.com/apache/bookkeeper" target="_blank" rel="noopener noreferrer" class="footer__link-item">Github<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a href="https://twitter.com/asfbookkeeper" target="_blank" rel="noopener noreferrer" class="footer__link-item">Twitter<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div><div class="col footer__col"><div class="footer__title">Project</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/project/who">Who are we?</a></li><li class="footer__item"><a class="footer__link-item" href="/project/bylaws">Bylaws</a></li><li class="footer__item"><a href="https://apache.org/licenses" target="_blank" rel="noopener noreferrer" class="footer__link-item">License<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a class="footer__link-item" href="/project/privacy">Privacy policy</a></li><li class="footer__item"><a href="https://www.apache.org/foundation/sponsorship.html" target="_blank" rel="noopener noreferrer" class="footer__link-item">Sponsorship<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a href="https://www.apache.org/foundation/thanks.html" target="_blank" rel="noopener noreferrer" class="footer__link-item">Thanks<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div></div><div class="footer__bottom text--center"><div class="footer__copyright"><footer class="footer">
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navbar__brand" href="/"><div class="navbar__logo"><img src="/img/bk-logo.svg" alt="Apache Bookkeeper" class="themedImage_ToTc themedImage--light_HNdA"><img src="/img/bk-logo.svg" alt="Apache Bookkeeper" class="themedImage_ToTc themedImage--dark_i4oU"></div><b class="navbar__title text--truncate">Apache BookKeeper</b></a><a class="navbar__item navbar__link" href="/docs/overview/">Documentation</a><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Community</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/community/mailing-lists">Mailing lists</a></li><li><a class="dropdown__link" href="/community/slack">Slack</a></li><li><a href="https://github.com/apache/bookkeeper/issues" target="_blank" rel="noopener noreferrer" class="dropdown__link">Github issues<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a class="dropdown__link" href="/community/releases">Release management</a></li><li><a class="dropdown__link" href="/community/meeting">Community meetings</a></li><li><a class="dropdown__link" href="/community/contributing">Contribution guide</a></li><li><a class="dropdown__link" href="/community/coding-guide">Coding guide</a></li><li><a class="dropdown__link" href="/community/testing">Testing guide</a></li><li><a class="dropdown__link" href="/community/issue-report">Issue report guide</a></li><li><a class="dropdown__link" href="/community/release-guide">Release guide</a></li><li><a class="dropdown__link" href="/community/presentations">Presentations</a></li><li><a class="dropdown__link" href="/community/bookkeeper-proposals">BookKeeper proposals (BP)</a></li></ul></div><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Project</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/project/who">Who are we?</a></li><li><a class="dropdown__link" href="/project/bylaws">Bylaws</a></li><li><a href="https://apache.org/licenses" target="_blank" rel="noopener noreferrer" class="dropdown__link">License<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a aria-current="page" class="dropdown__link dropdown__link--active" href="/project/privacy">Privacy policy</a></li><li><a href="https://www.apache.org/foundation/sponsorship.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Sponsorship<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a href="https://www.apache.org/foundation/thanks.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Thanks<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div></div><div class="navbar__items navbar__items--right"><div class="navbar__item dropdown dropdown--hoverable dropdown--right"><a class="navbar__link" aria-haspopup="true" aria-expanded="false" role="button" href="/docs/overview/">4.17.0</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/docs/next/overview/">Next</a></li><li><a class="dropdown__link" href="/docs/overview/">4.17.0</a></li><li><a class="dropdown__link" href="/docs/4.16.5/overview/">4.16.5</a></li><li><a class="dropdown__link" href="/docs/4.15.5/overview/">4.15.5</a></li><li><a class="dropdown__link" href="/docs/4.14.8/overview/">4.14.8</a></li><li><a class="dropdown__link" href="/docs/4.13.0/overview/">4.13.0</a></li><li><a class="dropdown__link" href="/docs/4.12.1/overview/">4.12.1</a></li><li><a class="dropdown__link" href="/docs/4.11.1/overview/">4.11.1</a></li><li><a class="dropdown__link" href="/docs/4.10.0/overview/">4.10.0</a></li><li><a class="dropdown__link" href="/docs/4.9.2/overview/">4.9.2</a></li><li><a class="dropdown__link" href="/docs/4.8.2/overview/">4.8.2</a></li><li><a class="dropdown__link" href="/docs/4.7.3/overview/">4.7.3</a></li><li><a class="dropdown__link" href="/docs/4.6.2/overview/">4.6.2</a></li><li><a class="dropdown__link" href="/docs/4.5.1/overview/">4.5.1</a></li></ul></div><a class="navbar__item navbar__link" href="/releases">Download</a><div class="toggle_vylO colorModeToggle_DEke"><button class="clean-btn toggleButton_gllP toggleButtonDisabled_aARS" type="button" disabled="" title="Switch between dark and light mode (currently light mode)" aria-label="Switch between dark and light mode (currently light mode)" aria-live="polite"><svg viewBox="0 0 24 24" width="24" height="24" class="lightToggleIcon_pyhR"><path fill="currentColor" d="M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"></path></svg><svg viewBox="0 0 24 24" width="24" height="24" class="darkToggleIcon_wfgR"><path fill="currentColor" d="M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"></path></svg></button></div><div class="searchBox_ZlJk"></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div></nav><div id="docusaurus_skipToContent_fallback" class="main-wrapper mainWrapper_z2l0"><main class="container container--fluid margin-vert--lg"><div class="row mdxPageWrapper_j9I6"><div class="col col--8"><article><h1>Privacy policy</h1><p>Information about your use of this website is collected using server access logs and a tracking cookie. The collected information consists of the following:</p><ol><li>The IP address from which you access the website</li><li>The type of browser and operating system you use to access our site</li><li>The date and time you access our site</li><li>The pages you visit</li><li>The addresses of pages from where you followed a link to our site. Part of this information is gathered using a tracking cookie set by the <a href="http://www.google.com/analytics/" target="_blank" rel="noopener noreferrer">Google Analytics</a> service and handled by Google as described in their <a href="http://www.google.com/privacy.html" target="_blank" rel="noopener noreferrer">privacy policy</a>. See your browser documentation for instructions on how to disable the cookie if you prefer not to share this data with Google.</li></ol><p>We use the gathered information to help us make our site more useful to visitors and to better understand how and when our site is used. We do not track or collect personally identifiable information or associate gathered data with any personally identifying information from other sources.</p><p>By using this website, you consent to the collection of this data in the manner and for the purpose described above.</p></article></div></div></main></div><footer class="footer footer--dark"><div class="container container-fluid"><div class="row footer__links"><div class="col footer__col"><div class="footer__title">Documentation</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/docs/overview">Overview</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/getting-started/installation">Getting started</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/deployment/manual">Deployment</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/admin/bookies">Administration</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/api/overview">API</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/security/overview">Security</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/development/protocol">Development</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/reference/config">Reference</a></li></ul></div><div class="col footer__col"><div class="footer__title">Community</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/community/mailing-lists">Mailing lists</a></li><li class="footer__item"><a class="footer__link-item" href="/community/slack">Slack</a></li><li class="footer__item"><a href="https://github.com/apache/bookkeeper" target="_blank" rel="noopener noreferrer" class="footer__link-item">Github<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a href="https://twitter.com/asfbookkeeper" target="_blank" rel="noopener noreferrer" class="footer__link-item">Twitter<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div><div class="col footer__col"><div class="footer__title">Project</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/project/who">Who are we?</a></li><li class="footer__item"><a class="footer__link-item" href="/project/bylaws">Bylaws</a></li><li class="footer__item"><a href="https://apache.org/licenses" target="_blank" rel="noopener noreferrer" class="footer__link-item">License<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a class="footer__link-item" href="/project/privacy">Privacy policy</a></li><li class="footer__item"><a href="https://www.apache.org/foundation/sponsorship.html" target="_blank" rel="noopener noreferrer" class="footer__link-item">Sponsorship<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a href="https://www.apache.org/foundation/thanks.html" target="_blank" rel="noopener noreferrer" class="footer__link-item">Thanks<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div></div><div class="footer__bottom text--center"><div class="footer__copyright"><footer class="footer">
         <div class="container">
           <div class="content has-text-centered">
             <p>
@@ -22,7 +22,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/project/who/index.html b/content/project/who/index.html
index a529859..ebf4e2a 100644
--- a/content/project/who/index.html
+++ b/content/project/who/index.html
@@ -4,12 +4,12 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">Who are we? | Apache BookKeeper</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/project/who"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docusaurus_tag" content="default"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docsearch:docusaurus_tag" content="default"><meta data-rh="true" property="og:title" content="Who are we? | Apache BookKeeper"><meta data-rh="true" name="description" content="PMC members"><meta data-rh="true" property="og:description" content="PMC members"><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/project/who"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/project/who" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/project/who" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
-<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navbar__brand" href="/"><div class="navbar__logo"><img src="/img/bk-logo.svg" alt="Apache Bookkeeper" class="themedImage_ToTc themedImage--light_HNdA"><img src="/img/bk-logo.svg" alt="Apache Bookkeeper" class="themedImage_ToTc themedImage--dark_i4oU"></div><b class="navbar__title text--truncate">Apache BookKeeper</b></a><a class="navbar__item navbar__link" href="/docs/overview/">Documentation</a><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Community</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/community/mailing-lists">Mailing lists</a></li><li><a class="dropdown__link" href="/community/slack">Slack</a></li><li><a href="https://github.com/apache/bookkeeper/issues" target="_blank" rel="noopener noreferrer" class="dropdown__link">Github issues<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a class="dropdown__link" href="/community/releases">Release management</a></li><li><a class="dropdown__link" href="/community/meeting">Community meetings</a></li><li><a class="dropdown__link" href="/community/contributing">Contribution guide</a></li><li><a class="dropdown__link" href="/community/coding-guide">Coding guide</a></li><li><a class="dropdown__link" href="/community/testing">Testing guide</a></li><li><a class="dropdown__link" href="/community/issue-report">Issue report guide</a></li><li><a class="dropdown__link" href="/community/release-guide">Release guide</a></li><li><a class="dropdown__link" href="/community/presentations">Presentations</a></li><li><a class="dropdown__link" href="/community/bookkeeper-proposals">BookKeeper proposals (BP)</a></li></ul></div><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Project</a><ul class="dropdown__menu"><li><a aria-current="page" class="dropdown__link dropdown__link--active" href="/project/who">Who are we?</a></li><li><a class="dropdown__link" href="/project/bylaws">Bylaws</a></li><li><a href="https://apache.org/licenses" target="_blank" rel="noopener noreferrer" class="dropdown__link">License<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a class="dropdown__link" href="/project/privacy">Privacy policy</a></li><li><a href="https://www.apache.org/foundation/sponsorship.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Sponsorship<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a href="https://www.apache.org/foundation/thanks.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Thanks<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div></div><div class="navbar__items navbar__items--right"><div class="navbar__item dropdown dropdown--hoverable dropdown--right"><a class="navbar__link" aria-haspopup="true" aria-expanded="false" role="button" href="/docs/admin/autorecovery">4.17.0</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/docs/next/overview/">Next</a></li><li><a class="dropdown__link" href="/docs/admin/autorecovery">4.17.0</a></li><li><a class="dropdown__link" href="/docs/4.16.5/overview/">4.16.5</a></li><li><a class="dropdown__link" href="/docs/4.15.5/overview/">4.15.5</a></li><li><a class="dropdown__link" href="/docs/4.14.8/overview/">4.14.8</a></li><li><a class="dropdown__link" href="/docs/4.13.0/overview/">4.13.0</a></li><li><a class="dropdown__link" href="/docs/4.12.1/overview/">4.12.1</a></li><li><a class="dropdown__link" href="/docs/4.11.1/overview/">4.11.1</a></li><li><a class="dropdown__link" href="/docs/4.10.0/overview/">4.10.0</a></li><li><a class="dropdown__link" href="/docs/4.9.2/overview/">4.9.2</a></li><li><a class="dropdown__link" href="/docs/4.8.2/overview/">4.8.2</a></li><li><a class="dropdown__link" href="/docs/4.7.3/overview/">4.7.3</a></li><li><a class="dropdown__link" href="/docs/4.6.2/overview/">4.6.2</a></li><li><a class="dropdown__link" href="/docs/4.5.1/overview/">4.5.1</a></li></ul></div><a class="navbar__item navbar__link" href="/releases">Download</a><div class="toggle_vylO colorModeToggle_DEke"><button class="clean-btn toggleButton_gllP toggleButtonDisabled_aARS" type="button" disabled="" title="Switch between dark and light mode (currently light mode)" aria-label="Switch between dark and light mode (currently light mode)" aria-live="polite"><svg viewBox="0 0 24 24" width="24" height="24" class="lightToggleIcon_pyhR"><path fill="currentColor" d="M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"></path></svg><svg viewBox="0 0 24 24" width="24" height="24" class="darkToggleIcon_wfgR"><path fill="currentColor" d="M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"></path></svg></button></div><div class="searchBox_ZlJk"></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div></nav><div id="docusaurus_skipToContent_fallback" class="main-wrapper mainWrapper_z2l0"><main class="container container--fluid margin-vert--lg"><div class="row mdxPageWrapper_j9I6"><div class="col col--8"><article><h1>Who are we?</h1><h2 class="anchor anchorWithStickyNavbar_LWe7" id="pmc-members">PMC members<a href="#pmc-members" class="hash-link" aria-label="Direct link to PMC members" title="Direct link to PMC members">​</a></h2><p>BookKeeper&#x27;s PMC members are:</p><table><thead><tr><th align="left">Username</th><th align="left">Name</th><th align="left">Organization</th><th align="left">Timezone</th></tr></thead><tbody><tr><td align="left">ayegorov</td><td align="left">Andrey Yegorov</td><td align="left">Datastax</td><td align="left">-8</td></tr><tr><td align="left">breed</td><td align="left">Ben Reed</td><td align="left">Facebook</td><td align="left">-8</td></tr><tr><td align="left">drusek</td><td align="left">Dave Rusek</td><td align="left">Twitter</td><td align="left">-7</td></tr><tr><td align="left">eolivelli</td><td align="left">Enrico Olivelli</td><td align="left">Diennea</td><td align="left">+2</td></tr><tr><td align="left">fcuny</td><td align="left">Franck Cuny</td><td align="left">Twitter</td><td align="left">-8</td></tr><tr><td align="left">fpj</td><td align="left">Flavio Junqueira</td><td align="left">Microsoft</td><td align="left">+1</td></tr><tr><td align="left">hsaputra</td><td align="left">Henry Saputra</td><td align="left"></td><td align="left">-8</td></tr><tr><td align="left">ivank</td><td align="left">Ivan Kelly</td><td align="left">Midokura</td><td align="left">+2</td></tr><tr><td align="left">jiannan</td><td align="left">Jiannan Wang</td><td align="left">Yahoo Inc.</td><td align="left">+8</td></tr><tr><td align="left">jujjuri</td><td align="left">Venkateswararao (JV) Jujjuri</td><td align="left">Salesforce</td><td align="left">-8</td></tr><tr><td align="left">lstewart</td><td align="left">Leigh Stewart</td><td align="left">Twitter</td><td align="left">-8</td></tr><tr><td align="left">mmerli</td><td align="left">Matteo Merli</td><td align="left">StreamNative</td><td align="left">-8</td></tr><tr><td align="left">rakeshr</td><td align="left">Rakesh Radhakrishnan</td><td align="left">Huawei</td><td align="left">+5:30</td></tr><tr><td align="left">sijie</td><td align="left">Sijie Guo</td><td align="left">StreamNative</td><td align="left">-8</td></tr><tr><td align="left">umamahesh</td><td align="left">Uma Maheswara Rao G</td><td align="left">Intel</td><td align="left">+5</td></tr><tr><td align="left">zhaijia</td><td align="left">Jia Zhai</td><td align="left">StreamNative</td><td align="left">+8</td></tr></tbody></table><h2 class="anchor anchorWithStickyNavbar_LWe7" id="committers">Committers<a href="#committers" class="hash-link" aria-label="Direct link to Committers" title="Direct link to Committers">​</a></h2><p>BookKeeper&#x27;s active committers are:</p><table><thead><tr><th align="left">Username</th><th align="left">Name</th><th align="left">Organization</th><th align="left">Timezone</th></tr></thead><tbody><tr><td align="left">ayegorov</td><td align="left">Andrey Yegorov</td><td align="left">Datastax</td><td align="left">-8</td></tr><tr><td align="left">breed</td><td align="left">Ben Reed</td><td align="left">Facebook</td><td align="left">-8</td></tr><tr><td align="left">drusek</td><td align="left">Dave Rusek</td><td align="left">Twitter</td><td align="left">-7</td></tr><tr><td align="left">eolivelli</td><td align="left">Enrico Olivelli</td><td align="left">Diennea</td><td align="left">+2</td></tr><tr><td align="left">fcuny</td><td align="left">Franck Cuny</td><td align="left">Twitter</td><td align="left">-8</td></tr><tr><td align="left">fpj</td><td align="left">Flavio Junqueira</td><td align="left">Microsoft</td><td align="left">+1</td></tr><tr><td align="left">hsaputra</td><td align="left">Henry Saputra</td><td align="left"></td><td align="left">-8</td></tr><tr><td align="left">ivank</td><td align="left">Ivan Kelly</td><td align="left">Midokura</td><td align="left">+2</td></tr><tr><td align="left">jiannan</td><td align="left">Jiannan Wang</td><td align="left">Yahoo Inc.</td><td align="left">+8</td></tr><tr><td align="left">jujjuri</td><td align="left">Venkateswararao (JV) Jujjuri</td><td align="left">Salesforce</td><td align="left">-8</td></tr><tr><td align="left">mmerli</td><td align="left">Matteo Merli</td><td align="left">StreamNative</td><td align="left">-8</td></tr><tr><td align="left">nicoloboschi</td><td align="left">Nicolò Boschi</td><td align="left">Datastax</td><td align="left">+2</td></tr><tr><td align="left">prashantkumar</td><td align="left">Prashant Kumar</td><td align="left">Splunk</td><td align="left">-8</td></tr><tr><td align="left">rakeshr</td><td align="left">Rakesh Radhakrishnan</td><td align="left">Huawei</td><td align="left">+5:30</td></tr><tr><td align="left">reddycharan</td><td align="left">Charan Reddy G</td><td align="left">Salesforce</td><td align="left">-8</td></tr><tr><td align="left">robindh</td><td align="left">Robin Dhamankar</td><td align="left">Facebook</td><td align="left">-8</td></tr><tr><td align="left">sboobna</td><td align="left">Siddharth Boobna</td><td align="left">Salesforce</td><td align="left">-8</td></tr><tr><td align="left">sijie</td><td align="left">Sijie Guo</td><td align="left">StreamNative</td><td align="left">-8</td></tr><tr><td align="left">sjust</td><td align="left">Sam Just</td><td align="left">Salesforce</td><td align="left">-8</td></tr><tr><td align="left">umamahesh</td><td align="left">Uma Maheswara Rao G</td><td align="left">Intel</td><td align="left">+5</td></tr><tr><td align="left">zhaijia</td><td align="left">Jia Zhai</td><td align="left">StreamNative</td><td align="left">+8</td></tr></tbody></table></article></div><div class="col col--2"><div class="tableOfContents_bqdL thin-scrollbar"><ul class="table-of-contents table-of-contents__left-border"><li><a href="#pmc-members" class="table-of-contents__link toc-highlight">PMC members</a></li><li><a href="#committers" class="table-of-contents__link toc-highlight">Committers</a></li></ul></div></div></div></main></div><footer class="footer footer--dark"><div class="container container-fluid"><div class="row footer__links"><div class="col footer__col"><div class="footer__title">Documentation</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/docs/overview">Overview</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/getting-started/installation">Getting started</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/deployment/manual">Deployment</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/admin/bookies">Administration</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/api/overview">API</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/security/overview">Security</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/development/protocol">Development</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/reference/config">Reference</a></li></ul></div><div class="col footer__col"><div class="footer__title">Community</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/community/mailing-lists">Mailing lists</a></li><li class="footer__item"><a class="footer__link-item" href="/community/slack">Slack</a></li><li class="footer__item"><a href="https://github.com/apache/bookkeeper" target="_blank" rel="noopener noreferrer" class="footer__link-item">Github<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a href="https://twitter.com/asfbookkeeper" target="_blank" rel="noopener noreferrer" class="footer__link-item">Twitter<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div><div class="col footer__col"><div class="footer__title">Project</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/project/who">Who are we?</a></li><li class="footer__item"><a class="footer__link-item" href="/project/bylaws">Bylaws</a></li><li class="footer__item"><a href="https://apache.org/licenses" target="_blank" rel="noopener noreferrer" class="footer__link-item">License<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a class="footer__link-item" href="/project/privacy">Privacy policy</a></li><li class="footer__item"><a href="https://www.apache.org/foundation/sponsorship.html" target="_blank" rel="noopener noreferrer" class="footer__link-item">Sponsorship<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a href="https://www.apache.org/foundation/thanks.html" target="_blank" rel="noopener noreferrer" class="footer__link-item">Thanks<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div></div><div class="footer__bottom text--center"><div class="footer__copyright"><footer class="footer">
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navbar__brand" href="/"><div class="navbar__logo"><img src="/img/bk-logo.svg" alt="Apache Bookkeeper" class="themedImage_ToTc themedImage--light_HNdA"><img src="/img/bk-logo.svg" alt="Apache Bookkeeper" class="themedImage_ToTc themedImage--dark_i4oU"></div><b class="navbar__title text--truncate">Apache BookKeeper</b></a><a class="navbar__item navbar__link" href="/docs/overview/">Documentation</a><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Community</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/community/mailing-lists">Mailing lists</a></li><li><a class="dropdown__link" href="/community/slack">Slack</a></li><li><a href="https://github.com/apache/bookkeeper/issues" target="_blank" rel="noopener noreferrer" class="dropdown__link">Github issues<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a class="dropdown__link" href="/community/releases">Release management</a></li><li><a class="dropdown__link" href="/community/meeting">Community meetings</a></li><li><a class="dropdown__link" href="/community/contributing">Contribution guide</a></li><li><a class="dropdown__link" href="/community/coding-guide">Coding guide</a></li><li><a class="dropdown__link" href="/community/testing">Testing guide</a></li><li><a class="dropdown__link" href="/community/issue-report">Issue report guide</a></li><li><a class="dropdown__link" href="/community/release-guide">Release guide</a></li><li><a class="dropdown__link" href="/community/presentations">Presentations</a></li><li><a class="dropdown__link" href="/community/bookkeeper-proposals">BookKeeper proposals (BP)</a></li></ul></div><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Project</a><ul class="dropdown__menu"><li><a aria-current="page" class="dropdown__link dropdown__link--active" href="/project/who">Who are we?</a></li><li><a class="dropdown__link" href="/project/bylaws">Bylaws</a></li><li><a href="https://apache.org/licenses" target="_blank" rel="noopener noreferrer" class="dropdown__link">License<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a class="dropdown__link" href="/project/privacy">Privacy policy</a></li><li><a href="https://www.apache.org/foundation/sponsorship.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Sponsorship<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a href="https://www.apache.org/foundation/thanks.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Thanks<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div></div><div class="navbar__items navbar__items--right"><div class="navbar__item dropdown dropdown--hoverable dropdown--right"><a class="navbar__link" aria-haspopup="true" aria-expanded="false" role="button" href="/docs/overview/">4.17.0</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/docs/next/overview/">Next</a></li><li><a class="dropdown__link" href="/docs/overview/">4.17.0</a></li><li><a class="dropdown__link" href="/docs/4.16.5/overview/">4.16.5</a></li><li><a class="dropdown__link" href="/docs/4.15.5/overview/">4.15.5</a></li><li><a class="dropdown__link" href="/docs/4.14.8/overview/">4.14.8</a></li><li><a class="dropdown__link" href="/docs/4.13.0/overview/">4.13.0</a></li><li><a class="dropdown__link" href="/docs/4.12.1/overview/">4.12.1</a></li><li><a class="dropdown__link" href="/docs/4.11.1/overview/">4.11.1</a></li><li><a class="dropdown__link" href="/docs/4.10.0/overview/">4.10.0</a></li><li><a class="dropdown__link" href="/docs/4.9.2/overview/">4.9.2</a></li><li><a class="dropdown__link" href="/docs/4.8.2/overview/">4.8.2</a></li><li><a class="dropdown__link" href="/docs/4.7.3/overview/">4.7.3</a></li><li><a class="dropdown__link" href="/docs/4.6.2/overview/">4.6.2</a></li><li><a class="dropdown__link" href="/docs/4.5.1/overview/">4.5.1</a></li></ul></div><a class="navbar__item navbar__link" href="/releases">Download</a><div class="toggle_vylO colorModeToggle_DEke"><button class="clean-btn toggleButton_gllP toggleButtonDisabled_aARS" type="button" disabled="" title="Switch between dark and light mode (currently light mode)" aria-label="Switch between dark and light mode (currently light mode)" aria-live="polite"><svg viewBox="0 0 24 24" width="24" height="24" class="lightToggleIcon_pyhR"><path fill="currentColor" d="M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"></path></svg><svg viewBox="0 0 24 24" width="24" height="24" class="darkToggleIcon_wfgR"><path fill="currentColor" d="M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"></path></svg></button></div><div class="searchBox_ZlJk"></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div></nav><div id="docusaurus_skipToContent_fallback" class="main-wrapper mainWrapper_z2l0"><main class="container container--fluid margin-vert--lg"><div class="row mdxPageWrapper_j9I6"><div class="col col--8"><article><h1>Who are we?</h1><h2 class="anchor anchorWithStickyNavbar_LWe7" id="pmc-members">PMC members<a href="#pmc-members" class="hash-link" aria-label="Direct link to PMC members" title="Direct link to PMC members">​</a></h2><p>BookKeeper&#x27;s PMC members are:</p><table><thead><tr><th align="left">Username</th><th align="left">Name</th><th align="left">Organization</th><th align="left">Timezone</th></tr></thead><tbody><tr><td align="left">ayegorov</td><td align="left">Andrey Yegorov</td><td align="left">Datastax</td><td align="left">-8</td></tr><tr><td align="left">breed</td><td align="left">Ben Reed</td><td align="left">Facebook</td><td align="left">-8</td></tr><tr><td align="left">drusek</td><td align="left">Dave Rusek</td><td align="left">Twitter</td><td align="left">-7</td></tr><tr><td align="left">eolivelli</td><td align="left">Enrico Olivelli</td><td align="left">Diennea</td><td align="left">+2</td></tr><tr><td align="left">fcuny</td><td align="left">Franck Cuny</td><td align="left">Twitter</td><td align="left">-8</td></tr><tr><td align="left">fpj</td><td align="left">Flavio Junqueira</td><td align="left">Microsoft</td><td align="left">+1</td></tr><tr><td align="left">hsaputra</td><td align="left">Henry Saputra</td><td align="left"></td><td align="left">-8</td></tr><tr><td align="left">ivank</td><td align="left">Ivan Kelly</td><td align="left">Midokura</td><td align="left">+2</td></tr><tr><td align="left">jiannan</td><td align="left">Jiannan Wang</td><td align="left">Yahoo Inc.</td><td align="left">+8</td></tr><tr><td align="left">jujjuri</td><td align="left">Venkateswararao (JV) Jujjuri</td><td align="left">Salesforce</td><td align="left">-8</td></tr><tr><td align="left">lstewart</td><td align="left">Leigh Stewart</td><td align="left">Twitter</td><td align="left">-8</td></tr><tr><td align="left">mmerli</td><td align="left">Matteo Merli</td><td align="left">StreamNative</td><td align="left">-8</td></tr><tr><td align="left">rakeshr</td><td align="left">Rakesh Radhakrishnan</td><td align="left">Huawei</td><td align="left">+5:30</td></tr><tr><td align="left">sijie</td><td align="left">Sijie Guo</td><td align="left">StreamNative</td><td align="left">-8</td></tr><tr><td align="left">umamahesh</td><td align="left">Uma Maheswara Rao G</td><td align="left">Intel</td><td align="left">+5</td></tr><tr><td align="left">zhaijia</td><td align="left">Jia Zhai</td><td align="left">StreamNative</td><td align="left">+8</td></tr></tbody></table><h2 class="anchor anchorWithStickyNavbar_LWe7" id="committers">Committers<a href="#committers" class="hash-link" aria-label="Direct link to Committers" title="Direct link to Committers">​</a></h2><p>BookKeeper&#x27;s active committers are:</p><table><thead><tr><th align="left">Username</th><th align="left">Name</th><th align="left">Organization</th><th align="left">Timezone</th></tr></thead><tbody><tr><td align="left">ayegorov</td><td align="left">Andrey Yegorov</td><td align="left">Datastax</td><td align="left">-8</td></tr><tr><td align="left">breed</td><td align="left">Ben Reed</td><td align="left">Facebook</td><td align="left">-8</td></tr><tr><td align="left">drusek</td><td align="left">Dave Rusek</td><td align="left">Twitter</td><td align="left">-7</td></tr><tr><td align="left">eolivelli</td><td align="left">Enrico Olivelli</td><td align="left">Diennea</td><td align="left">+2</td></tr><tr><td align="left">fcuny</td><td align="left">Franck Cuny</td><td align="left">Twitter</td><td align="left">-8</td></tr><tr><td align="left">fpj</td><td align="left">Flavio Junqueira</td><td align="left">Microsoft</td><td align="left">+1</td></tr><tr><td align="left">hsaputra</td><td align="left">Henry Saputra</td><td align="left"></td><td align="left">-8</td></tr><tr><td align="left">ivank</td><td align="left">Ivan Kelly</td><td align="left">Midokura</td><td align="left">+2</td></tr><tr><td align="left">jiannan</td><td align="left">Jiannan Wang</td><td align="left">Yahoo Inc.</td><td align="left">+8</td></tr><tr><td align="left">jujjuri</td><td align="left">Venkateswararao (JV) Jujjuri</td><td align="left">Salesforce</td><td align="left">-8</td></tr><tr><td align="left">mmerli</td><td align="left">Matteo Merli</td><td align="left">StreamNative</td><td align="left">-8</td></tr><tr><td align="left">nicoloboschi</td><td align="left">Nicolò Boschi</td><td align="left">Datastax</td><td align="left">+2</td></tr><tr><td align="left">prashantkumar</td><td align="left">Prashant Kumar</td><td align="left">Splunk</td><td align="left">-8</td></tr><tr><td align="left">rakeshr</td><td align="left">Rakesh Radhakrishnan</td><td align="left">Huawei</td><td align="left">+5:30</td></tr><tr><td align="left">reddycharan</td><td align="left">Charan Reddy G</td><td align="left">Salesforce</td><td align="left">-8</td></tr><tr><td align="left">robindh</td><td align="left">Robin Dhamankar</td><td align="left">Facebook</td><td align="left">-8</td></tr><tr><td align="left">sboobna</td><td align="left">Siddharth Boobna</td><td align="left">Salesforce</td><td align="left">-8</td></tr><tr><td align="left">sijie</td><td align="left">Sijie Guo</td><td align="left">StreamNative</td><td align="left">-8</td></tr><tr><td align="left">sjust</td><td align="left">Sam Just</td><td align="left">Salesforce</td><td align="left">-8</td></tr><tr><td align="left">umamahesh</td><td align="left">Uma Maheswara Rao G</td><td align="left">Intel</td><td align="left">+5</td></tr><tr><td align="left">zhaijia</td><td align="left">Jia Zhai</td><td align="left">StreamNative</td><td align="left">+8</td></tr></tbody></table></article></div><div class="col col--2"><div class="tableOfContents_bqdL thin-scrollbar"><ul class="table-of-contents table-of-contents__left-border"><li><a href="#pmc-members" class="table-of-contents__link toc-highlight">PMC members</a></li><li><a href="#committers" class="table-of-contents__link toc-highlight">Committers</a></li></ul></div></div></div></main></div><footer class="footer footer--dark"><div class="container container-fluid"><div class="row footer__links"><div class="col footer__col"><div class="footer__title">Documentation</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/docs/overview">Overview</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/getting-started/installation">Getting started</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/deployment/manual">Deployment</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/admin/bookies">Administration</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/api/overview">API</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/security/overview">Security</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/development/protocol">Development</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/reference/config">Reference</a></li></ul></div><div class="col footer__col"><div class="footer__title">Community</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/community/mailing-lists">Mailing lists</a></li><li class="footer__item"><a class="footer__link-item" href="/community/slack">Slack</a></li><li class="footer__item"><a href="https://github.com/apache/bookkeeper" target="_blank" rel="noopener noreferrer" class="footer__link-item">Github<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a href="https://twitter.com/asfbookkeeper" target="_blank" rel="noopener noreferrer" class="footer__link-item">Twitter<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div><div class="col footer__col"><div class="footer__title">Project</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/project/who">Who are we?</a></li><li class="footer__item"><a class="footer__link-item" href="/project/bylaws">Bylaws</a></li><li class="footer__item"><a href="https://apache.org/licenses" target="_blank" rel="noopener noreferrer" class="footer__link-item">License<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a class="footer__link-item" href="/project/privacy">Privacy policy</a></li><li class="footer__item"><a href="https://www.apache.org/foundation/sponsorship.html" target="_blank" rel="noopener noreferrer" class="footer__link-item">Sponsorship<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a href="https://www.apache.org/foundation/thanks.html" target="_blank" rel="noopener noreferrer" class="footer__link-item">Thanks<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div></div><div class="footer__bottom text--center"><div class="footer__copyright"><footer class="footer">
         <div class="container">
           <div class="content has-text-centered">
             <p>
@@ -22,7 +22,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/release-notes/index.html b/content/release-notes/index.html
index 55ef8cc..f02a646 100644
--- a/content/release-notes/index.html
+++ b/content/release-notes/index.html
@@ -4,12 +4,12 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">Apache BookKeeper</title><meta data-rh="true" property="og:title" content="Apache BookKeeper"><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/release-notes"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docusaurus_tag" content="default"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docsearch:docusaurus_tag" content="default"><meta data-rh="true" name="description" content="4.17.0"><meta data-rh="true" property="og:description" content="4.17.0"><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/release-notes"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/release-notes" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/release-notes" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
-<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navbar__brand" href="/"><div class="navbar__logo"><img src="/img/bk-logo.svg" alt="Apache Bookkeeper" class="themedImage_ToTc themedImage--light_HNdA"><img src="/img/bk-logo.svg" alt="Apache Bookkeeper" class="themedImage_ToTc themedImage--dark_i4oU"></div><b class="navbar__title text--truncate">Apache BookKeeper</b></a><a class="navbar__item navbar__link" href="/docs/overview/">Documentation</a><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Community</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/community/mailing-lists">Mailing lists</a></li><li><a class="dropdown__link" href="/community/slack">Slack</a></li><li><a href="https://github.com/apache/bookkeeper/issues" target="_blank" rel="noopener noreferrer" class="dropdown__link">Github issues<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a class="dropdown__link" href="/community/releases">Release management</a></li><li><a class="dropdown__link" href="/community/meeting">Community meetings</a></li><li><a class="dropdown__link" href="/community/contributing">Contribution guide</a></li><li><a class="dropdown__link" href="/community/coding-guide">Coding guide</a></li><li><a class="dropdown__link" href="/community/testing">Testing guide</a></li><li><a class="dropdown__link" href="/community/issue-report">Issue report guide</a></li><li><a class="dropdown__link" href="/community/release-guide">Release guide</a></li><li><a class="dropdown__link" href="/community/presentations">Presentations</a></li><li><a class="dropdown__link" href="/community/bookkeeper-proposals">BookKeeper proposals (BP)</a></li></ul></div><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Project</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/project/who">Who are we?</a></li><li><a class="dropdown__link" href="/project/bylaws">Bylaws</a></li><li><a href="https://apache.org/licenses" target="_blank" rel="noopener noreferrer" class="dropdown__link">License<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a class="dropdown__link" href="/project/privacy">Privacy policy</a></li><li><a href="https://www.apache.org/foundation/sponsorship.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Sponsorship<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a href="https://www.apache.org/foundation/thanks.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Thanks<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div></div><div class="navbar__items navbar__items--right"><div class="navbar__item dropdown dropdown--hoverable dropdown--right"><a class="navbar__link" aria-haspopup="true" aria-expanded="false" role="button" href="/docs/admin/autorecovery">4.17.0</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/docs/next/overview/">Next</a></li><li><a class="dropdown__link" href="/docs/admin/autorecovery">4.17.0</a></li><li><a class="dropdown__link" href="/docs/4.16.5/overview/">4.16.5</a></li><li><a class="dropdown__link" href="/docs/4.15.5/overview/">4.15.5</a></li><li><a class="dropdown__link" href="/docs/4.14.8/overview/">4.14.8</a></li><li><a class="dropdown__link" href="/docs/4.13.0/overview/">4.13.0</a></li><li><a class="dropdown__link" href="/docs/4.12.1/overview/">4.12.1</a></li><li><a class="dropdown__link" href="/docs/4.11.1/overview/">4.11.1</a></li><li><a class="dropdown__link" href="/docs/4.10.0/overview/">4.10.0</a></li><li><a class="dropdown__link" href="/docs/4.9.2/overview/">4.9.2</a></li><li><a class="dropdown__link" href="/docs/4.8.2/overview/">4.8.2</a></li><li><a class="dropdown__link" href="/docs/4.7.3/overview/">4.7.3</a></li><li><a class="dropdown__link" href="/docs/4.6.2/overview/">4.6.2</a></li><li><a class="dropdown__link" href="/docs/4.5.1/overview/">4.5.1</a></li></ul></div><a class="navbar__item navbar__link" href="/releases">Download</a><div class="toggle_vylO colorModeToggle_DEke"><button class="clean-btn toggleButton_gllP toggleButtonDisabled_aARS" type="button" disabled="" title="Switch between dark and light mode (currently light mode)" aria-label="Switch between dark and light mode (currently light mode)" aria-live="polite"><svg viewBox="0 0 24 24" width="24" height="24" class="lightToggleIcon_pyhR"><path fill="currentColor" d="M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"></path></svg><svg viewBox="0 0 24 24" width="24" height="24" class="darkToggleIcon_wfgR"><path fill="currentColor" d="M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"></path></svg></button></div><div class="searchBox_ZlJk"></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div></nav><div id="docusaurus_skipToContent_fallback" class="main-wrapper mainWrapper_z2l0"><main class="container container--fluid margin-vert--lg"><div class="row mdxPageWrapper_j9I6"><div class="col col--8"><article><h1>Release notes</h1><h2 class="anchor anchorWithStickyNavbar_LWe7" id="4170">4.17.0<a href="#4170" class="hash-link" aria-label="Direct link to 4.17.0" title="Direct link to 4.17.0">​</a></h2><p>Release 4.17.0 includes multiple important features, improvements, bug fixes and some dependencies CVE fixes.</p><p>The technical details of this release are summarized below.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="breaking-changes">Breaking Changes<a href="#breaking-changes" class="hash-link" aria-label="Direct link to Breaking Changes" title="Direct link to Breaking Changes">​</a></h3><p>No breaking changes. Some defaults are different, but overall there are no compatibility concerns.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="features">Features<a href="#features" class="hash-link" aria-label="Direct link to Features" title="Direct link to Features">​</a></h3><ul><li>BP-62 Batch Read API</li></ul><h3 class="anchor anchorWithStickyNavbar_LWe7" id="notable-changes">Notable changes<a href="#notable-changes" class="hash-link" aria-label="Direct link to Notable changes" title="Direct link to Notable changes">​</a></h3><ul><li>Enable reorder read sequence for bk client by default <a href="https://github.com/apache/bookkeeper/pull/4139" target="_blank" rel="noopener noreferrer">PR #4139</a> </li><li>Fix some metrics generated by prometheus client without type info <a href="https://github.com/apache/bookkeeper/pull/3927" target="_blank" rel="noopener noreferrer">PR #3927</a> </li><li>Fix arbitrary file upload vulnerability with httpServerEnabled <a href="https://github.com/apache/bookkeeper/pull/3982" target="_blank" rel="noopener noreferrer">PR #3982</a> </li><li>Enable kv logs in log4j configuration <a href="https://github.com/apache/bookkeeper/pull/3986" target="_blank" rel="noopener noreferrer">PR #3986</a> </li><li>Make compatible between DefaultEntryLogger and DirectEntryLogger <a href="https://github.com/apache/bookkeeper/pull/4041" target="_blank" rel="noopener noreferrer">PR #4041</a> </li></ul><h4 class="anchor anchorWithStickyNavbar_LWe7" id="bookie">Bookie<a href="#bookie" class="hash-link" aria-label="Direct link to Bookie" title="Direct link to Bookie">​</a></h4><ul><li>Fix bug of negative JournalQueueSize <a href="https://github.com/apache/bookkeeper/pull/4077" target="_blank" rel="noopener noreferrer">PR #4077</a> </li><li>Fix compaction throttle imprecise <a href="https://github.com/apache/bookkeeper/pull/3192" target="_blank" rel="noopener noreferrer">PR #3192</a> </li><li>Fix data lost when configured multiple ledger directories <a href="https://github.com/apache/bookkeeper/pull/3329" target="_blank" rel="noopener noreferrer">PR #3329</a> </li><li>Try to use jdk api to create hardlink when rename file when compaction. <a href="https://github.com/apache/bookkeeper/pull/3876" target="_blank" rel="noopener noreferrer">PR #3876</a> </li><li>[feature][server]<!-- --> add dbStorage_readAheadCacheBatchBytesSize properties when read ahead entries <a href="https://github.com/apache/bookkeeper/pull/3895" target="_blank" rel="noopener noreferrer">PR #3895</a> </li><li>Fix keys leak in EntryLocationIndex when ledgersToDelete is empty <a href="https://github.com/apache/bookkeeper/pull/3903" target="_blank" rel="noopener noreferrer">PR #3903</a> </li><li>Fix garbage collection blocked by runtime exception <a href="https://github.com/apache/bookkeeper/pull/3901" target="_blank" rel="noopener noreferrer">PR #3901</a> </li><li>Skip sync the RocksDB when no changes <a href="https://github.com/apache/bookkeeper/pull/3904" target="_blank" rel="noopener noreferrer">PR #3904</a> </li><li>Enable PCBC completionObjects autoShrink to reduce memory usage and gc <a href="https://github.com/apache/bookkeeper/pull/3913" target="_blank" rel="noopener noreferrer">PR #3913</a> </li><li>[Fix]<!-- --> Recycle dropping read-write requests when various exceptions happened <a href="https://github.com/apache/bookkeeper/pull/3912" target="_blank" rel="noopener noreferrer">PR #3912</a> </li><li>Fix ledger replicated failed blocks bookie decommission process <a href="https://github.com/apache/bookkeeper/pull/3917" target="_blank" rel="noopener noreferrer">PR #3917</a> </li><li>Support skip invalid journal record in replying journal stage <a href="https://github.com/apache/bookkeeper/pull/3956" target="_blank" rel="noopener noreferrer">PR #3956</a> </li><li>Avoid compaction to trigger extra flushes DbLedgerStorage <a href="https://github.com/apache/bookkeeper/pull/3959" target="_blank" rel="noopener noreferrer">PR #3959</a> </li><li>Fix memory leak of direct memory in direct memory entry logger. <a href="https://github.com/apache/bookkeeper/pull/3983" target="_blank" rel="noopener noreferrer">PR #3983</a> </li><li>Unify ByteBufAllocator for the DirectIO component <a href="https://github.com/apache/bookkeeper/pull/3985" target="_blank" rel="noopener noreferrer">PR #3985</a> </li><li>Print compaction progress <a href="https://github.com/apache/bookkeeper/pull/4071" target="_blank" rel="noopener noreferrer">PR #4071</a> </li><li>Optimize bookie decommission check wait interval <a href="https://github.com/apache/bookkeeper/pull/4070" target="_blank" rel="noopener noreferrer">PR #4070</a> </li><li>Fix trigger GC not work <a href="https://github.com/apache/bookkeeper/pull/3998" target="_blank" rel="noopener noreferrer">PR #3998</a> </li><li>Allow to set max operation numbers in a single rocksdb batch <a href="https://github.com/apache/bookkeeper/pull/4044" target="_blank" rel="noopener noreferrer">PR #4044</a> </li><li>Add read failed log for ledger checker. <a href="https://github.com/apache/bookkeeper/pull/4010" target="_blank" rel="noopener noreferrer">PR #4010</a> </li><li>Fix read write request leak when executor throw <code>RejectedExecutionException</code> <a href="https://github.com/apache/bookkeeper/pull/4024" target="_blank" rel="noopener noreferrer">PR #4024</a> </li><li>Improve DefaultEntryLogger read performance. <a href="https://github.com/apache/bookkeeper/pull/4038" target="_blank" rel="noopener noreferrer">PR #4038</a> </li></ul><h4 class="anchor anchorWithStickyNavbar_LWe7" id="client">Client<a href="#client" class="hash-link" aria-label="Direct link to Client" title="Direct link to Client">​</a></h4><ul><li>[Bug]<!-- --> Always one orphan ledger is created <a href="https://github.com/apache/bookkeeper/pull/3813" target="_blank" rel="noopener noreferrer">PR #3813</a> </li><li>Fix checksum calculation bug when the payload is a CompositeByteBuf with readerIndex &gt; 0 <a href="https://github.com/apache/bookkeeper/pull/4196" target="_blank" rel="noopener noreferrer">PR #4196</a> </li><li>Fix no known bookies after reset racks for all BKs <a href="https://github.com/apache/bookkeeper/pull/4128" target="_blank" rel="noopener noreferrer">PR #4128</a> </li><li>Fix issue with binary compatibility with older grpc versions at runtime in the client <a href="https://github.com/apache/bookkeeper/pull/3997" target="_blank" rel="noopener noreferrer">PR #3997</a> </li><li>Entry write support local node region aware placement policy <a href="https://github.com/apache/bookkeeper/pull/4063" target="_blank" rel="noopener noreferrer">PR #4063</a> </li><li>Rackaware placement policy support local node awareness by hostname <a href="https://github.com/apache/bookkeeper/pull/4057" target="_blank" rel="noopener noreferrer">PR #4057</a> </li><li>Use netty-bom for aligning netty library versions, add epoll for linux-aarch_64 <a href="https://github.com/apache/bookkeeper/pull/4204" target="_blank" rel="noopener noreferrer">PR #4204</a> </li></ul><h4 class="anchor anchorWithStickyNavbar_LWe7" id="autorecovery">AutoRecovery<a href="#autorecovery" class="hash-link" aria-label="Direct link to AutoRecovery" title="Direct link to AutoRecovery">​</a></h4><ul><li>Make AutoRecovery enable stickyReadS as default. <a href="https://github.com/apache/bookkeeper/pull/4125" target="_blank" rel="noopener noreferrer">PR #4125</a> </li><li>Support retry logic for auto recovery <a href="https://github.com/apache/bookkeeper/pull/3799" target="_blank" rel="noopener noreferrer">PR #3799</a> 0</li><li>Fix auditor elector executor block problem. <a href="https://github.com/apache/bookkeeper/pull/4165" target="_blank" rel="noopener noreferrer">PR #4165</a> </li><li>Fix the autorecovery failed replicate by add entry fenced error <a href="https://github.com/apache/bookkeeper/pull/4163" target="_blank" rel="noopener noreferrer">PR #4163</a> </li><li>Fix auditor thread leak problem. <a href="https://github.com/apache/bookkeeper/pull/4162" target="_blank" rel="noopener noreferrer">PR #4162</a> </li><li>AutoRecovery supports batch read <a href="https://github.com/apache/bookkeeper/pull/4211" target="_blank" rel="noopener noreferrer">PR #4211</a></li></ul><h4 class="anchor anchorWithStickyNavbar_LWe7" id="others">Others<a href="#others" class="hash-link" aria-label="Direct link to Others" title="Direct link to Others">​</a></h4><ul><li>Added CLI command to start state store service without a bookie <a href="https://github.com/apache/bookkeeper/pull/2648" target="_blank" rel="noopener noreferrer">PR #2648</a></li><li>Add ensemble relocation command which adheres to placement policy <a href="https://github.com/apache/bookkeeper/pull/2931" target="_blank" rel="noopener noreferrer">PR #2931</a> </li><li>Tuning pool concurrency <a href="https://github.com/apache/bookkeeper/pull/3432" target="_blank" rel="noopener noreferrer">PR #3432</a> </li><li>Issue 4136: Fix logging configurations are broken in docker image <a href="https://github.com/apache/bookkeeper/pull/4137" target="_blank" rel="noopener noreferrer">PR #4137</a> </li><li>[release]<!-- --> Force to use linux/amd64 to build release <a href="https://github.com/apache/bookkeeper/pull/4060" target="_blank" rel="noopener noreferrer">PR #4060</a> </li></ul><h3 class="anchor anchorWithStickyNavbar_LWe7" id="dependency-changes">Dependency changes<a href="#dependency-changes" class="hash-link" aria-label="Direct link to Dependency changes" title="Direct link to Dependency changes">​</a></h3><p>Upgraded notable dependencies and address CVEs, including:</p><ul><li>Upgrade snappy-java to address multiple CVEs <a href="https://github.com/apache/bookkeeper/pull/3993" target="_blank" rel="noopener noreferrer">PR #3993</a> </li><li>Upgrade grpc and protobuf to address CVE-2023-32732 <a href="https://github.com/apache/bookkeeper/pull/3992" target="_blank" rel="noopener noreferrer">PR #3992</a> </li><li>Upgrade Zookeeper to 3.8.3 to address CVE-2023-44981 <a href="https://github.com/apache/bookkeeper/pull/4112" target="_blank" rel="noopener noreferrer">PR #4112</a> </li><li>Upgrade Netty to 4.1.107.Final and io_uring to 0.0.25.Final <a href="https://github.com/apache/bookkeeper/pull/4224" target="_blank" rel="noopener noreferrer">PR #4224</a> </li><li>Bump org.apache.commons:commons-compress from 1.21 to 1.26.0 <a href="https://github.com/apache/bookkeeper/pull/4214" target="_blank" rel="noopener noreferrer">PR #4214</a> </li><li>Update datasketches version from 0.8.3 to 3.2.0 <a href="https://github.com/apache/bookkeeper/pull/3264" target="_blank" rel="noopener noreferrer">PR #3264</a> </li><li>Issue 3567: Upgrade rocksdb version to avoid checksum mismatch error <a href="https://github.com/apache/bookkeeper/pull/3568" target="_blank" rel="noopener noreferrer">PR #3568</a> </li><li>fix(sec): upgrade commons-codec to 1.13 <a href="https://github.com/apache/bookkeeper/pull/3508" target="_blank" rel="noopener noreferrer">PR #3508</a> </li><li>Remove avro, hadoop-auth and jersey-json dependencies from hadoop-common to resolve CVE-2019-10202, CVE-2023-1370 and CVE-2022-45685 <a href="https://github.com/apache/bookkeeper/pull/3911" target="_blank" rel="noopener noreferrer">PR #3911</a> </li><li>Upgrade docker base image to resolve CVE-2023-0286 <a href="https://github.com/apache/bookkeeper/pull/3916" target="_blank" rel="noopener noreferrer">PR #3916</a> </li><li>Upgrade bc-fips to 1.0.2.4 to fix CVE-2022-45146 <a href="https://github.com/apache/bookkeeper/pull/3915" target="_blank" rel="noopener noreferrer">PR #3915</a> </li><li>Upgrade jetty version to 9.4.51.v20230217 <a href="https://github.com/apache/bookkeeper/pull/3937" target="_blank" rel="noopener noreferrer">PR #3937</a> </li><li>Bump guava version from 31.0.1-jre to 32.0.1-jre <a href="https://github.com/apache/bookkeeper/pull/4008" target="_blank" rel="noopener noreferrer">PR #4008</a> </li></ul><h3 class="anchor anchorWithStickyNavbar_LWe7" id="details">Details<a href="#details" class="hash-link" aria-label="Direct link to Details" title="Direct link to Details">​</a></h3><p><a href="https://github.com/apache/bookkeeper/pulls?q=is%3Apr+milestone%3A4.17.0+is%3Aclosed" target="_blank" rel="noopener noreferrer">https://github.com/apache/bookkeeper/pulls?q=is%3Apr+milestone%3A4.17.0+is%3Aclosed</a></p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="4165">4.16.5<a href="#4165" class="hash-link" aria-label="Direct link to 4.16.5" title="Direct link to 4.16.5">​</a></h2><p>Release 4.16.5 includes multiple bug fixes and few dependency updates.</p><p>Apache BookKeeper users are encouraged to upgrade to 4.16.5 if you are using 4.16.x.
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navbar__brand" href="/"><div class="navbar__logo"><img src="/img/bk-logo.svg" alt="Apache Bookkeeper" class="themedImage_ToTc themedImage--light_HNdA"><img src="/img/bk-logo.svg" alt="Apache Bookkeeper" class="themedImage_ToTc themedImage--dark_i4oU"></div><b class="navbar__title text--truncate">Apache BookKeeper</b></a><a class="navbar__item navbar__link" href="/docs/overview/">Documentation</a><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Community</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/community/mailing-lists">Mailing lists</a></li><li><a class="dropdown__link" href="/community/slack">Slack</a></li><li><a href="https://github.com/apache/bookkeeper/issues" target="_blank" rel="noopener noreferrer" class="dropdown__link">Github issues<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a class="dropdown__link" href="/community/releases">Release management</a></li><li><a class="dropdown__link" href="/community/meeting">Community meetings</a></li><li><a class="dropdown__link" href="/community/contributing">Contribution guide</a></li><li><a class="dropdown__link" href="/community/coding-guide">Coding guide</a></li><li><a class="dropdown__link" href="/community/testing">Testing guide</a></li><li><a class="dropdown__link" href="/community/issue-report">Issue report guide</a></li><li><a class="dropdown__link" href="/community/release-guide">Release guide</a></li><li><a class="dropdown__link" href="/community/presentations">Presentations</a></li><li><a class="dropdown__link" href="/community/bookkeeper-proposals">BookKeeper proposals (BP)</a></li></ul></div><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Project</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/project/who">Who are we?</a></li><li><a class="dropdown__link" href="/project/bylaws">Bylaws</a></li><li><a href="https://apache.org/licenses" target="_blank" rel="noopener noreferrer" class="dropdown__link">License<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a class="dropdown__link" href="/project/privacy">Privacy policy</a></li><li><a href="https://www.apache.org/foundation/sponsorship.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Sponsorship<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a href="https://www.apache.org/foundation/thanks.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Thanks<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div></div><div class="navbar__items navbar__items--right"><div class="navbar__item dropdown dropdown--hoverable dropdown--right"><a class="navbar__link" aria-haspopup="true" aria-expanded="false" role="button" href="/docs/overview/">4.17.0</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/docs/next/overview/">Next</a></li><li><a class="dropdown__link" href="/docs/overview/">4.17.0</a></li><li><a class="dropdown__link" href="/docs/4.16.5/overview/">4.16.5</a></li><li><a class="dropdown__link" href="/docs/4.15.5/overview/">4.15.5</a></li><li><a class="dropdown__link" href="/docs/4.14.8/overview/">4.14.8</a></li><li><a class="dropdown__link" href="/docs/4.13.0/overview/">4.13.0</a></li><li><a class="dropdown__link" href="/docs/4.12.1/overview/">4.12.1</a></li><li><a class="dropdown__link" href="/docs/4.11.1/overview/">4.11.1</a></li><li><a class="dropdown__link" href="/docs/4.10.0/overview/">4.10.0</a></li><li><a class="dropdown__link" href="/docs/4.9.2/overview/">4.9.2</a></li><li><a class="dropdown__link" href="/docs/4.8.2/overview/">4.8.2</a></li><li><a class="dropdown__link" href="/docs/4.7.3/overview/">4.7.3</a></li><li><a class="dropdown__link" href="/docs/4.6.2/overview/">4.6.2</a></li><li><a class="dropdown__link" href="/docs/4.5.1/overview/">4.5.1</a></li></ul></div><a class="navbar__item navbar__link" href="/releases">Download</a><div class="toggle_vylO colorModeToggle_DEke"><button class="clean-btn toggleButton_gllP toggleButtonDisabled_aARS" type="button" disabled="" title="Switch between dark and light mode (currently light mode)" aria-label="Switch between dark and light mode (currently light mode)" aria-live="polite"><svg viewBox="0 0 24 24" width="24" height="24" class="lightToggleIcon_pyhR"><path fill="currentColor" d="M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"></path></svg><svg viewBox="0 0 24 24" width="24" height="24" class="darkToggleIcon_wfgR"><path fill="currentColor" d="M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"></path></svg></button></div><div class="searchBox_ZlJk"></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div></nav><div id="docusaurus_skipToContent_fallback" class="main-wrapper mainWrapper_z2l0"><main class="container container--fluid margin-vert--lg"><div class="row mdxPageWrapper_j9I6"><div class="col col--8"><article><h1>Release notes</h1><h2 class="anchor anchorWithStickyNavbar_LWe7" id="4170">4.17.0<a href="#4170" class="hash-link" aria-label="Direct link to 4.17.0" title="Direct link to 4.17.0">​</a></h2><p>Release 4.17.0 includes multiple important features, improvements, bug fixes and some dependencies CVE fixes.</p><p>The technical details of this release are summarized below.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="breaking-changes">Breaking Changes<a href="#breaking-changes" class="hash-link" aria-label="Direct link to Breaking Changes" title="Direct link to Breaking Changes">​</a></h3><p>No breaking changes. Some defaults are different, but overall there are no compatibility concerns.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="features">Features<a href="#features" class="hash-link" aria-label="Direct link to Features" title="Direct link to Features">​</a></h3><ul><li>BP-62 Batch Read API</li></ul><h3 class="anchor anchorWithStickyNavbar_LWe7" id="notable-changes">Notable changes<a href="#notable-changes" class="hash-link" aria-label="Direct link to Notable changes" title="Direct link to Notable changes">​</a></h3><ul><li>Enable reorder read sequence for bk client by default <a href="https://github.com/apache/bookkeeper/pull/4139" target="_blank" rel="noopener noreferrer">PR #4139</a> </li><li>Fix some metrics generated by prometheus client without type info <a href="https://github.com/apache/bookkeeper/pull/3927" target="_blank" rel="noopener noreferrer">PR #3927</a> </li><li>Fix arbitrary file upload vulnerability with httpServerEnabled <a href="https://github.com/apache/bookkeeper/pull/3982" target="_blank" rel="noopener noreferrer">PR #3982</a> </li><li>Enable kv logs in log4j configuration <a href="https://github.com/apache/bookkeeper/pull/3986" target="_blank" rel="noopener noreferrer">PR #3986</a> </li><li>Make compatible between DefaultEntryLogger and DirectEntryLogger <a href="https://github.com/apache/bookkeeper/pull/4041" target="_blank" rel="noopener noreferrer">PR #4041</a> </li></ul><h4 class="anchor anchorWithStickyNavbar_LWe7" id="bookie">Bookie<a href="#bookie" class="hash-link" aria-label="Direct link to Bookie" title="Direct link to Bookie">​</a></h4><ul><li>Fix bug of negative JournalQueueSize <a href="https://github.com/apache/bookkeeper/pull/4077" target="_blank" rel="noopener noreferrer">PR #4077</a> </li><li>Fix compaction throttle imprecise <a href="https://github.com/apache/bookkeeper/pull/3192" target="_blank" rel="noopener noreferrer">PR #3192</a> </li><li>Fix data lost when configured multiple ledger directories <a href="https://github.com/apache/bookkeeper/pull/3329" target="_blank" rel="noopener noreferrer">PR #3329</a> </li><li>Try to use jdk api to create hardlink when rename file when compaction. <a href="https://github.com/apache/bookkeeper/pull/3876" target="_blank" rel="noopener noreferrer">PR #3876</a> </li><li>[feature][server]<!-- --> add dbStorage_readAheadCacheBatchBytesSize properties when read ahead entries <a href="https://github.com/apache/bookkeeper/pull/3895" target="_blank" rel="noopener noreferrer">PR #3895</a> </li><li>Fix keys leak in EntryLocationIndex when ledgersToDelete is empty <a href="https://github.com/apache/bookkeeper/pull/3903" target="_blank" rel="noopener noreferrer">PR #3903</a> </li><li>Fix garbage collection blocked by runtime exception <a href="https://github.com/apache/bookkeeper/pull/3901" target="_blank" rel="noopener noreferrer">PR #3901</a> </li><li>Skip sync the RocksDB when no changes <a href="https://github.com/apache/bookkeeper/pull/3904" target="_blank" rel="noopener noreferrer">PR #3904</a> </li><li>Enable PCBC completionObjects autoShrink to reduce memory usage and gc <a href="https://github.com/apache/bookkeeper/pull/3913" target="_blank" rel="noopener noreferrer">PR #3913</a> </li><li>[Fix]<!-- --> Recycle dropping read-write requests when various exceptions happened <a href="https://github.com/apache/bookkeeper/pull/3912" target="_blank" rel="noopener noreferrer">PR #3912</a> </li><li>Fix ledger replicated failed blocks bookie decommission process <a href="https://github.com/apache/bookkeeper/pull/3917" target="_blank" rel="noopener noreferrer">PR #3917</a> </li><li>Support skip invalid journal record in replying journal stage <a href="https://github.com/apache/bookkeeper/pull/3956" target="_blank" rel="noopener noreferrer">PR #3956</a> </li><li>Avoid compaction to trigger extra flushes DbLedgerStorage <a href="https://github.com/apache/bookkeeper/pull/3959" target="_blank" rel="noopener noreferrer">PR #3959</a> </li><li>Fix memory leak of direct memory in direct memory entry logger. <a href="https://github.com/apache/bookkeeper/pull/3983" target="_blank" rel="noopener noreferrer">PR #3983</a> </li><li>Unify ByteBufAllocator for the DirectIO component <a href="https://github.com/apache/bookkeeper/pull/3985" target="_blank" rel="noopener noreferrer">PR #3985</a> </li><li>Print compaction progress <a href="https://github.com/apache/bookkeeper/pull/4071" target="_blank" rel="noopener noreferrer">PR #4071</a> </li><li>Optimize bookie decommission check wait interval <a href="https://github.com/apache/bookkeeper/pull/4070" target="_blank" rel="noopener noreferrer">PR #4070</a> </li><li>Fix trigger GC not work <a href="https://github.com/apache/bookkeeper/pull/3998" target="_blank" rel="noopener noreferrer">PR #3998</a> </li><li>Allow to set max operation numbers in a single rocksdb batch <a href="https://github.com/apache/bookkeeper/pull/4044" target="_blank" rel="noopener noreferrer">PR #4044</a> </li><li>Add read failed log for ledger checker. <a href="https://github.com/apache/bookkeeper/pull/4010" target="_blank" rel="noopener noreferrer">PR #4010</a> </li><li>Fix read write request leak when executor throw <code>RejectedExecutionException</code> <a href="https://github.com/apache/bookkeeper/pull/4024" target="_blank" rel="noopener noreferrer">PR #4024</a> </li><li>Improve DefaultEntryLogger read performance. <a href="https://github.com/apache/bookkeeper/pull/4038" target="_blank" rel="noopener noreferrer">PR #4038</a> </li></ul><h4 class="anchor anchorWithStickyNavbar_LWe7" id="client">Client<a href="#client" class="hash-link" aria-label="Direct link to Client" title="Direct link to Client">​</a></h4><ul><li>[Bug]<!-- --> Always one orphan ledger is created <a href="https://github.com/apache/bookkeeper/pull/3813" target="_blank" rel="noopener noreferrer">PR #3813</a> </li><li>Fix checksum calculation bug when the payload is a CompositeByteBuf with readerIndex &gt; 0 <a href="https://github.com/apache/bookkeeper/pull/4196" target="_blank" rel="noopener noreferrer">PR #4196</a> </li><li>Fix no known bookies after reset racks for all BKs <a href="https://github.com/apache/bookkeeper/pull/4128" target="_blank" rel="noopener noreferrer">PR #4128</a> </li><li>Fix issue with binary compatibility with older grpc versions at runtime in the client <a href="https://github.com/apache/bookkeeper/pull/3997" target="_blank" rel="noopener noreferrer">PR #3997</a> </li><li>Entry write support local node region aware placement policy <a href="https://github.com/apache/bookkeeper/pull/4063" target="_blank" rel="noopener noreferrer">PR #4063</a> </li><li>Rackaware placement policy support local node awareness by hostname <a href="https://github.com/apache/bookkeeper/pull/4057" target="_blank" rel="noopener noreferrer">PR #4057</a> </li><li>Use netty-bom for aligning netty library versions, add epoll for linux-aarch_64 <a href="https://github.com/apache/bookkeeper/pull/4204" target="_blank" rel="noopener noreferrer">PR #4204</a> </li></ul><h4 class="anchor anchorWithStickyNavbar_LWe7" id="autorecovery">AutoRecovery<a href="#autorecovery" class="hash-link" aria-label="Direct link to AutoRecovery" title="Direct link to AutoRecovery">​</a></h4><ul><li>Make AutoRecovery enable stickyReadS as default. <a href="https://github.com/apache/bookkeeper/pull/4125" target="_blank" rel="noopener noreferrer">PR #4125</a> </li><li>Support retry logic for auto recovery <a href="https://github.com/apache/bookkeeper/pull/3799" target="_blank" rel="noopener noreferrer">PR #3799</a> 0</li><li>Fix auditor elector executor block problem. <a href="https://github.com/apache/bookkeeper/pull/4165" target="_blank" rel="noopener noreferrer">PR #4165</a> </li><li>Fix the autorecovery failed replicate by add entry fenced error <a href="https://github.com/apache/bookkeeper/pull/4163" target="_blank" rel="noopener noreferrer">PR #4163</a> </li><li>Fix auditor thread leak problem. <a href="https://github.com/apache/bookkeeper/pull/4162" target="_blank" rel="noopener noreferrer">PR #4162</a> </li><li>AutoRecovery supports batch read <a href="https://github.com/apache/bookkeeper/pull/4211" target="_blank" rel="noopener noreferrer">PR #4211</a></li></ul><h4 class="anchor anchorWithStickyNavbar_LWe7" id="others">Others<a href="#others" class="hash-link" aria-label="Direct link to Others" title="Direct link to Others">​</a></h4><ul><li>Added CLI command to start state store service without a bookie <a href="https://github.com/apache/bookkeeper/pull/2648" target="_blank" rel="noopener noreferrer">PR #2648</a></li><li>Add ensemble relocation command which adheres to placement policy <a href="https://github.com/apache/bookkeeper/pull/2931" target="_blank" rel="noopener noreferrer">PR #2931</a> </li><li>Tuning pool concurrency <a href="https://github.com/apache/bookkeeper/pull/3432" target="_blank" rel="noopener noreferrer">PR #3432</a> </li><li>Issue 4136: Fix logging configurations are broken in docker image <a href="https://github.com/apache/bookkeeper/pull/4137" target="_blank" rel="noopener noreferrer">PR #4137</a> </li><li>[release]<!-- --> Force to use linux/amd64 to build release <a href="https://github.com/apache/bookkeeper/pull/4060" target="_blank" rel="noopener noreferrer">PR #4060</a> </li></ul><h3 class="anchor anchorWithStickyNavbar_LWe7" id="dependency-changes">Dependency changes<a href="#dependency-changes" class="hash-link" aria-label="Direct link to Dependency changes" title="Direct link to Dependency changes">​</a></h3><p>Upgraded notable dependencies and address CVEs, including:</p><ul><li>Upgrade snappy-java to address multiple CVEs <a href="https://github.com/apache/bookkeeper/pull/3993" target="_blank" rel="noopener noreferrer">PR #3993</a> </li><li>Upgrade grpc and protobuf to address CVE-2023-32732 <a href="https://github.com/apache/bookkeeper/pull/3992" target="_blank" rel="noopener noreferrer">PR #3992</a> </li><li>Upgrade Zookeeper to 3.8.3 to address CVE-2023-44981 <a href="https://github.com/apache/bookkeeper/pull/4112" target="_blank" rel="noopener noreferrer">PR #4112</a> </li><li>Upgrade Netty to 4.1.107.Final and io_uring to 0.0.25.Final <a href="https://github.com/apache/bookkeeper/pull/4224" target="_blank" rel="noopener noreferrer">PR #4224</a> </li><li>Bump org.apache.commons:commons-compress from 1.21 to 1.26.0 <a href="https://github.com/apache/bookkeeper/pull/4214" target="_blank" rel="noopener noreferrer">PR #4214</a> </li><li>Update datasketches version from 0.8.3 to 3.2.0 <a href="https://github.com/apache/bookkeeper/pull/3264" target="_blank" rel="noopener noreferrer">PR #3264</a> </li><li>Issue 3567: Upgrade rocksdb version to avoid checksum mismatch error <a href="https://github.com/apache/bookkeeper/pull/3568" target="_blank" rel="noopener noreferrer">PR #3568</a> </li><li>fix(sec): upgrade commons-codec to 1.13 <a href="https://github.com/apache/bookkeeper/pull/3508" target="_blank" rel="noopener noreferrer">PR #3508</a> </li><li>Remove avro, hadoop-auth and jersey-json dependencies from hadoop-common to resolve CVE-2019-10202, CVE-2023-1370 and CVE-2022-45685 <a href="https://github.com/apache/bookkeeper/pull/3911" target="_blank" rel="noopener noreferrer">PR #3911</a> </li><li>Upgrade docker base image to resolve CVE-2023-0286 <a href="https://github.com/apache/bookkeeper/pull/3916" target="_blank" rel="noopener noreferrer">PR #3916</a> </li><li>Upgrade bc-fips to 1.0.2.4 to fix CVE-2022-45146 <a href="https://github.com/apache/bookkeeper/pull/3915" target="_blank" rel="noopener noreferrer">PR #3915</a> </li><li>Upgrade jetty version to 9.4.51.v20230217 <a href="https://github.com/apache/bookkeeper/pull/3937" target="_blank" rel="noopener noreferrer">PR #3937</a> </li><li>Bump guava version from 31.0.1-jre to 32.0.1-jre <a href="https://github.com/apache/bookkeeper/pull/4008" target="_blank" rel="noopener noreferrer">PR #4008</a> </li></ul><h3 class="anchor anchorWithStickyNavbar_LWe7" id="details">Details<a href="#details" class="hash-link" aria-label="Direct link to Details" title="Direct link to Details">​</a></h3><p><a href="https://github.com/apache/bookkeeper/pulls?q=is%3Apr+milestone%3A4.17.0+is%3Aclosed" target="_blank" rel="noopener noreferrer">https://github.com/apache/bookkeeper/pulls?q=is%3Apr+milestone%3A4.17.0+is%3Aclosed</a></p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="4165">4.16.5<a href="#4165" class="hash-link" aria-label="Direct link to 4.16.5" title="Direct link to 4.16.5">​</a></h2><p>Release 4.16.5 includes multiple bug fixes and few dependency updates.</p><p>Apache BookKeeper users are encouraged to upgrade to 4.16.5 if you are using 4.16.x.
 The technical details of this release are summarized below.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="highlights">Highlights<a href="#highlights" class="hash-link" aria-label="Direct link to Highlights" title="Direct link to Highlights">​</a></h3><h4 class="anchor anchorWithStickyNavbar_LWe7" id="bugs">Bugs<a href="#bugs" class="hash-link" aria-label="Direct link to Bugs" title="Direct link to Bugs">​</a></h4><ul><li>Fixed creation of temporary dir in NativeUtils <a href="https://github.com/apache/bookkeeper/pull/4262" target="_blank" rel="noopener noreferrer">PR #4262</a> </li><li>Fix error stack track may expose to external user <a href="https://github.com/apache/bookkeeper/pull/4223" target="_blank" rel="noopener noreferrer">PR #4223</a></li><li>Add filename check for unTar <a href="https://github.com/apache/bookkeeper/pull/4222" target="_blank" rel="noopener noreferrer">PR #4222</a></li><li>Fix uncontrolled data used in path expression <a href="https://github.com/apache/bookkeeper/pull/4221" target="_blank" rel="noopener noreferrer">PR #4221</a></li><li>Set metrics endpoint content-type <a href="https://github.com/apache/bookkeeper/pull/4208" target="_blank" rel="noopener noreferrer">PR #4208</a></li><li>Fix checksum calculation bug when the payload is a CompositeByteBuf with readerIndex &gt; 0 <a href="https://github.com/apache/bookkeeper/pull/4205" target="_blank" rel="noopener noreferrer">PR #4205</a></li><li>Fix yaml and dockerfile <a href="https://github.com/apache/bookkeeper/pull/4186" target="_blank" rel="noopener noreferrer">PR #4186</a></li></ul><h4 class="anchor anchorWithStickyNavbar_LWe7" id="dependency-updates">Dependency updates<a href="#dependency-updates" class="hash-link" aria-label="Direct link to Dependency updates" title="Direct link to Dependency updates">​</a></h4><ul><li>Bump org.apache.commons:commons-compress from 1.21 to 1.26.0 <a href="https://github.com/apache/bookkeeper/pull/4214" target="_blank" rel="noopener noreferrer">PR #4214</a></li></ul><h4 class="anchor anchorWithStickyNavbar_LWe7" id="details-1">Details<a href="#details-1" class="hash-link" aria-label="Direct link to Details" title="Direct link to Details">​</a></h4><p><a href="https://github.com/apache/bookkeeper/pulls?q=is%3Apr+label%3Arelease%2F4.16.5+is%3Amerged+" target="_blank" rel="noopener noreferrer">https://github.com/apache/bookkeeper/pulls?q=is%3Apr+label%3Arelease%2F4.16.5+is%3Amerged+</a></p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="4164">4.16.4<a href="#4164" class="hash-link" aria-label="Direct link to 4.16.4" title="Direct link to 4.16.4">​</a></h2><p>Release 4.16.4 includes multiple bug fixes and improvements, also we have a few dependency updates.</p><p>Apache BookKeeper users are encouraged to upgrade to 4.16.4 if you are using 4.16.x.
 The technical details of this release are summarized below.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="highlights-1">Highlights<a href="#highlights-1" class="hash-link" aria-label="Direct link to Highlights" title="Direct link to Highlights">​</a></h3><h4 class="anchor anchorWithStickyNavbar_LWe7" id="bugs-1">Bugs<a href="#bugs-1" class="hash-link" aria-label="Direct link to Bugs" title="Direct link to Bugs">​</a></h4><ul><li>Fix calculate checkSum when using Java9IntHash <a href="https://github.com/apache/bookkeeper/pull/4140" target="_blank" rel="noopener noreferrer">PR #4140</a></li><li>Fix the autorecovery failed replicate by add entry fenced error <a href="https://github.com/apache/bookkeeper/pull/4163" target="_blank" rel="noopener noreferrer">PR #4163</a></li><li>Fixing memory leak error when using DirectEntryLogger <a href="https://github.com/apache/bookkeeper/pull/4135" target="_blank" rel="noopener noreferrer">PR #4135</a></li><li>Fix bug of negative JournalQueueSize <a href="https://github.com/apache/bookkeeper/pull/4077" target="_blank" rel="noopener noreferrer">PR #4077</a></li><li>Fix NoSuchElementException when rereplicate empty ledgers <a href="https://github.com/apache/bookkeeper/pull/4039" target="_blank" rel="noopener noreferrer">PR #4039</a></li><li>Change the method getUnderreplicatedFragments to the package private <a href="https://github.com/apache/bookkeeper/pull/4174" target="_blank" rel="noopener noreferrer">PR #4174</a></li><li>Fix auditor elector executor block problem. <a href="https://github.com/apache/bookkeeper/pull/4165" target="_blank" rel="noopener noreferrer">PR #4165</a></li><li>Fix auditor thread leak problem. <a href="https://github.com/apache/bookkeeper/pull/4162" target="_blank" rel="noopener noreferrer">PR #4162</a></li><li>Use Flaky flag to skip testBookieServerZKSessionExpireBehaviour test <a href="https://github.com/apache/bookkeeper/pull/4144" target="_blank" rel="noopener noreferrer">PR #4144</a></li><li>Add ledgersCount.incrementAndGet in setExplicitLac function <a href="https://github.com/apache/bookkeeper/pull/4138" target="_blank" rel="noopener noreferrer">PR #4138</a></li><li>Fix no known bookies after reset racks for all BKs <a href="https://github.com/apache/bookkeeper/pull/4128" target="_blank" rel="noopener noreferrer">PR #4128</a></li><li>Fix a slow gc thread shutdown when compacting <a href="https://github.com/apache/bookkeeper/pull/4127" target="_blank" rel="noopener noreferrer">PR #4127</a></li><li>Remove the unused logs in the CleanupLedgerManager.recordPromise <a href="https://github.com/apache/bookkeeper/pull/4121" target="_blank" rel="noopener noreferrer">PR #4121</a></li><li>Fix Flaky-test: HandleFailuresTest.testHandleFailureBookieNotInWriteSet <a href="https://github.com/apache/bookkeeper/pull/4110" target="_blank" rel="noopener noreferrer">PR #4110</a></li><li>Ignore the empty <code>perRegionPlacement</code> when RegionAwareEnsemblePlacementPolicy#newEnsemble <a href="https://github.com/apache/bookkeeper/pull/4106" target="_blank" rel="noopener noreferrer">PR #4106</a></li><li>Fix LedgerHandle <code>ensembleChangeCounter</code> not used. <a href="https://github.com/apache/bookkeeper/pull/4103" target="_blank" rel="noopener noreferrer">PR #4103</a></li><li>Tune the TestReplicationWorker test. <a href="https://github.com/apache/bookkeeper/pull/4093" target="_blank" rel="noopener noreferrer">PR #4093</a></li><li>Make AuditorBookieTest#waitForNewAuditor stronger. <a href="https://github.com/apache/bookkeeper/pull/4078" target="_blank" rel="noopener noreferrer">PR #4078</a></li><li>Print compaction progress <a href="https://github.com/apache/bookkeeper/pull/4071" target="_blank" rel="noopener noreferrer">PR #4071</a></li><li>Fix readEntry parameter order <a href="https://github.com/apache/bookkeeper/pull/4059" target="_blank" rel="noopener noreferrer">PR #4059</a></li><li>Skip sync the RocksDB when no changes <a href="https://github.com/apache/bookkeeper/pull/3904" target="_blank" rel="noopener noreferrer">PR #3904</a></li><li>Try to use jdk api to create hardlink when rename file when compaction. <a href="https://github.com/apache/bookkeeper/pull/3876" target="_blank" rel="noopener noreferrer">PR #3876</a></li></ul><h4 class="anchor anchorWithStickyNavbar_LWe7" id="dependency-updates-1">Dependency updates<a href="#dependency-updates-1" class="hash-link" aria-label="Direct link to Dependency updates" title="Direct link to Dependency updates">​</a></h4><ul><li>Upgrade Zookeeper to 3.8.3 to address CVE-2023-44981 <a href="https://github.com/apache/bookkeeper/pull/4112" target="_blank" rel="noopener noreferrer">PR #4112</a></li><li>Update Jetty dependency <a href="https://github.com/apache/bookkeeper/pull/4141" target="_blank" rel="noopener noreferrer">PR #4141</a></li><li>Upgrade bc-fips to 1.0.2.4 to fix CVE-2022-45146 <a href="https://github.com/apache/bookkeeper/pull/3915" target="_blank" rel="noopener noreferrer">PR #3915</a></li></ul><h4 class="anchor anchorWithStickyNavbar_LWe7" id="details-2">Details<a href="#details-2" class="hash-link" aria-label="Direct link to Details" title="Direct link to Details">​</a></h4><p><a href="https://github.com/apache/bookkeeper/pulls?q=is%3Apr+label%3Arelease%2F4.16.4+is%3Amerged+" target="_blank" rel="noopener noreferrer">https://github.com/apache/bookkeeper/pulls?q=is%3Apr+label%3Arelease%2F4.16.4+is%3Amerged+</a></p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="4155">4.15.5<a href="#4155" class="hash-link" aria-label="Direct link to 4.15.5" title="Direct link to 4.15.5">​</a></h2><p>Release 4.15.5 includes multiple bug fixes and improvements, also we have a few dependency updates.</p><p>Apache BookKeeper users are encouraged to upgrade to 4.15.5 if you are using 4.15.x.
 The technical details of this release are summarized below.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="highlights-2">Highlights<a href="#highlights-2" class="hash-link" aria-label="Direct link to Highlights" title="Direct link to Highlights">​</a></h3><p>The previous release is using ARM platform compile, that means that the JNI libraries are only present for MacOS
@@ -163,7 +163,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/content/releases/index.html b/content/releases/index.html
index 5142a27..6d4a8d4 100644
--- a/content/releases/index.html
+++ b/content/releases/index.html
@@ -4,12 +4,12 @@
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.0">
 <title data-rh="true">Apache BookKeeper</title><meta data-rh="true" property="og:title" content="Apache BookKeeper"><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://bookkeeper.apache.org/releases"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docusaurus_tag" content="default"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docsearch:docusaurus_tag" content="default"><meta data-rh="true" name="description" content="Version 4.16.4 is the latest release of BookKeeper. The current stable version is 4.14.8."><meta data-rh="true" property="og:description" content="Version 4.16.4 is the latest release of BookKeeper. The current stable version is 4.14.8."><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://bookkeeper.apache.org/releases"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/releases" hreflang="en"><link data-rh="true" rel="alternate" href="https://bookkeeper.apache.org/releases" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49914aab.css">
-<link rel="preload" href="/assets/js/runtime~main.aa113821.js" as="script">
-<link rel="preload" href="/assets/js/main.38f5ac7b.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.380b5a99.js" as="script">
+<link rel="preload" href="/assets/js/main.287687b3.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
-<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navbar__brand" href="/"><div class="navbar__logo"><img src="/img/bk-logo.svg" alt="Apache Bookkeeper" class="themedImage_ToTc themedImage--light_HNdA"><img src="/img/bk-logo.svg" alt="Apache Bookkeeper" class="themedImage_ToTc themedImage--dark_i4oU"></div><b class="navbar__title text--truncate">Apache BookKeeper</b></a><a class="navbar__item navbar__link" href="/docs/overview/">Documentation</a><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Community</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/community/mailing-lists">Mailing lists</a></li><li><a class="dropdown__link" href="/community/slack">Slack</a></li><li><a href="https://github.com/apache/bookkeeper/issues" target="_blank" rel="noopener noreferrer" class="dropdown__link">Github issues<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a class="dropdown__link" href="/community/releases">Release management</a></li><li><a class="dropdown__link" href="/community/meeting">Community meetings</a></li><li><a class="dropdown__link" href="/community/contributing">Contribution guide</a></li><li><a class="dropdown__link" href="/community/coding-guide">Coding guide</a></li><li><a class="dropdown__link" href="/community/testing">Testing guide</a></li><li><a class="dropdown__link" href="/community/issue-report">Issue report guide</a></li><li><a class="dropdown__link" href="/community/release-guide">Release guide</a></li><li><a class="dropdown__link" href="/community/presentations">Presentations</a></li><li><a class="dropdown__link" href="/community/bookkeeper-proposals">BookKeeper proposals (BP)</a></li></ul></div><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Project</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/project/who">Who are we?</a></li><li><a class="dropdown__link" href="/project/bylaws">Bylaws</a></li><li><a href="https://apache.org/licenses" target="_blank" rel="noopener noreferrer" class="dropdown__link">License<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a class="dropdown__link" href="/project/privacy">Privacy policy</a></li><li><a href="https://www.apache.org/foundation/sponsorship.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Sponsorship<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a href="https://www.apache.org/foundation/thanks.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Thanks<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div></div><div class="navbar__items navbar__items--right"><div class="navbar__item dropdown dropdown--hoverable dropdown--right"><a class="navbar__link" aria-haspopup="true" aria-expanded="false" role="button" href="/docs/admin/autorecovery">4.17.0</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/docs/next/overview/">Next</a></li><li><a class="dropdown__link" href="/docs/admin/autorecovery">4.17.0</a></li><li><a class="dropdown__link" href="/docs/4.16.5/overview/">4.16.5</a></li><li><a class="dropdown__link" href="/docs/4.15.5/overview/">4.15.5</a></li><li><a class="dropdown__link" href="/docs/4.14.8/overview/">4.14.8</a></li><li><a class="dropdown__link" href="/docs/4.13.0/overview/">4.13.0</a></li><li><a class="dropdown__link" href="/docs/4.12.1/overview/">4.12.1</a></li><li><a class="dropdown__link" href="/docs/4.11.1/overview/">4.11.1</a></li><li><a class="dropdown__link" href="/docs/4.10.0/overview/">4.10.0</a></li><li><a class="dropdown__link" href="/docs/4.9.2/overview/">4.9.2</a></li><li><a class="dropdown__link" href="/docs/4.8.2/overview/">4.8.2</a></li><li><a class="dropdown__link" href="/docs/4.7.3/overview/">4.7.3</a></li><li><a class="dropdown__link" href="/docs/4.6.2/overview/">4.6.2</a></li><li><a class="dropdown__link" href="/docs/4.5.1/overview/">4.5.1</a></li></ul></div><a aria-current="page" class="navbar__item navbar__link navbar__link--active" href="/releases">Download</a><div class="toggle_vylO colorModeToggle_DEke"><button class="clean-btn toggleButton_gllP toggleButtonDisabled_aARS" type="button" disabled="" title="Switch between dark and light mode (currently light mode)" aria-label="Switch between dark and light mode (currently light mode)" aria-live="polite"><svg viewBox="0 0 24 24" width="24" height="24" class="lightToggleIcon_pyhR"><path fill="currentColor" d="M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"></path></svg><svg viewBox="0 0 24 24" width="24" height="24" class="darkToggleIcon_wfgR"><path fill="currentColor" d="M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"></path></svg></button></div><div class="searchBox_ZlJk"></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div></nav><div id="docusaurus_skipToContent_fallback" class="main-wrapper mainWrapper_z2l0"><main class="container container--fluid margin-vert--lg"><div class="row mdxPageWrapper_j9I6"><div class="col col--8"><article><h1>Releases</h1><p>Version <strong>4.16.4</strong> is the latest release of BookKeeper. The current stable version is <strong>4.14.8</strong>.</p><p><a href="/release-notes">Release notes</a></p><div><div><h3 id="4.17.0">Version <!-- -->4.17.0</h3><table><thead><th>Release</th><th>Link</th><th>Crypto files</th></thead><tbody><tr><td>Source</td><td><a href="https://www.apache.org/dyn/mirrors/mirrors.cgi?action=download&amp;filename=bookkeeper/bookkeeper-4.17.0/bookkeeper-4.17.0-src.tar.gz">bookkeeper-<!-- -->4.17.0<!-- -->-src.tar.gz</a></td><td><a href="https://www.apache.org/dyn/mirrors/mirrors.cgi?action=download&amp;filename=bookkeeper/bookkeeper-4.17.0/bookkeeper-4.17.0-src.tar.gz.asc">asc</a>, <a href="https://www.apache.org/dyn/mirrors/mirrors.cgi?action=download&amp;filename=bookkeeper/bookkeeper-4.17.0/bookkeeper-4.17.0-src.tar.gz.sha512">sha512</a></td></tr><tr><td>Binary</td><td><a href="https://www.apache.org/dyn/mirrors/mirrors.cgi?action=download&amp;filename=bookkeeper/bookkeeper-4.17.0/bookkeeper-server-4.17.0-bin.tar.gz">bookkeeper-server-<!-- -->4.17.0<!-- -->-bin.tar.gz</a></td><td><a href="https://www.apache.org/dyn/mirrors/mirrors.cgi?action=download&amp;filename=bookkeeper/bookkeeper-4.17.0/bookkeeper-server-4.17.0-bin.tar.gz.asc">asc</a>, <a href="https://www.apache.org/dyn/mirrors/mirrors.cgi?action=download&amp;filename=bookkeeper/bookkeeper-4.17.0/bookkeeper-server-4.17.0-bin.tar.gz.sha512">sha512</a></td></tr></tbody></table></div><div><h3 id="4.16.5">Version <!-- -->4.16.5</h3><table><thead><th>Release</th><th>Link</th><th>Crypto files</th></thead><tbody><tr><td>Source</td><td><a href="https://www.apache.org/dyn/mirrors/mirrors.cgi?action=download&amp;filename=bookkeeper/bookkeeper-4.16.5/bookkeeper-4.16.5-src.tar.gz">bookkeeper-<!-- -->4.16.5<!-- -->-src.tar.gz</a></td><td><a href="https://www.apache.org/dyn/mirrors/mirrors.cgi?action=download&amp;filename=bookkeeper/bookkeeper-4.16.5/bookkeeper-4.16.5-src.tar.gz.asc">asc</a>, <a href="https://www.apache.org/dyn/mirrors/mirrors.cgi?action=download&amp;filename=bookkeeper/bookkeeper-4.16.5/bookkeeper-4.16.5-src.tar.gz.sha512">sha512</a></td></tr><tr><td>Binary</td><td><a href="https://www.apache.org/dyn/mirrors/mirrors.cgi?action=download&amp;filename=bookkeeper/bookkeeper-4.16.5/bookkeeper-server-4.16.5-bin.tar.gz">bookkeeper-server-<!-- -->4.16.5<!-- -->-bin.tar.gz</a></td><td><a href="https://www.apache.org/dyn/mirrors/mirrors.cgi?action=download&amp;filename=bookkeeper/bookkeeper-4.16.5/bookkeeper-server-4.16.5-bin.tar.gz.asc">asc</a>, <a href="https://www.apache.org/dyn/mirrors/mirrors.cgi?action=download&amp;filename=bookkeeper/bookkeeper-4.16.5/bookkeeper-server-4.16.5-bin.tar.gz.sha512">sha512</a></td></tr></tbody></table></div><div><h3 id="4.15.5">Version <!-- -->4.15.5</h3><table><thead><th>Release</th><th>Link</th><th>Crypto files</th></thead><tbody><tr><td>Source</td><td><a href="https://www.apache.org/dyn/mirrors/mirrors.cgi?action=download&amp;filename=bookkeeper/bookkeeper-4.15.5/bookkeeper-4.15.5-src.tar.gz">bookkeeper-<!-- -->4.15.5<!-- -->-src.tar.gz</a></td><td><a href="https://www.apache.org/dyn/mirrors/mirrors.cgi?action=download&amp;filename=bookkeeper/bookkeeper-4.15.5/bookkeeper-4.15.5-src.tar.gz.asc">asc</a>, <a href="https://www.apache.org/dyn/mirrors/mirrors.cgi?action=download&amp;filename=bookkeeper/bookkeeper-4.15.5/bookkeeper-4.15.5-src.tar.gz.sha512">sha512</a></td></tr><tr><td>Binary</td><td><a href="https://www.apache.org/dyn/mirrors/mirrors.cgi?action=download&amp;filename=bookkeeper/bookkeeper-4.15.5/bookkeeper-server-4.15.5-bin.tar.gz">bookkeeper-server-<!-- -->4.15.5<!-- -->-bin.tar.gz</a></td><td><a href="https://www.apache.org/dyn/mirrors/mirrors.cgi?action=download&amp;filename=bookkeeper/bookkeeper-4.15.5/bookkeeper-server-4.15.5-bin.tar.gz.asc">asc</a>, <a href="https://www.apache.org/dyn/mirrors/mirrors.cgi?action=download&amp;filename=bookkeeper/bookkeeper-4.15.5/bookkeeper-server-4.15.5-bin.tar.gz.sha512">sha512</a></td></tr></tbody></table></div><div><h3 id="4.14.8">Version <!-- -->4.14.8</h3><table><thead><th>Release</th><th>Link</th><th>Crypto files</th></thead><tbody><tr><td>Source</td><td><a href="https://www.apache.org/dyn/mirrors/mirrors.cgi?action=download&amp;filename=bookkeeper/bookkeeper-4.14.8/bookkeeper-4.14.8-src.tar.gz">bookkeeper-<!-- -->4.14.8<!-- -->-src.tar.gz</a></td><td><a href="https://www.apache.org/dyn/mirrors/mirrors.cgi?action=download&amp;filename=bookkeeper/bookkeeper-4.14.8/bookkeeper-4.14.8-src.tar.gz.asc">asc</a>, <a href="https://www.apache.org/dyn/mirrors/mirrors.cgi?action=download&amp;filename=bookkeeper/bookkeeper-4.14.8/bookkeeper-4.14.8-src.tar.gz.sha512">sha512</a></td></tr><tr><td>Binary</td><td><a href="https://www.apache.org/dyn/mirrors/mirrors.cgi?action=download&amp;filename=bookkeeper/bookkeeper-4.14.8/bookkeeper-server-4.14.8-bin.tar.gz">bookkeeper-server-<!-- -->4.14.8<!-- -->-bin.tar.gz</a></td><td><a href="https://www.apache.org/dyn/mirrors/mirrors.cgi?action=download&amp;filename=bookkeeper/bookkeeper-4.14.8/bookkeeper-server-4.14.8-bin.tar.gz.asc">asc</a>, <a href="https://www.apache.org/dyn/mirrors/mirrors.cgi?action=download&amp;filename=bookkeeper/bookkeeper-4.14.8/bookkeeper-server-4.14.8-bin.tar.gz.sha512">sha512</a></td></tr></tbody></table></div></div><h2 class="anchor anchorWithStickyNavbar_LWe7" id="release-integrity">Release Integrity<a href="#release-integrity" class="hash-link" aria-label="Direct link to Release Integrity" title="Direct link to Release Integrity">​</a></h2><p>You must <a href="https://www.apache.org/info/verification.html" target="_blank" rel="noopener noreferrer">verify</a> the integrity of the downloaded files. We provide OpenPGP signatures for every release file. This signature should be matched against the <a href="https://www.apache.org/dist/bookkeeper/KEYS" target="_blank" rel="noopener noreferrer">KEYS</a> file which contains the OpenPGP keys of BookKeeper&#x27;s Release Managers. We also provide SHA-512 checksums for every release file. After you download the file, you should calculate a checksum for your download, and make sure it is the same as ours.</p><p>If you want to download older, archived releases, they are available in the <a href="http://archive.apache.org/dist/bookkeeper/" target="_blank" rel="noopener noreferrer">Apache archive</a>.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="getting-started">Getting Started<a href="#getting-started" class="hash-link" aria-label="Direct link to Getting Started" title="Direct link to Getting Started">​</a></h2><p>Once you&#x27;ve downloaded a BookKeeper release, instructions on getting up and running with a standalone cluster that you can run your laptop can be found
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navbar__brand" href="/"><div class="navbar__logo"><img src="/img/bk-logo.svg" alt="Apache Bookkeeper" class="themedImage_ToTc themedImage--light_HNdA"><img src="/img/bk-logo.svg" alt="Apache Bookkeeper" class="themedImage_ToTc themedImage--dark_i4oU"></div><b class="navbar__title text--truncate">Apache BookKeeper</b></a><a class="navbar__item navbar__link" href="/docs/overview/">Documentation</a><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Community</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/community/mailing-lists">Mailing lists</a></li><li><a class="dropdown__link" href="/community/slack">Slack</a></li><li><a href="https://github.com/apache/bookkeeper/issues" target="_blank" rel="noopener noreferrer" class="dropdown__link">Github issues<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a class="dropdown__link" href="/community/releases">Release management</a></li><li><a class="dropdown__link" href="/community/meeting">Community meetings</a></li><li><a class="dropdown__link" href="/community/contributing">Contribution guide</a></li><li><a class="dropdown__link" href="/community/coding-guide">Coding guide</a></li><li><a class="dropdown__link" href="/community/testing">Testing guide</a></li><li><a class="dropdown__link" href="/community/issue-report">Issue report guide</a></li><li><a class="dropdown__link" href="/community/release-guide">Release guide</a></li><li><a class="dropdown__link" href="/community/presentations">Presentations</a></li><li><a class="dropdown__link" href="/community/bookkeeper-proposals">BookKeeper proposals (BP)</a></li></ul></div><div class="navbar__item dropdown dropdown--hoverable"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Project</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/project/who">Who are we?</a></li><li><a class="dropdown__link" href="/project/bylaws">Bylaws</a></li><li><a href="https://apache.org/licenses" target="_blank" rel="noopener noreferrer" class="dropdown__link">License<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a class="dropdown__link" href="/project/privacy">Privacy policy</a></li><li><a href="https://www.apache.org/foundation/sponsorship.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Sponsorship<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a href="https://www.apache.org/foundation/thanks.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Thanks<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div></div><div class="navbar__items navbar__items--right"><div class="navbar__item dropdown dropdown--hoverable dropdown--right"><a class="navbar__link" aria-haspopup="true" aria-expanded="false" role="button" href="/docs/overview/">4.17.0</a><ul class="dropdown__menu"><li><a class="dropdown__link" href="/docs/next/overview/">Next</a></li><li><a class="dropdown__link" href="/docs/overview/">4.17.0</a></li><li><a class="dropdown__link" href="/docs/4.16.5/overview/">4.16.5</a></li><li><a class="dropdown__link" href="/docs/4.15.5/overview/">4.15.5</a></li><li><a class="dropdown__link" href="/docs/4.14.8/overview/">4.14.8</a></li><li><a class="dropdown__link" href="/docs/4.13.0/overview/">4.13.0</a></li><li><a class="dropdown__link" href="/docs/4.12.1/overview/">4.12.1</a></li><li><a class="dropdown__link" href="/docs/4.11.1/overview/">4.11.1</a></li><li><a class="dropdown__link" href="/docs/4.10.0/overview/">4.10.0</a></li><li><a class="dropdown__link" href="/docs/4.9.2/overview/">4.9.2</a></li><li><a class="dropdown__link" href="/docs/4.8.2/overview/">4.8.2</a></li><li><a class="dropdown__link" href="/docs/4.7.3/overview/">4.7.3</a></li><li><a class="dropdown__link" href="/docs/4.6.2/overview/">4.6.2</a></li><li><a class="dropdown__link" href="/docs/4.5.1/overview/">4.5.1</a></li></ul></div><a aria-current="page" class="navbar__item navbar__link navbar__link--active" href="/releases">Download</a><div class="toggle_vylO colorModeToggle_DEke"><button class="clean-btn toggleButton_gllP toggleButtonDisabled_aARS" type="button" disabled="" title="Switch between dark and light mode (currently light mode)" aria-label="Switch between dark and light mode (currently light mode)" aria-live="polite"><svg viewBox="0 0 24 24" width="24" height="24" class="lightToggleIcon_pyhR"><path fill="currentColor" d="M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"></path></svg><svg viewBox="0 0 24 24" width="24" height="24" class="darkToggleIcon_wfgR"><path fill="currentColor" d="M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"></path></svg></button></div><div class="searchBox_ZlJk"></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div></nav><div id="docusaurus_skipToContent_fallback" class="main-wrapper mainWrapper_z2l0"><main class="container container--fluid margin-vert--lg"><div class="row mdxPageWrapper_j9I6"><div class="col col--8"><article><h1>Releases</h1><p>Version <strong>4.16.4</strong> is the latest release of BookKeeper. The current stable version is <strong>4.14.8</strong>.</p><p><a href="/release-notes">Release notes</a></p><div><div><h3 id="4.17.0">Version <!-- -->4.17.0</h3><table><thead><th>Release</th><th>Link</th><th>Crypto files</th></thead><tbody><tr><td>Source</td><td><a href="https://www.apache.org/dyn/mirrors/mirrors.cgi?action=download&amp;filename=bookkeeper/bookkeeper-4.17.0/bookkeeper-4.17.0-src.tar.gz">bookkeeper-<!-- -->4.17.0<!-- -->-src.tar.gz</a></td><td><a href="https://www.apache.org/dyn/mirrors/mirrors.cgi?action=download&amp;filename=bookkeeper/bookkeeper-4.17.0/bookkeeper-4.17.0-src.tar.gz.asc">asc</a>, <a href="https://www.apache.org/dyn/mirrors/mirrors.cgi?action=download&amp;filename=bookkeeper/bookkeeper-4.17.0/bookkeeper-4.17.0-src.tar.gz.sha512">sha512</a></td></tr><tr><td>Binary</td><td><a href="https://www.apache.org/dyn/mirrors/mirrors.cgi?action=download&amp;filename=bookkeeper/bookkeeper-4.17.0/bookkeeper-server-4.17.0-bin.tar.gz">bookkeeper-server-<!-- -->4.17.0<!-- -->-bin.tar.gz</a></td><td><a href="https://www.apache.org/dyn/mirrors/mirrors.cgi?action=download&amp;filename=bookkeeper/bookkeeper-4.17.0/bookkeeper-server-4.17.0-bin.tar.gz.asc">asc</a>, <a href="https://www.apache.org/dyn/mirrors/mirrors.cgi?action=download&amp;filename=bookkeeper/bookkeeper-4.17.0/bookkeeper-server-4.17.0-bin.tar.gz.sha512">sha512</a></td></tr></tbody></table></div><div><h3 id="4.16.5">Version <!-- -->4.16.5</h3><table><thead><th>Release</th><th>Link</th><th>Crypto files</th></thead><tbody><tr><td>Source</td><td><a href="https://www.apache.org/dyn/mirrors/mirrors.cgi?action=download&amp;filename=bookkeeper/bookkeeper-4.16.5/bookkeeper-4.16.5-src.tar.gz">bookkeeper-<!-- -->4.16.5<!-- -->-src.tar.gz</a></td><td><a href="https://www.apache.org/dyn/mirrors/mirrors.cgi?action=download&amp;filename=bookkeeper/bookkeeper-4.16.5/bookkeeper-4.16.5-src.tar.gz.asc">asc</a>, <a href="https://www.apache.org/dyn/mirrors/mirrors.cgi?action=download&amp;filename=bookkeeper/bookkeeper-4.16.5/bookkeeper-4.16.5-src.tar.gz.sha512">sha512</a></td></tr><tr><td>Binary</td><td><a href="https://www.apache.org/dyn/mirrors/mirrors.cgi?action=download&amp;filename=bookkeeper/bookkeeper-4.16.5/bookkeeper-server-4.16.5-bin.tar.gz">bookkeeper-server-<!-- -->4.16.5<!-- -->-bin.tar.gz</a></td><td><a href="https://www.apache.org/dyn/mirrors/mirrors.cgi?action=download&amp;filename=bookkeeper/bookkeeper-4.16.5/bookkeeper-server-4.16.5-bin.tar.gz.asc">asc</a>, <a href="https://www.apache.org/dyn/mirrors/mirrors.cgi?action=download&amp;filename=bookkeeper/bookkeeper-4.16.5/bookkeeper-server-4.16.5-bin.tar.gz.sha512">sha512</a></td></tr></tbody></table></div><div><h3 id="4.15.5">Version <!-- -->4.15.5</h3><table><thead><th>Release</th><th>Link</th><th>Crypto files</th></thead><tbody><tr><td>Source</td><td><a href="https://www.apache.org/dyn/mirrors/mirrors.cgi?action=download&amp;filename=bookkeeper/bookkeeper-4.15.5/bookkeeper-4.15.5-src.tar.gz">bookkeeper-<!-- -->4.15.5<!-- -->-src.tar.gz</a></td><td><a href="https://www.apache.org/dyn/mirrors/mirrors.cgi?action=download&amp;filename=bookkeeper/bookkeeper-4.15.5/bookkeeper-4.15.5-src.tar.gz.asc">asc</a>, <a href="https://www.apache.org/dyn/mirrors/mirrors.cgi?action=download&amp;filename=bookkeeper/bookkeeper-4.15.5/bookkeeper-4.15.5-src.tar.gz.sha512">sha512</a></td></tr><tr><td>Binary</td><td><a href="https://www.apache.org/dyn/mirrors/mirrors.cgi?action=download&amp;filename=bookkeeper/bookkeeper-4.15.5/bookkeeper-server-4.15.5-bin.tar.gz">bookkeeper-server-<!-- -->4.15.5<!-- -->-bin.tar.gz</a></td><td><a href="https://www.apache.org/dyn/mirrors/mirrors.cgi?action=download&amp;filename=bookkeeper/bookkeeper-4.15.5/bookkeeper-server-4.15.5-bin.tar.gz.asc">asc</a>, <a href="https://www.apache.org/dyn/mirrors/mirrors.cgi?action=download&amp;filename=bookkeeper/bookkeeper-4.15.5/bookkeeper-server-4.15.5-bin.tar.gz.sha512">sha512</a></td></tr></tbody></table></div><div><h3 id="4.14.8">Version <!-- -->4.14.8</h3><table><thead><th>Release</th><th>Link</th><th>Crypto files</th></thead><tbody><tr><td>Source</td><td><a href="https://www.apache.org/dyn/mirrors/mirrors.cgi?action=download&amp;filename=bookkeeper/bookkeeper-4.14.8/bookkeeper-4.14.8-src.tar.gz">bookkeeper-<!-- -->4.14.8<!-- -->-src.tar.gz</a></td><td><a href="https://www.apache.org/dyn/mirrors/mirrors.cgi?action=download&amp;filename=bookkeeper/bookkeeper-4.14.8/bookkeeper-4.14.8-src.tar.gz.asc">asc</a>, <a href="https://www.apache.org/dyn/mirrors/mirrors.cgi?action=download&amp;filename=bookkeeper/bookkeeper-4.14.8/bookkeeper-4.14.8-src.tar.gz.sha512">sha512</a></td></tr><tr><td>Binary</td><td><a href="https://www.apache.org/dyn/mirrors/mirrors.cgi?action=download&amp;filename=bookkeeper/bookkeeper-4.14.8/bookkeeper-server-4.14.8-bin.tar.gz">bookkeeper-server-<!-- -->4.14.8<!-- -->-bin.tar.gz</a></td><td><a href="https://www.apache.org/dyn/mirrors/mirrors.cgi?action=download&amp;filename=bookkeeper/bookkeeper-4.14.8/bookkeeper-server-4.14.8-bin.tar.gz.asc">asc</a>, <a href="https://www.apache.org/dyn/mirrors/mirrors.cgi?action=download&amp;filename=bookkeeper/bookkeeper-4.14.8/bookkeeper-server-4.14.8-bin.tar.gz.sha512">sha512</a></td></tr></tbody></table></div></div><h2 class="anchor anchorWithStickyNavbar_LWe7" id="release-integrity">Release Integrity<a href="#release-integrity" class="hash-link" aria-label="Direct link to Release Integrity" title="Direct link to Release Integrity">​</a></h2><p>You must <a href="https://www.apache.org/info/verification.html" target="_blank" rel="noopener noreferrer">verify</a> the integrity of the downloaded files. We provide OpenPGP signatures for every release file. This signature should be matched against the <a href="https://www.apache.org/dist/bookkeeper/KEYS" target="_blank" rel="noopener noreferrer">KEYS</a> file which contains the OpenPGP keys of BookKeeper&#x27;s Release Managers. We also provide SHA-512 checksums for every release file. After you download the file, you should calculate a checksum for your download, and make sure it is the same as ours.</p><p>If you want to download older, archived releases, they are available in the <a href="http://archive.apache.org/dist/bookkeeper/" target="_blank" rel="noopener noreferrer">Apache archive</a>.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="getting-started">Getting Started<a href="#getting-started" class="hash-link" aria-label="Direct link to Getting Started" title="Direct link to Getting Started">​</a></h2><p>Once you&#x27;ve downloaded a BookKeeper release, instructions on getting up and running with a standalone cluster that you can run your laptop can be found
 in <a href="/docs/getting-started/run-locally">Run BookKeeper locally</a>.</p><p>If you need to connect to an existing BookKeeper cluster using an officially supported client, see client docs for these languages:</p><table><thead><tr><th align="left">Client Guide</th><th align="left">API docs</th></tr></thead><tbody><tr><td align="left"><a href="/docs/api/ledger-api">The BookKeeper Client</a></td><td align="left"><a href="https://bookkeeper.apache.org//docs/latest/api/javadoc" target="_blank" rel="noopener noreferrer">Javadoc</a></td></tr><tr><td align="left"><a href="/docs/api/distributedlog-api">The DistributedLog Library</a></td><td align="left"><a href="https://distributedlog.io/docs/latest/api/java" target="_blank" rel="noopener noreferrer">Javadoc</a></td></tr></tbody></table><h2 class="anchor anchorWithStickyNavbar_LWe7" id="news">News<a href="#news" class="hash-link" aria-label="Direct link to News" title="Direct link to News">​</a></h2><h3 class="anchor anchorWithStickyNavbar_LWe7" id="3-april-2024-release-4165-available">3 April, 2024 Release 4.16.5 available<a href="#3-april-2024-release-4165-available" class="hash-link" aria-label="Direct link to 3 April, 2024 Release 4.16.5 available" title="Direct link to 3 April, 2024 Release 4.16.5 available">​</a></h3><p>This is the 47th release of Apache BookKeeper !
 See <a href="/release-notes#4165">BookKeeper 4.16.5 Release Notes</a> for details.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="2-april-2024-release-4170-available">2 April, 2024 Release 4.17.0 available<a href="#2-april-2024-release-4170-available" class="hash-link" aria-label="Direct link to 2 April, 2024 Release 4.17.0 available" title="Direct link to 2 April, 2024 Release 4.17.0 available">​</a></h3><p>This is the 46th release of Apache BookKeeper !
 See <a href="/release-notes#4170">BookKeeper 4.17.0 Release Notes</a> for details.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="19-january-2024-release-4164-available">19 January, 2024 Release 4.16.4 available<a href="#19-january-2024-release-4164-available" class="hash-link" aria-label="Direct link to 19 January, 2024 Release 4.16.4 available" title="Direct link to 19 January, 2024 Release 4.16.4 available">​</a></h3><p>This is the 45th release of Apache BookKeeper !
@@ -62,7 +62,7 @@
         </div>
       </footer>
       </div></div></div></footer></div>
-<script src="/assets/js/runtime~main.aa113821.js"></script>
-<script src="/assets/js/main.38f5ac7b.js"></script>
+<script src="/assets/js/runtime~main.380b5a99.js"></script>
+<script src="/assets/js/main.287687b3.js"></script>
 </body>
 </html>
\ No newline at end of file