From 38b149b187c515a4b3e4548c1e7d85e12d1007ed Mon Sep 17 00:00:00 2001 From: Kaivan Kamali Date: Fri, 23 Sep 2022 15:31:28 -0400 Subject: [PATCH] Added start() to BaseObjectStore, so if needed, object store post fork functions can be called by app --- lib/galaxy/app.py | 1 + lib/galaxy/objectstore/__init__.py | 8 ++++++++ lib/galaxy/objectstore/irods.py | 4 +++- lib/galaxy_test/driver/driver_util.py | 2 +- .../objectstore/test_objectstore_datatype_upload.py | 2 +- 5 files changed, 14 insertions(+), 3 deletions(-) diff --git a/lib/galaxy/app.py b/lib/galaxy/app.py index 05b9680b78b..a3363a66304 100644 --- a/lib/galaxy/app.py +++ b/lib/galaxy/app.py @@ -743,6 +743,7 @@ class UniverseApplication(StructuredApp, GalaxyManagerApplication): self.tool_shed_repository_cache = None self.api_spec = None self.legacy_mapper = None + self.application_stack.register_postfork_function(self.object_store.start) log.info(f"Galaxy app startup finished {startup_timer}") def _shutdown_queue_worker(self): diff --git a/lib/galaxy/objectstore/__init__.py b/lib/galaxy/objectstore/__init__.py index 5435eb7b7a7..6261604ae84 100644 --- a/lib/galaxy/objectstore/__init__.py +++ b/lib/galaxy/objectstore/__init__.py @@ -289,6 +289,14 @@ class BaseObjectStore(ObjectStore): extra_dirs.update({e["type"]: e["path"] for e in config_dict.get("extra_dirs", [])}) self.extra_dirs = extra_dirs + def start(self): + """ + Call all postfork function(s) here. These functions spawn a thread, + but do not start it. We register start() with app, so app starts + the threads. Override this function in subclasses, if needed. + """ + return + def shutdown(self): """Close any connections for this ObjectStore.""" self.running = False diff --git a/lib/galaxy/objectstore/irods.py b/lib/galaxy/objectstore/irods.py index 131f5f82c5a..1575f792e03 100644 --- a/lib/galaxy/objectstore/irods.py +++ b/lib/galaxy/objectstore/irods.py @@ -279,9 +279,11 @@ class IRODSObjectStore(DiskObjectStore, CloudConfigMixin): }, name="ConnectionPoolMonitorThread", ) - self.connection_pool_monitor_thread.start() log.info("Connection pool monitor started") + def start(self): + self.start_connection_pool_monitor() + def _connection_pool_monitor(self, *args, **kwargs): refresh_time = kwargs["refresh_time"] connection_pool_monitor_interval = kwargs["connection_pool_monitor_interval"] diff --git a/lib/galaxy_test/driver/driver_util.py b/lib/galaxy_test/driver/driver_util.py index a3d471c2ab6..2f77213ac3e 100644 --- a/lib/galaxy_test/driver/driver_util.py +++ b/lib/galaxy_test/driver/driver_util.py @@ -864,7 +864,7 @@ def launch_server(app_factory, webapp_factory, prefix=DEFAULT_CONFIG_PREFIX, gal server, port, thread = uvicorn_serve(asgi_app, host=host, port=port) set_and_wait_for_http_target(prefix, host, port, url_prefix=url_prefix) - log.info(f"Embedded uvicorn web server for {name} started at {host}:{port}{url_prefix}") + log.debug(f"Embedded uvicorn web server for {name} started at {host}:{port}{url_prefix}") return EmbeddedServerWrapper(app, server, name, host, port, thread=thread, prefix=url_prefix) diff --git a/test/integration/objectstore/test_objectstore_datatype_upload.py b/test/integration/objectstore/test_objectstore_datatype_upload.py index adcbbe8e944..908077243b3 100644 --- a/test/integration/objectstore/test_objectstore_datatype_upload.py +++ b/test/integration/objectstore/test_objectstore_datatype_upload.py @@ -20,7 +20,7 @@ IRODS_OBJECT_STORE_PORT = int(os.environ.get("GALAXY_INTEGRATION_IRODS_OBJECT_ST IRODS_OBJECT_STORE_TIMEOUT = int(os.environ.get("GALAXY_INTEGRATION_IRODS_OBJECT_STORE_TIMEOUT", 30)) IRODS_OBJECT_STORE_REFRESH_TIME = int(os.environ.get("GALAXY_INTEGRATION_IRODS_OBJECT_STORE_REFRESH_TIME", 300)) IRODS_OBJECT_STORE_CONNECTION_POOL_MONITOR_INTERVAL = int( - os.environ.get("GALAXY_INTEGRATION_IRODS_OBJECT_STORE_CONNECTION_POOL_MONITOR_INTERVAL", -1) + os.environ.get("GALAXY_INTEGRATION_IRODS_OBJECT_STORE_CONNECTION_POOL_MONITOR_INTERVAL", 600) ) IRODS_OBJECT_STORE_USERNAME = os.environ.get("GALAXY_INTEGRATION_IRODS_OBJECT_STORE_USERNAME", "rods") IRODS_OBJECT_STORE_PASSWORD = os.environ.get("GALAXY_INTEGRATION_IRODS_OBJECT_STORE_PASSWORD", "rods")