From 3bef120147508dbd89b0edaa6b834407f6a659ae Mon Sep 17 00:00:00 2001 From: Chandra Sirimala Date: Mon, 22 Dec 2025 07:37:20 +0000 Subject: [PATCH 01/10] force garbage collect mrd and writer at the end of every tests. --- tests/system/test_zonal.py | 131 +++++++++++++++++++++++++++---------- 1 file changed, 98 insertions(+), 33 deletions(-) diff --git a/tests/system/test_zonal.py b/tests/system/test_zonal.py index 8697410b0..8557c9690 100644 --- a/tests/system/test_zonal.py +++ b/tests/system/test_zonal.py @@ -8,6 +8,7 @@ import google_crc32c import pytest +import gc # current library imports from google.cloud.storage._experimental.asyncio.async_grpc_client import AsyncGrpcClient @@ -18,6 +19,35 @@ from google.cloud.storage._experimental.asyncio.async_multi_range_downloader import ( AsyncMultiRangeDownloader, ) +import psutil + +pid = os.getpid() +print(f"Test running in process ID,sleeping: {pid}") +import time + +# time.sleep(10) + + +def log_num_of_open_fd(position): + """Helper function to log the number of open file descriptors.""" + import inspect + + func_name = inspect.stack()[1].function + print(f"\n----------- In function: {func_name} at {position} -----------") + process = psutil.Process(pid) + print( + f"Number of TCP connections for process: {len(process.net_connections(kind='tcp'))}" + ) + try: + system_tcp_connections = len(psutil.net_connections(kind="tcp")) + print( + f"Total number of TCP connections on the system: {system_tcp_connections}" + ) + except psutil.AccessDenied: + print( + "Could not determine total number of TCP connections on the system (permission denied)." + ) + pytestmark = pytest.mark.skipif( os.getenv("RUN_ZONAL_SYSTEM_TESTS") != "True", @@ -36,34 +66,34 @@ def _get_equal_dist(a: int, b: int) -> tuple[int, int]: return a + step, a + 2 * step -async def write_one_appendable_object( - bucket_name: str, - object_name: str, - data: bytes, -) -> None: - """Helper to write an appendable object.""" - grpc_client = AsyncGrpcClient(attempt_direct_path=True).grpc_client - writer = AsyncAppendableObjectWriter(grpc_client, bucket_name, object_name) - await writer.open() - await writer.append(data) - await writer.close() - - -@pytest.fixture(scope="function") -def appendable_object(storage_client, blobs_to_delete): - """Fixture to create and cleanup an appendable object.""" - object_name = f"appendable_obj_for_mrd-{str(uuid.uuid4())[:4]}" - asyncio.run( - write_one_appendable_object( - _ZONAL_BUCKET, - object_name, - _BYTES_TO_UPLOAD, - ) - ) - yield object_name - - # Clean up; use json client (i.e. `storage_client` fixture) to delete. - blobs_to_delete.append(storage_client.bucket(_ZONAL_BUCKET).blob(object_name)) +# async def write_one_appendable_object( +# bucket_name: str, +# object_name: str, +# data: bytes, +# ) -> None: +# """Helper to write an appendable object.""" +# grpc_client = AsyncGrpcClient(attempt_direct_path=True).grpc_client +# writer = AsyncAppendableObjectWriter(grpc_client, bucket_name, object_name) +# await writer.open() +# await writer.append(data) +# await writer.close() + + +# @pytest.fixture(scope="function") +# def appendable_object(storage_client, blobs_to_delete): +# """Fixture to create and cleanup an appendable object.""" +# object_name = f"appendable_obj_for_mrd-{str(uuid.uuid4())[:4]}" +# asyncio.run( +# write_one_appendable_object( +# _ZONAL_BUCKET, +# object_name, +# _BYTES_TO_UPLOAD, +# ) +# ) +# yield object_name + +# # Clean up; use json client (i.e. `storage_client` fixture) to delete. +# blobs_to_delete.append(storage_client.bucket(_ZONAL_BUCKET).blob(object_name)) @pytest.mark.asyncio @@ -82,6 +112,7 @@ def appendable_object(storage_client, blobs_to_delete): async def test_basic_wrd( storage_client, blobs_to_delete, attempt_direct_path, object_size ): + log_num_of_open_fd("start") object_name = f"test_basic_wrd-{str(uuid.uuid4())}" # Client instantiation; it cannot be part of fixture because. @@ -114,6 +145,10 @@ async def test_basic_wrd( # Clean up; use json client (i.e. `storage_client` fixture) to delete. blobs_to_delete.append(storage_client.bucket(_ZONAL_BUCKET).blob(object_name)) + del writer + del mrd + gc.collect() + log_num_of_open_fd("end") @pytest.mark.asyncio @@ -126,6 +161,7 @@ async def test_basic_wrd( ], ) async def test_basic_wrd_in_slices(storage_client, blobs_to_delete, object_size): + log_num_of_open_fd("start") object_name = f"test_basic_wrd-{str(uuid.uuid4())}" # Client instantiation; it cannot be part of fixture because. @@ -161,18 +197,28 @@ async def test_basic_wrd_in_slices(storage_client, blobs_to_delete, object_size) # Clean up; use json client (i.e. `storage_client` fixture) to delete. blobs_to_delete.append(storage_client.bucket(_ZONAL_BUCKET).blob(object_name)) + del writer + del mrd + gc.collect() + log_num_of_open_fd("end") @pytest.mark.asyncio @pytest.mark.parametrize( "flush_interval", - [2 * 1024 * 1024, 4 * 1024 * 1024, 8 * 1024 * 1024, _DEFAULT_FLUSH_INTERVAL_BYTES], + [ + 2 * 1024 * 1024, + 4 * 1024 * 1024, + 8 * 1024 * 1024, + _DEFAULT_FLUSH_INTERVAL_BYTES, + ], ) async def test_wrd_with_non_default_flush_interval( storage_client, blobs_to_delete, flush_interval, ): + log_num_of_open_fd("start") object_name = f"test_basic_wrd-{str(uuid.uuid4())}" object_size = 9 * 1024 * 1024 @@ -214,10 +260,15 @@ async def test_wrd_with_non_default_flush_interval( # Clean up; use json client (i.e. `storage_client` fixture) to delete. blobs_to_delete.append(storage_client.bucket(_ZONAL_BUCKET).blob(object_name)) + del writer + del mrd + gc.collect() + log_num_of_open_fd("end") @pytest.mark.asyncio async def test_read_unfinalized_appendable_object(storage_client, blobs_to_delete): + log_num_of_open_fd("start") object_name = f"read_unfinalized_appendable_object-{str(uuid.uuid4())[:4]}" grpc_client = AsyncGrpcClient(attempt_direct_path=True).grpc_client @@ -237,20 +288,30 @@ async def test_read_unfinalized_appendable_object(storage_client, blobs_to_delet # Clean up; use json client (i.e. `storage_client` fixture) to delete. blobs_to_delete.append(storage_client.bucket(_ZONAL_BUCKET).blob(object_name)) + del writer + del mrd + gc.collect() + log_num_of_open_fd("end") @pytest.mark.asyncio -async def test_mrd_open_with_read_handle(appendable_object): - grpc_client = AsyncGrpcClient(attempt_direct_path=True).grpc_client +async def test_mrd_open_with_read_handle(): + log_num_of_open_fd("start") + grpc_client = AsyncGrpcClient().grpc_client + object_name = f"test_read_handl-{str(uuid.uuid4())[:4]}" + writer = AsyncAppendableObjectWriter(grpc_client, _ZONAL_BUCKET, object_name) + await writer.open() + await writer.append(_BYTES_TO_UPLOAD) + await writer.close() - mrd = AsyncMultiRangeDownloader(grpc_client, _ZONAL_BUCKET, appendable_object) + mrd = AsyncMultiRangeDownloader(grpc_client, _ZONAL_BUCKET, object_name) await mrd.open() read_handle = mrd.read_handle await mrd.close() # Open a new MRD using the `read_handle` obtained above new_mrd = AsyncMultiRangeDownloader( - grpc_client, _ZONAL_BUCKET, appendable_object, read_handle=read_handle + grpc_client, _ZONAL_BUCKET, object_name, read_handle=read_handle ) await new_mrd.open() # persisted_size not set when opened with read_handle @@ -259,3 +320,7 @@ async def test_mrd_open_with_read_handle(appendable_object): await new_mrd.download_ranges([(0, 0, buffer)]) await new_mrd.close() assert buffer.getvalue() == _BYTES_TO_UPLOAD + del mrd + del new_mrd + gc.collect() + log_num_of_open_fd("end") From 063fca10ab9bc85edaae5176be8dc708977ada77 Mon Sep 17 00:00:00 2001 From: Chandra Sirimala Date: Mon, 22 Dec 2025 07:48:46 +0000 Subject: [PATCH 02/10] install psutil --- cloudbuild/run_zonal_tests.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/cloudbuild/run_zonal_tests.sh b/cloudbuild/run_zonal_tests.sh index ef94e629b..35e276e13 100644 --- a/cloudbuild/run_zonal_tests.sh +++ b/cloudbuild/run_zonal_tests.sh @@ -17,6 +17,7 @@ echo 'Install testing libraries explicitly, as they are not in setup.py' pip install --upgrade pip pip install pytest pytest-timeout pytest-subtests pytest-asyncio pip install google-cloud-testutils google-cloud-kms +pip install psutil==7.1.3 pip install -e . echo '--- Setting up environment variables on VM ---' From 80d18149e924101ec46d4da7f19654f067289ab3 Mon Sep 17 00:00:00 2001 From: Chandra Sirimala Date: Mon, 22 Dec 2025 09:53:22 +0000 Subject: [PATCH 03/10] remove debugging code --- tests/system/test_zonal.py | 68 -------------------------------------- 1 file changed, 68 deletions(-) diff --git a/tests/system/test_zonal.py b/tests/system/test_zonal.py index 8557c9690..82396316a 100644 --- a/tests/system/test_zonal.py +++ b/tests/system/test_zonal.py @@ -19,34 +19,6 @@ from google.cloud.storage._experimental.asyncio.async_multi_range_downloader import ( AsyncMultiRangeDownloader, ) -import psutil - -pid = os.getpid() -print(f"Test running in process ID,sleeping: {pid}") -import time - -# time.sleep(10) - - -def log_num_of_open_fd(position): - """Helper function to log the number of open file descriptors.""" - import inspect - - func_name = inspect.stack()[1].function - print(f"\n----------- In function: {func_name} at {position} -----------") - process = psutil.Process(pid) - print( - f"Number of TCP connections for process: {len(process.net_connections(kind='tcp'))}" - ) - try: - system_tcp_connections = len(psutil.net_connections(kind="tcp")) - print( - f"Total number of TCP connections on the system: {system_tcp_connections}" - ) - except psutil.AccessDenied: - print( - "Could not determine total number of TCP connections on the system (permission denied)." - ) pytestmark = pytest.mark.skipif( @@ -66,36 +38,6 @@ def _get_equal_dist(a: int, b: int) -> tuple[int, int]: return a + step, a + 2 * step -# async def write_one_appendable_object( -# bucket_name: str, -# object_name: str, -# data: bytes, -# ) -> None: -# """Helper to write an appendable object.""" -# grpc_client = AsyncGrpcClient(attempt_direct_path=True).grpc_client -# writer = AsyncAppendableObjectWriter(grpc_client, bucket_name, object_name) -# await writer.open() -# await writer.append(data) -# await writer.close() - - -# @pytest.fixture(scope="function") -# def appendable_object(storage_client, blobs_to_delete): -# """Fixture to create and cleanup an appendable object.""" -# object_name = f"appendable_obj_for_mrd-{str(uuid.uuid4())[:4]}" -# asyncio.run( -# write_one_appendable_object( -# _ZONAL_BUCKET, -# object_name, -# _BYTES_TO_UPLOAD, -# ) -# ) -# yield object_name - -# # Clean up; use json client (i.e. `storage_client` fixture) to delete. -# blobs_to_delete.append(storage_client.bucket(_ZONAL_BUCKET).blob(object_name)) - - @pytest.mark.asyncio @pytest.mark.parametrize( "object_size", @@ -112,7 +54,6 @@ def _get_equal_dist(a: int, b: int) -> tuple[int, int]: async def test_basic_wrd( storage_client, blobs_to_delete, attempt_direct_path, object_size ): - log_num_of_open_fd("start") object_name = f"test_basic_wrd-{str(uuid.uuid4())}" # Client instantiation; it cannot be part of fixture because. @@ -148,7 +89,6 @@ async def test_basic_wrd( del writer del mrd gc.collect() - log_num_of_open_fd("end") @pytest.mark.asyncio @@ -161,7 +101,6 @@ async def test_basic_wrd( ], ) async def test_basic_wrd_in_slices(storage_client, blobs_to_delete, object_size): - log_num_of_open_fd("start") object_name = f"test_basic_wrd-{str(uuid.uuid4())}" # Client instantiation; it cannot be part of fixture because. @@ -200,7 +139,6 @@ async def test_basic_wrd_in_slices(storage_client, blobs_to_delete, object_size) del writer del mrd gc.collect() - log_num_of_open_fd("end") @pytest.mark.asyncio @@ -218,7 +156,6 @@ async def test_wrd_with_non_default_flush_interval( blobs_to_delete, flush_interval, ): - log_num_of_open_fd("start") object_name = f"test_basic_wrd-{str(uuid.uuid4())}" object_size = 9 * 1024 * 1024 @@ -263,12 +200,10 @@ async def test_wrd_with_non_default_flush_interval( del writer del mrd gc.collect() - log_num_of_open_fd("end") @pytest.mark.asyncio async def test_read_unfinalized_appendable_object(storage_client, blobs_to_delete): - log_num_of_open_fd("start") object_name = f"read_unfinalized_appendable_object-{str(uuid.uuid4())[:4]}" grpc_client = AsyncGrpcClient(attempt_direct_path=True).grpc_client @@ -291,12 +226,10 @@ async def test_read_unfinalized_appendable_object(storage_client, blobs_to_delet del writer del mrd gc.collect() - log_num_of_open_fd("end") @pytest.mark.asyncio async def test_mrd_open_with_read_handle(): - log_num_of_open_fd("start") grpc_client = AsyncGrpcClient().grpc_client object_name = f"test_read_handl-{str(uuid.uuid4())[:4]}" writer = AsyncAppendableObjectWriter(grpc_client, _ZONAL_BUCKET, object_name) @@ -323,4 +256,3 @@ async def test_mrd_open_with_read_handle(): del mrd del new_mrd gc.collect() - log_num_of_open_fd("end") From 80e510215c356c402c0cfdce844e456372aaf7e7 Mon Sep 17 00:00:00 2001 From: Chandra Sirimala Date: Mon, 22 Dec 2025 09:58:43 +0000 Subject: [PATCH 04/10] chore: set ulimit before ssh'ing into the VM for zonal tests --- cloudbuild/run_zonal_tests.sh | 3 ++- cloudbuild/zb-system-tests-cloudbuild.yaml | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/cloudbuild/run_zonal_tests.sh b/cloudbuild/run_zonal_tests.sh index 35e276e13..6dcf7ba1f 100644 --- a/cloudbuild/run_zonal_tests.sh +++ b/cloudbuild/run_zonal_tests.sh @@ -23,5 +23,6 @@ pip install -e . echo '--- Setting up environment variables on VM ---' export ZONAL_BUCKET=${_ZONAL_BUCKET} export RUN_ZONAL_SYSTEM_TESTS=True -echo '--- Running Zonal tests on VM ---' +CURRENT_ULIMIT=$(ulimit -n) +echo '--- Running Zonal tests on VM with ulimit set to ---' $CURRENT_ULIMIT pytest -vv -s --log-format='%(asctime)s %(levelname)s %(message)s' --log-date-format='%H:%M:%S' tests/system/test_zonal.py diff --git a/cloudbuild/zb-system-tests-cloudbuild.yaml b/cloudbuild/zb-system-tests-cloudbuild.yaml index 383c4fa96..25ce288f0 100644 --- a/cloudbuild/zb-system-tests-cloudbuild.yaml +++ b/cloudbuild/zb-system-tests-cloudbuild.yaml @@ -3,6 +3,7 @@ substitutions: _ZONE: "us-central1-a" _SHORT_BUILD_ID: ${BUILD_ID:0:8} _VM_NAME: "py-sdk-sys-test-${_SHORT_BUILD_ID}" + _ULIMIT: 10000 # 10k, for gRPC bidi streams @@ -67,7 +68,7 @@ steps: # Execute the script on the VM via SSH. # Capture the exit code to ensure cleanup happens before the build fails. set +e - gcloud compute ssh ${_VM_NAME} --zone=${_ZONE} --internal-ip --ssh-key-file=/workspace/.ssh/google_compute_engine --command="COMMIT_SHA=${COMMIT_SHA} _ZONAL_BUCKET=${_ZONAL_BUCKET} bash run_zonal_tests.sh" + gcloud compute ssh ${_VM_NAME} --zone=${_ZONE} --internal-ip --ssh-key-file=/workspace/.ssh/google_compute_engine --command="ulimit -n ${_ULIMIT} COMMIT_SHA=${COMMIT_SHA} _ZONAL_BUCKET=${_ZONAL_BUCKET} bash run_zonal_tests.sh" EXIT_CODE=$? set -e From d1917ee39507d191a6f862e49d49e3f1c3e44acc Mon Sep 17 00:00:00 2001 From: Chandra Sirimala Date: Mon, 22 Dec 2025 10:06:53 +0000 Subject: [PATCH 05/10] make ulimit value as str for .yaml file --- cloudbuild/zb-system-tests-cloudbuild.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cloudbuild/zb-system-tests-cloudbuild.yaml b/cloudbuild/zb-system-tests-cloudbuild.yaml index 25ce288f0..6a1eedb3a 100644 --- a/cloudbuild/zb-system-tests-cloudbuild.yaml +++ b/cloudbuild/zb-system-tests-cloudbuild.yaml @@ -3,7 +3,7 @@ substitutions: _ZONE: "us-central1-a" _SHORT_BUILD_ID: ${BUILD_ID:0:8} _VM_NAME: "py-sdk-sys-test-${_SHORT_BUILD_ID}" - _ULIMIT: 10000 # 10k, for gRPC bidi streams + _ULIMIT: "10000" # 10k, for gRPC bidi streams From f5b207b21db1b589ba7ec12f9b5d2f128a9cc5ce Mon Sep 17 00:00:00 2001 From: Chandra Sirimala Date: Mon, 22 Dec 2025 10:14:04 +0000 Subject: [PATCH 06/10] avoid using ulimit --- cloudbuild/zb-system-tests-cloudbuild.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/cloudbuild/zb-system-tests-cloudbuild.yaml b/cloudbuild/zb-system-tests-cloudbuild.yaml index 6a1eedb3a..02af494d8 100644 --- a/cloudbuild/zb-system-tests-cloudbuild.yaml +++ b/cloudbuild/zb-system-tests-cloudbuild.yaml @@ -3,7 +3,7 @@ substitutions: _ZONE: "us-central1-a" _SHORT_BUILD_ID: ${BUILD_ID:0:8} _VM_NAME: "py-sdk-sys-test-${_SHORT_BUILD_ID}" - _ULIMIT: "10000" # 10k, for gRPC bidi streams + # _ULIMIT: "10000" # 10k, for gRPC bidi streams @@ -68,7 +68,7 @@ steps: # Execute the script on the VM via SSH. # Capture the exit code to ensure cleanup happens before the build fails. set +e - gcloud compute ssh ${_VM_NAME} --zone=${_ZONE} --internal-ip --ssh-key-file=/workspace/.ssh/google_compute_engine --command="ulimit -n ${_ULIMIT} COMMIT_SHA=${COMMIT_SHA} _ZONAL_BUCKET=${_ZONAL_BUCKET} bash run_zonal_tests.sh" + gcloud compute ssh ${_VM_NAME} --zone=${_ZONE} --internal-ip --ssh-key-file=/workspace/.ssh/google_compute_engine --command="ulimit -n 10000 COMMIT_SHA=${COMMIT_SHA} _ZONAL_BUCKET=${_ZONAL_BUCKET} bash run_zonal_tests.sh" EXIT_CODE=$? set -e From 21729da09b336adb541ea0d34ad3e333138fff8f Mon Sep 17 00:00:00 2001 From: Chandra Sirimala Date: Mon, 22 Dec 2025 10:20:18 +0000 Subject: [PATCH 07/10] add missing ; --- cloudbuild/zb-system-tests-cloudbuild.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cloudbuild/zb-system-tests-cloudbuild.yaml b/cloudbuild/zb-system-tests-cloudbuild.yaml index 02af494d8..4a863486a 100644 --- a/cloudbuild/zb-system-tests-cloudbuild.yaml +++ b/cloudbuild/zb-system-tests-cloudbuild.yaml @@ -68,7 +68,7 @@ steps: # Execute the script on the VM via SSH. # Capture the exit code to ensure cleanup happens before the build fails. set +e - gcloud compute ssh ${_VM_NAME} --zone=${_ZONE} --internal-ip --ssh-key-file=/workspace/.ssh/google_compute_engine --command="ulimit -n 10000 COMMIT_SHA=${COMMIT_SHA} _ZONAL_BUCKET=${_ZONAL_BUCKET} bash run_zonal_tests.sh" + gcloud compute ssh ${_VM_NAME} --zone=${_ZONE} --internal-ip --ssh-key-file=/workspace/.ssh/google_compute_engine --command="ulimit -n 10000; COMMIT_SHA=${COMMIT_SHA} _ZONAL_BUCKET=${_ZONAL_BUCKET} bash run_zonal_tests.sh" EXIT_CODE=$? set -e From c2bc0649ef7a10e540a3d0649e9c8c17731e7bca Mon Sep 17 00:00:00 2001 From: Chandra Sirimala Date: Mon, 22 Dec 2025 11:03:29 +0000 Subject: [PATCH 08/10] remove unused imports --- tests/system/test_zonal.py | 1 - 1 file changed, 1 deletion(-) diff --git a/tests/system/test_zonal.py b/tests/system/test_zonal.py index 82396316a..d8d20ba36 100644 --- a/tests/system/test_zonal.py +++ b/tests/system/test_zonal.py @@ -1,5 +1,4 @@ # py standard imports -import asyncio import os import uuid from io import BytesIO From 5a9934d0924d8579f383a3743f9bda38b9016780 Mon Sep 17 00:00:00 2001 From: Chandra Sirimala Date: Mon, 22 Dec 2025 11:11:43 +0000 Subject: [PATCH 09/10] keep ulimit inside var --- cloudbuild/zb-system-tests-cloudbuild.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/cloudbuild/zb-system-tests-cloudbuild.yaml b/cloudbuild/zb-system-tests-cloudbuild.yaml index 4a863486a..db36b24fc 100644 --- a/cloudbuild/zb-system-tests-cloudbuild.yaml +++ b/cloudbuild/zb-system-tests-cloudbuild.yaml @@ -3,7 +3,7 @@ substitutions: _ZONE: "us-central1-a" _SHORT_BUILD_ID: ${BUILD_ID:0:8} _VM_NAME: "py-sdk-sys-test-${_SHORT_BUILD_ID}" - # _ULIMIT: "10000" # 10k, for gRPC bidi streams + _ULIMIT: "10000" # 10k, for gRPC bidi streams @@ -68,7 +68,7 @@ steps: # Execute the script on the VM via SSH. # Capture the exit code to ensure cleanup happens before the build fails. set +e - gcloud compute ssh ${_VM_NAME} --zone=${_ZONE} --internal-ip --ssh-key-file=/workspace/.ssh/google_compute_engine --command="ulimit -n 10000; COMMIT_SHA=${COMMIT_SHA} _ZONAL_BUCKET=${_ZONAL_BUCKET} bash run_zonal_tests.sh" + gcloud compute ssh ${_VM_NAME} --zone=${_ZONE} --internal-ip --ssh-key-file=/workspace/.ssh/google_compute_engine --command="ulimit -n {_ULIMIT}; COMMIT_SHA=${COMMIT_SHA} _ZONAL_BUCKET=${_ZONAL_BUCKET} bash run_zonal_tests.sh" EXIT_CODE=$? set -e From 28d005efae60899de79ca9d19f4f208dcb7d78f6 Mon Sep 17 00:00:00 2001 From: Chandra Sirimala Date: Mon, 22 Dec 2025 11:22:46 +0000 Subject: [PATCH 10/10] remove unwanted library --- cloudbuild/run_zonal_tests.sh | 1 - 1 file changed, 1 deletion(-) diff --git a/cloudbuild/run_zonal_tests.sh b/cloudbuild/run_zonal_tests.sh index 6dcf7ba1f..c0f8eabc2 100644 --- a/cloudbuild/run_zonal_tests.sh +++ b/cloudbuild/run_zonal_tests.sh @@ -17,7 +17,6 @@ echo 'Install testing libraries explicitly, as they are not in setup.py' pip install --upgrade pip pip install pytest pytest-timeout pytest-subtests pytest-asyncio pip install google-cloud-testutils google-cloud-kms -pip install psutil==7.1.3 pip install -e . echo '--- Setting up environment variables on VM ---'