fix(cluster): purge subscription_persistence in AstDB replication to prevent dead BLF dialogues
This commit is contained in:
1 parent
d1d42f75b5
commit
4bd0f8b095
3 files changed
+10
-2
No files matched your search
@@ -49,6 +49,7 @@ fi
|
||||
# Leur raccrochage réinitialise immédiatement les hints à l'état Idle et éteint les BLF.
|
||||
if pidof asterisk >/dev/null 2>&1; then
|
||||
/usr/sbin/asterisk -rx "channel request hangup all" >> "$LOG_FILE" 2>&1 || true
|
||||
/usr/sbin/asterisk -rx "database deltree subscription_persistence" >> "$LOG_FILE" 2>&1 || true
|
||||
/usr/sbin/asterisk -rx "pjsip reload" >> "$LOG_FILE" 2>&1 || true
|
||||
/usr/sbin/asterisk -rx "pjsip send register *" >> "$LOG_FILE" 2>&1 || true
|
||||
for reg in $(/usr/sbin/asterisk -rx "pjsip show registrations" 2>/dev/null | grep -o '[a-zA-Z0-9_\-]*-reg' | sort -u); do
|
||||
|
||||
@@ -86,15 +86,20 @@ case "$CMD" in
|
||||
|
||||
# 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
|
||||
# IMPORTANT : Ne jamais répliquer /subscription_persistence/ car les dialogues SIP BLF sont des objets en RAM
|
||||
# propres à l'instance Asterisk d'origine. Les purger force le nouveau Master à envoyer 481, ce qui incite
|
||||
# immédiatement les téléphones (Yealink T46S, T54W) à réémettre un dialogue BLF propre en 25ms.
|
||||
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 \"INSERT OR REPLACE INTO astdb SELECT * FROM src.astdb WHERE key NOT LIKE '/registrar/%' AND key NOT LIKE '/subscription_persistence/%';\"" >/dev/null 2>&1 || true
|
||||
/usr/sbin/asterisk -rx "database query \"DETACH src;\"" >/dev/null 2>&1 || true
|
||||
/usr/sbin/asterisk -rx "database deltree subscription_persistence" >/dev/null 2>&1 || true
|
||||
else
|
||||
# Asterisk arrêté : copie directe intègre
|
||||
# Asterisk arrêté : copie directe intègre en purgeant les souscriptions zombies
|
||||
cp -f "$SRC" "$DEST"
|
||||
sqlite3 "$DEST" "DELETE FROM astdb WHERE key LIKE '/subscription_persistence/%';" 2>/dev/null || true
|
||||
chown asterisk:asterisk "$DEST" 2>/dev/null || true
|
||||
chmod 664 "$DEST" 2>/dev/null || true
|
||||
fi
|
||||
|
||||
Reference in new issue
Block a user