Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Support for etcd3 #16

Open
jmlMetaswitch opened this issue Feb 10, 2017 · 16 comments
Open

Support for etcd3 #16

jmlMetaswitch opened this issue Feb 10, 2017 · 16 comments

Comments

@jmlMetaswitch
Copy link

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

@jimmycuadra
Copy link
Owner

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
Copy link
Author

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
Copy link

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
Copy link

I would be happy to help implement this.

@jimmycuadra
Copy link
Owner

jimmycuadra commented Dec 14, 2018

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

@tmccombs
Copy link

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
Copy link
Owner

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
Copy link

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
Copy link

thedodd commented Jan 13, 2019

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.

  • We can just create a proto directory in this repo with all of the needed protos.
  • Introduce a build.rs which will generate the Rust code from the protos for us.
  • Then we just build out the interface on top of that, nest it under a v3 module or something like that (as proposed above).

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

@tmccombs
Copy link

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
Copy link

thedodd commented Jan 17, 2019

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

@tmccombs
Copy link

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

done

@thehappycoder
Copy link

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

@tmccombs
Copy link

tmccombs commented Apr 5, 2019

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

@thehappycoder
Copy link

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
Copy link

iwinux commented Sep 27, 2019

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

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

7 participants