From: Pierrick B. <pie...@cu...> - 2005-12-05 13:15:59
|
Hi again, Ron Van den Branden wrote: > Ok, here is the complete console window output I get (pardon my Java,=20 > or lack thereof): >=20 > cluster.journal.maxStore 65000 > cluster.journal.shift 100 > configuration error: null > java.nio.channels.NonWritableChannelException > at sun.nio.ch.FileChannelImpl.tryLock(FileChannelImpl.java:818) > at java.nio.channels.FileChannel.tryLock(FileChannel.java:967) > at org.exist.storage.btree.Paged.setFile(Paged.java:407) Well, I'm quite puzzled with this code=20 (http://cvs.sourceforge.net/viewcvs.py/exist/eXist-1.0/src/org/exist/stor= age/btree/Paged.java?annotate=3D1.12,=20 lines 395-415) : protected final void setFile(final File file) throws DBException { this.file =3D file; fileIsNew =3D !file.exists(); try { if ((!file.exists()) || file.canWrite()) { raf =3D new RandomAccessFile(file, "rw"); } else { readOnly =3D true; raf =3D new RandomAccessFile(file, "r"); } =09 FileChannel channel =3D raf.getChannel(); =09 if (channel.tryLock() =3D=3D null) readOnly =3D true; //throw new DBException("Failed to open database file: " +=20 file.getAbsolutePath() + //". It is locked by another process."); } catch (IOException e) { LOG.warn("An exception occured while opening database file " +=20 file.getAbsolutePath() + ": " + e.getMessage(), e); } } First, notice the commented exception ;-) Then, I find strange to try a lock on a file if it has a *known*=20 read-only access. I would move this try just after : raf =3D new RandomAccessFile(file, "rw"); ... possible in another try/catch block that would reopen the file in=20 "r" mode. Then, I find strange to test whether the file is read-only or not : the=20 Broker should already know it ! ... and eventually detect=20 inconsistencies between the configuration and the file system. Then, who is supposed to release the lock ? As a quick fix, I would move : FileChannel channel =3D raf.getChannel(); =09 if (channel.tryLock() =3D=3D null) readOnly =3D true; just after : raf =3D new RandomAccessFile(file, "rw"); Can anybody test ? >> I'm afraid that we also lack test cases in this area... >> > (I can attest that it used to work in earlier days...) A lot of features used to "work" before. Were they even reliable ? This=20 is the big point IMHO ;-) Cheers, --=20 Pierrick Brihaye, informaticien Service r=E9gional de l'Inventaire / DRAC Bretagne mailto:pie...@cu... / t=E9l : +33 (0)2 99 29 67 78 http://usenet-fr.news.eu.org/fr-chartes/rfc1855.html#31. L'avez-vous lu ? |