Search in sources :

Example 11 with RangeProperties

use of org.apache.bookkeeper.stream.proto.RangeProperties in project bookkeeper by apache.

the class TestPByteBufTableImpl method prepareRanges.

private static HashStreamRanges prepareRanges(long streamId, int numRanges, long nextRangeId) {
    List<RangeProperties> ranges = ProtoUtils.split(streamId, numRanges, nextRangeId, (sid, rid) -> 1L);
    NavigableMap<Long, RangeProperties> rangeMap = Maps.newTreeMap();
    for (RangeProperties props : ranges) {
        rangeMap.put(props.getStartHashKey(), props);
    }
    return HashStreamRanges.ofHash(RangeKeyType.HASH, rangeMap);
}
Also used : RangeProperties(org.apache.bookkeeper.stream.proto.RangeProperties)

Example 12 with RangeProperties

use of org.apache.bookkeeper.stream.proto.RangeProperties in project bookkeeper by apache.

the class MetaRangeImpl method unsafeCreate.

private void unsafeCreate(CompletableFuture<Boolean> createFuture, StreamProperties streamProps) {
    // 1. verify the state
    checkLifecycleState(LifecycleState.UNINIT);
    this.lifecycleState = LifecycleState.CREATING;
    // 2. store the props/configuration
    synchronized (this) {
        this.streamProps = streamProps;
    }
    this.streamId = streamProps.getStreamId();
    this.cTime = this.mTime = System.currentTimeMillis();
    // 3. create the ranges
    List<RangeProperties> propertiesList = split(streamId, streamProps.getStreamConf().getInitialNumRanges(), nextRangeId, placementPolicy);
    List<Op<byte[], byte[]>> successOps = Lists.newArrayListWithExpectedSize(propertiesList.size() + 1);
    for (RangeProperties props : propertiesList) {
        RangeMetadata meta = RangeMetadata.newBuilder().setProps(props).setCreateTime(cTime).setFenceTime(Long.MAX_VALUE).setState(RangeState.RANGE_ACTIVE).addAllParents(Lists.newArrayList()).build();
        ranges.put(props.getRangeId(), meta);
        currentRanges.add(props.getRangeId());
        successOps.add(store.newPut(getStreamRangeKey(streamId, props.getRangeId()), meta.toByteArray()));
    }
    nextRangeId += propertiesList.size();
    // serialize the stream metadata
    byte[] streamMetadataKey = getStreamMetadataKey(streamId);
    successOps.add(store.newPut(streamMetadataKey, toStreamMetadata(LifecycleState.CREATED).toByteArray()));
    TxnOp<byte[], byte[]> txn = store.newTxn().If(store.newCompareValue(CompareResult.EQUAL, streamMetadataKey, null)).Then(successOps.toArray(new Op[successOps.size()])).build();
    if (log.isTraceEnabled()) {
        log.trace("Execute create stream metadata range txn {}", streamProps);
    }
    store.txn(txn).thenApplyAsync(txnResult -> {
        try {
            if (log.isTraceEnabled()) {
                log.trace("Create stream metadata range txn result = {}", txnResult.isSuccess());
            }
            if (txnResult.isSuccess()) {
                List<Result<byte[], byte[]>> results = txnResult.results();
                MetaRangeImpl.this.revision = results.get(results.size() - 1).revision();
                // mark the state to CREATED
                this.lifecycleState = LifecycleState.CREATED;
                createFuture.complete(true);
            } else {
                createFuture.complete(false);
            }
            return null;
        } finally {
            txnResult.close();
        }
    }, executor).exceptionally(cause -> {
        createFuture.completeExceptionally(cause);
        return null;
    });
}
Also used : RangeMetadata(org.apache.bookkeeper.stream.proto.RangeMetadata) RangeState(org.apache.bookkeeper.stream.proto.RangeState) CompletableFuture(java.util.concurrent.CompletableFuture) Supplier(java.util.function.Supplier) Preconditions.checkArgument(com.google.common.base.Preconditions.checkArgument) ProtoUtils.split(org.apache.bookkeeper.stream.protocol.util.ProtoUtils.split) MVCCAsyncStore(org.apache.bookkeeper.statelib.api.mvcc.MVCCAsyncStore) StreamMetadata(org.apache.bookkeeper.stream.proto.StreamMetadata) Lists(com.google.common.collect.Lists) TxnOp(org.apache.bookkeeper.api.kv.op.TxnOp) MetaRange(org.apache.bookkeeper.stream.storage.api.metadata.stream.MetaRange) ImmutableList(com.google.common.collect.ImmutableList) ProtoUtils.isStreamCreated(org.apache.bookkeeper.stream.protocol.util.ProtoUtils.isStreamCreated) RangeProperties(org.apache.bookkeeper.stream.proto.RangeProperties) LifecycleState(org.apache.bookkeeper.stream.proto.StreamMetadata.LifecycleState) KeyValue(org.apache.bookkeeper.api.kv.result.KeyValue) ExecutorService(java.util.concurrent.ExecutorService) InvalidProtocolBufferException(com.google.protobuf.InvalidProtocolBufferException) StorageContainerPlacementPolicy(org.apache.bookkeeper.stream.protocol.util.StorageContainerPlacementPolicy) MIN_DATA_RANGE_ID(org.apache.bookkeeper.stream.protocol.ProtocolConstants.MIN_DATA_RANGE_ID) DataRangeNotFoundException(org.apache.bookkeeper.stream.storage.exceptions.DataRangeNotFoundException) ServingState(org.apache.bookkeeper.stream.proto.StreamMetadata.ServingState) Result(org.apache.bookkeeper.api.kv.result.Result) StreamConfiguration(org.apache.bookkeeper.stream.proto.StreamConfiguration) Bytes(org.apache.bookkeeper.common.util.Bytes) NavigableMap(java.util.NavigableMap) GuardedBy(javax.annotation.concurrent.GuardedBy) FutureUtils(org.apache.bookkeeper.common.concurrent.FutureUtils) Maps(com.google.common.collect.Maps) Preconditions.checkState(com.google.common.base.Preconditions.checkState) Consumer(java.util.function.Consumer) List(java.util.List) Slf4j(lombok.extern.slf4j.Slf4j) StreamProperties(org.apache.bookkeeper.stream.proto.StreamProperties) VisibleForTesting(com.google.common.annotations.VisibleForTesting) CompareResult(org.apache.bookkeeper.api.kv.op.CompareResult) Op(org.apache.bookkeeper.api.kv.op.Op) RangeProperties(org.apache.bookkeeper.stream.proto.RangeProperties) TxnOp(org.apache.bookkeeper.api.kv.op.TxnOp) Op(org.apache.bookkeeper.api.kv.op.Op) ImmutableList(com.google.common.collect.ImmutableList) List(java.util.List) RangeMetadata(org.apache.bookkeeper.stream.proto.RangeMetadata)

Aggregations

RangeProperties (org.apache.bookkeeper.stream.proto.RangeProperties)12 Test (org.junit.Test)6 HashStreamRanges (org.apache.bookkeeper.clients.impl.internal.api.HashStreamRanges)3 Lists (com.google.common.collect.Lists)2 Maps (com.google.common.collect.Maps)2 List (java.util.List)2 NavigableMap (java.util.NavigableMap)2 FutureUtils (org.apache.bookkeeper.common.concurrent.FutureUtils)2 Bytes (org.apache.bookkeeper.common.util.Bytes)2 StreamProperties (org.apache.bookkeeper.stream.proto.StreamProperties)2 VisibleForTesting (com.google.common.annotations.VisibleForTesting)1 Preconditions.checkArgument (com.google.common.base.Preconditions.checkArgument)1 Preconditions.checkState (com.google.common.base.Preconditions.checkState)1 ImmutableList (com.google.common.collect.ImmutableList)1 InvalidProtocolBufferException (com.google.protobuf.InvalidProtocolBufferException)1 ByteBuf (io.netty.buffer.ByteBuf)1 ByteBufUtil (io.netty.buffer.ByteBufUtil)1 Unpooled (io.netty.buffer.Unpooled)1 Map (java.util.Map)1 Optional (java.util.Optional)1