Gestionar operaciones de larga duración

En esta página se describe cómo gestionar el ciclo de vida de una operación de larga duración (OLD) de la API Cloud Healthcare.

Cuando un método de API puede tardar mucho tiempo en completarse, puede devolver un Operation al cliente. El cliente puede usar la interfaz Operation para recuperar el estado del método de la API de forma asíncrona sondeando la operación. Los LROs de la API Cloud Healthcare se ajustan al Google Cloud patrón de diseño de LRO.

La API Cloud Healthcare crea operaciones de larga duración para varios métodos, como projects.locations.datasets.fhirStores.import. Cuando se llama a projects.locations.datasets.fhirStores.import, la API Cloud Healthcare crea un LRO para monitorizar el estado de la importación. El LRO tiene un identificador único que puedes usar para ver su estado.

Las operaciones de larga duración se gestionan a nivel de conjunto de datos. Si llamas a un método que devuelve un LRO, como projects.locations.datasets.fhirStores.import, puedes ver el estado del LRO enviando una solicitud que contenga el ID del LRO al conjunto de datos superior del almacén FHIR en el que se está produciendo la importación.

Además de la API REST, las siguientes fuentes generan operaciones de larga duración cuando llamas a los métodos que se indican en Métodos que devuelven una operación de larga duración:

Puede gestionar sus operaciones de larga duración de la API Cloud Healthcare mediante la Google Cloud consola, la CLI de Google Cloud o la API REST.

El registro de una operación de larga duración se conserva durante aproximadamente 30 días después de que finalice, lo que significa que no puedes ver ni enumerar una operación de larga duración después de ese periodo.

Métodos que devuelven un LRO

Los siguientes métodos devuelven un LRO.

Métodos de gestión del consentimiento:

Métodos de conjuntos de datos:

Métodos DICOM:

Métodos de FHIR:

Métodos de HL7v2:

Obtener detalles sobre una operación de larga duración

En los siguientes ejemplos se muestra cómo obtener detalles de una operación LRO.

La versión de la API Cloud Healthcare que se muestra en la respuesta al obtener detalles sobre una operación LRO es la misma que la versión de la API del método que inició la operación LRO.

Consola

Después de llamar a un método con la CLI de gcloud o la API que devuelve un LRO, puedes ver los detalles del LRO en la consola Google Cloud .

  1. En la Google Cloud consola, ve a la página Conjuntos de datos.

    Ve a Conjuntos de datos.

  2. Haz clic en el nombre del conjunto de datos que contiene la operación LRO que quieres ver.

  3. Haz clic en Operaciones.

  4. Para ver los registros de errores de la operación en Cloud Logging, haga clic en Acciones y, a continuación, en Ver detalles en Cloud Logging. Para obtener más información, consulta Ver registros de errores en Cloud Logging.

  5. Para ver más detalles sobre la operación, haz clic en el ID de una operación en curso. Se mostrará la página Detalles de la operación de larga duración. En esta página se muestra la siguiente información:

    • Progreso de la LRO
    • Los detalles de la operación de larga duración, como el ID de la operación y el método que la ha invocado
    • Un subconjunto de entradas de registro

gcloud

Supongamos que recibes la siguiente respuesta después de llamar a gcloud healthcare dicom-stores deidentify:

Request issued for: [DATASET_ID]
Waiting for operation [OPERATION_ID] to complete...

La respuesta muestra que la API Cloud Healthcare ha creado una operación de larga duración con un ID de operación. También puede recuperar el ID de operación consultando las operaciones de larga duración de la base de datos. El comando sigue ejecutándose hasta que finaliza, tras lo cual muestra lo siguiente:

Request issued for: [DATASET_ID]
Waiting for operation [OPERATION_ID] to complete...done
name: projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID

Para obtener información sobre el LRO, ejecuta el comando gcloud healthcare operations describe.

Antes de usar los datos de los comandos que se indican a continuación, haz los siguientes cambios:

  • PROJECT_ID: el ID de tu Google Cloud proyecto
  • DATASET_ID: el ID del conjunto de datos
  • LOCATION: la ubicación del conjunto de datos
  • OPERATION_ID: el ID devuelto por la operación de larga duración

Ejecuta el siguiente 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

Deberías recibir una respuesta similar a la siguiente:

Respuesta

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

Supongamos que recibes la siguiente respuesta después de llamar a projects.locations.datasets.dicomStores.deidentify:

{
  "name": "projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/operations/OPERATION_ID"
}

El valor name de la respuesta muestra que la API de Cloud Healthcare ha creado una operación de larga duración llamada projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/operations/OPERATION_ID. También puedes obtener el nombre de la OLR enumerando las OLRs.

Para obtener el estado de la LRO, usa el método projects.locations.datasets.operations.get. Para sondear una LRO, llama repetidamente al método projects.locations.datasets.operations.get hasta que finalice la operación. Usa un tiempo de espera entre cada solicitud de sondeo, como 10 segundos.

Antes de usar los datos de la solicitud, haz las siguientes sustituciones:

  • PROJECT_ID: el ID de tu Google Cloud proyecto
  • DATASET_ID: el ID del conjunto de datos
  • LOCATION: la ubicación del conjunto de datos
  • OPERATION_ID: el ID devuelto por la operación de larga duración

Para enviar tu solicitud, elige una de estas opciones:

curl

Ejecuta el comando siguiente:

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

Ejecuta el comando siguiente:

$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

Explorador de APIs

Abre la página de referencia del método. El panel Explorador de APIs se abre en la parte derecha de la página. Puedes interactuar con esta herramienta para enviar solicitudes. Rellena los campos obligatorios y haz clic en Ejecutar.

El resultado es el siguiente. Cuando la respuesta contiene "done": true, la operación de larga duración ha finalizado.

Mostrar LROs

En los siguientes ejemplos se muestra cómo ver una lista de las operaciones LRO de un conjunto de datos.

Consola

Para ver una lista de todas las operaciones de larga duración de un conjunto de datos en la Google Cloud consola, sigue estos pasos:

  1. En la Google Cloud consola, ve a la página Conjuntos de datos.

    Ve a Conjuntos de datos.

  2. Haz clic en el nombre del conjunto de datos que contiene la operación LRO que quieres ver.

  3. Haz clic en Operaciones.

Se muestra una lista de las operaciones de larga duración del conjunto de datos y su estado. Para ver los registros de errores en Cloud Logging, haga clic en el icono de más información de la última columna y, a continuación, en Ver detalles en Cloud Logging. Para obtener más información, consulta Ver registros de errores en Cloud Logging.

gcloud

Para enumerar los LROs de un conjunto de datos, ejecuta el comando gcloud healthcare operations list.

Antes de usar los datos de los comandos que se indican a continuación, haz los siguientes cambios:

  • DATASET_ID: el ID del conjunto de datos
  • LOCATION: la ubicación del conjunto de datos

Ejecuta el siguiente 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

Deberías recibir una respuesta similar a la siguiente:

Respuesta

ID             LOCATION     DONE
OPERATION_ID   LOCATION {TRUE|FALSE}
...

REST

Para enumerar los LROs de un conjunto de datos, usa el método projects.locations.datasets.operations.get.

Antes de usar los datos de la solicitud, haz las siguientes sustituciones:

  • PROJECT_ID: el ID de tu Google Cloud proyecto
  • DATASET_ID: el ID del conjunto de datos
  • LOCATION: la ubicación del conjunto de datos

Para enviar tu solicitud, elige una de estas opciones:

curl

Ejecuta el comando siguiente:

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

Ejecuta el comando siguiente:

$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

Explorador de APIs

Abre la página de referencia del método. El panel Explorador de APIs se abre en la parte derecha de la página. Puedes interactuar con esta herramienta para enviar solicitudes. Rellena los campos obligatorios y haz clic en Ejecutar.

Deberías recibir una respuesta JSON similar a la siguiente:

Cancelar una LRO

En los siguientes ejemplos se muestra cómo cancelar una operación LRO en un conjunto de datos.

Consola

Para cancelar una operación de larga duración en la consola de Google Cloud , sigue estos pasos:

  1. En la Google Cloud consola, ve a la página Conjuntos de datos.

    Ve a Conjuntos de datos.

  2. Haz clic en el nombre del conjunto de datos que contiene la operación LRO que quieres ver.

  3. Haz clic en Operaciones.

  4. En la misma fila que la operación de larga duración que quieras cancelar, abre la lista Acciones y haz clic en Detener operación.

REST

Para cancelar una operación de larga duración, utiliza el método projects.locations.datasets.operations.cancel.

Antes de usar los datos de la solicitud, haz las siguientes sustituciones:

  • PROJECT_ID: el ID de tu Google Cloud proyecto
  • DATASET_ID: el ID del conjunto de datos
  • LOCATION: la ubicación del conjunto de datos
  • OPERATION_ID: el ID devuelto por la operación de larga duración

Para enviar tu solicitud, elige una de estas opciones:

curl

Ejecuta el comando siguiente:

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

Ejecuta el comando siguiente:

$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

Explorador de APIs

Abre la página de referencia del método. El panel Explorador de APIs se abre en la parte derecha de la página. Puedes interactuar con esta herramienta para enviar solicitudes. Rellena los campos obligatorios y haz clic en Ejecutar.

Deberías recibir una respuesta JSON similar a la siguiente:

Para ver el estado de la solicitud de cancelación, usa el método projects.locations.datasets.operations.get.

Antes de usar los datos de la solicitud, haz las siguientes sustituciones:

  • PROJECT_ID: el ID de tu Google Cloud proyecto
  • DATASET_ID: el ID del conjunto de datos
  • LOCATION: la ubicación del conjunto de datos
  • OPERATION_ID: el ID devuelto por la operación de larga duración

Para enviar tu solicitud, elige una de estas opciones:

curl

Ejecuta el comando siguiente:

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

Ejecuta el comando siguiente:

$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

Explorador de APIs

Abre la página de referencia del método. El panel Explorador de APIs se abre en la parte derecha de la página. Puedes interactuar con esta herramienta para enviar solicitudes. Rellena los campos obligatorios y haz clic en Ejecutar.

Deberías recibir una respuesta JSON similar a la siguiente:

Cancelar varios LROs

Para cancelar varias operaciones LRO, sigue estos pasos:

  1. Llama al método operations.list para obtener los nombres de las operaciones de un conjunto de datos.
  2. Llama al método operations.cancel en cada operación.

Google proporciona un script de Python que puedes usar para cancelar todas las operaciones de un conjunto de datos determinado.

Solucionar problemas de operaciones de larga duración

Cuando falla una operación de larga duración, su respuesta incluye un código de error canónico Google Cloud . En la siguiente tabla se explica la causa de cada código y se recomienda cómo gestionarlo. En muchos casos, la acción recomendada es volver a intentar la solicitud con un tiempo de espera exponencial. Para obtener información sobre cómo implementar el retroceso exponencial en la API Cloud Healthcare, consulta Reintentar solicitudes fallidas.

Código Enum Descripción Acción recomendada
1 CANCELLED La operación se canceló. Normalmente, lo hizo la persona que llama. Vuelve a ejecutar la operación si quieres.
2 UNKNOWN Este error puede devolverse cuando un valor Status recibido de otro espacio de direcciones pertenece a un espacio de errores que no se conoce en este espacio de direcciones. Si el error de una API no devuelve suficiente información, puede que se convierta en este error. Reintenta la operación con un tiempo de espera exponencial.
3 INVALID_ARGUMENT El cliente especificó un argumento no válido. Este error es diferente de FAILED_PRECONDITION. INVALID_ARGUMENT indica argumentos que dan problemas independientemente del estado del sistema, como un nombre de archivo con formato incorrecto. No vuelvas a intentarlo sin solucionar el problema.
4 DEADLINE_EXCEEDED El tiempo de espera se ha agotado antes de que la operación se completara. En el caso de las operaciones que cambian el estado del sistema, este error puede devolverse aunque la operación se haya completado correctamente. Por ejemplo, una respuesta correcta de un servidor podría haberse retrasado el tiempo suficiente para que se agote el tiempo de espera. Reintenta la operación con un tiempo de espera exponencial.
5 NOT_FOUND No se ha encontrado alguna entidad solicitada, como un recurso FHIR. No vuelvas a intentarlo sin solucionar el problema.
6 ALREADY_EXISTS La entidad que ha intentado crear un cliente, como una instancia DICOM, ya existe. No vuelvas a intentarlo sin solucionar el problema.
7 PERMISSION_DENIED La persona que llama no tiene permiso para ejecutar la operación especificada. Este código de error no implica que la solicitud sea válida ni que la entidad solicitada exista o cumpla otras condiciones previas. No vuelvas a intentarlo sin solucionar el problema.
8 RESOURCE_EXHAUSTED Se ha agotado algún recurso, como una cuota por proyecto. Consulta las prácticas recomendadas para gestionar las cuotas. Reintenta la operación con un tiempo de espera exponencial. Es posible que la cuota esté disponible con el tiempo.
9 FAILED_PRECONDITION Se ha rechazado la operación porque el sistema no se encuentra en un estado requerido para la ejecución de dicha operación. Por ejemplo, el directorio que se va a eliminar no está vacío o se aplica una operación rmdir a un elemento que no es un directorio. No vuelvas a intentarlo sin solucionar el problema.
10 ABORTED La operación se anuló, normalmente debido a un problema de simultaneidad, como un error en la verificación del secuenciador o la cancelación de una transacción. Reintenta la operación con un tiempo de espera exponencial.
11 OUT_OF_RANGE Se ha intentado realizar la operación fuera del intervalo válido, como buscar o leer más allá del final del archivo. A diferencia de INVALID_ARGUMENT, este error indica un problema que puede corregirse si el estado del sistema cambia. No vuelvas a intentarlo sin solucionar el problema.
12 UNIMPLEMENTED La operación no se ha implementado o no es compatible o no se ha habilitado en la API Cloud Healthcare. No vuelvas a intentarlo.
13 INTERNAL Errores internos. Esto indica que se ha producido un error inesperado al procesar el sistema subyacente. Reintenta la operación con un tiempo de espera exponencial.
14 UNAVAILABLE La API Cloud Healthcare no está disponible en este momento. Es muy probable que se trate de una condición transitoria, que puede corregirse volviendo a intentarlo con una interrupción. Ten en cuenta que no siempre es seguro volver a intentar operaciones no idempotentes. Reintenta la operación con un tiempo de espera exponencial.
15 DATA_LOSS Datos dañados o pérdida irrecuperable de datos. Ponte en contacto con el administrador del sistema. El administrador del sistema puede ponerse en contacto con un representante del servicio de asistencia si se han perdido o dañado datos.
16 UNAUTHENTICATED La solicitud no cuenta con credenciales de autenticación válidas para la operación. No vuelvas a intentarlo sin solucionar el problema.