The read request can be sent to a non-leader replica. If the server for such replica is out of the cluster (because of network partition) but itself does not know yet, then related DTX on such replica may miss the (async) DTX commit RPC as to still be in ‘prepared’ status when the read RPC arrived. Under such case, if the client also uses old pool map, then the client and the server will not be aware of the stale pool map. But ‘prepared’ DTX on non-leader replica is uncertain for the read request, the non-leader will return -DER_INPROGRESS (-2018) to the client that will notify the client to re-read from leader replica. We assume that the leader replica is healthy at that time. When the client re-read from the leader replica, it will know its pool map is stale, then refresh its pool map, and then get the latest data from the leader replica.
From: <email@example.com> on behalf of
DAOS uses two-phase commit to ensure consistency between replicas. According to "src/vos/readme.md", read requests can be sent to any replica, but if this replica server has a network partition（the client uses the old Pool map to access the old replica server）, then the latest committed data cannot be seen. How does DAOS avoid this situation?