feat(storage): add support for DirectPath over Interconnect - #14006
feat(storage): add support for DirectPath over Interconnect#14006nidhiii-27 wants to merge 12 commits into
Conversation
There was a problem hiding this comment.
Code Review
This pull request introduces support for DirectPath xDS over Interconnect (on-premise xDS name resolution) in GrpcStorageOptions and InstantiatingGrpcChannelProvider, allowing GCE environment checks to be bypassed when enabled. It also updates endpoint validation to support custom URI schemes like google-c2p:/// and adds corresponding tests. The reviewer suggests dynamically adjusting the log level for the DirectPath fallback warning to avoid excessive warning spam in non-GCE environments, recommending Level.WARNING on GCE and Level.FINE elsewhere.
6b73da7 to
d2bdc4a
Compare
No region tags are edited in this PR.This comment is generated by snippet-bot.
|
d2bdc4a to
21b3acf
Compare
21b3acf to
fb844cb
Compare
[Generated-by: AI]
fix spanner tests failing due to overridden authority for default builder branch [Generated-by: AI]
| "Bypassed because DirectPath over Interconnect (GCI) requires a specialized hybrid network environment (Interconnect and Traffic Director configured for storage-direct) and cannot be validated in standard CI or local workstations.") | ||
| @Test | ||
| public void clientShouldWork_directPathXdsOverInterconnect() throws Exception { | ||
| assumeTrue( |
There was a problem hiding this comment.
We kept assumeTrue alongside @Ignore as an intentional defensive safeguard: storage-direct.googleapis.com is only resolvable in private Interconnect environments and fails name resolution on standard workstations and public CI runners. If @Ignore is lifted in the future (or if tests are executed by a runner that enables ignored tests), assumeTrue ensures the test skips gracefully with an AssumptionViolatedException rather than breaking CI with an UnknownHostException.
Co-authored by AI Agent
There was a problem hiding this comment.
Could we add a comment in the test noting that assumeTrue is intentionally kept as a second-line dynamic guard so future refactors don't clean it up as redundant?
…nect - Generalize DirectPath over Interconnect host and authority handling in InstantiatingGrpcChannelProvider for any service using -direct. convention - Rethrow RuntimeException in extractTargetFromChannelBuilder to surface reflection errors in CI - Remove unused DEFAULT_HOST_DIRECT_PATH constant in GrpcStorageOptions - Add generic non-GCS unit tests in InstantiatingGrpcChannelProviderTest [Generated-by: AI]
- Define DIRECT_PATH_INTERCONNECT_INFIX constant to eliminate duplicated "-direct." string literals - Add explanatory comment in empty catch block of extractAuthorityFromChannelBuilder [Generated-by: AI]
…on in tests - Remove unintended positive test filter from Surefire plugin configuration in gax-grpc/pom.xml, allowing all standard unit tests in InstantiatingGrpcChannelProviderTest to run and restore code coverage. - Inspect authorityOverride field and unwrap builder delegates in InstantiatingGrpcChannelProviderTest#extractAuthorityFromChannelBuilder. [Generated-by: AI]
Replace 4 duplicate invalid endpoint tests with a single parameterized test to address SonarCloud java:S5976. [Generated-by: AI]
|
|
| } | ||
| if (rest.startsWith(oldHost)) { | ||
| int len = oldHost.length(); | ||
| if (rest.length() == len || rest.charAt(len) == ':' || rest.charAt(len) == '/') { |
There was a problem hiding this comment.
A host/authority component can also be immediately followed by a query delimiter (?) or fragment delimiter (#) (e.g., https://storage.googleapis.com?query=val).
Should we include ? and # to ensure full RFC compliance?
| java.lang.reflect.Field field = null; | ||
| while (clazz != null) { | ||
| try { | ||
| field = clazz.getDeclaredField("authority"); |
There was a problem hiding this comment.
IIUC, we can eliminate reflection entirely by using Mockito with RETURNS_SELF on ManagedChannelBuilder.
| "Bypassed because DirectPath over Interconnect (GCI) requires a specialized hybrid network environment (Interconnect and Traffic Director configured for storage-direct) and cannot be validated in standard CI or local workstations.") | ||
| @Test | ||
| public void clientShouldWork_directPathXdsOverInterconnect() throws Exception { | ||
| assumeTrue( |
There was a problem hiding this comment.
Could we add a comment in the test noting that assumeTrue is intentionally kept as a second-line dynamic guard so future refactors don't clean it up as redundant?





google-c2p:///<service>?force-xdstarget scheme.:///syntax (e.g.google-c2p:///).storage-direct.googleapis.comand override the request authority to storage.googleapis.com for secure TLS handshakes.