[
https://issues.apache.org/jira/browse/DERBY-4741?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12922370#action_12922370
]
Dag H. Wanvik commented on DERBY-4741:
--------------------------------------
And we are vulnerable during (re)boot:
java.sql.SQLException: Failed to start database 'interrupttest' with class
loader sun.misc.launcher$appclassloa...@2bbd86, see the next exception for
details.
:
Caused by: java.sql.SQLException: Failed to start database 'interrupttest' with
class loader sun.misc.launcher$appclassloa...@2bbd86, see the next exception
for details.
:
Caused by: java.sql.SQLException: Java exception: ':
java.io.InterruptedIOException'.
:
Caused by: java.io.InterruptedIOException
at java.io.RandomAccessFile.readBytes(Native Method)
at java.io.RandomAccessFile.read(RandomAccessFile.java:322)
at java.io.RandomAccessFile.readFully(RandomAccessFile.java:381)
at java.io.RandomAccessFile.readFully(RandomAccessFile.java:361)
at
org.apache.derby.impl.store.raw.log.LogToFile.readControlFile(LogToFile.java:2693)
at
org.apache.derby.impl.store.raw.log.LogToFile.boot(LogToFile.java:3398)
at
org.apache.derby.impl.services.monitor.BaseMonitor.boot(BaseMonitor.java:2020)
at
org.apache.derby.impl.services.monitor.TopService.bootModule(TopService.java:333)
at
org.apache.derby.impl.services.monitor.BaseMonitor.startModule(BaseMonitor.java:572)
at
org.apache.derby.iapi.services.monitor.Monitor.bootServiceModule(Monitor.java:427)
at
org.apache.derby.impl.store.raw.data.BaseDataFileFactory.bootLogFactory(BaseDataFileFactory.java:1747)
at
org.apache.derby.impl.store.raw.data.BaseDataFileFactory.setRawStoreFactory(BaseDataFileFactory.java:1235)
at org.apache.derby.impl.store.raw.RawStore.boot(RawStore.java:223)
at
org.apache.derby.impl.services.monitor.BaseMonitor.boot(BaseMonitor.java:2020)
at
org.apache.derby.impl.services.monitor.TopService.bootModule(TopService.java:333)
at
org.apache.derby.impl.services.monitor.BaseMonitor.startModule(BaseMonitor.java:572)
at
org.apache.derby.iapi.services.monitor.Monitor.bootServiceModule(Monitor.java:427)
at
org.apache.derby.impl.store.access.RAMAccessManager.boot(RAMAccessManager.java:1019)
at
org.apache.derby.impl.services.monitor.BaseMonitor.boot(BaseMonitor.java:2020)
at
org.apache.derby.impl.services.monitor.TopService.bootModule(TopService.java:333)
at
org.apache.derby.impl.services.monitor.BaseMonitor.startModule(BaseMonitor.java:572)
at
org.apache.derby.iapi.services.monitor.Monitor.bootServiceModule(Monitor.java:427)
at
org.apache.derby.impl.db.BasicDatabase.bootStore(BasicDatabase.java:760)
at org.apache.derby.impl.db.BasicDatabase.boot(BasicDatabase.java:193)
at
org.apache.derby.impl.services.monitor.BaseMonitor.boot(BaseMonitor.java:2020)
at
org.apache.derby.impl.services.monitor.TopService.bootModule(TopService.java:333)
at
org.apache.derby.impl.services.monitor.BaseMonitor.bootService(BaseMonitor.java:1857)
at
org.apache.derby.impl.services.monitor.BaseMonitor.startProviderService(BaseMonitor.java:1723)
at
org.apache.derby.impl.services.monitor.BaseMonitor.findProviderAndStartService(BaseMonitor.java:1601)
at
org.apache.derby.impl.services.monitor.BaseMonitor.startPersistentService(BaseMonitor.java:1020)
at
org.apache.derby.iapi.services.monitor.Monitor.startPersistentService(Monitor.java:550)
at
org.apache.derby.impl.jdbc.EmbedConnection.bootDatabase(EmbedConnection.java:2679)
> Make Derby work reliably in the presence of thread interrupts
> -------------------------------------------------------------
>
> Key: DERBY-4741
> URL: https://issues.apache.org/jira/browse/DERBY-4741
> Project: Derby
> Issue Type: Bug
> Components: Store
> Affects Versions: 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
> Reporter: Dag H. Wanvik
> Assignee: Dag H. Wanvik
> Attachments: derby-4741-nio-container+log+waits+locks+throws.diff,
> derby-4741-nio-container+log+waits+locks+throws.stat,
> derby-4741-nio-container+log+waits+locks-2.diff,
> derby-4741-nio-container+log+waits+locks-2.stat,
> derby-4741-nio-container+log+waits+locks.diff,
> derby-4741-nio-container+log+waits+locks.stat,
> derby-4741-nio-container+log+waits.diff,
> derby-4741-nio-container+log+waits.stat, derby-4741-nio-container+log.diff,
> derby-4741-nio-container+log.stat, derby-4741-nio-container-2.diff,
> derby-4741-nio-container-2.log, derby-4741-nio-container-2.stat,
> derby-4741-nio-container-2b.diff, derby-4741-nio-container-2b.stat,
> derby.log, derby.log, MicroAPITest.java, xsbt0.log.gz
>
>
> When not executing on a small device VM, Derby has been using the Java NIO
> classes java.nio.clannel.* for file io.
> If 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 can be left in an inconsistent state
> and we therefore have to return a database level error. This means the
> applications can no longer access the database without a shutdown and reboot
> including a recovery.
> 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.
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.