Skip to content

Retry policy in azure core pipeline should only respect Retry-After header on some specific status codes #10778

Description

@jsntcy

Describe the bug
When a service response with Retry-After header while with status code 201, azure core pipeline will retry to send the request again. You can see the http log below,

azure.core.pipeline.policies._universal : Request URL: 'https://management.azure.com/subscriptions/0b1f6471-1bf0-4dda-aec3-cb9272f09590/resourceGroups/azure-cli-test-rg/providers/Microsoft.Logic/integrationServiceEnvironments/testrepeatrequest?api-version=2019-05-01' azure.core.pipeline.policies._universal : Request method: 'PUT' azure.core.pipeline.policies._universal : Request headers: azure.core.pipeline.policies._universal : 'Content-Type': 'application/json' azure.core.pipeline.policies._universal : 'Accept': 'application/json' azure.core.pipeline.policies._universal : 'Content-Length': '841' azure.core.pipeline.policies._universal : 'x-ms-client-request-id': '9575f3a4-7a20-11ea-ad34-00155dafb4d1' azure.core.pipeline.policies._universal : 'CommandName': 'logic integration-service-environment create' azure.core.pipeline.policies._universal : 'ParameterSetName': '--location --resource-group --integration-service-environment-name --properties --sku --debug' azure.core.pipeline.policies._universal : 'User-Agent': 'AZURECLI/2.2.0yulocal azsdk-python-mgmt-logic/2019-05-01T00:00:00.000Z Python/3.7.6 (Windows-10-10.0.18362-SP0) yulocal' azure.core.pipeline.policies._universal : 'Authorization': '*****' azure.core.pipeline.policies._universal : Request body: azure.core.pipeline.policies._universal : {"location": "eastus", "properties": {"networkConfiguration": {"accessEndpoint": {"type": "Internal"}, "subnets": [{"id": "/subscriptions/0b1f6471-1bf0-4dda-aec3-cb9272f09590/resourceGroups/azure-cli-test-rg/providers/Microsoft.Network/virtualNetworks/yu-test-vnet/subnets/logic-subnet"}, {"id": "/subscriptions/0b1f6471-1bf0-4dda-aec3-cb9272f09590/resourceGroups/azure-cli-test-rg/providers/Microsoft.Network/virtualNetworks/yu-test-vnet/subnets/subnet5"}, {"id": "/subscriptions/0b1f6471-1bf0-4dda-aec3-cb9272f09590/resourceGroups/azure-cli-test-rg/providers/Microsoft.Network/virtualNetworks/yu-test-vnet/subnets/subnet6"}, {"id": "/subscriptions/0b1f6471-1bf0-4dda-aec3-cb9272f09590/resourceGroups/azure-cli-test-rg/providers/Microsoft.Network/virtualNetworks/yu-test-vnet/subnets/subnet4"}]}}, "sku": {"name": "Premium", "capacity": 2}} azure.core.pipeline.policies.http_logging_policy : Request URL: 'https://management.azure.com/subscriptions/0b1f6471-1bf0-4dda-aec3-cb9272f09590/resourceGroups/azure-cli-test-rg/providers/Microsoft.Logic/integrationServiceEnvironments/testrepeatrequest?api-version=REDACTED' azure.core.pipeline.policies.http_logging_policy : Request method: 'PUT' azure.core.pipeline.policies.http_logging_policy : Request headers: azure.core.pipeline.policies.http_logging_policy : 'Content-Type': 'application/json' azure.core.pipeline.policies.http_logging_policy : 'Accept': 'application/json' azure.core.pipeline.policies.http_logging_policy : 'Content-Length': '841' azure.core.pipeline.policies.http_logging_policy : 'x-ms-client-request-id': '9575f3a4-7a20-11ea-ad34-00155dafb4d1' azure.core.pipeline.policies.http_logging_policy : 'CommandName': 'REDACTED' azure.core.pipeline.policies.http_logging_policy : 'ParameterSetName': 'REDACTED' azure.core.pipeline.policies.http_logging_policy : 'User-Agent': 'AZURECLI/2.2.0yulocal azsdk-python-mgmt-logic/2019-05-01T00:00:00.000Z Python/3.7.6 (Windows-10-10.0.18362-SP0) yulocal' azure.core.pipeline.policies.http_logging_policy : 'Authorization': 'REDACTED' urllib3.connectionpool : Starting new HTTPS connection (1): management.azure.com:443 urllib3.connectionpool : https://management.azure.com:443 "PUT /subscriptions/0b1f6471-1bf0-4dda-aec3-cb9272f09590/resourceGroups/azure-cli-test-rg/providers/Microsoft.Logic/integrationServiceEnvironments/testrepeatrequest?api-version=2019-05-01 HTTP/1.1" 201 1518 azure.core.pipeline.policies.http_logging_policy : Response status: 201 azure.core.pipeline.policies.http_logging_policy : Response headers: azure.core.pipeline.policies.http_logging_policy : 'Cache-Control': 'no-cache' azure.core.pipeline.policies.http_logging_policy : 'Pragma': 'no-cache' azure.core.pipeline.policies.http_logging_policy : 'Content-Length': '1518' azure.core.pipeline.policies.http_logging_policy : 'Content-Type': 'application/json; charset=utf-8' azure.core.pipeline.policies.http_logging_policy : 'Expires': '-1' azure.core.pipeline.policies.http_logging_policy : 'Retry-After': '10' azure.core.pipeline.policies.http_logging_policy : 'Azure-AsyncOperation': 'REDACTED' azure.core.pipeline.policies.http_logging_policy : 'x-ms-request-id': 'REDACTED' azure.core.pipeline.policies.http_logging_policy : 'Strict-Transport-Security': 'REDACTED' azure.core.pipeline.policies.http_logging_policy : 'x-ms-ratelimit-remaining-subscription-writes': 'REDACTED' azure.core.pipeline.policies.http_logging_policy : 'x-ms-correlation-request-id': 'REDACTED' azure.core.pipeline.policies.http_logging_policy : 'x-ms-routing-request-id': 'REDACTED' azure.core.pipeline.policies.http_logging_policy : 'X-Content-Type-Options': 'REDACTED' azure.core.pipeline.policies.http_logging_policy : 'Date': 'Thu, 09 Apr 2020 05:11:52 GMT' azure.core.pipeline.policies._universal : Response status: 201 azure.core.pipeline.policies._universal : Response headers: azure.core.pipeline.policies._universal : 'Cache-Control': 'no-cache' azure.core.pipeline.policies._universal : 'Pragma': 'no-cache' azure.core.pipeline.policies._universal : 'Content-Length': '1518' azure.core.pipeline.policies._universal : 'Content-Type': 'application/json; charset=utf-8' azure.core.pipeline.policies._universal : 'Expires': '-1' azure.core.pipeline.policies._universal : 'Retry-After': '10' azure.core.pipeline.policies._universal : 'Azure-AsyncOperation': 'https://management.azure.com/subscriptions/0b1f6471-1bf0-4dda-aec3-cb9272f09590/resourceGroups/azure-cli-test-rg/providers/Microsoft.Logic/integrationServiceEnvironments/testrepeatrequest/operationStatuses/eyJmbG93T3BlcmF0aW9uIjoiUHV0SW50ZWdyYXRpb25TZXJ2aWNlRW52aXJvbm1lbnQiLCJvcGVyYXRpb25TZXF1ZW5jZUlkIjoiMDg1ODYxNTE5Nzc3MzYzNTYyMzkifQ==?api-version=2019-05-01' azure.core.pipeline.policies._universal : 'x-ms-request-id': 'eastus:02af3aa4-2d06-4d5b-8c64-9ae669d27bba' azure.core.pipeline.policies._universal : 'Strict-Transport-Security': 'max-age=31536000; includeSubDomains' azure.core.pipeline.policies._universal : 'x-ms-ratelimit-remaining-subscription-writes': '1199' azure.core.pipeline.policies._universal : 'x-ms-correlation-request-id': '4b1f55bf-fb72-422e-85d9-901d9607b292' azure.core.pipeline.policies._universal : 'x-ms-routing-request-id': 'SOUTHEASTASIA:20200409T051153Z:4b1f55bf-fb72-422e-85d9-901d9607b292' azure.core.pipeline.policies._universal : 'X-Content-Type-Options': 'nosniff' azure.core.pipeline.policies._universal : 'Date': 'Thu, 09 Apr 2020 05:11:52 GMT' azure.core.pipeline.policies._universal : Response content: azure.core.pipeline.policies._universal : {"sku":{"name":"Premium","capacity":2},"properties":{"provisioningState":"Accepted","state":"Enabled","integrationServiceEnvironmentId":"75dc1891b9c943e7815d76815da698fb","networkConfiguration":{"accessEndpoint":{"type":"Internal"},"subnets":[{"name":"yu-test-vnet/logic-subnet","id":"/subscriptions/0b1f6471-1bf0-4dda-aec3-cb9272f09590/resourceGroups/azure-cli-test-rg/providers/Microsoft.Network/virtualNetworks/yu-test-vnet/subnets/logic-subnet","type":"Microsoft.Network/virtualNetworks/subnets"},{"name":"yu-test-vnet/subnet5","id":"/subscriptions/0b1f6471-1bf0-4dda-aec3-cb9272f09590/resourceGroups/azure-cli-test-rg/providers/Microsoft.Network/virtualNetworks/yu-test-vnet/subnets/subnet5","type":"Microsoft.Network/virtualNetworks/subnets"},{"name":"yu-test-vnet/subnet6","id":"/subscriptions/0b1f6471-1bf0-4dda-aec3-cb9272f09590/resourceGroups/azure-cli-test-rg/providers/Microsoft.Network/virtualNetworks/yu-test-vnet/subnets/subnet6","type":"Microsoft.Network/virtualNetworks/subnets"},{"name":"yu-test-vnet/subnet4","id":"/subscriptions/0b1f6471-1bf0-4dda-aec3-cb9272f09590/resourceGroups/azure-cli-test-rg/providers/Microsoft.Network/virtualNetworks/yu-test-vnet/subnets/subnet4","type":"Microsoft.Network/virtualNetworks/subnets"}]}},"id":"/subscriptions/0b1f6471-1bf0-4dda-aec3-cb9272f09590/resourceGroups/azure-cli-test-rg/providers/Microsoft.Logic/integrationServiceEnvironments/testrepeatrequest","name":"testrepeatrequest","type":"Microsoft.Logic/integrationServiceEnvironments","location":"eastus"} azure.core.pipeline.policies._universal : Request URL: 'https://management.azure.com/subscriptions/0b1f6471-1bf0-4dda-aec3-cb9272f09590/resourceGroups/azure-cli-test-rg/providers/Microsoft.Logic/integrationServiceEnvironments/testrepeatrequest?api-version=2019-05-01' azure.core.pipeline.policies._universal : Request method: 'PUT' azure.core.pipeline.policies._universal : Request headers: azure.core.pipeline.policies._universal : 'Content-Type': 'application/json' azure.core.pipeline.policies._universal : 'Accept': 'application/json' azure.core.pipeline.policies._universal : 'Content-Length': '841' azure.core.pipeline.policies._universal : 'x-ms-client-request-id': '9575f3a4-7a20-11ea-ad34-00155dafb4d1' azure.core.pipeline.policies._universal : 'CommandName': 'logic integration-service-environment create' azure.core.pipeline.policies._universal : 'ParameterSetName': '--location --resource-group --integration-service-environment-name --properties --sku --debug' azure.core.pipeline.policies._universal : 'User-Agent': 'AZURECLI/2.2.0yulocal azsdk-python-mgmt-logic/2019-05-01T00:00:00.000Z Python/3.7.6 (Windows-10-10.0.18362-SP0) yulocal' azure.core.pipeline.policies._universal : 'Authorization': '*****' azure.core.pipeline.policies._universal : Request body: azure.core.pipeline.policies._universal : {"location": "eastus", "properties": {"networkConfiguration": {"accessEndpoint": {"type": "Internal"}, "subnets": [{"id": "/subscriptions/0b1f6471-1bf0-4dda-aec3-cb9272f09590/resourceGroups/azure-cli-test-rg/providers/Microsoft.Network/virtualNetworks/yu-test-vnet/subnets/logic-subnet"}, {"id": "/subscriptions/0b1f6471-1bf0-4dda-aec3-cb9272f09590/resourceGroups/azure-cli-test-rg/providers/Microsoft.Network/virtualNetworks/yu-test-vnet/subnets/subnet5"}, {"id": "/subscriptions/0b1f6471-1bf0-4dda-aec3-cb9272f09590/resourceGroups/azure-cli-test-rg/providers/Microsoft.Network/virtualNetworks/yu-test-vnet/subnets/subnet6"}, {"id": "/subscriptions/0b1f6471-1bf0-4dda-aec3-cb9272f09590/resourceGroups/azure-cli-test-rg/providers/Microsoft.Network/virtualNetworks/yu-test-vnet/subnets/subnet4"}]}}, "sku": {"name": "Premium", "capacity": 2}} azure.core.pipeline.policies.http_logging_policy : Request URL: 'https://management.azure.com/subscriptions/0b1f6471-1bf0-4dda-aec3-cb9272f09590/resourceGroups/azure-cli-test-rg/providers/Microsoft.Logic/integrationServiceEnvironments/testrepeatrequest?api-version=REDACTED' azure.core.pipeline.policies.http_logging_policy : Request method: 'PUT' azure.core.pipeline.policies.http_logging_policy : Request headers: azure.core.pipeline.policies.http_logging_policy : 'Content-Type': 'application/json' azure.core.pipeline.policies.http_logging_policy : 'Accept': 'application/json' azure.core.pipeline.policies.http_logging_policy : 'Content-Length': '841' azure.core.pipeline.policies.http_logging_policy : 'x-ms-client-request-id': '9575f3a4-7a20-11ea-ad34-00155dafb4d1' azure.core.pipeline.policies.http_logging_policy : 'CommandName': 'REDACTED' azure.core.pipeline.policies.http_logging_policy : 'ParameterSetName': 'REDACTED' azure.core.pipeline.policies.http_logging_policy : 'User-Agent': 'AZURECLI/2.2.0yulocal azsdk-python-mgmt-logic/2019-05-01T00:00:00.000Z Python/3.7.6 (Windows-10-10.0.18362-SP0) yulocal' azure.core.pipeline.policies.http_logging_policy : 'Authorization': 'REDACTED' urllib3.connectionpool : Resetting dropped connection: management.azure.com urllib3.connectionpool : https://management.azure.com:443 "PUT /subscriptions/0b1f6471-1bf0-4dda-aec3-cb9272f09590/resourceGroups/azure-cli-test-rg/providers/Microsoft.Logic/integrationServiceEnvironments/testrepeatrequest?api-version=2019-05-01 HTTP/1.1" 409 222 azure.core.pipeline.policies.http_logging_policy : Response status: 409 azure.core.pipeline.policies.http_logging_policy : Response headers: azure.core.pipeline.policies.http_logging_policy : 'Cache-Control': 'no-cache' azure.core.pipeline.policies.http_logging_policy : 'Pragma': 'no-cache' azure.core.pipeline.policies.http_logging_policy : 'Content-Length': '222' azure.core.pipeline.policies.http_logging_policy : 'Content-Type': 'application/json; charset=utf-8' azure.core.pipeline.policies.http_logging_policy : 'Expires': '-1' azure.core.pipeline.policies.http_logging_policy : 'x-ms-request-id': 'REDACTED' azure.core.pipeline.policies.http_logging_policy : 'Strict-Transport-Security': 'REDACTED' azure.core.pipeline.policies.http_logging_policy : 'x-ms-ratelimit-remaining-subscription-writes': 'REDACTED' azure.core.pipeline.policies.http_logging_policy : 'x-ms-correlation-request-id': 'REDACTED' azure.core.pipeline.policies.http_logging_policy : 'x-ms-routing-request-id': 'REDACTED' azure.core.pipeline.policies.http_logging_policy : 'X-Content-Type-Options': 'REDACTED' azure.core.pipeline.policies.http_logging_policy : 'Date': 'Thu, 09 Apr 2020 05:25:45 GMT' azure.core.pipeline.policies._universal : Response status: 409 azure.core.pipeline.policies._universal : Response headers: azure.core.pipeline.policies._universal : 'Cache-Control': 'no-cache' azure.core.pipeline.policies._universal : 'Pragma': 'no-cache' azure.core.pipeline.policies._universal : 'Content-Length': '222' azure.core.pipeline.policies._universal : 'Content-Type': 'application/json; charset=utf-8' azure.core.pipeline.policies._universal : 'Expires': '-1' azure.core.pipeline.policies._universal : 'x-ms-request-id': 'eastus:f6391f6e-a40a-4149-bf0b-97a1b17b8d27' azure.core.pipeline.policies._universal : 'Strict-Transport-Security': 'max-age=31536000; includeSubDomains' azure.core.pipeline.policies._universal : 'x-ms-ratelimit-remaining-subscription-writes': '1197' azure.core.pipeline.policies._universal : 'x-ms-correlation-request-id': 'a1b3e2da-b076-41af-83a1-84419f92836c' azure.core.pipeline.policies._universal : 'x-ms-routing-request-id': 'SOUTHEASTASIA:20200409T052545Z:a1b3e2da-b076-41af-83a1-84419f92836c' azure.core.pipeline.policies._universal : 'X-Content-Type-Options': 'nosniff' azure.core.pipeline.policies._universal : 'Date': 'Thu, 09 Apr 2020 05:25:45 GMT' azure.core.pipeline.policies._universal : Response content: azure.core.pipeline.policies._universal : {"error":{"code":"IntegrationServiceEnvironmentProvisioningInProgress","message":"The operation cannot be performed while integration service environment 'testrepeatrequest' is being provisioned. Please try again later."}}

To Reproduce
Steps to reproduce the behavior:

  1. Prepare a response with Retry-After header and status code 201.
  2. You can see azure core pipeline will retry to send the request again.

Expected behavior
Retry policy in azure core pipeline should only respect Retry-After header on some specific status codes (413, 429, 503).
For other status codes, even if there is Retry-After header in response, retry policy in azure core pipeline should not retry.

Additional Context

Metadata

Metadata

Labels

Azure.CoreClientThis issue points to a problem in the data-plane of the library.

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions