Hi,

I've tried to understand the implementation and APIs from KIP-67 and would
like to know the possible semantics for read requests from a client
perspective. As a developer of a queryable state client, the access
semantics I would like to have (I think...) is one where subsequent reads
always return the value from the last read or a newer value (if the state
store is available). This should be independent of the current system
configuration, e.g. re-balancing, failures etc. .

A client-side get(k) can be implemented by starting with a lookup for the
instances that store k followed by a retrieve of the value associated with
k from the instances returned by the lookup. In the worst case we can
always do scatter+gather over all instances.

We can start by considering a get(k) under two failure-free cases: a)
single instance and b) a system going from one instance to two instances. In
case a) the lookup will always return the same instance and the following
get will read from a local store. The semantics in this case depends on the
local store.

For case b) the lookup returns instance A, but in between the lookup and
the get, a new instance B is introduced to which k is transferred? Does the
state store on A become invalid when the state is re-assigned? Is there
another way for the client to detect the change?

Best Regards,
Mikael

Reply via email to