Skip to content

feat(generator): add model flag and allowlist parser for resumable upload RPCs - #14317

Draft
whowes wants to merge 1 commit into
whowes/resumable-upload-internal-headersfrom
whowes/generator-allowlist-parser
Draft

feat(generator): add model flag and allowlist parser for resumable upload RPCs#14317
whowes wants to merge 1 commit into
whowes/resumable-upload-internal-headersfrom
whowes/generator-allowlist-parser

Conversation

@whowes

@whowes whowes commented Sep 9, 2026

Copy link
Copy Markdown
Contributor

Adds the isResumableUpload() property to the generator's Method model and wires pattern matching in Parser.java against an initially empty allowlist. The showcase test proto is also added with a hermetic test adapter to enable isolated unit testing across subsequent composers.

@gemini-code-assist gemini-code-assist Bot left a comment

Copy link
Copy Markdown
Contributor

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 introduces support for identifying resumable upload methods in the GAPIC generator by adding an isResumableUpload property to the Method model and updating the Parser to match RPC names against an allowlist. The review feedback suggests populating the RESUMABLE_UPLOAD_ALLOWLIST_PATTERNS with the showcase service's pattern to make the parser logic functional and testable, which would also allow the removal of a manual workaround in TestProtoLoader and enable a proper assertion in ParserTest.

Comment on lines +139 to +140
private static final ImmutableList<Pattern> RESUMABLE_UPLOAD_ALLOWLIST_PATTERNS =
ImmutableList.of();

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

medium

The RESUMABLE_UPLOAD_ALLOWLIST_PATTERNS list is currently empty, which means no RPCs will ever be identified as resumable uploads by the parser. To make this functional and testable, we should add the showcase service's pattern to this list. This also allows us to write a proper assertion in ParserTest and avoid the manual workaround in TestProtoLoader.

Suggested change
private static final ImmutableList<Pattern> RESUMABLE_UPLOAD_ALLOWLIST_PATTERNS =
ImmutableList.of();
private static final ImmutableList<Pattern> RESUMABLE_UPLOAD_ALLOWLIST_PATTERNS =
ImmutableList.of(
Pattern.compile("google\\.showcase\\.v1beta1\\.ResumableUploadService\\.UploadMedia"));

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

This omission is intentional - allowlist will be populated when all composers are complete, unit tests use a different mechanism to enable for now.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Do we have to wait until composers are complete? Is it to prevent accidentally generation? I think we can at least add the showcase methods here.

@whowes whowes Sep 11, 2026

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

My main motivation here is so that we can generate the showcase ResumableUploadService client library cleanly without resumable upload support (#14324) followed immediately by the regeneration with support added via being allowlisted (#14325). IMO the diff on the latter PR gives a clear rollup overview of the resumable upload changes across the client library that's much easier to review than if the whole generation was bundled together, and adds value that we don't get from just the diffs we see in the individual composer PRs.

I originally tried to do the baseline generation earlier followed by allowlisting (before the composer changes) but I couldn't get it to work across intermediate PRs with both verify.sh working AND the generated library compiling. So keeping the allowlist empty until all composers are in place is was what I landed on.

Comment on lines +229 to +231
Method uploadMethod = methods.get(0);
assertEquals("UploadMedia", uploadMethod.name());
assertFalse(uploadMethod.isResumableUpload());

This comment was marked as outdated.

Comment on lines +294 to +319
return GapicContext.builder()
.setMessages(messageTypes)
.setResourceNames(resourceNames)
.setServices(adaptShowcaseResumableUploadForTest(services))
.setHelperResourceNames(outputResourceNames)
.setTransport(transport)
.setServiceConfig(GapicServiceConfig.create(Optional.empty()))
.build();
}

private static List<Service> adaptShowcaseResumableUploadForTest(List<Service> services) {
return services.stream()
.map(
s ->
s.toBuilder()
.setMethods(
s.methods().stream()
.map(
m ->
m.name().equals("UploadMedia")
? m.toBuilder().setIsResumableUpload(true).build()
: m)
.collect(Collectors.toList()))
.build())
.collect(Collectors.toList());
}

This comment was marked as outdated.

@whowes
whowes added this pull request to stack #14327 September 9, 2026 06:35
@whowes
whowes force-pushed the whowes/generator-allowlist-parser branch from e7acfcd to aa32171 Compare September 9, 2026 15:50
@whowes
whowes force-pushed the whowes/generator-allowlist-parser branch from aa32171 to 681c369 Compare September 9, 2026 20:16
@whowes
whowes removed this pull request from stack #14327 September 9, 2026 23:45
@whowes
whowes added this pull request to stack #14343 September 9, 2026 23:47
@whowes
whowes force-pushed the whowes/generator-allowlist-parser branch 2 times, most recently from dbc1403 to c7dc7e4 Compare September 10, 2026 06:04
@whowes
whowes force-pushed the whowes/generator-allowlist-parser branch from c7dc7e4 to 8351695 Compare September 11, 2026 17:23
@whowes
whowes removed this pull request from stack #14343 September 11, 2026 17:25
@whowes
whowes changed the base branch from whowes/resumable-upload-settings to whowes/resumable-upload-internal-headers September 11, 2026 17:25
@whowes
whowes added this pull request to stack #14363 September 11, 2026 17:25
@whowes
whowes force-pushed the whowes/generator-allowlist-parser branch from 8351695 to 9b6b8b4 Compare September 11, 2026 20:00
@whowes
whowes force-pushed the whowes/generator-allowlist-parser branch from 9b6b8b4 to 7f9c11a Compare September 11, 2026 21:13
@whowes
whowes force-pushed the whowes/generator-allowlist-parser branch from 7f9c11a to 0447951 Compare September 11, 2026 21:39
@sonarqubecloud

Copy link
Copy Markdown

@sonarqubecloud

Copy link
Copy Markdown

@whowes
whowes marked this pull request as ready for review September 11, 2026 22:30
@whowes
whowes requested review from a team as code owners September 11, 2026 22:30
@whowes
whowes marked this pull request as draft September 11, 2026 22:30
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