mongo/buildscripts/resmokelib/extensions/find_and_generate_extension...

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