Java tutorial
/** * 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.client; import static java.nio.charset.StandardCharsets.UTF_8; import io.netty.buffer.ByteBuf; import io.netty.buffer.Unpooled; import io.netty.buffer.UnpooledByteBufAllocator; import java.security.GeneralSecurityException; import java.util.function.Function; import org.apache.bookkeeper.client.api.LedgerMetadata; import org.apache.bookkeeper.meta.LedgerManager; import org.apache.bookkeeper.proto.DataFormats.LedgerMetadataFormat.DigestType; import org.apache.bookkeeper.proto.checksum.DigestManager; import org.apache.bookkeeper.util.ByteBufList; import org.apache.bookkeeper.versioning.Versioned; /** * Client utilities. */ public class ClientUtil { public static final org.apache.bookkeeper.client.api.DigestType DIGEST_TYPE = org.apache.bookkeeper.client.api.DigestType.CRC32C; public static final byte[] PASSWD = "foobar".getBytes(UTF_8); public static ByteBuf generatePacket(long ledgerId, long entryId, long lastAddConfirmed, long length, byte[] data) throws GeneralSecurityException { return generatePacket(ledgerId, entryId, lastAddConfirmed, length, data, 0, data.length); } public static ByteBuf generatePacket(long ledgerId, long entryId, long lastAddConfirmed, long length, byte[] data, int offset, int len) throws GeneralSecurityException { DigestManager dm = DigestManager.instantiate(ledgerId, new byte[2], DigestType.CRC32, UnpooledByteBufAllocator.DEFAULT, true); return ByteBufList.coalesce(dm.computeDigestAndPackageForSending(entryId, lastAddConfirmed, length, Unpooled.wrappedBuffer(data, offset, len))); } /** * Returns that whether ledger is in open state. */ public static boolean isLedgerOpen(LedgerHandle handle) { return !handle.getLedgerMetadata().isClosed(); } public static Versioned<LedgerMetadata> setupLedger(ClientContext clientCtx, long ledgerId, LedgerMetadataBuilder builder) throws Exception { return setupLedger(clientCtx.getLedgerManager(), ledgerId, builder); } public static Versioned<LedgerMetadata> setupLedger(LedgerManager ledgerManager, long ledgerId, LedgerMetadataBuilder builder) throws Exception { LedgerMetadata md = builder.withPassword(PASSWD).withDigestType(DIGEST_TYPE).build(); return ledgerManager.createLedgerMetadata(ledgerId, md).get(); } public static Versioned<LedgerMetadata> transformMetadata(ClientContext clientCtx, long ledgerId, Function<LedgerMetadata, LedgerMetadata> transform) throws Exception { return transformMetadata(clientCtx.getLedgerManager(), ledgerId, transform); } public static Versioned<LedgerMetadata> transformMetadata(LedgerManager ledgerManager, long ledgerId, Function<LedgerMetadata, LedgerMetadata> transform) throws Exception { Versioned<LedgerMetadata> current = ledgerManager.readLedgerMetadata(ledgerId).get(); return ledgerManager .writeLedgerMetadata(ledgerId, transform.apply(current.getValue()), current.getVersion()).get(); } }