You are viewing a plain text version of this content. The canonical link for it is here.
Posted to derby-dev@db.apache.org by "Dag H. Wanvik (JIRA)" <ji...@apache.org> on 2011/04/14 18:57:05 UTC

[jira] [Commented] (DERBY-5190) store/rollForwardRecovery.sql stuck in RAFContainer4.writePage() during shutdown

    [ https://issues.apache.org/jira/browse/DERBY-5190?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13019908#comment-13019908 ] 

Dag H. Wanvik commented on DERBY-5190:
--------------------------------------

The only way writePage can hang in a wait is in this piece of code:

// Gain entry
while (restoreChannelInProgress) {
  try {
      channelCleanupMonitor.wait();
  } catch (InterruptedException e) {
      InterruptStatus.setInterrupted();
  }
}

and since there is no other thread in the NIO code (verified with jstack), another thread must have returned without resetting restoreChannelInProgress and giving notification.

On line 836 in recoverContainerAfterInterrupt we see this code:

if (retries-- == 0) {
    throw StandardException.newException(
            SQLState.FILE_IO_INTERRUPTED);
}

which is not inside the try catch block which releases restoreChannelInProgress with notification to waiters. So, if for some reason, this loop maxes out, while this thread then gives an error (this is during shutdown so the error will be ignored), any other thread waiting for restoreChannelInProgress to become false will hang as seen. As far as I can see this construction on line 836 is the only way we can exit from recoverContainerAfterInterrupt without resetting restoreChannelInProgress.



> store/rollForwardRecovery.sql stuck in RAFContainer4.writePage() during shutdown
> --------------------------------------------------------------------------------
>
>                 Key: DERBY-5190
>                 URL: https://issues.apache.org/jira/browse/DERBY-5190
>             Project: Derby
>          Issue Type: Bug
>          Components: Store
>    Affects Versions: 10.9.0.0
>         Environment: Oracle Enterprise Linux 6.0
> Linux 2.6.32-100.28.9.el6.x86_64 #1 SMP Wed Mar 16 19:24:16 EDT 2011 x86_64 x86_64 x86_64 GNU/Linux
> java version "1.6.0_17"
> OpenJDK Runtime Environment (IcedTea6 1.7.10) (rhel-1.39.b17.el6_0-x86_64)
> OpenJDK 64-Bit Server VM (build 14.0-b16, mixed mode)
>            Reporter: Knut Anders Hatlen
>
> Saw store/rollForwardRecovery.sql hanging during shutdown with this trace:
> "main" prio=10 tid=0x00007f9f0c009000 nid=0x571 in Object.wait() [0x00007f9f123eb000]
>    java.lang.Thread.State: WAITING (on object monitor)
> 	at java.lang.Object.wait(Native Method)
> 	- waiting on <0x00007f9ee3eccf58> (a java.lang.Object)
> 	at java.lang.Object.wait(Object.java:502)
> 	at org.apache.derby.impl.store.raw.data.RAFContainer4.writePage(Unknown Source)
> 	- locked <0x00007f9ee3eccf58> (a java.lang.Object)
> 	at org.apache.derby.impl.store.raw.data.CachedPage.writePage(Unknown Source)
> 	at org.apache.derby.impl.store.raw.data.CachedPage.clean(Unknown Source)
> 	at org.apache.derby.impl.services.cache.ConcurrentCache.cleanAndUnkeepEntry(Unknown Source)
> 	at org.apache.derby.impl.services.cache.ConcurrentCache.cleanCache(Unknown Source)
> 	at org.apache.derby.impl.services.cache.ConcurrentCache.cleanAll(Unknown Source)
> 	at org.apache.derby.impl.store.raw.data.BaseDataFileFactory.checkpoint(Unknown Source)
> 	at org.apache.derby.impl.store.raw.log.LogToFile.checkpointWithTran(Unknown Source)
> 	at org.apache.derby.impl.store.raw.log.LogToFile.checkpoint(Unknown Source)
> 	at org.apache.derby.impl.store.raw.RawStore.stop(Unknown Source)
> 	at org.apache.derby.impl.services.monitor.TopService.stop(Unknown Source)
> 	at org.apache.derby.impl.services.monitor.TopService.shutdown(Unknown Source)
> 	at org.apache.derby.impl.services.monitor.BaseMonitor.shutdown(Unknown Source)
> 	at org.apache.derby.impl.services.monitor.BaseMonitor.shutdown(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:620)
> 	at java.sql.DriverManager.getConnection(DriverManager.java:222)
> 	at org.apache.derby.impl.tools.ij.utilMain.cleanupGo(Unknown Source)
> 	at org.apache.derby.impl.tools.ij.utilMain.go(Unknown Source)
> 	at org.apache.derby.impl.tools.ij.Main.go(Unknown Source)
> 	at org.apache.derby.impl.tools.ij.Main.mainCore(Unknown Source)
> 	at org.apache.derby.impl.tools.ij.Main.main(Unknown Source)
> 	at org.apache.derby.tools.ij.main(Unknown Source)

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