Opened 18 years ago

Closed 18 years ago

Last modified 17 years ago

#1237 closed enhancement (duplicate)

[patch]thread safety connection pool for all backend

Reported by: junzhang.jn@… Owned by: Adrian Holovaty
Component: Database layer (models, ORM) Version:
Severity: normal Keywords: connection pool db
Cc: Triage Stage: Unreviewed
Has patch: yes Needs documentation: no
Needs tests: no Patch needs improvement: no
Easy pickings: no UI/UX: no

Description

Django uses the same connection for all threads. It breaks any database when using transaction or in multithread web server.
this patch is implemented to avoid it.

like ticket [463] but for all.

  • use AutoReleaseCursor return connection object to pool when cursor deleted.
  • use connections dict protect threaded active connection.
  • db backend must implement a get_check_sql function to provide a sql which can check a connection's health.

ado_mssql:

def get_check_sql():
    return "select top 1 1 from sysfiles"

oracle:

def get_check_sql():
    return "select 1 from dual";

other....

sorry for my very very poor english.

Attachments (7)

__init__.py.diff (3.4 KB ) - added by junzhang.jn@… 18 years ago.
pool.py (5.6 KB ) - added by junzhang.jn@… 18 years ago.
__init__.py.2.diff (2.7 KB ) - added by junzhang.jn@… 18 years ago.
delete AutoReleaseCursor , it breaks transaction in multithread when 'threadsafety > 1'.
modpython.py.diff (1.0 KB ) - added by junzhang.jn@… 18 years ago.
wsgi.py.diff (906 bytes ) - added by junzhang.jn@… 18 years ago.
django.db.__init__.py.diff (2.9 KB ) - added by junzhang.jn@… 18 years ago.
pool.py.2 (6.0 KB ) - added by junzhang.jn@… 18 years ago.

Download all attachments as: .zip

Change History (10)

by junzhang.jn@…, 18 years ago

Attachment: __init__.py.diff added

by junzhang.jn@…, 18 years ago

Attachment: pool.py added

by junzhang.jn@…, 18 years ago

Attachment: __init__.py.2.diff added

delete AutoReleaseCursor , it breaks transaction in multithread when 'threadsafety > 1'.

by junzhang.jn@…, 18 years ago

Attachment: modpython.py.diff added

by junzhang.jn@…, 18 years ago

Attachment: wsgi.py.diff added

comment:1 by junzhang.jn@…, 18 years ago

update the connection pool in magic-removal branch.
only the next two diffs needed.

pool.py.2:
    - fix check_thread close not **thread safety** connetion. now thread safety < 2 connection will not run check thread. so you must use zhe connection in the web server which has thread pool.
    
    - fix cannot stop the check_thread in **manage.py shell**. use atexit.register function for this problem.

django.db.__init__.py.diff:
    - add new setting **USE_DBPOOL**.
    
and now ,you must implement **get_check_sql** function in django.db.bachend.xxxx.base.
  
    sqlite3::
        
        def get_check_sql():
            return "SELECT name FROM sqlite_master WHERE type='table' limit 1"

    ado_mssql::

        def get_check_sql():
            return "select top 1 1 from sysfiles"
    
    postgresql::

        def get_check_sql():
            return "SELECT c.relname FROM pg_catalog.pg_class limit 1"

by junzhang.jn@…, 18 years ago

Attachment: django.db.__init__.py.diff added

by junzhang.jn@…, 18 years ago

Attachment: pool.py.2 added

comment:2 by eugene@…, 18 years ago

Resolution: duplicate
Status: newclosed

Superseded by #1442

comment:3 by (none), 17 years ago

milestone: Version 1.0

Milestone Version 1.0 deleted

Note: See TracTickets for help on using tickets.
Back to Top