Derby
  1. Derby
  2. DERBY-4741

Make embedded Derby work reliably in the presence of thread interrupts

    Details

    • Type: Bug Bug
    • Status: Closed
    • Priority: Major Major
    • Resolution: Fixed
    • Affects Version/s: 10.2.1.6, 10.2.2.0, 10.3.1.4, 10.3.2.1, 10.3.3.0, 10.4.1.3, 10.4.2.0, 10.5.1.1, 10.5.2.0, 10.5.3.0, 10.6.1.0
    • Fix Version/s: 10.8.1.2
    • Component/s: Store
    • Urgency:
      Normal
    • Bug behavior facts:
      Regression

      Description

      When not executing on a small device VM, Derby has been using the Java NIO classes java.nio.clannel.* for file io for extra concurrency.
      If a thread is interrupted while executing blocking IO operations in NIO, the ClosedByInterruptException will get thrown. Unfortunately, Derby isn't current architected to retry and complete such operations (before passing on the interrupt), so the Derby database store can be left in an inconsistent state, although no data is corrupted, and we therefore have to return a database level error to perform shutdown and recovery. This means the applications can no longer access the database while a shutdown and reboot including a recovery is taking place.

      It would be nice if Derby could somehow detect and finish IO operations underway when thread interrupts happen before passing the exception on to the application. Derby embedded is sometimes embedded in applications that use Thread.interrupt to stop threads.

      1. derby-4741-fix-compilation.stat
        0.2 kB
        Dag H. Wanvik
      2. derby-4741-fix-compilation.diff
        2 kB
        Dag H. Wanvik
      3. interrupts-fs.html
        8 kB
        Dag H. Wanvik
      4. wait-0-usages.txt
        5 kB
        Dag H. Wanvik
      5. wait-1-usages.txt
        1 kB
        Dag H. Wanvik
      6. sleep-1-usages.txt
        2 kB
        Dag H. Wanvik
      7. derby-4741-sleeps-waits-more.stat
        0.5 kB
        Dag H. Wanvik
      8. derby-4741-sleeps-waits-more.diff
        8 kB
        Dag H. Wanvik
      9. interrupts-fs.html
        8 kB
        Dag H. Wanvik
      10. derby-4741-testBatchInterrupt-b.diff
        3 kB
        Dag H. Wanvik
      11. derby-4741-testBatchInterrupt.diff
        10 kB
        Dag H. Wanvik
      12. interrupts-fs.html
        7 kB
        Dag H. Wanvik
      13. derby-4741-testQueryInterrupt.stat
        0.2 kB
        Dag H. Wanvik
      14. derby-4741-testQueryInterrupt.diff
        8 kB
        Dag H. Wanvik
      15. interrupts-fs.html
        6 kB
        Dag H. Wanvik
      16. derby-4741-raf-stresstest-4.stat
        0.4 kB
        Dag H. Wanvik
      17. derby-4741-raf-stresstest-4.diff
        23 kB
        Dag H. Wanvik
      18. derby-4741-raf-stresstest-3.stat
        0.2 kB
        Dag H. Wanvik
      19. derby-4741-raf-stresstest-3.diff
        20 kB
        Dag H. Wanvik
      20. derby-4741-raf-stresstest-2.stat
        0.2 kB
        Dag H. Wanvik
      21. derby-4741-raf-stresstest-2.diff
        17 kB
        Dag H. Wanvik
      22. derby-4741-raf-stresstest-1.stat
        0.2 kB
        Dag H. Wanvik
      23. derby-4741-raf-stresstest-1.diff
        17 kB
        Dag H. Wanvik
      24. derby-4741-sleeps-waits-3.stat
        0.8 kB
        Dag H. Wanvik
      25. derby-4741-sleeps-waits-3.diff
        19 kB
        Dag H. Wanvik
      26. derby-4741-sleeps-waits-2.stat
        0.8 kB
        Dag H. Wanvik
      27. derby-4741-sleeps-waits-2.diff
        19 kB
        Dag H. Wanvik
      28. derby-4741-sleeps-waits-1.stat
        0.2 kB
        Dag H. Wanvik
      29. derby-4741-sleeps-waits-1.diff
        5 kB
        Dag H. Wanvik
      30. derby-4741-kristians-01.diff
        4 kB
        Dag H. Wanvik
      31. derby-4741-c-01-nio.stat
        0.1 kB
        Dag H. Wanvik
      32. derby-4741-c-01-nio.diff
        7 kB
        Dag H. Wanvik
      33. derby-4741-b-04-nio.stat
        0.6 kB
        Dag H. Wanvik
      34. derby-4741-b-04-nio.diff
        65 kB
        Dag H. Wanvik
      35. derby-4741-b-03-nio.stat
        0.6 kB
        Dag H. Wanvik
      36. derby-4741-b-03-nio.diff
        63 kB
        Dag H. Wanvik
      37. derby-4741-b-02-nio.stat
        0.6 kB
        Dag H. Wanvik
      38. derby-4741-b-02-nio.diff
        61 kB
        Dag H. Wanvik
      39. InterruptResilienceTest.java
        9 kB
        Lily Wei
      40. derby-4741-b-01-nio.stat
        0.7 kB
        Dag H. Wanvik
      41. derby-4741-b-01-nio.diff
        61 kB
        Dag H. Wanvik
      42. derby-4741-a-04-api-interruptstatus.stat
        1.0 kB
        Dag H. Wanvik
      43. derby-4741-a-04-api-interruptstatus.diff
        43 kB
        Dag H. Wanvik
      44. derby-4741-a-03-api-interruptstatus.stat
        1.0 kB
        Dag H. Wanvik
      45. derby-4741-a-03-api-interruptstatus.diff
        44 kB
        Dag H. Wanvik
      46. derby-4741-a-02-api-interruptstatus.stat
        1.0 kB
        Dag H. Wanvik
      47. derby-4741-a-02-api-interruptstatus.diff
        45 kB
        Dag H. Wanvik
      48. derby-4741-a-01-api-interruptstatus.stat
        0.7 kB
        Dag H. Wanvik
      49. derby-4741-a-01-api-interruptstatus.diff
        39 kB
        Dag H. Wanvik
      50. derby-4741-all+lenient+resurrect.stat
        2 kB
        Dag H. Wanvik
      51. derby-4741-all+lenient+resurrect.diff
        116 kB
        Dag H. Wanvik
      52. MicroAPITest.java
        2 kB
        Dag H. Wanvik
      53. derby.log
        4 kB
        Lily Wei
      54. derby-4741-nio-container+log+waits+locks+throws.diff
        100 kB
        Dag H. Wanvik
      55. derby-4741-nio-container+log+waits+locks+throws.stat
        2 kB
        Dag H. Wanvik
      56. derby-4741-nio-container+log+waits+locks-2.stat
        1 kB
        Dag H. Wanvik
      57. derby-4741-nio-container+log+waits+locks-2.diff
        80 kB
        Dag H. Wanvik
      58. derby.log
        27 kB
        Lily Wei
      59. derby-4741-nio-container+log+waits+locks.stat
        1 kB
        Dag H. Wanvik
      60. derby-4741-nio-container+log+waits+locks.diff
        73 kB
        Dag H. Wanvik
      61. derby-4741-nio-container+log+waits.stat
        0.8 kB
        Dag H. Wanvik
      62. derby-4741-nio-container+log+waits.diff
        63 kB
        Dag H. Wanvik
      63. xsbt0.log.gz
        23 kB
        Dag H. Wanvik
      64. derby-4741-nio-container+log.stat
        0.8 kB
        Dag H. Wanvik
      65. derby-4741-nio-container+log.diff
        59 kB
        Dag H. Wanvik
      66. derby-4741-nio-container-2b.stat
        0.4 kB
        Dag H. Wanvik
      67. derby-4741-nio-container-2b.diff
        39 kB
        Dag H. Wanvik
      68. derby-4741-nio-container-2.log
        55 kB
        Dag H. Wanvik
      69. derby-4741-nio-container-2.stat
        0.4 kB
        Dag H. Wanvik
      70. derby-4741-nio-container-2.diff
        25 kB
        Dag H. Wanvik

        Issue Links

          Activity

            People

            • Assignee:
              Dag H. Wanvik
              Reporter:
              Dag H. Wanvik
            • Votes:
              1 Vote for this issue
              Watchers:
              2 Start watching this issue

              Dates

              • Created:
                Updated:
                Resolved:

                Development