This is an automated email from the ASF dual-hosted git repository.

wutao pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-pegasus.git


The following commit(s) were added to refs/heads/master by this push:
     new 17c0843  doc: add disk-migrater rfc  (#695)
17c0843 is described below

commit 17c0843c5018b3e32961fbe7bbb5a92d0c7b12d7
Author: Jiashuo <[email protected]>
AuthorDate: Thu Mar 18 17:08:55 2021 +0800

    doc: add disk-migrater rfc  (#695)
---
 rfcs/2021-02-22-disk-migrator.md | 66 ++++++++++++++++++++++++++++++++++++++++
 1 file changed, 66 insertions(+)

diff --git a/rfcs/2021-02-22-disk-migrator.md b/rfcs/2021-02-22-disk-migrator.md
new file mode 100644
index 0000000..b291fdd
--- /dev/null
+++ b/rfcs/2021-02-22-disk-migrator.md
@@ -0,0 +1,66 @@
+# Disk-Migrator
+
+## Design Goals
+Disk-Migrator is used for migrating data among different local disks within 
one node. This feature is different from node-rebalance that is for migrating 
data among different nodes. 
+
+## Flow Process
+Disk-Migrator operates by sending `RPC_REPLICA_DISK_MIGRATE` rpc to the 
targeted node that triggers the node to migrate the specified replica from one 
disk to another. The whole migration process is as follow: 
+
+```
++---------------+      +---------------+       +--------------+
+| Client(shell) +------+ replicaServer +-------+  metaServer  |
++------+--------+      +-------+-------+       +-------+------+
+       |                       |                       |
+       +------migrateRPC-----> +-----IDLE              |
+       |                       |       | (validate rpc)|
+       |                       |     MOVING            |
+       |                       |       | (migrate data)|
+       |                       |     MOVED             |
+       |                       |       | (rename dir)  |
+       |                       |     CLOSED            |
+       |                       |       |               |
+       |                +----- +<----LEARN<------------+
+       |                |      |                       |
+       |                |      |                       |
+       |           LearnSuccess|                       |
+       |                |      |                       |
+       |                |      |                       |
+       |                +----->+                       |
+```
+
+1. The targeted node receives the migrateRPC and starts validating the request 
arguments.
+2. If the RPC is valid, node starts migrating the specified replica.
+3. After replica migration finishes successfuly, the original replica will be 
closed and ReplicaServer re-opens the new replica.
+4. If the new replica's data is inconsistent with its primary, MetaServer will 
automatically start to trigger replica-learn to catch up with the latest data.
+5. After the learning process is completed, the entire disk-migration ends.
+
+## Replica States
+In the process of migration, the original replica and the new replica will 
have different states as follow:
+| process  |origin replica status[dir name]  | new replica status[dir name]   |
+|---|---|---|
+|IDEL  |primary/secondary[gpid.pegasus]  |--[--]   |
+|START   |secondary[gpid.pegasus]  |--[--]   |
+|MOVING   |secondary[gpid.pegasus]   |--[gpid.pegasus.disk.migrate.tmp]   |
+|MOVED   |secondary[gpid.pegasus]   |--[gpid.pegasus.disk.migrate.tmp]   | 
+|CLOSED   |error[gpid.pegasus.disk.migrate.ori]   |--[gpid.pegasus]   |
+|LEARNING   |error[gpid.pegasus.disk.migrate.ori]   
|potential_secondary[gpid.pegasus] |
+| COMPLETED  |error[gpid.pegasus.disk.migrate.ori]   |secondary[gpid.pegasus]  
 |
+
+**Note:** 
+* If replica status is `primary`, you need assign it as `secondary` manually 
via [propose](http://pegasus.apache.org/administration/rebalance).
+* Once any process is failed, the operation will be failed and reverted the 
`IDEL` status.
+
+## Client Command
+The client sending migrateRPC is 
[admin-cli](https://github.com/pegasus-kv/admin-cli) which supports 
`disk-capacity`, `disk-replica` and `disk-migrate` commands. 
+
+Use `help` to see the command manuals. For example:
+```
+# query replica capacity
+disk-capacity -n node -d disk
+# query replica count
+disk-replica -n node -d disk
+# migrate data
+disk-migrate -n node -g gpid -f disk1 -t disk2 
+```
+
+It should be noticed that disk migration is currently a manual operation. It's 
in our future plan to design a disk-rebalance planner. It can generate a series 
of steps, which automatically migrate data and eventually make all disks 
balanced.


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to