Regarding section 10.2.1 in the dissertation, it talks about leader sending acknowledgements back to the client if majority of the followers have applied the log along with fsync.
however, what happens in a situation where majority of followers have applied the log and fsync'd it, but leader hasn't finished the fsync, in that case leader would still consider the write record as committed and send ACK to the client. But now what if, the fsync fails on the leader and client sends a read request to that leader. In that case, leader would serve stale entry, right ?
P.S the client expects consistent reads.
Here is the flow (say we have a cluster of 3 nodes, L(leader), F1(follower 1), F2(follower 2))
1. Client sends W1 to L
2. L appends W1 to its log
3. L sends W1 to F1 and F2
4. L initiates fsync
5. F1 and F2 apply W1 and finishes fsync
6. F1 and F2 send successful AppendResult back to the leader
7. L marks the entry to be committed and sends ACK to client
8. L fails the fsync
9. Client sends read request to the L in the same region were W1 was applied