客户端准备写一条数据,是怎样一个流程?
首先,客户端会链接Zookeeper找到Meta表的位置,
在Meta表中找到我们要写入的目标表,并把目标表所在的RegionServer位置返回给Client
Client请求RegionServer,先写入WAL,再写MemStore,然后同步WAL,如果WAL同步失败则清除MemStore的内容
代码如下:
finally {
// if the wal sync was unsuccessful, remove keys from memstore
if (doRollBackMemstore) {
for (int j = 0; j < familyMaps.length; j++) {
for(List<Cell> cells:familyMaps[j].values()) {
rollbackMemstore(cells);
}
}
if (writeEntry != null) mvcc.complete(writeEntry);
} else {
if (writeEntry != null) {
mvcc.completeAndWait(writeEntry);
}
}