v1.2.23: lock_check three-state return (True/False/None), None→503 DB unavailable
This commit is contained in:
+1
-1
@@ -32,7 +32,7 @@ from routes.api_scenario_defs import bp_defs as api_scenario_defs_bp
|
|||||||
|
|
||||||
# Версия — показывается в топбаре UI. Меняется при КАЖДОМ изменении кода.
|
# Версия — показывается в топбаре UI. Меняется при КАЖДОМ изменении кода.
|
||||||
# Нужна для фильтрации истории (пользователь видит только записи своей версии).
|
# Нужна для фильтрации истории (пользователь видит только записи своей версии).
|
||||||
VERSION = "1.2.22"
|
VERSION = "1.2.23"
|
||||||
|
|
||||||
# Flask-приложение с Jinja2-шаблонами из папки templates/
|
# Flask-приложение с Jinja2-шаблонами из папки templates/
|
||||||
app = Flask(__name__, template_folder="templates", static_folder="static")
|
app = Flask(__name__, template_folder="templates", static_folder="static")
|
||||||
|
|||||||
@@ -215,10 +215,11 @@ def lock_check(client_id, stand):
|
|||||||
|
|
||||||
Returns:
|
Returns:
|
||||||
True — можно запускать (нет RUNNING в БД)
|
True — можно запускать (нет RUNNING в БД)
|
||||||
False — нельзя (уже есть RUNNING) → 409 Conflict"""
|
False — нельзя (уже есть RUNNING) → 409 Conflict
|
||||||
|
None — БД недоступна, нельзя проверить → 503 DB unavailable"""
|
||||||
conn = get_conn()
|
conn = get_conn()
|
||||||
if not conn:
|
if not conn:
|
||||||
return False # без БД — не разрешаем (partial unique index недоступен)
|
return None # БД недоступна — не True и не False, вызывающий решит
|
||||||
try:
|
try:
|
||||||
cur = conn.cursor()
|
cur = conn.cursor()
|
||||||
cur.execute("""
|
cur.execute("""
|
||||||
@@ -231,7 +232,6 @@ def lock_check(client_id, stand):
|
|||||||
return row is None # None = нет RUNNING = можно запускать
|
return row is None # None = нет RUNNING = можно запускать
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
print(f"[DEFS] lock_check error: {e}", flush=True)
|
print(f"[DEFS] lock_check error: {e}", flush=True)
|
||||||
# При ошибке БД — НЕ разрешаем (безопасный fallback)
|
return None # ошибка БД — не можем проверить
|
||||||
return False
|
|
||||||
finally:
|
finally:
|
||||||
put_conn(conn)
|
put_conn(conn)
|
||||||
|
|||||||
@@ -41,7 +41,10 @@ def api_scenario_run():
|
|||||||
cid = get_client_id()
|
cid = get_client_id()
|
||||||
stand = get_stand()
|
stand = get_stand()
|
||||||
|
|
||||||
if not lock_check(cid, stand):
|
can_run = lock_check(cid, stand)
|
||||||
|
if can_run is None:
|
||||||
|
return jsonify({"error": "DB unavailable"}), 503
|
||||||
|
if not can_run:
|
||||||
return jsonify({"error": "Another scenario is already running"}), 409
|
return jsonify({"error": "Another scenario is already running"}), 409
|
||||||
|
|
||||||
defn = get_definition(def_id, cid, stand)
|
defn = get_definition(def_id, cid, stand)
|
||||||
|
|||||||
Reference in New Issue
Block a user