Java Mailing List Archive

http://www.gg3721.com/

Home » Hibernate Commits List »

[hibernate-commits] Hibernate SVN: r14907 - in search/trunk/src:
 java/org/hibernate/search/filter and 3 other directories.

hibernate-commits

2008-07-09


Author LoginPost Reply
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)
@@(protected) @@
  * 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)
@@(protected) @@
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
@@(protected) @@
@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)
@@(protected) @@
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;
@@(protected) @@
/**
* @author Emmanuel Bernard
*/
+@(protected)")
public class SearchFactoryImpl implements SearchFactoryImplementor {
 private static final ThreadLocal<WeakHashMap<Configuration, SearchFactoryImpl>> contexts =
     new ThreadLocal<WeakHashMap<Configuration, SearchFactoryImpl>>();
@@(protected) @@
 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.
@@(protected) @@
   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) {
@@(protected) @@
 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)
@@(protected) @@
   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)
@@(protected) @@
-// $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
@@(protected) @@
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)
@@(protected) @@
-// $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;
@@(protected) @@
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;

/**
@@(protected) @@
   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 );
@@(protected) @@
       Soap.class
   };
 }
+  
+  protected void configure(org.hibernate.cfg.Configuration cfg) {
+    super.configure(cfg);
+    cfg.setProperty( "hibernate.search.filter.caching_wrapper.size", "10" );
+  }  
}

_______________________________________________
hibernate-commits mailing list
hibernate-commits@(protected)
https://lists.jboss.org/mailman/listinfo/hibernate-commits
©2008 gg3721.com - Jax Systems, LLC, U.S.A.