-
Notifications
You must be signed in to change notification settings - Fork 396
feat(docs): add devsite-help and snippets for Retries, Update Masks, and OCC for IAM #15308
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
base: main
Are you sure you want to change the base?
Conversation
Summary of ChangesHello @bshaffer, I'm Gemini Code Assist1! I'm currently reviewing this pull request and will post my feedback shortly. In the meantime, here's a summary to help you and other reviewers quickly get up to speed! This pull request significantly enhances the documentation for Google Cloud .NET client libraries by introducing three new guides focused on advanced usage patterns. These guides cover Optimistic Concurrency Control for IAM policies, flexible retry and timeout configurations, and efficient partial resource updates using update masks. Each guide is complemented by practical C# code snippets, providing developers with clear instructions and examples to implement these critical features effectively. Highlights
Using Gemini Code AssistThe full guide for Gemini Code Assist can be found on our documentation page, here are some quick tips. Invoking Gemini You can request assistance from Gemini at any point by creating a comment using either
Customization To customize Gemini Code Assist for GitHub experience, repository maintainers can create a configuration file and/or provide a custom code review style guide (such as PEP-8 for Python) by creating and adding files to a Limitations & Feedback Gemini Code Assist may make mistakes. Please leave feedback on any instances where its feedback is incorrect or counter productive. You can react with 👍 and 👎 on @gemini-code-assist comments. If you're interested in giving your feedback about your experience with Gemini Code Assist for Github and other Google products, sign up here. You can also get AI-powered code generation, chat, as well as code reviews directly in the IDE at no cost with the Gemini Code Assist IDE Extension. Footnotes
|
|
Pull request diff results |
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.
Code Review
This pull request adds valuable documentation and examples for Retries, Update Masks, and Optimistic Concurrency Control for IAM. The documentation content is clear and well-structured. However, all the new C# code snippets contain several compilation errors that need to be addressed. These include incorrect async method signatures, use of an undefined _fixture variable, a missing semicolon, and unused using directives. I've left specific comments with suggestions to fix these issues. Once these are resolved, the snippets will be great examples for users.
ad64163 to
cd55d59
Compare
|
Pull request diff results |
amanda-tarafa
left a comment
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 me know how I can help.
| using Google.Protobuf.WellKnownTypes; | ||
| using Grpc.Core; | ||
|
|
||
| namespace Google.Cloud.Tools.Snippets |
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.
File scoped namespace (no curly brackets, see tools/Google.Cloud.Docs.Snippets/LongRunningOperationsSnippets.cs) for new files, here and in the others.
| { | ||
| public class UpdateMaskSnippets | ||
| { | ||
| public async Task UpdateMasks() |
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.
This won't run as a test. See https://github.com/googleapis/google-cloud-dotnet/blob/main/tools/Google.Cloud.Docs.Snippets/CallSettingsSnippets.cs for an example.
| string projectId = "your-project-id"; | ||
| string secretId = "test-secret"; |
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.
So that this is run, these need to come from the fixture.
| // Required using directives: | ||
| // using Google.Cloud.SecretManager.V1; | ||
| // using Google.Protobuf.WellKnownTypes; | ||
| // using Grpc.Core; |
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 don't have these in the other product neutral samples. Let's keep the consistency.
| - name: Retries | ||
| href: retries.md |
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 have these in CallSettings already.
| @@ -0,0 +1,32 @@ | |||
| # Configuring Retries and Timeouts | |||
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.
Look at the one in call-settings.md and maybe modify it if there's something missing from there, plus, add the sample code that we already have?
| @@ -0,0 +1,26 @@ | |||
| # Optimistic Concurrency Control (OCC) Loop for IAM | |||
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.
| # Optimistic Concurrency Control (OCC) Loop for IAM | |
| # Optimistic Concurrency Control (OCC) for IAM |
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.
And also, why does this need to be IAM specific? I think we can use IAM for examples but the same principles apply to many APIs that have Etags for their resources? (I should have left this commenton the initial content review, but it only occured to me now).
|
|
||
| Optimistic Concurrency Control (OCC) is a strategy used to manage shared resources and prevent "lost updates" or race conditions when multiple users or processes attempt to modify the same resource simultaneously. | ||
|
|
||
| In the context of Google Cloud .NET libraries, IAM Policy objects contain an `Etag` property. When calling `SetIamPolicy`, the client library includes this `Etag`. If the server detects that the `Etag` provided does not match the current version on the server, it throws an RPC exception with the status `Aborted` or `FailedPrecondition`. |
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 any info about the difference between Aborted or FailedPrecondition?
|
|
||
| In the context of Google Cloud .NET libraries, IAM Policy objects contain an `Etag` property. When calling `SetIamPolicy`, the client library includes this `Etag`. If the server detects that the `Etag` provided does not match the current version on the server, it throws an RPC exception with the status `Aborted` or `FailedPrecondition`. | ||
|
|
||
| ## Implementing the OCC Loop |
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.
Same comment as before, I don't think we need to show or describe an actual retry loop. For instance, for someone building a UI to allow users to modify an OCCed resource, they might not want to retry, they might want to notify the user and let the user retry (by clicking the button again) etc.
I followed the examples of other pages in
docs/devsite-help, but it's quite possible I'm missing a critical aspect. I also am not sure how these will be tested.I ran all samples locally to verify they worked but please take a look and review