Questa pagina descrive come gestire il ciclo di vita di un'operazione a lunga esecuzione (LRO) dell'API Cloud Healthcare.
Quando un metodo API potrebbe richiedere molto tempo per essere completato, può restituire un
Operation
al client. Il client può utilizzare l'interfaccia Operation per recuperare lo stato del metodo API in modo asincrono eseguendo il polling dell'operazione. Le LRO nell'API Cloud Healthcare rispettano il pattern di progettazione LRO.Google Cloud
L'API Cloud Healthcare crea LRO per diversi
metodi, ad esempio projects.locations.datasets.fhirStores.import.
Quando viene chiamato projects.locations.datasets.fhirStores.import, l'API Cloud Healthcare crea un'operazione di lunga durata per monitorare lo stato dell'importazione. L'LRO
ha un identificatore univoco che puoi utilizzare per visualizzarne lo stato.
Le operazioni di lunga esecuzione vengono gestite a livello di set di dati. Se chiami un metodo che restituisce un'operazione di lunga durata, come projects.locations.datasets.fhirStores.import, puoi visualizzare lo stato dell'operazione di lunga durata inviando una richiesta contenente l'ID dell'operazione di lunga durata al set di dati padre dell'archivio FHIR in cui viene eseguita l'importazione.
Oltre all'API REST, le seguenti origini generano operazioni a lunga esecuzione quando chiami i metodi elencati in Metodi che restituiscono un'operazione LRO:
- Google Cloud CLI
- La pagina API Cloud Healthcare nella console Google Cloud
Puoi gestire le operazioni LRO dell'API Cloud Healthcare utilizzando la console Google Cloud , Google Cloud CLI o l'API REST.
Il record di un LRO viene conservato per circa 30 giorni dopo il termine dell'LRO, il che significa che non puoi visualizzare o elencare un LRO dopo questo periodo.
Metodi che restituiscono un LRO
I seguenti metodi restituiscono un'operazione a lunga esecuzione.
Metodi di gestione del consenso:
Metodi per i set di dati:
Metodi DICOM:
projects.locations.datasets.dicomStores.deidentifyprojects.locations.datasets.dicomStores.exportprojects.locations.datasets.dicomStores.importprojects.locations.datasets.dicomStores.studies.deleteprojects.locations.datasets.dicomStores.studies.series.delete
Metodi FHIR:
projects.locations.datasets.fhirStores.deidentifyprojects.locations.datasets.fhirStores.exportprojects.locations.datasets.fhirStores.import
Metodi HL7v2:
Visualizzare i dettagli di un'operazione di lunga durata
Gli esempi riportati di seguito mostrano come recuperare i dettagli di un'operazione di lunga durata.
La versione dell'API Cloud Healthcare mostrata nella risposta quando vengono recuperati i dettagli di un'operazione di lunga durata è la stessa della versione dell'API del metodo che ha avviato l'operazione di lunga durata.
Console
Dopo aver chiamato un metodo utilizzando gcloud CLI o l'API che restituisce un'operazione di lunga durata, puoi visualizzare i dettagli dell'operazione di lunga durata nella console Google Cloud .
Nella console Google Cloud , vai alla pagina Set di dati.
Fai clic sul nome del set di dati contenente l'operazione di lunga durata che vuoi visualizzare.
Fai clic su Operazioni.
Per visualizzare i log degli errori per l'operazione in Cloud Logging, fai clic su Azioni e poi su Visualizza dettagli in Cloud Logging. Per saperne di più, consulta Visualizzazione dei log degli errori in Cloud Logging.
Per visualizzare ulteriori dettagli sull'operazione, fai clic su un ID operazione in esecuzione. Viene visualizzata la pagina Dettagli operazione a lunga esecuzione. La pagina mostra le seguenti informazioni:
- L'avanzamento dell'LRO
- I dettagli dell'operazione a lunga esecuzione, come l'ID operazione e il metodo che ha richiamato l'operazione a lunga esecuzione
- Un sottoinsieme di voci di log
gcloud
Supponiamo che tu riceva la seguente risposta dopo aver chiamato il numero gcloud healthcare dicom-stores deidentify:
Request issued for: [DATASET_ID] Waiting for operation [OPERATION_ID] to complete...
La risposta mostra che l'API Cloud Healthcare ha creato un'operazione di lunga durata con un ID operazione. Puoi anche recuperare l'ID operazione elencando le operazioni di database a lunga esecuzione. Il comando continua a essere eseguito fino al termine, dopodiché restituisce il seguente output:
Request issued for: [DATASET_ID] Waiting for operation [OPERATION_ID] to complete...done name: projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID
Per visualizzare i dettagli dell'operazione a lunga esecuzione, esegui il comando gcloud healthcare operations describe.
Prima di utilizzare i dati dei comandi riportati di seguito, effettua le seguenti sostituzioni:
- PROJECT_ID: l'ID del tuo progetto Google Cloud
- DATASET_ID: l'ID set di dati
- LOCATION: la posizione del set di dati
- OPERATION_ID: l'ID restituito dall'operazione a lunga esecuzione
Esegui questo comando:
Linux, macOS o 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
Dovresti ricevere una risposta simile alla seguente:
Risposta
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
Supponiamo che tu riceva la seguente risposta dopo aver chiamato
projects.locations.datasets.dicomStores.deidentify:
{
"name": "projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/operations/OPERATION_ID"
}
Il valore name nella risposta mostra che l'API Cloud Healthcare
ha creato un'operazione a lunga esecuzione denominata projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/operations/OPERATION_ID. Puoi anche recuperare il nome dell'operazione di lunga durata elencando le operazioni di lunga durata.
Per ottenere lo stato dell'operazione LRO, utilizza il metodo projects.locations.datasets.operations.get. Per eseguire il polling di un'operazione di lunga durata, chiama ripetutamente il metodo projects.locations.datasets.operations.get
finché l'operazione non viene completata. Utilizza un backoff tra una richiesta di polling e l'altra, ad esempio 10 secondi.
Prima di utilizzare i dati della richiesta, apporta le sostituzioni seguenti:
- PROJECT_ID: l'ID del tuo progetto Google Cloud
- DATASET_ID: l'ID set di dati
- LOCATION: la posizione del set di dati
- OPERATION_ID: l'ID restituito dall'operazione a lunga esecuzione
Per inviare la richiesta, scegli una di queste opzioni:
curl
Esegui questo comando:
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
Esegui questo comando:
$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
Explorer API
Apri la pagina di riferimento del metodo. Sul lato destro della pagina si apre il riquadro Explorer API. Puoi interagire con questo strumento per inviare richieste. Compila i campi obbligatori e fai clic su Esegui.
"done": true, l'operazione a lunga esecuzione è terminata.
Elenco di LRO
Gli esempi riportati di seguito mostrano come elencare le operazioni di lunga esecuzione in un set di dati.
Console
Per visualizzare un elenco di tutte le operazioni LRO in un set di dati nella console Google Cloud , completa i seguenti passaggi:
Nella console Google Cloud , vai alla pagina Set di dati.
Fai clic sul nome del set di dati contenente l'operazione di lunga durata che vuoi visualizzare.
Fai clic su Operazioni.
Viene visualizzato un elenco delle operazioni di lunga durata nel set di dati e il relativo stato. Per visualizzare i log degli errori in Cloud Logging, fai clic sull'icona Altre informazioni nell'ultima colonna e poi su Visualizza dettagli in Cloud Logging. Per saperne di più, consulta Visualizzazione dei log degli errori su Cloud Logging.
gcloud
Per elencare le operazioni di lunga durata in un set di dati, esegui il comando gcloud healthcare operations list.
Prima di utilizzare i dati dei comandi riportati di seguito, effettua le seguenti sostituzioni:
- DATASET_ID: l'ID set di dati
- LOCATION: la posizione del set di dati
Esegui questo comando:
Linux, macOS o 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
Dovresti ricevere una risposta simile alla seguente:
Risposta
ID LOCATION DONE
OPERATION_ID LOCATION {TRUE|FALSE}
...
REST
Per elencare le operazioni di lunga durata in un set di dati, utilizza il metodo projects.locations.datasets.operations.get.
Prima di utilizzare i dati della richiesta, apporta le sostituzioni seguenti:
- PROJECT_ID: l'ID del tuo progetto Google Cloud
- DATASET_ID: l'ID set di dati
- LOCATION: la posizione del set di dati
Per inviare la richiesta, scegli una di queste opzioni:
curl
Esegui questo comando:
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
Esegui questo comando:
$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
Explorer API
Apri la pagina di riferimento del metodo. Sul lato destro della pagina si apre il riquadro Explorer API. Puoi interagire con questo strumento per inviare richieste. Compila i campi obbligatori e fai clic su Esegui.
Dovresti ricevere una risposta JSON simile alla seguente:
Annullare un'operazione a lunga esecuzione
Gli esempi riportati di seguito mostrano come annullare un'operazione LRO in un set di dati.
Console
Per annullare un'operazione LRO nella console Google Cloud , completa i seguenti passaggi:
Nella console Google Cloud , vai alla pagina Set di dati.
Fai clic sul nome del set di dati contenente l'operazione di lunga durata che vuoi visualizzare.
Fai clic su Operazioni.
Nella stessa riga dell'operazione di lunga durata che vuoi annullare, apri l'elenco Azioni e fai clic su Interrompi operazione.
REST
Per annullare un'operazione a lunga esecuzione, utilizza il metodo
projects.locations.datasets.operations.cancel.
Prima di utilizzare i dati della richiesta, apporta le sostituzioni seguenti:
- PROJECT_ID: l'ID del tuo progetto Google Cloud
- DATASET_ID: l'ID set di dati
- LOCATION: la posizione del set di dati
- OPERATION_ID: l'ID restituito dall'operazione a lunga esecuzione
Per inviare la richiesta, scegli una di queste opzioni:
curl
Esegui questo comando:
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
Esegui questo comando:
$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
Explorer API
Apri la pagina di riferimento del metodo. Sul lato destro della pagina si apre il riquadro Explorer API. Puoi interagire con questo strumento per inviare richieste. Compila i campi obbligatori e fai clic su Esegui.
Dovresti ricevere una risposta JSON simile alla seguente:
Per visualizzare lo stato della richiesta di annullamento, utilizza il metodo
projects.locations.datasets.operations.get.
Prima di utilizzare i dati della richiesta, apporta le sostituzioni seguenti:
- PROJECT_ID: l'ID del tuo progetto Google Cloud
- DATASET_ID: l'ID set di dati
- LOCATION: la posizione del set di dati
- OPERATION_ID: l'ID restituito dall'operazione a lunga esecuzione
Per inviare la richiesta, scegli una di queste opzioni:
curl
Esegui questo comando:
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
Esegui questo comando:
$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
Explorer API
Apri la pagina di riferimento del metodo. Sul lato destro della pagina si apre il riquadro Explorer API. Puoi interagire con questo strumento per inviare richieste. Compila i campi obbligatori e fai clic su Esegui.
Dovresti ricevere una risposta JSON simile alla seguente:
Annullamento di più LRO
Per annullare più LRO, completa i seguenti passaggi:
- Chiama il metodo
operations.listper ottenere i nomi delle operazioni in un set di dati. - Chiama il metodo
operations.cancelsu ogni operazione.
Google fornisce uno script Python che puoi utilizzare per annullare tutte le operazioni per un determinato set di dati.
Risoluzione dei problemi relativi alle operazioni a lunga esecuzione
Quando un'operazione LRO non va a buon fine, la risposta include un codice di errore canonico Google Cloud . La tabella seguente fornisce una spiegazione della causa di ciascun codice e un consiglio su come gestirlo. Per molti errori, l'azione consigliata è riprovare la richiesta utilizzando il backoff esponenziale. Per informazioni su come implementare il backoff esponenziale nell'API Cloud Healthcare, consulta Riprova le richieste non riuscite.
| Codice | Enum | Descrizione | Azione consigliata |
|---|---|---|---|
| 1 | CANCELLED |
L'operazione è stata annullata, in genere dal chiamante. | Se vuoi, esegui di nuovo l'operazione. |
| 2 | UNKNOWN |
Questo errore potrebbe essere restituito quando un valore Status ricevuto da un altro spazio di indirizzi appartiene a uno spazio di errore sconosciuto in questo spazio di indirizzi. Se l'errore di un'API non restituisce informazioni sufficienti, potrebbe essere convertito in questo errore. |
Riprova con il backoff esponenziale. |
| 3 | INVALID_ARGUMENT |
Il client ha specificato un argomento non valido. Questo errore è diverso da FAILED_PRECONDITION. INVALID_ARGUMENT indica argomenti problematici indipendentemente dallo stato del sistema, ad esempio un nome file non valido. |
Non riprovare senza risolvere il problema. |
| 4 | DEADLINE_EXCEEDED |
La scadenza è terminata prima che l'operazione potesse essere completata. Per le operazioni che modificano lo stato del sistema, questo errore potrebbe essere restituito anche se l'operazione è stata completata correttamente. Ad esempio, una risposta corretta da un server potrebbe essere stata ritardata abbastanza a lungo da far scadere il termine. | Riprova con il backoff esponenziale. |
| 5 | NOT_FOUND |
Alcune entità richieste, ad esempio una risorsa FHIR, non sono state trovate. | Non riprovare senza risolvere il problema. |
| 6 | ALREADY_EXISTS |
L'entità che un client ha tentato di creare, ad esempio un'istanza DICOM, esiste già. | Non riprovare senza risolvere il problema. |
| 7 | PERMISSION_DENIED |
Il chiamante non dispone dell'autorizzazione per eseguire l'operazione specificata. Questo codice di errore non implica che la richiesta sia valida o che l'entità richiesta esista o soddisfi altre precondizioni. | Non riprovare senza risolvere il problema. |
| 8 | RESOURCE_EXHAUSTED |
Alcune risorse sono esaurite, ad esempio una quota per progetto. Consulta le best practice per la gestione delle quote per le azioni consigliate. | Riprova con il backoff esponenziale. La quota potrebbe diventare disponibile nel tempo. |
| 9 | FAILED_PRECONDITION |
L'operazione è stata rifiutata perché il sistema non è nello stato richiesto per l'esecuzione dell'operazione. Ad esempio, la directory da eliminare non è vuota o un'operazione rmdir viene applicata a un elemento non di tipo directory. |
Non riprovare senza risolvere il problema. |
| 10 | ABORTED |
L'operazione è stata interrotta, in genere a causa di un problema di concorrenza, ad esempio un controllo del sequencer non riuscito o un'interruzione della transazione. | Riprova con il backoff esponenziale. |
| 11 | OUT_OF_RANGE |
L'operazione è stata tentata oltre l'intervallo valido, ad esempio la ricerca o la lettura oltre la fine del file. A differenza di INVALID_ARGUMENT, questo errore indica un problema che potrebbe essere risolto se lo stato del sistema cambia. |
Non riprovare senza risolvere il problema. |
| 12 | UNIMPLEMENTED |
L'operazione non è implementata o non è supportata/abilitata nell'API Cloud Healthcare. | Non riprovare. |
| 13 | INTERNAL |
Errori interni. Ciò indica che si è verificato un errore imprevisto durante l'elaborazione nel sistema sottostante. | Riprova con il backoff esponenziale. |
| 14 | UNAVAILABLE |
L'API Cloud Healthcare non è al momento disponibile. Si tratta molto probabilmente di una condizione temporanea, che può essere corretta riprovando con un backoff. Tieni presente che non è sempre sicuro riprovare le operazioni non idempotenti. | Riprova con il backoff esponenziale. |
| 15 | DATA_LOSS |
Perdita o danneggiamento dei dati non recuperabili. | Rivolgiti al tuo amministratore di sistema. L'amministratore di sistema potrebbe voler contattare un rappresentante dell'assistenza se si è verificata una perdita o un danneggiamento dei dati. |
| 16 | UNAUTHENTICATED |
La richiesta non ha credenziali di autenticazione valide per l'operazione. | Non riprovare senza risolvere il problema. |