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.
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.GrpcStorageOptionsbuildsInstantiatingGrpcChannelProviderwithoutsetChannelPoolSettings(), 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.ChannelPoolSettingscan be set onStorageSettings+StorageClient, but the high-levelStorageAPI fromStorageOptions.grpc().build().getService()offers no way to pass those settings.(
google-cloud-storage2.34.0+, resolves to 2.55.x in our build.)Describe the solution you'd like
Add
setChannelPoolSettings(ChannelPoolSettings)toGrpcStorageOptions.Builder, wired through toInstantiatingGrpcChannelProviderinresolveSettingsAndOpts(). Default unchanged when unset.Describe alternatives you've considered
StorageClient+ customStorageSettings— channel pool works, but not compatible with high-levelStorage/WriteChannel.resolveSettingsAndOpts()in app code — fragile.