You are viewing a plain text version of this content. The canonical link for it is here.
Posted to solr-commits@lucene.apache.org by ho...@apache.org on 2007/02/26 20:42:22 UTC

svn commit: r511970 - in /lucene/solr/trunk: ./ example/exampledocs/ src/java/org/apache/solr/request/ src/webapp/src/org/apache/solr/servlet/

Author: hossman
Date: Mon Feb 26 11:42:21 2007
New Revision: 511970

URL: http://svn.apache.org/viewvc?view=rev&rev=511970
Log:
SOLR-173 - fix for 'too many open files' - close requests at end of SolrDispatchFilter, and only get Searcher in response writers if it's actually needed.

Modified:
    lucene/solr/trunk/CHANGES.txt
    lucene/solr/trunk/example/exampledocs/post.sh
    lucene/solr/trunk/src/java/org/apache/solr/request/JSONResponseWriter.java
    lucene/solr/trunk/src/java/org/apache/solr/request/TextResponseWriter.java
    lucene/solr/trunk/src/java/org/apache/solr/request/XMLWriter.java
    lucene/solr/trunk/src/webapp/src/org/apache/solr/servlet/SolrDispatchFilter.java

Modified: lucene/solr/trunk/CHANGES.txt
URL: http://svn.apache.org/viewvc/lucene/solr/trunk/CHANGES.txt?view=diff&rev=511970&r1=511969&r2=511970
==============================================================================
--- lucene/solr/trunk/CHANGES.txt (original)
+++ lucene/solr/trunk/CHANGES.txt Mon Feb 26 11:42:21 2007
@@ -167,6 +167,12 @@
     attempt is made to use the solr.home dir.
     (Ryan McKinley via hossman)
 
+ 6. SOLR-173: Bug fix to SolrDispatchFilter to reduce "too many open
+    files" problem was that SolrDispatchFilter was not closing requests
+    when finished.  Also modified ResponseWriters to only fetch a Searcher
+    reference if necessary for writing out DocLists.
+    (Ryan McKinley via hossman)
+ 
 Other Changes
  1. Updated to Lucene 2.1
 

Modified: lucene/solr/trunk/example/exampledocs/post.sh
URL: http://svn.apache.org/viewvc/lucene/solr/trunk/example/exampledocs/post.sh?view=diff&rev=511970&r1=511969&r2=511970
==============================================================================
--- lucene/solr/trunk/example/exampledocs/post.sh (original)
+++ lucene/solr/trunk/example/exampledocs/post.sh Mon Feb 26 11:42:21 2007
@@ -24,5 +24,5 @@
 done
 
 #send the commit command to make sure all the changes are flushed and visible
-curl $URL --data-binary '<commit/>'
+curl $URL --data-binary '<commit/>' -H 'Content-type:text/xml; charset=utf-8'
 echo

Modified: lucene/solr/trunk/src/java/org/apache/solr/request/JSONResponseWriter.java
URL: http://svn.apache.org/viewvc/lucene/solr/trunk/src/java/org/apache/solr/request/JSONResponseWriter.java?view=diff&rev=511970&r1=511969&r2=511970
==============================================================================
--- lucene/solr/trunk/src/java/org/apache/solr/request/JSONResponseWriter.java (original)
+++ lucene/solr/trunk/src/java/org/apache/solr/request/JSONResponseWriter.java Mon Feb 26 11:42:21 2007
@@ -23,6 +23,7 @@
 import org.apache.solr.schema.TextField;
 import org.apache.solr.search.DocIterator;
 import org.apache.solr.search.DocList;
+import org.apache.solr.search.SolrIndexSearcher;
 import org.apache.solr.util.NamedList;
 import org.apache.solr.util.SimpleOrderedMap;
 
@@ -427,6 +428,7 @@
     incLevel();
     boolean first=true;
 
+    SolrIndexSearcher searcher = req.getSearcher();
     DocIterator iterator = ids.iterator();
     for (int i=0; i<sz; i++) {
       int id = iterator.nextDoc();

Modified: lucene/solr/trunk/src/java/org/apache/solr/request/TextResponseWriter.java
URL: http://svn.apache.org/viewvc/lucene/solr/trunk/src/java/org/apache/solr/request/TextResponseWriter.java?view=diff&rev=511970&r1=511969&r2=511970
==============================================================================
--- lucene/solr/trunk/src/java/org/apache/solr/request/TextResponseWriter.java (original)
+++ lucene/solr/trunk/src/java/org/apache/solr/request/TextResponseWriter.java Mon Feb 26 11:42:21 2007
@@ -39,7 +39,6 @@
   
   protected final Writer writer;
   protected final IndexSchema schema;
-  protected final SolrIndexSearcher searcher;
   protected final SolrQueryRequest req;
   protected final SolrQueryResponse rsp;
 
@@ -53,7 +52,6 @@
   public TextResponseWriter(Writer writer, SolrQueryRequest req, SolrQueryResponse rsp) {
     this.writer = writer;
     this.schema = req.getSchema();
-    this.searcher = req.getSearcher();
     this.req = req;
     this.rsp = rsp;
     String indent = req.getParam("indent");

Modified: lucene/solr/trunk/src/java/org/apache/solr/request/XMLWriter.java
URL: http://svn.apache.org/viewvc/lucene/solr/trunk/src/java/org/apache/solr/request/XMLWriter.java?view=diff&rev=511970&r1=511969&r2=511970
==============================================================================
--- lucene/solr/trunk/src/java/org/apache/solr/request/XMLWriter.java (original)
+++ lucene/solr/trunk/src/java/org/apache/solr/request/XMLWriter.java Mon Feb 26 11:42:21 2007
@@ -82,7 +82,7 @@
     // and to encapsulate writer, schema, and searcher so
     // they don't have to be passed around in every function.
     //
-    XMLWriter xw = new XMLWriter(writer, req.getSchema(), req.getSearcher(), ver);
+    XMLWriter xw = new XMLWriter(writer, req.getSchema(), req, ver);
     xw.defaultFieldList = rsp.getReturnFields();
 
     String indent = req.getParam("indent");
@@ -135,7 +135,7 @@
 
   private final Writer writer;
   private final IndexSchema schema; // needed to write fields of docs
-  private final SolrIndexSearcher searcher;  // needed to retrieve docs
+  private final SolrQueryRequest request; // the request
 
   private int level;
   private boolean defaultIndent=false;
@@ -159,10 +159,11 @@
   private final Calendar cal = Calendar.getInstance(TimeZone.getTimeZone("GMT"));
   private final StringBuilder sb = new StringBuilder();
 
-  public XMLWriter(Writer writer, IndexSchema schema, SolrIndexSearcher searcher, String version) {
+  public XMLWriter(Writer writer, IndexSchema schema, SolrQueryRequest req, String version) {
     this.writer = writer;
     this.schema = schema;
-    this.searcher = searcher;
+    this.request = req;
+    
     float ver = version==null? CURRENT_VERSION : Float.parseFloat(version);
     this.version = (int)(ver*1000);
   }
@@ -357,6 +358,7 @@
     }
 
     incLevel();
+    SolrIndexSearcher searcher = request.getSearcher();
     DocIterator iterator = ids.iterator();
     for (int i=0; i<sz; i++) {
       int id = iterator.nextDoc();

Modified: lucene/solr/trunk/src/webapp/src/org/apache/solr/servlet/SolrDispatchFilter.java
URL: http://svn.apache.org/viewvc/lucene/solr/trunk/src/webapp/src/org/apache/solr/servlet/SolrDispatchFilter.java?view=diff&rev=511970&r1=511969&r2=511970
==============================================================================
--- lucene/solr/trunk/src/webapp/src/org/apache/solr/servlet/SolrDispatchFilter.java (original)
+++ lucene/solr/trunk/src/webapp/src/org/apache/solr/servlet/SolrDispatchFilter.java Mon Feb 26 11:42:21 2007
@@ -74,6 +74,7 @@
   public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException 
   {
     if( request instanceof HttpServletRequest) {
+      SolrQueryRequest solrReq = null;
       HttpServletRequest req = (HttpServletRequest)request;
       try {
         String path = req.getServletPath();    
@@ -91,7 +92,6 @@
           path = path.substring( 0, idx );
         }
         
-        SolrQueryRequest solrReq = null;
         SolrRequestHandler handler = core.getRequestHandler( path );
         if( handler == null && handleSelect ) {
           if( "/select".equals( path ) || "/select/".equals( path ) ) {
@@ -125,6 +125,11 @@
       catch( Throwable ex ) {
         sendError( (HttpServletResponse)response, ex );
         return;
+      }
+      finally {
+        if( solrReq != null ) {
+          solrReq.close();
+        }
       }
     }