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

Add new classes for eliminating xds config tears #11740

Open
wants to merge 10 commits into
base: master
Choose a base branch
from

Conversation

larry-safran
Copy link
Contributor

@larry-safran larry-safran commented Dec 11, 2024

This is just defining the XdsDependencyManager and associated classes; no movement of any functionality.

@larry-safran larry-safran requested a review from ejona86 December 11, 2024 02:56
@larry-safran larry-safran marked this pull request as draft December 11, 2024 02:56
Copy link
Member

@ejona86 ejona86 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The shape looks fine.

@larry-safran larry-safran force-pushed the XdsDependencyManager branch 2 times, most recently from f5090ab to 9fcbe4c Compare January 6, 2025 22:13
Copy link

linux-foundation-easycla bot commented Jan 7, 2025

CLA Signed

The committers listed above are authorized under a signed CLA.

@larry-safran larry-safran marked this pull request as ready for review January 7, 2025 05:35
@larry-safran larry-safran requested a review from ejona86 January 7, 2025 05:35
@larry-safran
Copy link
Contributor Author

Ready for review @ejona86

Copy link
Member

@ejona86 ejona86 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I still have a good amount to review. Sending what I have.

xds/src/main/java/io/grpc/xds/XdsConfig.java Outdated Show resolved Hide resolved
xds/src/main/java/io/grpc/xds/XdsConfig.java Outdated Show resolved Hide resolved
xds/src/main/java/io/grpc/xds/XdsConfig.java Outdated Show resolved Hide resolved
return builder.toString();
}

public String getClusterName() {
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why aren't the fields private if there are getters?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Originally didn't have getters, but you are right they should be private.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

XdsClusterConfig's fields are still non-private.

xds/src/main/java/io/grpc/xds/XdsDependencyManager.java Outdated Show resolved Hide resolved
case AGGREGATE:
for (String cluster : cdsUpdate.prioritizedClusterNames()) {
CdsWatcher clusterWatcher =
(CdsWatcher) resourceWatchers.get(CLUSTER_RESOURCE).watchers.get(cluster);
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

What if this cluster is used by another aggregate cluster or used directly by the route? I think that same sort of problem could exist for EDS. Just because it isn't any more by this cluster doesn't mean it isn't used any more.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I thought that clusters couldn't be in multiple aggregates. I started implementing a more complicated tracking of who was using a cluster, but believed that the situations you listed weren't allowed so kept it simple.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm not aware of such a restriction. Look into the requirements here.

xds/src/main/java/io/grpc/xds/XdsDependencyManager.java Outdated Show resolved Hide resolved
}

typeWatchers.add(resourceName, watcher);
xdsClient.watchXdsResource(type, resourceName, watcher);
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Use the 4-arg version, to pass in the executor to use (I assume syncContext). I think we would have deprecated/deleted this 3-arg version, but it is used a lot in tests. If you enter the syncContext manually within the callback, then ADS flow control stops working properly.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Done

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

You added syncContext here, but you also added syncContext.execute() to the resource watchers. That means they never will do their processing in-line. Remove the syncContext.execute() from the resource watcher callbacks.

Copy link
Member

@ejona86 ejona86 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Nothing really new here; just a quick drive-by. Still need to look through the other parts of the PR.

return clusters;
}

public static class XdsClusterConfig {
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

final

return builder.toString();
}

public String getClusterName() {
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

XdsClusterConfig's fields are still non-private.


XdsClusterConfig(String clusterName, CdsUpdate clusterResource,
StatusOr<EdsUpdate> endpoint) {
this.clusterName = clusterName;
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

checkNotNull?

case AGGREGATE:
for (String cluster : cdsUpdate.prioritizedClusterNames()) {
CdsWatcher clusterWatcher =
(CdsWatcher) resourceWatchers.get(CLUSTER_RESOURCE).watchers.get(cluster);
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm not aware of such a restriction. Look into the requirements here.

}

typeWatchers.add(resourceName, watcher);
xdsClient.watchXdsResource(type, resourceName, watcher);
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

You added syncContext here, but you also added syncContext.execute() to the resource watchers. That means they never will do their processing in-line. Remove the syncContext.execute() from the resource watcher callbacks.

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

Successfully merging this pull request may close these issues.

2 participants