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

flagd: align retry defaults with spec, fix retry `maxAttempts`, emit STALE on stream errors

Đang mở
#408 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
68/100
Loại issue
Lỗi
Độ rõ ràng
Đặc tả rõ ràng
Mức độ hoạt động
Ít trao đổi
Công nghệ
grpc, python
Lĩnh vực
api, backend

Hướng nghiên cứu

Bắt đầu với config.py:31-32 và so sánh chính sách retry trong resolvers/grpc.py:105 và resolvers/process/connector/grpc_watcher.py:82 với đặc tả được tham chiếu. Đọc _state_change_callback tại grpc_watcher.py:178, _handle_rpc_error tại :273 và _wait_before_reconnect tại :318 để theo dõi việc xử lý lỗi stream. Hoàn tất khi các giá trị mặc định và maxAttempts khớp với đặc tả, đồng thời việc ngắt kết nối stream phát ra STALE rồi đến ERROR sau thời gian gia hạn retry.

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

Mô tả

We must implement open-feature/flagd#2027, which proposes changing the spec defaults so the stream-reconnect backoff can't leave us disconnected longer than the stale grace period.

  • config.py:31 DEFAULT_RETRY_BACKOFF_MAX: 12000 -> 5000
  • config.py:32 DEFAULT_RETRY_GRACE_PERIOD_SECONDS: 5 -> 10

Both resolvers also set maxAttempts to 3 (resolvers/grpc.py:105, resolvers/process/connector/grpc_watcher.py:82), but the spec's retry policy specifies 4 (the initial attempt plus retries at 1s, 2s, 4s); should be 3 -> 4. Harmless to fix now since nothing clamps at a 5000 cap.

Separately, we don't emit STALE on sync-stream errors. _state_change_callback (grpc_watcher.py:178) only emits STALE when the gRPC channel enters TRANSIENT_FAILURE, and a stream-level error doesn't change channel state, so _handle_rpc_error (:273) logs at debug and we silently wait retry_backoff_max_ms in _wait_before_reconnect (:318) before re-establishing. For that whole window we're disconnected while still reporting READY.

Measured on 0.5.2, in-process resolver, flagd latest:

Scenario Result
stream_deadline_ms=3000, flagd untouched stream dies at 3.01s, reconnects at 15.01s, zero lifecycle events
default deadline, flagd killed for 1.3s zero lifecycle events

With the default stream_deadline_ms of 600000 that's a silent 12s disconnect every ~10 minutes. Java, Go and JS all emit STALE on stream error here, and per the spec a stream disconnect should emit STALE, then ERROR after retryGracePeriod.

Ngôn ngữ chính
Python
Star
27
Fork
33
Merge trung bình
1 ngày 11 giờ
Pull request đã merge (30 ngày)
20

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 open-feature/python-sdk-contrib

Tất cả issue của open-feature/python-sdk-contrib

Issue tương tự

Thêm issue về Python

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.