You are mistaken on the HBase write consistency guarantees. First of all, the scenario that you pose is a durability concern, not a consistency issue. Even after the supposedly uncommited write becomes visible, it will become visible to all clients at the same time; thus, no consistency issues here.
In other words; a write acknowledgement is only a Best effort and the real consistency guarantee is the read-after-write consistency. After a write is successfully written to the WAL by HBase, any client trying to read will see the same state of data.
To address the durability concerns, let me pose a different scenario from the one you have suggested. Let's take the following sequence of steps for any database (not just HBase):
- Client sends a write op.
- Server receives the op, successfully applies it and sends acknowledgement to the client.
- A network failure occurs and the acknowledgement never reaches the client.
- Due to network failure, client thinks that the request timed out. It also thinks that server connection is unhealthy. So it tries to create a new connection.
- Network recovers, but the acknowledgement from the server is lost as the client is now connected using a different socket.
The reason such a scenario can happen is due to the nature of most distributed systems i.e. in a client-server scenario, server is always considered to be the source of truth. Supposedly failed writes can appear because those writes might be visible as failed to the client due to reasons outside the control of the server.
Most databases only guarantee durability of writes successfully acknowledged to the client (i.e. once acknowledged, those writes cannot be lost unless a disaster scenario occurs), not the non-durability of writes that might have failed from the client perspective.
The only way to ensure that any writes not successfully acknowledged to the client are not written to the database is to wait for the client to acknowledge a write acknowldgedment from the server. That's a deadly dependency for a server to have where it can potentially block writes from all clients due to one misbehaving, slow or dead client.