Azure / Azure/connectors-python-sdk

Align retry safety for mutating connector operations across SDKs

Đang mở
#85 0 bình luận 0 reaction 0 người được giao Xem trên GitHub
enhancement
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

Mở 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

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.