| /* |
| * The MIT License (MIT) |
| * |
| * Copyright (c) 2015 Microsoft Corporation |
| * |
| * -=- Robust Distributed System Nucleus (rDSN) -=- |
| * |
| * Permission is hereby granted, free of charge, to any person obtaining a copy |
| * of this software and associated documentation files (the "Software"), to deal |
| * in the Software without restriction, including without limitation the rights |
| * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell |
| * copies of the Software, and to permit persons to whom the Software is |
| * furnished to do so, subject to the following conditions: |
| * |
| * The above copyright notice and this permission notice shall be included in |
| * all copies or substantial portions of the Software. |
| * |
| * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR |
| * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, |
| * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE |
| * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER |
| * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, |
| * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN |
| * THE SOFTWARE. |
| */ |
| |
| include "dsn.thrift" |
| include "dsn.layer2.thrift" |
| |
| namespace cpp dsn.replication |
| namespace go admin |
| namespace java org.apache.pegasus.replication |
| |
| enum partition_status |
| { |
| PS_INVALID, |
| PS_INACTIVE, |
| PS_ERROR, |
| PS_PRIMARY, |
| PS_SECONDARY, |
| PS_POTENTIAL_SECONDARY, |
| PS_PARTITION_SPLIT |
| } |
| |
| // partition split status |
| enum split_status |
| { |
| // idle state |
| NOT_SPLIT, |
| // A replica is splitting into two replicas, original one called parent, new one called child |
| SPLITTING, |
| PAUSING, |
| PAUSED, |
| // After split is successfully cancelled, the state turns into NOT_SPLIT |
| CANCELING |
| } |
| |
| enum disk_status |
| { |
| NORMAL = 0, |
| // Indicate the disk is in space insufficiency. See config |
| // [replication].disk_min_available_space_ratio for more details. |
| SPACE_INSUFFICIENT, |
| // Indicate the disk is in IO error. The disk will be marked as IO_ERROR |
| // when it's read/write unavailable. |
| IO_ERROR |
| } |
| |
| enum manual_compaction_status |
| { |
| IDLE = 0, |
| QUEUING, |
| RUNNING, |
| FINISHED |
| } |
| |
| // Used for cold backup and bulk load |
| struct file_meta |
| { |
| 1:string name; |
| 2:i64 size; |
| 3:string md5; |
| } |
| |
| struct replica_configuration |
| { |
| 1:dsn.gpid pid; |
| 2:i64 ballot; |
| 3:dsn.rpc_address primary; |
| 4:partition_status status = partition_status.PS_INVALID; |
| 5:i64 learner_signature; |
| // Used for bulk load |
| // secondary will pop all committed mutations even if buffer is not full |
| 6:optional bool pop_all = false; |
| // Used for partition split when primary send prepare message to secondary |
| // 1. true - secondary should copy mutation in this prepare message synchronously, |
| // and _is_sync_to_child in mutation structure should set true |
| // 2. false - secondary copy mutation in this prepare message asynchronously |
| // NOTICE: it should always be false when update_local_configuration |
| 7:optional bool split_sync_to_child = false; |
| 8:optional dsn.host_port hp_primary; |
| } |
| |
| struct replica_info |
| { |
| 1:dsn.gpid pid; |
| 2:i64 ballot; |
| 3:partition_status status; |
| 4:i64 last_committed_decree; |
| 5:i64 last_prepared_decree; |
| 6:i64 last_durable_decree; |
| 7:string app_type; |
| 8:string disk_tag; |
| 9:optional manual_compaction_status manual_compact_status; |
| } |