I'm interested in the answer to this question to get a clear understanding of the data consistency guarantee of HBase.
if I write a row key --- column into hbase region server, I see that in HRegion.put() it calls the HLog.append(), which ultimately calls DFSoutputStream.sync(), let's say at this moment, 1 out of the 3 replica data nodes goes down, I guess the sync() would throw an IOException, and the put() would fail? but if I continue to call put(), would HDFS find out that the replica is down, and try to relocate the HLog onto another set of replica? if so, what happens to the old set? during the interim, is it possible that the 2 replicas that were successfully written could be visible to clients? (for example, the current region server dies and a new one comes up and picks up the HLog from 1 of the 2 replicas) Thanks a lot Yang
