[hibernate-commits] Hibernate SVN: r14907 - in search/trunk/src: java/org/hibernate/search/filter and 3 other directories.
hibernate-commits at lists.jboss.org
hibernate-commits at lists.jboss.org
Wed Jul 9 12:19:27 EDT 2008
Author: hardy.ferentschik
Date: 2008-07-09 12:19:27 -0400 (Wed, 09 Jul 2008)
New Revision: 14907
Modified:
search/trunk/src/java/org/hibernate/search/Environment.java
search/trunk/src/java/org/hibernate/search/filter/CachingWrapperFilter.java
search/trunk/src/java/org/hibernate/search/impl/SearchFactoryImpl.java
search/trunk/src/java/org/hibernate/search/query/FullTextQueryImpl.java
search/trunk/src/test/org/hibernate/search/test/filter/ExcludeAllFilterFactory.java
search/trunk/src/test/org/hibernate/search/test/filter/FilterTest.java
Log:
HSEARCH-174:
- Made the hard ref count configurable for CachingWrapperFilter. I don't like much that I had to add another getter to SEarchFactoryImplementor and SearchFactoryImpl.
Modified: search/trunk/src/java/org/hibernate/search/Environment.java
===================================================================
--- search/trunk/src/java/org/hibernate/search/Environment.java 2008-07-09 16:14:49 UTC (rev 14906)
+++ search/trunk/src/java/org/hibernate/search/Environment.java 2008-07-09 16:19:27 UTC (rev 14907)
@@ -62,9 +62,14 @@
* define the reader strategy used
*/
public static final String READER_STRATEGY = READER_PREFIX + "strategy";
+
/**
* filter caching strategy class (must have a no-arg constructor and implements FilterCachingStrategy)
*/
public static final String FILTER_CACHING_STRATEGY = "hibernate.search.filter.cache_strategy";
-
+
+ /**
+ * Property name for the hard ref count of our <code>CachingWrapperFilter</code>.
+ */
+ public static final String CACHING_WRAPPER_FILTER_SIZE = "hibernate.search.filter.caching_wrapper.size";
}
Modified: search/trunk/src/java/org/hibernate/search/filter/CachingWrapperFilter.java
===================================================================
--- search/trunk/src/java/org/hibernate/search/filter/CachingWrapperFilter.java 2008-07-09 16:14:49 UTC (rev 14906)
+++ search/trunk/src/java/org/hibernate/search/filter/CachingWrapperFilter.java 2008-07-09 16:19:27 UTC (rev 14907)
@@ -6,6 +6,8 @@
import org.apache.lucene.index.IndexReader;
import org.apache.lucene.search.Filter;
import org.hibernate.util.SoftLimitMRUCache;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
/**
* A slightly different version of Lucene's original <code>CachingWrapperFilter</code> which
@@ -19,26 +21,40 @@
@SuppressWarnings("serial")
public class CachingWrapperFilter extends Filter {
- private static final int DEFAULT_SIZE = 5;
+ private final Logger log = LoggerFactory.getLogger( CachingWrapperFilter.class );
+ public static final int DEFAULT_SIZE = 5;
+
+ private final int size;
+
/**
* The cache using soft references in order to store the filter bit sets.
*/
- protected transient SoftLimitMRUCache cache;
+ private transient SoftLimitMRUCache cache;
- protected Filter filter;
+ private Filter filter;
/**
* @param filter
* Filter to cache results of
*/
public CachingWrapperFilter(Filter filter) {
+ this(filter, DEFAULT_SIZE);
+ }
+
+ /**
+ * @param filter
+ * Filter to cache results of
+ */
+ public CachingWrapperFilter(Filter filter, int size) {
this.filter = filter;
- }
+ this.size = size;
+ }
public BitSet bits(IndexReader reader) throws IOException {
if (cache == null) {
- cache = new SoftLimitMRUCache(DEFAULT_SIZE);
+ log.debug("Initialising SoftLimitMRUCache with hard ref size of {}", size);
+ cache = new SoftLimitMRUCache(size);
}
synchronized (cache) { // check cache
Modified: search/trunk/src/java/org/hibernate/search/impl/SearchFactoryImpl.java
===================================================================
--- search/trunk/src/java/org/hibernate/search/impl/SearchFactoryImpl.java 2008-07-09 16:14:49 UTC (rev 14906)
+++ search/trunk/src/java/org/hibernate/search/impl/SearchFactoryImpl.java 2008-07-09 16:19:27 UTC (rev 14907)
@@ -38,9 +38,11 @@
import org.hibernate.search.backend.OptimizeLuceneWork;
import org.hibernate.search.backend.Worker;
import org.hibernate.search.backend.WorkerFactory;
+import org.hibernate.search.backend.configuration.ConfigurationParseHelper;
import org.hibernate.search.engine.DocumentBuilder;
import org.hibernate.search.engine.FilterDef;
import org.hibernate.search.engine.SearchFactoryImplementor;
+import org.hibernate.search.filter.CachingWrapperFilter;
import org.hibernate.search.filter.FilterCachingStrategy;
import org.hibernate.search.filter.MRUFilterCachingStrategy;
import org.hibernate.search.reader.ReaderProvider;
@@ -54,6 +56,7 @@
/**
* @author Emmanuel Bernard
*/
+ at SuppressWarnings("unchecked")
public class SearchFactoryImpl implements SearchFactoryImplementor {
private static final ThreadLocal<WeakHashMap<Configuration, SearchFactoryImpl>> contexts =
new ThreadLocal<WeakHashMap<Configuration, SearchFactoryImpl>>();
@@ -74,6 +77,7 @@
private final FilterCachingStrategy filterCachingStrategy;
private Map<String, Analyzer> analyzers;
private final AtomicBoolean stopped = new AtomicBoolean( false );
+ private final int cachingWrapperFilterSize;
/**
* Each directory provider (index) can have its own performance settings.
@@ -105,6 +109,8 @@
this.worker = WorkerFactory.createWorker( cfg, this );
this.readerProvider = ReaderProviderFactory.createReaderProvider( cfg, this );
this.filterCachingStrategy = buildFilterCachingStrategy( cfg.getProperties() );
+
+ this.cachingWrapperFilterSize = ConfigurationParseHelper.getIntValue( cfg.getProperties(), Environment.CACHING_WRAPPER_FILTER_SIZE, CachingWrapperFilter.DEFAULT_SIZE );
}
private static String defineIndexingStrategy(Configuration cfg) {
@@ -384,5 +390,9 @@
public void addDirectoryProvider(DirectoryProvider<?> provider) {
this.dirProviderData.put( provider, new DirectoryProviderData() );
}
+
+ public int getCachingWrapperFilterSize() {
+ return cachingWrapperFilterSize;
+ }
}
Modified: search/trunk/src/java/org/hibernate/search/query/FullTextQueryImpl.java
===================================================================
--- search/trunk/src/java/org/hibernate/search/query/FullTextQueryImpl.java 2008-07-09 16:14:49 UTC (rev 14906)
+++ search/trunk/src/java/org/hibernate/search/query/FullTextQueryImpl.java 2008-07-09 16:19:27 UTC (rev 14907)
@@ -385,7 +385,8 @@
if (def.getUseCachingWrapperFilter() == CachingWrapperFilter.YES
|| (def.getUseCachingWrapperFilter() == CachingWrapperFilter.AUTOMATIC && def
.isCache())) {
- filter = new org.hibernate.search.filter.CachingWrapperFilter(filter);
+ int cachingWrapperFilterSize = getSearchFactoryImplementor().getCachingWrapperFilterSize();
+ filter = new org.hibernate.search.filter.CachingWrapperFilter(filter, cachingWrapperFilterSize);
}
return filter;
Modified: search/trunk/src/test/org/hibernate/search/test/filter/ExcludeAllFilterFactory.java
===================================================================
--- search/trunk/src/test/org/hibernate/search/test/filter/ExcludeAllFilterFactory.java 2008-07-09 16:14:49 UTC (rev 14906)
+++ search/trunk/src/test/org/hibernate/search/test/filter/ExcludeAllFilterFactory.java 2008-07-09 16:19:27 UTC (rev 14907)
@@ -1,9 +1,8 @@
-// $Id:$
+// $Id$
package org.hibernate.search.test.filter;
import org.apache.lucene.search.Filter;
import org.hibernate.search.annotations.Factory;
-import org.hibernate.search.filter.CachingWrapperFilter;
/**
* @author Emmanuel Bernard
@@ -11,6 +10,6 @@
public class ExcludeAllFilterFactory {
@Factory
public Filter getFilter() {
- return new CachingWrapperFilter( new ExcludeAllFilter() );
+ return new ExcludeAllFilter();
}
}
Modified: search/trunk/src/test/org/hibernate/search/test/filter/FilterTest.java
===================================================================
--- search/trunk/src/test/org/hibernate/search/test/filter/FilterTest.java 2008-07-09 16:14:49 UTC (rev 14906)
+++ search/trunk/src/test/org/hibernate/search/test/filter/FilterTest.java 2008-07-09 16:19:27 UTC (rev 14907)
@@ -1,8 +1,9 @@
-// $Id:$
+// $Id$
package org.hibernate.search.test.filter;
import java.util.Calendar;
+import org.apache.lucene.analysis.StopAnalyzer;
import org.apache.lucene.index.Term;
import org.apache.lucene.search.BooleanClause;
import org.apache.lucene.search.BooleanQuery;
@@ -10,9 +11,11 @@
import org.apache.lucene.search.RangeFilter;
import org.apache.lucene.search.TermQuery;
import org.hibernate.Session;
+import org.hibernate.search.Environment;
import org.hibernate.search.FullTextQuery;
import org.hibernate.search.FullTextSession;
import org.hibernate.search.Search;
+import org.hibernate.search.store.RAMDirectoryProvider;
import org.hibernate.search.test.SearchTestCase;
/**
@@ -68,9 +71,9 @@
ftQuery.enableFullTextFilter( "cachetest");
assertEquals("Should filter out all", 0, ftQuery.getResultSize() );
- // HSEARCH-174 - we call System.gc() to force a garbage collection. Prior to the fix
- // to HSEARCH-174 this would cause the filter to be garbage collected since Lucene
- // used weak references in the cache.
+ // HSEARCH-174 - we call System.gc() to force a garbage collection.
+ // Prior to the fix for HSEARCH-174 this would cause the filter to be
+ // garbage collected since Lucene used weak references.
System.gc();
ftQuery = s.createFullTextQuery( query, Driver.class );
@@ -168,4 +171,9 @@
Soap.class
};
}
+
+ protected void configure(org.hibernate.cfg.Configuration cfg) {
+ super.configure(cfg);
+ cfg.setProperty( "hibernate.search.filter.caching_wrapper.size", "10" );
+ }
}
More information about the hibernate-commits
mailing list