Come usare la cassa raft-rs e costruire con il carico?

Aug 21 2020

Provo a costruire l' esempio single_mem_node , ma come esempio autonomo e utilizzo il raft-rscrate come libreria.

Ma sfortunatamente, ottengo questo errore di compilazione durante la compilazione utilizzando 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`

Ho dichiarato queste dipendenze nel mio file 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"

Le istruzioni su come utilizzare la raft-rscassa sono:

Puoi usare raft con rust-protobuf o Prost per codificare / decodificare i messaggi gRPC. Usiamo rust-protobuf per impostazione predefinita. Per usare Prost, costruisci (o dipendi da) Raft utilizzando la funzione prost-codec e senza funzionalità predefinite.

Sicuramente sembra che mi manchi qualcosa in giro protobuf... ma cosa? e come lo scopro?

Risposte

1 Coder-256 Aug 21 2020 at 19:25

Sembra che il metodo sia stato aggiunto in questo commit , dopo il 0.6.0-alpharilascio della versione . GitHub mostra il masterramo per impostazione predefinita, quindi in futuro prova a navigare nel commit che corrisponde alla versione che stai utilizzando. In questo caso non è etichettato correttamente ma penso che questo commit sia la 0.6.0-alphaversione pubblicata . Nell'esempio in quel commit, la riga corrispondente è:

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

In alternativa, poiché sembra che sia 0.6.0-alphastato rilasciato nel luglio del 2019, se vuoi le ultime modifiche master, puoi cambiare la dipendenza in Cargo.tomlleggere:

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

In tal caso, cargo recupererà l'ultimo commit e memorizzerà il suo hash Cargo.lock, e potrai aggiornare a un commit più recente con cargo update.