SolrCloud 8.1.1 CDCR Репликация не работает: сбой из-за (409) фактического конфликта версий = -1 - PullRequest
0 голосов
/ 09 марта 2020

Попытка настроить однонаправленный CDCR с Solr 8.1.1,

после синхронизации каталогов данных от исходных до целевых реплик (от 1 до 1) в исходных журналах. Я вижу:

2020-03-09 11:04:28.873 INFO  (cdcr-replicator-17-thread-4) [   ] o.a.s.h.CdcrReplicator Forwarded 0 updates to target search1
2020-03-09 11:04:30.872 INFO  (cdcr-replicator-17-thread-5) [   ] o.a.s.h.CdcrReplicator Forwarded 0 updates to target search1
2020-03-09 11:04:32.873 INFO  (cdcr-replicator-17-thread-6) [   ] o.a.s.h.CdcrReplicator Forwarded 0 updates to target search1
2020-03-09 11:04:34.873 INFO  (cdcr-replicator-17-thread-7) [   ] o.a.s.h.CdcrReplicator Forwarded 0 updates to target search1
2020-03-09 11:04:36.873 INFO  (cdcr-replicator-17-thread-8) [   ] o.a.s.h.CdcrReplicator Forwarded 0 updates to target search1

Я запустил CDCR для исходной коллекции, и когда я индексирую новые данные в исходную коллекцию, получаю следующую ошибку:

2020-03-09 11:14:22.933 ERROR (cdcr-replicator-17-thread-5) [   ] o.a.s.c.s.i.BaseCloudSolrClient Request to collection [search1] failed due to (409) org.apache.solr.client.solrj.impl.HttpSolrClient$RemoteSolrException: Error from server at http://10.11.33.159:8983/solr/search1_shard1_replica_n1: version conflict for THREE_INDEXING_01 expected=1660684743870513152 actual=-1, retry=0 commError=false errorCode=409
2020-03-09 11:14:22.933 INFO  (cdcr-replicator-17-thread-5) [   ] o.a.s.c.s.i.BaseCloudSolrClient request was not communication error it seems
2020-03-09 11:14:22.933 WARN  (cdcr-replicator-17-thread-5) [   ] o.a.s.h.CdcrReplicator Failed to forward update request to target: search1 => org.apache.solr.client.solrj.impl.CloudSolrClient$RouteException: Error from server at http://10.11.33.159:8983/solr/search1_shard1_replica_n1: version conflict for THREE_INDEXING_01 expected=1660684743870513152 actual=-1
        at org.apache.solr.client.solrj.impl.CloudSolrClient.getRouteException(CloudSolrClient.java:125)
org.apache.solr.client.solrj.impl.CloudSolrClient$RouteException: Error from server at http://10.11.33.159:8983/solr/search1_shard1_replica_n1: version conflict for THREE_INDEXING_01 expected=1660684743870513152 actual=-1
        at org.apache.solr.client.solrj.impl.CloudSolrClient.getRouteException(CloudSolrClient.java:125) ~[?:?]
        at org.apache.solr.client.solrj.impl.CloudSolrClient.getRouteException(CloudSolrClient.java:46) ~[?:?]
        at org.apache.solr.client.solrj.impl.BaseCloudSolrClient.directUpdate(BaseCloudSolrClient.java:489) ~[?:?]
        at org.apache.solr.client.solrj.impl.BaseCloudSolrClient.sendRequest(BaseCloudSolrClient.java:977) ~[?:?]
        at org.apache.solr.client.solrj.impl.BaseCloudSolrClient.requestWithRetryOnStaleState(BaseCloudSolrClient.java:837) ~[?:?]
        at org.apache.solr.client.solrj.impl.BaseCloudSolrClient.request(BaseCloudSolrClient.java:769) ~[?:?]
        at org.apache.solr.client.solrj.SolrRequest.process(SolrRequest.java:207) ~[?:?]
        at org.apache.solr.client.solrj.SolrRequest.process(SolrRequest.java:224) ~[?:?]
        at org.apache.solr.handler.CdcrReplicator.sendRequest(CdcrReplicator.java:140) ~[?:?]
        at org.apache.solr.handler.CdcrReplicator.run(CdcrReplicator.java:120) ~[?:?]
        at org.apache.solr.handler.CdcrReplicatorScheduler.lambda$null$0(CdcrReplicatorScheduler.java:81) ~[?:?]
        at org.apache.solr.common.util.ExecutorUtil$MDCAwareThreadPoolExecutor.lambda$execute$0(ExecutorUtil.java:209) ~[?:?]
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) ~[?:1.8.0_232]
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) ~[?:1.8.0_232]
        at java.lang.Thread.run(Thread.java:748) [?:1.8.0_232]
Caused by: org.apache.solr.client.solrj.impl.HttpSolrClient$RemoteSolrException: Error from server at http://10.11.33.159:8983/solr/search1_shard1_replica_n1: version conflict for THREE_INDEXING_01 expected=1660684743870513152 actual=-1
        at org.apache.solr.client.solrj.impl.HttpSolrClient.executeMethod(HttpSolrClient.java:649) ~[?:?]
        at org.apache.solr.client.solrj.impl.HttpSolrClient.request(HttpSolrClient.java:255) ~[?:?]
        at org.apache.solr.client.solrj.impl.HttpSolrClient.request(HttpSolrClient.java:244) ~[?:?]
        at org.apache.solr.client.solrj.impl.LBSolrClient.doRequest(LBSolrClient.java:368) ~[?:?]
        at org.apache.solr.client.solrj.impl.LBSolrClient.request(LBSolrClient.java:296) ~[?:?]
        at org.apache.solr.client.solrj.impl.BaseCloudSolrClient.lambda$directUpdate$0(BaseCloudSolrClient.java:465) ~[?:?]
        at java.util.concurrent.FutureTask.run(FutureTask.java:266) ~[?:1.8.0_232]
        ... 4 more

1 Ответ

0 голосов
/ 09 марта 2020

Если существует конфликт версий (код ошибки HTTP 409), то вы получите код ошибки HTTP 409.

По умолчанию схема Solr включает поле version , и это поле автоматически добавляется к каждому новому документу. Эта функция работает, требуя поле версия для всех документов в индексе и сравнивая его с версией, указанной как часть команды обновления.

$ curl -X POST -H 'Content-Type: application/json' 'http://localhost:8983/solr/techproducts/update?_version_=1632740120218042368&versions=true&commit=true&omitHeader=true' --data-binary '
[{ "id" : "aaa",
   "foo_s" : "update attempt with correct existing version" }]'

обновление со значением для версия , которое соответствует значению в индексе, и оно успешно выполняется. Поскольку мы включили versions=true в запрос на обновление, ответ содержит другое значение для поля version .

Если обновление со значением для version встроено в сам документ. Запрос не выполняется, потому что вы указали неверную версию. Ниже будет ошибка для него.

{
  "error":{
    "metadata":[
      "error-class","org.apache.solr.common.SolrException",
      "root-error-class","org.apache.solr.common.SolrException"],
    "msg":"version conflict for aaa expected=100 actual=1632740462042284032",
    "code":409
    }
}

Здесь -1 означает, что Solr не может найти документ с этой версией. Я бы посоветовал вам попробовать отправить один из документов для самостоятельного решения вручную в интерфейсе администратора Solr. Выберите имя своего ядра / коллекции, затем нажмите ссылку «Документы» (на странице администрирования solr), и вы попадете на страницу, на которой вы можете отправить документ для обновления в solr.

Пожалуйста, обратитесь к документации по solr для больше деталей. Документация Solr

...