Hacktoberfest 2026: những issue maintainer đã đánh dấu cho tháng Mười, đang mở và phù hợp người mới. Xem issue Hacktoberfest

Temporal SDK gRPC calls fail with DEADLINE_EXCEEDED after node restart (GraalVM / K8s)

Đang mở
#2,840 0 bình luận 0 reaction 0 người được giao Xem trên GitHub

Maintainer thường phản hồi trong vòng 1 ngày

Chưa có ai nhận issue này.

Đánh giá

Độ khó
4/5
Thời gian dự kiến
3-5 ngày
Mức phù hợp với người mới
35/100
Loại issue
Lỗi
Độ rõ ràng
Cần làm rõ
Mức độ hoạt động
Ít trao đổi
Công nghệ
grpc, java, kubernetes, spring-boot

Hướng nghiên cứu

Bắt đầu với bản demo temporal-graalvm-k8s được liên kết, quá trình cài đặt Helm của nó và lệnh gọi listNamespaces khi khởi động. Tái hiện lỗi bằng cách drain hoặc khởi động lại một node Kubernetes, sau đó so sánh hành vi của native-image với các lần chạy trên JVM và ngoài Kubernetes bằng các log DEADLINE_EXCEEDED đã được báo cáo. Được xem là hoàn tất khi ứng dụng kết nối lại và listNamespaces thành công nhanh chóng trong khi cụm Temporal vẫn ở trạng thái ổn định.

Do mô hình lập chỉ mục viết ra từ nội dung của issue.

Mô tả

When a Spring Boot application using the Temporal Java SDK is compiled as a GraalVM native image and deployed in Kubernetes, the application fails to communicate with Temporal after node restarts or pod rescheduling.

The same application works correctly:

  • ✅ On JVM (non-native)
  • ✅ In Docker outside Kubernetes
  • ❌ Fails in Kubernetes when running as GraalVM native image

This suggests a compatibility issue between Temporal Java SDK and GraalVM native runtime, potentially related to:

  • gRPC channel lifecycle
  • DNS resolution / service discovery
  • resource or reflection configuration
  • connection reuse after pod rescheduling
Steps to Reproduce
  1. Install Temporal using official Helm chart - https://github.com/temporalio/helm-charts
  2. Deploy demo application - https://github.com/olegdibrov/temporal-graalvm-k8s
    Install the app:
    helm install control {path/to/chart}

Application logic (executed on startup):

List<DescribeNamespaceResponse> namespaces = workflowClient
    .getWorkflowServiceStubs()
    .blockingStub()
    .listNamespaces(ListNamespacesRequest.newBuilder().build())
    .getNamespacesList();
log.info("Found {} namespaces", namespaces.size());
  1. Restart Kubernetes node OR drain node:
    kubectl drain <node> --ignore-daemonsets
    Observe application startup behavior
Actual Behavior

Application fails to start for 10–30 minutes

Repeated errors:
io.grpc.StatusRuntimeException: DEADLINE_EXCEEDED: Deadline CallOptions was exceeded after 9.999s
Temporal cluster is healthy (all pods ready)
Eventually, the application may recover without restart

Expected Behavior
  • Application should reconnect to Temporal immediately after pod restart
  • listNamespaces should succeed consistently
  • No prolonged unavailability if Temporal cluster is healthy
Important Observations
  • Issue only occurs in GraalVM native image
  • Does NOT reproduce on JVM
  • Does NOT reproduce outside Kubernetes
  • Temporal services are reachable and healthy during failure window

Delay (~10–30 minutes) suggests:

  • stale DNS cache
  • broken gRPC channel reuse
  • or native-image-related networking issue
Environment
  • Temporal SDK: 1.33.0
  • GraalVM: 25
  • Java: 25
  • Spring Boot: 3.5.13
  • Kubernetes: v1.30.5
Logs

Example error:

io.grpc.StatusRuntimeException: DEADLINE_EXCEEDED: Deadline CallOptions was exceeded after 9.999786125s

Ngôn ngữ chính
Java
Star
434
Fork
260
Merge trung bình
2 ngày 18 giờ
Pull request đã merge (30 ngày)
24

Chuẩn bị môi trường

Bắt đầu từ đâu

  1. Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
  2. Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
  3. Fork repository và làm thay đổi trên một nhánh.
  4. Mở pull request có tham chiếu số hiệu của issue.

Issue khác của temporalio/sdk-java

Tất cả issue của temporalio/sdk-java

Issue tương tự

Thêm issue về Java

Nhận issue mới trong hộp thư của bạn

Bản tóm tắt ngắn những issue GitHub phù hợp với người mới.