|
29 | 29 | - [Fetching a Service Binding](#fetching-a-service-binding) |
30 | 30 | - [Unbinding](#unbinding) |
31 | 31 | - [Deprovisioning](#deprovisioning) |
32 | | - - [Orphans](#orphans) |
| 32 | + - [Orphan Mitigation](#orphan-mitigation) |
33 | 33 |
|
34 | 34 | ## API Overview |
35 | 35 |
|
@@ -250,10 +250,11 @@ Where the `value`, when decoded, is: |
250 | 250 | ``` |
251 | 251 |
|
252 | 252 | Note that not all messages sent to a Service Broker are initiated by an |
253 | | -end-user of the Platform. For example, during orphan mitigation or during the |
254 | | -querying of the Service Broker's catalog, the Platform might not have an |
255 | | -end-user with which to associate the request, therefore in those cases the |
256 | | -originating identity header would not be included in those messages. |
| 253 | +end-user of the Platform. For example, during |
| 254 | +[Orphan Mitigation](#orphan-mitigation) or during the querying of the Service |
| 255 | +Broker's catalog, the Platform might not have an end-user with which to |
| 256 | +associate the request, therefore in those cases the originating identity header |
| 257 | +would not be included in those messages. |
257 | 258 |
|
258 | 259 | ## Vendor Extension Fields |
259 | 260 |
|
@@ -704,9 +705,8 @@ containing error code `"ConcurrencyError"` (see |
704 | 705 | a helpful error message in the `description` field such as `"Another operation |
705 | 706 | for this Service Instance is in progress."`. |
706 | 707 |
|
707 | | -Note that per the [Orphans](#orphans) section, this error response does not |
708 | | -cause orphan mitigation to be initiated. Therefore, Platforms receiving this |
709 | | -error response SHOULD resend the request at a later time. |
| 708 | +Upon receiving this error response, Platforms MUST NOT perform |
| 709 | +[Orphan Mitigation](#orphan-mitigation). |
710 | 710 |
|
711 | 711 | Brokers MAY choose to treat the creation of a Service Binding as a mutation of |
712 | 712 | the corresponding Service Instance - it is an implementation choice. Doing so |
@@ -780,11 +780,9 @@ For success responses, the following fields are defined: |
780 | 780 | } |
781 | 781 | ``` |
782 | 782 |
|
783 | | -If the response contains `"state": "failed"` then the Platform MUST send a |
784 | | -deprovision request to the Service Broker to prevent an orphan being created on |
785 | | -the Service Broker. However, while the Platform will attempt |
786 | | -to send a deprovision request, Service Brokers MAY automatically delete |
787 | | -any resources associated with the failed provisioning request on their own. |
| 783 | +For asynchronous provision operations, if the response contains |
| 784 | +`"state": "failed"` then the Platform might need to perform |
| 785 | +[Orphan Mitigation](#orphan-mitigation). |
788 | 786 |
|
789 | 787 | ## Polling Last Operation for Service Bindings |
790 | 788 |
|
@@ -858,9 +856,8 @@ For success responses, the following fields are defined: |
858 | 856 | } |
859 | 857 | ``` |
860 | 858 |
|
861 | | -If the response contains `"state": "failed"` then the Platform MUST send an |
862 | | -unbind request to the Service Broker to prevent an orphan being created on |
863 | | -the Service Broker. |
| 859 | +If the response contains `"state": "failed"`, then the Platform might need to |
| 860 | +perform [Orphan Mitigation](#orphan-mitigation). |
864 | 861 |
|
865 | 862 | ## Polling Interval and Duration |
866 | 863 |
|
@@ -950,11 +947,8 @@ $ curl http://username:password@service-broker-url/v2/service_instances/:instanc |
950 | 947 | | 409 Conflict | MUST be returned if a Service Instance with the same id already exists but with different attributes. | |
951 | 948 | | 422 Unprocessable Entity | MUST be returned if the Service Broker only supports asynchronous provisioning for the requested Service Plan and the request did not include `?accepts_incomplete=true`. The response body MUST contain error code `"AsyncRequired"` (see [Service Broker Errors](#service-broker-errors)). The error response MAY include a helpful error message in the `description` field such as `"This Service Plan requires client support for asynchronous service operations."`. | |
952 | 949 |
|
953 | | -Responses with any other status code MUST be interpreted as a failure. See |
954 | | -the [Orphans](#orphans) section for more information related to whether |
955 | | -orphan mitigation needs to be applied. While a Platform might attempt |
956 | | -to send a deprovision request, Service Brokers MAY automatically delete |
957 | | -any resources associated with the failed provisioning request on their own. |
| 950 | +Responses with any other status code MUST be interpreted as a failure and the |
| 951 | +Platform might need to perform [Orphan Mitigation](#orphan-mitigation). |
958 | 952 |
|
959 | 953 | #### Body |
960 | 954 |
|
@@ -1342,11 +1336,8 @@ $ curl http://username:password@service-broker-url/v2/service_instances/:instanc |
1342 | 1336 | | 409 Conflict | MUST be returned if a Service Binding with the same id, for the same Service Instance, already exists but with different parameters. | |
1343 | 1337 | | 422 Unprocessable Entity | MUST be returned if the Service Broker requires that `app_guid` be included in the request body. The response body MUST contain error code `"RequiresApp"` (see [Service Broker Errors](#service-broker-errors)). The error response MAY include a helpful error message in the `description` field such as `"This Service supports generation of credentials through binding an application only."`. Additionally, if the Service Broker rejects the request due to a concurrent request to create a Service Binding for the same Service Instance, then this error MUST be returned (see [Blocking Operations](#blocking-operations)). This MUST also be returned if the Service Broker only supports asynchronous bindings for the Service Instance and the request did not include `?accepts_incomplete=true`. In this case, the response body MUST contain error code `"AsyncRequired"` (see [Service Broker Errors](#service-broker-errors)). The error response MAY include a helpful error message in the `description` field such as `"This Service Instance requires client support for asynchronous binding operations."`. | |
1344 | 1338 |
|
1345 | | -Responses with any other status code MUST be interpreted as a failure and an |
1346 | | -unbind request MUST be sent to the Service Broker to prevent an orphan being |
1347 | | -created on the Service Broker. However, while the platform will attempt |
1348 | | -to send an unbind request, Service Brokers MAY automatically delete |
1349 | | -any resources associated with the failed bind request on their own. |
| 1339 | +Responses with any other status code MUST be interpreted as a failure and the |
| 1340 | +Platform might need to perform [Orphan Mitigation](#orphan-mitigation). |
1350 | 1341 |
|
1351 | 1342 | #### Body |
1352 | 1343 |
|
@@ -1633,40 +1624,52 @@ For success responses, the following fields are defined: |
1633 | 1624 | } |
1634 | 1625 | ``` |
1635 | 1626 |
|
1636 | | -## Orphans |
| 1627 | +## Orphan Mitigation |
1637 | 1628 |
|
1638 | 1629 | The Platform is the source of truth for Service Instances and Service Bindings. |
1639 | 1630 | Service Brokers are expected to have successfully provisioned all of the Service |
1640 | 1631 | Instances and Service Bindings that the Platform knows about, and none that it |
1641 | 1632 | doesn't. |
1642 | 1633 |
|
1643 | | -Orphans can result if the Service Broker does not return a response before a |
1644 | | -request from the Platform times out (typically 60 seconds). For example, if a |
1645 | | -Service Broker does not return a response to a provision request before the |
1646 | | -request times out, the Service Broker might eventually succeed in provisioning |
1647 | | -a Service Instance after the Platform considers the request a failure. This |
1648 | | -results in an orphan Service Instance on the Service Broker's side. |
| 1634 | +Orphaned Service Instances and Service Bindings might have been created in one |
| 1635 | +of the following scenarios: |
| 1636 | +* The Service Broker does not return a response before a request from the |
| 1637 | +Platform times out (typically 60 seconds). The Service Broker might eventually |
| 1638 | +succeed in creating a resource, however the Platform might have already |
| 1639 | +considered the request a failure. |
| 1640 | +* A synchronous [Provisioning](#provisioning) request fails. |
| 1641 | +* A call to the |
| 1642 | +[Polling Last Operation for Service Instances](#polling-last-operation-for-service-instances) |
| 1643 | +endpoint returns `"state": "failed"` for an asynchronous provisioning or |
| 1644 | +deprovisioning request. |
| 1645 | +* A synchronous [Binding](#binding]) request fails. |
| 1646 | +* A call to the |
| 1647 | +[Polling Last Operation for Service Bindings](#polling-last-operation-for-service-bindings) |
| 1648 | +endpoint returns `"state": "failed"` for an asynchronous binding or unbinding |
| 1649 | +request. |
| 1650 | +* The Platform encounters an internal error when creating a Service Instance or |
| 1651 | +Service Binding (for example, saving to the database fails). |
1649 | 1652 |
|
1650 | | -To mitigate orphan Service Instances and Service Bindings, the Platform SHOULD |
| 1653 | +To mitigate orphaned Service Instances and Service Bindings, the Platform SHOULD |
1651 | 1654 | attempt to delete resources it cannot be sure were successfully created, and |
1652 | 1655 | SHOULD keep trying to delete them until the Service Broker responds with a |
1653 | | -success. |
| 1656 | +success. Service Brokers MAY automatically delete any resources they believe to |
| 1657 | +be orphaned on their own. Note that the Platform MAY allow end users to |
| 1658 | +determine when orphan mitigation occurs, in order to allow them to investigate |
| 1659 | +the cause of any failures. |
1654 | 1660 |
|
1655 | | -Platforms SHOULD initiate orphan mitigation in the following scenarios: |
| 1661 | +The following table aims to describe when Orphan Mitigation is to be initiated: |
1656 | 1662 |
|
1657 | | -| Status Code Of Service Broker Response | Platform Interpretation Of Response | Platform Initiates Orphan Mitigation? | |
| 1663 | +| Service Broker Response Status Code | Platform Interpretation Of Response | Orphan Mitigation MUST be performed | |
1658 | 1664 | | --- | --- | --- | |
1659 | 1665 | | 200 | Success | No | |
1660 | 1666 | | 200 with malformed response | Failure | No | |
| 1667 | +| 200 with `"state": "failed"` (applicable to [Polling Last Operation for Service Instances](#polling-last-operation-for-service-instances) for [Provisioning](#provisioning)/[Deprovisioning](#deprovisioning) and [Polling Last Operation for Service Bindings](#polling-last-operation-for-service-bindings) for [Binding](#binding)/[Unbinding](#unbinding)) | Failure | Yes | |
1661 | 1668 | | 201 | Success | No | |
1662 | 1669 | | 201 with malformed response | Failure | Yes | |
1663 | 1670 | | All other 2xx | Failure | Yes | |
1664 | 1671 | | 408 | Client timeout failure (request not received at the server) | No | |
1665 | 1672 | | All other 4xx | Request rejected | No | |
1666 | 1673 | | 5xx | Service Broker error | Yes | |
1667 | | -| Timeout | Failure | Yes | |
1668 | | - |
1669 | | -If the Platform encounters an internal error provisioning a Service Instance or |
1670 | | -Service Binding (for example, saving to the database fails), then it MUST at |
1671 | | -least send a single delete or unbind request to the Service Broker to prevent |
1672 | | -the creation of an orphan. |
| 1674 | +| Timeout (for [Provisioning](#provisioning) and [Binding](#binding]) requests) | Failure | Yes | |
| 1675 | +| Timeout (for all other requests) | Failure | No | |
0 commit comments