mgr/nvmeof: change pool application to nvmeof-meta instead of rbd

Signed-off-by: Tomer Haskalovitch <tomer.haska@ibm.com>
This commit is contained in:
Tomer Haskalovitch 2026-06-25 11:48:41 +03:00
parent 7071fdcabe
commit a2057e2ea0
2 changed files with 34 additions and 47 deletions

View File

@ -3,7 +3,6 @@ from typing import Any
from .cli import NVMeoFCLICommand
from mgr_module import MgrModule
import rbd
logger = logging.getLogger(__name__)
@ -30,31 +29,21 @@ class NVMeoF(MgrModule):
self.create_pool(pool_name)
logger.info(f"Pool '{pool_name}' created.")
except Exception:
logger.error(f"Error creating pool '{pool_name}", exc_info=True)
logger.error(f"Error creating pool '{pool_name}'", exc_info=True)
raise
def _enable_rbd_application(self, pool_name: str) -> None:
def _enable_application(self, pool_name: str, application_name: str) -> None:
try:
self.appify_pool(pool_name, 'rbd')
logger.info(f"'rbd' application enabled on pool '{pool_name}'.")
self.appify_pool(pool_name, application_name)
logger.info(f"'{application_name}' application enabled on pool '{pool_name}'.")
except Exception:
logger.error(
f"Failed to enable 'rbd' application on '{pool_name}'",
f"Failed to enable '{application_name}' application on '{pool_name}'",
exc_info=True
)
raise
def _rbd_pool_init(self, pool_name: str) -> None:
try:
with self.rados.open_ioctx(pool_name) as ioctx:
rbd.RBD().pool_init(ioctx, False)
logger.info(f"RBD pool_init completed on '{pool_name}'.")
except Exception:
logger.error(f"Failed to initialize RBD pool '{pool_name}'", exc_info=True)
raise
def create_pool_if_not_exists(self) -> None:
if not self._pool_exists(POOL_NAME):
self._create_pool(POOL_NAME)
self._enable_rbd_application(POOL_NAME)
self._rbd_pool_init(POOL_NAME)
self._enable_application(POOL_NAME, 'nvmeof-meta')

View File

@ -1,5 +1,3 @@
from contextlib import contextmanager
from unittest.mock import MagicMock
import nvmeof.module as nvmeof_mod
@ -8,22 +6,10 @@ import nvmeof.module as nvmeof_mod
class FakeRados:
def __init__(self, exists: bool):
self._exists = exists
self.opened_pools = []
def pool_exists(self, pool_name: str) -> bool:
return self._exists
@contextmanager
def open_ioctx(self, pool_name: str):
self.opened_pools.append(pool_name)
yield object()
def patch_rbd_pool_init(monkeypatch):
rbd_instance = MagicMock()
monkeypatch.setattr(nvmeof_mod.rbd, "RBD", lambda: rbd_instance)
return rbd_instance
def make_mgr(mon_handler, exists: bool, monkeypatch):
mgr = nvmeof_mod.NVMeoF.__new__(nvmeof_mod.NVMeoF)
@ -37,49 +23,61 @@ def make_mgr(mon_handler, exists: bool, monkeypatch):
def _pool_exists(self, pool_name: str) -> bool:
return self._fake_rados.pool_exists(pool_name)
def _rbd_pool_init(self, pool_name: str):
with self._fake_rados.open_ioctx(pool_name) as ioctx:
nvmeof_mod.rbd.RBD().pool_init(ioctx, False)
monkeypatch.setattr(nvmeof_mod.NVMeoF, "_pool_exists", _pool_exists, raising=True)
monkeypatch.setattr(nvmeof_mod.NVMeoF, "_rbd_pool_init", _rbd_pool_init, raising=True)
return mgr
def test_pool_exists_skips_create_calls_enable_and_pool_init(monkeypatch):
def test_pool_exists_skips_pool_creation(monkeypatch):
calls = []
def mon_command(cmd, inbuf):
calls.append(cmd)
return 0, "", ""
rbd_instance = patch_rbd_pool_init(monkeypatch)
mgr = make_mgr(mon_command, exists=True, monkeypatch=monkeypatch)
mgr.create_pool_if_not_exists()
assert not any(c.get("prefix") == "osd pool create" for c in calls)
assert any(c.get("prefix") == "osd pool application enable" for c in calls)
assert mgr._fake_rados.opened_pools == [".nvmeof"]
rbd_instance.pool_init.assert_called_once()
assert not any(c.get("prefix") == "osd pool application enable" for c in calls)
def test_pool_missing_creates_then_enables_then_pool_init(monkeypatch):
def test_pool_missing_creates_then_enables(monkeypatch):
calls = []
def mon_command(cmd, inbuf):
calls.append(cmd)
return 0, "", ""
rbd_instance = patch_rbd_pool_init(monkeypatch)
mgr = make_mgr(mon_command, exists=False, monkeypatch=monkeypatch)
mgr.create_pool_if_not_exists()
assert any(c.get("prefix") == "osd pool create" for c in calls)
assert any(c.get("prefix") == "osd pool application enable" for c in calls)
create_calls = [c for c in calls if c.get("prefix") == "osd pool create"]
assert len(create_calls) == 1, "Expected one pool create call"
assert mgr._fake_rados.opened_pools == [".nvmeof"]
rbd_instance.pool_init.assert_called_once()
assert create_calls[0].get("pool") == ".nvmeof", "Expected pool_name to be '.nvmeof'"
app_enable_calls = [c for c in calls if c.get("prefix") == "osd pool application enable"]
assert len(app_enable_calls) == 1, "Expected one application enable call"
assert app_enable_calls[0].get("app") == "nvmeof-meta", "Expected 'nvmeof-meta' application to be enabled"
assert app_enable_calls[0].get("pool") == ".nvmeof", "Expected pool to be '.nvmeof'"
def test_enable_application_with_custom_app_name(monkeypatch):
calls = []
def mon_command(cmd, inbuf):
calls.append(cmd)
return 0, "", ""
mgr = make_mgr(mon_command, exists=True, monkeypatch=monkeypatch)
mgr._enable_application("test-pool", "custom-app")
custom_enable_calls = [c for c in calls if c.get("prefix") == "osd pool application enable" and c.get("app") == "custom-app"]
assert len(custom_enable_calls) == 1, "Expected one 'custom-app' application enable call"
assert custom_enable_calls[0].get("pool") == "test-pool"