mirror of https://github.com/mongodb/mongo
59 lines
2.0 KiB
Python
59 lines
2.0 KiB
Python
#!/usr/bin/env python3
|
|
import glob
|
|
import logging
|
|
import os
|
|
import uuid
|
|
from typing import Dict, Optional
|
|
|
|
from buildscripts.resmokelib.extensions.constants import (
|
|
EVERGREEN_SEARCH_DIRS,
|
|
LOCAL_SEARCH_DIRS,
|
|
)
|
|
from buildscripts.resmokelib.extensions.generate_extension_configs import generate_extension_configs
|
|
|
|
|
|
def find_extension_so_files(
|
|
is_evergreen: bool,
|
|
logger: logging.Logger,
|
|
) -> list[str]:
|
|
"""Find extension .so files in the appropriate directories based on environment."""
|
|
search_dirs = EVERGREEN_SEARCH_DIRS if is_evergreen else LOCAL_SEARCH_DIRS
|
|
|
|
logger.info("Extension search directories (in order): %s", search_dirs)
|
|
ext_dir = next((d for d in search_dirs if os.path.isdir(d)), None)
|
|
if not ext_dir:
|
|
error_msg = f"No extension directories found in {search_dirs}. If extensions are required, ensure they are properly built."
|
|
logger.error(error_msg)
|
|
raise RuntimeError(error_msg)
|
|
|
|
logger.info("Looking for extensions in %s", ext_dir)
|
|
pattern = "*_mongo_extension.so"
|
|
so_files = sorted(glob.glob(os.path.join(ext_dir, pattern)))
|
|
|
|
if not so_files:
|
|
error_msg = f"No extension files matching {pattern} found under {ext_dir}"
|
|
logger.error(error_msg)
|
|
raise RuntimeError(error_msg)
|
|
|
|
return so_files
|
|
|
|
|
|
def find_and_generate_extension_configs(
|
|
is_evergreen: bool,
|
|
logger: logging.Logger,
|
|
mongod_options: Dict,
|
|
mongos_options: Optional[Dict] = None,
|
|
) -> str:
|
|
"""Find extensions, generate .conf files, and add them to mongod/mongos startup parameters if specified."""
|
|
so_files = find_extension_so_files(is_evergreen, logger)
|
|
|
|
logger.info("Found extension files: %s", so_files)
|
|
extension_names = generate_extension_configs(so_files, uuid.uuid4().hex, logger)
|
|
joined_names = ",".join(extension_names)
|
|
|
|
mongod_options["loadExtensions"] = joined_names
|
|
|
|
if mongos_options is not None:
|
|
mongos_options["loadExtensions"] = joined_names
|
|
return joined_names
|