feat(cluster): production-grade atomic VACUUM replication, pre-validation integrity check, Asterisk database query injection, and live reload
This commit is contained in:
1 parent
a537fc6469
commit
0b740da87e
2 files changed
+98
-29
No files matched your search
+14
-12
@@ -72,7 +72,7 @@ case "$CMD" in
|
||||
exit 0
|
||||
fi
|
||||
|
||||
# Vérification intégrité de la source
|
||||
# 1. Vérification intégrité du fichier source temporaire
|
||||
SRC_INTEGRITY=$(sqlite3 "$SRC" "PRAGMA integrity_check;" 2>/dev/null || echo "corrupt")
|
||||
if [ "$SRC_INTEGRITY" != "ok" ]; then
|
||||
echo "ASTDB_SOURCE_CORRUPT: $SRC_INTEGRITY"
|
||||
@@ -80,21 +80,23 @@ case "$CMD" in
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Fusion ou remplacement propre
|
||||
if [ -f "$DEST" ]; then
|
||||
DEST_INTEGRITY=$(sqlite3 "$DEST" "PRAGMA integrity_check;" 2>/dev/null || echo "corrupt")
|
||||
if [ "$DEST_INTEGRITY" = "ok" ]; then
|
||||
# Fusion SQLite transactionnelle sans fermer les descripteurs d'Asterisk
|
||||
sqlite3 "$DEST" "ATTACH '$SRC' AS src; INSERT OR REPLACE INTO astdb SELECT * FROM src.astdb; DETACH src;" 2>/dev/null || cp -f "$SRC" "$DEST"
|
||||
else
|
||||
cp -f "$SRC" "$DEST"
|
||||
fi
|
||||
chmod 644 "$SRC" 2>/dev/null || true
|
||||
|
||||
# 2. Si Asterisk tourne, injection via son moteur interne database query
|
||||
# Cela garantit l'absence totale de verrou SQLite (database is locked) et préserve les descripteurs ouverts
|
||||
if pidof asterisk >/dev/null 2>&1; then
|
||||
/usr/sbin/asterisk -rx "database query \"ATTACH '$SRC' AS src;\"" >/dev/null 2>&1 || true
|
||||
/usr/sbin/asterisk -rx "database query \"DELETE FROM astdb WHERE key LIKE '/registrar/%';\"" >/dev/null 2>&1 || true
|
||||
/usr/sbin/asterisk -rx "database query \"INSERT INTO astdb SELECT * FROM src.astdb WHERE key LIKE '/registrar/%';\"" >/dev/null 2>&1 || true
|
||||
/usr/sbin/asterisk -rx "database query \"INSERT OR REPLACE INTO astdb SELECT * FROM src.astdb WHERE key NOT LIKE '/registrar/%';\"" >/dev/null 2>&1 || true
|
||||
/usr/sbin/asterisk -rx "database query \"DETACH src;\"" >/dev/null 2>&1 || true
|
||||
else
|
||||
# Asterisk arrêté : copie directe intègre
|
||||
cp -f "$SRC" "$DEST"
|
||||
chown asterisk:asterisk "$DEST" 2>/dev/null || true
|
||||
chmod 664 "$DEST" 2>/dev/null || true
|
||||
fi
|
||||
|
||||
chown asterisk:asterisk "$DEST" 2>/dev/null || true
|
||||
chmod 664 "$DEST" 2>/dev/null || true
|
||||
rm -f "$SRC"
|
||||
echo "ASTDB_RESTORED_OK"
|
||||
;;
|
||||
|
||||
Reference in new issue
Block a user