[
https://issues.apache.org/jira/browse/SOLR-6257?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14066823#comment-14066823
]
Steve Rowe commented on SOLR-6257:
----------------------------------
Thinking about back-compat: this will change how docs are routed, but the
behavior is only different for documents with IDs that would currently trigger
an AIOOBE and thus fail to index, so I think it's fine.
There is one corner case I can think of that does not currently throw an
exception, but that hashes differently: two trailing "\!"-s -
{{String.split("\!")}} (used currently to break up IDs into pieces, but not by
my fixed version) only returns one piece for "A\!\!", but my changes would
return two pieces (the second being empty). {{KeyParser}} adds another "piece"
if it finds a trailing "!" in the key, so the current behavior will operate
with pieces=2, my changes with pieces=3.
I confirmed the problem: the hash produced by {{KeyParser.getHash()}} in the
fixed version for "A\!\!" is different from the currentlly produced hash. (By
contrast, the hash for "A\!" is the same.)
Should be fairly easy to change this corner case back to the previous behavior.
I'll post a patch shortly.
> More than two "!"-s in a doc ID throws an ArrayIndexOutOfBoundsException when
> using the composite id router
> -----------------------------------------------------------------------------------------------------------
>
> Key: SOLR-6257
> URL: https://issues.apache.org/jira/browse/SOLR-6257
> Project: Solr
> Issue Type: Bug
> Reporter: Steve Rowe
> Assignee: Steve Rowe
> Attachments: SOLR-6257.patch
>
>
> Since {{CompositeIdRouter}} is the default router, it has to be able to deal
> with *any* ID string without throwing an exception.
> The following test (added to {{TestHashPartitioner}}) currently fails:
> {code:java}
> public void testNonConformingCompositeId() throws Exception {
> DocRouter router = DocRouter.getDocRouter(CompositeIdRouter.NAME);
> DocCollection coll = createCollection(4, router);
> Slice targetSlice = coll.getRouter().getTargetSlice("A!B!C!D", null,
> null, coll);
> assertNotNull(targetSlice);
> }
> {code}
> with the following output:
> {noformat}
> [junit4] Suite: org.apache.solr.cloud.TestHashPartitioner
> [junit4] 2> log4j:WARN No such property [conversionPattern] in
> org.apache.solr.util.SolrLogLayout.
> [junit4] 2> Creating dataDir:
> /Users/sarowe/svn/lucene/dev/trunk/solr/build/solr-core/test/J0/./temp/solr.cloud.TestHashPartitioner-19514036FB5C5E56-001/init-core-data-001
> [junit4] 2> 1233 T11 oas.SolrTestCaseJ4.buildSSLConfig Randomized ssl
> (false) and clientAuth (false)
> [junit4] 2> 1296 T11 oas.SolrTestCaseJ4.setUp ###Starting
> testNonConformingCompositeId
> [junit4] > Throwable #1: java.lang.ArrayIndexOutOfBoundsException: 2
> [junit4] > at
> __randomizedtesting.SeedInfo.seed([19514036FB5C5E56:3A131EC016F531A4]:0)
> [junit4] > at
> org.apache.solr.common.cloud.CompositeIdRouter$KeyParser.getHash(CompositeIdRouter.java:296)
> [junit4] > at
> org.apache.solr.common.cloud.CompositeIdRouter.sliceHash(CompositeIdRouter.java:58)
> [junit4] > at
> org.apache.solr.common.cloud.HashBasedRouter.getTargetSlice(HashBasedRouter.java:33)
> [junit4] > at
> org.apache.solr.cloud.TestHashPartitioner.testNonConformingCompositeId(TestHashPartitioner.java:205)
> [junit4] > at java.lang.Thread.run(Thread.java:745)
> {noformat}
--
This message was sent by Atlassian JIRA
(v6.2#6252)
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]