Azure / Azure/connectors-python-sdk
Align retry safety for mutating connector operations across SDKs
- Ngôn ngữ chính
- Python
- Star
- 0
- Fork
- 3
- Merge trung bình
- 2 ngày 2 giờ
- Pull request đã merge (30 ngày)
- 11
Mô tả
## Description
Align the Python Connector SDK's retry safety contract with the Node.js SDK behavior introduced in [Azure/Connectors-NodeJS-SDK PR #91](https://github.com/Azure/Connectors-NodeJS-SDK/pull/91).
At `main` commit `d273862108d16615009572d730c12950be040a8c`, `ConnectorHttpClient._send_with_retry` retries every HTTP method for `429`, every `5xx` response, and `aiohttp.ClientError`. `ConnectorClientOptions` exposes retry counts and backoff settings but has no method-safety setting. A POST, PUT, PATCH, or DELETE connector action can therefore be submitted again after the service committed it but returned a transient response, or after an ambiguous transport failure.
The cross-language Connector SDK contract should be:
- Retry safe methods (`GET`, `HEAD`, `OPTIONS`, and `TRACE`) according to the configured retry policy.
- Do not automatically retry unsafe methods (`POST`, `PUT`, `PATCH`, and `DELETE`) by default.
- Provide an explicit, language-idiomatic per-client opt-in for applying the configured retry policy to unsafe methods, equivalent to Node.js `retryUnsafeHttpMethods`.
- Preserve the current retry-count, delay, timeout, and exponential-backoff options.
## Motivation
Connector operations include side-effecting actions such as sending messages and creating meetings, chats, channels, or files. Automatically replaying a completed action can duplicate customer-visible effects. This risk and the desired explicit opt-in are protocol-level concerns, not Node.js-specific behavior.
Consistent defaults across the .NET, Python, and Node.js Connector SDKs make client behavior predictable when customers move the same connector integration between languages.
## Acceptance criteria
- Add a `ConnectorClientOptions` setting with Python-idiomatic naming for opting unsafe HTTP methods into retries.
- Safe methods retain the configured retry behavior by default.
- Unsafe methods make one attempt by default for both transient HTTP responses and `aiohttp.ClientError` failures.
- Unsafe methods use the configured retry behavior when explicitly enabled.
- Add focused tests proving at least:
- a transient GET is retried;
- a transient POST is sent once by default;
- a transient POST is retried when explicitly enabled;
- PUT, PATCH, and DELETE follow the unsafe classification.
- Document the default and opt-in behavior in API documentation and release notes.
- Confirm whether implementation is confined to hand-written runtime/options code. Generated-client regeneration is not expected because generated clients use the shared `ConnectorHttpClient` and `ConnectorClientOptions` runtime surface.
## Related work
- Node.js implementation: [Azure/Connectors-NodeJS-SDK PR #91](https://github.com/Azure/Connectors-NodeJS-SDK/pull/91)
- .NET alignment: [Azure/Connectors-NET-SDK issue #269](https://github.com/Azure/Connectors-NET-SDK/issues/269)
Hướng dẫn đóng góp
Hướng nghiên cứu
Bắt đầu từ ConnectorHttpClient._send_with_retry và ConnectorClientOptions, sau đó kiểm tra các bài kiểm thử retry hiện có và bề mặt runtime/options dùng chung được các client được tạo sinh sử dụng. Bổ sung phạm vi kiểm thử tập trung cho các phương thức an toàn và không an toàn, bao gồm cả đường dẫn opt-in, đồng thời cập nhật tài liệu API và ghi chú phát hành để ghi lại hành vi mặc định và hành vi opt-in.
Do mô hình lập chỉ mục viết ra từ nội dung của issue.
Đánh giá
- Công nghệ
- nodejs, python
- Lĩnh vực
- api
- Loại issue
- Tính năng
- Độ khó
- 4/5
- Thời gian dự kiến
- 3-5 ngày
- Mức độ hoạt động
- Sôi nổi
- Độ rõ ràng
- Đặc tả rõ ràng
- Mức phù hợp với người mới
- 68/100