Propagate repository lock context through SQL writes
This commit is contained in:
@@ -11914,6 +11914,7 @@ def metadata_write_rollback(payload: dict[str, Any]) -> dict[str, Any]:
|
||||
}
|
||||
rollback_result = storage_saved_state_rollback(
|
||||
{
|
||||
**repository_write_context(payload),
|
||||
"base_id": base_id,
|
||||
"backup_id": backup_id,
|
||||
"allow_sql_saved_state_rollback": True,
|
||||
@@ -16783,11 +16784,23 @@ def storage_saved_state_apply_proposal(payload: dict[str, Any]) -> dict[str, Any
|
||||
)
|
||||
|
||||
|
||||
def repository_write_context(payload: dict[str, Any]) -> dict[str, Any]:
|
||||
"""Carry repository coordination through nested write operations."""
|
||||
return {
|
||||
key: payload[key]
|
||||
for key in ("lock_session_id", "repository_object")
|
||||
if payload.get(key) is not None
|
||||
}
|
||||
|
||||
|
||||
def storage_saved_state_rollback(payload: dict[str, Any]) -> dict[str, Any]:
|
||||
method = "storage.saved_state.rollback"
|
||||
base_id_or_error = require_base_id(payload, method)
|
||||
if isinstance(base_id_or_error, dict):
|
||||
return base_id_or_error
|
||||
repository_error = repository_apply_gate(payload, method, "apply_and_rollback")
|
||||
if repository_error:
|
||||
return repository_error
|
||||
allow_rollback, allow_error = strict_bool_argument(payload, "allow_sql_saved_state_rollback", method=method, default=False)
|
||||
if allow_error:
|
||||
return allow_error
|
||||
@@ -16827,6 +16840,7 @@ def storage_saved_state_rollback(payload: dict[str, Any]) -> dict[str, Any]:
|
||||
rollback_payload["base_id"] = base_id_or_error
|
||||
rollback_payload["allow_sql_saved_state_apply"] = True
|
||||
rollback_payload["timeout_seconds"] = int(timeout_seconds or 30)
|
||||
rollback_payload.update(repository_write_context(payload))
|
||||
apply_result = storage_saved_state_apply_proposal(rollback_payload)
|
||||
return {
|
||||
"schema": "onec_storage_saved_state_rollback.v1",
|
||||
@@ -37883,6 +37897,7 @@ def metadata_form_element_write_apply(payload: dict[str, Any]) -> dict[str, Any]
|
||||
return timeout_error
|
||||
apply_result = storage_saved_state_apply_proposal(
|
||||
{
|
||||
**repository_write_context(payload),
|
||||
"base_id": payload.get("base_id"),
|
||||
"allow_sql_saved_state_apply": True,
|
||||
"proposal": proposal,
|
||||
@@ -37923,6 +37938,7 @@ def metadata_form_element_write_apply(payload: dict[str, Any]) -> dict[str, Any]
|
||||
return result
|
||||
rollback_result = storage_saved_state_rollback(
|
||||
{
|
||||
**repository_write_context(payload),
|
||||
"base_id": payload.get("base_id"),
|
||||
"allow_sql_saved_state_rollback": True,
|
||||
"backup_id": backup_id,
|
||||
@@ -38118,6 +38134,7 @@ def metadata_form_target_move(payload: dict[str, Any]) -> dict[str, Any]:
|
||||
return invalid_argument(method, "allow_sql_saved_state_apply", "Apply mode is opt-in; pass allow_sql_saved_state_apply=true.")
|
||||
apply_result = storage_saved_state_apply_proposal(
|
||||
{
|
||||
**repository_write_context(payload),
|
||||
"base_id": base_id,
|
||||
"allow_sql_saved_state_apply": True,
|
||||
"proposal": proposal,
|
||||
@@ -38141,6 +38158,7 @@ def metadata_form_target_move(payload: dict[str, Any]) -> dict[str, Any]:
|
||||
return result
|
||||
rollback_result = storage_saved_state_rollback(
|
||||
{
|
||||
**repository_write_context(payload),
|
||||
"base_id": base_id,
|
||||
"allow_sql_saved_state_rollback": True,
|
||||
"backup_id": backup_id,
|
||||
@@ -38747,6 +38765,7 @@ def form_embedded_module_handler_write_apply(
|
||||
return invalid_argument(method, "allow_sql_saved_state_apply", "Apply mode is opt-in; pass allow_sql_saved_state_apply=true.")
|
||||
apply_result = storage_saved_state_apply_proposal(
|
||||
{
|
||||
**repository_write_context(payload),
|
||||
"base_id": base_id,
|
||||
"allow_sql_saved_state_apply": True,
|
||||
"proposal": proposal,
|
||||
@@ -38775,6 +38794,7 @@ def form_embedded_module_handler_write_apply(
|
||||
return result
|
||||
rollback_result = storage_saved_state_rollback(
|
||||
{
|
||||
**repository_write_context(payload),
|
||||
"base_id": base_id,
|
||||
"allow_sql_saved_state_rollback": True,
|
||||
"backup_id": backup_id,
|
||||
@@ -39157,6 +39177,7 @@ def metadata_form_command_button_write(payload: dict[str, Any]) -> dict[str, Any
|
||||
return invalid_argument(method, "allow_sql_saved_state_apply", "Apply mode is opt-in; pass allow_sql_saved_state_apply=true.")
|
||||
apply_result = storage_saved_state_apply_proposal(
|
||||
{
|
||||
**repository_write_context(payload),
|
||||
"base_id": base_id,
|
||||
"allow_sql_saved_state_apply": True,
|
||||
"proposal": proposal,
|
||||
@@ -39176,6 +39197,7 @@ def metadata_form_command_button_write(payload: dict[str, Any]) -> dict[str, Any
|
||||
if backup_id and payload.get("allow_sql_saved_state_rollback") is True:
|
||||
rollback_result = storage_saved_state_rollback(
|
||||
{
|
||||
**repository_write_context(payload),
|
||||
"base_id": base_id,
|
||||
"allow_sql_saved_state_rollback": True,
|
||||
"backup_id": backup_id,
|
||||
@@ -39227,6 +39249,7 @@ def metadata_form_command_button_write(payload: dict[str, Any]) -> dict[str, Any
|
||||
return finalize_command_button_write_result(result)
|
||||
rollback_result = storage_saved_state_rollback(
|
||||
{
|
||||
**repository_write_context(payload),
|
||||
"base_id": base_id,
|
||||
"allow_sql_saved_state_rollback": True,
|
||||
"backup_id": backup_id,
|
||||
@@ -39544,6 +39567,7 @@ def metadata_module_write_apply(payload: dict[str, Any]) -> dict[str, Any]:
|
||||
return invalid_argument(method, "allow_sql_saved_state_apply", "Apply mode is opt-in; pass allow_sql_saved_state_apply=true.")
|
||||
apply_result = storage_saved_state_apply_proposal(
|
||||
{
|
||||
**repository_write_context(payload),
|
||||
"base_id": base_id,
|
||||
"allow_sql_saved_state_apply": True,
|
||||
"proposal": proposal,
|
||||
@@ -39572,6 +39596,7 @@ def metadata_module_write_apply(payload: dict[str, Any]) -> dict[str, Any]:
|
||||
return result
|
||||
rollback_result = storage_saved_state_rollback(
|
||||
{
|
||||
**repository_write_context(payload),
|
||||
"base_id": base_id,
|
||||
"allow_sql_saved_state_rollback": True,
|
||||
"backup_id": backup_id,
|
||||
|
||||
@@ -21694,6 +21694,8 @@ def test_metadata_module_write_apply_applies_and_rolls_back(monkeypatch: pytest.
|
||||
"mode": "apply_and_rollback",
|
||||
"allow_sql_saved_state_apply": True,
|
||||
"allow_sql_saved_state_rollback": True,
|
||||
"lock_session_id": "rlock-test",
|
||||
"repository_object": "Справочник.Тест",
|
||||
"old": "a",
|
||||
"new": "b",
|
||||
}
|
||||
@@ -21701,7 +21703,11 @@ def test_metadata_module_write_apply_applies_and_rolls_back(monkeypatch: pytest.
|
||||
|
||||
assert seen["proposal_payload"]["include_payload"] is True
|
||||
assert seen["apply"]["proposal"] is proposal
|
||||
assert seen["apply"]["lock_session_id"] == "rlock-test"
|
||||
assert seen["apply"]["repository_object"] == "Справочник.Тест"
|
||||
assert seen["rollback"]["backup_id"] == "c" * 32
|
||||
assert seen["rollback"]["lock_session_id"] == "rlock-test"
|
||||
assert seen["rollback"]["repository_object"] == "Справочник.Тест"
|
||||
assert result["proposal"]["encoded"] == {"sha1": "new"}
|
||||
assert result["status"] == "verified_and_rolled_back"
|
||||
assert result["applied"] is True
|
||||
|
||||
Reference in New Issue
Block a user