You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@jackrabbit.apache.org by "Jukka Zitting (JIRA)" <ji...@apache.org> on 2007/06/04 23:51:26 UTC
[jira] Updated: (JCR-933) RepositoryImpl.acquireRepositoryLock()
fails to detect that the file lock is already held by the current process
[ https://issues.apache.org/jira/browse/JCR-933?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Jukka Zitting updated JCR-933:
------------------------------
Affects Version/s: 1.1
1.1.1
1.2.1
1.2.2
1.2.3
1.3
Merged to the 1.3 branch in revision 544288.
> RepositoryImpl.acquireRepositoryLock() fails to detect that the file lock is already held by the current process
> ----------------------------------------------------------------------------------------------------------------
>
> Key: JCR-933
> URL: https://issues.apache.org/jira/browse/JCR-933
> Project: Jackrabbit
> Issue Type: Bug
> Components: core
> Affects Versions: 1.1, 1.1.1, 1.2.1, 1.2.2, 1.2.3, 1.3
> Environment: java 1.4 & 1.5 on *nix-based platforms.
> (verfied with java 1.4 on mac os-x 10.4.9)
> Reporter: Stefan Guggisberg
> Assignee: Stefan Guggisberg
> Priority: Critical
> Fix For: 1.3.1
>
> Attachments: jcr-933.patch, RepositoryLock.patch
>
>
> with java 1.4 and 1.5 on a *nix-based platform it is possible to (concurrently) instantiate
> more than one repository instance in the same jvm based on same/identical configurations.
> this is a critical issue since it might lead to data corruption.
> the issue only exists with java versions prior to 1.6 and *nix-based platforms (only verified
> on mac os-x 10.4).
> note that the issue does not exist when the file lock is held by another jvm.
> code snippet to reproduce the issue:
> Repository rep1 = new TransientRepository();
> Session s1 = rep1.login(new SimpleCredentials("johndoe", "".toCharArray()));
> Repository rep2 = new TransientRepository();
> Session s2 = rep2.login(new SimpleCredentials("johndoe", "".toCharArray()));
> the root problem is the incorrect behavior of java.nio.channels.FileChannel#tryLock()
> which is demonstrated by the following code snippet:
> try {
> FileLock fl1 = new FileOutputStream("foo").getChannel().tryLock();
> System.out.println("1st lock: " + fl1);
> FileLock fl2 = new FileOutputStream("foo").getChannel().tryLock();
> System.out.println("2nd lock: " + fl2);
> } catch (Throwable t) {
> t.printStackTrace();
> }
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.