Dan Berindei created ISPN-12128:
-----------------------------------
Summary: Remote read during state transfer should store entry in data
container
Key: ISPN-12128
URL:
https://issues.redhat.com/browse/ISPN-12128
Project: Infinispan
Issue Type: Bug
Components: Core, State Transfer
Affects Versions: 11.0.1.Final
Reporter: Dan Berindei
Assignee: Dan Berindei
Fix For: 12.0.0.Final
A cache with {{await-initial-transfer="false"}} will execute cache operations
while it is receiving state, during rebalance phase {{READ_OLD_WRITE_ALL}}. State transfer
can take a long time, and during that time, it is not a read owner for any segments, it is
only a write owner for the segments it is receiving.
That means {{cache.get(k)}} will perform a remote lookup every time, even AFTER the node
received entry {{k=v}} via transfer, as long as not all the nodes have confirmed the end
of state transfer and the coordinator hasn't changed the rebalance phase to
{{READ_ALL_WRITE_ALL}}.
The extra remote lookups can have a negative impact on application performance. Especially
in a replicated cache, the application would expect reads to be very fast, and the
repeated remote lookups would break that assumption.
In order to encourage {{await-initial-transfer="false"}} and eventually make it
the default (ISPN-9112), we should limit the number of remote lookups performed by a node
while is is a write-only owner of a key:
* Remote reads should write the entry in the data container, the same way state transfer
would (i.e. skipping the write if a write operation already changed the entry).
* Reads should first look up the key in the local data container before going remotely.
If the key exists locally, the value can be returned directly.
--
This message was sent by Atlassian Jira
(v7.13.8#713008)