jimmycuadra / rust-etcd

An etcd client library for Rust.
https://docs.rs/etcd
MIT License
144 stars 35 forks source link

Support for etcd3 #16

Open jmlMetaswitch opened 7 years ago

jmlMetaswitch commented 7 years ago

Do you have plans to support etcd v3, and in particular transactions?

jimmycuadra commented 7 years ago

Of course I'd like to support v3, though I hadn't spent any time thinking about it yet. I'm not sure what the state of gRPC in Rust is right now. Last I looked it was in early development, but it's been a while.

jmlMetaswitch commented 7 years ago

I've not done too much investigation yet either, and I'm not sure whether I'll need this, but I'll get back in touch if I think that extending your work is the best bet. Thanks for the swift response!

VoyTechnology commented 6 years ago

Adding etcd v3 support would be very nice. Using gRPC with Rust is not too bad. There are a couple of quirks, protobuf manipulation in Rust is not as nice as in Go, but overall its doable.

tmccombs commented 5 years ago

I would be happy to help implement this.

jimmycuadra commented 5 years ago

PRs most welcome! Which approach to gRPC in Rust do you all think is best these days?

tmccombs commented 5 years ago

would it be better to create a new version that only supports v3, or implement it in a way that supports both v2 and v3? Looking at clients in other languages, it looks like most only support one version of the API for a single version of the library. But that is just from a cursory search.

jimmycuadra commented 5 years ago

I'd prefer to leave the existing support for v2. This could be done by nesting API-version-specific items in top level modules called v2 and v3.

tmccombs commented 5 years ago

Which approach to gRPC in Rust do you all think is best these days?

I don't know, the grpcio crate seems to be more popular on crates.io, and more active on github, but depends on the grpc-core c library (which could be good since that is standard implemenation, or bad because it requires building a c library and a fair amount of unsafe code). The grpc crate on the other hand is implemented in pure rust using tokio and futures. Another possiblity is using the protobuf crate for serializing/deserializing messages, but then use hyper/h2 directly for the transport. I don't know what the best approach for this is.

@VoyTechnology what are your thoughts? Since it sounds like you might have some experience with grpc in rust.

thedodd commented 5 years ago

Hey all, I've used the grpc create quite a lot, it should definitely work. I was hoping to see tower grpc stabilize by now, but it looks like it has not yet. Which is unfortunate because it has a significantly more simple interface.

I would be happy to help will getting things rolling on this front.

I am definitely interested in being able to use the transaction system & leases.

tmccombs commented 5 years ago

I created a branch that has the protobuf files in a proto directory (and a script to pull down new versions if/when necessary) at https://github.com/tmccombs/rust-etcd/tree/etcdv3

thedodd commented 5 years ago

Awesome. Happy to take a look. Are you planning on opening a PR for it against this repo??

tmccombs commented 5 years ago

https://github.com/jimmycuadra/rust-etcd/pull/25/files

done

thehappycoder commented 5 years ago

I am new to etcd. Can't we just call etcd-3 via HTTP requests?

tmccombs commented 5 years ago

etcd-3 uses GRPC, which does use HTTP, but it uses HTTP/2 instead of HTTP/1.1 and protobufs instead of json.

thehappycoder commented 5 years ago

In case if it's going to help, I found some code: https://github.com/angelrain1/grpc_etcd https://github.com/ccc13/etcd-rs

iwinux commented 5 years ago

In additions to gRPC, etcd v3 also provides a JSON gRPC gateway.