http://git-wip-us.apache.org/repos/asf/zookeeper/blob/cf24deb2/zookeeper-docs/src/documentation/content/xdocs/bookkeeperConfig.xml ---------------------------------------------------------------------- diff --git a/zookeeper-docs/src/documentation/content/xdocs/bookkeeperConfig.xml b/zookeeper-docs/src/documentation/content/xdocs/bookkeeperConfig.xml deleted file mode 100644 index 7a80949..0000000 --- a/zookeeper-docs/src/documentation/content/xdocs/bookkeeperConfig.xml +++ /dev/null @@ -1,156 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- - Copyright 2002-2004 The Apache Software Foundation - - Licensed 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. ---> -<!DOCTYPE article PUBLIC "-//OASIS//DTD Simplified DocBook XML V1.0//EN" -"http://www.oasis-open.org/docbook/xml/simple/1.0/sdocbook.dtd"> -<article id="bk_Admin"> - <title>BookKeeper Administrator's Guide</title> - - <subtitle>Setup Guide</subtitle> - - <articleinfo> - <legalnotice> - <para>Licensed 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 <ulink - url="http://www.apache.org/licenses/LICENSE-2.0">http://www.apache.org/licenses/LICENSE-2.0</ulink>. - </para> - - <para>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. - </para> - </legalnotice> - - <abstract> - <para>This document contains information about deploying, administering - and mantaining BookKeeper. It also discusses best practices and common - problems. - </para> - <para> As BookKeeper is still a prototype, this article is likely to change - significantly over time. - </para> - </abstract> - </articleinfo> - - <section id="bk_deployment"> - <title>Deployment</title> - - <para>This section contains information about deploying BookKeeper and - covers these topics:</para> - - <itemizedlist> - <listitem> - <para><xref linkend="bk_sysReq" /></para> - </listitem> - - <listitem> - <para><xref linkend="bk_runningBookies" /></para> - </listitem> - - <listitem> - <para><xref linkend="bk_zkMetadata" /></para> - </listitem> - </itemizedlist> - - <para> The first section tells you how many machines you need. The second explains how to bootstrap bookies - (BookKeeper storage servers). The third section explains how we use ZooKeeper and our requirements with - respect to ZooKeeper. - </para> - - <section id="bk_sysReq"> - <title>System requirements</title> - <para> A typical BookKeeper installation comprises a set of bookies and a set of ZooKeeper replicas. The exact number of bookies - depends on the quorum mode, desired throughput, and number of clients using this installation simultaneously. The minimum number of - bookies is three for self-verifying (stores a message authentication code along with each entry) and four for generic (does not - store a message authentication codewith each entry), and there is no upper limit on the number of bookies. Increasing the number of - bookies, in fact, enables higher throughput. - </para> - - <para> For performance, we require each server to have at least two disks. It is possible to run a bookie with a single disk, but - performance will be significantly lower in this case. Of course, it works with one disk, but performance is significantly lower. - </para> - - <para> For ZooKeeper, there is no constraint with respect to the number of replicas. Having a single machine running ZooKeeper - in standalone mode is sufficient for BookKeeper. For resilience purposes, it might be a good idea to run ZooKeeper in quorum - mode with multiple servers. Please refer to the ZooKeeper documentation for detail on how to configure ZooKeeper with multiple - replicas - </para> - </section> - - <section id="bk_runningBookies"> - <title>Running bookies</title> - <para> - To run a bookie, we execute the following command: - </para> - - <para><computeroutput> - java -cp .:./zookeeper-<version>-bookkeeper.jar:./zookeeper-<version>.jar\ - :../log4j/apache-log4j-1.2.15/log4j-1.2.15.jar -Dlog4j.configuration=log4j.properties\ - org.apache.bookkeeper.proto.BookieServer 3181 127.0.0.1:2181 /path_to_log_device/\ - /path_to_ledger_device/ - </computeroutput></para> - - <para> - The parameters are: - </para> - - <itemizedlist> - <listitem> - <para> - Port number that the bookie listens on; - </para> - </listitem> - - <listitem> - <para> - Comma separated list of ZooKeeper servers with a hostname:port format; - </para> - </listitem> - - <listitem> - <para> - Path for Log Device (stores bookie write-ahead log); - </para> - </listitem> - - <listitem> - <para> - Path for Ledger Device (stores ledger entries); - </para> - </listitem> - </itemizedlist> - - <para> - Ideally, <computeroutput>/path_to_log_device/ </computeroutput> and <computeroutput>/path_to_ledger_device/ </computeroutput> are each - in a different device. - </para> - </section> - - <section id="bk_zkMetadata"> - <title>ZooKeeper Metadata</title> - <para> - For BookKeeper, we require a ZooKeeper installation to store metadata, and to pass the list - of ZooKeeper servers as parameter to the constructor of the BookKeeper class (<computeroutput> - org.apache.bookkeeper.client,BookKeeper</computeroutput>). - To setup ZooKeeper, please check the <ulink url="index.html"> - ZooKeeper documentation</ulink>. - </para> - </section> - </section> -</article>
http://git-wip-us.apache.org/repos/asf/zookeeper/blob/cf24deb2/zookeeper-docs/src/documentation/content/xdocs/bookkeeperOverview.xml ---------------------------------------------------------------------- diff --git a/zookeeper-docs/src/documentation/content/xdocs/bookkeeperOverview.xml b/zookeeper-docs/src/documentation/content/xdocs/bookkeeperOverview.xml deleted file mode 100644 index cdc1878..0000000 --- a/zookeeper-docs/src/documentation/content/xdocs/bookkeeperOverview.xml +++ /dev/null @@ -1,419 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- - Copyright 2002-2004 The Apache Software Foundation - - Licensed 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. ---> - -<!DOCTYPE article PUBLIC "-//OASIS//DTD Simplified DocBook XML V1.0//EN" -"http://www.oasis-open.org/docbook/xml/simple/1.0/sdocbook.dtd"> -<article id="bk_GettStartedGuide"> - <title>BookKeeper overview</title> - - <articleinfo> - <legalnotice> - <para>Licensed 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 <ulink - url="http://www.apache.org/licenses/LICENSE-2.0">http://www.apache.org/licenses/LICENSE-2.0</ulink>.</para> - - <para>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.</para> - </legalnotice> - - <abstract> - <para>This guide contains detailed information about using BookKeeper - for logging. It discusses the basic operations BookKeeper supports, - and how to create logs and perform basic read and write operations on these - logs.</para> - </abstract> - </articleinfo> - <section id="bk_Overview"> - <title>BookKeeper overview</title> - - <section id="bk_Intro"> - <title>BookKeeper introduction</title> - <para> - BookKeeper is a replicated service to reliably log streams of records. In BookKeeper, - servers are "bookies", log streams are "ledgers", and each unit of a log (aka record) is a - "ledger entry". BookKeeper is designed to be reliable; bookies, the servers that store - ledgers, can crash, corrupt data, discard data, but as long as there are enough bookies - behaving correctly the service as a whole behaves correctly. - </para> - - <para> - The initial motivation for BookKeeper comes from the namenode of HDFS. Namenodes have to - log operations in a reliable fashion so that recovery is possible in the case of crashes. - We have found the applications for BookKeeper extend far beyond HDFS, however. Essentially, - any application that requires an append storage can replace their implementations with - BookKeeper. BookKeeper has the advantage of scaling throughput with the number of servers. - </para> - - <para> - At a high level, a bookkeeper client receives entries from a client application and stores it to - sets of bookies, and there are a few advantages in having such a service: - </para> - - <itemizedlist> - <listitem> - <para> - We can use hardware that is optimized for such a service. We currently believe that such a - system has to be optimized only for disk I/O; - </para> - </listitem> - - <listitem> - <para> - We can have a pool of servers implementing such a log system, and shared among a number of servers; - </para> - </listitem> - - <listitem> - <para> - We can have a higher degree of replication with such a pool, which makes sense if the hardware necessary for it is cheaper compared to the one the application uses. - </para> - </listitem> - </itemizedlist> - - </section> - - <section id="bk_moreDetail"> - <title>In slightly more detail...</title> - - <para> BookKeeper implements highly available logs, and it has been designed with write-ahead logging in mind. Besides high availability - due to the replicated nature of the service, it provides high throughput due to striping. As we write entries in a subset of bookies of an - ensemble and rotate writes across available quorums, we are able to increase throughput with the number of servers for both reads and writes. - Scalability is a property that is possible to achieve in this case due to the use of quorums. Other replication techniques, such as - state-machine replication, do not enable such a property. - </para> - - <para> An application first creates a ledger before writing to bookies through a local BookKeeper client instance. - Upon creating a ledger, a BookKeeper client writes metadata about the ledger to ZooKeeper. Each ledger currently - has a single writer. This writer has to execute a close ledger operation before any other client can read from it. - If the writer of a ledger does not close a ledger properly because, for example, it has crashed before having the - opportunity of closing the ledger, then the next client that tries to open a ledger executes a procedure to recover - it. As closing a ledger consists essentially of writing the last entry written to a ledger to ZooKeeper, the recovery - procedure simply finds the last entry written correctly and writes it to ZooKeeper. - </para> - - <para> - Note that currently this recovery procedure is executed automatically upon trying to open a ledger and no explicit action is necessary. - Although two clients may try to recover a ledger concurrently, only one will succeed, the first one that is able to create the close znode - for the ledger. - </para> - </section> - - <section id="bk_basicComponents"> - <title>Bookkeeper elements and concepts</title> - <para> - BookKeeper uses four basic elements: - </para> - - <itemizedlist> - <listitem> - <para> - <emphasis role="bold">Ledger</emphasis>: A ledger is a sequence of entries, and each entry is a sequence of bytes. Entries are - written sequentially to a ledger and at most once. Consequently, ledgers have an append-only semantics; - </para> - </listitem> - - <listitem> - <para> - <emphasis role="bold">BookKeeper client</emphasis>: A client runs along with a BookKeeper application, and it enables applications - to execute operations on ledgers, such as creating a ledger and writing to it; - </para> - </listitem> - - <listitem> - <para> - <emphasis role="bold">Bookie</emphasis>: A bookie is a BookKeeper storage server. Bookies store the content of ledgers. For any given - ledger L, we call an <emphasis>ensemble</emphasis> the group of bookies storing the content of L. For performance, we store on - each bookie of an ensemble only a fragment of a ledger. That is, we stripe when writing entries to a ledger such that - each entry is written to sub-group of bookies of the ensemble. - </para> - </listitem> - - <listitem> - <para> - <emphasis role="bold">Metadata storage service</emphasis>: BookKeeper requires a metadata storage service to store information related - to ledgers and available bookies. We currently use ZooKeeper for such a task. - </para> - </listitem> - </itemizedlist> - </section> - - <section id="bk_initialDesign"> - <title>Bookkeeper initial design</title> - <para> - A set of bookies implements BookKeeper, and we use a quorum-based protocol to replicate data across the bookies. - There are basically two operations to an existing ledger: read and append. Here is the complete API list - (mode detail <ulink url="bookkeeperProgrammer.html"> - here</ulink>): - </para> - - <itemizedlist> - <listitem> - <para> - Create ledger: creates a new empty ledger; - </para> - </listitem> - - <listitem> - <para> - Open ledger: opens an existing ledger for reading; - </para> - </listitem> - - <listitem> - <para> - Add entry: adds a record to a ledger either synchronously or asynchronously; - </para> - </listitem> - - <listitem> - <para> - Read entries: reads a sequence of entries from a ledger either synchronously or asynchronously - </para> - </listitem> - </itemizedlist> - - <para> - There is only a single client that can write to a ledger. Once that ledger is closed or the client fails, - no more entries can be added. (We take advantage of this behavior to provide our strong guarantees.) - There will not be gaps in the ledger. Fingers get broken, people get roughed up or end up in prison when - books are manipulated, so there is no deleting or changing of entries. - </para> - - <figure> - <title>BookKeeper Overview</title> - - <mediaobject> - <imageobject> - <imagedata fileref="images/bk-overview.jpg" width="3in" depth="3in" contentwidth="3in" contentdepth="3in" scalefit="0"/> - </imageobject> - </mediaobject> - </figure> - - <para> - A simple use of BooKeeper is to implement a write-ahead transaction log. A server maintains an in-memory data structure - (with periodic snapshots for example) and logs changes to that structure before it applies the change. The application - server creates a ledger at startup and store the ledger id and password in a well known place (ZooKeeper maybe). When - it needs to make a change, the server adds an entry with the change information to a ledger and apply the change when - BookKeeper adds the entry successfully. The server can even use asyncAddEntry to queue up many changes for high change - throughput. BooKeeper meticulously logs the changes in order and call the completion functions in order. - </para> - - <para> - When the application server dies, a backup server will come online, get the last snapshot and then it will open the - ledger of the old server and read all the entries from the time the snapshot was taken. (Since it doesn't know the - last entry number it will use MAX_INTEGER). Once all the entries have been processed, it will close the ledger and - start a new one for its use. - </para> - - <para> - A client library takes care of communicating with bookies and managing entry numbers. An entry has the following fields: - </para> - - <table frame='all'><title>Entry fields</title> - <tgroup cols='3' align='left' colsep='1' rowsep='1'> - <colspec colname='Field'/> - <colspec colname='Type'/> - <colspec colname='Description'/> - <colspec colnum='5' colname='c5'/> - <thead> - <row> - <entry>Field</entry> - <entry>Type</entry> - <entry>Description</entry> - </row> - </thead> - <tfoot> - <row> - <entry>Ledger number</entry> - <entry>long</entry> - <entry>The id of the ledger of this entry</entry> - </row> - <row> - <entry>Entry number</entry> - <entry>long</entry> - <entry>The id of this entry</entry> - </row> - </tfoot> - <tbody> - <row> - <entry>last confirmed (<emphasis>LC</emphasis>)</entry> - <entry>long</entry> - <entry>id of the last recorded entry</entry> - </row> - <row> - <entry>data</entry> - <entry>byte[]</entry> - <entry>the entry data (supplied by application)</entry> - </row> - <row> - <entry>authentication code</entry> - <entry>byte[]</entry> - <entry>Message authentication code that includes all other fields of the entry</entry> - </row> - - </tbody> - </tgroup> - </table> - - <para> - The client library generates a ledger entry. None of the fields are modified by the bookies and only the first three - fields are interpreted by the bookies. - </para> - - <para> - To add to a ledger, the client generates the entry above using the ledger number. The entry number will be one more - than the last entry generated. The <emphasis>LC</emphasis> field contains the last entry that has been successfully recorded by BookKeeper. - If the client writes entries one at a time, <emphasis>LC</emphasis> is the last entry id. But, if the client is using asyncAddEntry, there - may be many entries in flight. An entry is considered recorded when both of the following conditions are met: - </para> - - <itemizedlist> - <listitem> - <para> - the entry has been accepted by a quorum of bookies - </para> - </listitem> - - <listitem> - <para> - all entries with a lower entry id have been accepted by a quorum of bookies - </para> - </listitem> - </itemizedlist> - - <para> - <emphasis>LC</emphasis> seems mysterious right now, but it is too early to explain how we use it; just smile and move on. - </para> - - <para> - Once all the other fields have been field in, the client generates an authentication code with all of the previous fields. - The entry is then sent to a quorum of bookies to be recorded. Any failures will result in the entry being sent to a new - quorum of bookies. - </para> - - <para> - To read, the client library initially contacts a bookie and starts requesting entries. If an entry is missing or - invalid (a bad MAC for example), the client will make a request to a different bookie. By using quorum writes, - as long as enough bookies are up we are guaranteed to eventually be able to read an entry. - </para> - - </section> - - <section id="bk_metadata"> - <title>Bookkeeper metadata management</title> - - <para> - There are some meta data that needs to be made available to BookKeeper clients: - </para> - - <itemizedlist> - <listitem> - <para> - The available bookies; - </para> - </listitem> - - <listitem> - <para> - The list of ledgers; - </para> - </listitem> - - <listitem> - <para> - The list of bookies that have been used for a given ledger; - </para> - </listitem> - - <listitem> - <para> - The last entry of a ledger; - </para> - </listitem> - </itemizedlist> - - <para> - We maintain this information in ZooKeeper. Bookies use ephemeral nodes to indicate their availability. Clients - use znodes to track ledger creation and deletion and also to know the end of the ledger and the bookies that - were used to store the ledger. Bookies also watch the ledger list so that they can cleanup ledgers that get deleted. - </para> - - </section> - - <section id="bk_closingOut"> - <title>Closing out ledgers</title> - - <para> - The process of closing out the ledger and finding the last ledger is difficult due to the durability guarantees of BookKeeper: - </para> - - <itemizedlist> - <listitem> - <para> - If an entry has been successfully recorded, it must be readable. - </para> - </listitem> - - <listitem> - <para> - If an entry is read once, it must always be available to be read. - </para> - </listitem> - </itemizedlist> - - <para> - If the ledger was closed gracefully, ZooKeeper will have the last entry and everything will work well. But, if the - BookKeeper client that was writing the ledger dies, there is some recovery that needs to take place. - </para> - - <para> - The problematic entries are the ones at the end of the ledger. There can be entries in flight when a BookKeeper client - dies. If the entry only gets to one bookie, the entry should not be readable since the entry will disappear if that bookie - fails. If the entry is only on one bookie, that doesn't mean that the entry has not been recorded successfully; the other - bookies that recorded the entry might have failed. - </para> - - <para> - The trick to making everything work is to have a correct idea of a last entry. We do it in roughly three steps: - </para> - <orderedlist> - <listitem> - <para> - Find the entry with the highest last recorded entry, <emphasis>LC</emphasis>; - </para> - </listitem> - - <listitem> - <para> - Find the highest consecutively recorded entry, <emphasis>LR</emphasis>; - </para> - </listitem> - - <listitem> - <para> - Make sure that all entries between <emphasis>LC</emphasis> and <emphasis>LR</emphasis> are on a quorum of bookies; - </para> - </listitem> - - </orderedlist> - </section> - </section> -</article> \ No newline at end of file http://git-wip-us.apache.org/repos/asf/zookeeper/blob/cf24deb2/zookeeper-docs/src/documentation/content/xdocs/bookkeeperProgrammer.xml ---------------------------------------------------------------------- diff --git a/zookeeper-docs/src/documentation/content/xdocs/bookkeeperProgrammer.xml b/zookeeper-docs/src/documentation/content/xdocs/bookkeeperProgrammer.xml deleted file mode 100644 index 5f330e1..0000000 --- a/zookeeper-docs/src/documentation/content/xdocs/bookkeeperProgrammer.xml +++ /dev/null @@ -1,678 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- - Copyright 2002-2004 The Apache Software Foundation - - Licensed 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. ---> - -<!DOCTYPE article PUBLIC "-//OASIS//DTD Simplified DocBook XML V1.0//EN" -"http://www.oasis-open.org/docbook/xml/simple/1.0/sdocbook.dtd"> -<article id="bk_GettStartedGuide"> - <title>BookKeeper Getting Started Guide</title> - - <articleinfo> - <legalnotice> - <para>Licensed 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 <ulink - url="http://www.apache.org/licenses/LICENSE-2.0">http://www.apache.org/licenses/LICENSE-2.0</ulink>.</para> - - <para>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.</para> - </legalnotice> - - <abstract> - <para>This guide contains detailed information about using BookKeeper - for logging. It discusses the basic operations BookKeeper supports, - and how to create logs and perform basic read and write operations on these - logs.</para> - </abstract> - </articleinfo> - <section id="bk_GettingStarted"> - <title>Programming with BookKeeper</title> - - <itemizedlist> - <listitem> - <para><xref linkend="bk_instance" /></para> - </listitem> - - <listitem> - <para><xref linkend="bk_createLedger" /></para> - </listitem> - - <listitem> - <para><xref linkend="bk_writeLedger" /></para> - </listitem> - - <listitem> - <para><xref linkend="bk_closeLedger" /></para> - </listitem> - - <listitem> - <para><xref linkend="bk_openLedger" /></para> - </listitem> - - <listitem> - <para><xref linkend="bk_readLedger" /></para> - </listitem> - - <listitem> - <para><xref linkend="bk_deleteLedger" /></para> - </listitem> - - </itemizedlist> - - <section id="bk_instance"> - <title> Instantiating BookKeeper.</title> - <para> - The first step to use BookKeeper is to instantiate a BookKeeper object: - </para> - <para> - <computeroutput> - org.apache.bookkeeper.BookKeeper - </computeroutput> - </para> - - <para> - There are three BookKeeper constructors: - </para> - - <para> - <computeroutput> - public BookKeeper(String servers) - throws KeeperException, IOException - </computeroutput> - </para> - - <para> - where: - </para> - <itemizedlist> - <listitem> - <para> - <computeroutput>servers</computeroutput> is a comma-separated list of ZooKeeper servers. - </para> - </listitem> - </itemizedlist> - - <para> - <computeroutput> - public BookKeeper(ZooKeeper zk) - throws InterruptedException, KeeperException - </computeroutput> - </para> - - <para> - where: - </para> - <itemizedlist> - <listitem> - <para> - <computeroutput>zk</computeroutput> is a ZooKeeper object. This constructor is useful when - the application also using ZooKeeper and wants to have a single instance of ZooKeeper. - </para> - </listitem> - </itemizedlist> - - - <para> - <computeroutput> - public BookKeeper(ZooKeeper zk, ClientSocketChannelFactory channelFactory) - throws InterruptedException, KeeperException - </computeroutput> - </para> - - <para> - where: - </para> - <itemizedlist> - <listitem> - <para> - <computeroutput>zk</computeroutput> is a ZooKeeper object. This constructor is useful when - the application also using ZooKeeper and wants to have a single instance of ZooKeeper. - </para> - </listitem> - - <listitem> - <para> - <computeroutput>channelFactory</computeroutput> is a netty channel object - (<computeroutput>org.jboss.netty.channel.socket</computeroutput>). - </para> - </listitem> - </itemizedlist> - - - - </section> - - <section id="bk_createLedger"> - <title> Creating a ledger. </title> - - <para> Before writing entries to BookKeeper, it is necessary to create a ledger. - With the current BookKeeper API, it is possible to create a ledger both synchronously - or asynchronously. The following methods belong - to <computeroutput>org.apache.bookkeeper.client.BookKeeper</computeroutput>. - </para> - - <para> - <emphasis role="bold">Synchronous call:</emphasis> - </para> - - <para> - <computeroutput> - public LedgerHandle createLedger(int ensSize, int qSize, DigestType type, byte passwd[]) - throws KeeperException, InterruptedException, - IOException, BKException - </computeroutput> - </para> - - <para> - where: - </para> - <itemizedlist> - <listitem> - <para> - <computeroutput>ensSize</computeroutput> is the number of bookies (ensemble size); - </para> - </listitem> - - <listitem> - <para> - <computeroutput>qSize</computeroutput> is the write quorum size; - </para> - </listitem> - - <listitem> - <para> - <computeroutput>type</computeroutput> is the type of digest used with entries: either MAC or CRC32. - </para> - </listitem> - - <listitem> - <para> - <computeroutput>passwd</computeroutput> is a password that authorizes the client to write to the - ledger being created. - </para> - </listitem> - </itemizedlist> - - <para> - All further operations on a ledger are invoked through the <computeroutput>LedgerHandle</computeroutput> - object returned. - </para> - - <para> - As a convenience, we provide a <computeroutput>createLedger</computeroutput> with default parameters (3,2,VERIFIABLE), - and the only two input parameters it requires are a digest type and a password. - </para> - - <para> - <emphasis role="bold">Asynchronous call:</emphasis> - </para> - - <para> - <computeroutput> - public void asyncCreateLedger(int ensSize, - int qSize, - DigestType type, - byte passwd[], - CreateCallback cb, - Object ctx - ) - </computeroutput> - </para> - - <para> - The parameters are the same of the synchronous version, with the - exception of <computeroutput>cb</computeroutput> and <computeroutput>ctx</computeroutput>. <computeroutput>CreateCallback</computeroutput> - is an interface in <computeroutput>org.apache.bookkeeper.client.AsyncCallback</computeroutput>, and - a class implementing it has to implement a method called <computeroutput>createComplete</computeroutput> - that has the following signature: - </para> - - <para> - <computeroutput> - void createComplete(int rc, LedgerHandle lh, Object ctx); - </computeroutput> - </para> - - <para> - where: - </para> - <itemizedlist> - <listitem> - <para> - <computeroutput>rc</computeroutput> is a return code (please refer to <computeroutput>org.apache.bookeeper.client.BKException</computeroutput> for a list); - </para> - </listitem> - - <listitem> - <para> - <computeroutput>lh</computeroutput> is a <computeroutput>LedgerHandle</computeroutput> object to manipulate a ledger; - </para> - </listitem> - - <listitem> - <para> - <computeroutput>ctx</computeroutput> is a control object for accountability purposes. It can be essentially any object the application is happy with. - </para> - </listitem> - </itemizedlist> - - <para> - The <computeroutput>ctx</computeroutput> object passed as a parameter to the call to create a ledger - is the one same returned in the callback. - </para> - </section> - - <section id="bk_writeLedger"> - <title> Adding entries to a ledger. </title> - <para> - Once we have a ledger handle <computeroutput>lh</computeroutput> obtained through a call to create a ledger, we - can start writing entries. As with creating ledgers, we can write both synchronously and - asynchronously. The following methods belong - to <computeroutput>org.apache.bookkeeper.client.LedgerHandle</computeroutput>. - </para> - - <para> - <emphasis role="bold">Synchronous call:</emphasis> - </para> - - <para> - <computeroutput> - public long addEntry(byte[] data) - throws InterruptedException - </computeroutput> - </para> - - <para> - where: - </para> - - <itemizedlist> - <listitem> - <para> - <computeroutput>data</computeroutput> is a byte array; - </para> - </listitem> - </itemizedlist> - - <para> - A call to <computeroutput>addEntry</computeroutput> returns the status of the operation (please refer to <computeroutput>org.apache.bookeeper.client.BKDefs</computeroutput> for a list); - </para> - - <para> - <emphasis role="bold">Asynchronous call:</emphasis> - </para> - - <para> - <computeroutput> - public void asyncAddEntry(byte[] data, AddCallback cb, Object ctx) - </computeroutput> - </para> - - <para> - It also takes a byte array as the sequence of bytes to be stored as an entry. Additionaly, it takes - a callback object <computeroutput>cb</computeroutput> and a control object <computeroutput>ctx</computeroutput>. The callback object must implement - the <computeroutput>AddCallback</computeroutput> interface in <computeroutput>org.apache.bookkeeper.client.AsyncCallback</computeroutput>, and - a class implementing it has to implement a method called <computeroutput>addComplete</computeroutput> - that has the following signature: - </para> - - <para> - <computeroutput> - void addComplete(int rc, LedgerHandle lh, long entryId, Object ctx); - </computeroutput> - </para> - - <para> - where: - </para> - <itemizedlist> - <listitem> - <para> - <computeroutput>rc</computeroutput> is a return code (please refer to <computeroutput>org.apache.bookeeper.client.BKDefs</computeroutput> for a list); - </para> - </listitem> - - <listitem> - <para> - <computeroutput>lh</computeroutput> is a <computeroutput>LedgerHandle</computeroutput> object to manipulate a ledger; - </para> - </listitem> - - <listitem> - <para> - <computeroutput>entryId</computeroutput> is the identifier of entry associated with this request; - </para> - </listitem> - - <listitem> - <para> - <computeroutput>ctx</computeroutput> is control object used for accountability purposes. It can be any object the application is happy with. - </para> - </listitem> - </itemizedlist> - </section> - - <section id="bk_closeLedger"> - <title> Closing a ledger. </title> - <para> - Once a client is done writing, it closes the ledger. The following methods belong - to <computeroutput>org.apache.bookkeeper.client.LedgerHandle</computeroutput>. - </para> - <para> - <emphasis role="bold">Synchronous close:</emphasis> - </para> - - <para> - <computeroutput> - public void close() - throws InterruptedException - </computeroutput> - </para> - - <para> - It takes no input parameters. - </para> - - <para> - <emphasis role="bold">Asynchronous close:</emphasis> - </para> - <para> - <computeroutput> - public void asyncClose(CloseCallback cb, Object ctx) - throws InterruptedException - </computeroutput> - </para> - - <para> - It takes a callback object <computeroutput>cb</computeroutput> and a control object <computeroutput>ctx</computeroutput>. The callback object must implement - the <computeroutput>CloseCallback</computeroutput> interface in <computeroutput>org.apache.bookkeeper.client.AsyncCallback</computeroutput>, and - a class implementing it has to implement a method called <computeroutput>closeComplete</computeroutput> - that has the following signature: - </para> - - <para> - <computeroutput> - void closeComplete(int rc, LedgerHandle lh, Object ctx) - </computeroutput> - </para> - - <para> - where: - </para> - <itemizedlist> - <listitem> - <para> - <computeroutput>rc</computeroutput> is a return code (please refer to <computeroutput>org.apache.bookeeper.client.BKDefs</computeroutput> for a list); - </para> - </listitem> - - <listitem> - <para> - <computeroutput>lh</computeroutput> is a <computeroutput>LedgerHandle</computeroutput> object to manipulate a ledger; - </para> - </listitem> - - <listitem> - <para> - <computeroutput>ctx</computeroutput> is control object used for accountability purposes. - </para> - </listitem> - </itemizedlist> - - </section> - - <section id="bk_openLedger"> - <title> Opening a ledger. </title> - <para> - To read from a ledger, a client must open it first. The following methods belong - to <computeroutput>org.apache.bookkeeper.client.BookKeeper</computeroutput>. - </para> - - <para> - <emphasis role="bold">Synchronous open:</emphasis> - </para> - - <para> - <computeroutput> - public LedgerHandle openLedger(long lId, DigestType type, byte passwd[]) - throws InterruptedException, BKException - </computeroutput> - </para> - - <itemizedlist> - <listitem> - <para> - <computeroutput>ledgerId</computeroutput> is the ledger identifier; - </para> - </listitem> - - <listitem> - <para> - <computeroutput>type</computeroutput> is the type of digest used with entries: either MAC or CRC32. - </para> - </listitem> - - <listitem> - <para> - <computeroutput>passwd</computeroutput> is a password to access the ledger (used only in the case of <computeroutput>VERIFIABLE</computeroutput> ledgers); - </para> - </listitem> - </itemizedlist> - - <para> - <emphasis role="bold">Asynchronous open:</emphasis> - </para> - <para> - <computeroutput> - public void asyncOpenLedger(long lId, DigestType type, byte passwd[], OpenCallback cb, Object ctx) - </computeroutput> - </para> - - <para> - It also takes a a ledger identifier and a password. Additionaly, it takes a callback object - <computeroutput>cb</computeroutput> and a control object <computeroutput>ctx</computeroutput>. The callback object must implement - the <computeroutput>OpenCallback</computeroutput> interface in <computeroutput>org.apache.bookkeeper.client.AsyncCallback</computeroutput>, and - a class implementing it has to implement a method called <computeroutput>openComplete</computeroutput> - that has the following signature: - </para> - - <para> - <computeroutput> - public void openComplete(int rc, LedgerHandle lh, Object ctx) - </computeroutput> - </para> - - <para> - where: - </para> - <itemizedlist> - <listitem> - <para> - <computeroutput>rc</computeroutput> is a return code (please refer to <computeroutput>org.apache.bookeeper.client.BKDefs</computeroutput> for a list); - </para> - </listitem> - - <listitem> - <para> - <computeroutput>lh</computeroutput> is a <computeroutput>LedgerHandle</computeroutput> object to manipulate a ledger; - </para> - </listitem> - - <listitem> - <para> - <computeroutput>ctx</computeroutput> is control object used for accountability purposes. - </para> - </listitem> - </itemizedlist> - </section> - - <section id="bk_readLedger"> - <title> Reading from ledger </title> - <para> - Read calls may request one or more consecutive entries. The following methods belong - to <computeroutput>org.apache.bookkeeper.client.LedgerHandle</computeroutput>. - </para> - - <para> - <emphasis role="bold">Synchronous read:</emphasis> - </para> - - <para> - <computeroutput> - public Enumeration<LedgerEntry> readEntries(long firstEntry, long lastEntry) - throws InterruptedException, BKException - </computeroutput> - </para> - - <itemizedlist> - <listitem> - <para> - <computeroutput>firstEntry</computeroutput> is the identifier of the first entry in the sequence of entries to read; - </para> - </listitem> - - <listitem> - <para> - <computeroutput>lastEntry</computeroutput> is the identifier of the last entry in the sequence of entries to read. - </para> - </listitem> - </itemizedlist> - - <para> - <emphasis role="bold">Asynchronous read:</emphasis> - </para> - <para> - <computeroutput> - public void asyncReadEntries(long firstEntry, - long lastEntry, ReadCallback cb, Object ctx) - throws BKException, InterruptedException - </computeroutput> - </para> - - <para> - It also takes a first and a last entry identifiers. Additionaly, it takes a callback object - <computeroutput>cb</computeroutput> and a control object <computeroutput>ctx</computeroutput>. The callback object must implement - the <computeroutput>ReadCallback</computeroutput> interface in <computeroutput>org.apache.bookkeeper.client.AsyncCallback</computeroutput>, and - a class implementing it has to implement a method called <computeroutput>readComplete</computeroutput> - that has the following signature: - </para> - - <para> - <computeroutput> - void readComplete(int rc, LedgerHandle lh, Enumeration<LedgerEntry> seq, Object ctx) - </computeroutput> - </para> - - <para> - where: - </para> - <itemizedlist> - <listitem> - <para> - <computeroutput>rc</computeroutput> is a return code (please refer to <computeroutput>org.apache.bookeeper.client.BKDefs</computeroutput> for a list); - </para> - </listitem> - - <listitem> - <para> - <computeroutput>lh</computeroutput> is a <computeroutput>LedgerHandle</computeroutput> object to manipulate a ledger; - </para> - </listitem> - - <listitem> - <para> - <computeroutput>seq</computeroutput> is a <computeroutput>Enumeration<LedgerEntry> </computeroutput> object to containing the list of entries requested; - </para> - </listitem> - - <listitem> - <para> - <computeroutput>ctx</computeroutput> is control object used for accountability purposes. - </para> - </listitem> - </itemizedlist> - </section> - - <section id="bk_deleteLedger"> - <title> Deleting a ledger </title> - <para> - Once a client is done with a ledger and is sure that nobody will ever need to read from it again, they can delete the ledger. - The following methods belong to <computeroutput>org.apache.bookkeeper.client.BookKeeper</computeroutput>. - </para> - - <para> - <emphasis role="bold">Synchronous delete:</emphasis> - </para> - - <para> - <computeroutput> - public void deleteLedger(long lId) throws InterruptedException, BKException - </computeroutput> - </para> - - <itemizedlist> - <listitem> - <para> - <computeroutput>lId</computeroutput> is the ledger identifier; - </para> - </listitem> - </itemizedlist> - - <para> - <emphasis role="bold">Asynchronous delete:</emphasis> - </para> - <para> - <computeroutput> - public void asyncDeleteLedger(long lId, DeleteCallback cb, Object ctx) - </computeroutput> - </para> - - <para> - It takes a ledger identifier. Additionally, it takes a callback object - <computeroutput>cb</computeroutput> and a control object <computeroutput>ctx</computeroutput>. The callback object must implement - the <computeroutput>DeleteCallback</computeroutput> interface in <computeroutput>org.apache.bookkeeper.client.AsyncCallback</computeroutput>, and - a class implementing it has to implement a method called <computeroutput>deleteComplete</computeroutput> - that has the following signature: - </para> - - <para> - <computeroutput> - void deleteComplete(int rc, Object ctx) - </computeroutput> - </para> - - <para> - where: - </para> - <itemizedlist> - <listitem> - <para> - <computeroutput>rc</computeroutput> is a return code (please refer to <computeroutput>org.apache.bookeeper.client.BKDefs</computeroutput> for a list); - </para> - </listitem> - - <listitem> - <para> - <computeroutput>ctx</computeroutput> is control object used for accountability purposes. - </para> - </listitem> - </itemizedlist> - </section> - </section> -</article> \ No newline at end of file http://git-wip-us.apache.org/repos/asf/zookeeper/blob/cf24deb2/zookeeper-docs/src/documentation/content/xdocs/bookkeeperStarted.xml ---------------------------------------------------------------------- diff --git a/zookeeper-docs/src/documentation/content/xdocs/bookkeeperStarted.xml b/zookeeper-docs/src/documentation/content/xdocs/bookkeeperStarted.xml deleted file mode 100644 index 74f6f7e..0000000 --- a/zookeeper-docs/src/documentation/content/xdocs/bookkeeperStarted.xml +++ /dev/null @@ -1,208 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- - Copyright 2002-2004 The Apache Software Foundation - - Licensed 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. ---> - -<!DOCTYPE article PUBLIC "-//OASIS//DTD Simplified DocBook XML V1.0//EN" -"http://www.oasis-open.org/docbook/xml/simple/1.0/sdocbook.dtd"> -<article id="bk_GettStartedGuide"> - <title>BookKeeper Getting Started Guide</title> - - <articleinfo> - <legalnotice> - <para>Licensed 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 <ulink - url="http://www.apache.org/licenses/LICENSE-2.0">http://www.apache.org/licenses/LICENSE-2.0</ulink>.</para> - - <para>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.</para> - </legalnotice> - - <abstract> - <para>This guide contains detailed information about using BookKeeper - for logging. It discusses the basic operations BookKeeper supports, - and how to create logs and perform basic read and write operations on these - logs.</para> - </abstract> - </articleinfo> - <section id="bk_GettingStarted"> - <title>Getting Started: Setting up BookKeeper to write logs.</title> - - <para>This document contains information to get you started quickly with - BookKeeper. It is aimed primarily at developers willing to try it out, and - contains simple installation instructions for a simple BookKeeper installation - and a simple programming example. For further programming detail, please refer to - <ulink url="bookkeeperProgrammer.html">BookKeeper Programmer's Guide</ulink>. - </para> - - <section id="bk_Prerequisites"> - <title>Pre-requisites</title> - <para>See <ulink url="bookkeeperConfig.html#bk_sysReq"> - System Requirements</ulink> in the Admin guide.</para> - </section> - - <section id="bk_Download"> - <title>Download</title> - <para> BookKeeper is distributed along with ZooKeeper. To get a ZooKeeper distribution, - download a recent - <ulink url="http://zookeeper.apache.org/releases.html"> - stable</ulink> release from one of the Apache Download - Mirrors.</para> - </section> - - <section id="bk_localBK"> - <title>LocalBookKeeper</title> - <para> Under org.apache.bookkeeper.util, you'll find a java program - called LocalBookKeeper.java that sets you up to run BookKeeper on a - single machine. This is far from ideal from a performance perspective, - but the program is useful for both test and educational purposes. - </para> - </section> - - <section id="bk_setupBookies"> - <title>Setting up bookies</title> - <para> If you're bold and you want more than just running things locally, then - you'll need to run bookies in different servers. You'll need at least three bookies - to start with. - </para> - - <para> - For each bookie, we need to execute a command like the following: - </para> - - <para><computeroutput> - java -cp .:./zookeeper-<version>-bookkeeper.jar:./zookeeper-<version>.jar\ - :lib/slf4j-api-1.6.1.jar:lib/slf4j-log4j12-1.6.1.jar:lib/log4j-1.2.15.jar -Dlog4j.configuration=log4j.properties\ - org.apache.bookkeeper.proto.BookieServer 3181 127.0.0.1:2181 /path_to_log_device/\ - /path_to_ledger_device/ - </computeroutput></para> - - <para> "/path_to_log_device/" and "/path_to_ledger_device/" are different paths. Also, port 3181 - is the port that a bookie listens on for connection requests from clients. 127.0.0.1:2181 is the hostname:port - for the ZooKeeper server. In this example, the standalone ZooKeeper server is running locally on port 2181. - If we had multiple ZooKeeper servers, this parameter would be a comma separated list of all the hostname:port - values corresponding to them. - </para> - </section> - - <section id="bk_setupZK"> - <title>Setting up ZooKeeper</title> - <para> ZooKeeper stores metadata on behalf of BookKeeper clients and bookies. To get a minimal - ZooKeeper installation to work with BookKeeper, we can set up one server running in - standalone mode. Once we have the server running, we need to create a few znodes: - </para> - - <orderedlist> - <listitem> - <para><computeroutput> - /ledgers - </computeroutput></para> - </listitem> - - <listitem> - <para><computeroutput> - /ledgers/available - </computeroutput></para> - </listitem> - - <listitem> - <para> For each bookie, we add one znode such that the name of the znode is the - concatenation of the machine name and the port number that the bookie is - listening on. For example, if a bookie is running on bookie.foo.com an is listening - on port 3181, we add a znode - <computeroutput>/ledgers/available/bookie.foo.com:3181</computeroutput>. - </para> - </listitem> - </orderedlist> - </section> - - <section id="bk_example"> - <title>Example</title> - <para> - In the following excerpt of code, we: - </para> - - <orderedlist> - <listitem> - <para> - Create a ledger; - </para> - </listitem> - - <listitem> - <para> - Write to the ledger; - </para> - </listitem> - - <listitem> - <para> - Close the ledger; - </para> - </listitem> - - <listitem> - <para> - Open the same ledger for reading; - </para> - </listitem> - - <listitem> - <para> - Read from the ledger; - </para> - </listitem> - - <listitem> - <para> - Close the ledger again; - </para> - </listitem> - </orderedlist> - - <programlisting> -LedgerHandle lh = bkc.createLedger(ledgerPassword); -ledgerId = lh.getId(); -ByteBuffer entry = ByteBuffer.allocate(4); - -for(int i = 0; i < 10; i++){ - entry.putInt(i); - entry.position(0); - entries.add(entry.array()); - lh.addEntry(entry.array()); -} -lh.close(); -lh = bkc.openLedger(ledgerId, ledgerPassword); - -Enumeration<LedgerEntry> ls = lh.readEntries(0, 9); -int i = 0; -while(ls.hasMoreElements()){ - ByteBuffer origbb = ByteBuffer.wrap( - entries.get(i++)); - Integer origEntry = origbb.getInt(); - ByteBuffer result = ByteBuffer.wrap( - ls.nextElement().getEntry()); - - Integer retrEntry = result.getInt(); -} -lh.close(); - </programlisting> - </section> - </section> -</article> http://git-wip-us.apache.org/repos/asf/zookeeper/blob/cf24deb2/zookeeper-docs/src/documentation/content/xdocs/bookkeeperStream.xml ---------------------------------------------------------------------- diff --git a/zookeeper-docs/src/documentation/content/xdocs/bookkeeperStream.xml b/zookeeper-docs/src/documentation/content/xdocs/bookkeeperStream.xml deleted file mode 100644 index 9db605a..0000000 --- a/zookeeper-docs/src/documentation/content/xdocs/bookkeeperStream.xml +++ /dev/null @@ -1,331 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- - Copyright 2002-2004 The Apache Software Foundation - - Licensed 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. ---> - -<!DOCTYPE article PUBLIC "-//OASIS//DTD Simplified DocBook XML V1.0//EN" -"http://www.oasis-open.org/docbook/xml/simple/1.0/sdocbook.dtd"> -<article id="bk_Stream"> - <title>Streaming with BookKeeper</title> - - <articleinfo> - <legalnotice> - <para>Licensed 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 <ulink - url="http://www.apache.org/licenses/LICENSE-2.0">http://www.apache.org/licenses/LICENSE-2.0</ulink>.</para> - - <para>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.</para> - </legalnotice> - - <abstract> - <para>This guide contains detailed information about using how to stream bytes - on top of BookKeeper. It essentially motivates and discusses the basic stream - operations currently supported.</para> - </abstract> - </articleinfo> - <section id="bk_StreamSummary"> - <title>Summary</title> - - <para> - When using the BookKeeper API, an application has to split the data to write into entries, each - entry being a byte array. This is natural for many applications. For example, when using BookKeeper - for write-ahead logging, an application typically wants to write the modifications corresponding - to a command or a transaction. Some other applications, however, might not have a natural boundary - for entries, and may prefer to write and read streams of bytes. This is exactly the purpose of the - stream API we have implemented on top of BookKeeper. - </para> - - <para> - The stream API is implemented in the package <computeroutput>Streaming</computeroutput>, and it contains two main classes: <computeroutput>LedgerOutputStream</computeroutput> and - <computeroutput>LedgerInputStream</computeroutput>. The class names are indicative of what they do. - </para> - </section> - - <section id="bk_LedgerOutputStream"> - <title>Writing a stream of bytes</title> - <para> - Class <computeroutput>LedgerOutputStream</computeroutput> implements two constructors and five public methods: - </para> - - <para> - <computeroutput> - public LedgerOutputStream(LedgerHandle lh) - </computeroutput> - </para> - - <para> - where: - </para> - <itemizedlist> - <listitem> - <para> - <computeroutput>lh</computeroutput> is a ledger handle for a previously created and open ledger. - </para> - </listitem> - </itemizedlist> - - <para> - <computeroutput> - public LedgerOutputStream(LedgerHandle lh, int size) - </computeroutput> - </para> - - <para> - where: - </para> - <itemizedlist> - <listitem> - <para> - <computeroutput>lh</computeroutput> is a ledger handle for a previously created and open ledger. - </para> - </listitem> - - <listitem> - <para> - <computeroutput>size</computeroutput> is the size of the byte buffer to store written bytes before flushing. - </para> - </listitem> - </itemizedlist> - - - <para> - <emphasis role="bold">Closing a stream.</emphasis> This call closes the stream by flushing the write buffer. - </para> - <para> - <computeroutput> - public void close() - </computeroutput> - </para> - - <para> - which has no parameters. - </para> - - <para> - <emphasis role="bold">Flushing a stream.</emphasis> This call essentially flushes the write buffer. - </para> - <para> - <computeroutput> - public synchronized void flush() - </computeroutput> - </para> - - <para> - which has no parameters. - </para> - - <para> - <emphasis role="bold">Writing bytes.</emphasis> There are three calls for writing bytes to a stream. - </para> - - <para> - <computeroutput> - public synchronized void write(byte[] b) - </computeroutput> - </para> - - <para> - where: - </para> - <itemizedlist> - <listitem> - <para> - <computeroutput>b</computeroutput> is an array of bytes to write. - </para> - </listitem> - </itemizedlist> - - <para> - <computeroutput> - public synchronized void write(byte[] b, int off, int len) - </computeroutput> - </para> - - <para> - where: - </para> - <itemizedlist> - <listitem> - <para> - <computeroutput>b</computeroutput> is an array of bytes to write. - </para> - </listitem> - - <listitem> - <para> - <computeroutput>off</computeroutput> is a buffer offset. - </para> - </listitem> - - <listitem> - <para> - <computeroutput>len</computeroutput> is the length to write. - </para> - </listitem> - </itemizedlist> - - <para> - <computeroutput> - public synchronized void write(int b) - </computeroutput> - </para> - - <para> - where: - </para> - <itemizedlist> - <listitem> - <para> - <computeroutput>b</computeroutput> contains a byte to write. The method writes the least significant byte of the integer four bytes. - </para> - </listitem> - </itemizedlist> - </section> - - <section id="bk_LedgerInputStream"> - <title>Reading a stream of bytes</title> - - <para> - Class <computeroutput>LedgerOutputStream</computeroutput> implements two constructors and four public methods: - </para> - - <para> - <computeroutput> - public LedgerInputStream(LedgerHandle lh) - throws BKException, InterruptedException - </computeroutput> - </para> - - <para> - where: - </para> - <itemizedlist> - <listitem> - <para> - <computeroutput>lh</computeroutput> is a ledger handle for a previously created and open ledger. - </para> - </listitem> - </itemizedlist> - - <para> - <computeroutput> - public LedgerInputStream(LedgerHandle lh, int size) - throws BKException, InterruptedException - </computeroutput> - </para> - - <para> - where: - </para> - <itemizedlist> - <listitem> - <para> - <computeroutput>lh</computeroutput> is a ledger handle for a previously created and open ledger. - </para> - </listitem> - - <listitem> - <para> - <computeroutput>size</computeroutput> is the size of the byte buffer to store bytes that the application - will eventually read. - </para> - </listitem> - </itemizedlist> - - <para> - <emphasis role="bold">Closing.</emphasis> There is one call to close an input stream, but the call - is currently empty and the application is responsible for closing the ledger handle. - </para> - <para> - <computeroutput> - public void close() - </computeroutput> - </para> - - <para> - which has no parameters. - </para> - - <para> - <emphasis role="bold">Reading.</emphasis> There are three calls to read from the stream. - </para> - <para> - <computeroutput> - public synchronized int read() - throws IOException - </computeroutput> - </para> - - <para> - which has no parameters. - </para> - - <para> - <computeroutput> - public synchronized int read(byte[] b) - throws IOException - </computeroutput> - </para> - - <para> - where: - </para> - <itemizedlist> - <listitem> - <para> - <computeroutput>b</computeroutput> is a byte array to write to. - </para> - </listitem> - </itemizedlist> - - - <para> - <computeroutput> - public synchronized int read(byte[] b, int off, int len) - throws IOException - </computeroutput> - </para> - - <para> - where: - </para> - <itemizedlist> - <listitem> - <para> - <computeroutput>b</computeroutput> is a byte array to write to. - </para> - </listitem> - - <listitem> - <para> - <computeroutput>off</computeroutput> is an offset for byte array <computeroutput>b</computeroutput>. - </para> - </listitem> - - <listitem> - <para> - <computeroutput>len</computeroutput> is the length in bytes to write to <computeroutput>b</computeroutput>. - </para> - </listitem> - </itemizedlist> - - - </section> - </article> \ No newline at end of file http://git-wip-us.apache.org/repos/asf/zookeeper/blob/cf24deb2/zookeeper-docs/src/documentation/content/xdocs/index.xml ---------------------------------------------------------------------- diff --git a/zookeeper-docs/src/documentation/content/xdocs/index.xml b/zookeeper-docs/src/documentation/content/xdocs/index.xml deleted file mode 100644 index 8ed4702..0000000 --- a/zookeeper-docs/src/documentation/content/xdocs/index.xml +++ /dev/null @@ -1,98 +0,0 @@ -<?xml version="1.0"?> -<!-- - Copyright 2002-2004 The Apache Software Foundation - - Licensed 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. ---> - -<!DOCTYPE document PUBLIC "-//APACHE//DTD Documentation V2.0//EN" "http://forrest.apache.org/dtd/document-v20.dtd"> - -<document> - - <header> - <title>ZooKeeper: Because Coordinating Distributed Systems is a Zoo</title> - </header> - - <body> - <p>ZooKeeper is a high-performance coordination service for - distributed applications. It exposes common services - such as - naming, configuration management, synchronization, and group - services - in a simple interface so you don't have to write them - from scratch. You can use it off-the-shelf to implement - consensus, group management, leader election, and presence - protocols. And you can build on it for your own, specific needs. - </p> - - <p> - The following documents describe concepts and procedures to get - you started using ZooKeeper. If you have more questions, please - ask the <a href="ext:lists">mailing list</a> or browse the - archives. - </p> - <ul> - - <li><strong>ZooKeeper Overview</strong><p>Technical Overview Documents for Client Developers, Adminstrators, and Contributors</p> - <ul><li><a href="zookeeperOver.html">Overview</a> - a bird's eye view of ZooKeeper, including design concepts and architecture</li> - <li><a href="zookeeperStarted.html">Getting Started</a> - a tutorial-style guide for developers to install, run, and program to ZooKeeper</li> - <li><a href="ext:relnotes">Release Notes</a> - new developer and user facing features, improvements, and incompatibilities</li> - </ul> - </li> - - <li><strong>Developers</strong><p> Documents for Developers using the ZooKeeper Client API</p> - <ul> - <li><a href="ext:api/index">API Docs</a> - the technical reference to ZooKeeper Client APIs</li> - <li><a href="zookeeperProgrammers.html">Programmer's Guide</a> - a client application developer's guide to ZooKeeper</li> - <li><a href="javaExample.html">ZooKeeper Java Example</a> - a simple Zookeeper client appplication, written in Java</li> - <li><a href="zookeeperTutorial.html">Barrier and Queue Tutorial</a> - sample implementations of barriers and queues</li> - <li><a href="recipes.html">ZooKeeper Recipes</a> - higher level solutions to common problems in distributed applications</li> - </ul> - </li> - - <li><strong>Administrators & Operators</strong> <p> Documents for Administrators and Operations Engineers of ZooKeeper Deployments</p> - <ul> - <li><a href="zookeeperAdmin.html">Administrator's Guide</a> - a guide for system administrators and anyone else who might deploy ZooKeeper</li> - <li><a href="zookeeperQuotas.html">Quota Guide</a> - a guide for system administrators on Quotas in ZooKeeper. </li> - <li><a href="zookeeperJMX.html">JMX</a> - how to enable JMX in ZooKeeper</li> - <li><a href="zookeeperHierarchicalQuorums.html">Hierarchical quorums</a></li> - <li><a href="zookeeperObservers.html">Observers</a> - non-voting ensemble members that easily improve ZooKeeper's scalability</li> - </ul> - </li> - - <li><strong>Contributors</strong><p> Documents for Developers Contributing to the ZooKeeper Open Source Project</p> - <ul> - <li><a href="zookeeperInternals.html">ZooKeeper Internals</a> - assorted topics on the inner workings of ZooKeeper</li> - </ul> - </li> - - <li><strong>Miscellaneous ZooKeeper Documentation</strong> - <ul> - <li><a href="ext:wiki">Wiki</a></li> - <li><a href="ext:faq">FAQ</a></li> - </ul> - </li> - - <li><strong>BookKeeper Documentation</strong> - <p> BookKeeper is a highly-available system that implements high-performance write-ahead logging. It uses ZooKeeper for metadata, - which is the main reason for being a ZooKeeper contrib. - </p> - <ul> - <li><a href="bookkeeperOverview.html">henn, what's it again?</a></li> - <li><a href="bookkeeperStarted.html">Ok, now how do I try it out</a></li> - <li><a href="bookkeeperProgrammer.html">Awesome, but how do I integrate it with my app?</a></li> - <li><a href="bookkeeperStream.html">Can I stream bytes instead of entries?</a></li> - </ul> - </li> - </ul> - </body> - -</document>
