Cette page explique comment gérer le cycle de vie d'une opération de longue durée (LRO) de l'API Cloud Healthcare.
Lorsqu'une méthode d'API peut prendre beaucoup de temps, elle peut renvoyer un Operation
au client. Le client peut utiliser l'interface Operation
pour récupérer l'état de la méthode de l'API de manière asynchrone en interrogeant l'opération. Les opérations de longue durée de l'API Cloud Healthcare respectent le modèle de conception des opérations de longue durée Google Cloud.
L'API Cloud Healthcare crée des opérations de longue durée pour plusieurs méthodes, telles que projects.locations.datasets.fhirStores.import
.
Lorsque projects.locations.datasets.fhirStores.import
est appelée, l'API Cloud Healthcare crée une opération de longue durée pour suivre l'état de l'importation. L'opération de longue durée dispose d'un identifiant unique que vous pouvez utiliser pour afficher son état.
Les opérations de longue durée sont gérées au niveau de l'ensemble de données. Si vous appelez une méthode qui renvoie une opération de longue durée, telle que projects.locations.datasets.fhirStores.import
, vous pouvez afficher l'état de l'opération de longue durée en envoyant une requête contenant l'ID de l'opération de longue durée à l'ensemble de données parent du magasin FHIR où l'importation se produit.
En plus de l'API REST, les sources suivantes génèrent des opérations de longue durée lorsque vous appelez les méthodes répertoriées dans la section Méthodes renvoyant une opération de longue durée:
- Google Cloud CLI
- Page API Cloud Healthcare dans la console Google Cloud
Vous pouvez gérer les opérations de longue durée de l'API Cloud Healthcare à l'aide de la console Google Cloud, de Google Cloud CLI ou de l'API REST.
L'enregistrement associé à une opération de longue durée est conservé pendant environ 30 jours après son exécution, ce qui signifie que vous ne pouvez pas afficher ni répertorier une opération de longue durée après cette date.
Méthodes renvoyant une opération de longue durée
Les méthodes suivantes renvoient une opération de longue durée.
Méthodes de gestion du consentement:
Méthodes des ensembles de données:
Méthodes DICOM:
projects.locations.datasets.dicomStores.deidentify
projects.locations.datasets.dicomStores.export
projects.locations.datasets.dicomStores.import
projects.locations.datasets.dicomStores.studies.delete
projects.locations.datasets.dicomStores.studies.series.delete
Méthodes FHIR:
projects.locations.datasets.fhirStores.deidentify
projects.locations.datasets.fhirStores.export
projects.locations.datasets.fhirStores.import
Méthodes HL7v2:
Obtenir des informations sur une opération de longue durée
Les exemples suivants montrent comment afficher les détails d'une opération de longue durée.
La version de l'API Cloud Healthcare indiquée dans la réponse lorsque vous obtenez des détails sur une opération de longue durée est identique à la version de l'API de la méthode qui a lancé l'opération de longue durée.
Console
Après avoir utilisé gcloud CLI ou l'API pour appeler une méthode qui renvoie une opération de longue durée, vous pouvez afficher les détails de l'opération de longue durée dans la console Google Cloud.
Dans la console Google Cloud, accédez à la page Ensembles de données.
Cliquez sur le nom de l'ensemble de données contenant l'opération de longue durée que vous souhaitez afficher.
Cliquez sur Opérations.
Pour afficher les journaux d'erreurs de l'opération dans Cloud Logging, cliquez sur Actions, puis sur Afficher les détails dans Cloud Logging. Pour en savoir plus, consultez la section Afficher les journaux d'erreurs dans Cloud Logging.
Pour afficher davantage de détails sur l'opération, cliquez sur l'ID d'une opération en cours d'exécution. La page Détails de l'opération de longue durée s'affiche. La page affiche les informations suivantes:
- L'avancement de la LRO
- Les détails de l'opération de longue durée, tels que l'ID d'opération et la méthode qui a appelé l'opération de longue durée
- un sous-ensemble d'entrées de journal ;
gcloud
Supposons que vous receviez la réponse suivante après avoir appelé gcloud healthcare dicom-stores deidentify
:
Request issued for: [DATASET_ID] Waiting for operation [OPERATION_ID] to complete...
La réponse indique que l'API Cloud Healthcare a créé une opération de longue durée avec un ID d'opération. Vous pouvez également obtenir l'ID d'opération en répertoriant les opérations de base de données de longue durée. La commande continue de s'exécuter jusqu'à ce qu'elle soit terminée, puis génère les éléments suivants:
Request issued for: [DATASET_ID] Waiting for operation [OPERATION_ID] to complete...done name: projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID
Pour obtenir les détails de l'opération de longue durée, exécutez la commande gcloud healthcare operations describe
.
Avant d'utiliser les données de la commande ci-dessous, effectuez les remplacements suivants :
- PROJECT_ID : ID de votre projet Google Cloud
- DATASET_ID : ID de l'ensemble de données
- LOCATION : emplacement de l'ensemble de données
- OPERATION_ID : ID renvoyé par l'opération de longue durée
Exécutez la commande suivante :
Linux, macOS ou Cloud Shell
gcloud healthcare operations describe OPERATION_ID \ --project=PROJECT_ID \ --dataset=DATASET_ID \ --location=LOCATION
Windows (PowerShell)
gcloud healthcare operations describe OPERATION_ID ` --project=PROJECT_ID ` --dataset=DATASET_ID ` --location=LOCATION
Windows (cmd.exe)
gcloud healthcare operations describe OPERATION_ID ^ --project=PROJECT_ID ^ --dataset=DATASET_ID ^ --location=LOCATION
Vous devriez obtenir un résultat semblable à celui-ci :
Réponse
done: true // If there were any errors, an `error` field displays instead of a `response` field. // See Troubleshooting long-running operations for a list of response codes. error: ERROR code: ERROR_CODE message: DESCRIPTION metadata: '@type': 'type.googleapis.com/google.cloud.healthcare.v1.OperationMetadata' apiMethodName: 'google.cloud.healthcare.v1.deidentify.DeidentifyService.DeidentifyDicomStore' counter: success: 'SUCCESS_COUNT' // If there were any failures, they display in the `failure` field. failure: 'FAILURE_COUNT' createTime: 'YYYY-MM-DDTHH:MM:SS+ZZ:ZZ' endTime: 'YYYY-MM-DDTHH:MM:SS+ZZ:ZZ' logsUrl: https://console.cloud.google.com/CLOUD_LOGGING_URL name: projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/operations/OPERATION_ID // The `response` field only displays if there were no errors. response: '@type': 'type.googleapis.com/google.cloud.healthcare.v1.deidentify.DeidentifySummary'
REST
Supposons que vous receviez la réponse suivante après avoir appelé projects.locations.datasets.dicomStores.deidentify
:
{ "name": "projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/operations/OPERATION_ID" }
La valeur name
dans la réponse indique que l'API Cloud Healthcare a créé une opération de longue durée appelée projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/operations/OPERATION_ID
. Vous pouvez également obtenir le nom de l'opération de longue durée en répertoriant les opérations de longue durée.
Pour connaître l'état de l'opération de longue durée, utilisez la méthode projects.locations.datasets.operations.get
. Pour interroger une opération de longue durée, appelez la méthode projects.locations.datasets.operations.get
de façon répétée jusqu'à la fin de l'opération. Observez un intervalle (10 secondes, par exemple) entre chaque tentative d'interrogation.
Avant d'utiliser les données de requête ci-dessous, effectuez les remplacements suivants :
- PROJECT_ID : ID de votre projet Google Cloud
- DATASET_ID : ID de l'ensemble de données
- LOCATION : emplacement de l'ensemble de données
- OPERATION_ID : ID renvoyé par l'opération de longue durée
Pour envoyer votre requête, choisissez l'une des options suivantes :
curl
Exécutez la commande suivante :
curl -X GET \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
"https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/operations/OPERATION_ID"
PowerShell
Exécutez la commande suivante :
$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }
Invoke-WebRequest `
-Method GET `
-Headers $headers `
-Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/operations/OPERATION_ID" | Select-Object -Expand Content
API Explorer
Ouvrez la page de référence de la méthode. Le panneau APIs Explorer s'ouvre dans la partie droite de la page. Vous pouvez interagir avec cet outil pour envoyer des requêtes. Renseignez tous les champs obligatoires, puis cliquez sur Execute (Exécuter).
"done": true
, l'opération de longue durée est terminée.
Répertorier les LRO
Les exemples suivants montrent comment répertorier les opérations de longue durée dans un ensemble de données.
Console
Pour afficher la liste de tous les LRO d'un ensemble de données dans la console Google Cloud, procédez comme suit:
Dans la console Google Cloud, accédez à la page Ensembles de données.
Cliquez sur le nom de l'ensemble de données contenant l'opération de longue durée que vous souhaitez afficher.
Cliquez sur Opérations.
Les opérations de longue durée de l'ensemble de données et leur état s'affichent. Pour afficher les journaux d'erreurs dans Cloud Logging, cliquez sur l'icône "Plus d'informations" dans la dernière colonne, puis sur Afficher les détails dans Cloud Logging. Pour en savoir plus, consultez la section Afficher les journaux d'erreurs dans Cloud Logging.
gcloud
Pour répertorier les opérations de longue durée d'un ensemble de données, exécutez la commande gcloud healthcare operations list
.
Avant d'utiliser les données de la commande ci-dessous, effectuez les remplacements suivants :
- DATASET_ID : ID de l'ensemble de données
- LOCATION : emplacement de l'ensemble de données
Exécutez la commande suivante :
Linux, macOS ou Cloud Shell
gcloud healthcare operations list --dataset=DATASET_ID --location=LOCATION
Windows (PowerShell)
gcloud healthcare operations list --dataset=DATASET_ID --location=LOCATION
Windows (cmd.exe)
gcloud healthcare operations list --dataset=DATASET_ID --location=LOCATION
Vous devriez obtenir un résultat semblable à celui-ci :
Réponse
ID LOCATION DONE OPERATION_ID LOCATION {TRUE|FALSE} ...
REST
Pour répertorier les opérations de longue durée d'un ensemble de données, utilisez la méthode projects.locations.datasets.operations.get
.
Avant d'utiliser les données de requête ci-dessous, effectuez les remplacements suivants :
- PROJECT_ID : ID de votre projet Google Cloud
- DATASET_ID : ID de l'ensemble de données
- LOCATION : emplacement de l'ensemble de données
Pour envoyer votre requête, choisissez l'une des options suivantes :
curl
Exécutez la commande suivante :
curl -X GET \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
"https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/operations"
PowerShell
Exécutez la commande suivante :
$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }
Invoke-WebRequest `
-Method GET `
-Headers $headers `
-Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/operations" | Select-Object -Expand Content
API Explorer
Ouvrez la page de référence de la méthode. Le panneau APIs Explorer s'ouvre dans la partie droite de la page. Vous pouvez interagir avec cet outil pour envoyer des requêtes. Renseignez tous les champs obligatoires, puis cliquez sur Exécuter.
Vous devriez recevoir une réponse JSON de ce type :
Annuler une opération de longue durée
Les exemples suivants montrent comment annuler une opération de longue durée dans un ensemble de données.
Console
Pour annuler une LRO dans la console Google Cloud, procédez comme suit:
Dans la console Google Cloud, accédez à la page Ensembles de données.
Cliquez sur le nom de l'ensemble de données contenant l'opération de longue durée que vous souhaitez afficher.
Cliquez sur Opérations.
Sur la même ligne que l'ordre d'arrêt de l'opération que vous souhaitez annuler, ouvrez la liste Actions, puis cliquez sur Arrêter l'opération.
REST
Pour annuler une opération de longue durée, utilisez la méthode projects.locations.datasets.operations.cancel
.
Avant d'utiliser les données de requête ci-dessous, effectuez les remplacements suivants :
- PROJECT_ID : ID de votre projet Google Cloud
- DATASET_ID : ID de l'ensemble de données
- LOCATION : emplacement de l'ensemble de données
- OPERATION_ID : ID renvoyé par l'opération de longue durée
Pour envoyer votre requête, choisissez l'une des options suivantes :
curl
Exécutez la commande suivante :
curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d "" \
"https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/operations/OPERATION_ID:cancel"
PowerShell
Exécutez la commande suivante :
$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }
Invoke-WebRequest `
-Method POST `
-Headers $headers `
-Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/operations/OPERATION_ID:cancel" | Select-Object -Expand Content
API Explorer
Ouvrez la page de référence de la méthode. Le panneau APIs Explorer s'ouvre dans la partie droite de la page. Vous pouvez interagir avec cet outil pour envoyer des requêtes. Renseignez tous les champs obligatoires, puis cliquez sur Exécuter.
Vous devriez recevoir une réponse JSON de ce type :
Pour afficher l'état de la requête d'annulation, utilisez la méthode projects.locations.datasets.operations.get
.
Avant d'utiliser les données de requête ci-dessous, effectuez les remplacements suivants :
- PROJECT_ID : ID de votre projet Google Cloud
- DATASET_ID : ID de l'ensemble de données
- LOCATION : emplacement de l'ensemble de données
- OPERATION_ID : ID renvoyé par l'opération de longue durée
Pour envoyer votre requête, choisissez l'une des options suivantes :
curl
Exécutez la commande suivante :
curl -X GET \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
"https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/operations/OPERATION_ID"
PowerShell
Exécutez la commande suivante :
$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }
Invoke-WebRequest `
-Method GET `
-Headers $headers `
-Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/operations/OPERATION_ID" | Select-Object -Expand Content
API Explorer
Ouvrez la page de référence de la méthode. Le panneau APIs Explorer s'ouvre dans la partie droite de la page. Vous pouvez interagir avec cet outil pour envoyer des requêtes. Renseignez tous les champs obligatoires, puis cliquez sur Exécuter.
Vous devriez recevoir une réponse JSON de ce type :
Annuler plusieurs LRO
Pour annuler plusieurs LRO, procédez comme suit:
- Appelez la méthode
operations.list
pour obtenir les noms des opérations d'un ensemble de données. - Appelez la méthode
operations.cancel
pour chaque opération.
Google fournit un script Python que vous pouvez utiliser pour annuler toutes les opérations d'un ensemble de données spécifique.
Résoudre les problèmes liés aux LRO
Lorsqu'une opération de longue durée échoue, sa réponse inclut un code d'erreur Google Cloud canonique. Le tableau suivant fournit une explication de la cause associée à chaque code et une recommandation sur la façon de le gérer. Pour de nombreuses erreurs, l'action recommandée consiste à réessayer la requête à l'aide d'un intervalle exponentiel entre les tentatives. Pour savoir comment mettre en œuvre un délai avant réessai exponentiel dans l'API Cloud Healthcare, consultez la section Réessayer les requêtes ayant échoué.
Code | Enum | Description | Action recommandée |
---|---|---|---|
1 | CANCELLED |
L'opération a été annulée, généralement par l'appelant. | Réexécutez l'opération si vous le souhaitez. |
2 | UNKNOWN |
Cette erreur peut s'afficher lorsqu'une valeur Status reçue d'un autre espace d'adressage appartient à un espace d'erreur inconnu dans cet espace d'adressage. Si l'erreur d'une API ne renvoie pas suffisamment d'informations, elle peut être convertie en cette erreur. |
Réessayer avec un intervalle exponentiel entre les tentatives |
3 | INVALID_ARGUMENT |
Le client a spécifié un argument non valide. Cette erreur diffère de FAILED_PRECONDITION . INVALID_ARGUMENT indique les arguments problématiques quel que soit l'état du système (par exemple, un nom de fichier mal formé). |
Ne relancez pas la requête avant d'avoir résolu le problème. |
4 | DEADLINE_EXCEEDED |
Le délai a expiré avant que l'opération puisse se terminer. Pour les opérations qui modifient l'état du système, cette erreur peut être renvoyée même si l'opération s'est terminée avec succès. Par exemple, une réponse réussie d'un serveur aurait pu être retardée suffisamment longtemps pour que le délai expire. | Réessayer avec un intervalle exponentiel entre les tentatives |
5 | NOT_FOUND |
Une entité demandée (par exemple, une ressource FHIR) est introuvable. | Ne relancez pas la requête avant d'avoir résolu le problème. |
6 | ALREADY_EXISTS |
L'entité qu'un client a tenté de créer (par exemple, une instance DICOM) existe déjà. | Ne relancez pas la requête avant d'avoir résolu le problème. |
7 | PERMISSION_DENIED |
L'appelant n'est pas autorisé à exécuter l'opération spécifiée. Ce code d'erreur n'implique pas que la requête soit valide ni que l'entité demandée existe ou qu'elle répond à d'autres prérequis. | Ne relancez pas la requête avant d'avoir résolu le problème. |
8 | RESOURCE_EXHAUSTED |
Une ressource a été épuisée, par exemple un quota par projet. Pour connaître les actions recommandées, consultez les bonnes pratiques de gestion des quotas. | Réessayer avec un intervalle exponentiel entre les tentatives Des quotas peuvent être disponibles au fil du temps. |
9 | FAILED_PRECONDITION |
L'opération a été rejetée car le système n'est pas dans un état requis pour exécuter l'opération. Par exemple, le répertoire à supprimer n'est pas vide ou une opération rmdir est appliquée à un emplacement qui n'est pas un répertoire. |
Ne relancez pas la requête avant d'avoir résolu le problème. |
10 | ABORTED |
L'opération a été abandonnée, généralement en raison d'un problème de simultanéité, tel qu'un échec de vérification du séquenceur ou un abandon de transaction. | Réessayer avec un intervalle exponentiel entre les tentatives |
11 | OUT_OF_RANGE |
L'opération a été tentée au-delà de la plage valide (par exemple, rechercher ou lire après la fin du fichier). Contrairement à INVALID_ARGUMENT , cette erreur indique un problème pouvant être résolu si l'état du système change. |
Ne relancez pas la requête avant d'avoir résolu le problème. |
12 | UNIMPLEMENTED |
L'opération n'est pas implémentée ou n'est pas prise en charge/activée dans l'API Cloud Healthcare. | Ne pas réessayer. |
13 | INTERNAL |
Erreurs internes. Cela indique qu'une erreur inattendue s'est produite lors du traitement dans le système sous-jacent. | Réessayer avec un intervalle exponentiel entre les tentatives |
14 | UNAVAILABLE |
L'API Cloud Healthcare n'est actuellement pas disponible. Il s'agit probablement d'une condition temporaire qui peut être corrigée en réessayant après avoir laissé passer un intervalle entre les tentatives. Notez qu'il n'est pas toujours sûr de relancer des opérations non idempotentes. | Réessayer avec un intervalle exponentiel entre les tentatives |
15 | DATA_LOSS |
Perte ou corruption de données irrécupérable. | Contactez votre administrateur système. L'administrateur système peut contacter un représentant de l'assistance en cas de perte ou de corruption de données. |
16 | UNAUTHENTICATED |
La requête ne dispose pas d'identifiants d'authentification valides pour l'opération. | Ne relancez pas la requête avant d'avoir résolu le problème. |