一种配置编辑过程中状态机的实现方法及系统
技术领域
本发明涉及配置管理领域,具体来讲涉及一种配置编辑过程中状态机的实现方法及系统。
背景技术
主控软件配置编辑过程中,在修改一些需要使协议实体进行状态跃迁的参数过程中,会出现因协议实体状态机异常而引发配置卡死或下发失败的时序问题。
基于MIB(Management Information Base,管理信息库)配置管理接口的协议模块在处理配置编辑过程的请求时,内部还会根据该次配置请求继续进行对应的协议状态机处理。在本次引发的配置编辑过程处理还没有完成时,由于消息异步随机调度及状态机缺乏原子化设计等原因,可能会收到后续配置编辑过程的请求,或者收到新的影响协议状态机的外部消息,在原有配置编辑过程或协议逻辑编码处理不健壮情况下,可能产生对现有配置编辑过程的完整性的影响或发生协议逻辑错误。因此,在处理配置编辑过程的请求时,如果多项操作同时出现并处理会概率触发相关异常。
如图1所示,由于MIB配置对象的复杂性,MIB代理模块针对管理对象建立了基本的操作模型和MIB状态机。常规情况下,MIB代理模块向被操作模块发起MIB请求1,被操作模块进行MIB状态机处理;同时,MIB状态机处理过程中与协议状态机发生交互嵌套,调用触发协议状态机处理状态,协议状态机处理过程中与配合模块发生交互,配合模块响应消息返回给被操作模块,被操作模块还要返回MIB请求1应答给MIB代理模块。在上述过程中,MIB代理模块还可能向被操作模块发起MIB请求2,因此上述情况下会出现如下几个问题:
1、MIB状态机与协议状态机耦合紧密,缺乏逻辑隔离,一次完整的配置编辑过程没有完成,就去响应新的可能影响协议状态机的外部消息,扰乱了一次配置编辑过程的原子性。
2、配合模块产生的消息,无法区分是否来自上次配置编辑过程的请求所依赖的返回还是新的与配置编辑过程无关的返回。
3、调度为随机调度,对后续新消息的处理缺乏可以保证原子性的调度规则。
发明内容
针对现有技术中存在的缺陷,本发明提供一种配置编辑过程中状态机的实现方法及系统,将MIB状态机和协议状态机进行逻辑隔离和原子化处理,解决MIB状态机与协议状态机相互影响并且产生冲突的问题。
为达到以上目的,本发明采取一种配置编辑过程中状态机的实现方法,包括:为每一次配置编辑过程分配序列号,被操作模块对收到的包含本次序列号的应答消息进行缓存并顺序处理,并将该次配置编辑过程中收到的其他请求消息根据类型分别缓存,被操作模块完成所依赖的全部应答消息后,调度机顺序处理缓存的其他请求消息。
在上述技术方案的基础上,所述请求消息包括协议消息和配置消息,所述应答消息包括协议应答消息和配置应答消息;且每类消息分别缓存在一个先入先出队列FIFO中。
在上述技术方案的基础上,在每次配置编辑过程中,如果被操作模块处于配置编辑态,当被操作模块向调度机返回需要等待配置应答消息时,调度机按顺序处理已缓存的被操作模块依赖的配置应答消息,新的协议消息、配置消息按类型分别缓存,并丢弃收到的协议应答消息。
在上述技术方案的基础上,在每次配置编辑过程中,如果被操作模块处于协议处理态,当被操作模块向调度机返回需要等待协议应答消息时,调度机按顺序处理已缓存的被操作模块依赖的协议应答消息,新的协议消息、配置消息按类型分别缓存,丢弃收到的配置应答消息。
在上述技术方案的基础上,只有所述被操作模块处于就绪态下,调度机从缓存中顺序获取新的请求消息,调用被操作模块进行处理;所述被操作模块完成依赖的全部应答消息后,状态跃迁到就绪态,重新开始一次新的配置编辑过程。
在上述技术方案的基础上,所述被操作模块所依赖的应答消息为一次完整的配置编辑过程所必须的应答消息,且所述应答消息是对当次请求消息进行的应答。
本发明还提供一种配置编辑过程中状态机的实现系统,基于调度机和被操作模块,所述实现系统包括:
标记生成单元,其设置于被操作模块,用于对每次配置编辑过程中的消息分配序列号;
多个FIFO,均设置于调度机,每个FIFO用于缓存一类消息;
所述调度机用于将包含本次序列号的应答消息缓存到对应的FIFO,并将该次配置编辑过程中其他请求消息分别缓存到对应的FIFO中,被操作模块完成所依赖的全部应答消息后,调度机调度新的配置编辑过程的请求消息。
在上述技术方案的基础上,所述请求消息包括协议消息和配置消息,所述应答消息包括协议应答消息和配置应答消息,且每类消息分别缓存在一个FIFO中。
在上述技术方案的基础上,在每次配置编辑过程中,如果被操作模块处于配置编辑态,当被操作模块向调度机返回需要等待配置应答消息时,调度机处理被操作模块依赖的配置应答消息FIFO中的配置应答消息,新的协议消息、配置消息按类型分别存入协议消息FIFO和配置消息FIFO中,并丢弃收到的协议应答消息。
在上述技术方案的基础上,在每次配置编辑过程中,如果被操作模块处于协议处理态,当被操作模块向调度机返回需要等待协议应答消息时,调度机处理被操作模块依赖的协议应答消息FIFO中的协议应答消息,新的协议消息、配置消息按类型分别存入协议消息FIFO和配置消息FIFO中,并丢弃收到的配置应答消息。
本发明的有益效果在于:
1、在原有系统消息调度机处理逻辑上,新增状态机的处理逻辑,将原MIB状态机和协议状态机进行逻辑隔离和原子化处理。主要在消息调度框架集中解决相关问题,减少了每个被操作模块和配合模块进行时序容错的复杂度。
2、配置编辑过程中触发的配置消息及应答消息携带该次配置编辑过程的序列号,对不同配置编辑过程的消息进行区分,一次完整的配置编辑过程中,被操作模块响应包含该次序列号的约定应答消息,配置过程和协议处理过程的原子性。
3、调度机在每次配置编辑过程中,对协议消息、配置消息、配置应答消息、协议应答消息进行识别,并分别缓存在不同的FIFO(First Input First Output,先入先出队列)中,结合应答消息的序列号,有效识别外部协议事件的扰动,从而确保整个处理逻辑的串行化。
附图说明
图1为现有技术中配置编辑过程时序图;
图2为本发明第二实施例配置编辑过程中状态机工作原理图;
图3为本发明第三实施例被操作模块接收配置消息流程图;
图4为本发明第三实施例配置编辑过程中状态机消息处理时的时序图;
图5为本发明第四实施例被操作模块接收协议消息流程图;
图6为本发明第五实施例被操作模块接收配置应答消息流程图;
图7为本发明第六实施例被操作模块接收协议应答消息流程图。
具体实施方式
以下结合附图及实施例对本发明作进一步详细说明。
第一实施例
本实施例配置编辑过程中状态机的实现方法,如图2所示,基于调度机,实现MIB代理模块、被操作模块和配合模块之间的配置编辑过程。本实施例实现方法包括:为每一次配置编辑过程分配序列号,在一次配置编辑过程中,针对配置编辑过程的请求消息,被操作模块对收到的包含本次序列号的应答消息进行缓存,并将该次配置编辑过程收到的其他请求消息根据类型分别缓存;只有被操作模块完成该次配置编辑过程所依赖的全部应答消息后,调度机顺序处理缓存的其他请求消息。
第二实施例
基于第一实施例,进一步的,上述请求消息包括协议消息和配置消息,上述应答消息包括协议应答消息和配置应答消息;并且,每一类消息分别缓存在一个FIFO中。
具体的,本实施例包括四个FIFO,分别为:
FIFO-PRO(协议消息缓存队列),用于处理常规协议消息缓存;
FIFO-CFG(配置消息缓存队列),用于处理常规配置消息缓存;
FIFO-CFG-ACK(配置应答消息缓存队列),用于一次完整的配置消息处理所依赖的回应消息缓存;
FIFO-PRO-ACK(协议应答消息缓存队列),用于一次完整的协议消息处理所依赖的回应消息缓存。
本实施例配置编辑过程中所实现的状态机的逻辑如表1所示。
表1
当前态 |
输入 |
跃迁态 |
处理逻辑 |
就绪态 |
配置消息 |
配置编辑态 |
|
就绪态 |
协议消息 |
协议处理态 |
|
就绪态 |
配置应答消息 |
就绪态 |
异常消息进行丢弃 |
就绪态 |
协议应答消息 |
就绪态 |
异常消息进行丢弃 |
协议处理态 |
配置消息 |
协议处理态 |
缓存到FIFO-CFG |
协议处理态 |
协议消息 |
协议处理态 |
缓存到FIFO-PRO |
协议处理态 |
协议应答消息 |
协议处理态 |
未完成,需要继续等待协议应答 |
协议处理态 |
配置应答消息 |
协议处理态 |
异常消息进行丢弃 |
协议处理态 |
协议应答消息 |
就绪态 |
模块处理完成 |
配置编辑态 |
协议消息 |
配置编辑态 |
缓存到FIFO-PRO |
配置编辑态 |
配置消息 |
配置编辑态 |
缓存到FIFO-CFG |
配置编辑态 |
配置应答消息 |
配置编辑态 |
未完成,需要继续等待配置应答 |
配置编辑态 |
协议应答消息 |
配置编辑态 |
异常消息进行丢弃 |
配置编辑态 |
配置应答消息 |
就绪态 |
模块处理完成 |
由于配置编辑过程中有可能影响协议状态机的运行状态,造成协议状态机需要与外部模块进行消息交互,依赖交互的结果返回后才能结束该次配置编辑过程。为了区分被操作模块是由配置触发还是外部事件主动触发,在消息汇中携带该次配置编辑过程的序列号作为标记,被操作模块收到包含本次配置编辑过程的序列号的应答消息,挂入FIFO-CFG-ACK优先处理,其他消息根据类型分别挂入不同缓存FIFO。
在本发明各实施例中,配置编辑过程是指修改设备业务配置的过程,配置编辑态是业务模块在处理配置消息过程的状态抽象,协议处理态是业务模块在处理协议消息过程的状态抽象。
被操作模块完成一次配置编辑过程所依赖的全部配置应答消息或协议应答消息,并处理完成后进入就绪态,调度机继续处理新的配置消息或协议消息。所依赖的配置应答消息或协议应答消息应该有明确的接口同步依赖设计要求,依赖回应的请求消息在配合模块必须有明确的回应消息设计;同时对非依赖应答的处理流程,设计上必须确保后续新的配置消息或协议消息可以继续处理,避免产生不良影响。例如配置修改协议信令源IP,导致协议触发路由删除和邻居down,邻居down报文的通告如果协议标准设计中不需要返回,则可以作为非依赖的回应消息对待,被操作模块应该返回处理完成,模块进入就绪态。
本实施例中,只有被操作模块处于就绪态情况下,调度机从FIFO-PRO或FIFO-CFG中获取新的请求消息,调用被操作模块进行处理,开始一次配置编辑过程。并且,就绪态下,优先选取协议消息还是配置消息不做特别约束,可以随机选取,不影响配置编辑过程的原子性。被操作模块根据请求消息的不同,跃迁到对应的状态进行处理,例如:获取配置消息,就进入配置编辑态;获取协议消息,就进入协议处理态。但是,被操作模块处于就绪态情况下,如果收到协议应答消息或配置应答消息,则将收到消息作为异常消息进行丢弃。
第三实施例
基于第二实施例,如图3所示,本实施例中被操作模块接收配置消息流程包括如下步骤:
S101.被操作模块收到配置消息。
S102.调度机判断被操作模块此时是否处于就绪态,如果否,进入S103;如果是,进入S104。
S103.调度机将配置消息缓存到FIFO-CFG中,进入S108。
S104.调度机调用被操作模块处理收到的配置消息。
S105.被操作模块判断当前流程是否需要等待配置应答消息,并将判断结果返回调度机,如果是,进入S106;如果否,进入S107。其中,将处理配置消息过程中的需求作为判断依据,如果向配合模块发出通告并依赖配合模块返回配置应答消息,则认为是需要等待配置应答消息的,否则认为不需要等待配置应答消息。
S106.调度机将被操作模块的状态设置为配置编辑态,进入S108。
S107.调度机将被操作模块的状态设置为就绪态,进入S108。
S108.返回调度机,相当于直接完成本次配置消息的原子处理,之后调度机可以进行后续消息分发。
此时,如果被操作模块处于配置编辑态,当被操作模块返回需要等待配置应答消息时,调度机优先调度被操作模块处理FIFO-CFG-ACK中的配置应答消息,新的协议消息、配置消息分别存入FIFO-PRO和FIFO-CFG中;如果收到协议应答消息,作为异常消息进行丢弃,直到被操作模块返回处理完成后,调度机将被操作模块的状态跃迁到就绪态。
如图4所示,被操作模块进入配置编辑态,在处理配置消息过程中向配合模块发起了通告消息,并且依赖配合模块应答后才能完成本次配置编辑过程的协议状态机原子逻辑,则在通告消息中携带了该次配置编辑过程的序列号,同时返回给调度机的返回值表明需要等待配置应答消息。
如果在配合模块没有回复应答消息前,此时有新的协议消息从配合模块发出给被操作模块,调度机此时将新的协议消息缓存在FIFO-PRO,暂不调度处理。
当被操作模块等待的配合模块返回配置应答消息并缓存到FIFO-CFG-ACK后,调度机调度被操作模块处理配置应答消息。
当被操作模块完成了原子操作后(也就是FIFO-CFG-ACK中缓存的配置应答消息全部处理完毕),此时被操作模块返回MIB请求1给MIB代理模块,并退出配置编辑态进入就绪态。
此后,根据消息调度机调度,进行下一个消息的处理。图3所示为响应下一个新的协议消息,被操作模块进入协议处理态,完成协议状态机逻辑,此时有新的配置编辑过程第二次请求到达被操作模块时,被调度机保护,缓存进入FIFO-CFG,进行延后处理。直到协议处理完成进入就绪态,重新进入调度机,继续后续消息处理。
第四实施例
基于第二实施例,如图5所示,本实施例中被操作模块接收配置消息流程包括如下步骤:
S201.被操作模块收到协议消息。
S202.调度机判断被操作模块此时是否处于就绪态,如果否,进入S203;如果是,进入S204。
S203.调度机将协议消息缓存到FIFO-PRO中,进入S208。
S204.调度机调用被操作模块处理收到的协议消息。
S205.被操作模块执行完协议消息结束后,判断当前流程是否需要等待协议应答消息,如果是,进入S206;如果否,进入S207。并且被操作模块将判断结果返回调度机。
S206.调度机将被操作模块的状态设置为协议处理态,进入S208。
S207.调度机将被操作模块的状态设置为就绪态,进入S208。
S208.返回调度机,相当于直接完成本次协议消息的原子处理,之后调度机可以进行后续消息分发。
此时,如果被操作模块处于协议处理态,当被操作模块返回需要等待协议应答消息时,调度机处理FIFO-PRO-ACK中的协议应答消息,此时新的协议消息、配置消息分别存入FIFO-PRO和FIFO-CFG中,如果收到配置应答消息,作为异常消息进行丢弃,直到被操作模块返回处理完成状态跃迁到就绪态。
第五实施例
基于第三实施例,如图6所示,被操作模块接收配置应答消息流程包括步骤:
S301.被操作模块收到配置应答消息。
S302.调度机判断被操作模块此时是否处于就绪态,如果是,进入S303;如果否,进入S304。
S303.调度机将将配置应答消息作为异常消息进行丢弃,进入S309。
S304.调度机判断被操作模块是否处于配置编辑态,如果否,进入S303;如果是,进入S305。
S305.调度机调用被操作模块处理收到的配置应答消息。
S306.被操作模块执行配置应答消息结束后,判断当前流程是否需要继续等待配置应答消息,如果是,进入S307;如果否,进入S308。其中,将处理配置应答消息过程中的需求作为判断依据,如果需要继续向配合模块发出通告并依赖配合模块返回配置应答消息,则需要继续等待配置应答消息。
S307.调度机将被操作模块的状态设置为配置编辑态,进入S309。
S308.调度机将被操作模块的状态设置为就绪态,进入S309。
S309.返回调度机,直接完成本次配置应答消息原子处理,之后调度机可以进行后续消息分发。
第六实施例
基于第四实施例,如图7所示,本实施例被操作模块接收协议应答消息流程包括步骤:
S401.被操作模块收到协议应答消息。
S402.调度机判断被操作模块此时是否处于就绪态,如果是,进入S403;如果否,进入S404。
S403.调度机将协议应答消息作为异常消息进行丢弃,进入S409。
S404.调度机判断被操作模块是否处于协议处理态,如果否,进入S403;如果是,进入S405。
S405.调度机调用被操作模块处理收到的协议应答消息。
S406.被操作模块执行协议应答消息结束后,判断当前流程是否需要继续等待协议应答消息,如果是,进入S407;如果否,进入S408。其中,将处理协议应答消息过程中的需求作为判断依据,如果需要继续向配合模块发出通告并依赖配合模块返回协议应答消息,则需要继续等待配置应答消息。
S407.调度机将被操作模块的状态设置为协议处理态,进入S409。
S408.调度机将被操作模块的状态设置为就绪态,进入S409。
S409.返回调度机,直接完成本次配置应答消息原子处理,之后调度机可以进行后续消息分发。
第七实施例
基于上述实施例,本实施例提出一种配置编辑过程中状态机的实现系统,基于图2中的调度机和被操作模块,实现系统包括标记生成单元和多个FIFO,标记生成单元用于对每次配置编辑过程中的消息分配序列号;多个FIFO均设置于调度机,每个FIFO用于缓存一类消息。
本实施例中包括FIFO-PRO(协议消息缓存队列)、FIFO-CFG(配置消息缓存队列)、FIFO-CFG-ACK(配置应答消息缓存队列)和FIFO-PRO-ACK(协议应答消息缓存队列)四个FIFO。其中,调度机用于将包含本次序列号的应答消息缓存到对应的FIFO,并将该次配置编辑过程的协议消息和配置消息分别缓存到FIFO-PRO和FIFO-CFG中;被操作模块从FIFO-CFG-ACK读取并完成所依赖的全部应答消息后,调度机调度新的配置编辑过程的请求消息。
本发明不局限于上述实施方式,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也视为本发明的保护范围之内。本说明书中未作详细描述的内容属于本领域专业技术人员公知的现有技术。