[
https://issues.apache.org/jira/browse/SOLR-5944?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15323784#comment-15323784
]
Hoss Man commented on SOLR-5944:
--------------------------------
bq. When update2 (say a partial update) arrives before update1 (say a full
update, on which update2 depends), *then the call for indexing update2 is a
blocking call* (which finishes either after update1 is indexed, or timeout is
reached).
Ahhh... now it makes sense to me. The part I wasn't getting before was that
update2 blocks on the replica until it sees the update1 it is dependent on.
I feel like there is probably a way we could write a more sophisticate "grey
box" type test for this leveraging callbacks in the DebugFilter, but I'm having
trouble working out what that would really look like.
I think the hueristic approach you're taking here is generall fine for now (as
a way to _try_ to run the updates in a given order even though we know there
are no garuntees) but i have a few suggestions to improve things:
* lots more comments in the test code to make it clear that we use multiple
threads because each update may block if it depends on another update
* replace the comments on the sleep calls to make it clear that while we can't
garuntee/trust what order the updates are executed in since multiple threads
are involved, we're trying to bias the thread scheduling to run them in the
order submitted
** (the wording right now seems definitive and makes the code look clearly
suspicious)
* create {{atLeast(3)}} updates instead of just a fixed set of "3" so we
increase our odds of finding potential bugs when more then one update is out of
order.
* loop over multiple (random) permutations of orderings of the updates
** don't worry about wether a given ordering is actually correct, that's a
valid random ordering for the purposes of the test
** a simple comment saying we know it's possible but it doesn't affect any
assumptions/assertions in the test is fine
* for each random permutation, execute it (and check the results) multiple times
** this will help increase the odds that the thread scheduling actaully winds
up running our updates in the order we were hoping for.
* essentially this should be a a micro "stress test" of updates in arbitrary
order
Something like...
{code}
final String ID = "0";
final int numUpdates = atLeast(3);
final int numPermutationTotest = atLeast(5);
for (int p = 0; p < numPermutationTotest; p++) {
del("*:*);
commit();
index("id",ID, ...); // goes to all replicas
commit();
long version = assertExpectedValuesViaRTG(LEADER, ID, ...);
List<UpdateRequest> updates = makeListOfSequentialSimulatedUpdates(ID,
version, numUpdates);
for (UpdateRequest req : updates) {
assertEquals(0, REPLICA_1.requets(req).getStatus());
}
Collections.shuffle(updates, random());
// this method is where you'd comment the hell out of why we use threads for
this,
// and can be re-used in the other place where a threadpool is used...
assertSendUpdatesInThreadsWithDelay(REPLICA_0, updates, 100ms);
for (SolrClient client : NONLEADERS) [
// assert value on replica matches original value + numUpdates
}
}
{code}
----
As a related matter -- if we are expecting a replica to "block & eventually
time out" when it sees an out of order update, then there should be a white box
test asserting the expected failure situation as well -- something like...
{code}
final String ID = "0";
del("*:*);
commit();
index("id",ID, ...);
UpdateRequest req = simulatedUpdateRequest(version + 1, ID, ...);
Timer timer = new Timer();
timer.start();
SolrServerException e = expectThrows(() -> { REPLICA_0.request(req); });
timer.stop();
assert( /* elapsed time of timer is at least the X that we expect it to block
for */ )
assert(e.getgetHttpStatusMesg().contains("something we expect it to say if the
update was out of order"))
assertEquls(/* whatever we expect in this case */, e.getHttpStatusCode());
{code}
> Support updates of numeric DocValues
> ------------------------------------
>
> Key: SOLR-5944
> URL: https://issues.apache.org/jira/browse/SOLR-5944
> Project: Solr
> Issue Type: New Feature
> Reporter: Ishan Chattopadhyaya
> Assignee: Shalin Shekhar Mangar
> Attachments: DUP.patch, SOLR-5944.patch, SOLR-5944.patch,
> SOLR-5944.patch, SOLR-5944.patch, SOLR-5944.patch, SOLR-5944.patch,
> SOLR-5944.patch, SOLR-5944.patch, SOLR-5944.patch, SOLR-5944.patch,
> SOLR-5944.patch, SOLR-5944.patch, SOLR-5944.patch, SOLR-5944.patch,
> SOLR-5944.patch, SOLR-5944.patch, SOLR-5944.patch, SOLR-5944.patch,
> SOLR-5944.patch, SOLR-5944.patch, SOLR-5944.patch, SOLR-5944.patch,
> SOLR-5944.patch, SOLR-5944.patch, SOLR-5944.patch, SOLR-5944.patch,
> SOLR-5944.patch, SOLR-5944.patch, SOLR-5944.patch, SOLR-5944.patch,
> SOLR-5944.patch, SOLR-5944.patch, SOLR-5944.patch,
> TestStressInPlaceUpdates.eb044ac71.beast-167-failure.stdout.txt,
> TestStressInPlaceUpdates.eb044ac71.beast-587-failure.stdout.txt,
> TestStressInPlaceUpdates.eb044ac71.failures.tar.gz,
> hoss.62D328FA1DEA57FD.fail.txt, hoss.62D328FA1DEA57FD.fail2.txt,
> hoss.62D328FA1DEA57FD.fail3.txt, hoss.D768DD9443A98DC.fail.txt,
> hoss.D768DD9443A98DC.pass.txt
>
>
> LUCENE-5189 introduced support for updates to numeric docvalues. It would be
> really nice to have Solr support this.
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]