Varun Thacker created SOLR-12703:
------------------------------------
Summary: Better validation of bad atomic updates
Key: SOLR-12703
URL: https://issues.apache.org/jira/browse/SOLR-12703
Project: Solr
Issue Type: Bug
Security Level: Public (Default Security Level. Issues are Public)
Reporter: Varun Thacker
I spent the majority of the day fighting a user issue. Here's the stack trace
the user was running into:
{code:java}
ERROR - 2018-08-27 21:57:48.045; [c:gettingstarted s:shard1 r:core_node5
x:gettingstarted_shard1_replica_n2] org.apache.solr.handler.RequestHandlerBase;
org.apache.solr.common.SolrException: RunUpdateProcessor has received an
AddUpdateCommand containing a document that appears to still contain Atomic
document update operations, most likely because
DistributedUpdateProcessorFactory was explicitly disabled from this
updateRequestProcessorChain
at
org.apache.solr.update.processor.RunUpdateProcessor.processAdd(RunUpdateProcessorFactory.java:62)
at
org.apache.solr.update.processor.UpdateRequestProcessor.processAdd(UpdateRequestProcessor.java:55)
at
org.apache.solr.update.processor.DistributedUpdateProcessor.doLocalAdd(DistributedUpdateProcessor.java:950)
at
org.apache.solr.update.processor.DistributedUpdateProcessor.versionAdd(DistributedUpdateProcessor.java:1168)
at
org.apache.solr.update.processor.DistributedUpdateProcessor.processAdd(DistributedUpdateProcessor.java:633)
at
org.apache.solr.update.processor.LogUpdateProcessorFactory$LogUpdateProcessor.processAdd(LogUpdateProcessorFactory.java:103)
at
org.apache.solr.update.processor.UpdateRequestProcessor.processAdd(UpdateRequestProcessor.java:55)
at
org.apache.solr.update.processor.AddSchemaFieldsUpdateProcessorFactory$AddSchemaFieldsUpdateProcessor.processAdd(AddSchemaFieldsUpdateProcessorFactory.java:475)
at
org.apache.solr.update.processor.UpdateRequestProcessor.processAdd(UpdateRequestProcessor.java:55)
at
org.apache.solr.update.processor.FieldMutatingUpdateProcessor.processAdd(FieldMutatingUpdateProcessor.java:118)
at
org.apache.solr.update.processor.UpdateRequestProcessor.processAdd(UpdateRequestProcessor.java:55)
at
org.apache.solr.update.processor.FieldMutatingUpdateProcessor.processAdd(FieldMutatingUpdateProcessor.java:118)
at
org.apache.solr.update.processor.UpdateRequestProcessor.processAdd(UpdateRequestProcessor.java:55)
at
org.apache.solr.update.processor.FieldMutatingUpdateProcessor.processAdd(FieldMutatingUpdateProcessor.java:118)
at
org.apache.solr.update.processor.UpdateRequestProcessor.processAdd(UpdateRequestProcessor.java:55)
at
org.apache.solr.update.processor.FieldMutatingUpdateProcessor.processAdd(FieldMutatingUpdateProcessor.java:118)
at
org.apache.solr.update.processor.UpdateRequestProcessor.processAdd(UpdateRequestProcessor.java:55)
at
org.apache.solr.update.processor.FieldNameMutatingUpdateProcessorFactory$1.processAdd(FieldNameMutatingUpdateProcessorFactory.java:75)
at
org.apache.solr.update.processor.UpdateRequestProcessor.processAdd(UpdateRequestProcessor.java:55)
at
org.apache.solr.update.processor.FieldMutatingUpdateProcessor.processAdd(FieldMutatingUpdateProcessor.java:118)
at
org.apache.solr.update.processor.UpdateRequestProcessor.processAdd(UpdateRequestProcessor.java:55)
at
org.apache.solr.update.processor.AbstractDefaultValueUpdateProcessorFactory$DefaultValueUpdateProcessor.processAdd(AbstractDefaultValueUpdateProcessorFactory.java:92)
at org.apache.solr.handler.loader.JavabinLoader$1.update(JavabinLoader.java:98)
at
org.apache.solr.client.solrj.request.JavaBinUpdateRequestCodec$1.readOuterMostDocIterator(JavaBinUpdateRequestCodec.java:188)
at
org.apache.solr.client.solrj.request.JavaBinUpdateRequestCodec$1.readIterator(JavaBinUpdateRequestCodec.java:144){code}
This is with the default solrconfig which means DistributedUpdateProcessor was
present before
RunUpdateProcessorFactory. From what I could tell
DistributedUpdateProcessor#getUpdatedDocument should have resolved the atomic
update and RunRunUpdateProcessorFactory should never receive an atomic update.
Turned out it was an indexing client bug which was causing a certain fraction
of the updates to fail with this error. Here's a sample SolrJ code which would
trigger this stack trace always
{code:java}
public void test() throws IOException, SolrServerException {
CloudSolrClient client = new
CloudSolrClient.Builder(Collections.singletonList("localhost:9983"),
Optional.empty()).build();
client.connect();
client.setDefaultCollection("gettingstarted");
//Works
SolrInputDocument document = new SolrInputDocument();
document.addField("id", "1");
document.addField("string_s" , ImmutableMap.of("set", "bbb"));
client.add(document);
//Does not work and throws a very confusing error
document = new SolrInputDocument();
document.addField("id", "1");
document.addField("string_s" , ImmutableMap.of("set", ImmutableMap.of("set",
"bbb")));
client.add(document);
}{code}
--
This message was sent by Atlassian JIRA
(v7.6.3#76005)
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]