Thanks to visit codestin.com
Credit goes to github.com

Skip to content

retry parameter ignored in the operation.result(retry=retry) call #458

Closed
@medb

Description

@medb

Environment details

  • OS type and version: Debian 5.18.16
  • Python version: Python 3.10.7
  • pip version: pip 22.0.2 from /usr/lib/python3/dist-packages/pip (python 3.10)
  • google-api-core version: 2.10.1

Steps to reproduce

  1. Use any GCP API that returns LRO
  2. Use operation.result method call with custom retry parameter
  3. This method will return ~60 seconds after actual operation finishes, while it should not have more than 10 seconds of overhead with custom retry policy (see below)

Code example

from google.api_core import retry
from google.cloud import dataproc_v1
from google.api_core.client_options import ClientOptions

import time

project = '. . .'
region = 'us-central1'

# Create Dataproc batch
client_options = ClientOptions(api_endpoint="{}-dataproc.googleapis.com:443".format(region))
client = dataproc_v1.BatchControllerClient(client_options=client_options)
batch = dataproc_v1.Batch()
batch.spark_batch.main_class = 'org.apache.spark.examples.SparkPi'
batch.spark_batch.jar_file_uris = [
  'file:///usr/lib/spark/examples/jars/spark-examples.jar',
]
batch.spark_batch.args = ['1']
batch.runtime_config.properties = {
  'spark.executor.instances': '2',
}

parent = f"projects/{project}/locations/{region}"
request = dataproc_v1.CreateBatchRequest(
  parent=parent,  # type: ignore
  batch=batch,  # type: ignore
)

# Make the request
print("Creating batch")
operation = client.create_batch(request=request)  # type: ignore
print("Batch created")

# This takes quite a while, waiting on GCP response to resolve
retry = retry.Retry(initial=10, maximum=10, multiplier=1.0, deadline=600)
start = time.time()
response = operation.result(retry=retry)
print("Batch finished")
print(f"Took {time.time() - start} seconds to finish batch job")
print(response)

After replacing response = operation.result(retry=retry) call with custom wait/retry logic operation completion will be detected as expected:

while not operation.done(retry=None):
  time.sleep(10)
response = operation.metadata

Metadata

Metadata

Assignees

Labels

priority: p1Important issue which blocks shipping the next release. Will be fixed prior to next release.type: bugError or flaw in code with unintended results or allowing sub-optimal usage patterns.

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions