Skip to content

Commit

Permalink
chore: update README
Browse files Browse the repository at this point in the history
  • Loading branch information
Pencil-Yao committed Mar 24, 2022
1 parent 1e883d6 commit 350ef22
Showing 1 changed file with 63 additions and 8 deletions.
71 changes: 63 additions & 8 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -21,25 +21,80 @@ cd cita_recover
$ docker build -t cita/cita_recover:sm .
```

## 使用
## 使用方法

**-d 指定CITA 的data目录地址**
```shell
$ cita_recover --help
cita-recover
yubo
CITA Block Chain Node powered by Rust

USAGE:
cita_recover [OPTIONS] [SUBCOMMAND]

OPTIONS:
-d, --data <data_direction> Set data dir [default: ./data]
-h, --height <height> Sets the destination height
--help Print help information

**-h 指定希望到达的高度h (消去比h 高度高的块)**
SUBCOMMANDS:
full_mode_recover recover full mode node from state snapshot
help Print this message or the help of the given subcommand(s)
```

## 作用
### 从节点自身数据库恢复
* -d 指定CITA 的data目录地址
* -h 指定希望到达的高度h (消去比h 高度高的块)

#### example
```shell
$ cita_recover -d test-chain-0/data -h 100
```

#### 作用

该程序用于离线恢复 CITA 的链故障,需要修改 CITA 的chain,executor 的KV数据库,以及修改bft 的WAL 文件

## 原理
#### 原理

1. 修改chain 的current hash 指向目的高度块的hash
2. 修改bft 的wal 的index 文件指向相应的高度,并且从chain 的db 中抽取proof 和 previous hash 到目标高度的wal 日志中
3. 修改executor的 current hash 指向目的块的hash

### 从快照恢复

```shell
$ cita_recover full_mode_recover --help
recover full mode node from state snapshot

USAGE:
cita_recover full_mode_recover [OPTIONS]

OPTIONS:
-b, --backup <backup_direction> Sets the snapshot backup direction [default: ./backup]
-d, --data <data_direction> Set data dir [default: ./data]
-h, --height <height> Sets the destination height to recover
--help Print help information
```

* -d 指定CITA 的data目录地址
* -h 指定希望到达的高度h (消去比h 高度高的块)
* -b 指定备份状态快照的数据目录,该目录必须有与块高h同名的快照数据目录

#### example
```shell
$ cita_recover full_mode_recover -d ./test-chain-0/data -h 100 --b ./backup
```

#### 原理

以example设置的数据为例
1. 修改chain 的current hash 指向目的高度块的hash
2. 修改bft 的wal 的index 文件指向相应的高度,并且从chain 的db 中抽取proof 和 previous hash 到目标高度的wal 日志中
3. 删除就有的statedb目录,将备份的状态./backup/10拷贝到./test-chain-0/data中并重命名为statedb

## 另外

1. 希望该程序永远不要用到
2. 与快照不同之处是:快照是两头消,主要用于清除老数据,减少存储空间,本程序用于运维链的故障。
快照是在线修复,本程序是离线修复
3. 亲测可用
2. 从节点自身数据库可以理解为使节点块高数据以及状态数据回退;从快照恢复则是仅作块高数据回退而未做状态数据回退,状态数据statedb是直接替换的
3. 亲测可用

0 comments on commit 350ef22

Please sign in to comment.