Add massive new retry framework for annna. - annna - Annna the nice friendly bot. HTML git clone git://bitreich.org/annna/ git://enlrupgkhuxnvlhsf6lc3fziv5h2hhfrinws65d7roiv6bfj7d652fid.onion/annna/ DIR Log DIR Files DIR Refs DIR Tags DIR README --- DIR commit b84504ef6c43259e07c62936922b829577204187 DIR parent 03a116d4179a0502cf3b36244c46d4a83e8615e7 HTML Author: Annna Robert-Houdin <annna@bitreich.org> Date: Sat, 25 Feb 2023 09:20:11 +0100 Add massive new retry framework for annna. Diffstat: M annna-join-channels | 7 +++++++ M annna-start-main | 32 ++++++++++++++++++++++++------- 2 files changed, 32 insertions(+), 7 deletions(-) --- DIR diff --git a/annna-join-channels b/annna-join-channels @@ -10,6 +10,7 @@ channels="$2" export ircuser="$(cat ${cfgbase}/${server}/ircuser 2>/dev/null)" +maxretries=10 # Channels for chan in ${channels}; do @@ -19,18 +20,24 @@ do sleep 1 ## Make sure the pipes are there. + tries=0 while [ ! -e "${ircbase}/${server}/${chan}/out" ]; do [ ! -f ${cfgbase}/running ] && exit 1 + tries=$(($tries + 1)) + [ $tries -gt $maxretries ] && exit 1 sleep 1 done + tries=0 ## Check if we have joined and received the message from the server. while [ -z "$(cat ${ircbase}/${server}/${chan}/out \ | head -n 1 \ | grep ".* ${ircuser}.* ${chan}.*")" ]; do [ ! -f ${cfgbase}/running ] && exit 1 + tries=$(($tries + 1)) + [ $tries -gt $maxretries ] && exit 1 sleep 2 done DIR diff --git a/annna-start-main b/annna-start-main @@ -11,7 +11,10 @@ usetls="$2" port="$3" channels="$4" +maxtries=10 +maxnicktries=5 { + nicktries=0 while [ -f ${cfgbase}/running ]; do # Connect @@ -46,35 +49,50 @@ channels="$4" # -f "${fullname}" -p ${port} & ii -s "${server}"${ircpassparam}${ircuserparam}${tlsparam} \ - -f "${fullname}" -p ${port} 2>&1 >/dev/null & + -f "${fullname}" -p ${port} 2>&1 >/dev/null & iipid=$! sleep 5 + tries=0 ## Waiting for the socket to be available. while [ ! -e ${ircbase}/${server}/out ]; do kill -0 $iipid >/dev/null 2>&1 || exit 1 [ ! -f ${cfgbase}/running ] && exit 1 + set -x + tries=$(($tries + 1)) + [ $tries -gt $maxtries ] && break sleep 4 done + [ $tries -gt $maxtries ] && continue + set +x # 433: Nickname is already in use. - if [ -n "$(grep " 433 " ${ircbase}/${server}/out)" ]; + if [ $(grep " 433 " ${ircbase}/${server}/out) ]; then - exit 3 + set -x + nicktries=$(($nicktries + 1)) + [ $nicktries -gt $maxnicktries ] && exit 3 + sleep 30 + set +x fi - { - annna-join-channels "${server}" "${channels}" - } & - + tries=0 # Check for end of motd. while [ -z "$(grep " 376 " ${ircbase}/${server}/out)" ]; do [ ! -f ${cfgbase}/running ] && exit 1 + set -x + [ $tries -gt $maxtries ] && break sleep 2 done + [ $tries -gt $maxtries ] && continue + set +x + + { + annna-join-channels "${server}" "${channels}" + } & # Watch for ii to exit. Then remove the used directory to have all # services disappear.