Hi Sanne,
A) ... but all comunication beetween the client thread calling
"getDirectory()" and the CopyDirectory
which defines the current directory is unprotected; also volatile isn't
enough
to fix it, IMHO an AtomicReference would be more appropriate.
Is this really required? Is synchronisation not ensured via
SearchFactoryImplementor.getLockableDirectoryProviders()?
B) ... Also I would like to address the use of finalize() to stop the
Timer,
there is a TODO about it already;
Fair point. Initially a non daemon thread was used. Once we switched to a
deamon thread we
could probably have got rid of the call to timer.canel().
C) FileHelper not listening to Thread.interrupt() requests
As FileHelper.synchronize is used in the mentioned Timers to copy
potentially big files,
it would be nice to check for Thread.isInterrupted() and also catch
ClosedByInterruptException in file-copy operations so to abort all I/O
operations and
not just the current one to abort faster on JVM shutdown.
(It doesn't look like the copy safety was guaranteed anyway).
Sounds reasonable.
D) Master and Slave share configuration properties.
Wouldn't it be natural to have two different property keys to manage
the shared index path? I imagine the typical scenario would be to have
the two
configured on different servers and copy through some NFS, but it looks
like
we are forcing people to use exactly the same path on both machines as
the two
classes read the same props.
The properties are different. Yes, the master and the slave both define:
hibernate.search.default.sourceBase and
hibernate.search.default.indexBase, but remember
that these are in two different configuration files. Master and slave are
two seperate machines
or at the very least two different JVMs. Nothing stops you to have
different mount points. I guess the
docuemtnation might suggest this.
You can definitely create a Jira issue for B and D. Not sure about A
though.
Maybe someone else can have another look at the code.
--Hardy