发明名称 基于消息重排序和消息数目检验的消息日志恢复方法
摘要 本发明公开了一种基于消息重排序和消息数目检验消息日志恢复方法。本发明采用消息重排序方法,发送进程在发送消息时以改善的逻辑时钟间接标记此消息的接收次序并将此次序保存在发送进程本地存储中。当消息接收进程发生故障时,在恢复进程控制下首先从发送进程获取已保存和未保存至日志文件的消息及消息的逻辑时钟,然后根据消息的逻辑时钟对未保存至日志文件的消息重新排序。最后把排序后的消息重新发送至故障进程,故障进程重新接收消息、处理消息,从而实现消息的重演。从而既改善了系统进程在无故障时的运行性能又简化了进程发生故障时的恢复算法。
申请公布号 CN102841840B 申请公布日期 2015.09.09
申请号 CN201210239710.0 申请日期 2012.07.11
申请人 山东大学 发明人 高胜法;蔡静;冯振
分类号 G06F11/34(2006.01)I 主分类号 G06F11/34(2006.01)I
代理机构 济南圣达知识产权代理有限公司 37221 代理人 张勇
主权项 一种基于消息重排序和消息数目检验的消息日志恢复方法,其特征是,采用消息重排序方法,把消息的接收次序保存在发送进程中;当消息接收进程发生故障时,在恢复进程控制下首先从发送进程获取已保存和未保存至日志文件的消息及消息的发送进程对应逻辑时钟,然后根据消息的逻辑时钟对未保存至日志文件的消息重新排序;最后把排序后的消息重新发送至故障进程,故障进程重新接收消息、处理消息,从而实现消息的重演,该方法的需要的普通进程工作步骤如下:步骤1、对于<img file="FDA0000760197190000011.GIF" wi="89" he="57" />k为整数变量,初始化U<sub>ik</sub>=0以及T<sub>ik</sub>为0,分别表示进程p<sub>i</sub>发送到进程p<sub>k</sub>的消息总数为0以及进程p<sub>k</sub>接收到进程p<sub>i</sub>的消息总数为0,同时令lsn=0;lsn表示接收进程保存消息的次序号;i=1,2…n;k=1,2…n;步骤2、若定时时间到,则转入3;否则转入4;步骤3、将进程p<sub>i</sub>的状态保存至决定因子文件mlog中,保存T<sub>i</sub>,U<sub>i</sub>,LC<sub>k</sub>,k=1,2…n至本地存储中,删除旧的检查点;i=1,2…n;步骤4、若进程p<sub>i</sub>将要向进程p<sub>j</sub>,j=1,2…n发送消息,则转入5;否则转入9;步骤5、若F<sub>i</sub>为1,表示进程p<sub>i</sub>出现故障且尚未恢复,此时转入9;否则进程p<sub>i</sub>正常运行,转入6;步骤6、若F<sub>j</sub>为1,表示进程p<sub>j</sub>出现故障且尚未恢复,则等待一直到F<sub>j</sub>为0为止;否则表示进程p<sub>j</sub>正常运行,此时转入7;步骤7、因进程p<sub>i</sub>将要向进程p<sub>j</sub>发送消息,LC<sub>i</sub>的值增加1,U<sub>ij</sub>的值增加1,将&lt;LC<sub>i</sub>,j,m&gt;添加到消息日志文件dfile中;步骤8.将U<sub>ij</sub>的值保存到本地存储中,并向进程p<sub>j</sub>发送消息AM(i,LC<sub>i</sub>,m),m表示消息的内容;步骤9.若进程p<sub>i</sub>接收到进程p<sub>j</sub>发送的消息,则转入10;否则转入14;步骤10、进程p<sub>i</sub>接收到进程p<sub>j</sub>发送的消息AM(j,LC<sub>j</sub>,m),需要判断这个消息是由进程p<sub>j</sub>发送的还是进程p<sub>j</sub>的恢复进程发送的;步骤11、若AM.LC<sub>j</sub>>LC<sub>j</sub>,则表示此消息是由进程p<sub>j</sub>在无故障运行时发送的,因此转入12;否则此消息由进程p<sub>j</sub>的恢复进程发送,转入14;步骤12、用AM.LC<sub>j</sub>的值更新LC<sub>j</sub>;将接收到的消息交给应用进程处理,并将&lt;j,LC<sub>j</sub>,i,lsn&gt;记录保存到内存中;因为接收到消息,LC<sub>i</sub>的值加1,并用LC<sub>i</sub>与LC<sub>j</sub>的最大值更新LC<sub>i</sub>;决定因子文件mlog保存所有消息的决定因子:&lt;j,LC<sub>j</sub>,i,lsn&gt;,其中j表示消息m的发送进程的进程标识,LC<sub>j</sub>表示发送进程发送m后的逻辑时钟,i表示接收进程p<sub>i</sub>的进程标识,lsn表示接收进程保存消息的次序号,lsn其初值为零,进程p<sub>i</sub>每保存一个消息的决定因子,lsn加一;步骤13、执行其他确定性事件;步骤14、判定进程p<sub>i</sub>是否空闲,若进程p<sub>i</sub>空闲则转入15;否则转入16;步骤15、利用空闲时间,将内存中保存的记录&lt;j,LC<sub>j</sub>,i,lsn&gt;保存到mlog中;因为接收到消息,所以T<sub>ij</sub>值加1;将T<sub>i</sub>,LC<sub>k</sub>,k=1,2…n的值保存到硬盘中,lsn的值加1;步骤16、若收到进程p<sub>k</sub>,k=1,2…n的错误标志清零消息sys_clearF(k),则转入17;否则转入18;步骤17、将0值赋给F<sub>k</sub>,表明此时进程p<sub>k</sub>正常运行;步骤18、若接收到进程p<sub>k</sub>,k=1,2…n的错误标志置1的消息sys_SetF(k),则转入19;否则转入20;步骤19、将1值赋给F<sub>k</sub>,此时表明进程p<sub>k</sub>出现故障且尚未恢复;步骤20、判断进程p<sub>i</sub>是否为故障后重启;若进程p<sub>i</sub>为故障后重启则转入21,否则转入1;步骤21、用预先保存的T<sub>i</sub>,U<sub>i</sub>以及LC<sub>k</sub>,k=1,2…n的值更新T<sub>i</sub>,U<sub>i</sub>以及LC<sub>k</sub>的值,并令lsn=0,F<sub>i</sub>=1;转入1。
地址 250061 山东省济南市历下区经十路17923号