It's partly historical, partly useful and partly an optimization. Before lock files were added to Lucene, synchronization was done within the JVM, based on the directory. This still works, even with Directory implementations that do not provide file-based locking, which may be useful. Finally, it avoids checking lock files if another thread in the same JVM is already updating the index, which is more efficient.

Doug

Maxim Khesin wrote:
Hi all,
I have seen the following usage in IndexWriter:

synchronized (directory) { // in- & inter-process sync
new Lock.With(directory.makeLock(IndexWriter.COMMIT_LOCK_NAME), COMMIT_LOCK_TIMEOUT) {
public Object doBody() throws IOException {
segmentInfos.write(directory); // commit before deleting
deleteSegments(segmentsToDelete); // delete now-unused segments
return null;
}
}.run();
}


my question is:
It seems that the synchronized (directory) code is redundant, since there is already a file-based lock there. Is there a special case that synchronized(directory) handles?


thanks,
max.



---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]


--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]



Reply via email to