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:33 UTC
[lucene-solr] 01/03: SOLR-15676:
UpdateLog.RecentUpdates.getDeleteByQuery to not return duplicate versions
(#329)
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());
}
}