Karaf instance can wrongly obtain a lock when the locking table is empty on a 
Oracle DB
---------------------------------------------------------------------------------------

                 Key: KARAF-689
                 URL: https://issues.apache.org/jira/browse/KARAF-689
             Project: Karaf
          Issue Type: Bug
          Components: runtime
    Affects Versions: 2.1.3
         Environment: Oracle Database 11g Enterprise Edition Release 11.2.0.2.0 
- 64bit Production
            Reporter: Ton Swieb


When running Karaf in Master/Slave mode a Karaf instance can wrongly obtain a 
lock when the locking table is empty on a Oracle DB.
Karaf creates a lock table and a lock record in de OracleDB upon first usage. 
When the lock record is removed afterwards without dropping the table then the 
locking mechanisme does not work anymore and any instance can wrongly obtain a 
lock.

This is not an issue for other database systems, because the implementation for 
other DB systems periodically tries to update the lock record and verify how 
many records are updated. According to the documentation in the code the 
"update" functionality has been removed for Oracle because it can exhaust the 
Oracle UNDO log.

I created a patch which does not use the "update" functionality, but executes 
an extra check after we acquired the lock. It checks if the SELECT FOR UPDATE 
used for the lock has not been executed on an empty selection, because when the 
selection is empty then the locking functionality will not work as expected.

Can you apply this patch to the branches karaf-2.1.x and karaf-2.2.x and the 
trunk. I looked at the SVN history of the files I have modified and noticed 
that they are the same in both branches and the trunk.
The patch has been created against the karaf-2.1.x branch.

--
This message is automatically generated by JIRA.
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

Reply via email to