Demandes de travail asynchrones
Cette rubrique décrit les demandes de travail asynchrones pour des opérations de longue durée sur les services Oracle Cloud Infrastructure. Elle fournit également des conseils sur l'obtention du statut de la demande et l'inspection de la réponse pour permettre le filtrage des ressources concernées.
Aperçu
Les appels d'API aux services Oracle Cloud Infrastructure peuvent lancer des opérations à longue durée qui ne terminent pas la demande du client avant qu'une réponse soit retournée. Dans ces cas, le service génère une demande de travail asynchrone qui permet de voir la progression des opérations asynchrones à longue durée. La réponse à l'appel de l'API REST contient un ID demande de travail dans l'en-tête opc-work-request-id
, qui vous permet de surveiller sa progression et son statut. La demande de travail reste dans une file d'attente tant que l'opération n'est pas terminée.
Vous pouvez surveiller le statut de la demande de travail à tout moment en appelant GetWorkRequest
et en transmettant l'ID demande de travail.
Certains services Oracle Cloud Infrastructure, tels que Calcul et Base de données, prennent en charge les demandes de travail à l'aide de l'API des demandes de travail, qui contient l'opération GetWorkRequest
.
Certains services offrent des demandes de travail prises en charge par l'API du service plutôt que par les demandes de travail décrites dans cette rubrique. Ces API de service comprennent chacune des opérations qui fonctionnent de la même manière que l'opération GetWorkRequest
utilisée par l'API des demandes de travail.
Pour plus de détails, consultez la documentation de référence pour l'API de demandes de travail de chaque service. Des liens vers chacune sont fournis dans la section Pour plus d'informations.
Deux fonctions de la réponse à la demande présentent un intérêt particulier : le statut de la demande de travail et une liste des ressources qui sont affectées par la demande de travail. Le statut est important car les demandes de travail asynchrones doivent savoir si une opération est terminée, est toujours en cours d'exécution ou si elle a échoué.
Pour extraire des informations sur les échecs ou les erreurs de demande de travail, chaque service fournit des API permettant d'extraire des informations sur les erreurs et les journaux. Pour des liens vers la documentation de référence des API pour chaque service, consultez la section Pour plus d'informations.
Lorsqu'une opération de demande de travail a une incidence sur plusieurs ressources, il est également important d'avoir une liste des ressources concernées, ainsi que les attributs entityType
et actionType
de chacune.
Statut de demande de travail
Les demandes de travail asynchrones vous permettent de surveiller leur progression en fournissant un attribut de statut sur l'objet WorkRequest
. Chaque service pris en charge fournit sa propre API pour l'obtention du statut, comme indiqué dans les sections suivantes.
Une classe ContainerEngineWaiters vous permet de créer un rappel à l'aide de la méthode
forWorkRequest
. Utilisez cette API pour transférer un avis lorsque le statut d'une opération change, par exemple, de IN_PROGRESS
à COMPLETED
.Le tableau suivant répertorie les attributs de statut pris en charge par l'objet WorkRequest
sur les services respectifs.
Service | Attributs de statut |
---|---|
Application Performance Monitoring |
|
Service de récupération autonome |
|
Service de mégadonnées |
|
Plate-forme de chaîne de blocs |
|
Groupes de positionnement de grappe |
|
Service de calcul |
|
Centre de connecteurs |
|
Container Engine pour Kubernetes |
|
Gestion de contenu |
|
Gestion de bases de données |
|
Base de données OCI avec PostgreSQL |
|
Catalogue de données |
|
Intégration de données |
|
Étiquette de données |
|
Science des données |
|
Base de données |
|
Migration de base de données |
|
DevOps |
|
Récupération après sinistre de pile complète |
|
Autonomous Database distribué à l'échelle mondiale |
|
GoldenGate |
|
Service IAM |
|
Integration |
|
Gestion Java |
|
Équilibreur de charge |
|
Logging Analytics pour LogAnalyticsQueryJobWorkRequest |
|
Logging Analytics pour LogAnalyticsStorageWorkRequest |
|
Logging Analytics pour LogAnalyticsConfigWorkRequest |
|
Agent de gestion |
|
Service de pare-feu de réseau |
|
Stockage d'objets |
|
Pont vers Oracle Cloud |
|
Oracle Cloud Migrations |
|
Centre de gestion du système d'exploitation |
|
Automatisation des processus |
|
File d'attente |
|
Gestionnaire de ressources |
|
Ordinateurs de bureau sécurisés |
|
Maillage de services |
|
Filtrage de la réponse à la demande
Vous devez parfois savoir quelles ressources sont touchées par une demande de travail asynchrone particulière. Dans les cas où la réponse à la demande comprend seulement une ou deux ressources touchées, le corps de la réponse à la demande est probablement suffisant. En revanche, lorsqu'une réponse à une demande a une incidence sur un grand nombre de ressources, vous devez filtrer la réponse pour identifier les ressources qui vous intéressent.
Le filtrage des ressources listées dans une réponse à une demande de travail repose sur deux attributs du type WorkRequestResource
: entityType
et actionType
.
- entityType : Représente le type de ressource touchée par la demande de travail. Il s'agit d'un attribut facultatif, mais chaque ressource ne peut avoir qu'un seul attribut
entityType
. - actionType : Indique comment la ressource spécifiée est touchée par l'opération associée à la demande de travail. Chaque service spécifie une liste fixe de valeurs
actionType
pouvant être autorisées (affichées dans les sections suivantes).
Pour obtenir des informations sur les ressources d'une demande de travail, appelez GetWorkRequest
et transmettez l'ID demande de travail. L'appel retourne une réponse dans le format JSON. Voici un exemple d'appel de GetWorkRequest
sur le service Stockage d'objets.
{
operationType: "COPY_OBJECT",
status: "IN_PROGRESS",
id: "f54527d6-029b-4221-9046-a811b7686202",
resources: [
{
entityType: "object",
actionType: "READ",
entityUri: "/n/mynamespace/b/backups/o/myobject"
},
{
entityType: "object",
actionType: "WRITTEN",
entityUri: "/n/mynamespace/b/backups/o/copyofmyobject"
},
],
timeAccepted: 2017-10-13T17:23:46.000Z,
timeStarted: 2017-10-13T17:23:52.198Z,
percentComplete: 10.0
}
Différents services fournissent des réponses légèrement différentes. Pour plus de détails, consultez la documentation de référence pour l'API de demandes de travail de chaque service. Des liens vers chacune sont fournis dans la section Pour plus d'informations.
Le tableau suivant liste les types d'entité et les types d'action pris en charge par les services Oracle Cloud Infrastructure.
Nom du service | Opération | entityType | actionType |
---|---|---|---|
Application Performance Monitoring | apm-domains |
|
|
Service de récupération autonome |
ChangeProtectionPolicyCompartment ChangeRecoveryServiceSubnetCompartment |
|
|
Plate-forme de chaîne de blocs | instance
|
|
|
Groupes de positionnement de grappe |
|
|
|
Container Engine pour Kubernetes |
|
|
|
Gestion de contenu | oceInstance |
|
|
Gestion de bases de données |
ChangeDbManagementPrivateEndpointCompartment CreateDbManagementPrivateEndpoint DeleteDbManagementPrivateEndpoint GetDbManagementPrivateEndpoint |
private-endpoints |
|
Migration de base de données |
|
|
|
Base de données OCI avec PostgreSQL | |||
Catalogue de données | catalog
|
|
|
Intégration de données | disworkspace
|
|
|
Étiquette de données | datalabelingdataset |
|
|
Science des données |
|
|
|
DevOps |
|
|
|
Récupération après sinistre de pile complète |
|
|
|
Autonomous Database distribué à l'échelle mondiale |
ChangeShardedDatabaseCompartment |
|
|
GoldenGate |
|
|
|
Integration |
Note : |
instance |
|
Équilibreur de charge | LoadBalancer
|
|
|
Agent de gestion | DeployPlugins | managementAgent |
|
Service de pare-feu de réseau |
|
|
|
Stockage d'objets | CopyObject | object
|
|
Pont vers Oracle Cloud | ocbworkrequest |
|
|
Oracle Cloud Migrations |
ChangeReplicationScheduleCompartment |
ocmworkrequest |
|
Centre de gestion du système d'exploitation |
AttachManagedInstancesToLifecycleStage AttachManagedInstancesToManagedInstanceGroup AttachSoftwareSourcesToManagedInstance AttachSoftwareSourcesToManagedInstanceGroup DetachManagedInstancesFromLifecycleStage DetachManagedInstancesFromManagedInstanceGroup DetachSoftwareSourcesFromManagedInstance DisableModuleStreamOnManagedInstance DisableModuleStreamOnManagedInstanceGroup EnableModuleStreamOnManagedInstance EnableModuleStreamOnManagedInstanceGroup InstallModuleStreamProfileOnManagedInstance InstallModuleStreamProfileOnManagedInstanceGroup InstallPackagesOnManagedInstance InstallPackagesOnManagedInstanceGroup InstallWindowsUpdatesOnManagedInstance InstallAllWindowsUpdatesOnManagedInstancesInCompartment InstallWindowsUpdatesOnManagedInstanceGroup ManageModuleStreamsOnManagedInstance ManageModuleStreamsOnManagedInstanceGroup PromoteSoftwareSourceToLifecycleStage RefreshSoftwareOnManagedInstance RemoveModuleStreamProfileFromManagedInstance RemoveModuleStreamProfileFromManagedInstanceGroup RemovePackagesFromManagedInstance RemovePackagesFromManagedInstanceGroup Tâche programmée/RunScheduledJobNow SwitchModuleStreamOnManagedInstance UpdateAllPackagesOnManagedInstanceGroup UpdateAllPackagesOnManagedInstancesInCompartment |
|
|
Automatisation des processus | instance |
|
|
File d'attente | |||
Gestionnaire de ressources |
|
|
|
Ordinateurs de bureau sécurisés |
|
|
|
Maillage de services |
CreateVirtualServiceRouteTable UpdateVirtualServiceRouteTable DeleteVirtualServiceRouteTable CreateIngressGatewayRouteTable UpdateIngressGatewayRouteTable |
|
|
Exemple de demande/réponse
Voici une séquence d'appels d'API REST permettant la création d'une grappe, qui est une opération de longue durée commune. Le programme d'appel extrait l'ID demande de travail de la réponse à l'appel POST
initial, puis scrute périodiquement l'élément WorkRequest
afin de déterminer le statut de l'opération. La séquence de demande/réponse qui suit décrit le flux de travail :
- L'utilisateur émet un appel d'API
CreateCluster
. - Le service répond avec le code de statut 202, indiquant que la demande a été acceptée et retourne un ID demande de travail dans l'en-tête
opc-work-request-id
. - Ensuite, l'utilisateur émet un appel
GET
sur l'ID demande de travail pour obtenir le statut de la demande de travail. - Le service répond avec le code de statut 200, indiquant dans le corps de la réponse que l'opération
CLUSTER_CREATE
a le statutACCEPTED
. - Avec une scrutation continue, nous voyons un autre appel
GET
pour la demande de travail. - Le service répond avec le code de statut 200. Le corps de la réponse indique que l'opération a réussi (
SUCCEEDED
).
Étape 1. Appel d'API initial pour lancer une opération CLUSTER_CREATE
.
POST https://containerengine.eu-frankfurt-1.oraclecloud.com/20180222/clusters
Accept: application/json
authorization: <Redacted>
content-length: 480
Content-Type: application/json
date: Mon, 02 Jul 2018 18:20:03 GMT
host: containerengine.eu-frankfurt-1.oraclecloud.com
opc-client-info: Oracle-JavaSDK/1.2.42-preview1-SNAPSHOT
opc-request-id: D7A390ED909C47038C438BA3629FB612
User-Agent: Oracle-JavaSDK/1.2.42-preview1-SNAPSHOT (Mac OS X/10.13.5; Java/1.8.0_172; Java HotSpot(TM) 64-Bit Server VM/25.172-b11)
x-content-sha256: S8U8OKQHyTLNViAzgexkjxvF4ctncJJHTjuRfXn0ya4={
"name":"JavaSDK.CRUD",
"compartmentId":"ocid1.compartment.oc1..<unique_ID>",
"vcnId":"ocid1.vcn.oc1.eu-frankfurt-1.<unique_ID>",
"kubernetesVersion":"v1.10.3",
"options":{"serviceLbSubnetIds":["ocid1.subnet.oc1.eu-frankfurt-1.<unique_ID>",
"ocid1.subnet.oc1.eu-frankfurt-1.<unique_ID>"]}}
Étape 2. Réponse à l'appel d'API initial, qui contient l'ID demande de travail dans Opc-Work-Request-Id header
.
202
Access-Control-Allow-Methods: DELETE, GET, HEAD, OPTIONS, PATCH, POST, PUT
Access-Control-Allow-Origin: *
Access-Control-Expose-Headers: opc-work-request-id
Content-Length: 0
Date: Mon, 02 Jul 2018 18:20:04 GMT
Opc-Request-Id: D7A390ED909C47038C438BA3629FB612/33EEDCAAB2E84508B34AA75CD0FD86F4/8261D1CC89814E9BB934440A1F43DA09
Opc-Work-Request-Id: ocid1.clustersworkrequest.oc1.eu-frankfurt-1.exampleuniqueID
Uri: /20180222/clusters
Vary: Accept-Encoding
X-Rate-Limit-Duration: 1
X-Rate-Limit-Limit: 16.70
X-Rate-Limit-Request-Forwarded-For: 10.237.10.0, 10.237.9.51
X-Rate-Limit-Request-Remote-Addr: 10.237.9.51:53077
Étape 3. Comme il s'agit d'une opération de longue durée, l'utilisateur scrute régulièrement la demande de travail au moyen d'un appel GET
pour déterminer son statut.
GET https://containerengine.eu-frankfurt-1.oraclecloud.com/20180222/workRequests/<clusters_work_request_OCID>
Accept: application/json
authorization: <Redacted>
date: Mon, 02 Jul 2018 18:20:04 GMT
host: containerengine.eu-frankfurt-1.oraclecloud.com
opc-client-info: Oracle-JavaSDK/1.2.42-preview1-SNAPSHOT
opc-request-id: E8F20DAC443346B3B0EA599F367EE294
User-Agent: Oracle-JavaSDK/1.2.42-preview1-SNAPSHOT (Mac OS X/10.13.5; Java/1.8.0_172; Java HotSpot(TM) 64-Bit Server VM/25.172-b11)
Étape 4. L'appel GET
retourne la réponse suivante, qui indique dans le corps de la réponse que l'opération CLUSTER_CREATE
a le statut ACCEPTED
.
200
Access-Control-Allow-Methods: DELETE, GET, HEAD, OPTIONS, PATCH, POST, PUT
Access-Control-Allow-Origin: *
Access-Control-Expose-Headers: opc-work-request-id
Content-Length: 717
Content-Type: application/json
Date: Mon, 02 Jul 2018 18:20:05 GMT
Etag: 56a41efaf33d81a54933495ee910c24d7bce7a83adf18810f95e07bdd2055805
Opc-Request-Id: E8F20DAC443346B3B0EA599F367EE294/8B19C9FC3B4442CEA14685D1973D0856/0BA60B0711764DE4A4373071632708C7
Retry-After: 30
Uri: /20180222/workRequests/_id_
Vary: Accept-Encoding
X-Rate-Limit-Duration: 1
X-Rate-Limit-Limit: 16.70
X-Rate-Limit-Request-Forwarded-For: 10.237.10.0, 10.237.9.51
X-Rate-Limit-Request-Remote-Addr: 10.237.9.51:43533
{
"id": "ocid1.clustersworkrequest.oc1.eu-frankfurt-1.exampleuniqueID",
"operationType": "CLUSTER_CREATE",
"status": "ACCEPTED",
"compartmentId": "ocid1.compartment.oc1..exampleuniqueID",
"resources": [
{
"actionType": "IN_PROGRESS",
"entityType": "cluster",
"identifier": "ocid1.cluster.oc1.eu-frankfurt-1.exampleuniqueID",
"entityUri": "/clusters/ocid1.cluster.oc1.eu-frankfurt-1.exampleuniqueID"
}
],
"timeAccepted": "2018-07-02T18:20:05Z",
"timeStarted": null,
"timeFinished": null
}
Étape 5. L'opération se poursuit et l'utilisateur continue de scruter la demande de travail à l'aide de la méthode GET
.
GET https://containerengine.eu-frankfurt-1.oraclecloud.com/20180222/workRequests/<clusters_work_request_OCID>
Accept: application/json
authorization: <Redacted>
date: Mon, 02 Jul 2018 18:24:13 GMT
host: containerengine.eu-frankfurt-1.oraclecloud.com
opc-client-info: Oracle-JavaSDK/1.2.42-preview1-SNAPSHOT
opc-request-id: 64595B97E39A471A886DA29966BB6B1D
User-Agent: Oracle-JavaSDK/1.2.42-preview1-SNAPSHOT (Mac OS X/10.13.5; Java/1.8.0_172; Java HotSpot(TM) 64-Bit Server VM/25.172-b11)
Étape 6. Le dernier appel GET
a produit la réponse suivante, qui indique que l'opération est terminée. Notez que entityType
a pour valeur "cluster" et que actionType
a pour valeur "CREATED".
200
Access-Control-Allow-Methods: DELETE, GET, HEAD, OPTIONS, PATCH, POST, PUT
Access-Control-Allow-Origin: *
Access-Control-Expose-Headers: opc-work-request-id
Content-Length: 750
Content-Type: application/json
Date: Mon, 02 Jul 2018 18:24:14 GMT
Etag: 023d2a8ccb6d893fa8c875f64652353f21d22607825f49eeeb15b5394ae24918
Opc-Request-Id: 64595B97E39A471A886DA29966BB6B1D/3A81140991C94794AF365016E31DBE82/6245FBD8C25842B6BDF15187EA6ADB21
Uri: /20180222/workRequests/_id_
Vary: Accept-Encoding
X-Rate-Limit-Duration: 1
X-Rate-Limit-Limit: 16.70
X-Rate-Limit-Request-Forwarded-For: 10.237.3.0, 10.237.40.183
X-Rate-Limit-Request-Remote-Addr: 10.237.40.183:55856
{
"id": "ocid1.clustersworkrequest.oc1.eu-frankfurt-1.exampleuniqueID",
"operationType": "CLUSTER_CREATE",
"status": "SUCCEEDED",
"compartmentId": "ocid1.compartment.oc1..exampleuniqueID",
"resources": [
{
"actionType": "CREATED",
"entityType": "cluster",
"identifier": "ocid1.cluster.oc1.eu-frankfurt-1.exampleuniqueID",
"entityUri": "/clusters/ocid1.cluster.oc1.eu-frankfurt-1.exampleuniqueID"
}
],
"timeAccepted": "2018-07-02T18:20:05Z",
"timeStarted": "2018-07-02T18:20:10Z",
"timeFinished": "2018-07-02T18:24:01Z"
}
Pour plus d'informations
- API de demande de travail du service Surveillance de la performance des applications
- API de demande de travail du service de récupération autonome
- API de demande de travail du service Hôte bastion
- Demandes de travail de Blockchain Platform
- API de demande de travail de Cloud Advisor
- API de demande de travail pour les groupes de positionnement de grappe
- API de demande de travail du service Calcul
-
Centre de connecteurs :
- API de demande de travail du service Moteur d'applications conteneurisées
- API de demande de travail du service d'instances de conteneur
- API de demande de travail de Content Management
-
Catalogue de données :
- API de demande de travail du service Intégration de données
-
Service d'étiquetage de données :
-
Science des données :
- API de demande de travail du service Base de données
- API de demande de travail du service Gestion de bases de données
- API de demande de travail du service Migration de bases de données
- API de demande de travail du service Outils de base de données
- Base de données OCI avec l'API de demande de travail PostgreSQL
- API de demande de travail du service DevOps
- API de demande de travail du service Récupération après sinistre de pile complète
- API de demande de travail Autonomous Database répartie dans le monde
- API de demande de travail du service GoldenGate
-
IAM :
- API de demande de travail d'Oracle Integration Cloud
- API de demande de travail du service Gestion Java
-
équilibreur de charge :
- API de demande de travail Logging Analytics
- API de demande de travail du service Agent de gestion
- API de demande de travail HeatWave
- API de demande de travail du service Pare-feu de réseau
-
stockage d'objets :
- API de demande de travail du service Pont vers le nuage Oracle
- API de demande de travail du service Migration vers Oracle Cloud Infrastructure
- API de demande de travail du centre de gestion du système d'exploitation
- API de demande de travail du service Automatisation des processus
- API de demande de travail du service de file d'attente
- API de demande de travail du gestionnaire de ressources
- API de demande de travail pour les ordinateurs de bureau sécurisés
- API de demande de travail du service Maillage de services
- API de demande de travail du service Surveillance de pile
- API de demande de travail du service Visualisation
- Visual Builder Studio: API de demande de travail
- API de demande de travail du service Balayage de vulnérabilités