[ 
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]

Reply via email to