Kathey Marsden (JIRA) wrote:
[
https://issues.apache.org/jira/browse/DERBY-700?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Kathey Marsden updated DERBY-700:
---------------------------------
Attachment: derby-700_with_NPE_fix_diff.txt
Attached is a patch that fixes the NPE, but there are still issues with the
multithreaded test. Sometimes with 9 or more threads in
startConcurrentDatabaseBoots we get dual boot without any message to the
derby.log. I think there is one of two issues here:
1) There is no synchronization across classloaders, so even though we
synchronize on the databaseName() it is not useful when two threads from
different ClassLoaders come into the synchronized code.
Not sure what you are saying here. Do you believe the technique of
synchronizing on the intern of a String does not work across
classloaders? If that does not work, I agree that the the change
is not going to work.
2) Since getting the exFileLock is not within the synchronized code. It is
possible that the state of the dbex.lck file on disk changes before the boot.
I am not sure how to resolve these issues, especially 1. I'd appreciate any
advice on the issue.
Thanks
Kathey
Derby does not prevent dual boot of database from different classloaders on
Linux
---------------------------------------------------------------------------------
Key: DERBY-700
URL: https://issues.apache.org/jira/browse/DERBY-700
Project: Derby
Issue Type: Bug
Components: Store
Affects Versions: 10.1.2.1
Environment: ava -version
java version "1.4.2_08"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.4.2_08-b03)
Java HotSpot(TM) Client VM (build 1.4.2_08-b03, mixed mode)
Reporter: Kathey Marsden
Assignee: Kathey Marsden
Priority: Critical
Attachments: DERBY-700.diff, DERBY-700.stat, derby-700_diff.txt,
derby-700_stat.txt, DERBY-700_v1_use_to_run_DualBootrepro_multithreaded.diff,
DERBY-700_v1_use_to_run_DualBootrepro_multithreaded.stat,
derby-700_with_NPE_fix_diff.txt, derby-700_with_NPE_fix_stat.txt, derby.log,
derby700_singleproperty_v1.diff, derby700_singleproperty_v1.stat,
DualBootRepro.java, DualBootRepro2.zip, DualBootRepro_mutltithreaded.tar.bz2
Derby does not prevent dual boot from two different classloaders on Linux.
To reproduce run the program DualBootRepro with no derby jars in your
classpath. The program assumes derby.jar is in 10.1.2.1/derby.jar, you can
change the location by changing the DERBY_LIB_DIR variable.
On Linux the output is:
$java -cp . DualBootRepro
Loading derby from file:10.1.2.1/derby.jar
10.1.2.1/derby.jar
Booted database in loader [EMAIL PROTECTED]
FAIL: Booted database in 2nd loader [EMAIL PROTECTED]
On Windows I get the expected output.
$ java -cp . DualBootRepro
Loading derby from file:10.1.2.1/derby.jar
10.1.2.1/derby.jar
Booted database in loader [EMAIL PROTECTED]
PASS: Expected exception for dualboot:Another instance of Derby may have
already booted the database D:\marsden\repro\dualboot\mydb.