[ 
https://issues.apache.org/jira/browse/JCLOUDS-1298?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16011974#comment-16011974
 ] 

Svetoslav Neykov commented on JCLOUDS-1298:
-------------------------------------------

Agree it's fine for the Azure API not to block, just the portable abstraction.
I think having access to the "operation API" would be very useful for avoiding 
race conditions though. There could be two operations queued on the same 
resource and if the first one is blocking on the {{provisioningState}} instead 
of the state of the operation it could miss its own updating->success 
transition and continue blocking on the updating state of the second operation.

I think both blocking at the HTTP layer or making the operation API part of the 
methods return type (so callers can act accordingly) are sensible solutions. 
Can we wrap the return values in something similar to an {{Optional}} but with 
{{inProgress}} instead of {{absent}} state.

> [Azure ARM] Handle async operations
> -----------------------------------
>
>                 Key: JCLOUDS-1298
>                 URL: https://issues.apache.org/jira/browse/JCLOUDS-1298
>             Project: jclouds
>          Issue Type: Improvement
>          Components: jclouds-compute
>    Affects Versions: 2.0.1
>            Reporter: Svetoslav Neykov
>              Labels: azurecompute-arm
>
> Azure's API could choose to continue an operation as async if it takes too 
> long to complete. To let the client know it should continue polling for the 
> result it includes the operation URL in an {{Azure-AsyncOperation}} header.
> The client is supposed to poll the operation URL (the value of the header) 
> before declaring success/failure.
> With the current implementation an operation could still be in progress and 
> jclouds return a success result. The {{provisioningState}} property would 
> still be in an {{Updating}} state.
> Proposal:
> When the response contains the {{Azure-AsyncOperation}} header don't return 
> yet, but wait for the state to transition to success/failure before giving 
> control back to the caller.
> Related to https://issues.apache.org/jira/browse/JCLOUDS-1296; If operations 
> block and the result is not used until success of the operation, instances of 
> "409 Conflict" responses should decrease dramatically.



--
This message was sent by Atlassian JIRA
(v6.3.15#6346)

Reply via email to