From 09d907abff86d4e02dcb9e1f1560e785f368ffa3 Mon Sep 17 00:00:00 2001 From: Tres Seaver Date: Mon, 16 Aug 2021 12:05:14 -0400 Subject: [PATCH 1/2] tests: bump instance operation timeout to 120 seconds Toward #524. --- tests/system/_helpers.py | 7 +++++-- tests/system/conftest.py | 17 +++++++++++------ tests/system/test_backup_api.py | 13 ++++++------- tests/system/test_database_api.py | 4 ++-- tests/system/test_dbapi.py | 4 ++-- tests/system/test_instance_api.py | 12 ++++++------ tests/system/test_session_api.py | 8 ++++---- 7 files changed, 36 insertions(+), 29 deletions(-) diff --git a/tests/system/_helpers.py b/tests/system/_helpers.py index 75c4bb7f43..006f23f616 100644 --- a/tests/system/_helpers.py +++ b/tests/system/_helpers.py @@ -33,8 +33,11 @@ SKIP_BACKUP_TESTS_ENVVAR = "SKIP_BACKUP_TESTS" SKIP_BACKUP_TESTS = os.getenv(SKIP_BACKUP_TESTS_ENVVAR) is not None -SPANNER_OPERATION_TIMEOUT_IN_SECONDS = int( - os.getenv("SPANNER_OPERATION_TIMEOUT_IN_SECONDS", 60) +INSTANCE_OPERATION_TIMEOUT_IN_SECONDS = int( + os.getenv("SPANNER_INSTANCE_OPERATION_TIMEOUT_IN_SECONDS", 120) +) +DATABASE_OPERATION_TIMEOUT_IN_SECONDS = int( + os.getenv("SPANNER_DATABASE_OPERATION_TIMEOUT_IN_SECONDS", 60) ) USE_EMULATOR_ENVVAR = "SPANNER_EMULATOR_HOST" diff --git a/tests/system/conftest.py b/tests/system/conftest.py index cd3728525b..3a8c973f1b 100644 --- a/tests/system/conftest.py +++ b/tests/system/conftest.py @@ -58,8 +58,13 @@ def spanner_client(): @pytest.fixture(scope="session") -def operation_timeout(): - return _helpers.SPANNER_OPERATION_TIMEOUT_IN_SECONDS +def instance_operation_timeout(): + return _helpers.INSTANCE_OPERATION_TIMEOUT_IN_SECONDS + + +@pytest.fixture(scope="session") +def database_operation_timeout(): + return _helpers.DATABASE_OPERATION_TIMEOUT_IN_SECONDS @pytest.fixture(scope="session") @@ -101,7 +106,7 @@ def existing_instances(spanner_client): @pytest.fixture(scope="session") def shared_instance( spanner_client, - operation_timeout, + instance_operation_timeout, shared_instance_id, instance_config, existing_instances, # evalutate before creating one @@ -116,7 +121,7 @@ def shared_instance( shared_instance_id, instance_config.name, labels=labels ) created_op = _helpers.retry_429_503(instance.create)() - created_op.result(operation_timeout) # block until completion + created_op.result(instance_operation_timeout) # block until completion else: # reuse existing instance instance = spanner_client.instance(shared_instance_id) @@ -129,14 +134,14 @@ def shared_instance( @pytest.fixture(scope="session") -def shared_database(shared_instance, operation_timeout): +def shared_database(shared_instance, database_operation_timeout): database_name = _helpers.unique_id("test_database") pool = spanner_v1.BurstyPool(labels={"testcase": "database_api"}) database = shared_instance.database( database_name, ddl_statements=_helpers.DDL_STATEMENTS, pool=pool ) operation = database.create() - operation.result(operation_timeout) # raises on failure / timeout. + operation.result(database_operation_timeout) # raises on failure / timeout. yield database diff --git a/tests/system/test_backup_api.py b/tests/system/test_backup_api.py index b3a9642f4c..f1e0489e25 100644 --- a/tests/system/test_backup_api.py +++ b/tests/system/test_backup_api.py @@ -33,7 +33,7 @@ @pytest.fixture(scope="session") -def same_config_instance(spanner_client, shared_instance, operation_timeout): +def same_config_instance(spanner_client, shared_instance, instance_operation_timeout): current_config = shared_instance.configuration_name same_config_instance_id = _helpers.unique_id("same-config") create_time = str(int(time.time())) @@ -42,7 +42,7 @@ def same_config_instance(spanner_client, shared_instance, operation_timeout): same_config_instance_id, current_config, labels=labels ) op = same_config_instance.create() - op.result(operation_timeout) + op.result(instance_operation_timeout) yield same_config_instance @@ -60,7 +60,7 @@ def diff_config(shared_instance, instance_configs): @pytest.fixture(scope="session") def diff_config_instance( - spanner_client, shared_instance, operation_timeout, diff_config, + spanner_client, shared_instance, instance_operation_timeout, diff_config, ): if diff_config is None: return None @@ -72,7 +72,7 @@ def diff_config_instance( diff_config_instance_id, diff_config, labels=labels ) op = diff_config_instance.create() - op.result(operation_timeout) + op.result(instance_operation_timeout) yield diff_config_instance @@ -85,14 +85,14 @@ def database_version_time(): @pytest.fixture(scope="session") -def second_database(shared_instance, operation_timeout): +def second_database(shared_instance, database_operation_timeout): database_name = _helpers.unique_id("test_database2") pool = spanner_v1.BurstyPool(labels={"testcase": "database_api"}) database = shared_instance.database( database_name, ddl_statements=_helpers.DDL_STATEMENTS, pool=pool ) operation = database.create() - operation.result(operation_timeout) # raises on failure / timeout. + operation.result(database_operation_timeout) # raises on failure / timeout. yield database @@ -319,7 +319,6 @@ def test_multi_create_cancel_update_error_restore_errors( diff_config_instance, backups_to_delete, databases_to_delete, - operation_timeout, ): backup_id_1 = _helpers.unique_id("backup_id1", separator="_") backup_id_2 = _helpers.unique_id("backup_id2", separator="_") diff --git a/tests/system/test_database_api.py b/tests/system/test_database_api.py index 3f2831cec0..d702748a53 100644 --- a/tests/system/test_database_api.py +++ b/tests/system/test_database_api.py @@ -27,7 +27,7 @@ @pytest.fixture(scope="module") -def multiregion_instance(spanner_client, operation_timeout): +def multiregion_instance(spanner_client, instance_operation_timeout): multi_region_instance_id = _helpers.unique_id("multi-region") multi_region_config = "nam3" config_name = "{}/instanceConfigs/{}".format( @@ -41,7 +41,7 @@ def multiregion_instance(spanner_client, operation_timeout): labels=labels, ) operation = _helpers.retry_429_503(multiregion_instance.create)() - operation.result(operation_timeout) + operation.result(instance_operation_timeout) yield multiregion_instance diff --git a/tests/system/test_dbapi.py b/tests/system/test_dbapi.py index 17aed8465f..5cc7df677a 100644 --- a/tests/system/test_dbapi.py +++ b/tests/system/test_dbapi.py @@ -35,14 +35,14 @@ @pytest.fixture(scope="session") -def raw_database(shared_instance, operation_timeout): +def raw_database(shared_instance, database_operation_timeout): databse_id = _helpers.unique_id("dbapi-txn") pool = spanner_v1.BurstyPool(labels={"testcase": "database_api"}) database = shared_instance.database( databse_id, ddl_statements=DDL_STATEMENTS, pool=pool, ) op = database.create() - op.result(operation_timeout) # raises on failure / timeout. + op.result(database_operation_timeout) # raises on failure / timeout. yield database diff --git a/tests/system/test_instance_api.py b/tests/system/test_instance_api.py index 1c9e0d71f0..8992174871 100644 --- a/tests/system/test_instance_api.py +++ b/tests/system/test_instance_api.py @@ -61,7 +61,7 @@ def test_create_instance( spanner_client, instance_config, instances_to_delete, - operation_timeout, + instance_operation_timeout, ): alt_instance_id = _helpers.unique_id("new") instance = spanner_client.instance(alt_instance_id, instance_config.name) @@ -70,7 +70,7 @@ def test_create_instance( instances_to_delete.append(instance) # We want to make sure the operation completes. - operation.result(operation_timeout) # raises on failure / timeout. + operation.result(instance_operation_timeout) # raises on failure / timeout. # Create a new instance instance and make sure it is the same. instance_alt = spanner_client.instance(alt_instance_id, instance_config.name) @@ -86,7 +86,7 @@ def test_create_instance_with_processing_units( spanner_client, instance_config, instances_to_delete, - operation_timeout, + instance_operation_timeout, ): alt_instance_id = _helpers.unique_id("wpn") processing_units = 5000 @@ -100,7 +100,7 @@ def test_create_instance_with_processing_units( instances_to_delete.append(instance) # We want to make sure the operation completes. - operation.result(operation_timeout) # raises on failure / timeout. + operation.result(instance_operation_timeout) # raises on failure / timeout. # Create a new instance instance and make sure it is the same. instance_alt = spanner_client.instance(alt_instance_id, instance_config.name) @@ -116,7 +116,7 @@ def test_update_instance( spanner_client, shared_instance, shared_instance_id, - operation_timeout, + instance_operation_timeout, ): old_display_name = shared_instance.display_name new_display_name = "Foo Bar Baz" @@ -124,7 +124,7 @@ def test_update_instance( operation = shared_instance.update() # We want to make sure the operation completes. - operation.result(operation_timeout) # raises on failure / timeout. + operation.result(instance_operation_timeout) # raises on failure / timeout. # Create a new instance instance and reload it. instance_alt = spanner_client.instance(shared_instance_id, None) diff --git a/tests/system/test_session_api.py b/tests/system/test_session_api.py index 665c98e578..747c64a9c1 100644 --- a/tests/system/test_session_api.py +++ b/tests/system/test_session_api.py @@ -146,14 +146,14 @@ @pytest.fixture(scope="session") -def sessions_database(shared_instance, operation_timeout): +def sessions_database(shared_instance, database_operation_timeout): database_name = _helpers.unique_id("test_sessions", separator="_") pool = spanner_v1.BurstyPool(labels={"testcase": "session_api"}) sessions_database = shared_instance.database( database_name, ddl_statements=_helpers.DDL_STATEMENTS, pool=pool, ) operation = sessions_database.create() - operation.result(operation_timeout) # raises on failure / timeout. + operation.result(database_operation_timeout) # raises on failure / timeout. _helpers.retry_has_all_dll(sessions_database.reload)() # Some tests expect there to be a session present in the pool. @@ -1176,7 +1176,7 @@ def test_multiuse_snapshot_read_isolation_exact_staleness(sessions_database): sd._check_row_data(after, all_data_rows) -def test_read_w_index(shared_instance, operation_timeout, databases_to_delete): +def test_read_w_index(shared_instance, database_operation_timeout, databases_to_delete): # Indexed reads cannot return non-indexed columns sd = _sample_data row_count = 2000 @@ -1192,7 +1192,7 @@ def test_read_w_index(shared_instance, operation_timeout, databases_to_delete): ) operation = temp_db.create() databases_to_delete.append(temp_db) - operation.result(operation_timeout) # raises on failure / timeout. + operation.result(database_operation_timeout) # raises on failure / timeout. committed = _set_up_table(temp_db, row_count) From 4f347b5ef073ad3a719379e5b0f221257eb143a1 Mon Sep 17 00:00:00 2001 From: Tres Seaver Date: Mon, 16 Aug 2021 14:01:05 -0400 Subject: [PATCH 2/2] tests: bump instance operation timeout to 240 seconds Likewise for samples instance creation. --- samples/samples/conftest.py | 6 ++++-- tests/system/_helpers.py | 2 +- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/samples/samples/conftest.py b/samples/samples/conftest.py index 6b047a31da..b7832c1e8d 100644 --- a/samples/samples/conftest.py +++ b/samples/samples/conftest.py @@ -24,6 +24,8 @@ import pytest from test_utils import retry +INSTANCE_CREATION_TIMEOUT = 240 # seconds + retry_429 = retry.RetryErrors(exceptions.ResourceExhausted, delay=15) @@ -110,7 +112,7 @@ def sample_instance( }, ) op = retry_429(sample_instance.create)() - op.result(120) # block until completion + op.result(INSTANCE_CREATION_TIMEOUT) # block until completion # Eventual consistency check retry_found = retry.RetryResult(bool) @@ -145,7 +147,7 @@ def multi_region_instance( }, ) op = retry_429(multi_region_instance.create)() - op.result(120) # block until completion + op.result(INSTANCE_CREATION_TIMEOUT) # block until completion # Eventual consistency check retry_found = retry.RetryResult(bool) diff --git a/tests/system/_helpers.py b/tests/system/_helpers.py index 006f23f616..0baff62433 100644 --- a/tests/system/_helpers.py +++ b/tests/system/_helpers.py @@ -34,7 +34,7 @@ SKIP_BACKUP_TESTS = os.getenv(SKIP_BACKUP_TESTS_ENVVAR) is not None INSTANCE_OPERATION_TIMEOUT_IN_SECONDS = int( - os.getenv("SPANNER_INSTANCE_OPERATION_TIMEOUT_IN_SECONDS", 120) + os.getenv("SPANNER_INSTANCE_OPERATION_TIMEOUT_IN_SECONDS", 240) ) DATABASE_OPERATION_TIMEOUT_IN_SECONDS = int( os.getenv("SPANNER_DATABASE_OPERATION_TIMEOUT_IN_SECONDS", 60)