blob: b16bd22f295aa6553b05a96867b1f12e41d5f48b [file] [log] [blame]
/*
* 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.
*/
syntax = "proto3";
package bookkeeper.proto.stream;
option java_multiple_files = true;
option java_package = "org.apache.bookkeeper.stream.proto";
//
// Range
//
enum RangeState {
RANGE_ACTIVE = 0;
RANGE_FENCING = 1;
RANGE_FENCED = 2;
}
message RangeId {
int64 sc_id = 1;
int64 stream_id = 2;
int64 range_id = 3;
}
message KeyRange {
int64 start_hash_key = 1;
int64 end_hash_key = 2;
}
message RangeProperties {
int64 start_hash_key = 1;
int64 end_hash_key = 2;
int64 range_id = 3;
int64 storage_container_id = 4;
}
enum RangeKeyType {
NULL = 0;
HASH = 1;
RAW = 2; // reserved, not implemented yet
}
message RangeMetadata {
RangeProperties props = 1;
int64 revision = 2;
RangeState state = 3;
// time
int64 create_time = 10;
int64 fence_time = 11;
// children and parents
repeated int64 children = 20;
repeated int64 parents = 21;
}
message ParentRanges {
int64 range_id = 1;
repeated int64 parent_range_ids = 2;
}
message ParentRangesList {
repeated ParentRanges child_ranges = 1;
}
//
// Stream
//
// since stream and table are similar and exchangable,
// from the beginning, we shared the metadata management
// between streams and tables and distinguish them using
// a flag that recorded in metadata.
enum StorageType {
STREAM = 0;
TABLE = 1;
}
enum SplitPolicyType {
FIXED = 0;
BANDWIDTH = 1;
}
message FixedRangeSplitPolicy {
int32 num_ranges = 1;
}
message BandwidthBasedSplitPolicy {
int32 max_rate_in_bytes = 1;
int32 min_rate_in_bytes = 2;
int32 max_rate_in_records = 3;
int32 min_rate_in_records = 4;
int32 max_split_factor = 5;
}
message SplitPolicy {
SplitPolicyType type = 1;
oneof policy {
FixedRangeSplitPolicy fixed_range_policy = 2;
BandwidthBasedSplitPolicy bandwidth_policy = 3;
}
}
message SizeBasedSegmentRollingPolicy {
int64 max_segment_size = 1;
}
message TimeBasedSegmentRollingPolicy {
int64 interval_seconds = 1;
}
message SegmentRollingPolicy {
SizeBasedSegmentRollingPolicy size_policy = 1;
TimeBasedSegmentRollingPolicy time_policy = 2;
}
message TimeBasedRetentionPolicy {
int64 retention_minutes = 1;
}
message RetentionPolicy {
TimeBasedRetentionPolicy time_policy = 1;
}
message StreamConfiguration {
RangeKeyType key_type = 1;
int32 min_num_ranges = 2;
int32 initial_num_ranges = 3;
SplitPolicy split_policy = 4;
SegmentRollingPolicy rolling_policy = 5;
RetentionPolicy retention_policy = 6;
StorageType storage_type = 7;
int32 ttl_seconds = 8;
}
message StreamProperties {
int64 stream_id = 1;
int64 storage_container_id = 2;
string stream_name = 3;
StreamConfiguration stream_conf = 4;
}
message StreamName {
string namespace_name = 1;
string stream_name = 2;
}
message StreamMetadata {
enum LifecycleState {
UNINIT = 0;
CREATING = 1;
CREATED = 2;
FENCING = 3;
FENCED = 4;
}
enum ServingState {
WRITABLE = 0;
READONLY = 1;
}
// stream properties
StreamProperties props = 1;
// stream lifecycle state
LifecycleState lifecycle_state = 2;
// stream serving state
ServingState serving_state = 3;
// time
uint64 c_time = 4;
uint64 m_time = 5;
// ranges
uint64 next_range_id = 100;
// current active ranges
repeated uint64 current_ranges = 101;
}
//
// Namespace
//
// user requested
message NamespaceConfiguration {
StreamConfiguration default_stream_conf = 1;
}
// public metadata for a namespace
message NamespaceProperties {
int64 namespace_id = 1;
string namespace_name = 2;
StreamConfiguration default_stream_conf = 3;
}
// the whole metadata for a namespace (including both public and private)
message NamespaceMetadata {
NamespaceProperties props = 1;
}