Modify

Opened 4 years ago

#8508 new defect

Installation fails with PostgreSQL database backend

Reported by: anonymous Owned by: coling
Priority: normal Component: WorkLogPlugin
Severity: normal Keywords:
Cc: Trac Release: 0.12

Description

I installed WorkLogPlugin using easy_install, edited my trac.ini to include:

worklog.* = enabled

[worklog]
timingandestimation = true

I then ran:

trac-admin /var/trac upgrade

And it failed with:

Worklog needs an upgrade
 * Upgrading Database
Creating work_log table
InternalError: current transaction is aborted, commands ignored until end of transaction block

I examined the code in api.py and traced the problem to the following section:

    def do_db_upgrade(self, db):
        # Legacy support hack (supports upgrades from revisions r2495 or before)
        if self.db_installed_version == 0:
            try:
                cursor = self.env.get_read_db().cursor()
                cursor.execute('SELECT * FROM work_log LIMIT 1')
                # We've succeeded so we actually have version 1
                self.db_installed_version = 1
            except:
                self.db_installed_version = 0

What I believe is happening is the SELECT command fails with an error. In PostgreSQL, this invalidates the transaction until a rollback is performed. There is no rollback in the code, so when the function later tries to create a table, the InternalError is generated.

I was able to work around the problem by commenting out the SELECT test and simply setting db_installed_version to zero (which works because this is a fresh install), but I don't know the whole installation workflow well enough to suggest a permanent fix. My guess is that rolling back the transaction is bad because it might undo changes done by other plugins installed at the same time. I think that you probably need to use an alternate method of determining if the table exists or not.

Attachments (0)

Change History (0)

Add Comment

Modify Ticket

Action
as new The owner will remain coling.
Author


E-mail address and user name can be saved in the Preferences.

 
Note: See TracTickets for help on using tickets.