Notes
1The case where
V =
newVal
yields a semantics for update that is simply a file system write operation;
the case where
V =
F (
newVal,
objID)
amounts to support for atomic read-modify-write operations on objects.
Though powerful, this semantics falls short of supporting transactions,
which would allow a request to query and/or update multiple objects indivisibly.
2An actual implementation
would probably store the current value of the object rather than
storing the sequence of updates that produces this current
value. We employ a sequence of updates representation here
because it simplifies the task of arguing that strong consistency
guarantees hold.
3If
HistobjID stores the current value of
objID rather than its entire history then
"
HistobjID ·
r " should be interpreted
to denote applying
the update to the object.
4If
HistobjIDi is the
current state rather than a sequence of updates, then <= is defined to be the "prior value" relation rather than the "prefix of"
relation.
5Actually, the placement strategy is not discussed
in [
11]. GFS does some load balancing that results in an
approximately even load across the servers, and in our simulations
we expect that random placement is a good approximation of this
strategy.
6An unrealistically short MTBF was selected here to facilitate
running long-duration simulations.