Good, very encouraging, thanks! On Fri, May 14, 2010 at 10:26 AM, Mike Matrigali <[email protected]>wrote:
> The db should never be corrupted by this. It is sometimes confusing > as many scary errors come back, as often the error results in all > subsequent operations failing until the database is completely shutdown > and rebooted. > > It is hard to say exactly what happens, mostly because of the way > interupts work in java. Basically the interrupt is not noticed until > a java call is made that checks for interrupts. The usual case in derby > is that this is noticed when an I/O happens. Depending on what I/O > is interrupted different thing can happen. If it is a log I/O then > it is a server level error and the system disables all future I/O's, > causing those to return errors and the eventually system will come down. > A read error I think is just statement error and subsequent queries may > work. In all cases the system should recover fine after subsequent > reboot, causing any transaction to back out that was in middle when the > I/O failed. > > > David Van Couvering wrote: > >> Hi, all. I am using Derby embedded in a server process. The server >> process can receive a request to shut down, in which case it does an orderly >> shutdown of all its services. This uses ExecutorService.shutdownNow(), >> which sends an InterruptException to any task currently running. I am >> looking at changing this to using shutdown with a timeout before reverting >> to shutdownNow(), but I still want to discuss with you what happens. >> >> It *appears* that as a result of receiving this interrupt, Derby receives >> a java.nio.channels.ClosedByInterruptException, which it then rethrows as a >> SQLException. That's fine, I can dig through the layers of causes to find >> that it's a ClosedByInterruptException. But my question to you is, when >> Derby gets interrupted like this, what does it do? Does it correctly roll >> back the current transaction? Does it ignore the interrupt until it can >> finish processing the transaction? I am particularly concerned that this >> could cause some kind of inconsistency or corruption in the database. >> >> For your edification, here is the stack trace. I am not sure if it always >> happens when trying to open a connection, or if it also happens in the >> middle of an operation, I'm going to look for more examples of the stack >> trace, and will send it your way. >> >> Thanks! >> >> David >> >> com.vontu.itemcatalog.api.ItemCatalogException: java.sql.SQLException: >> Failed to start database >> 'C:\Vontu\Protect\scan\incremental_index/MONITOR_TARGET_4', see the next >> exception for details. >> >> >> at >> com.vontu.itemcatalog.derby.DBCPConnectionPool.getConnection(DBCPConnectionPool.java:71) >> at >> com.vontu.itemcatalog.derby.SQLCallable.call(SQLCallable.java:53) >> at >> com.vontu.itemcatalog.derby.SQLCallable.call(SQLCallable.java:44) >> >> >> at >> com.vontu.itemcatalog.derby.PendingDeliveriesPersister.createTablesAsNeeded(PendingDeliveriesPersister.java:47) >> at >> com.vontu.itemcatalog.derby.PendingDeliveriesPersister.<init>(PendingDeliveriesPersister.java:42) >> >> >> at >> com.vontu.itemcatalog.derby.PendingDeliveriesPersister.<init>(PendingDeliveriesPersister.java:29) >> at >> com.vontu.itemcatalog.derby.PendingDeliveriesPersisterProvider.getPersister(PendingDeliveriesPersisterProvider.java:25) >> >> >> at >> com.vontu.itemcatalog.marshall.BloomFilterBatchMarshallableProvider.getNextMarshallable(BloomFilterBatchMarshallableProvider.java:89) >> at >> com.vontu.itemcatalog.distribution.ItemSetSender.execute(ItemSetSender.java:121) >> >> >> at >> com.vontu.itemcatalog.distribution.ItemSetSender.run(ItemSetSender.java:104) >> at >> com.vontu.discover.incremental.ItemSetSenderDispatcher.run(ItemSetSenderDispatcher.java:83) >> at >> java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:441) >> >> >> at >> java.util.concurrent.FutureTask$Sync.innerRunAndReset(FutureTask.java:317) >> at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:150) >> at >> java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$101(ScheduledThreadPoolExecutor.java:98) >> >> >> at >> java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.runPeriodic(ScheduledThreadPoolExecutor.java:181) >> at >> java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:205) >> >> >> at >> java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886) >> at >> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908) >> at java.lang.Thread.run(Thread.java:619) >> >> >> Caused by: java.sql.SQLException: Failed to start database >> 'C:\Vontu\Protect\scan\incremental_index/MONITOR_TARGET_4', see the next >> exception for details. >> at >> org.apache.derby.impl.jdbc.SQLExceptionFactory40.getSQLException(Unknown >> Source) >> >> >> at org.apache.derby.impl.jdbc.Util.newEmbedSQLException(Unknown >> Source) >> at org.apache.derby.impl.jdbc.Util.seeNextException(Unknown Source) >> at org.apache.derby.impl.jdbc.EmbedConnection.bootDatabase(Unknown >> Source) >> >> >> at org.apache.derby.impl.jdbc.EmbedConnection.<init>(Unknown >> Source) >> at org.apache.derby.impl.jdbc.EmbedConnection30.<init>(Unknown >> Source) >> at org.apache.derby.impl.jdbc.EmbedConnection40.<init>(Unknown >> Source) >> >> >> at org.apache.derby.jdbc.Driver40.getNewEmbedConnection(Unknown >> Source) >> at org.apache.derby.jdbc.InternalDriver.connect(Unknown Source) >> at org.apache.derby.jdbc.AutoloadedDriver.connect(Unknown Source) >> at java.sql.DriverManager.getConnection(DriverManager.java:582) >> >> >> at java.sql.DriverManager.getConnection(DriverManager.java:185) >> at >> org.apache.commons.dbcp.DriverManagerConnectionFactory.createConnection(DriverManagerConnectionFactory.java:48) >> at >> org.apache.commons.dbcp.PoolableConnectionFactory.makeObject(PoolableConnectionFactory.java:290) >> >> >> at >> org.apache.commons.pool.impl.GenericObjectPool.borrowObject(GenericObjectPool.java:840) >> at >> org.apache.commons.dbcp.PoolingDataSource.getConnection(PoolingDataSource.java:95) >> at >> com.vontu.itemcatalog.derby.DBCPConnectionPool.getConnection(DBCPConnectionPool.java:66) >> >> >> ... 19 more >> Caused by: java.sql.SQLException: Failed to start database >> 'C:\Vontu\Protect\scan\incremental_index/MONITOR_TARGET_4', see the next >> exception for details. >> at >> org.apache.derby.impl.jdbc.SQLExceptionFactory.getSQLException(Unknown >> Source) >> >> >> at >> org.apache.derby.impl.jdbc.SQLExceptionFactory40.wrapArgsForTransportAcrossDRDA(Unknown >> Source) >> ... 36 more >> Caused by: java.sql.SQLException: Java exception: ': >> java.nio.channels.ClosedByInterruptException'. >> >> >> at >> org.apache.derby.impl.jdbc.SQLExceptionFactory.getSQLException(Unknown >> Source) >> at >> org.apache.derby.impl.jdbc.SQLExceptionFactory40.wrapArgsForTransportAcrossDRDA(Unknown >> Source) >> at >> org.apache.derby.impl.jdbc.SQLExceptionFactory40.getSQLException(Unknown >> Source) >> >> >> at org.apache.derby.impl.jdbc.Util.newEmbedSQLException(Unknown >> Source) >> at org.apache.derby.impl.jdbc.Util.javaException(Unknown Source) >> ... 33 more >> Caused by: java.nio.channels.ClosedByInterruptException >> >> at >> java.nio.channels.spi.AbstractInterruptibleChannel.end(AbstractInterruptibleChannel.java:184) >> >> at sun.nio.ch.FileChannelImpl.read(FileChannelImpl.java:627) >> at >> org.apache.derby.impl.store.raw.data.RAFContainer4.readFull(Unknown Source) >> at >> org.apache.derby.impl.store.raw.data.RAFContainer4.getEmbryonicPage(Unknown >> Source) >> >> >> at org.apache.derby.impl.store.raw.data.RAFContainer.run(Unknown >> Source) >> at java.security.AccessController.doPrivileged(Native Method) >> at >> org.apache.derby.impl.store.raw.data.RAFContainer.openContainer(Unknown >> Source) >> >> >> at >> org.apache.derby.impl.store.raw.data.RAFContainer4.openContainer(Unknown >> Source) >> at >> org.apache.derby.impl.store.raw.data.FileContainer.setIdent(Unknown Source) >> at >> org.apache.derby.impl.store.raw.data.RAFContainer.setIdentity(Unknown >> Source) >> >> >> at >> org.apache.derby.impl.services.cache.ConcurrentCache.find(Unknown Source) >> at >> org.apache.derby.impl.store.raw.data.BaseDataFileFactory.openContainer(Unknown >> Source) >> at >> org.apache.derby.impl.store.raw.data.BaseDataFileFactory.openContainer(Unknown >> Source) >> >> >> at org.apache.derby.impl.store.raw.xact.Xact.openContainer(Unknown >> Source) >> at >> org.apache.derby.impl.store.access.heap.HeapConglomerateFactory.readConglomerate(Unknown >> Source) >> at >> org.apache.derby.impl.store.access.RAMAccessManager.conglomCacheFind(Unknown >> Source) >> >> >> at >> org.apache.derby.impl.store.access.RAMTransaction.findExistingConglomerate(Unknown >> Source) >> at >> org.apache.derby.impl.store.access.RAMTransaction.openScan(Unknown Source) >> at >> org.apache.derby.impl.store.access.PropertyConglomerate.openScan(Unknown >> Source) >> >> >> at >> org.apache.derby.impl.store.access.PropertyConglomerate.readDbProperties(Unknown >> Source) >> at >> org.apache.derby.impl.store.access.PropertyConglomerate.getCachedDbProperties(Unknown >> Source) >> at >> org.apache.derby.impl.store.access.PropertyConglomerate.getCachedProperty(Unknown >> Source) >> >> >> at >> org.apache.derby.impl.store.access.PropertyConglomerate.getProperty(Unknown >> Source) >> at >> org.apache.derby.impl.store.access.PC_XenaVersion.upgradeIfNeeded(Unknown >> Source) >> at >> org.apache.derby.impl.store.access.PropertyConglomerate.<init>(Unknown >> Source) >> >> >> at org.apache.derby.impl.store.access.RAMAccessManager.boot(Unknown >> Source) >> at org.apache.derby.impl.services.monitor.BaseMonitor.boot(Unknown >> Source) >> at >> org.apache.derby.impl.services.monitor.TopService.bootModule(Unknown Source) >> >> >> at >> org.apache.derby.impl.services.monitor.BaseMonitor.startModule(Unknown >> Source) >> at >> org.apache.derby.iapi.services.monitor.Monitor.bootServiceModule(Unknown >> Source) >> at org.apache.derby.impl.db.BasicDatabase.bootStore(Unknown Source) >> >> >> at org.apache.derby.impl.db.BasicDatabase.boot(Unknown Source) >> at org.apache.derby.impl.services.monitor.BaseMonitor.boot(Unknown >> Source) >> at >> org.apache.derby.impl.services.monitor.TopService.bootModule(Unknown Source) >> >> >> at >> org.apache.derby.impl.services.monitor.BaseMonitor.bootService(Unknown >> Source) >> at >> org.apache.derby.impl.services.monitor.BaseMonitor.startProviderService(Unknown >> Source) >> at >> org.apache.derby.impl.services.monitor.BaseMonitor.findProviderAndStartService(Unknown >> Source) >> >> >> at >> org.apache.derby.impl.services.monitor.BaseMonitor.startPersistentService(Unknown >> Source) >> at >> org.apache.derby.iapi.services.monitor.Monitor.startPersistentService(Unknown >> Source) >> ... 33 more >> >> >> >> -- >> David W. Van Couvering >> >> http://www.linkedin.com/in/davidvc >> http://davidvancouvering.blogspot.com >> http://twitter.com/dcouvering >> > > -- David W. Van Couvering http://www.linkedin.com/in/davidvc http://davidvancouvering.blogspot.com http://twitter.com/dcouvering
