[
https://issues.apache.org/jira/browse/SOLR-12803?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16627474#comment-16627474
]
Erick Erickson commented on SOLR-12803:
---------------------------------------
Nice find!
I do question whether adding an if statement is the right thing to do here. It
may fix this case, but having a method that takes a collection name then
effectively ignores it seems like a broken interface to me.
Is there a way to push the check down into add(doc, collection) instead so
other code paths wouldn't have this problem?
Or perhaps put a quick fix in here and open up a JIRA if pushing the check down
into add involves lots of surgery.
Mind you I haven't looked at the code so maybe this is totally off base...
> ConcurrentUpdateSolrClient doesn't obey "collection" when streaming updates
> ---------------------------------------------------------------------------
>
> Key: SOLR-12803
> URL: https://issues.apache.org/jira/browse/SOLR-12803
> Project: Solr
> Issue Type: Test
> Security Level: Public(Default Security Level. Issues are Public)
> Components: SolrJ
> Affects Versions: 7.5
> Reporter: Jason Gerlowski
> Priority: Major
>
> ConcurrentUpdateSolrClient spins up background threads that pull documents
> from a queue and feed them into open HTTP connections. Before writing each
> UpdateRequest on the connection, CUSC checks that the SolrParams match the
> params used when originally opening the connection. But it doesn't check
> that the collection is the same.
> If a user is using the same ConcurrentUpdateSolrClient to send documents to
> multiple collections simultaneously, each of their UpdateRequest might go to
> the wrong collection entirely, based on what connections are already open.
> The problem can be reproduced with the snippet below. The correct behavior
> would be for 500 docs to go to each collection. But instead, on most runs
> all 1000 go to collection1.
> {code:java}
> @Test
> public void cusc_test() throws Exception {
> try (SolrClient client = new
> ConcurrentUpdateSolrClient.Builder("http://localhost:8983/solr").build()) {
> for (int i = 0; i < 1000; i++) {
> SolrInputDocument doc = new SolrInputDocument();
> doc.setField("id", "value" + i);
> if (i%2 == 0) {
> client.add("collection1", doc);
> } else {
> client.add("collection2", doc);
> }
> }
> client.commit("collection1");
> client.commit("collection2");
> }
> }{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]