Forward entries to all our peer servers.
The map keys are Strings and the values are Forward objects.
Like the ModifyService, the "forwardAnswer" can send back a
LeaseNotKnown response if the UID is not known (e.g. due to a
server restart), in which case the server should send the full
Record. A LeaseDenied is never sent because this is typically
a race condition -- the remote server's "forward" is likely
on the wire and will correct the sender's tables. Lastly, a
success Lease is not necessary since a lack of acknowledgement
is assumed to be an acceptance of the forwarded data.
Clients may see temporary inconsistencies due to propagation
delays, but these should be minimal. Races between clients
are resolved by deconflicting the entries based upon the
optional "version" entries in each record.
Larger inconsistencies may occur due to network partitions or
server crashes. These conflicts are eventually remedied with
the server-side deconfliction code and periodic lease
renewals. Additionally, as an optional optimization, a server
can detect another server's crash and forward a full copy of
its data to that server, by using the other "forward" method.
It's fine to submit a singleton map, but for efficiency a
client can use this API to batch requests.
|