blob: 86a1678bd2c08803b8297129ed84b5dff089c627 [file] [log] [blame]
<!DOCTYPE html>
<html>
<head>
<title>Apache BookKeeper&trade; - BookKeeper Admin REST API</title>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="/css/normalize.css">
<link rel="stylesheet" href="/css/tippy.css">
<link rel="stylesheet" href="/css/style.css">
<link rel="shortcut icon" href="/img/favicon.ico">
<script src="/js/tippy.min.js"></script>
<script type="text/javascript">
var shiftWindow = function() { scrollBy(0, -25); };
window.addEventListener("hashchange", shiftWindow);
window.addEventListener("pageshow", shiftWindow);
function load() { if (window.location.hash) shiftWindow(); }
</script>
</head>
<body class="body">
<main class="main">
<nav class="navbar bk-topnav">
<div class="navbar-brand">
<a class="navbar-item bk-brand" href="/">
Apache BookKeeper&trade;
</a>
<div class="navbar-burger burger" data-target="bkNav">
<span></span>
<span></span>
<span></span>
</div>
</div>
<div id="bkNav" class="navbar-menu">
<div class="navbar-start">
<div class="navbar-item has-dropdown is-hoverable">
<a class="navbar-link">Documentation</a>
<div class="navbar-dropdown is-boxed">
<a class="navbar-item" href="/docs/latest/overview/overview">
Version 4.14.0-SNAPSHOT
<span class="tag is-warning">Development</span>
</a>
<a class="navbar-item" href="/docs/latest/api/javadoc">
<span class="icon bk-javadoc-icon">
<img src="/img/java-icon.svg">
</span>
Javadoc
</a>
<hr class="dropdown-divider">
<a class="navbar-item" href="/docs/4.13.0/overview/overview">
Release 4.13.0
</a>
<a class="navbar-item" href="/docs/4.12.1/overview/overview">
Release 4.12.1
</a>
<a class="navbar-item" href="/docs/4.12.0/overview/overview">
Release 4.12.0
</a>
<a class="navbar-item" href="/docs/4.11.1/overview/overview">
Release 4.11.1
<span class="tag is-success">Stable</span>
</a>
<a class="navbar-item" href="/docs/4.11.0/overview/overview">
Release 4.11.0
</a>
<a class="navbar-item" href="/docs/4.10.0/overview/overview">
Release 4.10.0
</a>
<a class="navbar-item" href="/archives/docs/r4.9.2">
Release 4.9.2
<span class="tag is-warning">EOL</span>
</a>
<a class="navbar-item" href="/archives/docs/r4.9.1">
Release 4.9.1
<span class="tag is-warning">EOL</span>
</a>
<a class="navbar-item" href="/archives/docs/r4.9.0">
Release 4.9.0
<span class="tag is-warning">EOL</span>
</a>
<a class="navbar-item" href="/archives/docs/r4.8.2">
Release 4.8.2
<span class="tag is-warning">EOL</span>
</a>
<a class="navbar-item" href="/archives/docs/r4.8.1">
Release 4.8.1
<span class="tag is-warning">EOL</span>
</a>
<a class="navbar-item" href="/archives/docs/r4.8.0">
Release 4.8.0
<span class="tag is-warning">EOL</span>
</a>
<a class="navbar-item" href="/archives/docs/r4.7.3">
Release 4.7.3
<span class="tag is-warning">EOL</span>
</a>
<a class="navbar-item" href="/archives/docs/r4.7.2">
Release 4.7.2
<span class="tag is-warning">EOL</span>
</a>
<a class="navbar-item" href="/archives/docs/r4.7.1">
Release 4.7.1
<span class="tag is-warning">EOL</span>
</a>
<a class="navbar-item" href="/archives/docs/r4.7.0">
Release 4.7.0
<span class="tag is-warning">EOL</span>
</a>
<a class="navbar-item" href="/archives/docs/r4.6.2">
Release 4.6.2
<span class="tag is-warning">EOL</span>
</a>
<a class="navbar-item" href="/archives/docs/r4.6.1">
Release 4.6.1
<span class="tag is-warning">EOL</span>
</a>
<a class="navbar-item" href="/archives/docs/r4.6.0">
Release 4.6.0
<span class="tag is-warning">EOL</span>
</a>
<a class="navbar-item" href="/archives/docs/r4.5.1">
Release 4.5.1
<span class="tag is-warning">EOL</span>
</a>
<a class="navbar-item" href="/archives/docs/r4.5.0">
Release 4.5.0
<span class="tag is-warning">EOL</span>
</a>
<a class="navbar-item" href="/archives/docs/r4.4.0">
Release 4.4.0
<span class="tag is-warning">EOL</span>
</a>
<a class="navbar-item" href="/archives/docs/r4.3.2">
Release 4.3.2
<span class="tag is-warning">EOL</span>
</a>
<a class="navbar-item" href="/archives/docs/r4.3.1">
Release 4.3.1
<span class="tag is-warning">EOL</span>
</a>
<a class="navbar-item" href="/archives/docs/r4.3.0">
Release 4.3.0
<span class="tag is-warning">EOL</span>
</a>
<a class="navbar-item" href="/archives/docs/r4.2.4">
Release 4.2.4
<span class="tag is-warning">EOL</span>
</a>
<a class="navbar-item" href="/archives/docs/r4.2.3">
Release 4.2.3
<span class="tag is-warning">EOL</span>
</a>
<a class="navbar-item" href="/archives/docs/r4.2.2">
Release 4.2.2
<span class="tag is-warning">EOL</span>
</a>
<a class="navbar-item" href="/archives/docs/r4.2.1">
Release 4.2.1
<span class="tag is-warning">EOL</span>
</a>
<a class="navbar-item" href="/archives/docs/r4.2.0">
Release 4.2.0
<span class="tag is-warning">EOL</span>
</a>
<a class="navbar-item" href="/archives/docs/r4.1.0">
Release 4.1.0
<span class="tag is-warning">EOL</span>
</a>
<a class="navbar-item" href="/archives/docs/r4.0.0">
Release 4.0.0
<span class="tag is-warning">EOL</span>
</a>
</div>
</div>
<div class="navbar-item has-dropdown is-hoverable">
<a class="navbar-link">Community</a>
<div class="navbar-dropdown is-boxed">
<a class="navbar-item" href="/community/mailing-lists">Mailing lists</a>
<a class="navbar-item" href="/community/slack">Slack</a>
<a class="navbar-item" href="https://github.com/apache/bookkeeper/issues">Github Issues</a>
<a class="navbar-item" href="/community/releases">Release Management</a>
<a class="navbar-item" href="/community/meeting">Community Meetings</a>
<hr class="dropdown-divider">
<a class="navbar-item" href="/community/contributing">Contribution Guide</a>
<a class="navbar-item" href="/community/coding_guide">Coding Guide</a>
<a class="navbar-item" href="/community/testing">Testing Guide</a>
<a class="navbar-item" href="/community/issue-report">Issue Report Guide</a>
<a class="navbar-item" href="/community/release_guide">Release Guide</a>
<hr class="dropdown-divider">
<a class="navbar-item" href="/community/presentations">Presentations</a>
<a class="navbar-item" href="/community/bookkeeper_proposals">BookKeeper Proposals</a>
</div>
</div>
<div class="navbar-item has-dropdown is-hoverable">
<a class="navbar-link">Project</a>
<div class="navbar-dropdown is-boxed">
<a class="navbar-item" href="/project/who">Who are we?</a>
<a class="navbar-item" href="/project/bylaws">Bylaws</a>
<a class="navbar-item" href="http://www.apache.org/licenses/">License</a>
<hr class="dropdown-divider">
<a class="navbar-item" href="/project/privacy">Privacy policy</a>
<a class="navbar-item" href="http://www.apache.org/foundation/sponsorship.html">Sponsorship</a>
<a class="navbar-item" href="http://www.apache.org/foundation/thanks.html">Thanks</a>
</div>
</div>
</div>
<div class="navbar-end">
<div class="navbar-item">
<div class="field is-grouped">
<p class="control">
<a class="button bk-twitter" href="https://twitter.com/asfbookkeeper">
<span class="icon">
<i class="fa fa-twitter"></i>
</span>
<span>Twitter</span>
</a>
</p>
<p class="control">
<a class="button" href="https://github.com/apache/bookkeeper">
<span class="icon">
<i class="fa fa-github"></i>
</span>
<span>GitHub</span>
</a>
</p>
<p class="control">
<a class="button is-primary" href="/releases">
<span class="icon">
<i class="fa fa-download"></i>
</span>
<span>Download</span>
</a>
</p>
</div>
</div>
</div>
</div>
</nav>
<div class="bk-docs-container">
<div class="columns is-gapless">
<div class="column is-2 is-hidden-mobile">
<div class="container">
<aside class="sidebar">
<a class="button is-info">
Version: 4.12.1
</a>
<hr />
<p>
Getting started
</p>
<ul class="sidebar-items">
<li>
<a href="../../getting-started/installation">
Installation
</a>
</li>
<li>
<a href="../../getting-started/run-locally">
Run bookies locally
</a>
</li>
<li>
<a href="../../getting-started/concepts">
Concepts and architecture
</a>
</li>
</ul>
<p>
Deployment
</p>
<ul class="sidebar-items">
<li>
<a href="../../deployment/manual">
Manual deployment
</a>
</li>
<li>
<a href="../../deployment/dcos">
BookKeeper on DC/OS
</a>
</li>
<li>
<a href="../../deployment/kubernetes">
BookKeeper on Kubernetes
</a>
</li>
</ul>
<p>
Administration
</p>
<ul class="sidebar-items">
<li>
<a href="../../admin/bookies">
BookKeeper administration
</a>
</li>
<li>
<a href="../../admin/autorecovery">
AutoRecovery
</a>
</li>
<li>
<a href="../../admin/metrics">
Metric collection
</a>
</li>
<li>
<a href="../../admin/upgrade">
Upgrade
</a>
</li>
<li>
<a href="../../admin/http">
BookKeeper Admin REST API
</a>
</li>
<li>
<a href="../../admin/decomission">
Decommissioning Bookies
</a>
</li>
</ul>
<p>
API
</p>
<ul class="sidebar-items">
<li>
<a href="../../api/overview">
Overview
</a>
</li>
<li>
<a href="../../api/ledger-api">
Ledger API
</a>
</li>
<li>
<a href="../../api/ledger-adv-api">
Advanced Ledger API
</a>
</li>
<li>
<a href="../../api/distributedlog-api">
DistributedLog
</a>
</li>
<li>
<a href="../../api/javadoc">
Java API Docs
</a>
</li>
</ul>
<p>
Security
</p>
<ul class="sidebar-items">
<li>
<a href="../../security/overview">
Overview
</a>
</li>
<li>
<a href="../../security/tls">
TLS Authentication
</a>
</li>
<li>
<a href="../../security/sasl">
SASL Authentication
</a>
</li>
<li>
<a href="../../security/zookeeper">
ZooKeeper Authentication
</a>
</li>
</ul>
<p>
Development
</p>
<ul class="sidebar-items">
<li>
<a href="../../development/protocol">
BookKeeper protocol
</a>
</li>
</ul>
<p>
Reference
</p>
<ul class="sidebar-items">
<li>
<a href="../../reference/config">
Configuration
</a>
</li>
<li>
<a href="../../reference/cli">
Command-line tools
</a>
</li>
<li>
<a href="../../reference/metrics">
Metrics
</a>
</li>
</ul>
</aside>
</div>
</div>
<div class="column is-8 bk-docs-block">
<header class="docs-title">
<nav class="level bk-level">
<div class="level-left">
<div class="level-item">
<h1 class="title">BookKeeper Admin REST API</h1>
</div>
</div>
</nav>
</header>
<hr />
<div class="content">
<section class="bk-main-content">
<p>This document introduces BookKeeper HTTP endpoints, which can be used for BookKeeper administration.
To use this feature, set <code class="highlighter-rouge">httpServerEnabled</code> to <code class="highlighter-rouge">true</code> in file <code class="highlighter-rouge">conf/bk_server.conf</code>.</p>
<h2 id="all-the-endpoints">All the endpoints</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 id="heartbeat">Heartbeat</h2>
<h3 id="endpoint-heartbeat">Endpoint: /heartbeat</h3>
<ul>
<li>Method: GET</li>
<li>Description: Get heartbeat status for a specific bookie</li>
<li>Response:</li>
</ul>
<table>
<thead>
<tr>
<th style="text-align: left">Code</th>
<th style="text-align: left">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align: left">200</td>
<td style="text-align: left">Successful operation</td>
</tr>
</tbody>
</table>
<h2 id="config">Config</h2>
<h3 id="endpoint-apiv1configserver_config">Endpoint: /api/v1/config/server_config</h3>
<ol>
<li>Method: GET
<ul>
<li>Description: Get value of all configured values overridden on local server config</li>
<li>
<p>Response:</p>
<table>
<thead>
<tr>
<th style="text-align: left">Code</th>
<th style="text-align: left">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align: left">200</td>
<td style="text-align: left">Successful operation</td>
</tr>
<tr>
<td style="text-align: left">403</td>
<td style="text-align: left">Permission denied</td>
</tr>
<tr>
<td style="text-align: left">404</td>
<td style="text-align: left">Not found</td>
</tr>
</tbody>
</table>
</li>
</ul>
</li>
<li>Method: PUT
<ul>
<li>Description: Update a local server config</li>
<li>
<p>Parameters:</p>
<table>
<thead>
<tr>
<th style="text-align: left">Name</th>
<th style="text-align: left">Type</th>
<th style="text-align: left">Required</th>
<th style="text-align: left">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align: left">configName</td>
<td style="text-align: left">String</td>
<td style="text-align: left">Yes</td>
<td style="text-align: left">Configuration name(key)</td>
</tr>
<tr>
<td style="text-align: left">configValue</td>
<td style="text-align: left">String</td>
<td style="text-align: left">Yes</td>
<td style="text-align: left">Configuration value(value)</td>
</tr>
</tbody>
</table>
</li>
<li>Body:
<div class="language-json highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="w"> </span><span class="p">{</span><span class="w">
</span><span class="nl">"configName1"</span><span class="p">:</span><span class="w"> </span><span class="s2">"configValue1"</span><span class="p">,</span><span class="w">
</span><span class="nl">"configName2"</span><span class="p">:</span><span class="w"> </span><span class="s2">"configValue2"</span><span class="w">
</span><span class="p">}</span><span class="w">
</span></code></pre></div> </div>
</li>
<li>
<p>Response:</p>
<table>
<thead>
<tr>
<th style="text-align: left">Code</th>
<th style="text-align: left">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align: left">200</td>
<td style="text-align: left">Successful operation</td>
</tr>
<tr>
<td style="text-align: left">403</td>
<td style="text-align: left">Permission denied</td>
</tr>
<tr>
<td style="text-align: left">404</td>
<td style="text-align: left">Not found</td>
</tr>
</tbody>
</table>
</li>
</ul>
</li>
</ol>
<h2 id="config-1">Config</h2>
<h3 id="endpoint-metrics">Endpoint: /metrics</h3>
<ol>
<li>Method: GET
<ul>
<li>Description: Get all metrics by calling <code class="highlighter-rouge">writeAllMetrics()</code> of <code class="highlighter-rouge">statsProvider</code> internally</li>
<li>
<p>Response:</p>
<table>
<thead>
<tr>
<th style="text-align: left">Code</th>
<th style="text-align: left">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align: left">200</td>
<td style="text-align: left">Successful operation</td>
</tr>
<tr>
<td style="text-align: left">403</td>
<td style="text-align: left">Permission denied</td>
</tr>
<tr>
<td style="text-align: left">404</td>
<td style="text-align: left">Not found</td>
</tr>
</tbody>
</table>
</li>
</ul>
</li>
</ol>
<h2 id="ledger">Ledger</h2>
<h3 id="endpoint-apiv1ledgerdeleteledger_idledger_id">Endpoint: /api/v1/ledger/delete/?ledger_id=&lt;ledger_id&gt;</h3>
<ol>
<li>Method: DELETE
<ul>
<li>Description: Delete a ledger.</li>
<li>
<p>Parameters:</p>
<table>
<thead>
<tr>
<th style="text-align: left">Name</th>
<th style="text-align: left">Type</th>
<th style="text-align: left">Required</th>
<th style="text-align: left">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align: left">ledger_id</td>
<td style="text-align: left">Long</td>
<td style="text-align: left">Yes</td>
<td style="text-align: left">ledger id of the ledger.</td>
</tr>
</tbody>
</table>
</li>
<li>
<p>Response:</p>
<table>
<thead>
<tr>
<th style="text-align: left">Code</th>
<th style="text-align: left">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align: left">200</td>
<td style="text-align: left">Successful operation</td>
</tr>
<tr>
<td style="text-align: left">403</td>
<td style="text-align: left">Permission denied</td>
</tr>
<tr>
<td style="text-align: left">404</td>
<td style="text-align: left">Not found</td>
</tr>
</tbody>
</table>
</li>
</ul>
</li>
</ol>
<h3 id="endpoint-apiv1ledgerlistprint_metadatametadata">Endpoint: /api/v1/ledger/list/?print_metadata=&lt;metadata&gt;</h3>
<ol>
<li>Method: GET
<ul>
<li>Description: List all the ledgers.</li>
<li>
<p>Parameters:</p>
<table>
<thead>
<tr>
<th style="text-align: left">Name</th>
<th style="text-align: left">Type</th>
<th style="text-align: left">Required</th>
<th style="text-align: left">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align: left">print_metadata</td>
<td style="text-align: left">Boolean</td>
<td style="text-align: left">No</td>
<td style="text-align: left">whether print out metadata</td>
</tr>
</tbody>
</table>
</li>
<li>
<p>Response:</p>
<table>
<thead>
<tr>
<th style="text-align: left">Code</th>
<th style="text-align: left">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align: left">200</td>
<td style="text-align: left">Successful operation</td>
</tr>
<tr>
<td style="text-align: left">403</td>
<td style="text-align: left">Permission denied</td>
</tr>
<tr>
<td style="text-align: left">404</td>
<td style="text-align: left">Not found</td>
</tr>
</tbody>
</table>
</li>
<li>
<p>Response Body format:</p>
<div class="language-json highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="w"> </span><span class="p">{</span><span class="w">
</span><span class="nl">"ledgerId1"</span><span class="p">:</span><span class="w"> </span><span class="s2">"ledgerMetadata1"</span><span class="p">,</span><span class="w">
</span><span class="nl">"ledgerId2"</span><span class="p">:</span><span class="w"> </span><span class="s2">"ledgerMetadata2"</span><span class="p">,</span><span class="w">
</span><span class="err">...</span><span class="w">
</span><span class="p">}</span><span class="w">
</span></code></pre></div> </div>
</li>
</ul>
</li>
</ol>
<h3 id="endpoint-apiv1ledgermetadataledger_idledger_id">Endpoint: /api/v1/ledger/metadata/?ledger_id=&lt;ledger_id&gt;</h3>
<ol>
<li>Method: GET
<ul>
<li>Description: Get the metadata of a ledger.</li>
<li>
<p>Parameters:</p>
<table>
<thead>
<tr>
<th style="text-align: left">Name</th>
<th style="text-align: left">Type</th>
<th style="text-align: left">Required</th>
<th style="text-align: left">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align: left">ledger_id</td>
<td style="text-align: left">Long</td>
<td style="text-align: left">Yes</td>
<td style="text-align: left">ledger id of the ledger.</td>
</tr>
</tbody>
</table>
</li>
<li>
<p>Response:</p>
<table>
<thead>
<tr>
<th style="text-align: left">Code</th>
<th style="text-align: left">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align: left">200</td>
<td style="text-align: left">Successful operation</td>
</tr>
<tr>
<td style="text-align: left">403</td>
<td style="text-align: left">Permission denied</td>
</tr>
<tr>
<td style="text-align: left">404</td>
<td style="text-align: left">Not found</td>
</tr>
</tbody>
</table>
</li>
<li>
<p>Response Body format:</p>
<div class="language-json highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="w"> </span><span class="p">{</span><span class="w">
</span><span class="nl">"ledgerId1"</span><span class="p">:</span><span class="w"> </span><span class="s2">"ledgerMetadata1"</span><span class="w">
</span><span class="p">}</span><span class="w">
</span></code></pre></div> </div>
</li>
</ul>
</li>
</ol>
<h3 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;</h3>
<ol>
<li>Method: GET
<ul>
<li>Description: Read a range of entries from ledger.</li>
<li>
<p>Parameters:</p>
<table>
<thead>
<tr>
<th style="text-align: left">Name</th>
<th style="text-align: left">Type</th>
<th style="text-align: left">Required</th>
<th style="text-align: left">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align: left">ledger_id</td>
<td style="text-align: left">Long</td>
<td style="text-align: left">Yes</td>
<td style="text-align: left">ledger id of the ledger.</td>
</tr>
<tr>
<td style="text-align: left">start_entry_id</td>
<td style="text-align: left">Long</td>
<td style="text-align: left">No</td>
<td style="text-align: left">start entry id of read range.</td>
</tr>
<tr>
<td style="text-align: left">end_entry_id</td>
<td style="text-align: left">Long</td>
<td style="text-align: left">No</td>
<td style="text-align: left">end entry id of read range.</td>
</tr>
</tbody>
</table>
</li>
<li>
<p>Response:</p>
<table>
<thead>
<tr>
<th style="text-align: left">Code</th>
<th style="text-align: left">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align: left">200</td>
<td style="text-align: left">Successful operation</td>
</tr>
<tr>
<td style="text-align: left">403</td>
<td style="text-align: left">Permission denied</td>
</tr>
<tr>
<td style="text-align: left">404</td>
<td style="text-align: left">Not found</td>
</tr>
</tbody>
</table>
</li>
<li>
<p>Response Body format:</p>
<div class="language-json highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="w"> </span><span class="p">{</span><span class="w">
</span><span class="nl">"entryId1"</span><span class="p">:</span><span class="w"> </span><span class="s2">"entry content 1"</span><span class="p">,</span><span class="w">
</span><span class="nl">"entryId2"</span><span class="p">:</span><span class="w"> </span><span class="s2">"entry content 2"</span><span class="p">,</span><span class="w">
</span><span class="err">...</span><span class="w">
</span><span class="p">}</span><span class="w">
</span></code></pre></div> </div>
</li>
</ul>
</li>
</ol>
<h2 id="bookie">Bookie</h2>
<h3 id="endpoint-apiv1bookieinfo">Endpoint: /api/v1/bookie/info</h3>
<ol>
<li>Method: GET
<ul>
<li>Description: Get bookie info</li>
<li>
<p>Response:</p>
<table>
<thead>
<tr>
<th style="text-align: left">Code</th>
<th style="text-align: left">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align: left">200</td>
<td style="text-align: left">Successful operation</td>
</tr>
<tr>
<td style="text-align: left">403</td>
<td style="text-align: left">Permission denied</td>
</tr>
<tr>
<td style="text-align: left">501</td>
<td style="text-align: left">Not implemented</td>
</tr>
</tbody>
</table>
</li>
<li>Body:
<div class="language-json highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="w"> </span><span class="p">{</span><span class="w">
</span><span class="nl">"freeSpace"</span><span class="w"> </span><span class="p">:</span><span class="w"> </span><span class="mi">0</span><span class="p">,</span><span class="w">
</span><span class="nl">"totalSpace"</span><span class="w"> </span><span class="p">:</span><span class="w"> </span><span class="mi">0</span><span class="w">
</span><span class="p">}</span><span class="w">
</span></code></pre></div> </div>
</li>
</ul>
</li>
</ol>
<h3 id="endpoint-apiv1bookielist_bookiestypetypeprint_hostnameshostnames">Endpoint: /api/v1/bookie/list_bookies/?type=&lt;type&gt;&amp;print_hostnames=&lt;hostnames&gt;</h3>
<ol>
<li>Method: GET
<ul>
<li>Description: Get all the available bookies.</li>
<li>
<p>Parameters:</p>
<table>
<thead>
<tr>
<th style="text-align: left">Name</th>
<th style="text-align: left">Type</th>
<th style="text-align: left">Required</th>
<th style="text-align: left">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align: left">type</td>
<td style="text-align: left">String</td>
<td style="text-align: left">Yes</td>
<td style="text-align: left">value: “rw” or “ro” , list read-write/read-only bookies.</td>
</tr>
<tr>
<td style="text-align: left">print_hostnames</td>
<td style="text-align: left">Boolean</td>
<td style="text-align: left">No</td>
<td style="text-align: left">whether print hostname of bookies.</td>
</tr>
</tbody>
</table>
</li>
<li>
<p>Response:</p>
<table>
<thead>
<tr>
<th style="text-align: left">Code</th>
<th style="text-align: left">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align: left">200</td>
<td style="text-align: left">Successful operation</td>
</tr>
<tr>
<td style="text-align: left">403</td>
<td style="text-align: left">Permission denied</td>
</tr>
<tr>
<td style="text-align: left">404</td>
<td style="text-align: left">Not found</td>
</tr>
</tbody>
</table>
</li>
<li>
<p>Response Body format:</p>
<div class="language-json highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="w"> </span><span class="p">{</span><span class="w">
</span><span class="nl">"bookieSocketAddress1"</span><span class="p">:</span><span class="w"> </span><span class="s2">"hostname1"</span><span class="p">,</span><span class="w">
</span><span class="nl">"bookieSocketAddress2"</span><span class="p">:</span><span class="w"> </span><span class="s2">"hostname2"</span><span class="p">,</span><span class="w">
</span><span class="err">...</span><span class="w">
</span><span class="p">}</span><span class="w">
</span></code></pre></div> </div>
</li>
</ul>
</li>
</ol>
<h3 id="endpoint-apiv1bookielist_bookie_info">Endpoint: /api/v1/bookie/list_bookie_info</h3>
<ol>
<li>Method: GET
<ul>
<li>Description: Get bookies disk usage info of this cluster.</li>
<li>
<p>Response:</p>
<table>
<thead>
<tr>
<th style="text-align: left">Code</th>
<th style="text-align: left">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align: left">200</td>
<td style="text-align: left">Successful operation</td>
</tr>
<tr>
<td style="text-align: left">403</td>
<td style="text-align: left">Permission denied</td>
</tr>
<tr>
<td style="text-align: left">404</td>
<td style="text-align: left">Not found</td>
</tr>
</tbody>
</table>
</li>
<li>
<p>Response Body format:</p>
<div class="language-json highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="w"> </span><span class="p">{</span><span class="w">
</span><span class="nl">"bookieAddress"</span><span class="w"> </span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="err">free:</span><span class="w"> </span><span class="err">xxx</span><span class="p">,</span><span class="w"> </span><span class="err">total:</span><span class="w"> </span><span class="err">xxx</span><span class="p">},</span><span class="w">
</span><span class="nl">"bookieAddress"</span><span class="w"> </span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="err">free:</span><span class="w"> </span><span class="err">xxx</span><span class="p">,</span><span class="w"> </span><span class="err">total:</span><span class="w"> </span><span class="err">xxx</span><span class="p">},</span><span class="w">
</span><span class="err">...</span><span class="w">
</span><span class="nl">"clusterInfo"</span><span class="w"> </span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="err">total_free:</span><span class="w"> </span><span class="err">xxx</span><span class="p">,</span><span class="w"> </span><span class="err">total:</span><span class="w"> </span><span class="err">xxx</span><span class="p">}</span><span class="w">
</span><span class="p">}</span><span class="w">
</span></code></pre></div> </div>
</li>
</ul>
</li>
</ol>
<h3 id="endpoint-apiv1bookielast_log_mark">Endpoint: /api/v1/bookie/last_log_mark</h3>
<ol>
<li>Method: GET
<ul>
<li>Description: Get the last log marker.</li>
<li>
<p>Response:</p>
<table>
<thead>
<tr>
<th style="text-align: left">Code</th>
<th style="text-align: left">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align: left">200</td>
<td style="text-align: left">Successful operation</td>
</tr>
<tr>
<td style="text-align: left">403</td>
<td style="text-align: left">Permission denied</td>
</tr>
<tr>
<td style="text-align: left">404</td>
<td style="text-align: left">Not found</td>
</tr>
</tbody>
</table>
</li>
<li>
<p>Response Body format:</p>
<div class="language-json highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="w"> </span><span class="p">{</span><span class="w">
</span><span class="err">JournalId</span><span class="mi">1</span><span class="w"> </span><span class="err">:</span><span class="w"> </span><span class="err">position</span><span class="mi">1</span><span class="p">,</span><span class="w">
</span><span class="err">JournalId</span><span class="mi">2</span><span class="w"> </span><span class="err">:</span><span class="w"> </span><span class="err">position</span><span class="mi">2</span><span class="p">,</span><span class="w">
</span><span class="err">...</span><span class="w">
</span><span class="p">}</span><span class="w">
</span></code></pre></div> </div>
</li>
</ul>
</li>
</ol>
<h3 id="endpoint-apiv1bookielist_disk_filefile_typetype">Endpoint: /api/v1/bookie/list_disk_file/?file_type=&lt;type&gt;</h3>
<ol>
<li>Method: GET
<ul>
<li>Description: Get all the files on disk of current bookie.</li>
<li>
<p>Parameters:</p>
<table>
<thead>
<tr>
<th style="text-align: left">Name</th>
<th style="text-align: left">Type</th>
<th style="text-align: left">Required</th>
<th style="text-align: left">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align: left">type</td>
<td style="text-align: left">String</td>
<td style="text-align: left">No</td>
<td style="text-align: left">file type: journal/entrylog/index.</td>
</tr>
</tbody>
</table>
</li>
<li>
<p>Response:</p>
<table>
<thead>
<tr>
<th style="text-align: left">Code</th>
<th style="text-align: left">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align: left">200</td>
<td style="text-align: left">Successful operation</td>
</tr>
<tr>
<td style="text-align: left">403</td>
<td style="text-align: left">Permission denied</td>
</tr>
<tr>
<td style="text-align: left">404</td>
<td style="text-align: left">Not found</td>
</tr>
</tbody>
</table>
</li>
<li>
<p>Response Body format:</p>
<div class="language-json highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="w"> </span><span class="p">{</span><span class="w">
</span><span class="nl">"journal files"</span><span class="w"> </span><span class="p">:</span><span class="w"> </span><span class="s2">"filename1 filename2 ..."</span><span class="p">,</span><span class="w">
</span><span class="nl">"entrylog files"</span><span class="w"> </span><span class="p">:</span><span class="w"> </span><span class="s2">"filename1 filename2..."</span><span class="p">,</span><span class="w">
</span><span class="nl">"index files"</span><span class="w"> </span><span class="p">:</span><span class="w"> </span><span class="s2">"filename1 filename2 ..."</span><span class="w">
</span><span class="p">}</span><span class="w">
</span></code></pre></div> </div>
</li>
</ul>
</li>
</ol>
<h3 id="endpoint-apiv1bookieexpand_storage">Endpoint: /api/v1/bookie/expand_storage</h3>
<ol>
<li>Method: PUT
<ul>
<li>Description: Expand storage for a bookie.</li>
<li>
<p>Response:</p>
<table>
<thead>
<tr>
<th style="text-align: left">Code</th>
<th style="text-align: left">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align: left">200</td>
<td style="text-align: left">Successful operation</td>
</tr>
<tr>
<td style="text-align: left">403</td>
<td style="text-align: left">Permission denied</td>
</tr>
<tr>
<td style="text-align: left">404</td>
<td style="text-align: left">Not found</td>
</tr>
</tbody>
</table>
</li>
</ul>
</li>
</ol>
<h3 id="endpoint-apiv1bookiegc">Endpoint: /api/v1/bookie/gc</h3>
<ol>
<li>Method: PUT
<ul>
<li>Description: trigger gc for this bookie.</li>
<li>
<p>Response:</p>
<table>
<thead>
<tr>
<th style="text-align: left">Code</th>
<th style="text-align: left">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align: left">200</td>
<td style="text-align: left">Successful operation</td>
</tr>
<tr>
<td style="text-align: left">403</td>
<td style="text-align: left">Permission denied</td>
</tr>
<tr>
<td style="text-align: left">404</td>
<td style="text-align: left">Not found</td>
</tr>
</tbody>
</table>
</li>
</ul>
</li>
<li>Method: GET
<ul>
<li>Description: whether force triggered Garbage Collection is running or not for this bookie. true for is running.</li>
<li>
<p>Response:</p>
<table>
<thead>
<tr>
<th style="text-align: left">Code</th>
<th style="text-align: left">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align: left">200</td>
<td style="text-align: left">Successful operation</td>
</tr>
<tr>
<td style="text-align: left">403</td>
<td style="text-align: left">Permission denied</td>
</tr>
<tr>
<td style="text-align: left">404</td>
<td style="text-align: left">Not found</td>
</tr>
</tbody>
</table>
</li>
<li>Body:
<div class="language-json highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="w"> </span><span class="p">{</span><span class="w">
</span><span class="nl">"is_in_force_gc"</span><span class="w"> </span><span class="p">:</span><span class="w"> </span><span class="s2">"false"</span><span class="w">
</span><span class="p">}</span><span class="w">
</span></code></pre></div> </div>
</li>
</ul>
</li>
</ol>
<h3 id="endpoint-apiv1bookiegc_details">Endpoint: /api/v1/bookie/gc_details</h3>
<ol>
<li>Method: GET
<ul>
<li>Description: get details of Garbage Collection Thread, like whether it is in compacting, last compaction time, compaction counter, etc.</li>
<li>
<p>Response:</p>
<table>
<thead>
<tr>
<th style="text-align: left">Code</th>
<th style="text-align: left">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align: left">200</td>
<td style="text-align: left">Successful operation</td>
</tr>
<tr>
<td style="text-align: left">403</td>
<td style="text-align: left">Permission denied</td>
</tr>
<tr>
<td style="text-align: left">404</td>
<td style="text-align: left">Not found</td>
</tr>
</tbody>
</table>
</li>
<li>Body:
<div class="language-json highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="w"> </span><span class="p">[</span><span class="w"> </span><span class="p">{</span><span class="w">
</span><span class="nl">"forceCompacting"</span><span class="w"> </span><span class="p">:</span><span class="w"> </span><span class="kc">false</span><span class="p">,</span><span class="w">
</span><span class="nl">"majorCompacting"</span><span class="w"> </span><span class="p">:</span><span class="w"> </span><span class="kc">false</span><span class="p">,</span><span class="w">
</span><span class="nl">"minorCompacting"</span><span class="w"> </span><span class="p">:</span><span class="w"> </span><span class="kc">false</span><span class="p">,</span><span class="w">
</span><span class="nl">"lastMajorCompactionTime"</span><span class="w"> </span><span class="p">:</span><span class="w"> </span><span class="mi">1544578144944</span><span class="p">,</span><span class="w">
</span><span class="nl">"lastMinorCompactionTime"</span><span class="w"> </span><span class="p">:</span><span class="w"> </span><span class="mi">1544578144944</span><span class="p">,</span><span class="w">
</span><span class="nl">"majorCompactionCounter"</span><span class="w"> </span><span class="p">:</span><span class="w"> </span><span class="mi">1</span><span class="p">,</span><span class="w">
</span><span class="nl">"minorCompactionCounter"</span><span class="w"> </span><span class="p">:</span><span class="w"> </span><span class="mi">0</span><span class="w">
</span><span class="p">}</span><span class="w"> </span><span class="p">]</span><span class="w">
</span></code></pre></div> </div>
</li>
</ul>
</li>
</ol>
<h3 id="endpoint-apiv1bookiestate">Endpoint: /api/v1/bookie/state</h3>
<ol>
<li>Method: GET
<ul>
<li>Description: Exposes the current state of bookie</li>
<li>
<p>Response:</p>
<table>
<thead>
<tr>
<th style="text-align: left">Code</th>
<th style="text-align: left">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align: left">200</td>
<td style="text-align: left">Successful operation</td>
</tr>
<tr>
<td style="text-align: left">403</td>
<td style="text-align: left">Permission denied</td>
</tr>
<tr>
<td style="text-align: left">404</td>
<td style="text-align: left">Not found</td>
</tr>
</tbody>
</table>
</li>
<li>Body:
<div class="language-json highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="w"> </span><span class="p">{</span><span class="w">
</span><span class="nl">"running"</span><span class="w"> </span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="p">,</span><span class="w">
</span><span class="nl">"readOnly"</span><span class="w"> </span><span class="p">:</span><span class="w"> </span><span class="kc">false</span><span class="p">,</span><span class="w">
</span><span class="nl">"shuttingDown"</span><span class="w"> </span><span class="p">:</span><span class="w"> </span><span class="kc">false</span><span class="p">,</span><span class="w">
</span><span class="nl">"availableForHighPriorityWrites"</span><span class="w"> </span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="w">
</span><span class="p">}</span><span class="w">
</span></code></pre></div> </div>
</li>
</ul>
</li>
</ol>
<h3 id="endpoint-apiv1bookieis_ready">Endpoint: /api/v1/bookie/is_ready</h3>
<ol>
<li>Method: GET
<ul>
<li>Description: Return true if the bookie is ready</li>
<li>
<p>Response:</p>
<table>
<thead>
<tr>
<th style="text-align: left">Code</th>
<th style="text-align: left">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align: left">200</td>
<td style="text-align: left">Successful operation</td>
</tr>
<tr>
<td style="text-align: left">403</td>
<td style="text-align: left">Permission denied</td>
</tr>
<tr>
<td style="text-align: left">404</td>
<td style="text-align: left">Not found</td>
</tr>
<tr>
<td style="text-align: left">503</td>
<td style="text-align: left">Bookie is not ready</td>
</tr>
</tbody>
</table>
</li>
<li>Body: <empty></empty></li>
</ul>
</li>
</ol>
<h2 id="auto-recovery">Auto recovery</h2>
<h3 id="endpoint-apiv1autorecoverybookie">Endpoint: /api/v1/autorecovery/bookie/</h3>
<ol>
<li>Method: PUT
<ul>
<li>Description: Ledger data recovery for failed bookie</li>
<li>Body:
<div class="language-json highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="w"> </span><span class="p">{</span><span class="w">
</span><span class="nl">"bookie_src"</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="w"> </span><span class="s2">"bookie_src1"</span><span class="p">,</span><span class="w"> </span><span class="s2">"bookie_src2"</span><span class="err">...</span><span class="w"> </span><span class="p">],</span><span class="w">
</span><span class="nl">"bookie_dest"</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="w"> </span><span class="s2">"bookie_dest1"</span><span class="p">,</span><span class="w"> </span><span class="s2">"bookie_dest2"</span><span class="err">...</span><span class="w"> </span><span class="p">],</span><span class="w">
</span><span class="nl">"delete_cookie"</span><span class="p">:</span><span class="w"> </span><span class="err">&lt;bool_value&gt;</span><span class="w">
</span><span class="p">}</span><span class="w">
</span></code></pre></div> </div>
</li>
<li>
<p>Parameters:</p>
<table>
<thead>
<tr>
<th style="text-align: left">Name</th>
<th style="text-align: left">Type</th>
<th style="text-align: left">Required</th>
<th style="text-align: left">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align: left">bookie_src</td>
<td style="text-align: left">Strings</td>
<td style="text-align: left">Yes</td>
<td style="text-align: left">bookie source to recovery</td>
</tr>
<tr>
<td style="text-align: left">bookie_dest</td>
<td style="text-align: left">Strings</td>
<td style="text-align: left">No</td>
<td style="text-align: left">bookie data recovery destination</td>
</tr>
<tr>
<td style="text-align: left">delete_cookie</td>
<td style="text-align: left">Boolean</td>
<td style="text-align: left">No</td>
<td style="text-align: left">Whether delete cookie</td>
</tr>
</tbody>
</table>
</li>
<li>
<p>Response:</p>
<table>
<thead>
<tr>
<th style="text-align: left">Code</th>
<th style="text-align: left">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align: left">200</td>
<td style="text-align: left">Successful operation</td>
</tr>
<tr>
<td style="text-align: left">403</td>
<td style="text-align: left">Permission denied</td>
</tr>
<tr>
<td style="text-align: left">404</td>
<td style="text-align: left">Not found</td>
</tr>
</tbody>
</table>
</li>
</ul>
</li>
</ol>
<h3 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;</h3>
<ol>
<li>Method: GET
<ul>
<li>Description: Get all under replicated ledgers.</li>
<li>
<p>Parameters:</p>
<table>
<thead>
<tr>
<th style="text-align: left">Name</th>
<th style="text-align: left">Type</th>
<th style="text-align: left">Required</th>
<th style="text-align: left">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align: left">missingreplica</td>
<td style="text-align: left">String</td>
<td style="text-align: left">No</td>
<td style="text-align: left">missing replica bookieId</td>
</tr>
<tr>
<td style="text-align: left">excludingmissingreplica</td>
<td style="text-align: left">String</td>
<td style="text-align: left">No</td>
<td style="text-align: left">exclude missing replica bookieId</td>
</tr>
</tbody>
</table>
</li>
<li>
<p>Response:</p>
<table>
<thead>
<tr>
<th style="text-align: left">Code</th>
<th style="text-align: left">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align: left">200</td>
<td style="text-align: left">Successful operation</td>
</tr>
<tr>
<td style="text-align: left">403</td>
<td style="text-align: left">Permission denied</td>
</tr>
<tr>
<td style="text-align: left">404</td>
<td style="text-align: left">Not found</td>
</tr>
</tbody>
</table>
</li>
<li>
<p>Response Body format:</p>
<div class="language-json highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="w"> </span><span class="p">{</span><span class="w">
</span><span class="p">[</span><span class="err">ledgerId</span><span class="mi">1</span><span class="p">,</span><span class="w"> </span><span class="err">ledgerId</span><span class="mi">2</span><span class="err">...</span><span class="p">]</span><span class="w">
</span><span class="p">}</span><span class="w">
</span></code></pre></div> </div>
</li>
</ul>
</li>
</ol>
<h3 id="endpoint-apiv1autorecoverywho_is_auditor">Endpoint: /api/v1/autorecovery/who_is_auditor</h3>
<ol>
<li>Method: GET
<ul>
<li>Description: Get auditor bookie id.</li>
<li>
<p>Response:</p>
<table>
<thead>
<tr>
<th style="text-align: left">Code</th>
<th style="text-align: left">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align: left">200</td>
<td style="text-align: left">Successful operation</td>
</tr>
<tr>
<td style="text-align: left">403</td>
<td style="text-align: left">Permission denied</td>
</tr>
<tr>
<td style="text-align: left">404</td>
<td style="text-align: left">Not found</td>
</tr>
</tbody>
</table>
</li>
<li>
<p>Response Body format:</p>
<div class="language-json highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="w"> </span><span class="p">{</span><span class="w">
</span><span class="nl">"Auditor"</span><span class="p">:</span><span class="w"> </span><span class="s2">"hostname/hostAddress:Port"</span><span class="w">
</span><span class="p">}</span><span class="w">
</span></code></pre></div> </div>
</li>
</ul>
</li>
</ol>
<h3 id="endpoint-apiv1autorecoverytrigger_audit">Endpoint: /api/v1/autorecovery/trigger_audit</h3>
<ol>
<li>Method: PUT
<ul>
<li>Description: Force trigger audit by resting the lostBookieRecoveryDelay.</li>
<li>
<p>Response:</p>
<table>
<thead>
<tr>
<th style="text-align: left">Code</th>
<th style="text-align: left">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align: left">200</td>
<td style="text-align: left">Successful operation</td>
</tr>
<tr>
<td style="text-align: left">403</td>
<td style="text-align: left">Permission denied</td>
</tr>
<tr>
<td style="text-align: left">404</td>
<td style="text-align: left">Not found</td>
</tr>
</tbody>
</table>
</li>
</ul>
</li>
</ol>
<h3 id="endpoint-apiv1autorecoverylost_bookie_recovery_delay">Endpoint: /api/v1/autorecovery/lost_bookie_recovery_delay</h3>
<ol>
<li>Method: GET
<ul>
<li>Description: Get lostBookieRecoveryDelay value in seconds.</li>
<li>
<p>Response:</p>
<table>
<thead>
<tr>
<th style="text-align: left">Code</th>
<th style="text-align: left">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align: left">200</td>
<td style="text-align: left">Successful operation</td>
</tr>
<tr>
<td style="text-align: left">403</td>
<td style="text-align: left">Permission denied</td>
</tr>
<tr>
<td style="text-align: left">404</td>
<td style="text-align: left">Not found</td>
</tr>
</tbody>
</table>
</li>
</ul>
</li>
<li>Method: PUT
<ul>
<li>Description: Set lostBookieRecoveryDelay value in seconds.</li>
<li>Body:
<div class="language-json highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="w"> </span><span class="p">{</span><span class="w">
</span><span class="nl">"delay_seconds"</span><span class="p">:</span><span class="w"> </span><span class="err">&lt;delay_seconds&gt;</span><span class="w">
</span><span class="p">}</span><span class="w">
</span></code></pre></div> </div>
</li>
<li>
<p>Parameters:</p>
<table>
<thead>
<tr>
<th style="text-align: left">Name</th>
<th style="text-align: left">Type</th>
<th style="text-align: left">Required</th>
<th style="text-align: left">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align: left">delay_seconds</td>
<td style="text-align: left">Long</td>
<td style="text-align: left">Yes</td>
<td style="text-align: left">set delay value in seconds.</td>
</tr>
</tbody>
</table>
</li>
<li>
<p>Response:</p>
<table>
<thead>
<tr>
<th style="text-align: left">Code</th>
<th style="text-align: left">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align: left">200</td>
<td style="text-align: left">Successful operation</td>
</tr>
<tr>
<td style="text-align: left">403</td>
<td style="text-align: left">Permission denied</td>
</tr>
<tr>
<td style="text-align: left">404</td>
<td style="text-align: left">Not found</td>
</tr>
</tbody>
</table>
</li>
</ul>
</li>
</ol>
<h3 id="endpoint-apiv1autorecoverydecommission">Endpoint: /api/v1/autorecovery/decommission</h3>
<ol>
<li>Method: PUT
<ul>
<li>Description: Decommission Bookie, Force trigger Audit task and make sure all the ledgers stored in the decommissioning bookie are replicated.</li>
<li>Body:
<div class="language-json highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="w"> </span><span class="p">{</span><span class="w">
</span><span class="nl">"bookie_src"</span><span class="p">:</span><span class="w"> </span><span class="err">&lt;bookie_src&gt;</span><span class="w">
</span><span class="p">}</span><span class="w">
</span></code></pre></div> </div>
</li>
<li>
<p>Parameters:</p>
<table>
<thead>
<tr>
<th style="text-align: left">Name</th>
<th style="text-align: left">Type</th>
<th style="text-align: left">Required</th>
<th style="text-align: left">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align: left">bookie_src</td>
<td style="text-align: left">String</td>
<td style="text-align: left">Yes</td>
<td style="text-align: left">Bookie src to decommission..</td>
</tr>
</tbody>
</table>
</li>
<li>
<p>Response:</p>
<table>
<thead>
<tr>
<th style="text-align: left">Code</th>
<th style="text-align: left">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align: left">200</td>
<td style="text-align: left">Successful operation</td>
</tr>
<tr>
<td style="text-align: left">403</td>
<td style="text-align: left">Permission denied</td>
</tr>
<tr>
<td style="text-align: left">404</td>
<td style="text-align: left">Not found</td>
</tr>
</tbody>
</table>
</li>
</ul>
</li>
</ol>
</section>
</div>
</div>
<div class="column is-2 is-hidden-mobile">
<div class="toc">
<h2 class="title">BookKeeper Admin REST API</h2>
<ul class="section-nav">
<li class="toc-entry toc-h2"><a href="#all-the-endpoints">All the endpoints</a></li>
<li class="toc-entry toc-h2"><a href="#heartbeat">Heartbeat</a>
<ul>
<li class="toc-entry toc-h3"><a href="#endpoint-heartbeat">Endpoint: /heartbeat</a></li>
</ul>
</li>
<li class="toc-entry toc-h2"><a href="#config">Config</a>
<ul>
<li class="toc-entry toc-h3"><a href="#endpoint-apiv1configserver_config">Endpoint: /api/v1/config/server_config</a></li>
</ul>
</li>
<li class="toc-entry toc-h2"><a href="#config-1">Config</a>
<ul>
<li class="toc-entry toc-h3"><a href="#endpoint-metrics">Endpoint: /metrics</a></li>
</ul>
</li>
<li class="toc-entry toc-h2"><a href="#ledger">Ledger</a>
<ul>
<li class="toc-entry toc-h3"><a href="#endpoint-apiv1ledgerdeleteledger_idledger_id">Endpoint: /api/v1/ledger/delete/?ledger_id=&lt;ledger_id&gt;</a></li>
<li class="toc-entry toc-h3"><a href="#endpoint-apiv1ledgerlistprint_metadatametadata">Endpoint: /api/v1/ledger/list/?print_metadata=&lt;metadata&gt;</a></li>
<li class="toc-entry toc-h3"><a href="#endpoint-apiv1ledgermetadataledger_idledger_id">Endpoint: /api/v1/ledger/metadata/?ledger_id=&lt;ledger_id&gt;</a></li>
<li class="toc-entry toc-h3"><a href="#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></li>
</ul>
</li>
<li class="toc-entry toc-h2"><a href="#bookie">Bookie</a>
<ul>
<li class="toc-entry toc-h3"><a href="#endpoint-apiv1bookieinfo">Endpoint: /api/v1/bookie/info</a></li>
<li class="toc-entry toc-h3"><a href="#endpoint-apiv1bookielist_bookiestypetypeprint_hostnameshostnames">Endpoint: /api/v1/bookie/list_bookies/?type=&lt;type&gt;&amp;print_hostnames=&lt;hostnames&gt;</a></li>
<li class="toc-entry toc-h3"><a href="#endpoint-apiv1bookielist_bookie_info">Endpoint: /api/v1/bookie/list_bookie_info</a></li>
<li class="toc-entry toc-h3"><a href="#endpoint-apiv1bookielast_log_mark">Endpoint: /api/v1/bookie/last_log_mark</a></li>
<li class="toc-entry toc-h3"><a href="#endpoint-apiv1bookielist_disk_filefile_typetype">Endpoint: /api/v1/bookie/list_disk_file/?file_type=&lt;type&gt;</a></li>
<li class="toc-entry toc-h3"><a href="#endpoint-apiv1bookieexpand_storage">Endpoint: /api/v1/bookie/expand_storage</a></li>
<li class="toc-entry toc-h3"><a href="#endpoint-apiv1bookiegc">Endpoint: /api/v1/bookie/gc</a></li>
<li class="toc-entry toc-h3"><a href="#endpoint-apiv1bookiegc_details">Endpoint: /api/v1/bookie/gc_details</a></li>
<li class="toc-entry toc-h3"><a href="#endpoint-apiv1bookiestate">Endpoint: /api/v1/bookie/state</a></li>
<li class="toc-entry toc-h3"><a href="#endpoint-apiv1bookieis_ready">Endpoint: /api/v1/bookie/is_ready</a></li>
</ul>
</li>
<li class="toc-entry toc-h2"><a href="#auto-recovery">Auto recovery</a>
<ul>
<li class="toc-entry toc-h3"><a href="#endpoint-apiv1autorecoverybookie">Endpoint: /api/v1/autorecovery/bookie/</a></li>
<li class="toc-entry toc-h3"><a href="#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></li>
<li class="toc-entry toc-h3"><a href="#endpoint-apiv1autorecoverywho_is_auditor">Endpoint: /api/v1/autorecovery/who_is_auditor</a></li>
<li class="toc-entry toc-h3"><a href="#endpoint-apiv1autorecoverytrigger_audit">Endpoint: /api/v1/autorecovery/trigger_audit</a></li>
<li class="toc-entry toc-h3"><a href="#endpoint-apiv1autorecoverylost_bookie_recovery_delay">Endpoint: /api/v1/autorecovery/lost_bookie_recovery_delay</a></li>
<li class="toc-entry toc-h3"><a href="#endpoint-apiv1autorecoverydecommission">Endpoint: /api/v1/autorecovery/decommission</a></li>
</ul>
</li>
</ul>
</div>
</div>
</div>
</div>
<div id="entry-popover-html" class="popover-template">
<p>An entry is a sequence of bytes (plus some metadata) written to a BookKeeper ledger. Entries are also known as records.</p>
</div>
<div id="ledger-popover-html" class="popover-template">
<p>A ledger is a sequence of entries written to BookKeeper. Entries are written sequentially to ledgers and at most once, giving ledgers append-only semantics.</p>
</div>
<div id="bookie-popover-html" class="popover-template">
<p>A bookie is an individual BookKeeper storage server.</p>
<p>Bookies store the content of ledgers and act as a distributed ensemble.</p>
</div>
<div id="rereplication-popover-html" class="popover-template">
<p>A subsystem that runs in the background on bookies to ensure that ledgers are fully replicated even if one bookie from the ensemble is down.</p>
</div>
<div id="striping-popover-html" class="popover-template">
<p>Striping is the process of distributing BookKeeper ledgers to sub-groups of bookies rather than to all bookies in a BookKeeper ensemble.</p>
<p>Striping is essential to ensuring fast performance.</p>
</div>
<div id="striped-popover-html" class="popover-template">
<p>Striping is the process of distributing BookKeeper ledgers to sub-groups of bookies rather than to all bookies in a BookKeeper ensemble.</p>
<p>Striping is essential to ensuring fast performance.</p>
</div>
<div id="journal-popover-html" class="popover-template">
<p>A journal file stores BookKeeper transaction logs.</p>
</div>
<div id="fencing-popover-html" class="popover-template">
<p>When a reader forces a ledger to close, preventing any further entries from being written to the ledger.</p>
</div>
<div id="record-popover-html" class="popover-template">
<p>A record is a sequence of bytes (plus some metadata) written to a BookKeeper ledger. Records are also known as entries.</p>
</div>
<script type="text/javascript">
tippy('#entry-popover', {
html: '#entry-popover-html',
arrow: true,
animation: 'fade'
});
tippy('#ledger-popover', {
html: '#ledger-popover-html',
arrow: true,
animation: 'fade'
});
tippy('#bookie-popover', {
html: '#bookie-popover-html',
arrow: true,
animation: 'fade'
});
tippy('#rereplication-popover', {
html: '#rereplication-popover-html',
arrow: true,
animation: 'fade'
});
tippy('#striping-popover', {
html: '#striping-popover-html',
arrow: true,
animation: 'fade'
});
tippy('#striped-popover', {
html: '#striped-popover-html',
arrow: true,
animation: 'fade'
});
tippy('#journal-popover', {
html: '#journal-popover-html',
arrow: true,
animation: 'fade'
});
tippy('#fencing-popover', {
html: '#fencing-popover-html',
arrow: true,
animation: 'fade'
});
tippy('#record-popover', {
html: '#record-popover-html',
arrow: true,
animation: 'fade'
});
</script>
</main>
<footer class="footer">
<div class="container">
<div class="content has-text-centered">
<p>
Copyright &copy; 2016 - 2021 <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>.
</p>
<p>
Apache BookKeeper, BookKeeper®, Apache®, the Apache feature logo, and the Apache BookKeeper logo are either registered trademarks or trademarks of The Apache Software Foundation.
</p>
</div>
</div>
</footer>
</body>
<script src="/js/app.js"></script>
<!--
Licensed to the Apache Software Foundation (ASF) under one
or more contributor license agreements. See the NOTICE file
distributed with this work for additional information
regarding copyright ownership. The ASF licenses this file
to you under the Apache License, Version 2.0 (the
"License"); you may not use this file except in compliance
with the License. You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing,
software distributed under the License is distributed on an
"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
KIND, either express or implied. See the License for the
specific language governing permissions and limitations
under the License.
-->
<script>
(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
})(window,document,'script','https://www.google-analytics.com/analytics.js','ga');
ga('create', 'UA-104419626-1', 'auto');
ga('send', 'pageview');
</script>
</html>