This is an automated email from the ASF dual-hosted git repository. git-site-role pushed a commit to branch asf-site in repository https://gitbox.apache.org/repos/asf/bookkeeper.git
The following commit(s) were added to refs/heads/asf-site by this push: new b7495f6 Updated site at revision 011bb65 b7495f6 is described below commit b7495f69355d8762eaa851912b6abfb21f8930fc Author: jenkins <bui...@apache.org> AuthorDate: Tue Feb 6 06:26:12 2018 +0000 Updated site at revision 011bb65 --- .../bps/BP-29-metadata-store-api-module/index.html | 362 +++++++++++++++++++++ content/community/bookkeeper_proposals/index.html | 6 +- 2 files changed, 367 insertions(+), 1 deletion(-) diff --git a/content/bps/BP-29-metadata-store-api-module/index.html b/content/bps/BP-29-metadata-store-api-module/index.html new file mode 100644 index 0000000..87759cc --- /dev/null +++ b/content/bps/BP-29-metadata-store-api-module/index.html @@ -0,0 +1,362 @@ +<!DOCTYPE html> +<html> + <head> + <title>Apache BookKeeper™ - BP-29: Metadata API module</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™ + </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.7.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.6.1/overview/overview"> + Release 4.6.1 + + </a> + + <a class="navbar-item" href="/docs/4.6.0/overview/overview"> + Release 4.6.0 + + </a> + + <a class="navbar-item" href="/docs/4.5.1/overview/overview"> + Release 4.5.1 + + </a> + + <a class="navbar-item" href="/docs/4.5.0/overview/overview"> + Release 4.5.0 + <span class="tag is-success">Stable</span> + </a> + + + <a class="navbar-item" href="/archives/docs/r4.4.0"> + Release 4.4.0 + + </a> + + <a class="navbar-item" href="/archives/docs/r4.3.2"> + Release 4.3.2 + + </a> + + <a class="navbar-item" href="/archives/docs/r4.3.1"> + Release 4.3.1 + + </a> + + <a class="navbar-item" href="/archives/docs/r4.3.0"> + Release 4.3.0 + + </a> + + <a class="navbar-item" href="/archives/docs/r4.2.4"> + Release 4.2.4 + + </a> + + <a class="navbar-item" href="/archives/docs/r4.2.3"> + Release 4.2.3 + + </a> + + <a class="navbar-item" href="/archives/docs/r4.2.2"> + Release 4.2.2 + + </a> + + <a class="navbar-item" href="/archives/docs/r4.2.1"> + Release 4.2.1 + + </a> + + <a class="navbar-item" href="/archives/docs/r4.2.0"> + Release 4.2.0 + + </a> + + <a class="navbar-item" href="/archives/docs/r4.1.0"> + Release 4.1.0 + + </a> + + <a class="navbar-item" href="/archives/docs/r4.0.0"> + Release 4.0.0 + + </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-community-container"> + <div class="columns"> + <div class="column is-12"> + <header class="docs-title"> + <nav class="level"> + <div class="level-left"> + <div class="level-item"> + <h1 class="title">BP-29: Metadata API module</h1> + </div> + </div> + + </nav> + + + </header> + + <hr /> + + <div class="content is-medium"> + <section class="bk-community-content"> + <h3 id="motivation">Motivation</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 +implementation.</li> +</ul> + +<h3 id="public-interfaces">Public Interfaces</h3> + +<p>A more generic setting <code class="highlighter-rouge">metadataServiceUri</code> is introduced for replacing implementation specific settings <code class="highlighter-rouge">zkServers</code> and <code class="highlighter-rouge">zkLedgersRootPath</code>.</p> + +<p>A metadata service uri defines the location of a metadata storage. In zookeeper based implementation, the metadata service url will be +<code class="highlighter-rouge">zk://<zkServers>/<zkLedgersRootPath></code>.</p> + +<p>This new setting in bookie configuration will be like as below:</p> + +<div class="highlighter-rouge"><div class="highlight"><pre class="highlight"><code>metadataServiceUri=zk://127.0.0.1/ledgers +</code></pre></div></div> + +<p>If we eventually support Etcd as one of the metadata storages. Then the setting in bookie configuration to use Etcd will be:</p> + +<div class="highlighter-rouge"><div class="highlight"><pre class="highlight"><code>metadataServiceUri=etcd://<etcd_servers>/<etcd_key_prefix> +</code></pre></div></div> + +<h3 id="proposed-changes">Proposed Changes</h3> + +<h4 id="configuration">Configuration</h4> + +<p>This BP proposes introducing a more generic metadata setting <code class="highlighter-rouge">metadataServiceUri</code> to replace implementation specific settings +<code class="highlighter-rouge">zkServers</code> and <code class="highlighter-rouge">zkLedgersRootPath</code>. All implementation specific settings should be considered moving to implementation itself.</p> + +<p>The <code class="highlighter-rouge">metadataServiceUri</code> can also be used for replacing the need of configuring <code class="highlighter-rouge">ledgerManagerFactoryClass</code>, <code class="highlighter-rouge">registrationClientClass</code> and +<code class="highlighter-rouge">registrationManagerClass</code>. It is unnecessarily complicated to configure multiple settings to load a specific metadata implementation. +We can just use the <code class="highlighter-rouge">scheme</code> field in <code class="highlighter-rouge">metadataServiceUri</code> to resolve which metadata implementation to use. Using uri to resolve +different driver or implementation is commonly seen at java world, for example, jdbc to support different database drivers. Also, distributedlog +uses this pattern to load different metadata driver.</p> + +<p>So in zookeeper based metadata implementation, the metadata service uri can be:</p> + +<ul> + <li><code class="highlighter-rouge">zk+flat://127.0.0.1/ledgers</code>: the scheme is “zk+flat”. it means a zookeeper base metadata implementation and it uses flat ledger manager.</li> + <li><code class="highlighter-rouge">zk+hierarchical://127.0.0.1/ledgers</code>: the scheme is “zk+hierarchical”. it means a zookeeper base metadata implementation and it +uses hierarchical ledger manager.</li> + <li><code class="highlighter-rouge">zk+longhierarchical://127.0.0.1/ledgers</code>: the scheme is “zk+longhierarchical”. it means a zookeeper base metadata implementation and it +uses long hierarchical ledger manager.</li> +</ul> + +<h4 id="metadata-stores">Metadata Stores</h4> + +<p>Introduce a new directory called <code class="highlighter-rouge">metadata-stores</code> for storing all the metadata related modules. Under this directory, it will have following modules:</p> + +<ul> + <li><code class="highlighter-rouge">api</code>: it is the metadata api module <code class="highlighter-rouge">metadata-store-api</code>. It contains all the files defining the metadata interfaces.</li> + <li><code class="highlighter-rouge">zookeeper</code>: it is the zookeeper implementation module <code class="highlighter-rouge">metadata-store-zookeeper</code>. It contains all the files that implementing the metadata interfaces +using zookeeper.</li> +</ul> + +<p>If a new metadata implementation is added, a new directory will be created under <code class="highlighter-rouge">metadata-stores</code> to contain the implementation. For example, if we +are adding <code class="highlighter-rouge">Etcd</code> as the metadata store. A <code class="highlighter-rouge">Etcd</code> directory will be created under <code class="highlighter-rouge">metadata-stores/etcd</code> to store the files that implement metadata +interfaces using etcd client. And its module is named as <code class="highlighter-rouge">metadata-store-etcd</code>.</p> + +<p>We then change bookkeeper-server to depend on <code class="highlighter-rouge">metadata-store-api</code> only.</p> + +<p>This approach is same as other pluggable modules <code class="highlighter-rouge">stats-api</code> and <code class="highlighter-rouge">http-server</code>.</p> + +<h3 id="compatibility-deprecation-and-migration-plan">Compatibility, Deprecation, and Migration Plan</h3> + +<p>No compatibility concern at this moment. New setting is introduced and old settings will still continue to work. +No immediate deprecation. +No migration is needed.</p> + +<h3 id="test-plan">Test Plan</h3> + +<p>This proposal is mostly around refactor. So existing test cases would cover this.</p> + +<h3 id="rejected-alternatives">Rejected Alternatives</h3> + +<p>N/A</p> + + </section> + + + </div> + </div> + </div> +</div> + </main> + + <footer class="footer"> + <div class="container"> + <div class="content has-text-centered"> + <p> + Copyright © 2016 - 2018 <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> + </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> diff --git a/content/community/bookkeeper_proposals/index.html b/content/community/bookkeeper_proposals/index.html index 800d4f3..f793a7f 100644 --- a/content/community/bookkeeper_proposals/index.html +++ b/content/community/bookkeeper_proposals/index.html @@ -346,7 +346,7 @@ of the thread is of the format <code class="highlighter-rouge">[DISCUSS] BP-< <p>This section lists all the <em>bookkeeper proposals</em> made to BookKeeper.</p> -<p><em>Next Proposal Number: 28</em></p> +<p><em>Next Proposal Number: 30</em></p> <h3 id="inprogress">Inprogress</h3> @@ -390,6 +390,10 @@ of the thread is of the format <code class="highlighter-rouge">[DISCUSS] BP-< <td style="text-align: left"><a href="../../bps/BP-27-new-bookkeeper-cli">BP-27: New BookKeeper CLI</a></td> <td style="text-align: left">Draft</td> </tr> + <tr> + <td style="text-align: left"><a href="../../bps/BP-29-metadata-store-api-module">BP-29: Metadata API module</a></td> + <td style="text-align: left">Draft</td> + </tr> </tbody> </table> -- To stop receiving notification emails like this one, please contact git-site-r...@apache.org.