Skip to content

Commit dbfa5bb

Browse files
committed
feat: support global OS prefix
1 parent b6766a6 commit dbfa5bb

5 files changed

Lines changed: 16 additions & 4 deletions

File tree

diracx-db/src/diracx/db/os/utils.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -79,13 +79,17 @@ class BaseOSDB(metaclass=ABCMeta):
7979
@abstractmethod
8080
def index_name(self, vo: str, doc_id: int) -> str: ...
8181

82-
def __init__(self, connection_kwargs: dict[str, Any]) -> None:
82+
def __init__(
83+
self, connection_kwargs: dict[str, Any], *, global_prefix: str = ""
84+
) -> None:
8385
self._client: AsyncOpenSearch | None = None
8486
self._connection_kwargs = connection_kwargs
8587
# We use a ContextVar to make sure that self._conn
8688
# is specific to each context, and avoid parallel
8789
# route executions to overlap
8890
self._conn: ContextVar[bool] = ContextVar("_conn", default=False)
91+
if global_prefix:
92+
self.index_prefix = f"{global_prefix}_{self.index_prefix}"
8993

9094
@classmethod
9195
def available_implementations(cls, db_name: str) -> list[type[BaseOSDB]]:

diracx-routers/src/diracx/routers/factory.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -216,11 +216,14 @@ def create_app_inner(
216216
raise Exception("No SQL database could be initialized, aborting")
217217

218218
# Add the OpenSearch DBs to the application
219+
os_global_prefix = os.environ.get("DIRACX_FACTORY_OS_GLOBAL_PREFIX", "")
219220
available_os_db_classes: set[type[BaseOSDB]] = set()
220221
for db_name, connection_kwargs in os_database_conn_kwargs.items():
221222
os_db_classes = BaseOSDB.available_implementations(db_name)
222223
# The first DB is the highest priority one
223-
os_db = os_db_classes[0](connection_kwargs=connection_kwargs)
224+
os_db = os_db_classes[0](
225+
connection_kwargs=connection_kwargs, global_prefix=os_global_prefix
226+
)
224227
app.lifetime_functions.append(os_db.client_context)
225228
# Add overrides for all the DB classes, including those from extensions
226229
# This means vanilla DiracX routers get an instance of the extension's DB

diracx-tasks/src/diracx/tasks/plumbing/factory.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -305,9 +305,12 @@ async def setup_dependency_overrides(
305305
)
306306

307307
# --- OS databases ---
308+
os_global_prefix = os.environ.get("DIRACX_FACTORY_OS_GLOBAL_PREFIX", "")
308309
for db_name, conn_kwargs in BaseOSDB.available_urls().items():
309310
os_db_classes = BaseOSDB.available_implementations(db_name)
310-
os_db = os_db_classes[0](connection_kwargs=conn_kwargs)
311+
os_db = os_db_classes[0](
312+
connection_kwargs=conn_kwargs, global_prefix=os_global_prefix
313+
)
311314
await stack.enter_async_context(os_db.client_context())
312315
for os_db_class in os_db_classes:
313316
overrides[os_db_class.session] = partial(_db_context, os_db)

diracx-testing/src/diracx/testing/mock_osdb.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,9 @@ class JobParametersDB(MockOSDBMixin, JobParametersDB):
3636
JobParametersDB = type("JobParametersDB", (MockOSDBMixin, JobParametersDB), {})
3737
"""
3838

39-
def __init__(self, connection_kwargs: dict[str, Any]) -> None:
39+
def __init__(
40+
self, connection_kwargs: dict[str, Any], global_prefix: str = ""
41+
) -> None:
4042
from sqlalchemy import JSON, Column, DateTime, Integer, MetaData, String, Table
4143

4244
# Dynamically create a subclass of BaseSQLDB so we get clearer errors

toto

Whitespace-only changes.

0 commit comments

Comments
 (0)