PoolIdAndQuantity
objects, which associate the id of the pool requested to be consumed and the respective requested quantityExample batch bind REST request:
url: POST candlepin/consumers/{consumer_uuid}/entitlements?async=true
body: [ {"poolId":"ff80808152efb6a70152f12fd06e0338", "quantity":1},
{"poolId":"ff80808152efb6a70152f12fd0130335", "quantity":3},
.
.
.
{"poolId":"ff80808152efb6a70152f12fcf54032f", "quantity":1},
{"poolId":"ff80808152efb6a70152f12fcef0032c", "quantity":8}
]
This REST request creates and schedules an asynchronous job to bind the pools, and returns a JobStatus
with the id of the job created
{
"id": "bind_by_pool_1cfdedb3-05aa-444a-814a-aabc5afedba4",
"state": "CREATED",
"startTime": null,
"finishTime": null,
"result": null,
"principalName": "admin",
"targetType": "consumer",
"targetId": "{consumer_uuid}",
"ownerId": "{owner_key}",
"resultData": null,
"statusPath": "/jobs/bind_by_pool_1cfdedb3-05aa-444a-814a-aabc5afedba4",
"done": false,
"group": "async group",
"created": "2016-02-17T23:22:17+0000",
"updated": "2016-02-17T23:22:17+0000"
}
The user of this API can check the result and the status the job using the url:
url: GET https://localhost:8443/candlepin/jobs/bind_by_pool_1cfdedb3-05aa-444a-814a-aabc5afedba4?result_data=true
Upon success, the resultData
on the JobStatus
enlists a PoolIdAndQuantity
for each pool consumed with the respective quantity consumed
{
"id": "bind_by_pool_1cfdedb3-05aa-444a-814a-aabc5afedba4",
"state": "FINISHED",
"startTime": "2016-02-17T23:22:17+0000",
"finishTime": "2016-02-17T23:22:18+0000",
"result": "[Lorg.candlepin.model.dto.PoolIdAndQuantity;@17d03e3a",
"principalName": "admin",
"targetType": "consumer",
"targetId": "aabca0d1-1b44-4167-92f6-5da7ded68b33",
"ownerId": "consumertest-61066",
"resultData": [
{
"poolId": "ff80808152efb6a70152f12fd06e0338",
"quantity": 1
},
{
"poolId": "ff80808152efb6a70152f12fcfb30332",
"quantity": 1
},
.
.
.
{
"poolId": "ff80808152efb6a70152f12fcef0032c",
"quantity": 1
},
{
"poolId": "ff80808152efb6a70152f12fd0130335",
"quantity": 1
}
],
"statusPath": "/jobs/bind_by_pool_1cfdedb3-05aa-444a-814a-aabc5afedba4",
"done": true,
"group": "async group",
"created": "2016-02-17T23:22:17+0000",
"updated": "2016-02-17T23:22:18+0000"
}
result
section on the JobStatus
returns the failure message.Note: The job is considered FAILED
only if the bind process results in unexpected errors, which is not the same as if the request fails pre-entitlement JavaScript rules check ( view next section ).
{
"id": "bind_by_pool_984f29e0-fff0-4175-9c23-1d3cb0d1d842",
"state": "FAILED",
"startTime": "2016-02-17T23:45:31+0000",
"finishTime": null,
"result": "Subscription pool(s) [ThisIDdoesNOTexist, NEITHERdoesTHIS] do not exist.",
"principalName": "admin",
"targetType": "consumer",
"targetId": "aabca0d1-1b44-4167-92f6-5da7ded68b33",
"ownerId": "consumertest-61066",
"resultData": null,
"statusPath": "/jobs/bind_by_pool_984f29e0-fff0-4175-9c23-1d3cb0d1d842",
"done": true,
"group": "async group",
"created": "2016-02-17T23:45:31+0000",
"updated": "2016-02-17T23:45:32+0000"
}
PoolIdAndQuantity
requested to be consumed fails JavaScript validation for pre-entitlement rules check, the resultData
on the JobStatus
enlists a PoolIdAndErrors
for each pool that failed validation.Each PoolIdAndErrors
contains the pool id of the pool that failed validation, and ALL the reasons due to which that pool failed validation
{
"id": "bind_by_pool_9c8bcc04-9c27-4086-9f6a-f82bcd3568ad",
"state": "FINISHED",
"startTime": "2016-02-17T23:40:33+0000",
"finishTime": "2016-02-17T23:40:33+0000",
"result": "[org.candlepin.model.dto.PoolIdAndErrors@49df3c1f, org.candlepin.model.dto.PoolIdAndErrors@c7fc5ed, org.candlepin.model.dto.PoolIdAndErrors@37dfc800, org.candlepin.model.dto.PoolIdAndErrors@5adde4e6]",
"principalName": "admin",
"targetType": "consumer",
"targetId": "aabca0d1-1b44-4167-92f6-5da7ded68b33",
"ownerId": "consumertest-61066",
"resultData": [
{
"poolId": "ff80808152efb6a70152f12fcef0032c",
"errors": [
"No subscriptions are available from the pool with ID 'ff80808152efb6a70152f12fcef0032c'."
]
},
{
"poolId": "ff80808152efb6a70152f12fcfb30332",
"errors": [
"No subscriptions are available from the pool with ID 'ff80808152efb6a70152f12fcfb30332'."
]
},
{
"poolId": "ff80808152efb6a70152f12fd0130335",
"errors": [
"No subscriptions are available from the pool with ID 'ff80808152efb6a70152f12fd0130335'."
]
},
{
"poolId": "ff80808152efb6a70152f12fd06e0338",
"errors": [
"No subscriptions are available from the pool with ID 'ff80808152efb6a70152f12fd06e0338'."
]
}
],
"statusPath": "/jobs/bind_by_pool_9c8bcc04-9c27-4086-9f6a-f82bcd3568ad",
"done": true,
"group": "async group",
"created": "2016-02-17T23:40:33+0000",
"updated": "2016-02-17T23:40:33+0000"
}
Number of concurrent jobs:
pinsetter.EntitlerJob.throttle = 7
pinsetter.EntitlerJob.throttle
controls the number of entitler jobs that can run concurrently. Because the requests are fulfilled by the same job, this config effects not only the newer batch API, but also the asynchronous requests that request binding a single pool with the url:url: POST candlepin/consumers/{consumer_uuid}/entitlements?async=true&pool={pool_id}&quantity={quantity}
Maximum number of pools allowed to be requested per bind request:
candlepin.batch.bind.number_of_pools_limit = 100