etcdctl: add migrate command into readme

release-3.0
Xiang Li 2016-05-19 15:24:23 -07:00
parent 82c6408f38
commit 628a38d906
1 changed files with 56 additions and 0 deletions

View File

@ -735,6 +735,59 @@ cf1550fb, 3, 3, 25 kB
+----------+----------+------------+------------+
```
### MIGRATE [options]
Migrate migrates keys in a v2 store to a mvcc store. Users should run migration command for all members in the cluster.
#### Options
- data-dir -- Path to the data directory
- wal-dir -- Path to the WAL directory
- transformer -- Path to the user-provided transformer program (default if not provided)
#### Return value
Simple reply
- Exit code is zero when migration is finished successfully.
- Error string if migration failed. Exit code is non-zero.
#### Default transformer
If user does not provide a transformer program, migrate command will use the default transformer. The default transformer transforms `storev2` formatted keys into `mvcc` formatted keys according to the following Go program:
```go
func transform(n *storev2.Node) *mvccpb.KeyValue {
if n.Dir {
return nil
}
kv := &mvccpb.KeyValue{
Key: []byte(n.Key),
Value: []byte(n.Value),
CreateRevision: int64(n.CreatedIndex),
ModRevision: int64(n.ModifiedIndex),
Version: 1,
}
return kv
}
```
#### User-provided transformer
Users can provide a customized 1:n transformer function that transforms a key from the v2 store to any number of keys in the mvcc store. The migration program writes JSON formatted [v2 store keys][v2key] to the transformer program's stdin, reads protobuf formatted [mvcc keys][v3key] back from the transformer program's stdout, and finishes migration by saving the transformed keys into the mvcc store.
The provided transformer should read until EOF and flush the stdout before exiting to ensure data integrity.
#### Example
```
./etcdctl --data-dir=/var/etcd --transformer=k8s-transformer
finished transforming keys
```
## Notes
- JSON encoding for keys and values uses base64 since they are byte strings.
@ -758,3 +811,6 @@ We ensure compatibility for the `simple` output format of normal commands in non
backward compatibility for `JSON` format and the format in non-interactive mode. Currently, we do not ensure backward compatibility of utility commands.
### TODO: compatibility with etcd server
[v2key]: ../store/node_extern.go#L28-L37
[v3key]: ../mvcc/mvccpb/kv.proto#L12-L29