一种文件锁处理方法、装置及电子设备和存储介质与流程

文档序号:21081396发布日期:2020-06-12 16:33阅读:173来源:国知局
一种文件锁处理方法、装置及电子设备和存储介质与流程

本申请涉及计算机技术领域,更具体地说,涉及一种文件锁处理方法、装置及一种电子设备和一种计算机可读存储介质。



背景技术:

海量存储业务中,用户对数据的传输性能和稳定性要求越来越高,存储服务器将拥有数目庞大的客户端,多个客户端同时对服务器文件进行访问操作,势必会造成文件冲突,各个客户端相互协同、保证文件数据一致性已经成为软件使用者和开发者关注的重点。

文件锁是在多任务操作场景中实现文件同步的一种机制,保证了文件数据一致性防止冲突,如果一个进程尝试对正在被其他进程读取的文件进行写操作,可能会导致正在进行读操作的进程读取到一些被破坏或者不完整的数据,如果两个进程并发对同一个文件进行写操作,可能会导致该文件遭到破坏。因此,为了避免发生这种问题,必须要采用某种机制来解决多个进程并发访问同一个文件时所面临的同步问题,由此而产生了文件加锁方面的技术。

异步阻塞锁是指客户端发起锁请求,当前线程被挂起,如果文件被占用则等待,直到当调用返回的时候,向发送锁请求的客户端发送granged消息,从而进行锁的授权。在分布式文件系统应用场景中,如果文件系统不支持异步阻塞锁,则客户端会进行一直等待,文件锁的可维护性较差。

因此,如何提高文件系统中文件锁的可维护性是本领域技术人员需要解决的技术问题。



技术实现要素:

本申请的目的在于提供一种文件锁处理方法、装置及一种电子设备和一种计算机可读存储介质,提高了文件系统中文件锁的可维护性。

为实现上述目的,本申请提供了一种文件锁处理方法,应用于服务器,包括:

获取所述目标文件系统的阻塞锁链表;其中,所述阻塞锁链表包括所述目标文件系统当前被挂起的所有文件锁请求;

判断目标文件系统是否支持异步阻塞锁;

若否,则根据每个所述文件锁请求的请求类型确定每个所述文件锁请求对应的文件锁状态;其中,所述文件锁状态包括无阻塞锁状态和轮询阻塞锁状态;

向发起目标文件锁请求的客户端返回阻塞状态,以便所述客户端每隔预设时间发起所述目标文件锁请求,直至所述目标文件锁请求被所述服务器响应,其中,所述目标文件锁请求为文件锁状态为所述轮询阻塞锁状态的文件锁请求。

其中,所述获取所述目标文件系统的阻塞锁链表,包括:

当接收到目标客户端对所述目标文件系统中目标文件的文件锁请求时,获取所述目标文件系统的阻塞锁链表。

其中,还包括:

当所述目标文件系统支持异步阻塞锁时,若所述文件锁请求为对所述目标文件的读请求,则将所述文件锁请求对应的文件锁状态确定为所述无阻塞锁状态;若所述文件锁请求包括对所述目标文件的写请求,则将所述文件锁请求对应的文件锁状态确定为异步阻塞锁状态。

其中,所述获取所述目标文件系统的阻塞锁链表,包括:

每隔预设时间间隔获取所述目标文件系统的阻塞锁链表。

其中,所述根据每个所述文件锁请求的请求类型确定每个所述文件锁请求对应的文件锁状态,包括:

若所述文件锁请求为对所述目标文件的读请求,则将所述文件锁请求对应的文件锁状态确定为所述无阻塞锁状态;

若所述文件锁请求包括对所述目标文件的写请求,则将所述文件锁请求对应的文件锁状态确定为所述轮询阻塞锁状态。

其中,所述根据每个所述文件锁请求的请求类型确定每个所述文件锁请求对应的文件锁状态,包括:

创建线程池,并利用所述线程池中的目标线程遍历所述阻塞锁链表,以便根据每个所述文件锁请求的请求类型确定所述阻塞锁链表中每个所述文件锁请求对应的文件锁状态。

为实现上述目的,本申请提供了一种文件锁处理装置,包括:

获取模块,用于获取所述目标文件系统的阻塞锁链表;其中,所述阻塞锁链表包括所述目标文件系统当前被挂起的所有文件锁请求;

判断模块,用于判断目标文件系统是否支持异步阻塞锁;若否,则启动第一确定模块的工作流程;

所述第一确定模块,用于根据每个所述文件锁请求的请求类型确定每个所述文件锁请求对应的文件锁状态;其中,所述文件锁状态包括无阻塞锁状态和轮询阻塞锁状态;

返回模块,用于向发起目标文件锁请求的客户端返回阻塞状态,以便所述客户端每隔预设时间发起所述目标文件锁请求,直至所述目标文件锁请求被所述服务器响应,其中,所述目标文件锁请求为文件锁状态为所述轮询阻塞锁状态的文件锁请求。

其中,所述获取模块具体为当接收到目标客户端对所述目标文件系统中目标文件的文件锁请求时,获取所述目标文件系统的阻塞锁链表的模块。

为实现上述目的,本申请提供了一种电子设备,包括:

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

处理器,用于执行所述计算机程序时实现如上述文件锁处理方法的步骤。

为实现上述目的,本申请提供了一种计算机可读存储介质,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现如上述文件锁处理方法的步骤。

通过以上方案可知,本申请提供的一种文件锁处理方法,包括:获取所述目标文件系统的阻塞锁链表;其中,所述阻塞锁链表包括所述目标文件系统当前被挂起的所有文件锁请求;判断目标文件系统是否支持异步阻塞锁;若否,则根据每个所述文件锁请求的请求类型确定每个所述文件锁请求对应的文件锁状态;其中,所述文件锁状态包括无阻塞锁状态和轮询阻塞锁状态;向发起目标文件锁请求的客户端返回阻塞状态,以便所述客户端每隔预设时间发起所述目标文件锁请求,直至所述目标文件锁请求被所述服务器响应,其中,所述目标文件锁请求为文件锁状态为所述轮询阻塞锁状态的文件锁请求。

本申请提供的文件锁处理方法,当目标文件系统不支持异步阻塞锁时,基于每个文件锁请求的请求类型确定其对应的文件锁状态,实现对阻塞锁链表中的所有文件锁请求进行文件锁状态的识别。向发起轮询阻塞锁状态的文件锁请求的客户端返回阻塞状态,客户端接收到该阻塞状态后每隔预设时间重新发起文件锁请求,直至文件锁请求被服务器响应。由此可见,本申请提供的文件锁处理方法,通过标识文件锁状态,提高了文件系统中文件锁管理的可维护性,保证了在并发业务中文件的具有高度一致性。本申请还公开了一种文件锁处理装置及一种电子设备和一种计算机可读存储介质,同样能实现上述技术效果。

应当理解的是,以上的一般描述和后文的细节描述仅是示例性的,并不能限制本申请。

附图说明

为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。附图是用来提供对本公开的进一步理解,并且构成说明书的一部分,与下面的具体实施方式一起用于解释本公开,但并不构成对本公开的限制。在附图中:

图1为根据一示例性实施例示出的一种文件锁处理方法的流程图;

图2为根据一示例性实施例示出的另一种文件锁处理方法的流程图;

图3为nfs-ganesha文件锁请求处理流程架构图;

图4为通过轮询方式标识异步阻塞文件锁的方法处理流程图

图5为根据一示例性实施例示出的一种文件锁处理装置的结构图;

图6为根据一示例性实施例示出的一种电子设备的结构图。

具体实施方式

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

本申请实施例公开了一种文件锁处理方法,提高了文件系统中文件锁的可维护性。

参见图1,根据一示例性实施例示出的一种文件锁处理方法的流程图,如图1所示,包括:

s101:获取所述目标文件系统的阻塞锁链表;其中,所述阻塞锁链表包括所述目标文件系统当前被挂起的所有文件锁请求;

本实施例中的目标文件系统为分布式文件系统,例如nfs-ganesha用户态网络文件系统,可以管理百万级数据缓存,避免了底层文件系统阻塞的问题,nfs-ganesha具有灵活的内分配机制,用户态程序可以分配大量内存来供程序内部使用,有效的解决数据缓存的问题。nfs-ganesha可以对接多种底层分布式文件系统,fsal(filesystemabstractionlayer)文件系统抽象层是非常重要的模块,fsal本身给inodecache和filecontentcache提供了通用接口,收到请求后会调用具体的fsal,例如虚拟文件系统(vfs)、分布式文件系统等。

在具体实施中,当接收到客户端对目标文件系统中某一文件的文件锁请求时,当该文件存在文件锁,文件锁为非无阻塞锁状态时,挂起该文件锁请求,即将该文件锁请求加入阻塞锁链表中。也就是说,目标文件系统的阻塞锁链表存储当前被挂起的所有文件锁请求。

需要说明的是,本实施例不对本步骤的触发条件进行限定,例如,当接收到目标客户端对所述目标文件系统中目标文件的文件锁请求时,获取所述目标文件系统的阻塞锁链表。又如,每隔预设时间间隔获取所述目标文件系统的阻塞锁链表。

s102:判断目标文件系统是否支持异步阻塞锁;若否,则进入s103;

当目标文件系统支持异步阻塞锁时,若客户端请求的文件已存在文件锁,且该文件锁位非阻塞锁状态时,直接响应客户端的文件锁请求,否则将该文件锁请求的阻塞锁状态标记位异步阻塞锁状态。异步阻塞锁是指客户端发起锁请求,当前线程被挂起,如果文件被占用则等待,直到当调用返回的时候,向发送锁请求的客户端发送granged消息,从而进行锁的授权。

s103:根据每个所述文件锁请求的请求类型确定每个所述文件锁请求对应的文件锁状态;其中,所述文件锁状态包括无阻塞锁状态和轮询阻塞锁状态;

当目标文件系统不支持异步阻塞锁时,可以根据文件锁请求的请求类型确定其对应的文件锁状态。文件锁状态包括无阻塞锁状态和轮询阻塞锁状态,无阻塞锁状态是指客户端发起锁请求,当前线程不会被挂起,而是立即返回执行下一个调用,如果文件被占用则立即返回。阻塞锁状态是指nfs客户端发起锁请求,当前线程被挂起,如果文件被占用则等待。轮询阻塞锁状态是指客户端每隔预设时间发起锁请求,直至该锁请求被响应。

在本步骤中,可以定义阻塞锁轮询函数,首先,创建共用体标识四种阻塞锁状态,包括无阻塞锁状态state_block_none、阻塞锁状态state_block_internal,异步阻塞锁状态state_block_async,轮询阻塞锁状态state_block_poll。具体结构如下:

作为一种优选实施方式,本步骤包括:创建线程池,并利用所述线程池中的目标线程遍历所述阻塞锁链表,以便根据每个所述文件锁请求的请求类型确定所述阻塞锁链表中每个所述文件锁请求对应的文件锁状态。在具体实施中,建轮询线程,初始化线程池,并设置线程参数,在轮询场景中,为了避免系统资源浪费,设置线程池中的线程最大/最小个数为1,设置轮询线程的时间间隔,设置轮询线程处理过程的调用规则。上述轮询线程的时间间隔是线程时间间隔变量,范围为0到180s,默认10s轮询一次。轮询线程调用规则是指该轮询线程循环阻塞锁轮询函数。阻塞锁轮询函数的作用是轮询所有类型为state_block_poll的阻塞锁,在状态为阻塞锁双链表中循环遍历类型为state_block_poll的阻塞锁。

s104:向发起目标文件锁请求的客户端返回阻塞状态,以便所述客户端每隔预设时间发起所述目标文件锁请求,直至所述目标文件锁请求被所述服务器响应,其中,所述目标文件锁请求为文件锁状态为所述轮询阻塞锁状态的文件锁请求。

在本步骤中,向发起轮询阻塞锁状态的文件锁请求的客户端返回阻塞状态,客户端接收到该阻塞状态后每隔预设时间重新发起文件锁请求,直至文件锁请求被服务器响应。可见,当文件系统不支持异步阻塞锁、客户端发起异步阻塞锁请求时,将返回状态标记为阻塞状态,目的是防止文件锁冲突的情况下,对文件锁状态识别不清晰,发生混淆,防止文件锁状态误判。

本申请实施例提供的文件锁处理方法,当目标文件系统不支持异步阻塞锁时,基于每个文件锁请求的请求类型确定其对应的文件锁状态,实现对阻塞锁链表中的所有文件锁请求进行文件锁状态的识别。向发起轮询阻塞锁状态的文件锁请求的客户端返回阻塞状态,客户端接收到该阻塞状态后每隔预设时间重新发起文件锁请求,直至文件锁请求被服务器响应。由此可见,本申请实施例提供的文件锁处理方法,通过标识文件锁状态,提高了文件系统中文件锁管理的可维护性,保证了在并发业务中文件的具有高度一致性。

本申请实施例公开了一种文件锁处理方法,相对于上一实施例,本实施例对技术方案作了进一步的说明和优化。具体的:

参见图2,根据一示例性实施例示出的另一种文件锁处理方法的流程图,如图2所示,包括:

s201:当接收到目标客户端对所述目标文件系统中目标文件的文件锁请求时,获取所述目标文件系统的阻塞锁链表;

s202:判断目标文件系统是否支持异步阻塞锁;若是,则进入s203;若否,则进入s204;

s203:若所述文件锁请求为对所述目标文件的读请求,则将所述文件锁请求对应的文件锁状态确定为所述无阻塞锁状态;若所述文件锁请求包括对所述目标文件的写请求,则将所述文件锁请求对应的文件锁状态确定为异步阻塞锁状态;

s204:创建线程池,并利用所述线程池中的目标线程遍历所述阻塞锁链表;

s205:若所述文件锁请求为对所述目标文件的读请求,则将所述文件锁请求对应的文件锁状态确定为所述无阻塞锁状态;若所述文件锁请求包括对所述目标文件的写请求,则将所述文件锁请求对应的文件锁状态确定为所述轮询阻塞锁状态。

在具体实施中,若客户端请求的位目标文件的写请求,由于需要对目标文件进行修改等操作,需要为该客户端分配独占锁。若此时目标文件已存在其他客户端的独占锁,需要将该文件锁请求对应的文件锁状态标记为轮询阻塞锁状态,以便后续步骤客户端轮询发送文件锁请求,直至被响应。

s206:向发起目标文件锁请求的客户端返回阻塞状态,以便所述客户端每隔预设时间发起所述目标文件锁请求,直至所述目标文件锁请求被所述服务器响应。

由此可见,本实施例构建线程对阻塞锁链表进行轮询,实现对文件锁请求的文件锁状态的标记,提高了网络文件系统中文件锁管理的可维护性,保证了在并发业务中文件的具有高度一致性。

下面介绍本申请提供的一种应用实施例,具体的,图3为nfs-ganesha文件锁请求处理流程架构图,图4为通过轮询方式标识异步阻塞文件锁的方法处理流程图。

对于不同客户端先后发起对同一文件的读操作的情况,nfs文件锁请求定义为共享读锁,由于客户端不进行写操作,标记文件锁请求的文件锁状态为无阻塞锁状态。

对于不同客户端先后发起对同一文件的写操作的情况,nfs文件锁请求定义为独占写锁,由于对文件进行修改等操作,属于阻塞锁,当一个客户端具有写锁时,另一个客户端等待,此时处于阻塞状态,服务端收到阻塞指令后,进行两种处理:第一种是底层分布式文件系统支持异步阻塞锁,当第一个客户端释放锁后,服务端主动通知客户端锁释放,处于阻塞状态的第二个客户端即可被授权锁。本第二种是分布式文件系统不支持异步阻塞锁时,服务端进行轮询,客户端被动等待授权,用以实现多客户端异步阻塞功能。

对于不同客户端先后发起对同一文件的读、写操作的情况,由于包含写操作,因此也属于独占锁,与上述情况类似,在此不再赘述。对于不同客户端先后发起对不同文件的读、写操作的情况,由于对不同文件的操作,互不影响。

下面对本申请实施例提供的一种文件锁处理装置进行介绍,下文描述的一种文件锁处理装置与上文描述的一种文件锁处理方法可以相互参照。

参见图5,根据一示例性实施例示出的一种文件锁处理装置的结构图,如图5所示,包括:

获取模块501,用于获取所述目标文件系统的阻塞锁链表;其中,所述阻塞锁链表包括所述目标文件系统当前被挂起的所有文件锁请求;

判断模块502,用于判断目标文件系统是否支持异步阻塞锁;若否,则启动第一确定模块503的工作流程;

所述第一确定模块503,用于根据每个所述文件锁请求的请求类型确定每个所述文件锁请求对应的文件锁状态;其中,所述文件锁状态包括无阻塞锁状态和轮询阻塞锁状态;

返回模块504,用于向发起目标文件锁请求的客户端返回阻塞状态,以便所述客户端每隔预设时间发起所述目标文件锁请求,直至所述目标文件锁请求被所述服务器响应,其中,所述目标文件锁请求为文件锁状态为所述轮询阻塞锁状态的文件锁请求。

本申请实施例提供的文件锁处理装置,当目标文件系统不支持异步阻塞锁时,基于每个文件锁请求的请求类型确定其对应的文件锁状态,实现对阻塞锁链表中的所有文件锁请求进行文件锁状态的识别。向发起轮询阻塞锁状态的文件锁请求的客户端返回阻塞状态,客户端接收到该阻塞状态后每隔预设时间重新发起文件锁请求,直至文件锁请求被服务器响应。由此可见,本申请实施例提供的文件锁处理装置,通过标识文件锁状态,提高了文件系统中文件锁管理的可维护性,保证了在并发业务中文件的具有高度一致性。

在上述实施例的基础上,作为一种优选实施方式,所述获取模块501具体为当接收到目标客户端对所述目标文件系统中目标文件的文件锁请求时,获取所述目标文件系统的阻塞锁链表的模块。

在上述实施例的基础上,作为一种优选实施方式,还包括:

第二确定模块,用于当所述目标文件系统支持异步阻塞锁时,若所述文件锁请求为对所述目标文件的读请求,则将所述文件锁请求对应的文件锁状态确定为所述无阻塞锁状态;若所述文件锁请求包括对所述目标文件的写请求,则将所述文件锁请求对应的文件锁状态确定为异步阻塞锁状态。

在上述实施例的基础上,作为一种优选实施方式,所述获取模块501具体为每隔预设时间间隔获取所述目标文件系统的阻塞锁链表的模块。

在上述实施例的基础上,作为一种优选实施方式,所述第一确定模块503包括:

第一确定单元,用于若所述文件锁请求为对所述目标文件的读请求,则将所述文件锁请求对应的文件锁状态确定为所述无阻塞锁状态;

第二确定单元,用于若若所述文件锁请求包括对所述目标文件的写请求,则将所述文件锁请求对应的文件锁状态确定为所述轮询阻塞锁状态。

在上述实施例的基础上,作为一种优选实施方式,所述第一确定模块503具体为创建线程池,并利用所述线程池中的目标线程遍历所述阻塞锁链表,以便根据每个所述文件锁请求的请求类型确定所述阻塞锁链表中每个所述文件锁请求对应的文件锁状态的模块。

关于上述实施例中的装置,其中各个模块执行操作的具体方式已经在有关该方法的实施例中进行了详细描述,此处将不做详细阐述说明。

本申请还提供了一种电子设备,参见图6,本申请实施例提供的一种电子设备600的结构图,如图6所示,可以包括处理器11和存储器12。该电子设备600还可以包括多媒体组件13,输入/输出(i/o)接口14,以及通信组件15中的一者或多者。

其中,处理器11用于控制该电子设备600的整体操作,以完成上述的文件锁处理方法中的全部或部分步骤。存储器12用于存储各种类型的数据以支持在该电子设备600的操作,这些数据例如可以包括用于在该电子设备600上操作的任何应用程序或方法的指令,以及应用程序相关的数据,例如联系人数据、收发的消息、图片、音频、视频等等。该存储器12可以由任何类型的易失性或非易失性存储设备或者它们的组合实现,例如静态随机存取存储器(staticrandomaccessmemory,简称sram),电可擦除可编程只读存储器(electricallyerasableprogrammableread-onlymemory,简称eeprom),可擦除可编程只读存储器(erasableprogrammableread-onlymemory,简称eprom),可编程只读存储器(programmableread-onlymemory,简称prom),只读存储器(read-onlymemory,简称rom),磁存储器,快闪存储器,磁盘或光盘。多媒体组件13可以包括屏幕和音频组件。其中屏幕例如可以是触摸屏,音频组件用于输出和/或输入音频信号。例如,音频组件可以包括一个麦克风,麦克风用于接收外部音频信号。所接收的音频信号可以被进一步存储在存储器12或通过通信组件15发送。音频组件还包括至少一个扬声器,用于输出音频信号。i/o接口14为处理器11和其他接口模块之间提供接口,上述其他接口模块可以是键盘,鼠标,按钮等。这些按钮可以是虚拟按钮或者实体按钮。通信组件15用于该电子设备600与其他设备之间进行有线或无线通信。无线通信,例如wi-fi,蓝牙,近场通信(nearfieldcommunication,简称nfc),2g、3g或4g,或它们中的一种或几种的组合,因此相应的该通信组件15可以包括:wi-fi模块,蓝牙模块,nfc模块。

在一示例性实施例中,电子设备600可以被一个或多个应用专用集成电路(applicationspecificintegratedcircuit,简称asic)、数字信号处理器(digitalsignalprocessor,简称dsp)、数字信号处理设备(digitalsignalprocessingdevice,简称dspd)、可编程逻辑器件(programmablelogicdevice,简称pld)、现场可编程门阵列(fieldprogrammablegatearray,简称fpga)、控制器、微控制器、微处理器或其他电子元件实现,用于执行上述的文件锁处理方法。

在另一示例性实施例中,还提供了一种包括程序指令的计算机可读存储介质,该程序指令被处理器执行时实现上述文件锁处理方法的步骤。例如,该计算机可读存储介质可以为上述包括程序指令的存储器12,上述程序指令可由电子设备600的处理器11执行以完成上述的文件锁处理方法。

说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似部分互相参见即可。对于实施例公开的装置而言,由于其与实施例公开的方法相对应,所以描述的比较简单,相关之处参见方法部分说明即可。应当指出,对于本技术领域的普通技术人员来说,在不脱离本申请原理的前提下,还可以对本申请进行若干改进和修饰,这些改进和修饰也落入本申请权利要求的保护范围内。

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

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