Skip to content

feat(sdk): use connect-rpc for GRPC #244

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

Open
wants to merge 49 commits into
base: main
Choose a base branch
from
Open

Conversation

mkleene
Copy link
Contributor

@mkleene mkleene commented Apr 21, 2025

  • pull a TokenSource out of GRPCAuthInterceptor. This lets us keep the token code in Java while using idiomatic Kotlin stuff to modify the request

buf changes

  • upgrade buf to v2
  • remove buf generation from examples. Unless we need to call tagging or something we already have everything we need in sdk
  • move the service definitions to test so that we don't ship things that we are just using for tests

dependency updates

address normalization

  • If running in plaintext mode we assume that <hostname>:<port> addresses are http URLs, without plaintext mode they become https URLs.
  • In non-plaintext mode we convert http://example.org:80 to https://example.org:80. This is similar to what would have happened before; we'd use TLS to connect to example.org:80

@mkleene mkleene changed the title Feature/connect rpc feat(sdk): use connect-rpc for GRPC Apr 21, 2025
@mkleene mkleene force-pushed the feature/connect-rpc branch from ad65930 to cb472ef Compare April 21, 2025 19:33
@mkleene mkleene marked this pull request as ready for review April 21, 2025 21:46
@mkleene mkleene requested a review from a team as a code owner April 21, 2025 21:46
@mkleene mkleene force-pushed the feature/connect-rpc branch from 4ecb6f0 to 78442f2 Compare April 22, 2025 14:01
@mkleene mkleene requested a review from Copilot April 28, 2025 13:19
Copy link
Contributor

@Copilot Copilot AI left a comment

Choose a reason for hiding this comment

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

Pull Request Overview

This PR migrates the GRPC service calls to use connect‑rpc’s blocking APIs and updates buf configuration to v2, while also refactoring the token extraction in the GRPCAuthInterceptor for idiomatic Kotlin usage. Key changes include replacing asynchronous .get() calls with ResponseMessageKt.getOrThrow blocking calls, updating generated policy imports, and revising buf configuration files.

Reviewed Changes

Copilot reviewed 26 out of 32 changed files in this pull request and generated no comments.

Show a summary per file
File Description
sdk/Config.java Replaced the deprecated policy.Value import with the generated version.
sdk/Autoconfigure.java Updated to use AttributesServiceClient with blocking calls and adjusted decoding.
sdk/AddressNormalizer.java Introduced a new utility for normalizing address URLs based on plaintext mode.
sdk/buf.yaml & sdk/buf.gen.yaml Upgraded configuration files to buf v2 with updated linting and plugin settings.
examples/* Modified service calls to use the blocking API with ResponseMessageKt.getOrThrow.
Files not reviewed (6)
  • examples/buf.gen.yaml: Language not supported
  • examples/buf.yaml: Language not supported
  • examples/pom.xml: Language not supported
  • keys/kas-cert.pem: Language not supported
  • pom.xml: Language not supported
  • sdk/pom.xml: Language not supported

@mkleene mkleene requested a review from Copilot April 28, 2025 17:35
Copy link
Contributor

@Copilot Copilot AI left a comment

Choose a reason for hiding this comment

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

Pull Request Overview

This PR refactors the GRPC client integration to use the connect-rpc library and updates buf configuration to v2 while adjusting address normalization logic. Key changes include:

  • Replacing the legacy GRPC stub creation with a new AccessServiceClient using a blocking API.
  • Upgrading buf configuration files and removing buf generation from the examples.
  • Implementing address normalization with support for plaintext mode and leveraging a new AddressNormalizer utility.

Reviewed Changes

Copilot reviewed 29 out of 34 changed files in this pull request and generated no comments.

Show a summary per file
File Description
sdk/src/main/java/io/opentdf/platform/sdk/KASClient.java Replaces GRPC stub creation and updates methods to use blocking calls with proper error handling via ResponseMessageKt.getOrThrow.
sdk/src/main/java/io/opentdf/platform/sdk/Config.java Updates import references to generated packages.
sdk/src/main/java/io/opentdf/platform/sdk/Autoconfigure.java Replaces asynchronous GRPC calls with blocking variants.
sdk/src/main/java/io/opentdf/platform/sdk/AddressNormalizer.java Introduces a new utility class for normalizing addresses based on plaintext mode.
sdk/buf.yaml & sdk/buf.gen.yaml Upgrades buf configuration to version v2 and adjusts generation options accordingly.
examples/* Updates examples to use blocking GRPC calls from connect-rpc with getOrThrow for error handling.
Files not reviewed (5)
  • examples/buf.gen.yaml: Language not supported
  • examples/buf.yaml: Language not supported
  • examples/pom.xml: Language not supported
  • pom.xml: Language not supported
  • sdk/pom.xml: Language not supported
Comments suppressed due to low confidence (1)

sdk/src/main/java/io/opentdf/platform/sdk/KASClient.java:254

  • [nitpick] Consider renaming the variable 'req' (and the later 'request' reuse) to more descriptive names (e.g. 'rewrapRequestBuilder' and 'rewrapResponseRequest') to improve clarity in the unwrapNanoTDF method.
var req = RewrapRequest.newBuilder()

@mkleene mkleene requested a review from Copilot April 30, 2025 14:14
Copy link
Contributor

@Copilot Copilot AI left a comment

Choose a reason for hiding this comment

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

Pull Request Overview

This PR updates the SDK to use connect-rpc for GRPC communication while also reorganizing the codebase to use generated service definitions instead of shipping test-only code. The key changes include replacing gRPC stubs with connect-rpc clients, updating buf configuration files to version v2 with new generation rules, and aligning example modules to use the new blocking API calls.

Reviewed Changes

Copilot reviewed 30 out of 35 changed files in this pull request and generated no comments.

Show a summary per file
File Description
sdk/src/main/java/io/opentdf/platform/sdk/KASClient.java Migrates from gRPC channels to connect-rpc with updated blocking calls and error handling.
sdk/src/main/java/io/opentdf/platform/sdk/Config.java Updates import references and minor code cleanup.
sdk/src/main/java/io/opentdf/platform/sdk/Autoconfigure.java Replaces policy package imports with generated equivalents and updates service calls.
sdk/src/main/java/io/opentdf/platform/sdk/AddressNormalizer.java Introduces a new utility for normalizing addresses compatible with plaintext settings.
sdk/buf.yaml and sdk/buf.gen.yaml Upgrades configuration versions and adjusts generation options.
examples/* Updates example calls to use the new connect-rpc blocking API methods.
Files not reviewed (5)
  • examples/buf.gen.yaml: Language not supported
  • examples/buf.yaml: Language not supported
  • examples/pom.xml: Language not supported
  • pom.xml: Language not supported
  • sdk/pom.xml: Language not supported
Comments suppressed due to low confidence (2)

sdk/src/main/java/io/opentdf/platform/sdk/KASClient.java:105

  • [nitpick] Consider using a unified error handling utility; here 'RequestHelper.getOrThrow' is used while other parts of the codebase use 'ResponseMessageKt.getOrThrow'.
resp = RequestHelper.getOrThrow(req);

sdk/src/main/java/io/opentdf/platform/sdk/KASClient.java:261

  • [nitpick] Consider using consistent variable naming for request objects. The variable 'req' is renamed to 'request' in close proximity, which might be confusing.
var request = getStub(keyAccess.url).rewrapBlocking(req, Collections.emptyMap()).execute();

Copy link

Quality Gate Failed Quality Gate failed

Failed conditions
0.0% Coverage on New Code (required ≥ 80%)

See analysis details on SonarQube Cloud

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.

1 participant