Skip to content

Commit e8df7bd

Browse files
committed
refactor(daemon): isolate writer lease acquisition
1 parent 197b10e commit e8df7bd

1 file changed

Lines changed: 25 additions & 10 deletions

File tree

mempalace/daemon.py

Lines changed: 25 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1043,6 +1043,26 @@ def _close_or_defer_writer_lease(
10431043
writer_lease.close()
10441044

10451045

1046+
def _enter_daemon_writer_lease(
1047+
writer_lease: contextlib.ExitStack,
1048+
palace_path: str,
1049+
resolved_backend: str,
1050+
) -> None:
1051+
"""Acquire lifetime ownership when the backend requires one writer."""
1052+
if not backend_requires_single_writer(resolved_backend):
1053+
return
1054+
1055+
try:
1056+
writer_lease.enter_context(mine_palace_lock(palace_path))
1057+
except MineAlreadyRunning as exc:
1058+
raise DaemonError(
1059+
"writable daemon startup refused: another writer owns "
1060+
f"local backend {resolved_backend!r} for {palace_path!r}; "
1061+
"stop the existing writable MCP/direct/daemon owner, or "
1062+
"route all writes through that owner"
1063+
) from exc
1064+
1065+
10461066
def run_server(palace_path: str, *, backend: str | None = None, port: int = 0) -> None:
10471067
palace_path = canonical_palace_path(palace_path)
10481068
previous_env = {
@@ -1073,16 +1093,11 @@ def run_server(palace_path: str, *, backend: str | None = None, port: int = 0) -
10731093
writer_lease = contextlib.ExitStack()
10741094
try:
10751095
resolved_backend = resolve_backend_name(palace_path, explicit=backend)
1076-
if backend_requires_single_writer(resolved_backend):
1077-
try:
1078-
writer_lease.enter_context(mine_palace_lock(palace_path))
1079-
except MineAlreadyRunning as exc:
1080-
raise DaemonError(
1081-
"writable daemon startup refused: another writer owns "
1082-
f"local backend {resolved_backend!r} for {palace_path!r}; "
1083-
"stop the existing writable MCP/direct/daemon owner, or "
1084-
"route all writes through that owner"
1085-
) from exc
1096+
_enter_daemon_writer_lease(
1097+
writer_lease,
1098+
palace_path,
1099+
resolved_backend,
1100+
)
10861101

10871102
token = ensure_token(palace_path)
10881103
# Backend resolution above is only the ownership decision. Preserve

0 commit comments

Comments
 (0)