Skip to content

Automatically re-establish Django's database connection when it fails due to DNS errors.

License

Notifications You must be signed in to change notification settings

SectorLabs/django-db-connection-retrier

Folders and files

NameName
Last commit message
Last commit date

Latest commit

741df9b · Nov 8, 2021

History

23 Commits
Feb 11, 2021
Nov 8, 2021
Sep 16, 2019
Sep 16, 2019
Sep 16, 2019
Sep 16, 2019
Sep 16, 2019
Sep 16, 2019
Sep 16, 2019
Sep 16, 2019
Nov 8, 2021
Sep 16, 2019

Repository files navigation

Django Database Connection Retrier

License PyPi CircleCI

Automatically try to re-establish Django database connections when they fail due to DNS errors.


When the Django app (dbconnectionretrier) loads, a hook is installed in Django's BaseDatabaseWrapper.ensure_connection that catches django.db.OperationalError. If the error raised is a DNS error, the connction attempt is retried synchronously three times.


Tested on Django 2.0-2.3 and Python 3.7 and 3.8. Might work with other versions of Django and Python.

Installation

  1. Install the package from PyPi:

     $ pip install django-db-connection-retrier
    
  2. Add dbconnectionretrier to your INSTALLED_APPS:

     INSTALLED_APPS = [
         'dbconnectionretrier',
         ...
     ]
    

Manual usage

Adding dbconnectionretrier to INSTALLED_APPS enables automatic connection retrying. Want more granular control over patching?

Globally

from dbconnectionretrier.patch import patch_ensure_connection

# after this line executes, connection retrying is enabled
patch = patch_ensure_connection()

# after this line, the connection retrying is disabled
patch.rollback()

Context manager

from dbconnectionretrier.patch import patch_ensure_connection_contextual

with patch_ensure_connection_contextual():
    # all code inside this block benefits from connection retrying

About

Automatically re-establish Django's database connection when it fails due to DNS errors.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages