一种锁定云存储中对象的方法、装置及服务器与流程

文档序号:21456570发布日期:2020-07-10 17:52阅读:181来源:国知局
一种锁定云存储中对象的方法、装置及服务器与流程

本发明涉及云存储技术领域,特别是涉及一种锁定云存储中对象的方法、装置及服务器。



背景技术:

在云存储技术领域中,锁定云存储中对象是指为云存储系统中所存储的对象设置一个不会被覆盖的时间范围。为了避免锁定云存储中过量的对象而影响数据存储,云存储系统通常对应有锁定容量上限,如果超过该锁定容量上限,就无法对云存储中对象进行锁定。相关技术中,锁定云存储中对象的方法包括:云存储系统中的管理服务器每当接收到对象锁定请求时,确定云存储系统的锁定容量上限值和已占锁定容量的差值,作为可用锁定容量,判断该可用锁定容量是否超过该对象锁定请求针对的目标对象所需占用的容量,如果是,为该目标对象建立锁定任务;并且,管理服务器按照预定的执行顺序,执行已建立的各个锁定任务,并在锁定任务执行完毕后更新已占锁定容量。

但是,由于相关技术中,在执行完锁定任务后,才会相应地更新已占锁定容量,因此,管理服务器在处理对象锁定请求时,如果存在正在执行的任务和/或未被执行的任务,会存在如下问题:

在处理对象锁定请求时,可用锁定容量充足,从而建立该对象锁定请求对应的锁定任务,但是,执行该对象锁定请求针对的目标对象的锁定任务时,可用锁定容量不足,导致锁定对象失败。

可见,如何避免出现已建立的锁定任务因可用锁定容量不足而出现锁定对象失败的情况,是一个亟待解决的技术问题。



技术实现要素:

本发明实施例的目的在于提供一种锁定云存储中对象的方法、装置及服务器,以避免出现已建立的锁定任务因可用锁定容量不足而出现锁定对象失败的情况。具体技术方案如下:

一种锁定云存储中对象的方法,应用于云存储系统的管理服务器,所述方法包括:

接收客户端发送的对象锁定请求,并确定所述对象锁定请求对应的各个待锁定对象的对象标识;

为所述对象锁定请求添加分布式锁,并遍历所述各个待锁定对象的对象标识,在遍历到每一对象标识时,判断当前的已占锁定容量、当前的第一预占锁定容量、当前的第二预占锁定容量,以及具有该对象标识的待锁定对象的空间占用量的总容量,是否小于或者等于预定的锁定容量上限;如果是,遍历该对象标识成功,并更新当前的第二预占锁定容量;其中,所述第一预占锁定容量为:未执行和正在执行的锁定任务所对应待锁定对象的空间占用量总和;所述第二预占锁定容量为所述对象锁定请求中,对象标识遍历成功且未建立锁定任务的待锁定对象的空间占用量总和;

在成功遍历完毕所述各个待锁定对象的对象标识后,分别为所述各个待锁定对象建立锁定任务,更新当前的第一预占锁定容量和当前的第二预占锁定容量,并释放所述分布式锁;

按照预定的执行顺序,执行当前存在的每个锁定任务;当任一锁定任务被成功执行时,更新当前的第一预占锁定容量和当前的已占锁定容量。

可选地,针对当前存在的每个锁定任务,在执行该锁定任务之前,还包括:

判断该锁定任务是否过期,如果未过期,继续执行该锁定任务;否则,删除该锁定任务,并更新当前的第一预占锁定容量。

可选地,所述对象锁定请求中还携带有各个待锁定对象的请求锁定时长;

所述分别为所述各个待锁定对象建立锁定任务,包括:

针对每个待锁定对象,新建一锁定任务,并将该待锁定对象的对象标识和该待锁定对象的请求锁定时长,添加至新建的锁定任务的任务信息中;

所述判断该锁定任务是否过期,包括:

判断当前系统时间点与该锁定任务的建立时间点之差,是否大于该锁定任务的任务信息包含的锁定时长,如果大于,判定该锁定任务过期,如果不大于,判定该锁定任务未过期。

可选地,对每个锁定任务的执行过程包括:

向存有该锁定任务所对应待锁定对象的目标存储节点,请求锁定该锁定对象;

接收所述目标存储节点的反馈信息;当所述反馈信息为锁定成功时,该锁定任务被成功执行。

可选地,在遍历到每一对象标识时,还包括:

在判断当前的已占锁定容量、当前的第一预占锁定容量、当前的第二预占锁定容量,以及具有该对象标识的待锁定对象的空间占用量的总容量,是否小于或者等于预定的锁定容量上限之前,判断当前存在的锁定任务中,是否存在具有该对象标识的待锁定对象对应的锁定任务;

如果不存在,执行所述判断当前的已占锁定容量、当前的第一预占锁定容量、当前的第二预占锁定容量,以及具有该对象标识的待锁定对象的空间占用量的总容量,是否小于或者等于预定的锁定容量上限的步骤;

如果存在,继续遍历该对象标识的下一对象标识。

一种锁定云存储中对象的装置,应用于云存储系统的管理服务器,包括:

接收模块,用于接收客户端发送的对象锁定请求,并确定所述对象锁定请求对应的各个待锁定对象的对象标识;

遍历模块,用于为所述对象锁定请求添加分布式锁,并遍历所述各个待锁定对象的对象标识;在遍历到每一对象标识时,判断当前的已占锁定容量、当前的第一预占锁定容量、当前的第二预占锁定容量,以及具有该对象标识的待锁定对象的空间占用量的总容量,是否小于或者等于预定的锁定容量上限;如果是,遍历该对象标识成功,更新当前的第二预占锁定容量;其中,所述第一预占锁定容量为:未执行和正在执行的锁定任务所对应待锁定对象的空间占用量总和;所述第二预占锁定容量为所述对象锁定请求中,对象标识遍历成功且未建立锁定任务的待锁定对象的空间占用量总和;

建立模块,用于在所述遍历模块成功遍历完毕所述各个待锁定对象的对象标识后,分别为所述各个待锁定对象建立锁定任务,更新当前的第一预占锁定容量和当前的第二预占锁定容量,并释放所述分布式锁;

执行模块,用于按照预定的执行顺序,执行当前存在的每个锁定任务;当任一锁定任务被成功执行时,更新当前的第一预占锁定容量和当前的已占锁定容量。

可选地,所述执行模块,还用于针对当前存在的每个锁定任务,在执行该锁定任务之前,判断该锁定任务是否过期,如果未过期,继续执行该锁定任务;否则,删除该锁定任务,并更新当前的第一预占锁定容量。

可选地,所述对象锁定请求中还携带有各个待锁定对象的请求锁定时长;

所述建立模块分别为所述各个待锁定对象建立锁定任务,具体为:

针对每个待锁定对象,新建一锁定任务,并将该待锁定对象的对象标识和该待锁定对象的请求锁定时长,添加至新建的锁定任务的任务信息中;

所述执行模块判断该锁定任务是否过期,具体为:

判断当前系统时间点与该锁定任务的建立时间点之差,是否大于该锁定任务的任务信息包含的锁定时长,如果大于,判定该锁定任务过期,如果不大于,判定该锁定任务未过期。

可选地,所述执行模块对每个锁定任务的执行过程包括:

向存有该锁定任务所对应待锁定对象的目标存储节点,请求锁定该锁定对象;

接收所述目标存储节点的反馈信息;当所述反馈信息为锁定成功时,该任务被成功执行。

可选地,所述遍历模块,还用于在遍历到每一对象标识时,在判断当前的已占锁定容量、当前的第一预占锁定容量、当前的第二预占锁定容量,以及具有该对象标识的待锁定对象的空间占用量的总容量,是否小于或者等于预定的锁定容量上限之前,判断当前存在的锁定任务中,是否存在具有该对象标识的待锁定对象对应的锁定任务;

如果不存在,执行所述判断当前的已占锁定容量、当前的第一预占锁定容量、当前的第二预占锁定容量,以及具有该对象标识的待锁定对象的空间占用量的总容量,是否小于或者等于预定的锁定容量上限的步骤;

如果存在,继续遍历该对象标识的下一对象标识。

一种服务器,包括处理器、通信接口、存储器和通信总线,其中,处理器,通信接口,存储器通过通信总线完成相互间的通信;

存储器,用于存放计算机程序;

处理器,用于执行存储器上所存放的程序时,实现上述任一所述的锁定云存储中对象的方法。

一种计算机可读存储介质,所述计算机可读存储介质内存储有计算机程序,所述计算机程序被处理器执行时,实现上述任一所述的锁定云存储中对象的方法。

本发明实施例提供的锁定云存储中对象的方法中,设置了第一预占锁定容量和第二预占锁定容量,锁定容量上限减去这两种预占锁定容量,再减去云存储中的已占锁定容量后,就可以得到云存储中的可用锁定容量。这样,在任一锁定任务执行之前和执行之后,已占锁定容量增加多少容量,相应的已预占的锁定容量就减少多少容量,可用锁定容量则不会发生变化。因此,本方案中,任何锁定任务的执行均不会影响到管理服务器针对每一对象标识确定可用锁定容量时的确定结果。并且,本方案中,管理服务器在为对象锁定请求确定可用锁定容量时,为对象锁定请求添加了分布式锁。也就是说,管理服务器串行地执行对各个对象锁定请求的遍历。这样,不会出现管理服务器同时为多个对象锁定请求确定可用锁定容量,从而出现确定结果出错的情况。可见,通过设置预定锁定容量和设置分布式锁两种手段,本方案可以避免已建立的锁定任务因可用锁定容量不足而出现锁定对象失败的情况。当然,实施本发明的任一产品或方法必不一定需要同时达到以上所述的所有优点。

附图说明

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

图1为本发明实施例提供的一种锁定云存储中对象的方法的流程图;

图2为本发明实施例提供的一种锁定云存储中对象的方法中,对任一锁定任务的处理过程的流程图;

图3为本发明实施例提供的一种锁定云存储中对象的方法中,对任一对象锁定请求的响应过程的流程图;

图4为本发明实施例提供的一种锁定云存储中对象的装置的结构示意图;

图5为本发明实施例提供的一种服务器的结构示意图。

具体实施方式

下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

为了避免出现已建立的锁定任务因可用锁定容量不足而出现锁定对象失败的情况,本发明实施例提供了一种锁定云存储中对象的方法、装置及服务器。

其中,云存储中的对象,可以是云存储中所存储的数据或文件,如视频、图片、文档或等等。

本发明实施例提供的一种锁定云存储中对象的方法的执行主体,可以为一种锁定云存储中对象的装置,该装置可以应用于云存储系统的管理服务器。其中,除管理服务器之外,云存储系统还可以包括多个存储节点,这些存储节点中存有各种对象。对云存储系统中的对象进行锁定,即是将存储节点上的对象进行锁定。为了描述简洁,下面将云存储系统简称为云储存。

本发明实施例中,设置了第一预占锁定容量、第二预占锁定容量以及分布式锁。其中,第一预占锁定容量,用于对未执行完的锁定任务对应的待锁定对象所要预占的空间占用量进行统计,第二预占锁定容量用于对正在处理的对象锁定请求中,对象标识遍历成功但尚未建立锁定任务的待锁定对象所要预占的空间占用量进行统计。通过设置第一预占锁定容量,可以使得在任一锁定任务执行之前和执行之后,已占锁定容量增加多少容量,第一预占锁定容量相应的就减少多少容量,可用锁定容量则不会发生变化。也就是说,锁定任务的执行不影响云存储的可用锁定容量。通过设置第二预占锁定容量,可以保证管理服务器对于对象锁定请求的处理过程的原子性;即管理服务器针对每个对象锁定请求对应的所有待锁定对象,要么锁定成功,为这些待锁定对象均建立锁定任务;要么锁定失败,均不为这些待锁定对象建立锁定任务。通过设置分布式锁,使得管理服务器可以串行地执行对各个对象锁定请求的遍历,从而避免管理服务器同时为多个对象锁定请求确定可用锁定容量所出现确定结果出错的情况。这样,本发明实施例可以避免已建立的锁定任务因可用锁定容量不足而出现锁定对象失败的情况。

第一方面,对本发明实施例提供的一种锁定云存储中对象的方法进行详细说明。如图1所示,本发明实施例提供的一种锁定云存储中对象的方法,可以包括以下步骤:

s101:接收客户端发送的对象锁定请求,确定该对象锁定请求对应的各个待锁定对象的对象标识。

这里,对象锁定请求可以携带多种信息,通过这些信息,可以确定出存在锁定需求的各个待锁定对象。

举例而言,对象锁定请求所携带的信息可以包括:各个待锁定对象的对象标识;例如,待锁定视频的视频标识、待锁定图片的图片标识或待锁定文档的文档标识等等。再举例而言,当客户端发送的对象锁定请求为锁定云存储中的录像片段时,对象锁定请求携带的信息可以包括:录像设备标识和录像时间段。管理服务器可以从云存储中查询在该录像时间段内,以及在该录像设备标识下的所有录像片段,将所查到的录像片段的标识确定为对象锁定请求中携带的各个待锁定对象的对象标识。当然,对象锁定请求可以携带的信息并不局限于这里示出的对象标识、录像设备标识和录像时间段。为了方案清楚及布局清晰,后续将对对象锁定请求可以携带的其他信息进行举例说明。

s102:为对象锁定请求添加分布式锁,并遍历各个待锁定对象的对象标识,在遍历到每一对象标识时,判断当前的已占锁定容量、当前的第一预占锁定容量、当前的第二预占锁定容量,以及具有该对象标识的待锁定对象的空间占用量的总容量,是否小于或者等于预定的锁定容量上限;如果是,遍历该对象标识成功,更新当前的第二预占锁定容量。

其中,第一预占锁定容量为:未执行和正在执行的锁定任务所对应待锁定对象的空间占用量总和;第二预占锁定容量为所述对象锁定请求中,对象标识遍历成功且未建立锁定任务的待锁定对象的空间占用量总和。

可以理解的是,判断当前的已占锁定容量、当前的第一预占锁定容量、当前的第二预占锁定容量,以及具有该对象标识的待锁定对象的空间占用量的总容量,是否小于或者等于预定的锁定容量上限,即是判断当前云存储中是否有足够的可用锁定容量。

其中,待锁定对象的空间占用量为:待锁定对象在云存储中的空间占用量。在实际应用中,管理服务器可以在获得了对象锁定请求中携带的各个待锁定对象的对象标识后,从云存储中查询这些对象标识所对应待锁定对象的空间占用量。当然,管理服务器也可以实时地对云存储中对象的存储信息进行同步,这样,管理服务器可以直接在本地查询对象标识所对应待锁定对象的空间占用量。

该步骤中,遍历对象标识成功后,更新当前的第二预占锁定容量,具体为将具有该对象标识的待锁定对象的空间占用量,增加至当前的第二预占锁定容量中。

可以理解的是,分布式锁是控制分布式对象之间同步访问共享资源的一种方式。在任一分布式对象访问共享资源的时候,需要防止其他分布式对象对资源进行改写,从而在多个分布式对象之间,保证共享资源的一致性。

可以理解的是,在为任一对象锁定请求添加了分布式锁的期间,管理服务器所执行的各个步骤,仅可以针对该对象锁定请求执行,也就是说,这些步骤所能够实现的功能,并不对其他对象锁定请求开放。

另外,可以理解的是,当s102中的判断结果为否时,说明当前的可用锁定容量已不足,对于对象标识的遍历执行失败。此时,可以将当前的第二预占锁定容量清零,即释放已遍历成功的对象标识对应的待锁定对象的空间占用量,并向客户端反馈:可用锁定容量不足。相应的,释放为该对象锁定请求添加的分布式锁。

s103:在成功遍历完毕各个待锁定对象的对象标识后,分别为各个待锁定对象建立锁定任务,更新当前的第一预占锁定容量和当前的第二预占锁定容量,并释放分布式锁。

这里,为各个待锁定对象建立锁定任务的具体实现方式存在多种。示例性的,在一种实现方式中,管理服务器可以维护一个锁定任务列表,因此,为各个待锁定对象建立锁定任务,可以包括:在锁定任务列表中,为各个待锁定对象分别插入一个新的锁定任务,并将各个待锁定对象的对象标识,分别写入对应的锁定任务的任务信息中。当然,锁定任务的任务信息并不局限于对象标识,还可以包括锁定任务的建立时间以及待锁定对象的空间占用量等。其中,锁定任务的建立时间,可以是在锁定任务列表中,插入该锁定任务时的时间。

该步骤中,在成功遍历完毕所述各个待锁定对象的对象标识后,分别为所述各个待锁定对象建立锁定任务,更新当前的第一预占锁定容量和当前的第二预占锁定容量,具体可以为:在为每个待锁定对象建立锁定任务后,从当前的第二预占锁定容量中,减去该待锁定对象的空间占用量,并将该待锁定对象的空间占用量,添加至当前的第一预占锁定容量中。可以理解的是,当为各个待锁定对象均建立锁定任务后,第二预占锁定容量即被清零。

另外,在分别为各个待锁定对象建立锁定任务,并释放分布式锁后,可以向客户端反馈:已为该对象锁定请求下达锁定任务。至此,管理服务器完成对于对象锁定请求的响应处理。在释放了为对象锁定请求添加的分布式锁后,管理服务器可以转而处理另一对象锁定请求。

可以理解的是,管理服务器针对接收到的每一对象锁定请求,均可以按照上述s101-s103的过程,对该对象锁定请求进行处理。

s104:按照预定的执行顺序,执行当前存在的每个锁定任务;当任一锁定任务被成功执行时,更新当前的第一预占锁定容量和当前的已占锁定容量。

这里,所谓的当前存在的每个锁定任务为:管理服务器当前未执行和正在执行的所有锁定任务,并不局限于s103中所建立的锁定任务。除了s103中所建立的锁定任务之外,当前存在的每个锁定任务还可以包括:根据同一客户端发送的其他对象锁定请求所建立的锁定任务,以及根据其他客户端发送的对象锁定请求所建立的锁定任务。可以理解的是,任一锁定任务被成功执行后,该锁定任务就可以被解除。

可以理解的是,s104所限定步骤,为管理服务器执行锁定任务的步骤;s101-s103所限定步骤,为管理服务器处理对象锁定请求的步骤。由于管理服务器可以同时接收多个对象锁定请求,故管理服务器针对某一对象锁定请求,在执行s101、s102以及s103的过程中的任意时刻,也可以同步地执行s104。

其中,对每个锁定任务的执行过程可以包括:

向存有该锁定任务所对应待锁定对象的目标存储节点,请求锁定该锁定对象;

接收目标存储节点的反馈信息;当反馈信息为锁定成功时,该锁定任务被成功执行。

这里,目标存储节点的反馈信息可以存在多种。为了方案清楚及布局清晰,后续对目标存储节点的反馈信息为其他类型的信息时,管理服务器相应的处理流程进行举例说明。

另外,按照预定的执行顺序,执行当前存在的每个锁定任务的具体实现方式存在多种。示例性的,在一种实现方式中,按照预定的执行顺序,执行当前存在的每个锁定任务,可以包括:按照锁定任务的建立顺序,执行当前存在的每个锁定任务。这样,根据一个对象锁定请求所建立的各个锁定任务,可以被集中执行。在另一种实现方式中,可以从当前存在的每个锁定任务中,随机扫描出一个或多个锁定任务,并执行扫描出的锁定任务。需要说明的是,这里所示出的按照预定的执行顺序,执行当前存在的每个锁定任务的具体实现方式,仅仅作为示例,并不应该构成对本发明的限定。

可以理解的是,当任一锁定任务被成功执行时,该锁定任务所对应的待锁定对象已被锁定,已占锁定容量增加,相应的,该锁定任务所预占的第一预占锁定容量则可以被释放。可见,已占锁定容量和第一预占锁定容量是一对互斥的变量。这样,当任一锁定任务被成功执行时,更新当前的第一预占锁定容量和当前的已占锁定容量,具体可以为:从当前的第一预占锁定容量中,减去该锁定任务对应的待锁定对象的空间占用量,并将该锁定任务对应的待锁定对象的空间占用量,加入到当前的已占锁定容量中。

本发明实施例提供的锁定云存储中对象的方法中,设置了第一预占锁定容量和第二预占锁定容量,锁定容量上限减去这两种预占锁定容量,再减去云存储中的已占锁定容量后,就可以得到云存储中的可用锁定容量。这样,在任一锁定任务执行之前和执行之后,已占锁定容量增加多少容量,相应的已预占的锁定容量就减少多少容量,可用锁定容量则不会发生变化。因此,本方案中,任何锁定任务的执行均不会影响到管理服务器针对每一对象标识确定可用锁定容量时的确定结果。并且,本方案中,管理服务器在为对象锁定请求确定可用锁定容量并新建锁定任务时,为对象锁定请求添加了分布式锁。也就是说,管理服务器串行地执行对各个对象锁定请求的遍历。这样,不会出现管理服务器同时为多个对象锁定请求确定可用锁定容量,从而出现确定结果出错的情况。可见,通过设置预定锁定容量和设置分布式锁两种手段,本方案可以避免已建立的锁定任务因可用锁定容量不足而出现锁定对象失败的情况。

可选地,在一种实现方式中,为了提高管理服务器对当前存在的锁定任务的执行效率,针对当前存在的每个锁定任务,在执行该锁定任务之前,发明实施例提供的锁定云存储中对象的方法,还可以包括:

判断该锁定任务是否过期,如果未过期,继续执行该锁定任务;

否则,删除该锁定任务,并更新当前的第一预占锁定容量。

这样,过期的锁定任务直接被跳过,从而可以节省出执行过期的锁定任务所耗费的时间。

其中,针对任一锁定任务,判断该锁定任务是否过期的具体实现方式存在多种。示例性的,在一种实现方式中,针对任一锁定任务,判断该锁定任务是否过期,可以包括:

判断当前系统时间点与该锁定任务的建立时间点之差,是否大于预定的锁定时长阈值;如果大于,判定该锁定任务过期;如果不大于,判定该锁定任务未过期。

这里,预定的锁定时长阈值,可以是每个锁定任务能够对待锁定对象进行锁定的最大时长。该时长阈值可以在管理服务器中配置。举例而言,假设该锁定时长阈值为1小时,那么自锁定任务建成之时起,该锁定任务所对应的待锁定对象,只能在未来的1小时内被该锁定任务锁定,超过1小时后,该锁定任务就过期了。

在另一种实现方式中,管理服务器接收的对象锁定请求所携带的信息中,还可以包括各个待锁定对象的请求锁定时长;

相应的,管理服务器为所述各个待锁定对象建立锁定任务,可以包括:

针对每个待锁定对象,新建一锁定任务,并将该待锁定对象的对象标识和该待锁定对象的请求锁定时长,添加至新建的锁定任务的任务信息中;

相应的,判断该锁定任务是否过期,可以包括:

判断当前系统时间点与该锁定任务的建立时间点之差,是否大于该锁定任务的任务信息包含的锁定时长,如果大于,判定该锁定任务过期,如果不大于,判定该锁定任务未过期。

可以理解的是,如果当前系统时间点与锁定任务的建立时间点之差,大于该锁定任务的任务信息包含的锁定时长,说明当前时间早已经超过了该锁定任务请求对待锁定对象进行锁定的锁定结束时间点,已经没有必要再对该待锁定对象进行锁定,故判定该锁定任务过期。

为了方案清楚,下面用图2所示流程为例,对本发明实施提供的锁定云存储中对象的方法中,对任一锁定任务的处理过程进行示例性的说明。如图2所示,该处理过程可以包括以下步骤:

s201:针对任一锁定任务,判断该锁定任务是否过期;如果未过期,执行s202-s203,如果过期,执行s204;

s202:向存有该锁定任务所对应待锁定对象的目标存储节点,请求锁定该锁定对象;

s203:接收目标存储节点的反馈信息;当反馈信息为锁定成功时,该锁定任务被成功执行,更新当前的第一预占锁定容量和当前的已占锁定容量;

s204:删除该锁定任务,并更新当前的第一预占锁定容量。

其中,在s203和s204中,更新当前的第一预占锁定容量,均为从当前的第一预占锁定容量中,减去锁定任务对应的待锁定对象的空间占用量;在s203中,更新当前的已占锁定容量,为将锁定任务对应的待锁定对象的空间占用量,增加至当前的已占锁定容量中。

在对s104的说明中已经提到过,目标存储节点的反馈信息并不局限于锁定成功的信息。为了方案清楚及布局清晰,下面对目标存储节点的反馈信息为锁定成功之外的其他类型的信息时,相应的处理流程进行举例说明。

示例性的,在一种实现方式中,当目标存储节点的反馈信息为待锁定对象不存在时,可以删除该锁定任务,并更新当前的第一预占锁定容量。

这里,更新当前的第一预占锁定容量,可以是从当前的第一预占锁定容量,减去该锁定任务所对应待锁定对象的空间占用量。

在另一种实现方式中,当目标存储节点的反馈信息为锁定失败时,可以直接返回s201,或者,待一段等待时间过去后,再返回s201,或者,当下一次随机扫描到该锁定任务时,返回s201。这样,在锁定失败时,可以尝试多次锁定。可以理解的是,当尝试的次数达到预定的次数时,可以删除该锁定任务,并更新当前的第一预占锁定容量。这里,更新当前的第一预占锁定容量具体为从当前的第一预占锁定容量,减去该锁定任务所对应待锁定对象的空间占用量。

需要说明的是,这里所示出的当目标存储节点的反馈信息为锁定成功之外的其他类型的信息时,相应的处理流程,仅仅作为示例,不应该构成对本发明的限定。

在少数情况下,管理服务器在遍历到一个对象标识时,当前存在锁定任务中,恰好有一个具有该对象标识的待锁定对象对应的锁定任务。针对这种情况,本发明实施例提供的锁定云存储中对象的方法,在遍历到每一对象标识时,还可以包括:

在判断当前的已占锁定容量、当前的第一预占锁定容量、当前的第二预占锁定容量,以及具有该对象标识的待锁定对象的空间占用量的总容量,是否小于或者等于预定的锁定容量上限之前,判断当前存在的锁定任务中,是否存在具有该对象标识的待锁定对象对应的锁定任务;

如果不存在,继续执行所述判断当前的已占锁定容量、当前的第一预占锁定容量、当前的第二预占锁定容量,以及具有该对象标识的待锁定对象的空间占用量的总容量,是否小于或者等于预定的锁定容量上限的步骤;

如果存在,继续遍历该对象标识的下一对象标识。

可以理解的是,如果当前存在的锁定任务中,已经存在具有所遍历对象标识的待锁定对象对应的锁定任务,那么当前的第一预占锁定容量中,已经包含了该待锁定对象的空间占用量,即已被预占的锁定容量中已经包含了该待锁定对象的空间占用量,因此,无需更新当前的第二预占锁定容量,直接遍历下一对象标识即可。

为了方案清楚,下面以图3所示流程为例,对本发明实施提供的锁定云存储中对象的方法中,对任一对象锁定请求的响应过程进行示例性的说明。如图3所示,该响应过程,可以包括以下步骤:

s301:为对象锁定请求添加分布式锁,开始遍历对象锁定请求所携带的各个待锁定对象的对象标识;

s302:在遍历到每一对象标识时,判断当前存在的锁定任务中,是否存在具有该对象标识的待锁定对象对应的锁定任务;如果存在,继续遍历该对象标识的下一对象标识;如果不存在,执行s303;

s303:判断当前的已占锁定容量、当前的第一预占锁定容量、当前的第二预占锁定容量,以及具有该对象标识的待锁定对象的空间占用量的总容量,是否小于或者等于预定的锁定容量上限;如果是,执行s304;如果否,执行s306;

s304:遍历该对象标识成功,更新当前的第二预占锁定容量,返回s302继续遍历该对象标识的下一对象标识;

s305:在成功遍历完毕各个待锁定对象的对象标识后,分别为各个待锁定对象建立锁定任务,更新当前的第一预占锁定容量和当前的第二预占锁定容量,并释放分布式锁;

s306:向客户端反馈可用锁定容量不足,清零当前的第二预占锁定容量,并释放分布式锁。

其中,s301、s303以及s304的内容与上述s102的内容相同或相似,此处不再赘述。s305中的内容与上述s103的内容相同,此处同样不再赘述。

另外,在s302中,如果当前存在的锁定任务中,已经存在具有所遍历对象标识的待锁定对象对应的锁定任务。那么在执行s305时,可以为具有该标识的待锁定对象另外建立一个新的锁定任务,此时,更新当前的第一预占锁定容量和当前的第二预占锁定容量,可以是保留当前的第一预占锁定容量和当前的第二预占锁定容量。可以理解的是,虽然新建的锁定任务与彼时已经存在的锁定任务,欲对同一对象标识对应的待锁定对象进行锁定,但二者对待锁定对象进行锁定的锁定时间段却可能是不同的。在这种情况下,在具体对存储节点上的待锁定对象执行锁定时,后执行的锁定任务,可以根据任务信息中所包括的请求锁定时长,延长对待锁定对象的锁定时间。

在另一种实现方式中,在s302中,如果当前存在的锁定任务中,已经存在具有所遍历对象标识的待锁定对象对应的锁定任务。那么在执行s305时,可以忽略具有该标识的待锁定对象,即不再为具有该标识的待锁定对象另外建立锁定任务。此时,更新当前的第一预占锁定容量和当前的第二预占锁定容量,仍可以是保留当前的第一预占锁定容量和当前的第二预占锁定容量。

可以理解的是,当执行s306时,说明管理服务器无法为对象锁定请求对应的各个待锁定对象建立锁定任务,即锁定失败。此时,管理服务器可以继续处理其他的对象锁定请求。

第二方面,对本发明实施例提供的一种锁定云存储中对象的装置,进行详细说明。如图4所示,本发明实施例提供的锁定云存储中对象的装置,应用于云存储系统的管理服务器,该装置可以包括:

接收模块401,用于接收客户端发送的对象锁定请求,并确定所述对象锁定请求对应的各个待锁定对象的对象标识;

遍历模块402,用于为所述对象锁定请求添加分布式锁,并遍历所述各个待锁定对象的对象标识;在遍历到每一对象标识时,判断当前的已占锁定容量、当前的第一预占锁定容量、当前的第二预占锁定容量,以及具有该对象标识的待锁定对象的空间占用量的总容量,是否小于或者等于预定的锁定容量上限;如果是,遍历该对象标识成功,更新当前的第二预占锁定容量;其中,所述第一预占锁定容量为:未执行和正在执行的锁定任务所对应待锁定对象的空间占用量总和;所述第二预占锁定容量为所述对象锁定请求中,对象标识遍历成功且未建立锁定任务的待锁定对象的空间占用量总和;

建立模块403,用于在所述遍历模块成功遍历完毕所述各个待锁定对象的对象标识后,分别为所述各个待锁定对象建立锁定任务,更新当前的第一预占锁定容量和当前的第二预占锁定容量,并释放所述分布式锁;

执行模块404,用于按照预定的执行顺序,执行当前存在的每个锁定任务;当任一锁定任务被成功执行时,更新当前的第一预占锁定容量和当前的已占锁定容量。

可选地,所述执行模块404,还用于针对当前存在的每个锁定任务,在执行该锁定任务之前,判断该锁定任务是否过期,如果未过期,继续执行该锁定任务;否则,删除该锁定任务,并更新当前的第一预占锁定容量。

可选地,所述对象锁定请求中还携带有各个待锁定对象的请求锁定时长;

所述建立模块403分别为所述各个待锁定对象建立锁定任务,具体为:

针对每个待锁定对象,新建一锁定任务,并将该待锁定对象的对象标识和该待锁定对象的请求锁定时长,添加至新建的锁定任务的任务信息中;

所述执行模块404判断该锁定任务是否过期,具体为:

判断当前系统时间点与该锁定任务的建立时间点之差,是否大于该锁定任务的任务信息包含的锁定时长,如果大于,判定该锁定任务过期,如果不大于,判定该锁定任务未过期。

可选地,所述执行模块404对每个锁定任务的执行过程包括:

向存有该锁定任务所对应待锁定对象的目标存储节点,请求锁定该锁定对象;

接收所述目标存储节点的反馈信息;当所述反馈信息为锁定成功时,该任务被成功执行。

可选地,所述遍历模块402,还用于在遍历到每一对象标识时,在判断当前的已占锁定容量、当前的第一预占锁定容量、当前的第二预占锁定容量,以及具有该对象标识的待锁定对象的空间占用量的总容量,是否小于或者等于预定的锁定容量上限之前,判断当前存在的锁定任务中,是否存在具有该对象标识的待锁定对象对应的锁定任务;

如果不存在,执行所述判断当前的已占锁定容量、当前的第一预占锁定容量、当前的第二预占锁定容量,以及具有该对象标识的待锁定对象的空间占用量的总容量,是否小于或者等于预定的锁定容量上限的步骤;

如果存在,继续遍历该对象标识的下一对象标识。

本发明实施例提供的锁定云存储中对象的装置,设置了第一预占锁定容量和第二预占锁定容量,锁定容量上限减去这两种预占锁定容量,再减去云存储中的已占锁定容量后,就可以得到云存储中的可用锁定容量。这样,在任一锁定任务执行之前和执行之后,已占锁定容量增加多少容量,相应的已预占的锁定容量就减少多少容量,可用锁定容量则不会发生变化。因此,本方案中,任何锁定任务的执行均不会影响到管理服务器针对每一对象标识确定可用锁定容量时的确定结果。并且,本方案中,管理服务器在为对象锁定请求确定可用锁定容量时,为对象锁定请求添加了分布式锁。也就是说,管理服务器串行地执行对各个对象锁定请求的遍历。这样,不会出现管理服务器同时为多个对象锁定请求确定可用锁定容量,从而出现确定结果出错的情况。可见,通过设置预定锁定容量和设置分布式锁两种手段,本方案可以避免已建立的锁定任务因可用锁定容量不足而出现锁定对象失败的情况。

本发明实施例还提供了一种服务器,如图5所示,包括处理器501、通信接口502、存储器503和通信总线504,其中,处理器501,通信接口502,存储器503通过通信总线504完成相互间的通信,

存储器503,用于存放计算机程序;

处理器501,用于执行存储器503上所存放的程序时,实现上述任一所述的锁定云存储中对象的方法。

在具体应用中,本发明图5实施例中的服务器具体可以为云存储系统的管理服务器。

上述服务器提到的通信总线可以是外设部件互连标准(peripheralcomponentinterconnect,pci)总线或扩展工业标准结构(extendedindustrystandardarchitecture,eisa)总线等。该通信总线可以分为地址总线、数据总线、控制总线等。为便于表示,图中仅用一条粗线表示,但并不表示仅有一根总线或一种类型的总线。

通信接口用于上述服务器与其他设备之间的通信。

存储器可以包括随机存取存储器(randomaccessmemory,ram),也可以包括非易失性存储器(non-volatilememory,nvm),例如至少一个磁盘存储器。可选的,存储器还可以是至少一个位于远离前述处理器的存储装置。

上述的处理器可以是通用处理器,包括中央处理器(centralprocessingunit,cpu)、网络处理器(networkprocessor,np)等;还可以是数字信号处理器(digitalsignalprocessing,dsp)、专用集成电路(applicationspecificintegratedcircuit,asic)、现场可编程门阵列(field-programmablegatearray,fpga)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。

在本发明提供的又一实施例中,还提供了一种计算机可读存储介质,该计算机可读存储介质中存储有指令,当其在计算机上运行时,使得计算机执行上述实施例中任一所述的锁定云存储中对象的方法。

需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。

本说明书中的各个实施例均采用相关的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于装置和服务器实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。

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

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