jackrabbit-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Stefan Guggisberg (JIRA)" <j...@apache.org>
Subject [jira] Created: (JCR-933) RepositoryImpl.acquireRepositoryLock() fails to detect that the file lock is already held by the current process
Date Fri, 18 May 2007 15:51:16 GMT
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
         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
            Priority: Critical
             Fix For: 1.4


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.


Mime
View raw message