Skip to content
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

Only require minimal GCP permissions to publish to a topic #3694

Open
birnbuazn opened this issue Mar 25, 2025 · 0 comments · May be fixed by #3717
Open

Only require minimal GCP permissions to publish to a topic #3694

birnbuazn opened this issue Mar 25, 2025 · 0 comments · May be fixed by #3717
Labels
priority: p2 type: bug Something isn't working

Comments

@birnbuazn
Copy link

birnbuazn commented Mar 25, 2025

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

I have simple Spring Cloud Stream 6.0.1 project where I want to publish messages to a GCP topic.

Unfortunately, Spring Cloud Stream will always try to check if a topic exists if it is provisioning the producer destinations in com.google.cloud.spring.stream.binder.pubsub.provisioning.PubSubChannelProvisioner#provisionProducerDestination. This happens even if spring.cloud.stream.gcp.pubsub.default.producer.auto-create-resources is set to false.

The GCP call will fail if the Google IAM identity does not have the required permission pubsub.topics.list to list all topics. Publishing to a specific topic should only require the pubsub.topics.publish permission, but now we have to add the additional list permission for Spring Cloud Stream to work, which should not be required. (see https://cloud.google.com/pubsub/docs/access-control)

Note, that this is similar to #2231, but here we are talking about the producer side of things.

Describe the solution you'd like

Checking the existence of a topic should be optional (or disabled if auto-create-resources is false).

Describe alternatives you've considered

The only viable alternative now is adding an extra permission to the IAM identity used when running the service. This works, but we really want to use a minimal set of permissions and listing all available topics shouldn't be required.

Additional context

Relevant part of the application.yml:

spring:
  cloud:
    function:
      definition: updateRequest

    stream:
      bindings:
        updateRequest-out-0:
          destination: private-edge.ecst.edge.requests

      gcp.pubsub.default:
        producer:
          auto-create-resources: false

Current stack trace when Spring Cloud Stream is trying to make sure that the topic exists:

Failed to create producer binding; retrying in 30 seconds org.springframework.cloud.stream.binder.BinderException: Exception thrown while building outbound endpoint\n\tat org.springframework.cloud.stream.binder.AbstractMessageChannelBinder.doBindProducer(AbstractMessageChannelBinder.java:331) ~[spring-cloud-stream-4.2.0.jar:4.2.0]\n\tat org.springframework.cloud.stream.binder.AbstractMessageChannelBinder.doBindProducer(AbstractMessageChannelBinder.java:103) ~[spring-cloud-stream-4.2.0.jar:4.2.0]\n\tat org.springframework.cloud.stream.binder.AbstractBinder.bindProducer(AbstractBinder.java:153) ~[spring-cloud-stream-4.2.0.jar:4.2.0]\n\tat org.springframework.cloud.stream.binding.BindingService.lambda$rescheduleProducerBinding$4(BindingService.java:378) ~[spring-cloud-stream-4.2.0.jar:4.2.0]\n\tat org.springframework.scheduling.support.DelegatingErrorHandlingRunnable.run(DelegatingErrorHandlingRunnable.java:54) ~[spring-context-6.2.3.jar:6.2.3]\n\tat java.base/java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source) ~[?:?]\n\tat java.base/java.util.concurrent.FutureTask.run(Unknown Source) ~[?:?]\n\tat java.base/java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(Unknown Source) ~[?:?]\n\tat java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) ~[?:?]\n\tat java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) ~[?:?]\n\tat java.base/java.lang.Thread.run(Unknown Source) [?:?]\nCaused by: com.google.api.gax.rpc.PermissionDeniedException: io.grpc.StatusRuntimeException: PERMISSION_DENIED: User not authorized to perform this action.\n\tat com.google.api.gax.rpc.ApiExceptionFactory.createException(ApiExceptionFactory.java:98) ~[gax-2.61.0.jar:2.61.0]\n\tat com.google.api.gax.rpc.ApiExceptionFactory.createException(ApiExceptionFactory.java:41) ~[gax-2.61.0.jar:2.61.0]\n\tat com.google.api.gax.grpc.GrpcApiExceptionFactory.create(GrpcApiExceptionFactory.java:86) ~[gax-grpc-2.61.0.jar:2.61.0]\n\tat com.google.api.gax.grpc.GrpcApiExceptionFactory.create(GrpcApiExceptionFactory.java:66) ~[gax-grpc-2.61.0.jar:2.61.0]\n\tat com.google.api.gax.grpc.GrpcExceptionCallable$ExceptionTransformingFuture.onFailure(GrpcExceptionCallable.java:97) ~[gax-grpc-2.61.0.jar:2.61.0]\n\tat com.google.api.core.ApiFutures$1.onFailure(ApiFutures.java:84) ~[api-common-2.44.0.jar:2.44.0]\n\tat com.google.common.util.concurrent.Futures$CallbackListener.run(Futures.java:1132) ~[guava-33.4.0-jre.jar:?]\n\tat com.google.common.util.concurrent.DirectExecutor.execute(DirectExecutor.java:31) ~[guava-33.4.0-jre.jar:?]\n\tat com.google.common.util.concurrent.AbstractFuture.executeListener(AbstractFuture.java:1307) ~[guava-33.4.0-jre.jar:?]\n\tat com.google.common.util.concurrent.AbstractFuture.complete(AbstractFuture.java:1070) ~[guava-33.4.0-jre.jar:?]\n\tat com.google.common.util.concurrent.AbstractFuture.setException(AbstractFuture.java:819) ~[guava-33.4.0-jre.jar:?]\n\tat io.grpc.stub.ClientCalls$GrpcFuture.setException(ClientCalls.java:568) ~[grpc-stub-1.69.0.jar:1.69.0]\n\tat io.grpc.stub.ClientCalls$UnaryStreamToFuture.onClose(ClientCalls.java:538) ~[grpc-stub-1.69.0.jar:1.69.0]\n\tat io.grpc.PartialForwardingClientCallListener.onClose(PartialForwardingClientCallListener.java:39) ~[grpc-api-1.69.0.jar:1.69.0]\n\tat io.grpc.ForwardingClientCallListener.onClose(ForwardingClientCallListener.java:23) ~[grpc-api-1.69.0.jar:1.69.0]\n\tat io.grpc.ForwardingClientCallListener$SimpleForwardingClientCallListener.onClose(ForwardingClientCallListener.java:40) ~[grpc-api-1.69.0.jar:1.69.0]\n\tat com.google.api.gax.grpc.ChannelPool$ReleasingClientCall$1.onClose(ChannelPool.java:569) ~[gax-grpc-2.61.0.jar:2.61.0]\n\tat io.grpc.internal.ClientCallImpl.closeObserver(ClientCallImpl.java:564) ~[grpc-core-1.69.0.jar:1.69.0]\n\tat io.grpc.internal.ClientCallImpl.access$100(ClientCallImpl.java:72) ~[grpc-core-1.69.0.jar:1.69.0]\n\tat io.grpc.internal.ClientCallImpl$ClientStreamListenerImpl$1StreamClosed.runInternal(ClientCallImpl.java:729) ~[grpc-core-1.69.0.jar:1.69.0]\n\tat io.grpc.internal.ClientCallImpl$ClientStreamListenerImpl$1StreamClosed.runInContext(ClientCallImpl.java:710) ~[grpc-core-1.69.0.jar:1.69.0]\n\tat io.grpc.internal.ContextRunnable.run(ContextRunnable.java:37) ~[grpc-core-1.69.0.jar:1.69.0]\n\tat io.grpc.internal.SerializingExecutor.run(SerializingExecutor.java:133) ~[grpc-core-1.69.0.jar:1.69.0]\n\t... 3 more\n\tSuppressed: com.google.api.gax.rpc.AsyncTaskException: Asynchronous task failed\n\t\tat com.google.api.gax.rpc.ApiExceptions.callAndTranslateApiException(ApiExceptions.java:57) ~[gax-2.61.0.jar:2.61.0]\n\t\tat com.google.api.gax.rpc.UnaryCallable.call(UnaryCallable.java:112) ~[gax-2.61.0.jar:2.61.0]\n\t\tat com.google.cloud.pubsub.v1.TopicAdminClient.getTopic(TopicAdminClient.java:885) ~[google-cloud-pubsub-1.137.0.jar:1.137.0]\n\t\tat com.google.cloud.pubsub.v1.TopicAdminClient.getTopic(TopicAdminClient.java:805) ~[google-cloud-pubsub-1.137.0.jar:1.137.0]\n\t\tat com.google.cloud.spring.pubsub.PubSubAdmin.getTopic(PubSubAdmin.java:137) ~[spring-cloud-gcp-pubsub-6.0.1.jar:6.0.1]\n\t\tat com.google.cloud.spring.stream.binder.pubsub.provisioning.PubSubChannelProvisioner.ensureTopicExists(PubSubChannelProvisioner.java:124) ~[spring-cloud-gcp-pubsub-stream-binder-6.0.1.jar:6.0.1]\n\t\tat com.google.cloud.spring.stream.binder.pubsub.provisioning.PubSubChannelProvisioner.provisionProducerDestination(PubSubChannelProvisioner.java:61) ~[spring-cloud-gcp-pubsub-stream-binder-6.0.1.jar:6.0.1]\n\t\tat com.google.cloud.spring.stream.binder.pubsub.provisioning.PubSubChannelProvisioner.provisionProducerDestination(PubSubChannelProvisioner.java:43) ~[spring-cloud-gcp-pubsub-stream-binder-6.0.1.jar:6.0.1]\n\t\tat org.springframework.cloud.stream.binder.AbstractMessageChannelBinder.doBindProducer(AbstractMessageChannelBinder.java:298) ~[spring-cloud-stream-4.2.0.jar:4.2.0]\n\t\tat org.springframework.cloud.stream.binder.AbstractMessageChannelBinder.doBindProducer(AbstractMessageChannelBinder.java:103) ~[spring-cloud-stream-4.2.0.jar:4.2.0]\n\t\tat org.springframework.cloud.stream.binder.AbstractBinder.bindProducer(AbstractBinder.java:153) ~[spring-cloud-stream-4.2.0.jar:4.2.0]\n\t\tat org.springframework.cloud.stream.binding.BindingService.lambda$rescheduleProducerBinding$4(BindingService.java:378) ~[spring-cloud-stream-4.2.0.jar:4.2.0]\n\t\tat org.springframework.scheduling.support.DelegatingErrorHandlingRunnable.run(DelegatingErrorHandlingRunnable.java:54) ~[spring-context-6.2.3.jar:6.2.3]\n\t\tat java.base/java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source) ~[?:?]\n\t\tat java.base/java.util.concurrent.FutureTask.run(Unknown Source) ~[?:?]\n\t\tat java.base/java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(Unknown Source) ~[?:?]\n\t\tat java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) ~[?:?]\n\t\tat java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) ~[?:?]\n\t\tat java.base/java.lang.Thread.run(Unknown Source) [?:?]\nCaused by: io.grpc.StatusRuntimeException: PERMISSION_DENIED: User not authorized to perform this action.\n\tat io.grpc.Status.asRuntimeException(Status.java:532) ~[grpc-api-1.69.0.jar:1.69.0]\n\tat io.grpc.stub.ClientCalls$UnaryStreamToFuture.onClose(ClientCalls.java:538) ~[grpc-stub-1.69.0.jar:1.69.0]\n\tat io.grpc.PartialForwardingClientCallListener.onClose(PartialForwardingClientCallListener.java:39) ~[grpc-api-1.69.0.jar:1.69.0]\n\tat io.grpc.ForwardingClientCallListener.onClose(ForwardingClientCallListener.java:23) ~[grpc-api-1.69.0.jar:1.69.0]\n\tat io.grpc.ForwardingClientCallListener$SimpleForwardingClientCallListener.onClose(ForwardingClientCallListener.java:40) ~[grpc-api-1.69.0.jar:1.69.0]\n\tat com.google.api.gax.grpc.ChannelPool$ReleasingClientCall$1.onClose(ChannelPool.java:569) ~[gax-grpc-2.61.0.jar:2.61.0]\n\tat io.grpc.internal.ClientCallImpl.closeObserver(ClientCallImpl.java:564) ~[grpc-core-1.69.0.jar:1.69.0]\n\tat io.grpc.internal.ClientCallImpl.access$100(ClientCallImpl.java:72) ~[grpc-core-1.69.0.jar:1.69.0]\n\tat io.grpc.internal.ClientCallImpl$ClientStreamListenerImpl$1StreamClosed.runInternal(ClientCallImpl.java:729) ~[grpc-core-1.69.0.jar:1.69.0]\n\tat io.grpc.internal.ClientCallImpl$ClientStreamListenerImpl$1StreamClosed.runInContext(ClientCallImpl.java:710) ~[grpc-core-1.69.0.jar:1.69.0]\n\tat io.grpc.internal.ContextRunnable.run(ContextRunnable.java:37) ~[grpc-core-1.69.0.jar:1.69.0]\n\tat io.grpc.internal.SerializingExecutor.run(SerializingExecutor.java:133) ~[grpc-core-1.69.0.jar:1.69.0]\n\t... 3 more\n","logging.googleapis.com/sourceLocation":{"function":"org.springframework.cloud.stream.binding.BindingService.rescheduleProducerBinding"},"logging.googleapis.com/insertId":"210026","logging.googleapis.com/trace_sampled":true,"_exception":{"class":"org.springframework.cloud.stream.binder.BinderException","message":"Exception thrown while building outbound endpoint","stackTrace":"org.springframework.cloud.stream.binder.BinderException: Exception thrown while building outbound endpoint\n\tat org.springframework.cloud.stream.binder.AbstractMessageChannelBinder.doBindProducer(AbstractMessageChannelBinder.java:331) ~[spring-cloud-stream-4.2.0.jar:4.2.0]\n\tat org.springframework.cloud.stream.binder.AbstractMessageChannelBinder.doBindProducer(AbstractMessageChannelBinder.java:103) ~[spring-cloud-stream-4.2.0.jar:4.2.0]\n\tat org.springframework.cloud.stream.binder.AbstractBinder.bindProducer(AbstractBinder.java:153) ~[spring-cloud-stream-4.2.0.jar:4.2.0]\n\tat org.springframework.cloud.stream.binding.BindingService.lambda$rescheduleProducerBinding$4(BindingService.java:378) ~[spring-cloud-stream-4.2.0.jar:4.2.0]\n\tat org.springframework.scheduling.support.DelegatingErrorHandlingRunnable.run(DelegatingErrorHandlingRunnable.java:54) ~[spring-context-6.2.3.jar:6.2.3]\n\tat java.base/java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source) ~[?:?]\n\tat java.base/java.util.concurrent.FutureTask.run(Unknown Source) ~[?:?]\n\tat java.base/java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(Unknown Source) ~[?:?]\n\tat java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) ~[?:?]\n\tat java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) ~[?:?]\n\tat java.base/java.lang.Thread.run(Unknown Source) [?:?]\nCaused by: com.google.api.gax.rpc.PermissionDeniedException: io.grpc.StatusRuntimeException: PERMISSION_DENIED: User not authorized to perform this action.\n\tat com.google.api.gax.rpc.ApiExceptionFactory.createException(ApiExceptionFactory.java:98) ~[gax-2.61.0.jar:2.61.0]\n\tat com.google.api.gax.rpc.ApiExceptionFactory.createException(ApiExceptionFactory.java:41) ~[gax-2.61.0.jar:2.61.0]\n\tat com.google.api.gax.grpc.GrpcApiExceptionFactory.create(GrpcApiExceptionFactory.java:86) ~[gax-grpc-2.61.0.jar:2.61.0]\n\tat com.google.api.gax.grpc.GrpcApiExceptionFactory.create(GrpcApiExceptionFactory.java:66) ~[gax-grpc-2.61.0.jar:2.61.0]\n\tat com.google.api.gax.grpc.GrpcExceptionCallable$ExceptionTransformingFuture.onFailure(GrpcExceptionCallable.java:97) ~[gax-grpc-2.61.0.jar:2.61.0]\n\tat com.google.api.core.ApiFutures$1.onFailure(ApiFutures.java:84) ~[api-common-2.44.0.jar:2.44.0]\n\tat com.google.common.util.concurrent.Futures$CallbackListener.run(Futures.java:1132) ~[guava-33.4.0-jre.jar:?]\n\tat com.google.common.util.concurrent.DirectExecutor.execute(DirectExecutor.java:31) ~[guava-33.4.0-jre.jar:?]\n\tat com.google.common.util.concurrent.AbstractFuture.executeListener(AbstractFuture.java:1307) ~[guava-33.4.0-jre.jar:?]\n\tat com.google.common.util.concurrent.AbstractFuture.complete(AbstractFuture.java:1070) ~[guava-33.4.0-jre.jar:?]\n\tat com.google.common.util.concurrent.AbstractFuture.setException(AbstractFuture.java:819) ~[guava-33.4.0-jre.jar:?]\n\tat io.grpc.stub.ClientCalls$GrpcFuture.setException(ClientCalls.java:568) ~[grpc-stub-1.69.0.jar:1.69.0]\n\tat io.grpc.stub.ClientCalls$UnaryStreamToFuture.onClose(ClientCalls.java:538) ~[grpc-stub-1.69.0.jar:1.69.0]\n\tat io.grpc.PartialForwardingClientCallListener.onClose(PartialForwardingClientCallListener.java:39) ~[grpc-api-1.69.0.jar:1.69.0]\n\tat io.grpc.ForwardingClientCallListener.onClose(ForwardingClientCallListener.java:23) ~[grpc-api-1.69.0.jar:1.69.0]\n\tat io.grpc.ForwardingClientCallListener$SimpleForwardingClientCallListener.onClose(ForwardingClientCallListener.java:40) ~[grpc-api-1.69.0.jar:1.69.0]\n\tat com.google.api.gax.grpc.ChannelPool$ReleasingClientCall$1.onClose(ChannelPool.java:569) ~[gax-grpc-2.61.0.jar:2.61.0]\n\tat io.grpc.internal.ClientCallImpl.closeObserver(ClientCallImpl.java:564) ~[grpc-core-1.69.0.jar:1.69.0]\n\tat io.grpc.internal.ClientCallImpl.access$100(ClientCallImpl.java:72) ~[grpc-core-1.69.0.jar:1.69.0]\n\tat io.grpc.internal.ClientCallImpl$ClientStreamListenerImpl$1StreamClosed.runInternal(ClientCallImpl.java:729) ~[grpc-core-1.69.0.jar:1.69.0]\n\tat io.grpc.internal.ClientCallImpl$ClientStreamListenerImpl$1StreamClosed.runInContext(ClientCallImpl.java:710) ~[grpc-core-1.69.0.jar:1.69.0]\n\tat io.grpc.internal.ContextRunnable.run(ContextRunnable.java:37) ~[grpc-core-1.69.0.jar:1.69.0]\n\tat io.grpc.internal.SerializingExecutor.run(SerializingExecutor.java:133) ~[grpc-core-1.69.0.jar:1.69.0]\n\t... 3 more\n\tSuppressed: com.google.api.gax.rpc.AsyncTaskException: Asynchronous task failed\n\t\tat com.google.api.gax.rpc.ApiExceptions.callAndTranslateApiException(ApiExceptions.java:57) ~[gax-2.61.0.jar:2.61.0]\n\t\tat com.google.api.gax.rpc.UnaryCallable.call(UnaryCallable.java:112) ~[gax-2.61.0.jar:2.61.0]\n\t\tat com.google.cloud.pubsub.v1.TopicAdminClient.getTopic(TopicAdminClient.java:885) ~[google-cloud-pubsub-1.137.0.jar:1.137.0]\n\t\tat com.google.cloud.pubsub.v1.TopicAdminClient.getTopic(TopicAdminClient.java:805) ~[google-cloud-pubsub-1.137.0.jar:1.137.0]\n\t\tat com.google.cloud.spring.pubsub.PubSubAdmin.getTopic(PubSubAdmin.java:137) ~[spring-cloud-gcp-pubsub-6.0.1.jar:6.0.1]\n\t\tat com.google.cloud.spring.stream.binder.pubsub.provisioning.PubSubChannelProvisioner.ensureTopicExists(PubSubChannelProvisioner.java:124) ~[spring-cloud-gcp-pubsub-stream-binder-6.0.1.jar:6.0.1]\n\t\tat com.google.cloud.spring.stream.binder.pubsub.provisioning.PubSubChannelProvisioner.provisionProducerDestination(PubSubChannelProvisioner.java:61) ~[spring-cloud-gcp-pubsub-stream-binder-6.0.1.jar:6.0.1]\n\t\tat com.google.cloud.spring.stream.binder.pubsub.provisioning.PubSubChannelProvisioner.provisionProducerDestination(PubSubChannelProvisioner.java:43) ~[spring-cloud-gcp-pubsub-stream-binder-6.0.1.jar:6.0.1]\n\t\tat org.springframework.cloud.stream.binder.AbstractMessageChannelBinder.doBindProducer(AbstractMessageChannelBinder.java:298) ~[spring-cloud-stream-4.2.0.jar:4.2.0]\n\t\tat org.springframework.cloud.stream.binder.AbstractMessageChannelBinder.doBindProducer(AbstractMessageChannelBinder.java:103) ~[spring-cloud-stream-4.2.0.jar:4.2.0]\n\t\tat org.springframework.cloud.stream.binder.AbstractBinder.bindProducer(AbstractBinder.java:153) ~[spring-cloud-stream-4.2.0.jar:4.2.0]\n\t\tat org.springframework.cloud.stream.binding.BindingService.lambda$rescheduleProducerBinding$4(BindingService.java:378) ~[spring-cloud-stream-4.2.0.jar:4.2.0]\n\t\tat org.springframework.scheduling.support.DelegatingErrorHandlingRunnable.run(DelegatingErrorHandlingRunnable.java:54) ~[spring-context-6.2.3.jar:6.2.3]\n\t\tat java.base/java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source) ~[?:?]\n\t\tat java.base/java.util.concurrent.FutureTask.run(Unknown Source) ~[?:?]\n\t\tat java.base/java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(Unknown Source) ~[?:?]\n\t\tat java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) ~[?:?]\n\t\tat java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) ~[?:?]\n\t\tat java.base/java.lang.Thread.run(Unknown Source) [?:?]\nCaused by: io.grpc.StatusRuntimeException: PERMISSION_DENIED: User not authorized to perform this action.\n\tat io.grpc.Status.asRuntimeException(Status.java:532) ~[grpc-api-1.69.0.jar:1.69.0]\n\tat io.grpc.stub.ClientCalls$UnaryStreamToFuture.onClose(ClientCalls.java:538) ~[grpc-stub-1.69.0.jar:1.69.0]\n\tat io.grpc.PartialForwardingClientCallListener.onClose(PartialForwardingClientCallListener.java:39) ~[grpc-api-1.69.0.jar:1.69.0]\n\tat io.grpc.ForwardingClientCallListener.onClose(ForwardingClientCallListener.java:23) ~[grpc-api-1.69.0.jar:1.69.0]\n\tat io.grpc.ForwardingClientCallListener$SimpleForwardingClientCallListener.onClose(ForwardingClientCallListener.java:40) ~[grpc-api-1.69.0.jar:1.69.0]\n\tat com.google.api.gax.grpc.ChannelPool$ReleasingClientCall$1.onClose(ChannelPool.java:569) ~[gax-grpc-2.61.0.jar:2.61.0]\n\tat io.grpc.internal.ClientCallImpl.closeObserver(ClientCallImpl.java:564) ~[grpc-core-1.69.0.jar:1.69.0]\n\tat io.grpc.internal.ClientCallImpl.access$100(ClientCallImpl.java:72) ~[grpc-core-1.69.0.jar:1.69.0]\n\tat io.grpc.internal.ClientCallImpl$ClientStreamListenerImpl$1StreamClosed.runInternal(ClientCallImpl.java:729) ~[grpc-core-1.69.0.jar:1.69.0]\n\tat io.grpc.internal.ClientCallImpl$ClientStreamListenerImpl$1StreamClosed.runInContext(ClientCallImpl.java:710) ~[grpc-core-1.69.0.jar:1.69.0]\n\tat io.grpc.internal.ContextRunnable.run(ContextRunnable.java:37) ~[grpc-core-1.69.0.jar:1.69.0]\n\tat io.grpc.internal.SerializingExecutor.run(SerializingExecutor.java:133) ~[grpc-core-1.69.0.jar:1.69.0]\n\t... 3
@jinseopkim0 jinseopkim0 added priority: p2 type: bug Something isn't working labels Apr 2, 2025
SheheryarAamir added a commit to SheheryarAamir/spring-cloud-gcp that referenced this issue Apr 3, 2025
…sts or create one, only if auto create resource is true
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
priority: p2 type: bug Something isn't working
Projects
None yet
2 participants