blob: 4e44c51b3aef7e786ee51b2c642a393108af9588 [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.
include "dsn.thrift"
include "dsn.layer2.thrift"
include "metadata.thrift"
namespace cpp dsn.replication
namespace go admin
namespace java org.apache.pegasus.replication
// client to meta server to start partition split
struct start_partition_split_request
{
1:string app_name;
2:i32 new_partition_count;
}
struct start_partition_split_response
{
// Possible errors:
// - ERR_APP_NOT_EXIST: app not exist
// - ERR_APP_DROPPED: app has been dropped
// - ERR_INVALID_PARAMETERS: if the given new_partition_count != old_partition_count * 2
// - ERR_BUSY - if app is already executing partition split
1:dsn.error_code err;
2:string hint_msg;
}
enum split_control_type
{
PAUSE,
RESTART,
CANCEL
}
// client to meta server to control partition split
// support three control type: pause, restart, cancel
struct control_split_request
{
1:string app_name;
2:split_control_type control_type
// for pause, parent_pidx >= 0, pause specific partition, parent_pidx = -1, pause all splitting partition
// for restart, parent_pidx >= 0, restart specific partition, parent_pidx = -1, restart all paused partition
// for cancel, parent_pidx will always be -1
3:i32 parent_pidx;
// only used for cancel
4:optional i32 old_partition_count;
}
struct control_split_response
{
// Possible errors:
// - ERR_APP_NOT_EXIST: app not exist
// - ERR_APP_DROPPED: app has been dropped
// - ERR_INVALID_STATE: wrong partition split_status
// - ERR_INVALID_PARAMETERS: invalid parent_pidx or old_partition_count
// - ERR_CHILD_REGISTERED: child partition has been registered, pause partition split or cancel split failed
1:dsn.error_code err;
2:optional string hint_msg;
}
// client->meta server to query partition split status
struct query_split_request
{
1:string app_name;
}
struct query_split_response
{
// Possible errors:
// - ERR_APP_NOT_EXIST: app not exist
// - ERR_APP_DROPPED: app has been dropped
// - ERR_INVALID_STATE: app is not splitting
1:dsn.error_code err;
2:i32 new_partition_count;
3:map<i32,metadata.split_status> status;
4:optional string hint_msg;
}
// child to primary parent, notifying that itself has caught up with parent
struct notify_catch_up_request
{
1:dsn.gpid parent_gpid;
2:dsn.gpid child_gpid;
3:i64 child_ballot;
4:dsn.rpc_address child;
5:optional dsn.host_port hp_child;
}
struct notify_cacth_up_response
{
// Possible errors:
// - ERR_OBJECT_NOT_FOUND: replica can not be found
// - ERR_INVALID_STATE: replica is not primary or ballot not match or child_gpid not match
1:dsn.error_code err;
}
// primary parent -> child replicas to update partition count
struct update_child_group_partition_count_request
{
1:dsn.rpc_address target;
2:i32 new_partition_count;
3:dsn.gpid child_pid;
4:i64 ballot;
5:optional dsn.host_port hp_target;
}
struct update_child_group_partition_count_response
{
// Possible errors:
// - ERR_OBJECT_NOT_FOUND: replica can not be found
// - ERR_VERSION_OUTDATED: request is outdated
1:dsn.error_code err;
}
// primary parent -> meta server, register child on meta_server
struct register_child_request
{
1:dsn.layer2.app_info app;
2:dsn.layer2.partition_configuration parent_config;
3:dsn.layer2.partition_configuration child_config;
4:dsn.rpc_address primary;
5:optional dsn.host_port hp_primary;
}
struct register_child_response
{
// Possible errors:
// - ERR_INVALID_VERSION: request is out-dated
// - ERR_CHILD_REGISTERED: child has been registered
// - ERR_IO_PENDING: meta is executing another remote sync task
// - ERR_INVALID_STATE: parent partition is not splitting
1:dsn.error_code err;
2:dsn.layer2.app_info app;
3:dsn.layer2.partition_configuration parent_config;
4:dsn.layer2.partition_configuration child_config;
}
// primary -> meta to report pause or cancel split succeed
struct notify_stop_split_request
{
1:string app_name;
2:dsn.gpid parent_gpid;
3:metadata.split_status meta_split_status;
4:i32 partition_count;
}
struct notify_stop_split_response
{
// Possible errors:
// - ERR_INVALID_VERSION: request is out-dated
1:dsn.error_code err;
}
// primary parent -> meta server, query child state on meta server
struct query_child_state_request
{
1:string app_name
2:dsn.gpid pid;
3:i32 partition_count;
}
struct query_child_state_response
{
// Possible errors:
// - ERR_INVALID_STATE: app is not splitting or partition split has been canceled
1:dsn.error_code err;
2:optional i32 partition_count;
3:optional dsn.layer2.partition_configuration child_config;
}