-
Notifications
You must be signed in to change notification settings - Fork 10.1k
feat(client/v3/naming): add Attributes into Endpoint and deprecate Metadata #19785
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
feat(client/v3/naming): add Attributes into Endpoint and deprecate Metadata #19785
Conversation
[APPROVALNOTIFIER] This PR is NOT APPROVED This pull-request has been approved by: amosehiguese The full list of commands accepted by this bot can be found here.
Needs approval from an approver in each of these files:
Approvers can indicate their approval by writing |
Hi @amosehiguese. Thanks for your PR. I'm waiting for a etcd-io member to verify that this patch is reasonable to test. If it is, they should reply with Once the patch is verified, the new status will be reflected by the I understand the commands that are listed here. Instructions for interacting with me using PR comments are available here. If you have questions or suggestions related to my behavior, please file an issue against the kubernetes-sigs/prow repository. |
please squash the commits. We also need to update the doc https://etcd.io/docs/v3.5/dev-guide/grpc_naming/
|
Alright. I'll do just that. |
0c64765
to
cbf86a8
Compare
let's update this first together with this PR.
we will discuss & resolve this separately. |
/ok-to-test |
Metadata: up.Endpoint.Metadata, | ||
Addr: up.Endpoint.Addr, | ||
Metadata: up.Endpoint.Metadata, | ||
Attributes: up.Endpoint.Attributes, |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Probably eventually we might want to use Endpoint.Attributes instead of Address.Attributes, as we only care about the LB policy?
Currently we assume each endpoint has only one address, but actually it may contain multiple addresses (we won't change the behavior for now).
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Yeah, I saw it and then realised that the attributes field in the Endpoint was specific to LB-Policy which is the usecase for etcd and wondered why that wasn't used instead. But I have clarity on that now. Thanks
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Probably eventually we might want to use Endpoint.Attributes instead of Address.Attributes, as we only care about the LB policy?
It seems that this comment hasn't been resolved yet.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
We'll have to wait on @dfawley, I guess
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The attributes on the address are passed to our code that creates and manages the connection to that address. This means if there are two Addresses
between name resolver updates with the same IP address but non-equal attributes, we will consider them different and reconnect.
The attributes on the endpoint are for anything else you might want to do. gRPC won't look at your attributes.
One important thing that is still not clear to me: what is your use case for attributes? Why are you adding them into gRPC endpoints/addresses?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Let's do not add Attributes for now...
Given that the current relevance of this field is unclear ATM. Not adding it is the only reasonable call to make.
Just as @dfawley said, "our current philosophy is that if nobody asks for a thing, then we generally don't export it."
So, since etcd is reliant on grpc, taking a similar stance would be advised.
That said, I will kindly leave the deprecated metadata field as is but revert all attempts to introduce the Attributes field.
cc: @ahrtr
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Yes, this PR should be as simple as just adding a deprecation notice for the Metadata field.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I love the sound of that. On it!
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Is there a path to deleting it from etcd, though? Marking it as deprecated is good, but we ultimately want to delete it. It would be great if there was some way to find out who might be using it, if anyone, and talk with them.
I guess as an intermediate step for gRPC, we could stop reading the field entirely (e.g. clear it as soon as it comes out of the resolver)? Maybe with an environment variable to re-enable the behavior in case of emergency?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
We will remove the field in 3.7 (main branch). After we backport the change to 3.6 and 3.5, we will remove it from main branch.
I guess as an intermediate step for gRPC, we could stop reading the field entirely (e.g. clear it as soon as it comes out of the resolver)? Maybe with an environment variable to re-enable the behavior in case of emergency?
I think we are good as long as it doesn't cause any compiling error.
Codecov ReportAttention: Patch coverage is
Additional details and impacted files
... and 73 files with indirect coverage changes @@ Coverage Diff @@
## main #19785 +/- ##
==========================================
- Coverage 68.70% 68.25% -0.45%
==========================================
Files 421 406 -15
Lines 35858 35465 -393
==========================================
- Hits 24635 24206 -429
- Misses 9789 9843 +54
+ Partials 1434 1416 -18 Continue to review full report in Codecov by Sentry.
🚀 New features to boost your workflow:
|
You also need to persist the new added attributes (line 41 in internal/update.go), and read it back in List, etcd/client/v3/naming/endpoints/endpoints_impl.go Lines 175 to 192 in 8f933a5
|
Alright.
I'm on standby.
I will hold off on this then |
You might also need to update grpcproxy etcd/server/proxy/grpcproxy/register.go Line 75 in 8f933a5
|
Got it. |
Pretty much adjust every other usage of the endpoint struct to account for the new Attributes field. Will do that. |
cbf86a8
to
da7ba13
Compare
Two files may also need adjustments but I thought to run it by you first. 👉 endpoints_test.go [integration tests]
👉 cluster.go [grpc-proxy] etcd/server/proxy/grpcproxy/cluster.go Line 146 in 8f933a5
What would you have me do to these files? |
I think
|
Alright then. |
I just mark this as a priority/important-soon task. As mentioned above #19785 (comment), I think we need to backport this PR to release-3.6 and release-3.5, of course we will evaluate the impact. The goal is to get it included in 3.6.0, so that we can remove it in 3.7; otherwise, we will have to completely get rid of the deprecated Metadata field in 3.8 (~6 years later based on current cadence) |
also cc grpc-go tech-lead @dfawley, thx for all the help so far. |
@ahrtr ...and those tests take quite a bit of time to run |
I will be done with this from my end once I'm able to resolve whether or not flaky tests are expected in the e2e suite |
You need to ensure the test failures are not caused by your changes. |
I think I’ll have to run it against the main branch a couple of times to be sure. |
What do you reckon I do? push? cc: @ahrtr |
Windows is only tier 3 support, please try to test it on a linux platform.
Pushing to your dev branch won't break anything. Please review your PR yourself first to ensure it's the best you can deliver. |
Oh, I am actually working on a linux machine running on Azure cloud. This is just my backup pc, so I am forced to doing everything on the cloud.
I definitely will. Thanks for the feedback |
Just a bit of clarification in your docs. This line to be precise. Is this meant to be, "Is it impossible..." or "It is impossible"? cc: @ahrtr |
da7ba13
to
524789c
Compare
Attempting to do this would break these test cases. 👇
👇
Mostly because of the design decision by grpc on the Attributes type to make it impossible to unmarshal attributes from a JSON representation cc: @ahrtr |
524789c
to
3ad2fb6
Compare
3ad2fb6
to
1264be5
Compare
1264be5
to
fc5bed3
Compare
Signed-off-by: Benjamin Wang <[email protected]>
fixes: etcd-io#19706 Signed-off-by: amosehiguese <[email protected]>
fc5bed3
to
2232cb5
Compare
PR needs rebase. Instructions for interacting with me using PR comments are available here. If you have questions or suggestions related to my behavior, please file an issue against the kubernetes-sigs/prow repository. |
@amosehiguese: The following tests failed, say
Full PR test history. Your PR dashboard. Please help us cut down on flakes by linking to an open issue when you hit one in your PR. Instructions for interacting with me using PR comments are available here. If you have questions or suggestions related to my behavior, please file an issue against the kubernetes-sigs/prow repository. I understand the commands that are listed here. |
This implementation adds the new Attributes *attributes.Attributes into Endpoint and deprecate Metadata accordingly. The metadata field is still supported for backward compatibility
Fixes #19706
cc: @ahrtr @siyuanfoundation
Please read https://github.com/etcd-io/etcd/blob/main/CONTRIBUTING.md#contribution-flow.