[
https://issues.apache.org/jira/browse/DERBY-700?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#action_12504721
]
Daniel John Debrunner commented on DERBY-700:
---------------------------------------------
Note I'm reviewing the patch called; derby-700_06_07_07_diff.txt
Comments on 6/12 seem to indicate a new patch for review but nothing seems to
have been attached that day, I think those comments are about the previous
version.
Some comments on the patch:
- In getIntraJvmDbLock() there is this comment:
+ // synchronizing across the same database, by using interned
+ // version of the database name
but I can't see any synchronization. It seems the synchronization has moved
to wrap the entire call to privGetJBMSLockOnDB().
Since this synchronization is key it would be good to get the comments clear
so that future readers can understand how this works.
Also I think putting the synchronization in the privGetJBMSLockOnDB() method
would be much clearer than hiding it in the run() method.
I see the comment above indicating the synchronization was expanded to be the
full privGetJBMSLockOnDB() method, but there is
no reason given. Can you share your thoughts on why this is required?
- the synchronization for getting the intra jvm lock and releasing it are using
different objects. Don't they need to use the same object?
If not it should be clearly commented how the synchronization is working.
- In getIntraJvmDbLock() and releaseIntraJvmDbLock() the StorageAccessFile
lckFileRaf is never closed, I think it needs to be or have comments indicating
why it is not closed. Maybe it's related to the issue of the new method added
to StorageFile??
- In releaseIntraJvmDbLock() I was a little unclear by the invalid uuid
concept. Is it an invalid uuid such that recreateUUID will throw an exception
in getIntraJvmDbLock() or is it a valid representation of a uuid that can never
be created by Derby?
- Using dataDirectory.intern() to synchronize across class loaders in
releaseIntraJvmDbLock() could probably use more comments, basically describing
what guarantees that all derby systems have the same path for the data
directory for a given database?
Thanks for working on this, it will help stop users corrupting their own
databases.
> 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
> Fix For: 10.3.0.0
>
> Attachments: DERBY-700.diff, DERBY-700.stat,
> derby-700_06_07_07_diff.txt, derby-700_06_07_07_stat.txt, 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,
> releaseNote.html
>
>
> 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.
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.