]
Galder Zamarreño updated ISPN-4351:
-----------------------------------
Fix Version/s: 7.1.0.Alpha1
(was: 7.0.0.Final)
Clarify the behaviour of putForExternalRead in clustered caches
---------------------------------------------------------------
Key: ISPN-4351
URL:
https://issues.jboss.org/browse/ISPN-4351
Project: Infinispan
Issue Type: Task
Components: Core, Documentation-Core
Affects Versions: 6.0.2.Final
Reporter: Dan Berindei
Fix For: 7.1.0.Alpha1
The {{putForExternal}}
[
documentation|http://infinispan.org/docs/7.0.x/user_guide/user_guide.html...]
says
{quote}
putForExternalRead is consider to be a fast operation because regardless of whether it’s
successful or not, it doesn’t wait for any locks, and so returns to the caller promptly.
{quote}
But the documentation doesn't say how {{putForExternalRead}} should behave in a
clustered cache. Currently, the command is replicated to all the owners in distributed
mode, and to all the cluster members in replicated mode. So the command may be delayed
while waiting for the responses from those other nodes. The exception is invalidation
mode, which doesn't replicate {{putForExternalRead}} commands - only regular {{put}}s
generate invalidations.
The documentation also doesn't mention the interaction of {{putForExternalRead}}
operations with transactions. Currently, {{PUT_FOR_EXTERNAL_READ}}-flagged commands are
executed as non-transactional commands even when the cache is transactional, presumably to
avoid the overhead of transactions. But this undermines the argument for wrapping regular
write operations in an implicit transaction, when running in a transactional cache.
I propose changing {{putForExternalRead}} to only write on the local node (as it already
does in invalidation mode), and documenting it as such. In distribution mode, it should be
a no-op when the local node is not an owner.