| /* |
| * 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.stream.protocol; |
| |
| import io.grpc.Metadata; |
| import org.apache.bookkeeper.common.grpc.netty.IdentityBinaryMarshaller; |
| import org.apache.bookkeeper.common.grpc.netty.LongBinaryMarshaller; |
| import org.apache.bookkeeper.stream.proto.FixedRangeSplitPolicy; |
| import org.apache.bookkeeper.stream.proto.RangeKeyType; |
| import org.apache.bookkeeper.stream.proto.RetentionPolicy; |
| import org.apache.bookkeeper.stream.proto.SegmentRollingPolicy; |
| import org.apache.bookkeeper.stream.proto.SizeBasedSegmentRollingPolicy; |
| import org.apache.bookkeeper.stream.proto.SplitPolicy; |
| import org.apache.bookkeeper.stream.proto.StreamConfiguration; |
| import org.apache.bookkeeper.stream.proto.TimeBasedRetentionPolicy; |
| |
| /** |
| * Protocol related constants used across the project. |
| */ |
| public final class ProtocolConstants { |
| |
| private ProtocolConstants() { |
| } |
| |
| public static final String SCHEME = "stream"; |
| |
| // |
| // Storage Container Constants |
| // |
| |
| // the root storage container id |
| public static final long ROOT_STORAGE_CONTAINER_ID = 0L; |
| // the stream hosts root range |
| public static final long ROOT_STREAM_ID = 0L; |
| // the root range |
| public static final long ROOT_RANGE_ID = 0L; |
| // the stream used by each container to store metadata |
| public static final long CONTAINER_META_STREAM_ID = 1L; |
| // the range used by each container to store metadata |
| public static final long CONTAINER_META_RANGE_ID = 0L; |
| // the default number of storage containers |
| public static final int DEFAULT_NUM_STORAGE_CONTAINERS = 1024; |
| // invalid storage container id |
| public static final long INVALID_STORAGE_CONTAINER_ID = -1L; |
| |
| // |
| // Stream Related Constants |
| // |
| |
| // invalid namespace id |
| public static final long INVALID_NAMESPACE_ID = -1L; |
| // invalid stream id |
| public static final long INVALID_STREAM_ID = -1L; |
| // invalid metadata range id |
| public static final long INVALID_RANGE_ID = -1L; |
| |
| // the minimum data range id - ids between [1L - 1024L) are reserved now. |
| public static final long MIN_DATA_RANGE_ID = 1024L; |
| |
| // the minimum data stream id - stream id between [1L - 1024L) are reserved. |
| public static final long MIN_DATA_STREAM_ID = 1024L; |
| |
| // default split policy |
| public static final SplitPolicy DEFAULT_SPLIT_POLICY = |
| SplitPolicy.newBuilder() |
| .setFixedRangePolicy( |
| FixedRangeSplitPolicy.newBuilder() |
| .setNumRanges(2)) |
| .build(); |
| // default rolling policy |
| public static final SegmentRollingPolicy DEFAULT_SEGMENT_ROLLING_POLICY = |
| SegmentRollingPolicy.newBuilder() |
| .setSizePolicy( |
| SizeBasedSegmentRollingPolicy.newBuilder() |
| .setMaxSegmentSize(128 * 1024 * 1024)) |
| .build(); |
| // default retention policy |
| public static final RetentionPolicy DEFAULT_RETENTION_POLICY = |
| RetentionPolicy.newBuilder() |
| .setTimePolicy( |
| TimeBasedRetentionPolicy.newBuilder() |
| .setRetentionMinutes(-1)) |
| .build(); |
| // default stream configuration |
| public static final int INIT_NUM_RANGES = 24; |
| public static final int MIN_NUM_RANGES = 24; |
| public static final StreamConfiguration DEFAULT_STREAM_CONF = |
| StreamConfiguration.newBuilder() |
| .setKeyType(RangeKeyType.HASH) |
| .setInitialNumRanges(INIT_NUM_RANGES) |
| .setMinNumRanges(MIN_NUM_RANGES) |
| .setRetentionPolicy(DEFAULT_RETENTION_POLICY) |
| .setRollingPolicy(DEFAULT_SEGMENT_ROLLING_POLICY) |
| .setSplitPolicy(DEFAULT_SPLIT_POLICY) |
| .build(); |
| |
| // storage container request metadata key |
| public static final String SC_ID_KEY = "bk-rt-sc-id" + Metadata.BINARY_HEADER_SUFFIX; |
| |
| // request metadata key for routing requests |
| public static final String ROUTING_KEY = "bk-rt-key" + Metadata.BINARY_HEADER_SUFFIX; |
| public static final String STREAM_ID_KEY = "bk-rt-sid" + Metadata.BINARY_HEADER_SUFFIX; |
| public static final String RANGE_ID_KEY = "bk-rt-rid" + Metadata.BINARY_HEADER_SUFFIX; |
| |
| // the metadata keys in grpc call metadata |
| public static final Metadata.Key<Long> SCID_METADATA_KEY = Metadata.Key.of( |
| SC_ID_KEY, |
| LongBinaryMarshaller.of() |
| ); |
| public static final Metadata.Key<Long> RID_METADATA_KEY = Metadata.Key.of( |
| RANGE_ID_KEY, |
| LongBinaryMarshaller.of() |
| ); |
| public static final Metadata.Key<Long> SID_METADATA_KEY = Metadata.Key.of( |
| STREAM_ID_KEY, |
| LongBinaryMarshaller.of() |
| ); |
| public static final Metadata.Key<byte[]> RK_METADATA_KEY = Metadata.Key.of( |
| ROUTING_KEY, |
| IdentityBinaryMarshaller.of() |
| ); |
| |
| |
| } |