Karaf
  1. Karaf
  2. KARAF-689

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

    Details

    • Type: Bug Bug
    • Status: Closed
    • Priority: Major Major
    • Resolution: Fixed
    • Affects Version/s: 2.1.3
    • Fix Version/s: 2.1.6, 2.2.2, 3.0.0
    • Component/s: karaf-core
    • Labels:
      None
    • Environment:

      Oracle Database 11g Enterprise Edition Release 11.2.0.2.0 - 64bit Production

      Description

      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.

      1. patch.txt
        9 kB
        Ton Swieb
      2. patch.txt
        9 kB
        Ton Swieb

        Activity

        Hide
        Ton Swieb added a comment -

        Attached patch based on the branch karaf 2.1.x

        Show
        Ton Swieb added a comment - Attached patch based on the branch karaf 2.1.x
        Hide
        Jamie goodyear added a comment -

        Thanks for the patch Ton. I'll take a look at it.

        Show
        Jamie goodyear added a comment - Thanks for the patch Ton. I'll take a look at it.
        Hide
        Jamie goodyear added a comment -

        Hi Ton,

        In order to use your patch we're going to need an ASF grant on the file.

        Cheers,
        Jamie

        Show
        Jamie goodyear added a comment - Hi Ton, In order to use your patch we're going to need an ASF grant on the file. Cheers, Jamie
        Hide
        Ton Swieb added a comment -

        Attached the patch with the ASF grant.

        Show
        Ton Swieb added a comment - Attached the patch with the ASF grant.
        Hide
        Jamie goodyear added a comment -

        Awesome, thanks again Ton

        Show
        Jamie goodyear added a comment - Awesome, thanks again Ton
        Hide
        Jamie goodyear added a comment -

        Checked in to 2.1.x branch, with thanks to Ton Swieb for the patch.

        $ svn ci
        Sending main/src/main/java/org/apache/karaf/main/OracleJDBCLock.java
        Sending main/src/main/java/org/apache/karaf/main/Statements.java
        Sending main/src/test/java/org/apache/karaf/main/BaseJDBCLockIntegrationTest.java
        Sending main/src/test/java/org/apache/karaf/main/BaseJDBCLockTest.java
        Sending main/src/test/java/org/apache/karaf/main/OracleJDBCLockTest.java
        Transmitting file data .....
        Committed revision 1140285.

        Show
        Jamie goodyear added a comment - Checked in to 2.1.x branch, with thanks to Ton Swieb for the patch. $ svn ci Sending main/src/main/java/org/apache/karaf/main/OracleJDBCLock.java Sending main/src/main/java/org/apache/karaf/main/Statements.java Sending main/src/test/java/org/apache/karaf/main/BaseJDBCLockIntegrationTest.java Sending main/src/test/java/org/apache/karaf/main/BaseJDBCLockTest.java Sending main/src/test/java/org/apache/karaf/main/OracleJDBCLockTest.java Transmitting file data ..... Committed revision 1140285.
        Hide
        Jamie goodyear added a comment -

        Checked into 2.2.x branch with thanks to Ton Swieb for the patch.

        $ svn ci
        Sending main/src/main/java/org/apache/karaf/main/OracleJDBCLock.java
        Sending main/src/main/java/org/apache/karaf/main/Statements.java
        Sending main/src/test/java/org/apache/karaf/main/BaseJDBCLockIntegrationTest.java
        Sending main/src/test/java/org/apache/karaf/main/BaseJDBCLockTest.java
        Sending main/src/test/java/org/apache/karaf/main/OracleJDBCLockTest.java
        Transmitting file data .....
        Committed revision 1140291.

        Show
        Jamie goodyear added a comment - Checked into 2.2.x branch with thanks to Ton Swieb for the patch. $ svn ci Sending main/src/main/java/org/apache/karaf/main/OracleJDBCLock.java Sending main/src/main/java/org/apache/karaf/main/Statements.java Sending main/src/test/java/org/apache/karaf/main/BaseJDBCLockIntegrationTest.java Sending main/src/test/java/org/apache/karaf/main/BaseJDBCLockTest.java Sending main/src/test/java/org/apache/karaf/main/OracleJDBCLockTest.java Transmitting file data ..... Committed revision 1140291.
        Hide
        Jamie goodyear added a comment -

        Checked in to trunk with thanks to Ton Swieb for the patch.

        $ svn ci
        Sending main/src/main/java/org/apache/karaf/main/OracleJDBCLock.java
        Sending main/src/main/java/org/apache/karaf/main/Statements.java
        Sending main/src/test/java/org/apache/karaf/main/BaseJDBCLockIntegrationTest.java
        Sending main/src/test/java/org/apache/karaf/main/BaseJDBCLockTest.java
        Sending main/src/test/java/org/apache/karaf/main/OracleJDBCLockTest.java
        Transmitting file data .....
        Committed revision 1140306.

        Show
        Jamie goodyear added a comment - Checked in to trunk with thanks to Ton Swieb for the patch. $ svn ci Sending main/src/main/java/org/apache/karaf/main/OracleJDBCLock.java Sending main/src/main/java/org/apache/karaf/main/Statements.java Sending main/src/test/java/org/apache/karaf/main/BaseJDBCLockIntegrationTest.java Sending main/src/test/java/org/apache/karaf/main/BaseJDBCLockTest.java Sending main/src/test/java/org/apache/karaf/main/OracleJDBCLockTest.java Transmitting file data ..... Committed revision 1140306.
        Hide
        Jamie goodyear added a comment -

        Applied patch to 2.1.x, 2.2.x, and trunk, with thanks to Ton Swieb for the patch.

        Show
        Jamie goodyear added a comment - Applied patch to 2.1.x, 2.2.x, and trunk, with thanks to Ton Swieb for the patch.
        Hide
        Jamie goodyear added a comment -

        Fixed in Apache Karaf 2.2.2.

        Show
        Jamie goodyear added a comment - Fixed in Apache Karaf 2.2.2.

          People

          • Assignee:
            Jamie goodyear
            Reporter:
            Ton Swieb
          • Votes:
            0 Vote for this issue
            Watchers:
            0 Start watching this issue

            Dates

            • Created:
              Updated:
              Resolved:

              Development