4.5 Duplicate request cache
Connected: An Internet Encyclopedia
4.5 Duplicate request cache
Up:
Connected: An Internet Encyclopedia
Up:
Requests For Comments
Up:
RFC 1813
Up:
4. Implementation issues
Prev: 4.4 Permission issues
Next: 4.6 File name component handling
4.5 Duplicate request cache
4.5 Duplicate request cache
The typical NFS version 3 protocol failure recovery model
uses client time-out and retry to handle server crashes,
network partitions, and lost server replies. A retried
request is called a duplicate of the original.
When used in a file server context, the term idempotent can
be used to distinguish between operation types. An idempotent
request is one that a server can perform more than once with
equivalent results (though it may in fact change, as a side
effect, the access time on a file, say for READ). Some NFS
operations are obviously non-idempotent. They cannot be
reprocessed without special attention simply because they may
fail if tried a second time. The CREATE request, for example,
can be used to create a file for which the owner does not
have write permission. A duplicate of this request cannot
succeed if the original succeeded. Likewise, a file can be
removed only once.
The side effects caused by performing a duplicate
non-idempotent request can be destructive (for example, a
truncate operation causing lost writes). The combination of a
stateless design with the common choice of an unreliable
network transport (UDP) implies the possibility of
destructive replays of non-idempotent requests. Though to be
more accurate, it is the inherent stateless design of the NFS
version 3 protocol on top of an unreliable RPC mechanism that
yields the possibility of destructive replays of
non-idempotent requests, since even in an implementation of
the NFS version 3 protocol over a reliable
connection-oriented transport, a connection break with
automatic reestablishment requires duplicate request
processing (the client will retransmit the request, and the
server needs to deal with a potential duplicate
non-idempotent request).
Most NFS version 3 protocol server implementations use a
cache of recent requests (called the duplicate request cache)
for the processing of duplicate non-idempotent requests. The
duplicate request cache provides a short-term memory
mechanism in which the original completion status of a
request is remembered and the operation attempted only once.
If a duplicate copy of this request is received, then the
original completion status is returned.
The duplicate-request cache mechanism has been useful in
reducing destructive side effects caused by duplicate NFS
version 3 protocol requests. This mechanism, however, does
not guarantee against these destructive side effects in all
failure modes. Most servers store the duplicate request cache
in RAM, so the contents are lost if the server crashes. The
exception to this may possibly occur in a redundant server
approach to high availability, where the file system itself
may be used to share the duplicate request cache state. Even
if the cache survives server reboots (or failovers in the
high availability case), its effectiveness is a function of
its size. A network partition can cause a cache entry to be
reused before a client receives a reply for the corresponding
request. If this happens, the duplicate request will be
processed as a new one, possibly with destructive side
effects.
A good description of the implementation and use of a
duplicate request cache can be found in [Juszczak].
Next: 4.6 File name component handling
Connected: An Internet Encyclopedia
4.5 Duplicate request cache
|