Author: sannegrinovero
Date: 2008-11-06 10:09:00 -0500 (Thu, 06 Nov 2008)
New Revision: 15526
Modified:
search/trunk/src/java/org/hibernate/search/reader/SharingBufferReaderProvider.java
Log:
HSEARCH-250 avoid calling directoryProvider.getDirectory()
more than once in openReader as the result may change.
Modified:
search/trunk/src/java/org/hibernate/search/reader/SharingBufferReaderProvider.java
===================================================================
---
search/trunk/src/java/org/hibernate/search/reader/SharingBufferReaderProvider.java 2008-11-06
03:38:52 UTC (rev 15525)
+++
search/trunk/src/java/org/hibernate/search/reader/SharingBufferReaderProvider.java 2008-11-06
15:09:00 UTC (rev 15526)
@@ -34,7 +34,7 @@
private static final Logger log = LoggerFactory.make();
/**
- * contains all Readers (most current per DP and all unclosed old)
+ * contains all Readers (most current per Directory and all unclosed old readers)
*/
//TODO ConcurrentHashMap's constructor could benefit from some hints as arguments.
protected final Map<IndexReader, ReaderUsagePair> allReaders = new
ConcurrentHashMap<IndexReader, ReaderUsagePair>();
@@ -67,7 +67,7 @@
Set<DirectoryProvider<?>> providers =
searchFactoryImplementor.getDirectoryProviders();
// create the readers for the known providers. Unfortunately, it is not possible to
- // create all readers in initalize since some providers have more than one directory
(eg
+ // create all readers in initialize since some providers have more than one directory
(eg
// FSSlaveDirectoryProvider). See also HSEARCH-250.
for ( DirectoryProvider provider : providers ) {
createReader( provider.getDirectory() );
@@ -114,13 +114,11 @@
IndexReader[] readers = new IndexReader[length];
log.debug( "Opening IndexReader for directoryProviders: {}", length );
for ( int index = 0; index < length; index++ ) {
- DirectoryProvider directoryProvider = directoryProviders[index];
- if ( log.isTraceEnabled() ) {
- log.trace( "Opening IndexReader from {}", directoryProvider.getDirectory()
);
- }
- PerDirectoryLatestReader directoryLatestReader = currentReaders.get(
directoryProvider.getDirectory() );
+ Directory directory = directoryProviders[index].getDirectory();
+ log.trace( "Opening IndexReader from {}", directory );
+ PerDirectoryLatestReader directoryLatestReader = currentReaders.get( directory );
if ( directoryLatestReader == null ) { // might eg happen for
FSSlaveDirectoryProvider
- directoryLatestReader = createReader( directoryProvider.getDirectory() );
+ directoryLatestReader = createReader( directory );
}
readers[index] = directoryLatestReader.refreshAndGet();
}
@@ -144,7 +142,7 @@
}
//overridable method for testability:
- protected IndexReader readerFactory(Directory directory) throws IOException {
+ protected IndexReader readerFactory(final Directory directory) throws IOException {
return IndexReader.open( directory, true );
}
@@ -229,7 +227,7 @@
}
/**
- * Gets an updated IndexReader for the current DirectoryProvider;
+ * Gets an updated IndexReader for the current Directory;
* the index status will be checked.
*
* @return the current IndexReader if it's in sync with underlying index, a new one
otherwise.