Merge pull request 'Allow current-region takeover of empty draining locks' (#14) from feature/account-lock-session-end-fix into main

Reviewed-on: #14
This commit was merged in pull request #14.
This commit is contained in:
2026-06-15 14:54:58 -04:00
+20 -10
View File
@@ -712,23 +712,32 @@ def newserv_account_lock_acquire():
"lock": lock_row_payload(row), "lock": lock_row_payload(row),
}) })
if row["holder_source"] != source:
return jsonify({
"ok": False,
"message": f"$C6Account is already active\\non {row['holder_source']}.",
"holder_source": row["holder_source"],
"state": row["state"],
"lock": lock_row_payload(row),
})
sessions = row["sessions"] or {} sessions = row["sessions"] or {}
if isinstance(sessions, str): if isinstance(sessions, str):
sessions = json.loads(sessions) sessions = json.loads(sessions)
if row["holder_source"] != source:
target_region_current = False
if row["state"] == "draining" and not sessions and source_region:
_all_current, sync = account_sync_current_on_all_regions(account_id)
region_status = (sync.get("regions") or {}).get(source_region) or {}
target_region_current = region_status.get("status") == "current"
if not target_region_current:
return jsonify({
"ok": False,
"message": f"$C6Account is already active\\non {row['holder_source']}.",
"holder_source": row["holder_source"],
"state": row["state"],
"lock": lock_row_payload(row),
})
sessions[session_nonce] = session_info sessions[session_nonce] = session_info
cur.execute(""" cur.execute("""
UPDATE account_session_locks UPDATE account_session_locks
SET state = 'active', SET holder_source = %s,
state = 'active',
source_region = %s, source_region = %s,
source_ship = %s, source_ship = %s,
account_store = %s, account_store = %s,
@@ -739,6 +748,7 @@ def newserv_account_lock_acquire():
RETURNING account_id, holder_source, source_region, source_ship, RETURNING account_id, holder_source, source_region, source_ship,
account_store, state, sessions, created_at, updated_at, expires_at account_store, state, sessions, created_at, updated_at, expires_at
""", ( """, (
source,
source_region, source_region,
source_ship, source_ship,
account_store, account_store,