fix: keep status from taking writer lease
This commit is contained in:
parent
9815f0ae23
commit
b459293e6f
|
|
@ -1693,9 +1693,6 @@ def tool_status():
|
|||
# is detected so status stays reachable.
|
||||
db_exists = _backend_db_exists()
|
||||
_refresh_vector_disabled_flag()
|
||||
writer_ok, writer_reason = _acquire_mcp_writer_lock()
|
||||
if not writer_ok:
|
||||
logger.warning("%s; mutating MCP tools will run read-only", writer_reason)
|
||||
|
||||
if _vector_disabled:
|
||||
return _tool_status_via_sqlite()
|
||||
|
|
|
|||
|
|
@ -55,6 +55,7 @@ WRITE_TOOLS = frozenset(
|
|||
{
|
||||
"mempalace_add_drawer",
|
||||
"mempalace_checkpoint",
|
||||
"mempalace_delete_by_source",
|
||||
"mempalace_delete_drawer",
|
||||
"mempalace_update_drawer",
|
||||
"mempalace_diary_write",
|
||||
|
|
|
|||
|
|
@ -174,6 +174,7 @@ def test_service_tool_classification():
|
|||
assert service.classify_tool("mempalace_search") == "read"
|
||||
assert service.classify_tool("mempalace_add_drawer") == "write"
|
||||
assert service.classify_tool("mempalace_checkpoint") == "write"
|
||||
assert service.classify_tool("mempalace_delete_by_source") == "write"
|
||||
assert service.classify_tool("mempalace_mine") == "maintenance"
|
||||
assert service.classify_tool("unknown") == "unknown"
|
||||
|
||||
|
|
|
|||
|
|
@ -4832,6 +4832,27 @@ def test_peer_writer_guard_does_not_gate_read_tool(monkeypatch):
|
|||
assert '"ok": true' in response["result"]["content"][0]["text"]
|
||||
|
||||
|
||||
def test_status_tool_does_not_acquire_peer_writer_lock(monkeypatch):
|
||||
from mempalace import mcp_server
|
||||
|
||||
def forbidden_lock():
|
||||
raise AssertionError("status should not acquire the peer-writer lock")
|
||||
|
||||
monkeypatch.setattr(mcp_server, "_ensure_sqlite_integrity_status", lambda: None)
|
||||
monkeypatch.setattr(mcp_server, "_sqlite_integrity_errors", None)
|
||||
monkeypatch.setattr(mcp_server, "_backend_db_exists", lambda: True)
|
||||
monkeypatch.setattr(mcp_server, "_refresh_vector_disabled_flag", lambda: None)
|
||||
monkeypatch.setattr(mcp_server, "_vector_disabled", True)
|
||||
monkeypatch.setattr(
|
||||
mcp_server,
|
||||
"_tool_status_via_sqlite",
|
||||
lambda: {"total_drawers": 0, "wings": {}, "rooms": {}},
|
||||
)
|
||||
monkeypatch.setattr(mcp_server, "_acquire_mcp_writer_lock", forbidden_lock)
|
||||
|
||||
assert mcp_server.tool_status()["total_drawers"] == 0
|
||||
|
||||
|
||||
def test_peer_writer_lock_setup_failure_is_cached(monkeypatch):
|
||||
from mempalace import mcp_server, palace
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue