You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by cp...@apache.org on 2021/10/28 14:17:32 UTC

[lucene-solr] branch branch_8x updated (699c031 -> 9673f66)

This is an automated email from the ASF dual-hosted git repository.

cpoerschke pushed a change to branch branch_8x
in repository https://gitbox.apache.org/repos/asf/lucene-solr.git.


    from 699c031  SOLR-15719: LongSet.add to return boolean; add LongSetTest; (#370)
     new 50d163c  SOLR-15676: UpdateLog.RecentUpdates.getDeleteByQuery to not return duplicate versions (#329)
     new 0c86be8  SOLR-15676: UpdateLog.RecentUpdates.getVersions to not return duplicate versions (#331)
     new 9673f66  SOLR-15676: add solr/CHANGES.txt entry

The 3 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 solr/CHANGES.txt                                   |  3 +++
 .../handler/component/RealTimeGetComponent.java    |  5 ++++-
 .../src/java/org/apache/solr/update/UpdateLog.java | 22 +++++++++++++++++++---
 .../solr/handler/component/UpdateLogCloudTest.java |  2 +-
 4 files changed, 27 insertions(+), 5 deletions(-)

[lucene-solr] 02/03: SOLR-15676: UpdateLog.RecentUpdates.getVersions to not return duplicate versions (#331)

Posted by cp...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

cpoerschke pushed a commit to branch branch_8x
in repository https://gitbox.apache.org/repos/asf/lucene-solr.git

commit 0c86be834e7beb3d5e54af7d808ca9c02fddb4ed
Author: Christine Poerschke <cp...@apache.org>
AuthorDate: Thu Oct 28 14:55:55 2021 +0100

    SOLR-15676: UpdateLog.RecentUpdates.getVersions to not return duplicate versions (#331)
    
    (cherry picked from commit be2db72164642c4f0b75f21168ba661c0651464a)
---
 solr/core/src/java/org/apache/solr/update/UpdateLog.java | 8 ++++++++
 1 file changed, 8 insertions(+)

diff --git a/solr/core/src/java/org/apache/solr/update/UpdateLog.java b/solr/core/src/java/org/apache/solr/update/UpdateLog.java
index e1a2a0b..789f145 100644
--- a/solr/core/src/java/org/apache/solr/update/UpdateLog.java
+++ b/solr/core/src/java/org/apache/solr/update/UpdateLog.java
@@ -1454,10 +1454,18 @@ public class UpdateLog implements PluginInfoInitialized, SolrMetricProducer {
 
     public List<Long> getVersions(int n, long maxVersion) {
       List<Long> ret = new ArrayList<>(n);
+      LongSet set = new LongSet(n);
+      final int nInput = n;
 
       for (List<Update> singleList : updateList) {
         for (Update ptr : singleList) {
           if(Math.abs(ptr.version) > Math.abs(maxVersion)) continue;
+          if (!set.add(ptr.version)) {
+            if (debug) {
+              log.debug("getVersions(n={}, maxVersion={}) not returning duplicate version = {}", nInput, maxVersion, ptr.version);
+            }
+            continue;
+          }
           ret.add(ptr.version);
           if (--n <= 0) return ret;
         }

[lucene-solr] 01/03: SOLR-15676: UpdateLog.RecentUpdates.getDeleteByQuery to not return duplicate versions (#329)

Posted by cp...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

cpoerschke pushed a commit to branch branch_8x
in repository https://gitbox.apache.org/repos/asf/lucene-solr.git

commit 50d163c2ae1b2135e45b461b4377d09915fbf6f3
Author: Christine Poerschke <cp...@apache.org>
AuthorDate: Thu Oct 28 14:55:25 2021 +0100

    SOLR-15676: UpdateLog.RecentUpdates.getDeleteByQuery to not return duplicate versions (#329)
    
    (cherry picked from commit 3d9adf6b5f523dabcb97b0078978e7be5d097f83)
---
 .../solr/handler/component/RealTimeGetComponent.java       |  5 ++++-
 solr/core/src/java/org/apache/solr/update/UpdateLog.java   | 14 +++++++++++---
 .../apache/solr/handler/component/UpdateLogCloudTest.java  |  2 +-
 3 files changed, 16 insertions(+), 5 deletions(-)

diff --git a/solr/core/src/java/org/apache/solr/handler/component/RealTimeGetComponent.java b/solr/core/src/java/org/apache/solr/handler/component/RealTimeGetComponent.java
index 8ae4dd3..eafc39c 100644
--- a/solr/core/src/java/org/apache/solr/handler/component/RealTimeGetComponent.java
+++ b/solr/core/src/java/org/apache/solr/handler/component/RealTimeGetComponent.java
@@ -91,6 +91,7 @@ import org.apache.solr.update.PeerSync;
 import org.apache.solr.update.PeerSyncWithLeader;
 import org.apache.solr.update.UpdateLog;
 import org.apache.solr.update.processor.AtomicUpdateDocumentMerger;
+import org.apache.solr.util.LongSet;
 import org.apache.solr.util.RefCounted;
 import org.apache.solr.util.TestInjection;
 import org.slf4j.Logger;
@@ -1277,10 +1278,12 @@ public class RealTimeGetComponent extends SearchComponent
 
     // TODO: get this from cache instead of rebuilding?
     try (UpdateLog.RecentUpdates recentUpdates = ulog.getRecentUpdates()) {
+      LongSet updateVersions = new LongSet(versions.size());
       for (Long version : versions) {
         try {
           Object o = recentUpdates.lookup(version);
           if (o == null) continue;
+          updateVersions.add(version);
 
           if (version > 0) {
             minVersion = Math.min(minVersion, version);
@@ -1297,7 +1300,7 @@ public class RealTimeGetComponent extends SearchComponent
       // Must return all delete-by-query commands that occur after the first add requested
       // since they may apply.
       if (params.getBool("skipDbq", false)) {
-        updates.addAll(recentUpdates.getDeleteByQuery(minVersion));
+        updates.addAll(recentUpdates.getDeleteByQuery(minVersion, updateVersions));
       }
 
       rb.rsp.add("updates", updates);
diff --git a/solr/core/src/java/org/apache/solr/update/UpdateLog.java b/solr/core/src/java/org/apache/solr/update/UpdateLog.java
index e7874f0..e1a2a0b 100644
--- a/solr/core/src/java/org/apache/solr/update/UpdateLog.java
+++ b/solr/core/src/java/org/apache/solr/update/UpdateLog.java
@@ -75,6 +75,7 @@ import org.apache.solr.update.processor.DistributedUpdateProcessor;
 import org.apache.solr.update.processor.UpdateRequestProcessor;
 import org.apache.solr.update.processor.UpdateRequestProcessorChain;
 import org.apache.solr.common.util.SolrNamedThreadFactory;
+import org.apache.solr.util.LongSet;
 import org.apache.solr.util.OrderedExecutor;
 import org.apache.solr.util.RTimer;
 import org.apache.solr.util.RefCounted;
@@ -1473,12 +1474,19 @@ public class UpdateLog implements PluginInfoInitialized, SolrMetricProducer {
     }
 
     /** Returns the list of deleteByQueries that happened after the given version */
-    public List<Object> getDeleteByQuery(long afterVersion) {
+    public List<Object> getDeleteByQuery(long afterVersion, LongSet updateVersions) {
       List<Object> result = new ArrayList<>(deleteByQueryList.size());
       for (Update update : deleteByQueryList) {
         if (Math.abs(update.version) > afterVersion) {
-          Object dbq = update.log.lookup(update.pointer);
-          result.add(dbq);
+          if (updateVersions.add(update.version)) {
+            Object dbq = update.log.lookup(update.pointer);
+            result.add(dbq);
+          } else {
+            if (debug) {
+              log.debug("UpdateLog.RecentUpdates.getDeleteByQuery(afterVersion={}) not returning duplicate version = {}",
+                  afterVersion, update.version);
+            }
+          }
         }
       }
       return result;
diff --git a/solr/core/src/test/org/apache/solr/handler/component/UpdateLogCloudTest.java b/solr/core/src/test/org/apache/solr/handler/component/UpdateLogCloudTest.java
index d733014..51bb0ca 100644
--- a/solr/core/src/test/org/apache/solr/handler/component/UpdateLogCloudTest.java
+++ b/solr/core/src/test/org/apache/solr/handler/component/UpdateLogCloudTest.java
@@ -129,7 +129,7 @@ public class UpdateLogCloudTest extends SolrCloudTestCase {
       final QueryRequest reqU = new QueryRequest(params("qt","/get", "getUpdates", minVersion + "..."+maxVersion, "skipDbq", Boolean.toString(skipDbq)));
       final NamedList<?> rspU = solrClient.request(reqU, COLLECTION);
       final List<?> updatesList = (List<?>)rspU.get("updates");
-      assertEquals(updatesList.toString(), numExpected + (skipDbq ? 1 : 0), updatesList.size());
+      assertEquals(updatesList.toString(), numExpected, updatesList.size());
     }
 
   }

[lucene-solr] 03/03: SOLR-15676: add solr/CHANGES.txt entry

Posted by cp...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

cpoerschke pushed a commit to branch branch_8x
in repository https://gitbox.apache.org/repos/asf/lucene-solr.git

commit 9673f6654eb82ccee7db33ef5f4dabb234a56db4
Author: Christine Poerschke <cp...@apache.org>
AuthorDate: Thu Oct 28 14:53:26 2021 +0100

    SOLR-15676: add solr/CHANGES.txt entry
    
    (cherry picked from commit 8c3bf90ff60e20e355f4c4ec3ef52910f622c59e)
    
    Resolved Conflicts:
    	solr/CHANGES.txt
---
 solr/CHANGES.txt | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/solr/CHANGES.txt b/solr/CHANGES.txt
index 9b02acc..b7fa6f5 100644
--- a/solr/CHANGES.txt
+++ b/solr/CHANGES.txt
@@ -37,6 +37,9 @@ Bug Fixes
 * SOLR-15628: The SolrException.log() helper method has been fixed to correctly passes the Throwable to the Logger w/o stringification (hossman)
 
 * SOLR-15722: Delete Replica does not delete the Per replica state (noble)
+
+* SOLR-15676: Fix PeerSync failure due to RealTimeGetComponent returning duplicates. (Ramsey Haddad, Christine Poerschke, David Smiley)
+
 Build
 ---------------------