掌桥专利:专业的专利平台
掌桥专利
首页

一种显示差异配置命令树的方法和装置

文献发布时间:2023-06-19 19:28:50


一种显示差异配置命令树的方法和装置

技术领域

本发明涉及通信技术领域,特别是涉及一种显示差异配置命令树的方法和装置。

背景技术

现有技术中,在网元管理配置的事务提交时,通常会存储该提交点所对应的全量配置,并在显示给用户某一次提交点所对应的差异配置时,将本次提交后的全量配置与提交之前的全量配置进行文本全量比较显示,如在某一次事务提交时,即使只执行了一条命令,导致一条数据配置变更,在显示时,仍需将提交前和提交后数据进行全量逐条比对,最终得到修改差异数据,在这种情况下,当数据配置量的规模足够大时,由于每次事务提交均需存储全量记录,导致占用的存储空间相对较大,且在向用户进行显示时,需进行全量比较,导致耗时较长。

且现有技术中仅仅向用户显示被修改的数据记录,而在实际使用中,网络配置数据通常具有一定的层级关系,仅仅显示修改差异数据无法确定被修改的配置数据的具体位置,如当一次事务提交修改了某节点的某一接口下的某一属性时,仅仅显示该属性的修改差异数据无法让用户清晰地知道该属性属于哪一接口,或属于哪一节点,更无法让用户知道每一次事务中执行了哪些命令,用户更无法分辨哪一次事务是用户所期盼的,或哪一次事务存在配置错误而需要进行回退。

鉴于此,克服该现有技术所存在的缺陷是本技术领域亟待解决的问题。

发明内容

本发明要解决的技术问题是现有技术中,用户无法知道每一次事务中执行了哪些命令,导致用户事务追溯或事务回退困难。

本发明采用如下技术方案:

第一方面,本发明提供了一种显示差异配置命令树的方法,包括:

在事务提交时,根据事务所修改的DB记录,生成对应的增量配置记录;

根据所述增量配置记录,获取在所述事务中被执行的底层执行命令;

并根据命令层级规则,反查所述底层执行命令的上层命令;

根据所述底层执行命令和上层命令,生成差异配置命令树,以用于向用户显示所述事务中被执行的所有命令。

优选的,所述根据所述增量配置记录,获取在所述事务中被执行的底层执行命令,具体包括:

根据所述增量配置记录中的配置类ID,获取所述配置类ID所对应的所有可能执行命令;

在所述配置类ID所对应的DB记录中,根据可能执行命令的显示条件,找到对应的参数,判断所述参数是否满足所述显示条件;

若所述参数满足所述显示条件,则该可能执行命令在所述事务中被执行,该可能执行命令为一条底层执行命令。

优选的,所述根据命令层级规则,反查所述底层执行命令的上层命令,具体包括:

以上一次查找得到的父命令作为下一次查找时的子命令,根据命令层级规则,查找所述子命令的父命令,所查找得到的父命令即为所述底层执行命令的一条上层命令,直至无法查找得到对应的父命令时,得到所述底层执行命令的所有上层命令;其中,在第一次查找时,以底层执行命令作为子命令,查找对应的父命令。

优选的,所述根据命令层级规则,查找所述子命令的父命令,具体包括:

根据命令层级规则,获取所述子命令的所有可能父命令;

根据父子参数继承规则,从可能父命令的DB记录中获取对应的父参数,从所述子命令的DB记录中获取对应的子参数,判断所述子参数和父参数是否一致;

若判断得到所述子参数与父参数一致,则该可能父命令为所述子命令的父命令。

优选的,所述根据所述底层执行命令和上层命令,生成差异配置命令树,具体包括:

针对所述底层执行命令和上层命令,根据命令的表达式参数获取规则,获取对应的参数;并根据命令的表达式构建规则,使用所述参数构建对应的命令行表达式;

根据各命令之间的父子关系,以父命令的命令行表达式作为父节点,以子命令的命令行表达式作为子节点,建立树状分支,从而生成差异配置命令树。

优选的,所述根据命令的表达式参数获取规则,获取对应的参数;并根据命令的表达式构建规则,使用所述参数构建对应的命令行表达式,具体包括:

找到所述命令所对应的记录操作码,根据所述记录操作码获取所述命令的操作类别;

若所述命令的操作类别为删除配置数据或新建配置数据,则根据命令的表达式参数获取规则,从所述增量配置记录中获取对应的修改后参数;根据所述表达式构建规则和所述修改后参数,构建所述命令的命令行表达式;

若所述命令的操作类别为更新配置数据,则根据命令的表达式参数获取规则,从所述增量配置记录中获取对应的修改后参数和修改前参数;根据所述表达式构建规则、修改前参数和所述修改后参数,构建所述命令的命令行表达式。

优选的,所述方法还包括:

在进行事务回退时,根据所述事务的增量配置记录,生成对应的回退配置记录;

并根据所述事务的差异配置命令树,生成对应的回退差异配置命令树,以便于根据所述回退差异配置命令树,确定对应被修改配置数据的具体位置。

优选的,所述根据所述事务的差异配置命令树,生成对应的回退差异配置命令树,具体包括:

当进行整体事务回退时,以所述事务的差异配置命令树作为所述回退差异配置命令树,并添加相应的回退标记;

当进行部分事务回退时,将所述事务的差异配置命令树中,所回退的部分分支作为所述回退差异配置命令树,并添加相应的回退标记。

优选的,所述命令层级规则存储在XML文件中,其中,子命令作为可能父命令的下级标签存储。

第二方面,本发明还提供了一种显示差异配置命令树的装置,用于实现第一方面所述的显示差异配置命令树的方法,所述装置包括:

至少一个处理器;以及,与所述至少一个处理器通信连接的存储器;其中,所述存储器存储有可被所述至少一个处理器执行的指令,所述指令被所述处理器执行,用于执行第一方面所述的显示差异配置命令树的方法。

第三方面,本发明还提供了一种非易失性计算机存储介质,所述计算机存储介质存储有计算机可执行指令,该计算机可执行指令被一个或多个处理器执行,用于完成第一方面所述的显示差异配置命令树的方法。

本发明通过增量配置记录,反向推导得到事务的各执行命令,并生成对应的命令行表达式和差异配置命令树,使通过所述差异配置命令树,用户能够清晰地确定事务的执行过程,从而便于执行配置数据回溯或数据回退。

附图说明

为了更清楚地说明本发明实施例的技术方案,下面将对本发明实施例中所需要使用的附图作简单地介绍。显而易见地,下面所描述的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。

图1是本发明实施例提供的一种显示差异配置命令树的方法的流程示意图;

图2是本发明实施例提供的一种显示差异配置命令树的方法中的增量配置记录的示意图;

图3是本发明实施例提供的一种显示差异配置命令树的方法中将差异配置命令树显示给用户的UI示意图;

图4是本发明实施例提供的一种显示差异配置命令树的方法的流程示意图;

图5是本发明实施例提供的一种显示差异配置命令树的方法中命令显示信息的示意图;

图6是本发明实施例提供的一种显示差异配置命令树的方法的流程示意图;

图7是本发明实施例提供的一种显示差异配置命令树的方法中命令层级规则的示意图;

图8是本发明实施例提供的一种显示差异配置命令树的方法中差异配置命令树的示意图;

图9是本发明实施例提供的一种显示差异配置命令树的方法的流程示意图;

图10是本发明实施例提供的一种显示差异配置命令树的装置的示意图。

具体实施方式

为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。

此外,下面所描述的本发明各个实施方式中所涉及到的技术特征只要彼此之间未构成冲突就可以相互组合。

实施例1:

在现有技术中,针对每一次事务通常仅仅向用户显示被修改的数据记录,无法让用户知道每一次事务中执行了哪些命令,用户更无法分辨哪一次事务是用户所期盼的,或哪一次事务存在配置错误而需要进行回退,导致用户事务追溯或事务回退困难。为了解决此问题,本发明实施例1提供了一种显示差异配置命令树的方法,如图1所示,包括:

在步骤201中,在事务提交时,根据事务所修改的DB记录,生成对应的增量配置记录。

其中,网络配置数据根据所属的配置类存储在多个DB记录中,每一个配置类对应一份DB记录(即数据库中的记录),用于存储该配置类的所有参数,且每一个配置类对应一个配置类ID,所述事务提交用于对DB记录进行修改,所述增量配置记录如图2所示,存储有相应的配置类ID、修改前数据、修改后数据和对应的记录操作码,一次事务提交可能对多份DB记录进行修改,每对DB记录中的一条配置数据进行了修改时,生成一条增量配置记录,在该增量配置记录中携带DB记录所对应的配置类ID,即在一次事务提交时,可能生成多条增量配置记录。

在步骤202中,根据所述增量配置记录,获取在所述事务中被执行的底层执行命令。

所述底层执行命令为所述事务实际执行的,最终起到配置数据修改作用的命令,如图3所示,其中,router isis 1仅仅起到定位作用,执行该条命令后,对应DB记录中的参数值不发生变化,故其不是底层执行命令。而命令redistribute bgp level-1在被执行后,对应DB记录中的参数值发生变化,则该命令为一条底层执行命令。

在步骤203中,并根据命令层级规则,反查所述底层执行命令的上层命令。

其中,所述上层命令包括底层执行命令的直接上层命令,即父命令,以及间接上层命令,如所述父命令的父命令或更上层命令等。

所述命令层级规则是由本领域技术人员根据网络配置数据之间的层级关系分析得到并预先存储的。

在步骤204中,根据所述底层执行命令和上层命令,生成差异配置命令树,以用于向用户显示所述事务中被执行的所有命令。

其中,当一次事务提交对应多条增量配置记录时,根据每一条增量配置记录,获取事务的所有底层执行命令,并根据所有底层执行命令和底层执行命令的上层命令,生成差异配置命令树。

所述差异配置命令树中的命令即为事务提交时所执行的所有命令,且所述差异配置命令树中各节点之间的关系即各命令之间的层级关系。

从而能够使用户通过所述差异配置命令树直观地看到事务所执行的命令以及命令之间的关系,进而能够确定该次事务中具体生效的配置。

作为一种可选的实施方式,在所述差异配置命令树的每一节点,存储对应命令的命令行表达式,所述差异配置命令树可以命令行表达式的方式在交互界面显示,如图3所示。

由于本实施例通过增量配置记录,反向推导得到事务的各底层执行命令,通过底层执行命令进行反向推导得到上层命令,故推导得到的必然是事务执行中生效的命令,事务执行中的未执行命令和无效命令不会被推导得到,从而能够让用户直观地确认事务的生效命令。

本实施例通过增量配置记录,反向推导得到事务的各执行命令,并生成对应的命令行表达式和差异配置命令树,使通过所述差异配置命令树,用户能够清晰地确定事务的执行过程,从而便于执行配置数据回溯或数据回退。且由于本实施例以差异配置命令树的形式表现了事务中各命令的关系,当一次事务中执行的命令量足够多,而事务配置中的某一条命令出现错误时,无需进行事务的整体回退,而是可对该命令所在分支和下级分支进行回退,即仅对事务进行部分回退,以修复错误。

相对于现有技术而言,现有技术在每次事务提交时存储全量配置,要显示某次事务的配置差异时(即使只有一条命令配置变更),需要全量逐条比较命令行,在大规模配置数据的场景下性能比较差;而本实施例采用根据增量配置差异存储,空间占用小且显示差异配置性能较高。

本实施例还针对上述步骤202提供了一种可选的实施方式,即所述根据所述增量配置记录,获取在所述事务中被执行的底层执行命令,如图4所示,具体包括:

在步骤301中,根据所述增量配置记录中的配置类ID,获取所述配置类ID所对应的所有可能执行命令。

其中,每一个配置类对应一份DB记录,一份DB记录存储在相应数据表中,当数据表中的数据被修改时,则根据所述数据表,获取对应的配置类ID,将所述配置类ID携带在所述增量配置记录中。

在步骤302中,在所述配置类ID所对应的DB记录中,根据可能执行命令的显示条件,找到对应的参数,判断所述参数是否满足所述显示条件。

在步骤303中,若所述参数满足所述显示条件,则该可能执行命令在所述事务中被执行,所述可能执行命令为一条底层执行命令。

其中,每一个配置类的可能执行命令可从各命令的命令显示信息中获取,具体的,将所有命令的命令显示信息存储在相应的XML文件中,其中,每一条命令的命令显示信息包括:命令本身、命令所对应的配置类ID、命令的显示条件、命令的表达式参数获取规则、命令的表达式构建规则和父子参数继承规则。

从而可通过命令所对应的配置类ID,找到对应的可能执行命令,每个配置类ID所对应的可能执行命令为能够对该配置类中的参数进行修改的所有命令。

在实际使用中,所述事务具体执行了哪一条命令或哪几条命令还需根据DB记录中的参数进行具体判断,即上述步骤302和步骤303。

所述显示条件用于判断所述可能执行命令是否被执行生效,作为一种可选的实施方式,所述显示条件包括参数ID和预设参数值,根据所述参数ID,从所述DB记录中获取对应的参数,判断所获取参数的参数值是否为预设参数值,若为预设参数值,则满足所述显示条件,否则,不满足。即当所述DB记录中的对应参数满足所述显示条件中的预设参数值时,说明所述可执行命令被执行生效。所述显示条件是由本领域技术人员根据相应的命令分析得到,并预先存储在命令显示信息中的。

所述命令显示信息以图5所示的表现形式进行存储或呈现,其中,ShowRunCmd标签中存储命令本身,标签classId中存储所述命令的配置类ID,标签additionalConditions中存储命令的显示条件,标签clueExpressionParaList中存储表达式参数获取规则,标签clueExpression中存储表达式构建规则,标签obtainContextInfo用于存储父子参数继承规则。

其中,所述additionCondions中的elementId为参数ID,用于根据所述参数ID从DB记录中查找得到对应的参数,所述vauleStr为所述参数的目标值,若从DB记录中查找得到的参数的值与所述目标值一致,则满足所述显示条件。所述clueExpressionParaList、clueExpressionList和obtainContextInfo将在后续实施例中进行详细阐述,在此不加以赘述。

本实施例还针对上述步骤203,提供了一种可选的实施方式,具体包括:

以上一次查找得到的父命令作为下一次查找时的子命令,根据命令层级规则,查找所述子命令的父命令,所查找得到的父命令即为所述底层执行命令的一条上层命令,直至无法查找得到对应的父命令时,得到所述底层执行命令的所有上层命令;其中,在第一次查找时,以底层执行命令作为子命令,查找对应的父命令。

本实施方式可视作不断通过子命令查找父命令的迭代过程,在此需要说明的是,本实施例所述的“上一次查找”和“下一次查找”相对两次相邻的查找过程而言的,例如,截止某个时间为止已经进行了三次查找,在此为描述方便,将这三次查找按照时间顺序称为:第一次查找、第二次查找和第三次查找,则第一次查找为第二次查找的“上一次查找”,第二次查找为第一次查找的“下一次查找”,第二次查找为第三次查找的“上一次查找”,第三次查找为第二次查找的“下一次查找”。

在实际使用中,一条子命令可能对应多条可能的父命令,为了分辨在该次事务中,哪一个命令才是子命令的父命令,本实施例还提供了以下优选的实施方式,即所述根据命令层级规则,查找所述子命令的父命令,如图6所示,具体包括:

在步骤401中,根据命令层级规则,获取所述子命令的所有可能父命令。

所述命令层级规则是由本领域技术人员根据网络配置数据之间的层级关系分析得到并预先存储的,所述命令层级规则存储在XML文件中,其中,子命令作为可能父命令的下级标签存储。

如图7所示,每一个ShowRunCmd标签代表一条命令,标签中的name的值代指具体的命令,其中,命令ip vpn lp-83004f作为interface loopback-830006的下级标签存储,即命令ip vpn lp-83004f为interface loopback-830006的子命令,命令interfaceloopback-830006为命令ip vpn lp-83004f的可能父命令。

在步骤402中,根据父子参数继承规则,从可能父命令的DB记录中获取对应的父参数,从所述子命令的DB记录中获取对应的子参数,判断所述子参数和父参数是否一致。

所述父子参数继承规则包括父参数的参数ID和子参数的参数ID,从而通过参数ID进行参数的获取。

命令的DB记录为命令所属的配置类所对应的DB记录。从父命令所属的配置类所对应的DB记录中获取父参数,从子命令所属的配置类所对应的DB记录中获取子参数。

在步骤403中,若判断得到所述子参数与父参数一致,则该可能父命令为所述子命令的父命令。

当子参数和父参数一致时,说明子命令从父命令处继承了对应的参数值,即可确定所述子命令的父命令。

其中,在上述文中已提及,所述父子参数继承规则以标签obtainContextInfo的形式存储在XML文件中,所述obtainContextInfo中还存储有下级标签obtainContext,每一条obtainContext代表一条父子参数继承规则,仅当父命令与子命令满足obtainContextInfo中的所有父子参数继承规则时,认为满足父子关系,得到对应的父命令,所述obtainContext中的fatherElementId为父参数ID,elementId为子参数ID,从而根据父参数ID和子参数ID获取对应的参数。

作为一种可选的实施方式,所述根据所述底层执行命令和上层命令,生成差异配置命令树,具体包括:

针对所述底层执行命令和上层命令,根据命令的表达式参数获取规则,获取对应的参数;并根据命令的表达式构建规则,使用所述参数构建对应的命令行表达式;

根据各命令之间的父子关系,以父命令的命令行表达式作为父节点,以子命令的命令行表达式作为子节点,建立树状分支,从而生成差异配置命令树。

其中,在上述文中已提及,所述表达式参数获取规则以标签clueExpressionParaList的形式存储在XML文件中,所述表达式构建规则以标签clueExpressionList的形式存储在XML文件中,所述标签clueExpressionParaList中存储有下级标签clueExpressionPara,每一条clueExpressionPara代表一条表达式获取规则,标签中id代表参数用于构建表达式时所使用的id号,的cmdParaName代表参数名称,elementId代表参数ID,当elementId为0时,直接使用参数名称参与表达式构建,当elementId不为0时,从DB记录中获取所述参数ID所对应的参数,使用获取到的参数参与表达式构建。

所述clueExpressionList中存储有下级标签clueExpression,每一条clueExpression代表一条表达式构建规则,根据该表达式构建规则构建得到一条命令行表达式,通常情况下,一条命令仅对应一条表达式构建规则,即clueExpressionList仅存储一条clueExpression,clueExpression中将参数用于构建表达式时所使用的id按照预设规则排列,按照所述clueExpression标签中的expression进行表达式的构建。

举例而言,如图5所示,clueExpressionParaList中存储了两条clueExpressionPara,根据cmdParaName得到两个参数,即ipv6和enable,由于其elementId均为0,故无需从DB记录中获取对应参数值,而在clueExpression中的expression为“1 2”,则将所述ipv6和enable按照expression构建得到命令行表达式“ipv6 enable”。

作为一种优选的实施方式,当为底层执行命令构建命令行表达式时,所述根据命令的表达式参数获取规则,获取对应的参数;并根据命令的表达式构建规则,使用所述参数构建对应的命令行表达式,具体包括:

找到所述命令所对应的记录操作码,根据所述记录操作码获取所述命令的操作类别;

若所述命令的操作类别为删除配置数据或新建配置数据,则根据命令的表达式参数获取规则,从所述增量配置记录中获取对应的修改后参数;根据所述表达式构建规则和所述修改后参数,构建所述命令的命令行表达式;

若所述命令的操作类别为更新配置数据,则根据命令的表达式参数获取规则,从所述增量配置记录中获取对应的修改后参数和修改前参数;根据所述表达式构建规则、修改前参数和所述修改后参数,构建所述命令的命令行表达式。

其中,增量配置记录中的修改后参数与DB记录中的参数一致,即当命令的操作类别为删除配置数据或新建配置数据时,其命令行表达式构建过程与根据表达式构建规则和表达式参数获取规则生成命令行表达式的过程一致。当命令的操作类别为更新配置数据时,为了向用户显示事务提交前后参数值的变化,使用修改后参数和修改前参数均参与命令行表达式构建,其一种具体的实现方式为:生成两条命令行表达式,一条命令行表达式使用修改前参数,一条命令行表达式使用修改后参数,并使用操作类别对两条命令行表达式加以区分,举例而言,修改前参数的值为32,修改后参数的值为64,则生成两条命令为distance 32和distance 64,并在两条命令前添加“+”“-”号加以区分,其中,“-”代表删除配置数据,“+”代表新建配置数据,如图3所示的,“-distance32+distance 64”代表将参数的值由32更新至64。

在实际情况中,不仅仅事务的提交会修改配置数据,事务的回退同样会修改配置数据,为了便于数据追溯,本实施还提供了以下优选的实施方式,即所述方法还包括:

在进行事务回退时,根据所述事务的增量配置记录,生成对应的回退配置记录。

并根据所述事务的回退差异配置命令树,生成对应的回退差异配置命令树,以便于用户根据所述回退差异配置命令树中的命令,判断事务是否正确回退。

其中,所述回退差异配置命令树可以是在事务的差异配置命令树的基础上添加回退标记,使用户知晓其为事务回退操作,且能够确定被修改的配置数据的具体位置。

所述根据所述事务的差异配置命令树,生成对应的回退差异配置命令树,具体包括:

当进行整体事务回退时,以所述事务的差异配置命令树作为所述回退差异配置命令树,并添加相应的回退标记;

当进行部分事务回退时,将所述事务的差异配置命令树中,所回退的部分分支作为所述回退差异配置命令树,并添加相应的回退标记。

其中,由于本实施例显示了事务提交的差异配置命令树,使一次事务提交中对应的多条增量配置记录能够以对应的命令表达式的形式显示,故在进行事务回退时,可仅对其中的部分分支进行回退,如图8所示,在进行事务回退时,可仅对command5-command3-command1该分支进行回退,在进行回退时,可直接根据该分支中的各命令所对应的增量配置记录进行参数的回退修改,也可根据分支中的底层执行命令,生成对应的回退表达式,并按照分支中各命令的关系,进行执行,举例而言,当该分支中的command1为底层执行命令时,在进行回退时,根据command1逆向构造回退表达式,并作为一次事务进行提交,如command1的操作类别为更新配置数据,即将相应参数a的值由num1更新为num2,则在构造回退表达式时,将原表达式中的num1和num2参数所在位置进行替换,从而生成一条回退表达式,依次执行command5、command3和所述回退表达式,即可对该分支进行回退,同时,该回退操作也作为一次事务提交,生成对应的差异配置命令树,以便于用户追溯数据或再度执行数据回退操作。

实施例2:

本发明基于实施例1所描述的方法基础上,结合具体的应用场景,并借由相关场景下的技术表述来阐述本发明特性场景下的实现过程。

以网络配置数据修改为应用场景,在事务修改DB记录时,对应根据所修改的记录和DB记录所对应的配置类,生成增量配置记录,所述增量配置记录中携带配置类ID,即如图2中的classid。

根据所述classid在XML文件中,找到对应的可能执行命令,如classid为0x830001时,找到命令显示信息中标签classId为830001的命令,即为可能执行命令,根据可能执行命令的显示条件,从该配置类ID所对应的DB记录中,查找对应的参数,如当该配置类ID为0x830001时,所对应DB记录所在数据表为table1,显示条件如图5所示,显示条件中的elementId为17时,从table1中获取id为17的参数,判断该参数的值是否与显示条件中的valueStr的值一致,如图5所示,即为判断table1中id为17的参数的值是否为2,若该参数值为2,则该可能执行命令在该次事务中被执行,为一条底层执行命令。

根据XML文件中的命令行层级规则,查找底层执行命令的所有可能父命令,如图7所示,若存在一条ipv6 enable lp-83001b的底层执行命令,其被作为showRunCmd下级标签的name值包含在另一个showRunCmd上级标签中,则该上级标签showRunCmd中的name值interface loopback-830006即为该底层执行命令的可能父命令,再根据底层执行命令的命令显示信息中obtainContextInfo标签,以其下级标签中obtainContext中的fatherElementId作为父参数Id,以elementId作为子参数Id,根据可能父命令的命令显示信息,获取对应的classId标签,即为配置类ID,根据配置类ID获取可能父命令的DB记录,从DB记录获取id为父参数Id的参数,从子命令的DB记录中获取id为子参数Id的参数,判断两参数的值是否一致,若一致,则该可能父命令即为该底层执行命令的父命令。

再以该父命令作为子命令,按照上述构思,查找对应的父命令(每一次查找得到的父命令均属于底层执行命令的上层命令),重复该迭代过程,直至无法查找到对应的父命令。找到该事务的所有增量配置记录所对应的所有底层执行命令和所有上层命令。

针对事务所对应的每一条命令(包括底层执行命令和上层命令),生成对应的命令行表达式,其中,对于底层执行命令,还从增量配置记录中获取对应的记录操作码,一个记录操作码对应一个操作类别,若根据记录操作码得到操作类别为更新配置数据,则生成两条命令行表达式,否则,按照常规命令生成一条命令行表达式。

所述按照常规命令生成一条命令行表达式具体为:根据命令的命令显示信息中的标签clueExpressionParaList和标签clueExpressionList,根据clueExpressionParaList,从命令的DB记录中查找对应参数,并根据clueExpressionList,构建命令行表达式,如图5所示,将clueExpressionParaList中的ipv6和enable按照clueExpressionList构建得到命令行表达式“ipv6 enable”。当命令为底层执行命令,且命令的操作类别为更新配置数据时,如根据clueExpressionParaList和clueExpressionList构建得到命令表达式为“distance k”,其中,参数k在clueExpressionParaList中的elementId不为0,则根据elementId从DB记录中获取对应参数值(也可从增量配置记录中获取),即为修改后参数值,并从增量配置记录中获取修改前参数,如修改前参数的值为32,修改后参数的值为64,则生成两条命令为distance 32和distance 64,并在两条命令前添加“+”“-”号加以区分。

使用命令的命令行表达式作为差异配置命令树的节点,使用命令之间的父子关系构建分支,形成差异配置命令树。

举例而言,若一次事务对应两条增量配置记录,第一条增量配置记录的底层执行命令为Command1,该底层执行命令的父命令为Command3,Command3的父命令为Command5,在Command5的上层,无法查找到对应的父命令。而另一条增量配置记录的底层执行命令为Command2,该底层执行命令的父命令为Command4,Command4的父命令也为Command5,则根据命令间的父子关系,生成如图8所示的差异配置命令树,其中,每个节点挂载对应命令的命令行表达式。

实施例3:

本发明基于实施例1所描述的方法基础上,结合具体的应用场景,并借由相关场景下的技术表述来阐述本发明特性场景下的实现过程。

以网络配置数据修改为应用场景,在事务修改DB记录时,对应根据所修改的记录和DB记录所对应的配置类,生成增量配置记录,所述增量配置记录中携带配置类ID,将事务提交产生的增量配置记录通过表和记录形式进行存储,表中具体记录是该类配置过程产生的详细信息。

根据增量配置记录生成差异配置命令树的过程具体包括:

解析命令行XML文件中showRunCmdOrder字段和showRunCmdList字段;其中,解析showRunCmdOrder字段用于得到命令层级规则;梳理出最顶层命令链表及顶层命令下挂载子命令层级,为后面生成差异配置命令树做准备;解析showRunCmdList字段用于得到命令显示信息,在此阶段主要获取以下信息:命令本身、命令的配置类ID、命令的显示条件、命令的表达式参数获取规则、命令的表达式构建规则和父子参数继承规则。

在此阶段同时建立配置类和命令的对应关系,将对应相同配置类命令行挂载到统一配置类节点下面,即:配置类对应命令行链表,链表中节点挂载该命令的命令行显示节点指针。

根据所述命令层级规则和所述命令显示信息,结合DB记录和增量配置记录,生成差异配置命令树,具体的:

根据增量配置记录生成底层执行命令。根据底层执行命令递归查找父命令,根据各命令的命令显示信息,生成命令行表达式,根据命令的父子关系生成差异配置命令树,其中,在差异配置命令树的各节点中挂载各命令的命令行表达式。

作为一种更细化的步骤过程,所述生成差异配置差异树的过程具体包括:

1、根据增量配置记录获取对应配置类ID。

2、在组件管理数据区存储配置类和对应命令行链管理树中,根据配置类ID找到该类对应命令链表,即获取所述配置类ID所对应的所有可能执行命令,所述命令链表即为存储所述配置类ID的所有可能执行命令的链表。

3、遍历命令链表,根据各命令的显示条件,从DB记录中获取对应参数,判断所述参数是否满足显示条件,从而判断各命令是否被执行,若命令被执行,则作为一条底层执行命令,生成对应的命令表达式字符串(即命令行表达式)。

4、根据3中生成的命令表达式字符串、以及对应增量配置记录中的记录操作码,在差异配置命令树中,构建命令行显示节点。

5、根据命令层级规则判断当前命令是否有可能父命令,如果没有则到此结束,生成一条孤节点差异链。

6、若判断得到当前命令存在可能父命令,则根据命令显示信息中的父子参数继承规则,获取对应的父参数和子参数,并根据父参数和子参数确定对应的父命令。其中,在查找父参数时,先先在CDB(当前未提交配置)中查找,如果查找不到,再尝试从RDB(已提交配置)中查找。

7、根据父命令的命令显示信息,构建命令表达式字符串,命令表达式字符串以及对应增量配置记录中的记录操作码,在差异配置命令树中,构建父命令行显示节点。

8、执行上述步骤4-7,递归查找,最终根据步骤1中增量配置记录生成一条差异链;

作为一种优选的实施方式,如果1中的记录操作码是UPDATE(更新操作),则在对应节点中包含两条命令行表达式,一条命令行表达式中携带修改前参数,另一条命令行表达式中携带修改后参数。也可对应在配置差异命令树中生成两条差异链:更新前记录生成一条差异链,更新后记录生成一条差异链,这两条差异链对应同一条命令。如图9所示。

其中,所述判断所述参数是否满足显示条件,从而判断各命令是否被执行,具体包括:

1、通过增量配置记录和命令行显示信息,计算出一条符合显示条件的命令行字符串,主体流程:

2、通过命令行显示信息,判断当前命令行生成字符串是走框架流程还是用户自定义实现。

3、若所述命令行生成字符串由用户自定义实现和业务强相关,则根据业务判断所述命令是否被执行。

4、若所述命令行生成字符串由框架实现,命令行显示信息中保存当前命令的显示条件,按显示条件从DB中获取对应的值,将记录中获取的值与显示条件进行比较,若不符合显示条件则跳过,当前命令不是已执行命令。

5、若符合显示条件,遍历命令行元素链表,从记录中获取元素值。

6、依次判断元素值和默认值是否相等,将默认值返回标记写入元素节点。

7、依次判断元素合法性,元素值是否在合法范围内等,将合法性返回标记写入元素节点。

8、所有元素遍历完成后,元素节点是否是默认值标记位及是否是合法节点标记位均写入元素节点。

9、根据预处理阶段解析资源文件存储在命令行显示节点中的命令行表达式,通过命令行元素链表找到一条符合显示条件的表达式。

在生成差异配置命令树后,所生成的每一个差异配置命令树可对应一个回退点,以便于后续用户可能进行事务回退,具体的:每次事务配置提交,根据本次增量配置生成回退点,回退点可以配置标签,用来标识本次提交,方便用户识别回退点;为用户的回退操作也生成对应回退命令配置树和回退点;也可对应差异配置命令树的每一条分支,对应一个回退点,便于用户进行事务的部分回退。

一次提交生成以本次COMMIT_ID命令的回退数据库文件,其中包含N张表,每张表以配置类ID命名,每张表存储记录是该配置类的一条实例化配置,存储配置变更前后量部分数据;执行回退操作时,则使用配置前记录打包发送给业务;在显示差异时,配置前后两部分数据都用来生成可读字符表达式,显示差异变更;每条记录前面预留FLAG字段,存储本次记录对应的操作类型:创建/更新/删除。

若用户根据差异配置命令树,判断需要对该次事务进行回退时,如用户做了三次配置提交,依次形成a,b,c三个连续回退点,进行第三次配置提交时发现c配置有错误或者不是用户期望配置,用户想回退到c提交之前配置。则可以通过执行配置回退操作,回退到b或者a;用户执行配置回退后会生成一个新的回退点d,事务回退操作具体包括:

1:用户使用ROLLBACK命令指定回退点进行回退。

2:配置管理框架判断回退点合法性。

3:根据回退点,在管理数据区中获取该回退点对应的所有配置类信息。

4:依次遍历配置类,根据类ID得到该类的组件订阅信息(这部分在组件启动过程中,根据组件订阅关系得到),最终得到一个以组件为KEY的分发树链,每个组件是一个分发树节点,挂载关心的类ID,即:每个分发树节点下挂在分发类节点。

5:按组件定义类下发顺序,调整分发节点中类顺序,存储在分发树节点中。

6:遍历分发链,根据类ID从配置回退数据库中获取记录,挂在到分发树的分发类节点上(记录指针);分发链如果为空,说明没有组件订阅该回退数据,直接返回成功。

7:遍历分发树,按分发树节点中类顺序进行数据分发;根据类ID得到分发树节点下的分发类节点(存储从回退数据库中得到数据记录指针/记录个数)。

8:依次偏移分发类节点记录,判断单条记录操作码(在配置回退记录预留字段),如果为更新操作则偏移类长度,得到配置变更前数据打包发送给组件;

9:等待业务回响应,返回成功,则表明本次回退生效。

10:配置管理框架,根据配置回退数据为本次回退操作同样生成回退点。

实施例3:

如图10所示,是本发明实施例的显示差异配置命令树的装置的架构示意图。本实施例的显示差异配置命令树的装置包括一个或多个处理器21以及存储器22。其中,图10中以一个处理器21为例。

处理器21和存储器22可以通过总线或者其他方式连接,图10中以通过总线连接为例。

存储器22作为一种非易失性计算机可读存储介质,可用于存储非易失性软件程序和非易失性计算机可执行程序,如实施例1中的显示差异配置命令树的方法。处理器21通过运行存储在存储器22中的非易失性软件程序和指令,从而执行显示差异配置命令树的方法。

存储器22可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件、闪存器件、或其他非易失性固态存储器件。在一些实施例中,存储器22可选包括相对于处理器21远程设置的存储器,这些远程存储器可以通过网络连接至处理器21。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。

所述程序指令/模块存储在所述存储器22中,当被所述一个或者多个处理器21执行时,执行上述实施例1中的显示差异配置命令树的方法。

值得说明的是,上述装置和系统内的模块、单元之间的信息交互、执行过程等内容,由于与本发明的处理方法实施例基于同一构思,具体内容可参见本发明方法实施例中的叙述,此处不再赘述。

本领域普通技术人员可以理解实施例的各种方法中的全部或部分步骤是可以通过程序来指令相关的硬件来完成,该程序可以存储于一计算机可读存储介质中,存储介质可以包括:只读存储器(ROM,Read Only Memory)、随机存取存储器(RAM,Random AccessMemory)、磁盘或光盘等。

以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。

技术分类

06120115919341