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(
|
rollback_result = storage_saved_state_rollback(
|
||||||
{
|
{
|
||||||
|
**repository_write_context(payload),
|
||||||
"base_id": base_id,
|
"base_id": base_id,
|
||||||
"backup_id": backup_id,
|
"backup_id": backup_id,
|
||||||
"allow_sql_saved_state_rollback": True,
|
"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]:
|
def storage_saved_state_rollback(payload: dict[str, Any]) -> dict[str, Any]:
|
||||||
method = "storage.saved_state.rollback"
|
method = "storage.saved_state.rollback"
|
||||||
base_id_or_error = require_base_id(payload, method)
|
base_id_or_error = require_base_id(payload, method)
|
||||||
if isinstance(base_id_or_error, dict):
|
if isinstance(base_id_or_error, dict):
|
||||||
return base_id_or_error
|
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)
|
allow_rollback, allow_error = strict_bool_argument(payload, "allow_sql_saved_state_rollback", method=method, default=False)
|
||||||
if allow_error:
|
if allow_error:
|
||||||
return 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["base_id"] = base_id_or_error
|
||||||
rollback_payload["allow_sql_saved_state_apply"] = True
|
rollback_payload["allow_sql_saved_state_apply"] = True
|
||||||
rollback_payload["timeout_seconds"] = int(timeout_seconds or 30)
|
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)
|
apply_result = storage_saved_state_apply_proposal(rollback_payload)
|
||||||
return {
|
return {
|
||||||
"schema": "onec_storage_saved_state_rollback.v1",
|
"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
|
return timeout_error
|
||||||
apply_result = storage_saved_state_apply_proposal(
|
apply_result = storage_saved_state_apply_proposal(
|
||||||
{
|
{
|
||||||
|
**repository_write_context(payload),
|
||||||
"base_id": payload.get("base_id"),
|
"base_id": payload.get("base_id"),
|
||||||
"allow_sql_saved_state_apply": True,
|
"allow_sql_saved_state_apply": True,
|
||||||
"proposal": proposal,
|
"proposal": proposal,
|
||||||
@@ -37923,6 +37938,7 @@ def metadata_form_element_write_apply(payload: dict[str, Any]) -> dict[str, Any]
|
|||||||
return result
|
return result
|
||||||
rollback_result = storage_saved_state_rollback(
|
rollback_result = storage_saved_state_rollback(
|
||||||
{
|
{
|
||||||
|
**repository_write_context(payload),
|
||||||
"base_id": payload.get("base_id"),
|
"base_id": payload.get("base_id"),
|
||||||
"allow_sql_saved_state_rollback": True,
|
"allow_sql_saved_state_rollback": True,
|
||||||
"backup_id": backup_id,
|
"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.")
|
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(
|
apply_result = storage_saved_state_apply_proposal(
|
||||||
{
|
{
|
||||||
|
**repository_write_context(payload),
|
||||||
"base_id": base_id,
|
"base_id": base_id,
|
||||||
"allow_sql_saved_state_apply": True,
|
"allow_sql_saved_state_apply": True,
|
||||||
"proposal": proposal,
|
"proposal": proposal,
|
||||||
@@ -38141,6 +38158,7 @@ def metadata_form_target_move(payload: dict[str, Any]) -> dict[str, Any]:
|
|||||||
return result
|
return result
|
||||||
rollback_result = storage_saved_state_rollback(
|
rollback_result = storage_saved_state_rollback(
|
||||||
{
|
{
|
||||||
|
**repository_write_context(payload),
|
||||||
"base_id": base_id,
|
"base_id": base_id,
|
||||||
"allow_sql_saved_state_rollback": True,
|
"allow_sql_saved_state_rollback": True,
|
||||||
"backup_id": backup_id,
|
"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.")
|
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(
|
apply_result = storage_saved_state_apply_proposal(
|
||||||
{
|
{
|
||||||
|
**repository_write_context(payload),
|
||||||
"base_id": base_id,
|
"base_id": base_id,
|
||||||
"allow_sql_saved_state_apply": True,
|
"allow_sql_saved_state_apply": True,
|
||||||
"proposal": proposal,
|
"proposal": proposal,
|
||||||
@@ -38775,6 +38794,7 @@ def form_embedded_module_handler_write_apply(
|
|||||||
return result
|
return result
|
||||||
rollback_result = storage_saved_state_rollback(
|
rollback_result = storage_saved_state_rollback(
|
||||||
{
|
{
|
||||||
|
**repository_write_context(payload),
|
||||||
"base_id": base_id,
|
"base_id": base_id,
|
||||||
"allow_sql_saved_state_rollback": True,
|
"allow_sql_saved_state_rollback": True,
|
||||||
"backup_id": backup_id,
|
"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.")
|
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(
|
apply_result = storage_saved_state_apply_proposal(
|
||||||
{
|
{
|
||||||
|
**repository_write_context(payload),
|
||||||
"base_id": base_id,
|
"base_id": base_id,
|
||||||
"allow_sql_saved_state_apply": True,
|
"allow_sql_saved_state_apply": True,
|
||||||
"proposal": proposal,
|
"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:
|
if backup_id and payload.get("allow_sql_saved_state_rollback") is True:
|
||||||
rollback_result = storage_saved_state_rollback(
|
rollback_result = storage_saved_state_rollback(
|
||||||
{
|
{
|
||||||
|
**repository_write_context(payload),
|
||||||
"base_id": base_id,
|
"base_id": base_id,
|
||||||
"allow_sql_saved_state_rollback": True,
|
"allow_sql_saved_state_rollback": True,
|
||||||
"backup_id": backup_id,
|
"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)
|
return finalize_command_button_write_result(result)
|
||||||
rollback_result = storage_saved_state_rollback(
|
rollback_result = storage_saved_state_rollback(
|
||||||
{
|
{
|
||||||
|
**repository_write_context(payload),
|
||||||
"base_id": base_id,
|
"base_id": base_id,
|
||||||
"allow_sql_saved_state_rollback": True,
|
"allow_sql_saved_state_rollback": True,
|
||||||
"backup_id": backup_id,
|
"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.")
|
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(
|
apply_result = storage_saved_state_apply_proposal(
|
||||||
{
|
{
|
||||||
|
**repository_write_context(payload),
|
||||||
"base_id": base_id,
|
"base_id": base_id,
|
||||||
"allow_sql_saved_state_apply": True,
|
"allow_sql_saved_state_apply": True,
|
||||||
"proposal": proposal,
|
"proposal": proposal,
|
||||||
@@ -39572,6 +39596,7 @@ def metadata_module_write_apply(payload: dict[str, Any]) -> dict[str, Any]:
|
|||||||
return result
|
return result
|
||||||
rollback_result = storage_saved_state_rollback(
|
rollback_result = storage_saved_state_rollback(
|
||||||
{
|
{
|
||||||
|
**repository_write_context(payload),
|
||||||
"base_id": base_id,
|
"base_id": base_id,
|
||||||
"allow_sql_saved_state_rollback": True,
|
"allow_sql_saved_state_rollback": True,
|
||||||
"backup_id": backup_id,
|
"backup_id": backup_id,
|
||||||
|
|||||||
@@ -21694,6 +21694,8 @@ def test_metadata_module_write_apply_applies_and_rolls_back(monkeypatch: pytest.
|
|||||||
"mode": "apply_and_rollback",
|
"mode": "apply_and_rollback",
|
||||||
"allow_sql_saved_state_apply": True,
|
"allow_sql_saved_state_apply": True,
|
||||||
"allow_sql_saved_state_rollback": True,
|
"allow_sql_saved_state_rollback": True,
|
||||||
|
"lock_session_id": "rlock-test",
|
||||||
|
"repository_object": "Справочник.Тест",
|
||||||
"old": "a",
|
"old": "a",
|
||||||
"new": "b",
|
"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["proposal_payload"]["include_payload"] is True
|
||||||
assert seen["apply"]["proposal"] is proposal
|
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"]["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["proposal"]["encoded"] == {"sha1": "new"}
|
||||||
assert result["status"] == "verified_and_rolled_back"
|
assert result["status"] == "verified_and_rolled_back"
|
||||||
assert result["applied"] is True
|
assert result["applied"] is True
|
||||||
|
|||||||
Reference in New Issue
Block a user