Como usar a caixa do raft-rs e construir com carga?

Aug 21 2020

Tento construir o exemplo single_mem_node , mas como um exemplo autônomo e uso a raft-rscaixa como uma biblioteca.

Mas, infelizmente, recebo este erro de compilação, ao compilar usando cargo build

error[E0599]: no method named `is_empty` found for reference `&raft_proto::protos::eraftpb::Snapshot` in the current scope
   --> src/main.rs:123:26
    |
123 |     if !ready.snapshot().is_empty() {
    |                          ^^^^^^^^ method not found in `&raft_proto::protos::eraftpb::Snapshot`

Eu declarei essas dependências em meu Cargo.toml

[dependencies]
protobuf = { version = "2", features = ["with-bytes"] }
raft = "0.6.0-alpha"
slog = "2.5.2"
slog-term = "2.6.0"
slog-async = "2.5.0"

As instruções sobre como usar a raft-rscaixa são:

Você pode usar raft com rust-protobuf ou Prost para codificar / decodificar mensagens gRPC. Usamos rust-protobuf por padrão. Para usar o Prost, construa (ou dependa do) Raft usando o recurso prost-codec e sem recursos padrão.

Certamente parece que sinto falta de algo em torno do protobuf... mas o quê? e como faço para descobrir sobre isso?

Respostas

1 Coder-256 Aug 21 2020 at 19:25

Parece que o método foi adicionado neste commit , após o 0.6.0-alphalançamento da versão . O GitHub mostra o masterbranch por padrão, então, no futuro, tente navegar no commit que corresponde à versão que você está usando. Nesse caso não está marcado corretamente, mas acho que este commit é a 0.6.0-alphaversão publicada . No exemplo desse commit, a linha correspondente é:

if !raft::is_empty_snap(ready.snapshot()) {

Como alternativa, como parece que 0.6.0-alphafoi lançado em julho de 2019, se você quiser as alterações mais recentes master, pode alterar a dependência em Cargo.tomlpara ler:

raft = { git = "https://github.com/tikv/raft-rs" }

Nesse caso, cargo irá buscar o commit mais recente e armazenar seu hash Cargo.lock, e você pode atualizar para um commit mais recente com cargo update.