Terry, et al. describe four guarantees that can improve the user experience for devices that observe network partitions/high latency frequently. The four guarantees are: Read Your Writes, Monotonic Reads, Monotonic Writes, Writes Follow Reads. These guarantees are only possible in the context of a ``session,’’ which can be flexibly implemented.
The motivation seems to be that around 1994 (when the paper was published) there were many issues that arose from a very loosey-goosey approach to consistency. While issues are expected, and may not seem problematic for systems that are not mission critical, the types of problems that developers of the Bayou project can heavily affect productivity. Some examples were: you may see a new email but when you try to open it the system says that email doesn’t exist, your calendar shows you events that seem to come and go, and some other (less amusing) examples.
I don’t think I learned much from the core work in particular because I had seen a papers we love talk about bayou by Peter Bailis. That being said, I do think it is really cool that session guarantees were designed in a way that they can be laid overtop of just about any system.
I do like that the distinction between isolation and consistency is explicitly mentioned, and the reader is referred to Isolation only Transactions for Mobile Computing. This other paper identifies the lack of concurrency control over the unix file system as the reason for data hazards (read/write conflicts). The session guarantees described by Terry, et al. are meant to address consistency problems that mobile devices may experience, whereas isolation would address a similar problem at a different granularity. It makes me think of consistency and isolation as separate layers of data hazards, where consistency is a coarser granularity, and isolation takes into account data hazards on shared objects from a particular node/machine/device.
I am suddenly realizing that consistency and isolation seem to be similar ideas applied in distributed and concurrent systems, respectively. These concepts do not necessarily seem independent, much like there is CAP for distributed systems, I feel like there is some continuum of trade-offs that are unique to concurrent processes on a particular machine. If consistency usually considers individual reads and writes across a distributed system, isolation seems like it would consider some set of reads and writes in a concurrent system. I’m not sure if there is some part of my understanding I am mixing up, but this is probably something I’ll need to refine my mental model of.
I think that beyond the guarantees, and their nice, intuitive definitions, this work provides a good way of implementing these guarantees using version vectors. I was thinking previously about how version vectors could be used for managing deployments of many versions of code in a system, or even how they are heavily related to vector clocks. I suppose the relationship between all of these is exactly the ID state explosion that Dr. Kuper was mentioning in class over that last week or so. I think that now my understanding of what other entities may contribute to the state explosion, I think I will be able to better understand hand-off counters and how they try to address state explosion.