MongoDB upgrade to v5.0

This commit is contained in:
clearml
2024-12-05 18:54:23 +02:00
parent 83a0485518
commit ba928854e0
2 changed files with 26 additions and 1 deletions

View File

@@ -8,13 +8,16 @@ import pymongo.database
from mongoengine.connection import get_db from mongoengine.connection import get_db
from packaging.version import Version, parse from packaging.version import Version, parse
from apiserver.config_repo import config
from apiserver.database import utils from apiserver.database import utils
from apiserver.database import Database from apiserver.database import Database
from apiserver.database.model.version import Version as DatabaseVersion from apiserver.database.model.version import Version as DatabaseVersion
from apiserver.utilities.dicts import nested_get
_migrations = "migrations" _migrations = "migrations"
_parent_dir = Path(__file__).resolve().parents[1] _parent_dir = Path(__file__).resolve().parents[1]
_migration_dir = _parent_dir / _migrations _migration_dir = _parent_dir / _migrations
log = config.logger(__file__)
def check_mongo_empty() -> bool: def check_mongo_empty() -> bool:
@@ -41,6 +44,26 @@ def get_last_server_version() -> Version:
return previous_versions[0] if previous_versions else Version("0.0.0") return previous_versions[0] if previous_versions else Version("0.0.0")
def _ensure_mongodb_version():
db: pymongo.database.Database = get_db(Database.backend)
db_version = db.client.server_info()["version"]
if not db_version.startswith("5.0"):
log.warning(f"Database version should be 5.0.x. Instead: {str(db_version)}")
return
res = db.client.admin.command({"getParameter": 1, "featureCompatibilityVersion": 1})
version = nested_get(res, ("featureCompatibilityVersion", "version"))
if version == "5.0":
return
if version != "4.4":
log.warning(f"Cannot upgrade DB version. Should be 4.4. {str(res)}")
return
log.info("Upgrading db version from 4.4 to 5.0")
res = db.client.admin.command({"setFeatureCompatibilityVersion": "5.0"})
log.info(res)
def _apply_migrations(log: Logger): def _apply_migrations(log: Logger):
""" """
Apply migrations as found in the migration dir. Apply migrations as found in the migration dir.
@@ -50,6 +73,8 @@ def _apply_migrations(log: Logger):
log.info(f"Started mongodb migrations") log.info(f"Started mongodb migrations")
_ensure_mongodb_version()
if not _migration_dir.is_dir(): if not _migration_dir.is_dir():
raise ValueError(f"Invalid migration dir {_migration_dir}") raise ValueError(f"Invalid migration dir {_migration_dir}")

View File

@@ -25,7 +25,7 @@ packaging==20.3
psutil>=5.6.5 psutil>=5.6.5
pyhocon>=0.3.35r pyhocon>=0.3.35r
pyjwt>=2.4.0 pyjwt>=2.4.0
pymongo==4.6.3 pymongo==4.7.3
python-rapidjson>=0.6.3 python-rapidjson>=0.6.3
redis>=4.5.4,<5 redis>=4.5.4,<5
requests>=2.13.0 requests>=2.13.0