[
https://issues.apache.org/jira/browse/DERBY-3875?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12637819#action_12637819
]
Kristian Waagan commented on DERBY-3875:
----------------------------------------
Thanks Myrna.
I confirmed this on my Windows machine. This is not my primary developer
platform, and for some reason Derby was built with insane, even though my ant
properties file said sane.
A quick investigation revealed the following assert as the cause -
AllocPage.ReadContainerInfo, line 597: (code reformatted for brevity)
public static void ReadContainerInfo(byte[] containerInfo, byte[]
epage) {
int N = (int)epage[BORROWED_SPACE_OFFSET];
if (SanityManager.DEBUG) {
if (N != containerInfo.length)
SanityManager.THROWASSERT("N not what is
expected : " + N); <---- THIS ONE IS TRIGGERED
if (BORROWED_SPACE_OFFSET + BORROWED_SPACE_LEN + N
>= MAX_BORROWED_SPACE) {
SanityManager.THROWASSERT("exceed max
borrowable space: " + N);
}
}
if (N != 0)
System.arraycopy(epage,
BORROWED_SPACE_OFFSET+BORROWED_SPACE_LEN, containerInfo, 0, N);
}
Disabling the triggered assert makes the repro pass.
I'm not sure how to handle this issue, but we do need the repro to pass for
sane builds. A few ideas:
- disable assert
- make the catch clause in RAFContainer.openContainer broader to close the
file handles on any error
Any other ideas?
> Derby cannot replace a database after encountering corruption
> -------------------------------------------------------------
>
> Key: DERBY-3875
> URL: https://issues.apache.org/jira/browse/DERBY-3875
> Project: Derby
> Issue Type: Bug
> Components: Store
> Affects Versions: 10.4.2.0
> Environment: ------------------ Java Information ------------------
> Java Version: 1.6.0_06
> Java Vendor: Sun Microsystems Inc.
> Java home: C:\Program Files\Java\jre1.6.0_06
> Java classpath:
> C:\Working\Derby-fileclose-fix\bin;C:\Working\Derby-fileclose-fix\lib\derby.jar
> OS name: Windows XP
> OS architecture: x86
> OS version: 5.1
> Java user name: Administrator
> Java user home: C:\Documents and Settings\Administrator
> Java user dir: C:\Working\Derby-fileclose-fix
> java.specification.name: Java Platform API Specification
> java.specification.version: 1.6
> --------- Derby Information --------
> JRE - JDBC: Java SE 6 - JDBC 4.0
> [C:\Working\Derby-fileclose-fix\lib\derby.jar] 10.4.2.0 - (689064)
> ------------------------------------------------------
> ----------------- Locale Information -----------------
> ------------------------------------------------------
> Reporter: Jason McLaurin
> Attachments: derby-3875-BackupRestoreTest.diff,
> derby-3875-BackupRestoreTest.stat, DERBY-3875_tst1.diff,
> FileCloseBugDemo.java, FileCloseBugDemo.java, RAFContainerPatch.txt
>
> Original Estimate: 2h
> Remaining Estimate: 2h
>
> When Derby encounters a corrupt data file, it does not close the data file
> before throwing an exception to the caller. If the user tries to replace the
> database with a backup in response to the corruption, Derby will first
> attempt to delete the contents of the corrupt database. But since the
> corrupt file was never closed, it cannot be deleted, and Derby fails to start.
> The attached java code should reproduce the problem, and the attached patch
> should fix it.
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.