blob: 58ddda3130f801837d492b9625d2ed6d754434f1 [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.
namespace cpp doris
namespace java org.apache.doris.thrift
include "AgentService.thrift"
include "PaloInternalService.thrift"
include "Status.thrift"
include "Types.thrift"
// Two or more BEs will try to modify tablet meta or rowset meta
// snowflake using a transaction mechanism to avoid concurrency or conflict
// but our meta store service may not have transaction. We only assume that the meta store
// service has CAS mechanism. It depends on CAS mechanism to solve concurrency problem.
// Only tablet meta has CAS mechanism, rowset meta does not have it. If rowset meta related request has expected version
// it means the service should check tablet meta's expect version.
//
// Meta store service should provide batch interface to allow BEs getting or saving meta batch by batch
// since batch is more efficient.
//
// Every response has a status field to indicate whether the request is successful or failed
struct SaveTabletMetaReq {
// the tablet id that the rowset belongs to
1: optional Types.TTabletId tablet_id
// tablet's schema hash
2: optional Types.TSchemaHash schema_hash
3: optional binary meta_binary
// if expected modify version is set then the service should check
// if current version == exp version. it indicates the service should use
// CAS mechanism
4: optional i64 expected_modify_version
5: optional i64 new_modify_version
}
struct BatchSaveTabletMetaReq {
1: optional list<SaveTabletMetaReq> reqs
}
struct GetTabletMetaReq {
// the tablet id that the rowset belongs to
1: optional Types.TTabletId tablet_id
// tablet's schema hash
2: optional Types.TSchemaHash schema_hash
// indicate whether to get the increment rowsets
3: optional bool include_rowsets
}
struct BatchGetTabletMetaReq {
1: list<GetTabletMetaReq> reqs
}
struct SaveRowsetMetaReq {
// the tablet id that the rowset belongs to
1: optional Types.TTabletId tablet_id
// tablet's schema hash
2: optional Types.TSchemaHash schema_hash
// rowset's start version
3: optional Types.TVersion start_version
// rowset's end version
4: optional Types.TVersion end_version
// rowset's version hash
5: optional Types.TVersionHash version_hash
6: optional i64 rowset_id
// the txn that the rowset belongs to, it maybe 0 because the rowset maybe generated during compaction
7: optional i64 txn_id
8: optional binary meta_binary
// if expected modify version is set, then the service should check tablet meta's current version == expected version
// if the expected version is not set, then the service will not check it
9: optional i64 expected_modify_version
10: optional i64 new_modify_version
}
struct BatchSaveRowsetMetaReq {
1: optional list<SaveRowsetMetaReq> reqs
}
// could use txn id to query rowset or using version to query rowset
struct GetRowsetMetaReq {
// the tablet id that the rowset belongs to
1: optional Types.TTabletId tablet_id
// tablet's schema hash
2: optional Types.TSchemaHash schema_hash
// rowset's start version
3: optional Types.TVersion start_version
// rowset's end version
4: optional Types.TVersion end_version
5: optional Types.TVersionHash version_hash
// rowset related txn id
6: optional i64 txn_id
}
struct BatchGetRowsetMetaReq {
1: optional list<GetRowsetMetaReq> reqs
}
struct SaveTabletMetaResponse {
1: optional Status.TStatus status
}
struct BatchSaveTabletMetaResponse {
1: optional list<SaveTabletMetaResponse> resps
}
struct GetTabletMetaResponse {
1: optional Status.TStatus status
2: optional binary tablet_meta
3: optional list<binary> rowset_metas
4: optional i64 modify_version
}
struct BatchGetTabletMetaResponse {
1: optional list<GetTabletMetaResponse> resps
}
struct SaveRowsetMetaResponse {
1: optional Status.TStatus status
}
struct BatchSaveRowsetMetaResponse {
1: optional list<SaveRowsetMetaResponse> resps
}
struct GetRowsetMetaResponse {
1: optional Status.TStatus status
2: optional list<binary> rowset_metas
}
struct BatchGetRowsetMetaResponse {
1: optional list<GetRowsetMetaResponse> resps
}
// currently there are only batch interfaces
service MetaStoreService {
BatchSaveTabletMetaResponse save_tablet_meta(1: BatchSaveTabletMetaReq save_tablet_meta_req)
BatchGetTabletMetaResponse get_tablet_meta(1: BatchGetTabletMetaReq get_tablet_meta_req)
BatchSaveRowsetMetaResponse save_rowset_meta(1: BatchSaveRowsetMetaReq save_rowset_meta_req)
BatchGetRowsetMetaResponse get_rowset_meta(1: BatchGetRowsetMetaReq get_rowset_meta_req)
}