iotdb icon indicating copy to clipboard operation
iotdb copied to clipboard

BufferWrite的restore的action

Open kr11 opened this issue 7 years ago • 1 comments

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);
			}
		}
	};

kr11 avatar Oct 13 '17 12:10 kr11

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信息的深复制。

liukun4515 avatar Nov 13 '17 06:11 liukun4515