@@ -402,6 +402,7 @@ private static bool ShouldRetryInner(HttpMessage message, Exception? exception)
402
402
( message , exception ) switch
403
403
{
404
404
( { Response . Status : 422 or 409 } , _) when HasManagementApiRequestFailedError ( message . Response ) => true ,
405
+ ( { Response . Status : 409 } , _) when HasConflictError ( message . Response ) && HasOperationOnTheApiIsInProgressMessage ( message . Response ) => true ,
405
406
( { Response . Status : 412 } , _) => true ,
406
407
( { Response . Status : 429 } , _) => true ,
407
408
_ => false
@@ -418,6 +419,16 @@ private static bool HasManagementApiRequestFailedError(Response response) =>
418
419
. Where ( code => code . Equals ( "ManagementApiRequestFailed" , StringComparison . OrdinalIgnoreCase ) )
419
420
. IsSome ;
420
421
422
+ private static bool HasConflictError ( Response response ) =>
423
+ TryGetErrorCode ( response )
424
+ . Where ( code => code . Equals ( "Conflict" , StringComparison . OrdinalIgnoreCase ) )
425
+ . IsSome ;
426
+
427
+ private static bool HasOperationOnTheApiIsInProgressMessage ( Response response ) =>
428
+ TryGetMessage ( response )
429
+ . Where ( code => code . Equals ( "Operation on the API is in progress" , StringComparison . OrdinalIgnoreCase ) )
430
+ . IsSome ;
431
+
421
432
private static Option < string > TryGetErrorCode ( Response response )
422
433
{
423
434
try
@@ -433,6 +444,22 @@ private static Option<string> TryGetErrorCode(Response response)
433
444
return Option < string > . None ;
434
445
}
435
446
}
447
+
448
+ private static Option < string > TryGetMessage ( Response response )
449
+ {
450
+ try
451
+ {
452
+ return response . Content
453
+ . ToObjectFromJson < JsonObject > ( )
454
+ . TryGetJsonObjectProperty ( "error" )
455
+ . Bind ( error => error . TryGetStringProperty ( "message" ) )
456
+ . ToOption ( ) ;
457
+ }
458
+ catch ( Exception exception ) when ( exception is ArgumentNullException or NotSupportedException or JsonException )
459
+ {
460
+ return Option < string > . None ;
461
+ }
462
+ }
436
463
}
437
464
438
465
public class TelemetryPolicy ( Version version ) : HttpPipelinePolicy
0 commit comments