乱序合并前
乱序合并开始即在当前存储组创建一个名为mergingModification的临时ModificationFile变量。
所有的delete操作都需要判断存储组中的mergingModification变量是否为null,
如果不为null,则将此次delete操作写入mergingModification临时变量中,不再写入mods文件中;否则写入mods中。
乱序合并中
根据当前合并文件已经存在的mods文件过滤已经删除的数据。
因此,在乱序合并完后,原mods文件中记录的delete操作不再有用。
乱序合并完
删除原mods文件对应数据的原mods文件。
将mergingModification中的记录分别全部写入所有参与合并的顺序文件的mods文件中,
以保证乱序合并过程中delete操作的有效性。
顺序合并与delete操作的交互流程
顺序合并前
与乱序合并不同,顺序合并不创建mergingModification临时变量
顺序合并过程的delete操作仍然写入原mods文件中
顺序合并中
根据当前合并文件已经存在的mods文件过滤已经删除的数据,并记录此时生效的所有delete操作
但是,因为顺序合并过程的delete操作仍然会写入此mods文件,所以在顺序合并完后,可能有没被过滤掉的delete操作
顺序合并完
将所有原文件的mods文件合并,合并的过程中,过滤掉cache中已经生效过的delete操作
将合并完的mods文件命名为{目标文件名}.mods
顺序合并与delete操作的交互流程
顺序合并前
顺序合并中
顺序合并完
乱序合并与delete操作的交互流程
乱序合并前
乱序合并开始即在当前存储组创建一个名为mergingModification的临时ModificationFile变量
在此之后所有的delete操作都需要判断存储组中的mergingModification变量是否为null,如果不为null,则将此次delete操作写入mergingModification临时变量中
乱序合并中
根据当前合并文件已经存在的mods文件过滤已经删除的数据,因此,在乱序合并完后,原mods文件中记录的delete操作不再有用
乱序合并完
删除原mods文件对应数据的原mods文件
将mergingModification中的记录分别全部写入对应文件的mods文件中,以保证乱序合并过程中delete操作的有效性