You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by yo...@apache.org on 2012/08/07 17:00:19 UTC

svn commit: r1370297 - in /lucene/dev/trunk/solr/core/src: java/org/apache/solr/search/ValueSourceParser.java java/org/apache/solr/update/UpdateLog.java test/org/apache/solr/search/QueryEqualityTest.java test/org/apache/solr/search/TestRecovery.java

Author: yonik
Date: Tue Aug  7 15:00:19 2012
New Revision: 1370297

URL: http://svn.apache.org/viewvc?rev=1370297&view=rev
Log:
SOLR-3685: cloud sometimes skipped peersync attempt due to flags not being cleared when no updates were buffered during replication

Modified:
    lucene/dev/trunk/solr/core/src/java/org/apache/solr/search/ValueSourceParser.java
    lucene/dev/trunk/solr/core/src/java/org/apache/solr/update/UpdateLog.java
    lucene/dev/trunk/solr/core/src/test/org/apache/solr/search/QueryEqualityTest.java
    lucene/dev/trunk/solr/core/src/test/org/apache/solr/search/TestRecovery.java

Modified: lucene/dev/trunk/solr/core/src/java/org/apache/solr/search/ValueSourceParser.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/core/src/java/org/apache/solr/search/ValueSourceParser.java?rev=1370297&r1=1370296&r2=1370297&view=diff
==============================================================================
--- lucene/dev/trunk/solr/core/src/java/org/apache/solr/search/ValueSourceParser.java (original)
+++ lucene/dev/trunk/solr/core/src/java/org/apache/solr/search/ValueSourceParser.java Tue Aug  7 15:00:19 2012
@@ -107,6 +107,25 @@ public abstract class ValueSourceParser 
         return new LiteralValueSource(fp.parseArg());
       }
     });
+    addParser("threadid", new ValueSourceParser() {
+      @Override
+      public ValueSource parse(FunctionQParser fp) throws ParseException {
+        return new LongConstValueSource(Thread.currentThread().getId());
+      }
+    });
+    addParser("sleep", new ValueSourceParser() {
+      @Override
+      public ValueSource parse(FunctionQParser fp) throws ParseException {
+        int ms = fp.parseInt();
+        ValueSource source = fp.parseValueSource();
+        try {
+          Thread.sleep(ms);
+        } catch (InterruptedException e) {
+          throw new RuntimeException(e);
+        }
+        return source;
+      }
+    });
     addParser("rord", new ValueSourceParser() {
       @Override
       public ValueSource parse(FunctionQParser fp) throws ParseException {

Modified: lucene/dev/trunk/solr/core/src/java/org/apache/solr/update/UpdateLog.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/core/src/java/org/apache/solr/update/UpdateLog.java?rev=1370297&r1=1370296&r2=1370297&view=diff
==============================================================================
--- lucene/dev/trunk/solr/core/src/java/org/apache/solr/update/UpdateLog.java (original)
+++ lucene/dev/trunk/solr/core/src/java/org/apache/solr/update/UpdateLog.java Tue Aug  7 15:00:19 2012
@@ -1048,6 +1048,7 @@ public class UpdateLog implements Plugin
     try {
       cancelApplyBufferUpdate = false;
       if (state != State.BUFFERING) return null;
+      operationFlags &= ~FLAG_GAP;
 
       // handle case when no log was even created because no updates
       // were received.
@@ -1057,7 +1058,6 @@ public class UpdateLog implements Plugin
       }
       tlog.incref();
       state = State.APPLYING_BUFFERED;
-      operationFlags &= ~FLAG_GAP;
     } finally {
       versionInfo.unblockUpdates();
     }

Modified: lucene/dev/trunk/solr/core/src/test/org/apache/solr/search/QueryEqualityTest.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/core/src/test/org/apache/solr/search/QueryEqualityTest.java?rev=1370297&r1=1370296&r2=1370297&view=diff
==============================================================================
--- lucene/dev/trunk/solr/core/src/test/org/apache/solr/search/QueryEqualityTest.java (original)
+++ lucene/dev/trunk/solr/core/src/test/org/apache/solr/search/QueryEqualityTest.java Tue Aug  7 15:00:19 2012
@@ -648,6 +648,11 @@ public class QueryEqualityTest extends S
                      "foo_i");
   }
 
+  public void testTestFuncs() throws Exception {
+    assertFuncEquals("sleep(1,5)", "sleep(1,5)");
+    assertFuncEquals("threadid()", "threadid()");
+  }
+
   /**
    * this test does not assert anything itself, it simply toggles a static 
    * boolean informing an @AfterClass method to assert that every default 

Modified: lucene/dev/trunk/solr/core/src/test/org/apache/solr/search/TestRecovery.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/core/src/test/org/apache/solr/search/TestRecovery.java?rev=1370297&r1=1370296&r2=1370297&view=diff
==============================================================================
--- lucene/dev/trunk/solr/core/src/test/org/apache/solr/search/TestRecovery.java (original)
+++ lucene/dev/trunk/solr/core/src/test/org/apache/solr/search/TestRecovery.java Tue Aug  7 15:00:19 2012
@@ -559,7 +559,22 @@ public class TestRecovery extends SolrTe
 
       assertTrue((ulog.getStartingOperation() & UpdateLog.FLAG_GAP) == 0);
 
+      ulog.bufferUpdates();
+      // simulate receiving no updates
+      ulog.applyBufferedUpdates();
+      updateJ(jsonAdd(sdoc("id","Q7", "_version_","117")), params(DISTRIB_UPDATE_PARAM,FROM_LEADER)); // do another add to make sure flags are back to normal
 
+      req.close();
+      h.close();
+      createCore();
+
+      req = req();
+      uhandler = req.getCore().getUpdateHandler();
+      ulog = uhandler.getUpdateLog();
+
+      assertTrue((ulog.getStartingOperation() & UpdateLog.FLAG_GAP) == 0); // check flags on Q7
+
+      logReplayFinish.acquire();
       assertEquals(UpdateLog.State.ACTIVE, ulog.getState()); // leave each test method in a good state
     } finally {
       DirectUpdateHandler2.commitOnClose = true;