iotdb
iotdb copied to clipboard
BufferWrite的restore的action
line 114,这里备份的lastUpdateTimeMap是一个map数组,应该深拷贝,否则这里备份了仍然会被外界修改,没有意义
private Action bufferwriteCloseAction = new Action() {
@Override
public void act() throws Exception {
// update the lastUpdatetime, newIntervalList and Notice: thread
// safe
synchronized (fileNodeProcessorStore) {
fileNodeProcessorStore.setLastUpdateTimeMap(lastUpdateTimeMap);
addLastTimeToIntervalFile();
fileNodeProcessorStore.setNewFileNodes(newFileNodes);
}
}
};
bufferwriteCloseAction
是在一个同步操作里面。所以在下次修改fileNodeProcessorStore
并且backup写磁盘之前,对lastUpdateTimeMap
的修改虽然影响了fileNodeProcessorStore
但是最终的结果是不会受到影响的。最终结果只看fileNodeProcessorStore
被序列化到磁盘的内容是否是同步的信息。因为close操作是同步的,所有不会受到任何的影响。
但是bufferwriteFlushAction
这内容中会有问题
private Action bufferwriteFlushAction = new Action() {
@Override
public void act() throws Exception {
// update the lastUpdateTime Notice: Thread safe
synchronized (fileNodeProcessorStore) {
fileNodeProcessorStore.setLastUpdateTimeMap(lastUpdateTimeMap);
}
}
};
因为这个方法是针对于一个bufferwrite的block的flush操作的backup,在异步写磁盘中间还是会有写入操作,修改对应的lastUpdateTimeMap
所以这里需要进行修改。
改进内容:
只改进bufferwriteFlushAction
操作中对lastUpdateTimeMap
信息的深复制。