stillalex commented on PR #1504:
URL: https://github.com/apache/solr/pull/1504#issuecomment-1500709938
I have spent some more time unpacking this test.
Test setup is: shard `shard1` is split into 2 new slices `shard1_0` and
`shard1_1`, concurrently there are additions happening.
The failure scenario context is:
- the test client makes direct 'addDoc' calls to the new slice `shard1_1`
that is in the process of being created. this means the `DistribPhase` is `NONE`
- target slice (coll.getRouter().getTargetSlice) for the request is `shard1`
- `isLeader` is `false` on the new slice `shard1_1`. the old shard is still
considered the leader replica at this point.
- the new slice has `RECOVERY` state. also because target slice is `shard1`
the failing doc must be inside the correct slice interval (`isTargetSlice`
needs to be true). this makes the `isSubShardLeader` `true`
Because the `isLeader` flag is `false`, the `DistributedUpdateProcessor`
uses whatever version it can extract from the request. Now _if_ this was a
leader originated request (`phase=FROMLEADER`) there would have been a version
available, but it is not, so version is `0`.
there is no integrity check in place to verify the version is > 0 (I added
one with this PR). but we can do better, we can avoid failing the integrity
check if we know the `isSubShardLeader` flag is `true` so we can apply a
'leader logic' strategy and generate a new version before saving the new
document to the index.
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]