[ https://issues.apache.org/jira/browse/SOLR-13963?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16981038#comment-16981038 ]
Lucene/Solr QA commented on SOLR-13963: --------------------------------------- | (/) *{color:green}+1 overall{color}* | \\ \\ || Vote || Subsystem || Runtime || Comment || || || || || {color:brown} Prechecks {color} || | {color:green}+1{color} | {color:green} test4tests {color} | {color:green} 0m 0s{color} | {color:green} The patch appears to include 1 new or modified test files. {color} | || || || || {color:brown} master Compile Tests {color} || | {color:green}+1{color} | {color:green} compile {color} | {color:green} 1m 17s{color} | {color:green} master passed {color} | || || || || {color:brown} Patch Compile Tests {color} || | {color:green}+1{color} | {color:green} compile {color} | {color:green} 1m 15s{color} | {color:green} the patch passed {color} | | {color:green}+1{color} | {color:green} javac {color} | {color:green} 1m 15s{color} | {color:green} the patch passed {color} | | {color:green}+1{color} | {color:green} Release audit (RAT) {color} | {color:green} 1m 4s{color} | {color:green} the patch passed {color} | | {color:green}+1{color} | {color:green} Check forbidden APIs {color} | {color:green} 1m 1s{color} | {color:green} the patch passed {color} | | {color:green}+1{color} | {color:green} Validate source patterns {color} | {color:green} 1m 1s{color} | {color:green} the patch passed {color} | || || || || {color:brown} Other Tests {color} || | {color:green}+1{color} | {color:green} unit {color} | {color:green} 45m 3s{color} | {color:green} core in the patch passed. {color} | | {color:green}+1{color} | {color:green} unit {color} | {color:green} 5m 54s{color} | {color:green} solrj in the patch passed. {color} | | {color:black}{color} | {color:black} {color} | {color:black} 55m 15s{color} | {color:black} {color} | \\ \\ || Subsystem || Report/Notes || | JIRA Issue | SOLR-13963 | | JIRA Patch URL | https://issues.apache.org/jira/secure/attachment/12986594/SOLR-13963.patch | | Optional Tests | compile javac unit ratsources checkforbiddenapis validatesourcepatterns | | uname | Linux lucene1-us-west 4.15.0-54-generic #58-Ubuntu SMP Mon Jun 24 10:55:24 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux | | Build tool | ant | | Personality | /home/jenkins/jenkins-slave/workspace/PreCommit-SOLR-Build/sourcedir/dev-tools/test-patch/lucene-solr-yetus-personality.sh | | git revision | master / 592ea19eff0 | | ant | version: Apache Ant(TM) version 1.10.5 compiled on March 28 2019 | | Default Java | LTS | | Test Results | https://builds.apache.org/job/PreCommit-SOLR-Build/602/testReport/ | | modules | C: solr/core solr/solrj U: solr | | Console output | https://builds.apache.org/job/PreCommit-SOLR-Build/602/console | | Powered by | Apache Yetus 0.7.0 http://yetus.apache.org | This message was automatically generated. > JavaBinCodec has concurrent modification of CharArr resulting in corrupt > intranode updates > ------------------------------------------------------------------------------------------ > > Key: SOLR-13963 > URL: https://issues.apache.org/jira/browse/SOLR-13963 > Project: Solr > Issue Type: Bug > Security Level: Public(Default Security Level. Issues are Public) > Affects Versions: 8.3 > Reporter: Colvin Cowie > Assignee: Noble Paul > Priority: Major > Attachments: JavaBinCodec.java, SOLR-13963.patch, SOLR-13963.patch > > > Discussed on the mailing list "Possible data corruption in JavaBinCodec in > Solr 8.3 during distributed update?" > > In summary, after moving to 8.3 we had a consistent (but non-deterministic) > set of failing tests where the data being sent in intranode requests was > _sometimes_ corrupted. For example if the well formed data was > _'fieldName':"this is a long string"_ > The error we saw from Solr might be that > unknown field _+'fieldNamis a long string"+_ > > The change that indirectly caused to this issue to materialize was from > SOLR-13682 which meant that > org.apache.solr.common.SolrInputDocument.writeMap(EntryWriter) would call > org.apache.solr.common.SolrInputField.getValue() rather than > org.apache.solr.common.SolrInputField.getRawValue() as it had before. > > getRawValue for a string calls > org.apache.solr.common.util.ByteArrayUtf8CharSequence._getStr() which in this > context calls > org.apache.solr.common.util.JavaBinCodec.getStringProvider() > > JavaBinCodec has a CharArr, _arr_, which is modified in two different > locations, but only one of which is protected with a synchronized block > > getStringProvider() synchronizes on _arr_: > > [https://github.com/apache/lucene-solr/blob/master/solr/solrj/src/java/org/apache/solr/common/util/JavaBinCodec.java#L966] > > but _readStr() doesn't: > > [https://github.com/apache/lucene-solr/blob/master/solr/solrj/src/java/org/apache/solr/common/util/JavaBinCodec.java#L930] > > The two methods are called concurrently, but wheren't prior to SOLR-13682. > > Adding a synchronized block into _readStr() around the modification of _arr_ > fixes the problem as far as I can see. > > Also, the problem does not seem to occur when using the dynamic schema mode > of autoCreateFields=true in the updateRequestProcessorChain. -- This message was sent by Atlassian Jira (v8.3.4#803005) --------------------------------------------------------------------- To unsubscribe, e-mail: issues-unsubscr...@lucene.apache.org For additional commands, e-mail: issues-h...@lucene.apache.org