Raft-rs 크레이트를 사용하고화물로 조립하는 방법은 무엇입니까?

Aug 21 2020

single_mem_node 예제 를 빌드하려고 하지만 독립형 예제로 raft-rs상자를 라이브러리로 사용합니다 .

하지만 안타깝게도이 빌드 오류가 발생합니다. 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`

나는 이러한 의존성을 내 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"

raft-rs상자 사용 방법에 대한 지침 은 다음과 같습니다.

rust-protobuf 또는 Prost와 함께 raft를 사용하여 gRPC 메시지를 인코딩 / 디코딩 할 수 있습니다. 기본적으로 rust-protobuf를 사용합니다. Prost를 사용하려면 기본 기능없이 prost 코덱 기능을 사용하여 Raft를 빌드 (또는 의존)합니다.

나는 주변에서 뭔가를 놓친 것 protobuf같지만 ... 어떻게 알 수 있습니까?

답변

1 Coder-256 Aug 21 2020 at 19:25

버전 이 출시 된 후이 커밋에 메서드가 추가 된 것 같습니다0.6.0-alpha . GitHub는 master기본적으로 브랜치를 표시 하므로 나중에 사용중인 버전에 해당하는 커밋을 찾아보세요. 이 경우 제대로 태그가 지정되지 않았지만 이 커밋이 게시 된 0.6.0-alpha버전 이라고 생각 합니다 . 해당 커밋의 예에서 해당 줄 은 다음과 같습니다.

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

또는 0.6.0-alpha2019 년 7 월에 출시 된 것으로 보이므로에 대한 최신 변경 사항을 원하면 master에서 종속성을 다음과 같이 변경할 수 있습니다 Cargo.toml.

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

이 경우,화물은 최신 커밋 가져옵니다과의 해시를 저장 Cargo.lock, 당신은 새로운 확약을 업데이트 할 수 있습니다 cargo update.