[java-storage] Feature request: expose ChannelPoolSettings on GrpcStorageOptions.Builder

Open
#14,519 0 comments 0 reactions 1 assignee View on GitHub

Maintainers usually reply within 1 day

@Dhriti07 is already working on this.

Since Sep 29, 2026.

  • #3556 by @DeepikaMamidipelly009 — closed without merging

Assessment

Difficulty
3/5
Estimated time
1-2 days
Newbie friendliness
76/100
Issue type
Feature
Clarity
Clearly specified
Activity status
Quiet
Tech stack
grpc, java
Domain
api, backend, cloud

Research direction

Start in GrpcStorageOptions.Builder and follow resolveSettingsAndOpts() to see how InstantiatingGrpcChannelProvider is configured. Add the ChannelPoolSettings builder option, wire it through while preserving the unset default, and verify that the high-level Storage API exposes the configured pool settings.

Written by the indexing model from the issue text.

Description

api: storage

Is your feature request related to a problem? Please describe.

We use StorageOptions.grpc() with Direct Path on GKE for high-throughput writes (WriteChannel, resumable uploads). A single commit can trigger hundreds of concurrent uploads per pod.

GrpcStorageOptions builds InstantiatingGrpcChannelProvider without setChannelPoolSettings(), so the default is effectively one gRPC channel. With ~100+ concurrent RPCs, calls queue on that channel and we see high tail latency and underused bandwidth.

ChannelPoolSettings can be set on StorageSettings + StorageClient, but the high-level Storage API from StorageOptions.grpc().build().getService() offers no way to pass those settings.

(google-cloud-storage 2.34.0+, resolves to 2.55.x in our build.)

Describe the solution you'd like

Add setChannelPoolSettings(ChannelPoolSettings) to GrpcStorageOptions.Builder, wired through to InstantiatingGrpcChannelProvider in resolveSettingsAndOpts(). Default unchanged when unset.

Storage storage = StorageOptions.grpc()
    .setProjectId(projectId)
    .setChannelPoolSettings(ChannelPoolSettings.builder()
        .setInitialChannelCount(8)
        .setMaxChannelCount(16)
        .setMaxRpcsPerChannel(50)
        .build())
    .build()
    .getService();

Describe alternatives you've considered

  • StorageClient + custom StorageSettings — channel pool works, but not compatible with high-level Storage / WriteChannel.
  • Copy resolveSettingsAndOpts() in app code — fragile.
  • Upload concurrency limit in app — does not fix single-channel RPC queuing.
Dominant language
Java
Stars
2.1k
Forks
1.2k
Avg merge
2d 14h
Merged PRs (30d)
192

Getting set up

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

More from googleapis/google-cloud-java

All issues in googleapis/google-cloud-java

Similar issues

More Java issues

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.