一种处理磁盘树节点的方法、装置和存储介质与流程

文档序号:16390205发布日期:2018-12-22 11:19阅读:188来源:国知局
一种处理磁盘树节点的方法、装置和存储介质与流程

本发明涉及计算机技术,尤指一种处理磁盘树节点的方法、装置和存储介质。

背景技术

主流的服务器虚拟化平台中,为虚拟机创建快照后(以单磁盘虚拟机为例),会基于虚拟机源磁盘,创建链接到该磁盘的新磁盘节点,虚拟机经过多次创建快照,恢复快照后,虚拟机的磁盘节点会变成树状结构,每一个磁盘节点都会占用存储空间,如图1所示,该树状结构的每一个节点最多只有一个父节点,因为要保证虚拟机磁盘数据的完整性,因此删除s节点前,需要将s节点中的数据合并到其父或子节点以后再删除并重置节点的父子关系;

一般情况下是禁止删除中间位置的节点,有时候根据用户需要,需要删除中间位置的节点,现有的公开技术中没有删除处于中间位置的节点的方法。



技术实现要素:

为了解决上述技术问题,本发明提供了一种处理磁盘树节点的方法、装置和存储介质,能够删除磁盘树指定节点。

为了达到本发明目的,本发明提供了一种处理磁盘树节点的方法,所述方法包括:

判断出所述节点不是活跃节点后,获取所述节点的子节点数;

根据所述子节点数和预设的策略处理所述节点。

进一步地,所述根据所述子节点数和预设的策略处理所述节点,包括:

当所述子节点数为零时,删除所述节点。

进一步地,所述根据所述子节点数和预设的策略处理所述节点,包括:

当所述子节点数为大于等于一时,根据是否存在父节点和所述子节点数处理所述节点。

进一步地,所述根据是否存在父节点和所述子节点数处理所述节点,包括:

当所述父节点存在时,将所述节点中的数据合并到所述父节点,删除所述节点;

当所述父节点不存在,且当所述子节点个数为一时,将所述节点中的数据合并到所述子节点,删除所述节点;

当所述父节点不存在,且当所述子节点个数大于一时,终止删除所述节点。

进一步地,所述数据合并之前,还包括:判断存储剩余空间是否大于所述数据占用的空间,如果大于则进行数据合并。

为了达到本发明目的,本发明还提供了一种处理磁盘树节点的装置,所述装置包括获取模块和处理模块,其中:

所述获取模块,用于:判断出所述节点不是活跃节点后,获取所述节点的子节点数;

所述处理模块,用于:根据所述子节点数和预设的策略处理所述节点。

进一步地,所述处理模块根据所述子节点数和预设的策略处理所述节点,包括:

当所述子节点数为零时,所述处理模块删除所述节点。

进一步地,所述处理模块根据所述子节点数和预设的策略处理所述节点,包括:

当所述子节点数为大于等于一时,所述处理模块根据是否存在父节点和所述子节点数处理所述节点。

进一步地,所述处理模块根据是否存在父节点和所述子节点数处理所述节点,包括:

当所述父节点存在时,所述处理模块将所述节点中的数据合并到所述父节点,删除所述节点;

当所述父节点不存在,且当所述子节点个数为一时,所述处理模块将所述节点中的数据合并到所述子节点,删除所述节点;

当所述父节点不存在,且当所述子节点个数大于一时,所述处理模块终止删除所述节点。

为了达到本发明目的,本发明还提供了一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现上述方法的步骤。

与现有技术相比,本发明包括判断出所述节点不是活跃节点后,获取所述节点的子节点数;根据所述子节点数和预设的策略处理所述节点。相比常规的禁止删除中间位置的节点,根据用户需要,能够删除需要删除的中间位置的节点。

本发明的其它特征和优点将在随后的说明书中阐述,并且,部分地从说明书中变得显而易见,或者通过实施本发明而了解。本发明的目的和其他优点可通过在说明书、权利要求书以及附图中所特别指出的结构来实现和获得。

附图说明

附图用来提供对本发明技术方案的进一步理解,并且构成说明书的一部分,与本申请的实施例一起用于解释本发明的技术方案,并不构成对本发明技术方案的限制。

图1为现有虚拟机的磁盘节点会变成树状结构图;

图2为本发明实施例一的处理磁盘树节点的方法的流程图;

图3为本发明实施例二的处理磁盘树节点的方法的另一种流程图;

图4为本发明实施例三的处理磁盘树节点的装置的结构示意图。

具体实施方式

为使本发明的目的、技术方案和优点更加清楚明白,下文中将结合附图对本发明的实施例进行详细说明。需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互任意组合。

在附图的流程图示出的步骤可以在诸如一组计算机可执行指令的计算机系统中执行。并且,虽然在流程图中示出了逻辑顺序,但是在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤。

实施例一

本实施例提供了一种处理磁盘树节点的方法,如图2所示,该方法包括s21-s22:

s21、判断出节点不是活跃节点后,获取节点的子节点数;

s22、根据子节点数和预设的策略处理节点。

本发明实施例中,通过根据子节点数和预设的策略处理节点,能够删除需要删除的中间位置的节点。

在一个可选实施例中,预设策略包括:只要子节点为零直接删;有父节点和子节点时就合并到父节点后删;没有父节点且子节点为1则合并到子节点后删,其他情况终止删除。

在一个可选实施例中,根据子节点数和预设的策略处理节点,包括:

当子节点数为零时,删除节点。

在一个可选实施例中,根据子节点数和预设的策略处理节点,包括:

当子节点数为大于等于一时,根据是否存在父节点和子节点数处理节点。

在一个可选实施例中,根据是否存在父节点和子节点数处理节点,包括:

当父节点存在时,将节点中的数据合并到父节点,删除节点;

当父节点不存在,且当子节点个数为一时,将节点中的数据合并到子节点,删除节点;

当父节点不存在,且当子节点个数大于一时,终止删除节点。此时,会发出提示,要删除此节点,需删除子节点。当需要删除s节点有子节点时,由于读其子节点数据需要s节点的数据,所以不能删除其上的数据。

在一个可选实施例中,数据合并之前,还包括:判断存储剩余空间是否大于数据占用的空间,如果大于则进行数据合并。

本发明实施例中,判断出所述节点不是活跃节点后,获取所述节点的子节点数;根据所述子节点数和预设的策略处理所述节点,相比常规的禁止删除中间位置的节点,根据用户需要,能够删除需要删除的中间位置的节点。

实施例二

本实施例对上述实施例方法进行具体描述,如图3所示,包括以下步骤:

1.接收到删除该节点的指令,确定要删除的某磁盘节点s;

2.判断s是否为活跃节点;

如果s为活跃节点,则执行步骤10;

如果s为非活跃节点,则执行步骤3;

可以根据该节点是否可读写判断其是否为活跃节,比如有虚拟机正在该磁盘节点上读写数据,则其为活跃节点;

3.判断s是否存在子节点,如果存在,则执行4;否则,则执行10;

4.判断s是否存在父节点,如果存在父节点s0,则执行步骤5;否则,则执行步骤6;

本实施例首先判断是否有子节点而不是否存在父节点,是因为先判断子节点的方法执行效率更高;先判断是否有子节点,当判断出没有时,就不用考虑数据合并的问题,直接删除该节点即可,因此先判断子节点,执行路径相对更短,效率更高;

在其它可选实施例中,还可以首先判断是否有父节点,在判断其是否有子节点,根据判断结果进行相应的处理,即只要子节点为零直接删;有父节点和子节点时就合并到父节点后删;没有父节点且子节点为1则合并到子节点后删,其他情况终止删除。

5.合并s节点的数据到父节点;

5.1校验存储剩余空间是否充足,如果充足则执行步骤5.2,否则,执行步骤11;

由于删除s节点前,需要将s节点的数据合并到s0,需要额外占用s节点空间,完成数据合并后才删除s节点;

校验s节点所在存储剩余空间,如果剩余空间小于s节点的大小,及存储空间不足,结果记为false,反之记为true;将s合并给s0的过程具体为:先将s的数据累加给s0,此时空间占用大小为s+(s+s0),待s累加到s0完成后,再删除s。所述累加理解为复制,因此在累加后,删除前,存储空间需要额外占用s的大小,因此需要校验存储空间是否足以存放s+(s+s0)的大小;

如果校验存储剩余空间是否充足,如果结果为false,即存储空间不足,执行步骤11,如果结果为true,即存储空间充足,则执行步骤5.2;

5.2将节点s的数据合并到节点s0,然后执行步骤8;

5.3遍历节点s的所有子节点,将所有子节点的父节点引用指向节点s0,然后执行步骤13;遍历节点s的所有子节点即重新指定父子关系;假如s父节点s0和子节点s1,遍历s节点的子节点,发现了s1节点,于是将s1节点的父节点重新指向s节点的父节点,即s1的新父节点为s0,s0与s1是连接上。

当步骤3中判断出有子节点后还要进行步骤4判断其是否有父节点,是为了便于删除s节点后,建立新父节点s0与s1连接。

6.判断s节点的子节点个数,如果只有一个子节点s1,则执行步骤7,否则,则执行步骤11;

执行步骤11之前,还可以进行提示,提示想要删除此节点,应先删除其子节点。

7.将s节点的数据向下合并到子节点s1,所以,校验存储剩余空间是否充足,如果结果为false,即存储空间不足,执行步骤10,如果结果为true,即存储空间充足,则执行步骤10;

8.将节点s的数据合并到节点s1,然后执行步骤9;

9.将节点s1的父节点引用清空,然后执行步骤10;

10.执行删除节点s;

11.终止删除节点s,需要重复步骤1-10,遍历删除每一个子节点,方可删除s节点。

实施例三

本实施例提供了一种处理磁盘树节点的装置,上述方法实施例中描述也适用于本实施例中,图4所示,该装置包括获取模块41和处理模块42,其中:

获取模块41,用于:判断出节点不是活跃节点后,获取节点的子节点数;

处理模块42,用于:根据子节点数和预设的策略处理节点。

在一个可选实施例中,处理模块42根据子节点数和预设的策略处理节点,包括:

当子节点数为零时,处理模块42删除节点。

在一个可选实施例中,处理模块42根据子节点数和预设的策略处理节点,包括:

当子节点数为大于等于一时,处理模块42根据是否存在父节点和子节点数处理节点。

在一个可选实施例中,处理模块42根据是否存在父节点和子节点数处理节点,包括:

当父节点存在时,处理模块42将节点中的数据合并到父节点,删除节点;

当父节点不存在,且当子节点个数为一时,处理模块42将节点中的数据合并到子节点,删除节点;

当父节点不存在,且当子节点个数大于一时,处理模块42终止删除节点。

在一个可选实施例中,数据合并之前,还包括:判断存储剩余空间是否大于数据占用的空间,如果大于则进行数据合并。

本发明实施例还提供一种计算机存储介质,所述计算机存储介质存储有计算机程序;所述计算机程序被执行后,能够实现前述实施例提供的处理磁盘树节点的方法,例如,执行如图1所示方法。

虽然本发明所揭露的实施方式如上,但所述的内容仅为便于理解本发明而采用的实施方式,并非用以限定本发明。任何本发明所属领域内的技术人员,在不脱离本发明所揭露的精神和范围的前提下,可以在实施的形式及细节上进行任何的修改与变化,但本发明的专利保护范围,仍须以所附的权利要求书所界定的范围为准。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1