OK, now the problem is gone.

Koji

Noble Paul നോബിള്‍ नोब्ळ् wrote:
I'm looking into it.

I guess I goofed up somewhere

2009/8/19 Rafał Kuć <ra...@alud.com.pl>:
Hello!

  Same here, assertion fails on our hudson.



On Wed, Aug 19, 2009 at 10:07 PM, Koji
Sekiguchi<k...@r.email.ne.jp> wrote:
Noble,

testExpungeDeletes fails:
oh . It passed twice in my box.is any one else noticing this failure?
<failure message="null" type="junit.framework.AssertionFailedError">
junit.framework.AssertionFailedError: null
      at
org.apache.solr.update.DirectUpdateHandlerTest.testExpungeDeletes(DirectUpdateHandlerTest.java:303)
</failure>

Koji

no...@apache.org wrote:
Author: noble
Date: Wed Aug 19 12:21:22 2009
New Revision: 805774

URL: http://svn.apache.org/viewvc?rev=805774&view=rev
Log:
SOLR-1275: Add expungeDeletes to DirectUpdateHandler2

Modified:
   lucene/solr/trunk/CHANGES.txt

 lucene/solr/trunk/src/common/org/apache/solr/common/params/UpdateParams.java

 lucene/solr/trunk/src/java/org/apache/solr/handler/RequestHandlerUtils.java
   lucene/solr/trunk/src/java/org/apache/solr/handler/XMLLoader.java

 lucene/solr/trunk/src/java/org/apache/solr/update/CommitUpdateCommand.java

 lucene/solr/trunk/src/java/org/apache/solr/update/DirectUpdateHandler.java

 lucene/solr/trunk/src/java/org/apache/solr/update/DirectUpdateHandler2.java

 
lucene/solr/trunk/src/solrj/org/apache/solr/client/solrj/request/UpdateRequest.java

 lucene/solr/trunk/src/test/org/apache/solr/update/DirectUpdateHandlerTest.java

Modified: lucene/solr/trunk/CHANGES.txt
URL:
http://svn.apache.org/viewvc/lucene/solr/trunk/CHANGES.txt?rev=805774&r1=805773&r2=805774&view=diff

==============================================================================
--- lucene/solr/trunk/CHANGES.txt (original)
+++ lucene/solr/trunk/CHANGES.txt Wed Aug 19 12:21:22 2009
@@ -267,7 +267,9 @@
    HTMLStripStandardTokenizerFactory deprecated. To strip HTML tags,
HTMLStripCharFilter can be used
    with an arbitrary Tokenizer. (koji)
 -68. SOLR-1367: Added callback mechanism for converting DocList to
SolrDocumentList in SolrPluginUtils (gsingers)  +68. SOLR-1367: Added
callback mechanism for converting DocList to SolrDocumentList in
SolrPluginUtils (gsingers)
+
+68. SOLR-1275: Add expungeDeletes to DirectUpdateHandler2 (noble)
   Optimizations

Modified:
lucene/solr/trunk/src/common/org/apache/solr/common/params/UpdateParams.java
URL:
http://svn.apache.org/viewvc/lucene/solr/trunk/src/common/org/apache/solr/common/params/UpdateParams.java?rev=805774&r1=805773&r2=805774&view=diff

==============================================================================
---
lucene/solr/trunk/src/common/org/apache/solr/common/params/UpdateParams.java
(original)
+++
lucene/solr/trunk/src/common/org/apache/solr/common/params/UpdateParams.java
Wed Aug 19 12:21:22 2009
@@ -49,4 +49,6 @@
   * If optimizing, set the maximum number of segments left in the index
after optimization.  1 is the default (and is equivalent to calling
IndexWriter.optimize() in Lucene).
   */
  public static final String MAX_OPTIMIZE_SEGMENTS = "maxSegments";
+
+  public static final String EXPUNGE_DELETES = "expungeDeletes";
 }

Modified:
lucene/solr/trunk/src/java/org/apache/solr/handler/RequestHandlerUtils.java
URL:
http://svn.apache.org/viewvc/lucene/solr/trunk/src/java/org/apache/solr/handler/RequestHandlerUtils.java?rev=805774&r1=805773&r2=805774&view=diff

==============================================================================
---
lucene/solr/trunk/src/java/org/apache/solr/handler/RequestHandlerUtils.java
(original)
+++
lucene/solr/trunk/src/java/org/apache/solr/handler/RequestHandlerUtils.java
Wed Aug 19 12:21:22 2009
@@ -68,6 +68,7 @@
      CommitUpdateCommand cmd = new CommitUpdateCommand( optimize );
      cmd.waitFlush    = params.getBool( UpdateParams.WAIT_FLUSH,
 cmd.waitFlush    );
      cmd.waitSearcher = params.getBool( UpdateParams.WAIT_SEARCHER,
cmd.waitSearcher );
+      cmd.expungeDeletes = params.getBool( UpdateParams.EXPUNGE_DELETES,
cmd.expungeDeletes);
      cmd.maxOptimizeSegments =
params.getInt(UpdateParams.MAX_OPTIMIZE_SEGMENTS, cmd.maxOptimizeSegments);
      req.getCore().getUpdateHandler().commit( cmd );
      @@ -101,6 +102,7 @@
      CommitUpdateCommand cmd = new CommitUpdateCommand( optimize );
      cmd.waitFlush    = params.getBool( UpdateParams.WAIT_FLUSH,
 cmd.waitFlush    );
      cmd.waitSearcher = params.getBool( UpdateParams.WAIT_SEARCHER,
cmd.waitSearcher );
+      cmd.expungeDeletes = params.getBool( UpdateParams.EXPUNGE_DELETES,
cmd.expungeDeletes);             cmd.maxOptimizeSegments =
params.getInt(UpdateParams.MAX_OPTIMIZE_SEGMENTS, cmd.maxOptimizeSegments);
      processor.processCommit( cmd );
      return true;

Modified:
lucene/solr/trunk/src/java/org/apache/solr/handler/XMLLoader.java
URL:
http://svn.apache.org/viewvc/lucene/solr/trunk/src/java/org/apache/solr/handler/XMLLoader.java?rev=805774&r1=805773&r2=805774&view=diff

==============================================================================
--- lucene/solr/trunk/src/java/org/apache/solr/handler/XMLLoader.java
(original)
+++ lucene/solr/trunk/src/java/org/apache/solr/handler/XMLLoader.java Wed
Aug 19 12:21:22 2009
@@ -155,6 +155,8 @@
                sawWaitSearcher = true;
              } else if
(UpdateParams.MAX_OPTIMIZE_SEGMENTS.equals(attrName)) {
                cmd.maxOptimizeSegments = Integer.parseInt(attrVal);
+              } else if (UpdateParams.EXPUNGE_DELETES.equals(attrName)) {
+                cmd.expungeDeletes = StrUtils.parseBoolean(attrVal);
              } else {
                XmlUpdateRequestHandler.log.warn("unexpected attribute
commit/@" + attrName);
              }

Modified:
lucene/solr/trunk/src/java/org/apache/solr/update/CommitUpdateCommand.java
URL:
http://svn.apache.org/viewvc/lucene/solr/trunk/src/java/org/apache/solr/update/CommitUpdateCommand.java?rev=805774&r1=805773&r2=805774&view=diff

==============================================================================
---
lucene/solr/trunk/src/java/org/apache/solr/update/CommitUpdateCommand.java
(original)
+++
lucene/solr/trunk/src/java/org/apache/solr/update/CommitUpdateCommand.java
Wed Aug 19 12:21:22 2009
@@ -23,6 +23,7 @@
  public boolean optimize;
  public boolean waitFlush;
  public boolean waitSearcher=true;
+  public boolean expungeDeletes = false;
    /**
   * During optimize, optimize down to <= this many segments.  Must be >=
1
@@ -39,6 +40,7 @@
    return "commit(optimize="+optimize
            +",waitFlush="+waitFlush
            +",waitSearcher="+waitSearcher
+            +",expungeDeletes="+expungeDeletes
            +')';
  }
 }

Modified:
lucene/solr/trunk/src/java/org/apache/solr/update/DirectUpdateHandler.java
URL:
http://svn.apache.org/viewvc/lucene/solr/trunk/src/java/org/apache/solr/update/DirectUpdateHandler.java?rev=805774&r1=805773&r2=805774&view=diff

==============================================================================
---
lucene/solr/trunk/src/java/org/apache/solr/update/DirectUpdateHandler.java
(original)
+++
lucene/solr/trunk/src/java/org/apache/solr/update/DirectUpdateHandler.java
Wed Aug 19 12:21:22 2009
@@ -241,9 +241,10 @@
    synchronized (this) {
      pset.clear();
      closeSearcher();  // flush any deletes
-      if (cmd.optimize) {
+      if (cmd.optimize || cmd.expungeDeletes) {
        openWriter();  // writer needs to be open to optimize
-        writer.optimize(cmd.maxOptimizeSegments);
+        if(cmd.optimize) writer.optimize(cmd.maxOptimizeSegments);
+        if(cmd.expungeDeletes) writer.expungeDeletes(cmd.expungeDeletes);
      }
      closeWriter();

Modified:
lucene/solr/trunk/src/java/org/apache/solr/update/DirectUpdateHandler2.java
URL:
http://svn.apache.org/viewvc/lucene/solr/trunk/src/java/org/apache/solr/update/DirectUpdateHandler2.java?rev=805774&r1=805773&r2=805774&view=diff

==============================================================================
---
lucene/solr/trunk/src/java/org/apache/solr/update/DirectUpdateHandler2.java
(original)
+++
lucene/solr/trunk/src/java/org/apache/solr/update/DirectUpdateHandler2.java
Wed Aug 19 12:21:22 2009
@@ -130,6 +130,7 @@
  AtomicLong deleteByIdCommandsCumulative= new AtomicLong();
  AtomicLong deleteByQueryCommands= new AtomicLong();
  AtomicLong deleteByQueryCommandsCumulative= new AtomicLong();
+  AtomicLong expungeDeleteCommands = new AtomicLong();
  AtomicLong mergeIndexesCommands = new AtomicLong();
  AtomicLong commitCommands= new AtomicLong();
  AtomicLong optimizeCommands= new AtomicLong();
@@ -382,6 +383,8 @@
      if (cmd.optimize) {
      optimizeCommands.incrementAndGet();
+    } else if (cmd.expungeDeletes) {
+      expungeDeleteCommands.incrementAndGet();
    } else {
      commitCommands.incrementAndGet();
    }
@@ -402,6 +405,10 @@
      }
        closeWriter();
+      if (!cmd.optimize && cmd.expungeDeletes) {
+        openWriter();
+        writer.expungeDeletes();
+      }
        callPostCommitCallbacks();
      if (cmd.optimize) {

Modified:
lucene/solr/trunk/src/solrj/org/apache/solr/client/solrj/request/UpdateRequest.java
URL:
http://svn.apache.org/viewvc/lucene/solr/trunk/src/solrj/org/apache/solr/client/solrj/request/UpdateRequest.java?rev=805774&r1=805773&r2=805774&view=diff

==============================================================================
---
lucene/solr/trunk/src/solrj/org/apache/solr/client/solrj/request/UpdateRequest.java
(original)
+++
lucene/solr/trunk/src/solrj/org/apache/solr/client/solrj/request/UpdateRequest.java
Wed Aug 19 12:21:22 2009
@@ -153,6 +153,12 @@
    return this;
  }
 +  public UpdateRequest setAction(ACTION action, boolean waitFlush,
boolean waitSearcher, int maxSegments , boolean expungeDeletes) {
+    setAction(action, waitFlush, waitSearcher,maxSegments) ;
+    params.set(UpdateParams.EXPUNGE_DELETES,""+expungeDeletes);
+    return this;
+  }
+
  /**
   * @since Solr 1.4
   */

Modified:
lucene/solr/trunk/src/test/org/apache/solr/update/DirectUpdateHandlerTest.java
URL:
http://svn.apache.org/viewvc/lucene/solr/trunk/src/test/org/apache/solr/update/DirectUpdateHandlerTest.java?rev=805774&r1=805773&r2=805774&view=diff

==============================================================================
---
lucene/solr/trunk/src/test/org/apache/solr/update/DirectUpdateHandlerTest.java
(original)
+++
lucene/solr/trunk/src/test/org/apache/solr/update/DirectUpdateHandlerTest.java
Wed Aug 19 12:21:22 2009
@@ -17,20 +17,32 @@
  package org.apache.solr.update;
 +import java.io.IOException;
+import java.util.ArrayList;
 import java.util.HashMap;
+import java.util.HashSet;
+import java.util.List;
 import java.util.Map;
+import java.util.Set;
  import org.apache.lucene.document.Document;
 import org.apache.lucene.document.Field;
 import org.apache.lucene.document.Field.Index;
 import org.apache.lucene.document.Field.Store;
+import org.apache.lucene.index.IndexReader;
+import org.apache.lucene.index.SegmentReader;
+import org.apache.lucene.index.Term;
+import org.apache.lucene.index.TermEnum;
 import org.apache.solr.common.SolrException;
 import org.apache.solr.common.params.CommonParams;
 import org.apache.solr.common.params.MapSolrParams;
 import org.apache.solr.core.SolrCore;
 import org.apache.solr.request.LocalSolrQueryRequest;
 import org.apache.solr.request.SolrQueryRequest;
+import org.apache.solr.search.SolrIndexReader;
+import org.apache.solr.search.SolrIndexSearcher;
 import org.apache.solr.util.AbstractSolrTestCase;
+import org.apache.solr.util.RefCounted;
  /**
 * @@ -247,6 +259,90 @@
            );
  }
  +  public void testExpungeDeletes() throws Exception {
+    for (int x = 0; x < 3000; x++) {
+      addSimpleDoc(x + "");
+    }
+    SolrCore core = h.getCore();
+    UpdateHandler updater = core.getUpdateHandler();
+    CommitUpdateCommand cmtCmd = new CommitUpdateCommand(false);
+    cmtCmd.waitSearcher = true;
+    updater.commit(cmtCmd);
+
+    List<String> todelete = new ArrayList<String>();
+
+    Set<String> segsdel = new HashSet<String>();
+
+    SegmentReader[] sirs = getSegmentReaders(core);
+    assertTrue(sirs.length > 6);
+    todelete.add(getNthIDTerm(2, sirs[0]));
+    segsdel.add(sirs[0].getSegmentName());
+    +    todelete.add(getNthIDTerm(7, sirs[2]));
+    segsdel.add(sirs[2].getSegmentName());
+    +    todelete.add(getNthIDTerm(4, sirs[5]));
+    segsdel.add(sirs[5].getSegmentName());
+    +    for (String id : todelete) {
+      deleteSimpleDoc(id);
+    }
+    // commit the deletes
+    cmtCmd = new CommitUpdateCommand(false);
+    cmtCmd.waitSearcher = true;
+    updater.commit(cmtCmd);
+    +    // expunge deletes
+    cmtCmd = new CommitUpdateCommand(false);
+    cmtCmd.waitSearcher = true;
+    cmtCmd.expungeDeletes = true;
+    updater.commit(cmtCmd);
+    +    // we'll have fewer segments
+    SegmentReader[] sirs2 = getSegmentReaders(core);
+    assertTrue(sirs.length > sirs2.length);
+    // check the actual segment names
+    for (SegmentReader sr : sirs2) {
+      assertTrue(!segsdel.contains(sr.getSegmentName()));
+    }
+  }
+
+  SegmentReader[] getSegmentReaders(SolrCore core) throws IOException {
+    RefCounted<SolrIndexSearcher> ref = core.getSearcher(true, true,
null);
+    SolrIndexSearcher is = ref.get();
+    SegmentReader[] segmentReaders = null;
+    try {
+      SolrIndexReader reader = is.getReader();
+      IndexReader[] subreaders = reader.getSequentialSubReaders();
+      segmentReaders = new SegmentReader[subreaders.length];
+      for (int x = 0; x < subreaders.length; x++) {
+        assert subreaders[x] instanceof SolrIndexReader;
+        SolrIndexReader sir = (SolrIndexReader) subreaders[x];
+        SegmentReader sr = (SegmentReader) sir.getWrappedReader();
+        segmentReaders[x] = sr;
+      }
+    } finally {
+      ref.decref();
+    }
+    return segmentReaders;
+  }
+
+  private String getNthIDTerm(int n, IndexReader r) throws IOException {
+    TermEnum te = r.terms(new Term("id", ""));
+    try {
+      int x = 0;
+      do {
+        if (x >= n) {
+          return te.term().text();
+        }
+        x++;
+      } while (te.next());
+    } finally {
+      te.close();
+    }
+    return null;
+  }
+     private void addSimpleDoc(String id) throws Exception {
    SolrCore core = h.getCore();








--
Regards,
 Rafał Kuć






Reply via email to