@web.background gotcha

Bug #133079 reported by Anand Chitipothu
2
Affects Status Importance Assigned to Milestone
web.py
Fix Released
High
Anand Chitipothu

Bug Description

Here is the problem.

http://groups.google.com/group/webpy/browse_frm/thread/22281ada63875c53/26ef7dc70ae0540a

And here is the fix.

def background(func):
    """A function decorator to run a long-running function as a
background thread.
+ GOTCHA: Until the foreground task ends, any db access by
background task
+ will necessarily get old data from before the foreground task
started
+ because psycopg2 begins a transaction in the foreground task
until it quits """
    def internal(*a, **kw):
        web.data() # cache it

        tmpctx = web._context[threading.currentThread()]
        web._context[threading.currentThread()] =
utils.storage(web.ctx.copy())

        def newfunc():
            web._context[threading.currentThread()] = tmpctx
+ # Create new db cursor if there is one else background thread
+ # overwrites foreground cursor causing rubbish data into dbase
+ if web.config.get('db_parameters'):
+ webdb.connect(**web.config.db_parameters)
            func(*a, **kw)

Changed in webpy:
assignee: nobody → anandology
importance: Undecided → High
status: New → In Progress
Changed in webpy:
milestone: 0.22 → 0.23
Changed in webpy:
status: In Progress → Fix Committed
Changed in webpy:
status: Fix Committed → Fix Released
To post a comment you must log in.
This report contains Public information  
Everyone can see this information.

Other bug subscribers

Remote bug watches

Bug watches keep track of this bug in other bug trackers.