From: Muhammad Rizki <[email protected]>
To: Ammar Faizi <[email protected]>,
GNU/Weeb Mailing List <[email protected]>
Cc: Alviro Iskandar Setiawan <[email protected]>
Subject: Re: [PATCH RESEND v3 2/2] daemon: telegram: Handle MySQL error
Date: Mon, 31 Oct 2022 23:34:15 +0700 [thread overview]
Message-ID: <[email protected]> (raw)
In-Reply-To: <[email protected]>
On 31/10/22 23.12, Ammar Faizi wrote:
> A previous patch creates a mechanism to allow the caller to reconnect
> to the database by calling db.connect(). Handle MySQL error in the
> main daemon loop path. Do reconnect to the database if such an error
> happens. This way, the daemon can automatically recover from the MySQL
> server restart without having the user restart the daemon.
>
> v3:
> - Simplify try and except statement (comment from Muhammad Rizki).
>
> v2:
> * no changes *
>
> Signed-off-by: Ammar Faizi <[email protected]>
> ---
> daemon/telegram/mailer/listener.py | 29 +++++++++++++++++++++++++----
> 1 file changed, 25 insertions(+), 4 deletions(-)
>
> diff --git a/daemon/telegram/mailer/listener.py b/daemon/telegram/mailer/listener.py
> index 1c92f23..46ccf93 100644
> --- a/daemon/telegram/mailer/listener.py
> +++ b/daemon/telegram/mailer/listener.py
> @@ -5,6 +5,7 @@
> #
>
> from pyrogram.types import Message
> +from mysql.connector.errors import OperationalError, DatabaseError
> from apscheduler.schedulers.asyncio import AsyncIOScheduler
> from telegram.packages import DaemonClient
> from atom import Scraper
> @@ -43,13 +44,33 @@ class Bot():
> )
>
>
> + async def handle_db_error(self, e):
> + #
> + # TODO(ammarfaizi2):
> + # Ideally, we also want to log and report this situation.
> + #
> + print(f"Database error: {str(e)}")
> + print("Reconnecting to the database...")
> +
> + #
> + # Don't do this too often to avoid reconnect burst.
> + #
> + delay_in_secs = 3
> + reconnect_attempts = 3
> +
> + self.db.ping(reconnect=True, attempts=reconnect_attempts,
> + delay=delay_in_secs)
> +
> +
> async def __run(self):
> print("[__run]: Running...")
> - for url in self.db.get_atom_urls():
> - try:
> + try:
> + for url in self.db.get_atom_urls():
> await self.__handle_atom_url(url)
> - except:
> - print(traceback.format_exc())
> + except (OperationalError, DatabaseError) as e:
> + await self.handle_db_error(e)
> + except:
> + print(traceback.format_exc())
>
> if not self.isRunnerFixed:
> self.isRunnerFixed = True
This fine too. Can't wait for you to apply. I will continue the logger
version until its applied, thanks.
next prev parent reply other threads:[~2022-10-31 16:34 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-10-31 16:12 [PATCH RESEND v3 0/2] Automatic recovery from a MySQL restart Ammar Faizi
2022-10-31 16:12 ` [PATCH RESEND v3 1/2] daemon: telegram: db: Allow the caller to reconnect Ammar Faizi
2022-10-31 16:25 ` Alviro Iskandar Setiawan
2022-10-31 16:29 ` Muhammad Rizki
2022-10-31 16:12 ` [PATCH RESEND v3 2/2] daemon: telegram: Handle MySQL error Ammar Faizi
2022-10-31 16:26 ` Alviro Iskandar Setiawan
2022-10-31 16:34 ` Muhammad Rizki [this message]
2022-10-31 16:38 ` [PATCH RESEND v3 0/2] Automatic recovery from a MySQL restart Ammar Faizi
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
[email protected] \
[email protected] \
[email protected] \
[email protected] \
[email protected] \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox