You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@bookkeeper.apache.org by gi...@apache.org on 2018/02/06 06:26:14 UTC

[bookkeeper] branch asf-site updated: Updated site at revision 011bb65

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 <bu...@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&trade; - 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&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.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://&lt;zkServers&gt;/&lt;zkLedgersRootPath&gt;</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://&lt;etcd_servers&gt;/&lt;etcd_key_prefix&gt;
+</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 &copy; 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-&lt;
 
 <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-&lt;
       <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-role@apache.org.