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.