Skip to content

Conversation

@bshaffer
Copy link

@bshaffer bshaffer commented Dec 8, 2025

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

  1. Docs content
  2. Sample code
  3. How I've connected things up

@bshaffer bshaffer requested a review from a team as a code owner December 8, 2025 21:41
@gemini-code-assist
Copy link
Contributor

Summary of Changes

Hello @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

  • New Documentation Pages: Added comprehensive guides for Optimistic Concurrency Control (OCC) for IAM, configuring Retries and Timeouts, and utilizing Update Masks.
  • C# Code Snippets: Introduced corresponding C# code examples to illustrate the practical application of OCC, retry mechanisms, and update masks within Google Cloud .NET client libraries.
  • Table of Contents Integration: Updated the docs/devsite-help/toc.yml file to ensure the new documentation pages are discoverable and properly linked within the documentation structure.
Using Gemini Code Assist

The 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 /gemini <command> or @gemini-code-assist <command>. Below is a summary of the supported commands on the current page.

Feature Command Description
Code Review /gemini review Performs a code review for the current pull request in its current state.
Pull Request Summary /gemini summary Provides a summary of the current pull request in its current state.
Comment @gemini-code-assist Responds in comments when explicitly tagged, both in pull request comments and review comments.
Help /gemini help Displays a list of available commands.

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 .gemini/ folder in the base of the repository. Detailed instructions can be found here.

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

  1. Review the Privacy Notices, Generative AI Prohibited Use Policy, Terms of Service, and learn how to configure Gemini Code Assist in GitHub here. Gemini can make mistakes, so double check it and use code with caution.

@github-actions
Copy link

github-actions bot commented Dec 8, 2025

Pull request diff results
No APIs have changed in this PR. Exiting diff.

Copy link
Contributor

@gemini-code-assist gemini-code-assist bot left a 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.

@bshaffer bshaffer force-pushed the add-client-help-docs branch from ad64163 to cd55d59 Compare December 10, 2025 22:13
@googleapis googleapis deleted a comment from github-actions bot Dec 10, 2025
@github-actions
Copy link

Pull request diff results
No APIs have changed in this PR. Exiting diff.

Copy link
Contributor

@amanda-tarafa amanda-tarafa left a 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
Copy link
Contributor

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()
Copy link
Contributor

Choose a reason for hiding this comment

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

Comment on lines +25 to +26
string projectId = "your-project-id";
string secretId = "test-secret";
Copy link
Contributor

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.

Comment on lines +29 to +32
// Required using directives:
// using Google.Cloud.SecretManager.V1;
// using Google.Protobuf.WellKnownTypes;
// using Grpc.Core;
Copy link
Contributor

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.

Comment on lines +33 to +34
- name: Retries
href: retries.md
Copy link
Contributor

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

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

Choose a reason for hiding this comment

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

Suggested change
# Optimistic Concurrency Control (OCC) Loop for IAM
# Optimistic Concurrency Control (OCC) for IAM

Copy link
Contributor

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`.
Copy link
Contributor

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

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.

@googleapis googleapis deleted a comment from github-actions bot Dec 16, 2025
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