[
https://issues.apache.org/jira/browse/DERBY-6398?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13811362#comment-13811362
]
Knut Anders Hatlen commented on DERBY-6398:
-------------------------------------------
Thanks!
It looks like it's the auto-commit that is performed after the freeze operation
that's blocked when it attempts to flush the transaction log. (It could also be
the auto-commit that's performed right before the freeze operation. Cannot tell
from the stack trace since the Derby part of it doesn't have line numbers. But
I cannot see how that could happen unless syscs_freeze_database() is called on
an already frozen database, so I'll assume that it's the auto-commit after
freeze.)
I stepped through the freeze code in a debugger, and in my test cases the
auto-commit never got to the point where it found it necessary to flush the
log. I think the only transactional work that's done during a freeze operation
is checkpointing of the database right before the freeze. But that work is done
in a nested transaction that is committed separately before the database moves
to the frozen state, and shouldn't make it necessary for the main transaction
to write anything to the log after the database has been frozen. So I've not
jet figured out how to get the database into that state.
> 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)