All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.apache.bookkeeper.meta.LedgerManager Maven / Gradle / Ivy

There is a newer version: 4.17.1
Show newest version
/*
 * 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.
 */
package org.apache.bookkeeper.meta;

import java.io.Closeable;
import java.io.IOException;
import java.util.Set;
import java.util.SortedSet;
import java.util.TreeSet;
import java.util.concurrent.CompletableFuture;
import org.apache.bookkeeper.client.api.LedgerMetadata;
import org.apache.bookkeeper.proto.BookkeeperInternalCallbacks.LedgerMetadataListener;
import org.apache.bookkeeper.proto.BookkeeperInternalCallbacks.Processor;
import org.apache.bookkeeper.versioning.Version;
import org.apache.bookkeeper.versioning.Versioned;
import org.apache.zookeeper.AsyncCallback;

/**
 * LedgerManager takes responsibility of ledger management in client side.
 *
 * 
    *
  • How to store ledger meta (e.g. in ZooKeeper or other key/value store) *
*/ public interface LedgerManager extends Closeable { /** * Create a new ledger with provided ledger id and metadata. * * @param ledgerId * Ledger id provided to be created * @param metadata * Metadata provided when creating the new ledger * @return Future which, when completed returns the metadata of the newly created ledger. * Completed with an exception:
    *
  • {@link org.apache.bookkeeper.client.BKException.BKLedgerExistException} if given ledger id exist
  • *
  • {@link org.apache.bookkeeper.client.BKException.ZKException} * /{@link org.apache.bookkeeper.client.BKException.BKMetadataSerializationException} for other issues
  • *
*/ CompletableFuture> createLedgerMetadata(long ledgerId, LedgerMetadata metadata); /** * Remove a specified ledger metadata by ledgerId and version. * * @param ledgerId * Ledger Id * @param version * Ledger metadata version * @return Future which, when completed, denotes that the ledger metadata has been removed. * Completed with an exception:
    *
  • {@link org.apache.bookkeeper.client.BKException.BKMetadataVersionException} * if version doesn't match
  • *
  • {@link org.apache.bookkeeper.client.BKException.BKNoSuchLedgerExistsOnMetadataServerException} * if ledger not exist
  • *
  • {@link org.apache.bookkeeper.client.BKException.ZKException} for other issues
  • *
*/ CompletableFuture removeLedgerMetadata(long ledgerId, Version version); /** * Read ledger metadata of a specified ledger. * * @param ledgerId * Ledger Id * @return Future which, when completed, contains the requested versioned metadata. * Completed with an exception::
    *
  • {@link org.apache.bookkeeper.client.BKException.BKNoSuchLedgerExistsOnMetadataServerException} * if ledger not exist
  • *
  • {@link org.apache.bookkeeper.client.BKException.ZKException} for other issues
  • *
*/ CompletableFuture> readLedgerMetadata(long ledgerId); /** * Write ledger metadata. * * @param ledgerId * Ledger Id * @param metadata * Ledger Metadata to write * @param currentVersion * The version of the metadata we expect to be overwriting. * @return Future which, when completed, contains the newly written metadata. * Comleted with an exceptione:
    *
  • {@link org.apache.bookkeeper.client.BKException.BKMetadataVersionException} * if version in metadata doesn't match
  • *
  • {@link org.apache.bookkeeper.client.BKException.ZKException} for other issue
  • *
*/ CompletableFuture> writeLedgerMetadata(long ledgerId, LedgerMetadata metadata, Version currentVersion); /** * Register the ledger metadata listener on ledgerId. * * @param ledgerId * ledger id. * @param listener * listener. */ void registerLedgerMetadataListener(long ledgerId, LedgerMetadataListener listener); /** * Unregister the ledger metadata listener on ledgerId. * * @param ledgerId * ledger id. * @param listener * ledger metadata listener. */ void unregisterLedgerMetadataListener(long ledgerId, LedgerMetadataListener listener); /** * Loop to process all ledgers. *

*

    * After all ledgers were processed, finalCb will be triggerred: *
  • if all ledgers are processed done with OK, success rc will be passed to finalCb. *
  • if some ledgers are prcoessed failed, failure rc will be passed to finalCb. *
*

* * @param processor * Ledger Processor to process a specific ledger * @param finalCb * Callback triggered after all ledgers are processed * @param context * Context of final callback * @param successRc * Success RC code passed to finalCb when callback * @param failureRc * Failure RC code passed to finalCb when exceptions occured. */ void asyncProcessLedgers(Processor processor, AsyncCallback.VoidCallback finalCb, Object context, int successRc, int failureRc); /** * Loop to scan a range of metadata from metadata storage. * * @param zkOpTimeOutMs * Iterator considers timeout while fetching ledger-range from * zk. * @return will return a iterator of the Ranges */ LedgerRangeIterator getLedgerRanges(long zkOpTimeOutMs); /** * Used to represent the Ledgers range returned from the * current scan. */ class LedgerRange { // returned ledgers private final SortedSet ledgers; public LedgerRange(Set ledgers) { this.ledgers = new TreeSet(ledgers); } public int size() { return this.ledgers.size(); } public Long start() { return ledgers.first(); } public Long end() { return ledgers.last(); } public Set getLedgers() { return this.ledgers; } } /** * Interface of the ledger meta range iterator from * storage (e.g. in ZooKeeper or other key/value store). */ interface LedgerRangeIterator { /** * @return true if there are records in the ledger metadata store. false * only when there are indeed no records in ledger metadata store. * @throws IOException thrown when there is any problem accessing the ledger * metadata store. It is critical that it doesn't return false in the case * in the case it fails to access the ledger metadata store. Otherwise it * will end up deleting all ledgers by accident. */ boolean hasNext() throws IOException; /** * Get the next element. * * @return the next element, the LedgerRange returned must be non-empty * @throws IOException thrown when there is a problem accessing the ledger * metadata store. It is critical that it doesn't return false in the case * in the case it fails to access the ledger metadata store. Otherwise it * will end up deleting all ledgers by accident. */ LedgerRange next() throws IOException; } }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy