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

Knut Anders Hatlen commented on DERBY-6398:
-------------------------------------------

Thanks for that extra information, Marty. I'm afraid I still haven't been able 
to reproduce it.

I'll summarize what I've figured out so far, in case that gives anyone ideas on 
how to trigger it:

The hang happens in a code path that is followed only if auto-commit is 
enabled. Furthermore, the call to FileLogger.flushAll() from 
Xact.prepareCommit() seems to happen only if the previous commit on the same 
transaction object was a non-synchronous commit. That is, a commit performed by 
calling Xact.commitNoSync().

Most of the commitNoSync() calls seem to come in nested transactions, or in 
transactions that happen in a background thread, so they would most likely not 
use the same transaction object as the one used when auto-committing the 
syscs_freeze_database() call. Exactly how this could happen, is still unclear 
to me.

If this actually is what's causing the problem, a fix might be to do a 
synchronous commit before freezing the database when in auto-commit mode. 
Marty's observation that the hang can be avoided by updating a small record 
before invoking the freeze command, is consistent with that theory.

> SYSCS_FREEZE_DATABASE locks-up if there are large records that haven't been 
> flushed to the disk
> -----------------------------------------------------------------------------------------------
>
>                 Key: DERBY-6398
>                 URL: https://issues.apache.org/jira/browse/DERBY-6398
>             Project: Derby
>          Issue Type: Bug
>          Components: Miscellaneous
>    Affects Versions: 10.10.1.1
>         Environment: Reliably demonstrated on Windows 7 with JDK 1.6.0_31
>            Reporter: Marty Backe
>             Fix For: 10.10.1.1
>
>         Attachments: report.txt
>
>
> If after writing a record that contains a large data column (>100KB), the 
> FREEZE command is issued, the command never returns (Derby appears to be 
> dead-locked).
> E.g. sqlStatement.executeUpdate("CALL SYSCS_UTIL.SYSCS_FREEZE_DATABASE()");
> If the CALL SYSCS_UTIL.SYSCS_CHECKPOINT_DATABASE() command is first used 
> before calling FREEZE, it does not lock-up.
> It's my opinion that calling FREEZE should never result in a dead-locked 
> Derby instance.



--
This message was sent by Atlassian JIRA
(v6.1#6144)

Reply via email to