Monitor long-running operations

This page describes how to manage the lifecycle of a long-running operation(LRO) in Vertex AI Search.

Along-running operation object is returned when a callto a method might take a long time to complete. For example, the Discovery Engine API creates a long-running operation when you calldocuments.importthrough the API or Client Libraries. The operation tracks the status of theprocessing job.

You can use the long-running operations methods that the Discovery Engine API provides tocheck thestatus of the operations. Youcan also list or poll operations.

The record of an operation is kept for approximately 30 days after the operationfinishes, meaning that you can't view or list an operation after that time.

List long-running operations

The following show how to list the operations for a Google Cloudresource.

Note: Long running operations can't be filtered or paginated inVertex AI Search. That is, when you call theoperations.list method,you can't use thefilter,pageSize, orpageToken fields.

REST

To list the long-running operations for a Google Cloud resource, followthis step:

  • Call theoperations.listmethod:

    curl-XGET\-H"Authorization: Bearer$(gcloudauthprint-access-token)"\"https://discoveryengine.googleapis.com/v1/projects/PROJECT_ID/locations/global/collections/default_collection/dataStores/DATA_STORE_ID/operations"

    DATA_STORE_ID: The ID of the Vertex AI Search data store thatwas created with your engine. In the Google Cloud console URL, the data store IDappears afterengines/ and before/data.

Python

For more information, see theVertex AI SearchPython API reference documentation.

To authenticate to Vertex AI Search, set up Application Default Credentials. For more information, seeSet up authentication for a local development environment.

fromtypingimportOptionalfromgoogle.cloudimportdiscoveryenginefromgoogle.longrunningimportoperations_pb2# TODO(developer): Uncomment these variables before running the sample.# project_id = "YOUR_PROJECT_ID"# location = "YOUR_PROCESSOR_LOCATION"  # Options: "global"# search_engine_id = "YOUR_SEARCH_ENGINE_ID"# Create filter in https://google.aip.dev/160 syntax# operations_filter = "YOUR_FILTER"deflist_operations_sample(project_id:str,location:str,search_engine_id:str,operations_filter:Optional[str]=None,)->operations_pb2.ListOperationsResponse:# Create a clientclient=discoveryengine.DocumentServiceClient()# The full resource name of the search engine branch.name=f"projects/{project_id}/locations/{location}/collections/default_collection/dataStores/{search_engine_id}"# Make ListOperations requestrequest=operations_pb2.ListOperationsRequest(name=name,filter=operations_filter,)# Make ListOperations requestresponse=client.list_operations(request=request)# Print the Operation Informationforoperationinresponse.operations:print(operation)returnresponse

Get details about a long-running operation

The following show how to get details about an operation.

REST

To get the status of and view details about a long-running operation, follow these steps:

  1. Find the name of the operation in one of two ways:

    • After you've made a call to a method that returns a long-runningoperation, review the response.

      For example, if you calldocuments.import,the start of the response looks something like this:

      {"operations":[{"name":"projects/12345/locations/global/collections/default_collection/dataStores/my-datastore_4321/branches/0/operations/import-documents-56789","metadata":{"@type":"type.googleapis.com/google.cloud.discoveryengine.v1.ImportDocumentsMetadata",}}]}

      Thename value in the response provides the operation name, which canbe used to query the operation status. Don't include the quotes when youcopy the operation name.

    • Get the operation name bylisting long-runningoperations.

  2. Call theoperations.getmethod on the resource that created the operation:

    curl-XGET\-H"Authorization: Bearer$(gcloudauthprint-access-token)"\"https://discoveryengine.googleapis.com/v1/OPERATION_NAME"

    OPERATION_NAME: Provide the name of the operation forwhich you need information. You can find the operation name bylisting long-running operations.

    The first lines of the response from theGET command look something like this:

    {"name":"projects/12345/locations/global/collections/default_collection/dataStores/my-datastore_4321/branches/0/operations/import-documents-56789","metadata":{"@type":"type.googleapis.com/google.cloud.discoveryengine.v1.ImportDocumentsMetadata"}}

Python

For more information, see theVertex AI SearchPython API reference documentation.

To authenticate to Vertex AI Search, set up Application Default Credentials. For more information, seeSet up authentication for a local development environment.

fromgoogle.cloudimportdiscoveryenginefromgoogle.longrunningimportoperations_pb2# TODO(developer): Uncomment these variables before running the sample.# Example: `projects/{project}/locations/{location}/collections/{default_collection}/dataStores/{search_engine_id}/branches/{0}/operations/{operation_id}`# operation_name = "YOUR_OPERATION_NAME"defget_operation_sample(operation_name:str)->operations_pb2.Operation:# Create a clientclient=discoveryengine.DocumentServiceClient()# Make GetOperation requestrequest=operations_pb2.GetOperationRequest(name=operation_name)operation=client.get_operation(request=request)# Print the Operation Informationprint(operation)returnoperation

Poll a long-running operation

The following show how to poll the status of an operation.

REST

To poll the long-running operation until it finishes, follow these steps:

  1. Run the following command, which calls theoperations.get method repeatedly, using a backoff of 10 seconds between each request:

    whiletrue;\docurl-XGET\-H"Authorization: Bearer$(gcloudauthprint-access-token)"\"https://discoveryengine.googleapis.com/v1/OPERATION_NAME";\sleep10;\done

    OPERATION_NAME: Provide the name of the operation you want topoll. You can find the operation name bylisting long-running operations.For example,projects/12345/locations/global/collections/default_collection/dataStores/my-datastore_4321/branches/0/operations/import-documents-56789.

  2. Stop the polling job (Control+Z) after the status shows"done": true.

Python

For more information, see theVertex AI SearchPython API reference documentation.

To authenticate to Vertex AI Search, set up Application Default Credentials. For more information, seeSet up authentication for a local development environment.

fromtimeimportsleepfromgoogle.cloudimportdiscoveryenginefromgoogle.longrunningimportoperations_pb2# TODO(developer): Uncomment these variables before running the sample.# Example: `projects/{project}/locations/{location}/collections/{default_collection}/dataStores/{search_engine_id}/branches/{0}/operations/{operation_id}`# operation_name = "YOUR_OPERATION_NAME"defpoll_operation_sample(operation_name:str,limit:int=10)->operations_pb2.Operation:# Create a clientclient=discoveryengine.DocumentServiceClient()# Make GetOperation requestrequest=operations_pb2.GetOperationRequest(name=operation_name)for_inrange(limit):operation=client.get_operation(request=request)# Print the Operation Informationprint(operation)# Stop polling when Operation is no longer runningifoperation.done:break# Wait 10 seconds before polling againsleep(10)returnoperation

Cancel a long-running operation

The following shows how to cancel an operation:

REST

To cancel a long-running operation, follow these steps:

  • Call theoperations.cancelmethod:

    curl-Xpost\-H"Authorization: Bearer$(gcloudauthprint-access-token)"\"https://discoveryengine.googleapis.com/v1/OPERATION_NAME":cancel

    OPERATION_NAME: Provide the name of the operation youwant to cancel. You can find the operation name bylisting long-running operations.For example,projects/12345/locations/global/collections/default_collection/dataStores/my-datastore_4321/branches/0/operations/import-documents-56789.

    After the API call is made, the server attempts to cancel the operation.The results you see and the actions you can take are as follows:

    • An error with"code": 400 and"status": "FAILED_PRECONDITION"indicates that the request couldn't be canceled.
    • A successful cancellation results in an empty JSON object. To verify thecancellation:

      • Use theoperations.get method.
      • If the operation is successfully cancelled, the response from theoperations.get method has the error"code": 1, which representstheCANCELLED status code.

        For example:

        {"name":"projects/12345/locations/global/collections/default_collection/dataStores/my-datastore_4321/branches/0/operations/import-documents-56789","metadata":{"@type":"type.googleapis.com/google.cloud.discoveryengine.v1alpha.ImportDocumentsMetadata","createTime":"2025-04-28T21:29:21.199190Z","updateTime":"2025-04-28T21:31:29.076865Z"},"done":true,"error":{"code":1,"message":"Operation projects/12345/locations/global/collections/default_collection/dataStores/my-datastore_4321/branches/0/operations/import-documents-56789 is cancelled."}}

Python

For more information, see theVertex AI SearchPython API reference documentation.

To authenticate to Vertex AI Search, set up Application Default Credentials. For more information, seeSet up authentication for a local development environment.

fromgoogle.cloudimportdiscoveryenginefromgoogle.longrunningimportoperations_pb2# TODO(developer): Uncomment these variables before running the sample.# Example: `projects/{project}/locations/{location}/collections/{default_collection}/dataStores/{search_engine_id}/branches/{0}/operations/{operation_id}`# operation_name = "YOUR_OPERATION_NAME"defcancel_operation_sample(operation_name:str)->None:# Create a clientclient=discoveryengine.DocumentServiceClient()# Make CancelOperation requestrequest=operations_pb2.CancelOperationRequest(name=operation_name)client.cancel_operation(request=request)return

Except as otherwise noted, the content of this page is licensed under theCreative Commons Attribution 4.0 License, and code samples are licensed under theApache 2.0 License. For details, see theGoogle Developers Site Policies. Java is a registered trademark of Oracle and/or its affiliates.

Last updated 2026-02-18 UTC.