Search in sources :

Example 1 with BookieLedgerIndexer

use of org.apache.bookkeeper.replication.BookieLedgerIndexer in project bookkeeper by apache.

the class BookKeeperAdmin method decommissionBookie.

/**
 * Triggers AuditTask by resetting lostBookieRecoveryDelay and then make
 * sure the ledgers stored in the given decommissioning bookie are properly
 * replicated and they are not underreplicated because of the given bookie.
 * This method waits untill there are no underreplicatedledgers because of this
 * bookie. If the given Bookie is not shutdown yet, then it will throw
 * BKIllegalOpException.
 *
 * @param bookieAddress
 *            address of the decommissioning bookie
 * @throws CompatibilityException
 * @throws UnavailableException
 * @throws KeeperException
 * @throws InterruptedException
 * @throws IOException
 * @throws BKAuditException
 * @throws TimeoutException
 * @throws BKException
 */
public void decommissionBookie(BookieSocketAddress bookieAddress) throws CompatibilityException, UnavailableException, KeeperException, InterruptedException, IOException, BKAuditException, TimeoutException, BKException {
    if (getAvailableBookies().contains(bookieAddress) || getReadOnlyBookies().contains(bookieAddress)) {
        LOG.error("Bookie: {} is not shutdown yet", bookieAddress);
        throw BKException.create(BKException.Code.IllegalOpException);
    }
    triggerAudit();
    /*
         * Sleep for 30 secs, so that Auditor gets chance to trigger its
         * force audittask and let the underreplicationmanager process
         * to do its replication process
         */
    Thread.sleep(30 * 1000);
    /*
         * get the collection of the ledgers which are stored in this
         * bookie, by making a call to
         * bookieLedgerIndexer.getBookieToLedgerIndex.
         */
    BookieLedgerIndexer bookieLedgerIndexer = new BookieLedgerIndexer(bkc.ledgerManager);
    Map<String, Set<Long>> bookieToLedgersMap = bookieLedgerIndexer.getBookieToLedgerIndex();
    Set<Long> ledgersStoredInThisBookie = bookieToLedgersMap.get(bookieAddress.toString());
    if ((ledgersStoredInThisBookie != null) && (!ledgersStoredInThisBookie.isEmpty())) {
        /*
             * wait untill all the ledgers are replicated to other
             * bookies by making sure that these ledgers metadata don't
             * contain this bookie as part of their ensemble.
             */
        waitForLedgersToBeReplicated(ledgersStoredInThisBookie, bookieAddress, bkc.ledgerManager);
    }
    // for double-checking, check if any ledgers are listed as underreplicated because of this bookie
    Predicate<List<String>> predicate = replicasList -> replicasList.contains(bookieAddress.toString());
    Iterator<Long> urLedgerIterator = underreplicationManager.listLedgersToRereplicate(predicate);
    if (urLedgerIterator.hasNext()) {
        // if there are any then wait and make sure those ledgers are replicated properly
        LOG.info("Still in some underreplicated ledgers metadata, this bookie is part of its ensemble. " + "Have to make sure that those ledger fragments are rereplicated");
        List<Long> urLedgers = new ArrayList<>();
        urLedgerIterator.forEachRemaining(urLedgers::add);
        waitForLedgersToBeReplicated(urLedgers, bookieAddress, bkc.ledgerManager);
    }
}
Also used : Enumeration(java.util.Enumeration) OpenCallback(org.apache.bookkeeper.client.AsyncCallback.OpenCallback) GenericCallback(org.apache.bookkeeper.proto.BookkeeperInternalCallbacks.GenericCallback) LoggerFactory(org.slf4j.LoggerFactory) TimeoutException(java.util.concurrent.TimeoutException) Random(java.util.Random) RegistrationListener(org.apache.bookkeeper.discover.RegistrationClient.RegistrationListener) Preconditions.checkArgument(com.google.common.base.Preconditions.checkArgument) SingleFragmentCallback(org.apache.bookkeeper.client.LedgerFragmentReplicator.SingleFragmentCallback) Map(java.util.Map) BKAuditException(org.apache.bookkeeper.replication.ReplicationException.BKAuditException) BookieException(org.apache.bookkeeper.bookie.BookieException) NullStatsLogger(org.apache.bookkeeper.stats.NullStatsLogger) AuditorElector(org.apache.bookkeeper.replication.AuditorElector) BookieLedgerIndexer(org.apache.bookkeeper.replication.BookieLedgerIndexer) LedgerUnderreplicationManager(org.apache.bookkeeper.meta.LedgerUnderreplicationManager) Predicate(java.util.function.Predicate) Collection(java.util.Collection) Set(java.util.Set) Sets(com.google.common.collect.Sets) List(java.util.List) Entry(java.util.Map.Entry) StatsLogger(org.apache.bookkeeper.stats.StatsLogger) Optional(java.util.Optional) MetadataDrivers.runFunctionWithRegistrationManager(org.apache.bookkeeper.meta.MetadataDrivers.runFunctionWithRegistrationManager) UnavailableException(org.apache.bookkeeper.replication.ReplicationException.UnavailableException) SortedMap(java.util.SortedMap) MultiCallback(org.apache.bookkeeper.proto.BookkeeperInternalCallbacks.MultiCallback) LedgerRangeIterator(org.apache.bookkeeper.meta.LedgerManager.LedgerRangeIterator) HashMap(java.util.HashMap) CompletableFuture(java.util.concurrent.CompletableFuture) CompatibilityException(org.apache.bookkeeper.replication.ReplicationException.CompatibilityException) AtomicReference(java.util.concurrent.atomic.AtomicReference) ArrayList(java.util.ArrayList) Processor(org.apache.bookkeeper.proto.BookkeeperInternalCallbacks.Processor) HashSet(java.util.HashSet) Lists(com.google.common.collect.Lists) UncheckedExecutionException(com.google.common.util.concurrent.UncheckedExecutionException) RecoverCallback(org.apache.bookkeeper.client.AsyncCallback.RecoverCallback) SyncReadCallback(org.apache.bookkeeper.client.SyncCallbackUtils.SyncReadCallback) LinkedList(java.util.LinkedList) NoSuchElementException(java.util.NoSuchElementException) Bookie(org.apache.bookkeeper.bookie.Bookie) MetadataDrivers.runFunctionWithMetadataBookieDriver(org.apache.bookkeeper.meta.MetadataDrivers.runFunctionWithMetadataBookieDriver) Logger(org.slf4j.Logger) Iterator(java.util.Iterator) KeeperException(org.apache.zookeeper.KeeperException) LedgerManager(org.apache.bookkeeper.meta.LedgerManager) IOException(java.io.IOException) Maps(com.google.common.collect.Maps) SyncOpenCallback(org.apache.bookkeeper.client.SyncCallbackUtils.SyncOpenCallback) File(java.io.File) ServerConfiguration(org.apache.bookkeeper.conf.ServerConfiguration) ExecutionException(java.util.concurrent.ExecutionException) LedgerManagerFactory(org.apache.bookkeeper.meta.LedgerManagerFactory) IOUtils(org.apache.bookkeeper.util.IOUtils) ConcurrentSkipListMap(java.util.concurrent.ConcurrentSkipListMap) BookieSocketAddress(org.apache.bookkeeper.net.BookieSocketAddress) ClientConfiguration(org.apache.bookkeeper.conf.ClientConfiguration) AsyncCallback(org.apache.zookeeper.AsyncCallback) AbstractFuture(com.google.common.util.concurrent.AbstractFuture) Set(java.util.Set) HashSet(java.util.HashSet) ArrayList(java.util.ArrayList) BookieLedgerIndexer(org.apache.bookkeeper.replication.BookieLedgerIndexer) List(java.util.List) ArrayList(java.util.ArrayList) LinkedList(java.util.LinkedList)

Aggregations

Preconditions.checkArgument (com.google.common.base.Preconditions.checkArgument)1 Lists (com.google.common.collect.Lists)1 Maps (com.google.common.collect.Maps)1 Sets (com.google.common.collect.Sets)1 AbstractFuture (com.google.common.util.concurrent.AbstractFuture)1 UncheckedExecutionException (com.google.common.util.concurrent.UncheckedExecutionException)1 File (java.io.File)1 IOException (java.io.IOException)1 ArrayList (java.util.ArrayList)1 Collection (java.util.Collection)1 Enumeration (java.util.Enumeration)1 HashMap (java.util.HashMap)1 HashSet (java.util.HashSet)1 Iterator (java.util.Iterator)1 LinkedList (java.util.LinkedList)1 List (java.util.List)1 Map (java.util.Map)1 Entry (java.util.Map.Entry)1 NoSuchElementException (java.util.NoSuchElementException)1 Optional (java.util.Optional)1