磁盘锁的处理方法及装置与流程

文档序号:18360072发布日期:2019-08-06 23:42阅读:409来源:国知局
磁盘锁的处理方法及装置与流程

本申请涉及共享文件系统技术领域,具体而言,涉及一种磁盘锁的处理方法及装置。



背景技术:

在共享存储环境中,多台主机同时访问共享文件系统中的共享资源时,需要特定的锁定机制,以防止多台主机同时对一个共享资源进行写操作,主机对共享资源进行加锁或解锁是通过对该共享资源对应的磁盘锁的改写操作实现的。当加锁主机对某个共享资源请求的加锁级别与该共享资源当前授权给其他主机的锁级别不兼容时,加锁主机的加锁请求将被阻塞,该授权主机(即持有该共享资源对应的磁盘锁的主机)主动解锁后,加锁主机的加锁请求才能继续进行。当主机之间的网络正常时,可以通过网络消息将加锁阻塞的消息从加锁主机传递到授权主机,当主机之间的网络故障时,则无法进行上述通知动作。

目前的做法是在主机发现网络故障时,主机周期性地解锁所有授权给自己的共享资源,当后续业务需要的时候,再重新加锁;而无论是解锁还是加锁,都需要经历从磁盘中读取内容和将修改的内容写入磁盘的过程,故对于一个共享资源而言,若主机对其先解锁后重新加锁,则会产生四次磁盘输入输出(inputoutput,io),且因业务的需要一般大概率地会要求重新加锁,故主机针对所有已加锁成功的共享资源进行解锁后重新加锁的方式,会大量增加主机对磁盘的读写次数,从而极大影响了共享文件系统的性能。



技术实现要素:

本申请的目的在于提供一种磁盘锁的处理方法及装置,以降低主机对共享存储设备的读写次数,提高共享文件系统的性能。

为了实现上述目的,本申请实施例采用的技术方案如下:

第一方面,本申请实施例提出一种磁盘锁的处理方法,应用于共享文件系统中的第一主机,所述共享文件系统还包括除所述第一主机之外的第二主机和能够被所述第一主机、所述第二主机访问的共享存储设备,所述第一主机记录有所述第一主机当前持有的磁盘锁与所述当前持有的磁盘锁在所述共享存储设备上的位置信息的对应关系;所述方法包括:

当所述第一主机检测到与所述第二主机之间出现网络故障时,根据所述对应关系中的所述第一主机当前持有的第一磁盘锁的位置信息,从所述共享存储设备读取所述第二主机请求对所述第一磁盘锁对应的共享资源加锁时的请求状态;

当所述请求状态不为阻塞状态时,则不释放所述第一磁盘锁;其中,所述阻塞状态在所述第一主机阻塞所述第二主机对所述第一磁盘锁对应的共享资源加锁时写入所述共享存储设备。

第二方面,本申请实施例还提出一种磁盘锁的处理装置,应用于共享文件系统中的第一主机,所述共享文件系统还包括除所述第一主机之外的第二主机和能够被所述第一主机、所述第二主机访问的共享存储设备,所述第一主机记录有所述第一主机当前持有的磁盘锁与所述当前持有的磁盘锁在所述共享存储设备上的位置信息的对应关系;所述装置包括:

状态读取模块,用于当所述第一主机检测到与所述第二主机之间出现网络故障时,根据所述对应关系中的所述第一主机当前持有的第一磁盘锁的位置信息,从所述共享存储设备读取所述第二主机请求对所述第一磁盘锁对应的共享资源加锁时的请求状态;

磁盘锁处理模块,用于当所述请求状态不为阻塞状态时,则不释放所述第一磁盘锁;其中,所述阻塞状态在所述第一主机阻塞所述第二主机对所述第一磁盘锁对应的共享资源加锁时写入所述共享存储设备。

相对现有技术,本申请实施例具有以下有益效果:

本申请实施例所提供的磁盘锁的处理方法及装置,应用于共享文件系统中的第一主机,共享文件系统还包括除第一主机之外的第二主机和能够被第一主机、第二主机访问的共享存储设备,第一主机记录有第一主机当前持有的磁盘锁与当前持有的磁盘锁在共享存储设备上的位置信息的对应关系。当第一主机检测到与第二主机之间出现网络故障时,根据对应关系中的第一主机当前持有的第一磁盘锁的位置信息,从共享存储设备读取第二主机请求对第一磁盘锁对应的共享资源加锁时的请求状态,当该请求状态不为阻塞状态时,则不释放第一磁盘锁,其中,该阻塞状态在第一主机阻塞第二主机对第一磁盘锁对应的共享资源加锁时写入共享存储设备。由于第一主机是根据从共享存储设备读取第二主机请求加锁时的请求状态来判断第一主机是否阻塞第二主机对共享资源加锁,若该请求状态表明第一主机不阻塞第二主机对磁盘锁对应的共享资源加锁时,第一主机不释放该磁盘锁,即不对该磁盘锁对应的共享资源解锁。如此,针对没有发生加锁阻塞的共享资源,只需产生一个读io,相比现有技术中主机对所有已加锁成功的共享资源进行解锁后重新加锁的方式,避免了不必要的解锁和重新加锁的动作,极大降低了主机对共享存储设备的读写次数,进而有效提高了共享文件系统的性能。

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

附图说明

为了更清楚地说明本申请的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,应当理解,以下附图仅示出了本申请的某些实施例,因此不应被看作是对范围的限定,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他相关的附图。

图1示出了本申请实施例所提供的磁盘锁的处理方法及装置的应用环境示意图。

图2示出了本申请实施例所提供的磁盘锁的处理方法的流程示意图。

图3示出了磁盘锁的内存对象与磁盘锁在共享存储设备上的位置信息的对应关系的一种示意图。

图4示出了磁盘锁的内存对象与磁盘锁在共享存储设备上的位置信息的对应关系的另一种示意图。

图5示出了主机请求对共享资源加锁的一种示意图。

图6示出了主机请求对共享资源加锁的另一种示意图。

图7示出了本申请实施例所提供的磁盘锁的处理装置的功能模块示意图。

图8示出了图1中的主机的一种结构框图。

图标:500-磁盘锁的处理装置;510-状态读取模块;520-阻塞判断模块;530-磁盘锁处理模块;610-存储器;620-处理器;630-通信接口。

具体实施方式

下面将结合本申请中附图,对本申请中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。通常在此处附图中描述和示出的本申请的组件可以以各种不同的配置来布置和设计。因此,以下对在附图中提供的本申请的实施例的详细描述并非旨在限制要求保护的本申请的范围,而是仅仅表示本申请的选定实施例。基于本申请的实施例,本领域技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本申请保护的范围。

应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步定义和解释。

本申请实施例所提供的磁盘锁的处理方法及装置可以应用于图1所示的共享文件系统中。请参照图1,该共享文件系统可以包括共享存储设备及多个主机(例如,主机1,主机2,…,主机n),多个主机均与交换机连接以实现多个主机之间的相互通信,多个主机还与共享存储设备通信连接以实现每个主机对共享存储设备的访问。

在本实施例中,该多个主机之间采用的通信网络,和主机与共享存储设备之间采用的通信网络不同。例如,该多个主机之间采用a网络进行通信,主机与共享存储设备之间采用b网络进行通信。

该共享存储设备上可以存储多个共享资源,在创建共享资源时,需为每个共享资源分配对应的磁盘锁,只有持有磁盘锁的主机才拥有该磁盘锁对应的共享资源的访问权限。对于共享文件系统中的每个主机,其持有的所有磁盘锁均保存在共享存储设备中,该磁盘锁在共享存储设备上对应一定大小的存储空间,用于存储磁盘锁的相关数据,例如,该磁盘锁对应的共享资源授权给已持有该磁盘锁的主机的锁级别、已对共享资源加锁成功的主机的标识信息以及加锁主机请求对共享资源加锁时的请求状态等信息。

当主机对某个共享资源加锁成功时,则会在该共享资源对应的磁盘锁上记录该加锁成功的主机的标识信息以及该共享资源当前授权给该主机的锁级别(即该主机持有的加锁级别);同时,主机中也会在自己的内存中记录该磁盘锁与该磁盘锁在共享存储设备上的位置信息的对应关系。当主机向某个共享资源请求的加锁级别与该共享资源当前授权给已持有该磁盘锁的主机的锁级别不兼容时,该主机的加锁请求将被阻塞,则该主机会在该磁盘锁中写入阻塞状态。

在本实施例中,每个主机能够利用预先设定的保活机制来检测与其他主机之间的通信网络是否可用。即每个主机会周期性地向共享文件系统中的其他主机发送保活消息(例如:心跳报文),该保活消息用于告知其他主机自己“在线”,同时其他主机也分别向该主机发送保活消息。当该主机能够接收到所有其他主机发送的保活消息时,则可判定主机之间的通信网络正常;当该主机不能接收到其他主机中的至少一个主机的保活消息时,则可判定主机之间的通信网络出现故障。当主机之间的通信网络正常的时候,主机之间可以通过a网络发送加锁阻塞消息,以要求持有磁盘锁的主机对共享资源进行解锁;当某个主机检测到与其他主机之间出现网络故障时,该主机可以通过b网络访问共享存储设备,以从共享存储设备中读取该主机持有的磁盘锁的相关数据,并判断是否发生加锁阻塞。下面结合附图和具体实施方式对本申请做进一步详细的说明。

请参照图2,为本申请实施例所提供的磁盘锁的处理方法的流程示意图。需要说明的是,本申请实施例的磁盘锁的处理方法并不以图2以及以下的具体顺序为限制,应当理解,在其它实施例中,本申请的磁盘锁的处理方法其中部分步骤的顺序可以根据实际需要相互交换,或者其中的部分步骤也可以省略或删除。该方法的执行主体可以是图1所示的任一个主机,其包括以下步骤:

步骤s101,当第一主机检测到与第二主机之间出现网络故障时,根据对应关系中的第一主机当前持有的第一磁盘锁的位置信息,从共享存储设备读取第二主机请求对第一磁盘锁对应的共享资源加锁时的请求状态。

在本实施例中,第一主机可以是图1所示的任一个主机,而第二主机可以是图1所示的多个主机中除第一主机之外的主机(例如,主机2、主机3、…或主机n);该第一磁盘锁可以理解为第一主机当前持有的磁盘锁中的任一个磁盘锁。

例如,假设图1所示的主机1为第一主机,当主机1检测到与第二主机之间的通信网络不可用时,则确定出现网络故障,便根据主机1记录的对应关系中的第一磁盘锁的位置信息,从共享存储设备上保存的第一磁盘锁中读取第二主机请求对该第一磁盘锁对应的共享资源加锁时的请求状态。

需要说明的是,在本实施例中,与第一主机之间出现网络故障的第二主机与请求对该第一磁盘锁对应的共享资源加锁的第二主机可以相同,也可以不同,本申请对此不做限制。也即是说,当主机1检测到与主机2之间出现网络故障时,从第一磁盘锁中读取的请求状态可能是主机2请求对该第一磁盘锁对应的共享资源加锁时的请求状态,也可能是主机3、主机4、…或主机n对该第一磁盘锁对应的共享资源加锁时的请求状态。

在本实施例中,磁盘锁的位置信息可以采用逻辑区块地址(logicalblockaddress,lba)表示,通过lba可以确定磁盘锁在共享存储设备上的位置或者地址。该第一主机当前持有的磁盘锁在第一主机记录的对应关系中以该当前持有的磁盘锁的位置信息为键值,第一主机按照预设的键值排序规则遍历对应关系,并根据第一磁盘锁在对应关系中的键值从共享存储设备读取第二主机请求对第一磁盘锁对应的共享资源加锁时的请求状态。

应当理解,该对应关系中记录的磁盘锁并不等同于共享存储设备上保存的磁盘锁,而是对共享存储设备上保存的磁盘锁进行抽象后所得到的对象(本实施例中称为磁盘锁的内存对象)。作为一种实施方式,磁盘锁的内存对象与磁盘锁在共享存储设备上的位置信息的对应关系在每个主机的内存中可以按照红黑树的形式建立,以便主机顺序下发请求状态读取指令,实现请求状态的高效查询。具体地,当一个主机想要针对某个共享资源加锁的时候,首先以lba为键值,查找当前红黑树中是否已经包含了该共享资源对应的磁盘锁的内存对象,如果没有,则创建该磁盘锁的内存对象,并将该磁盘锁的内存对象插入到红黑树中。其中,该磁盘锁的内存对象中记录有磁盘锁的名称、主机对该磁盘锁对应的共享资源加锁的加锁状态(例如,“正在加锁”、“成功加锁”、“请求加锁”)等信息。主机在创建该磁盘锁的内存对象时,会将该磁盘锁的内存对象中的加锁状态记录为“正在加锁”或“请求加锁”,表明该磁盘锁为主机想要持有的磁盘锁,待主机对共享资源成功加锁后,会在磁盘锁的内存对象中将加锁状态由“正在加锁”或“请求加锁”改为“成功加锁”,表明该磁盘锁为主机已持有的磁盘锁。

可以理解,每个主机按照红黑树的形式建立的对应关系中,不仅包括该主机当前持有的磁盘锁的内存对象,还可以包括该主机想要持有的磁盘锁(即主机想要加锁但还未加锁成功的共享资源对应的磁盘锁)的内存对象。因此,当第一主机以预设的键值排序规则遍历该对应关系时,对于该对应关系中的第一主机当前持有的磁盘锁的内存对象,第一主机可以根据其键值从共享存储设备中读取到第二主机请求对共享资源加锁时的请求状态;对于该对应关系中的第一主机想要持有的磁盘锁的内存对象,因第一主机还未持有该磁盘锁(即第一主机还未获得该共享资源的授权),故不需要从共享存储设备保存的磁盘锁中读取第二主机请求对共享资源加锁时的请求状态。

如图3所示,为第一主机按照红黑树的形式建立对应关系的一种示意图。在该对应关系中,每个节点用于表示第一主机当前持有的磁盘锁的内存对象或者第一主机想要持有的磁盘锁的内存对象,且每个节点的键值为第一主机当前持有的磁盘锁在共享存储设备上的位置信息或者第一主机想要持有的磁盘锁在共享存储设备上的位置信息。例如,节点t1的键值lba=103,节点t2的键值lba=101,节点t3的键值lba=105,节点t4的键值lba=100,节点t5的键值lba=102,节点t6的键值lba=104,节点t7的键值lba=106。

由于红黑树满足二叉查找树的特征,即任何节点的键值一定大于其左子树中的每一个节点的键值,并小于其右子树中每一个节点的键值。当第一主机想要针对位置信息为“99”的磁盘锁对应的共享资源加锁时,则首先以lba=99为键值,发现当前红黑树中没有包含该磁盘锁的内存对象,此时需要创建该磁盘锁的内存对象,由于lba=99<lba=100,故将该磁盘锁的内存对象插入到当前红黑树中节点t4的左子节点。如图4所示,节点t8即为新插入到红黑树中的磁盘锁的内存对象,节点t8的键值lba=99。

若此时第一主机检测到与第二主机之间出现网络故障,则启动查询请求状态的动作,即按照键值从小到大的排序规则遍历图4所示的对应关系。第一主机首先访问节点t8,并读取出该节点t8对应的加锁状态,发现该加锁状态为“正在加锁”,表明第一主机正在对节点t8对应的共享资源加锁,第一主机还未持有该节点t8对应的磁盘锁,不需要从共享存储设备读取请求状态,开始访问下一个节点t4,若读取出的t4节点对应加锁状态为“成功加锁”,表明t4节点对应的磁盘锁为第一主机已持有的磁盘锁,则第一主机从共享存储设备读取节点t4对应的请求状态,然后依次访问节点t2、t5、t1、t6、t3、t7。

如此,第一主机按照键值从小到大的排序规则依次访问节点t8、t4、t2、t5、t1、t6、t3、t7,并从共享存储设备读取每个节点对应的请求状态,从而极大方便了第一主机顺序发送请求状态的读取指令,且按照键值升序遍历对应关系,有可能将多个请求状态的读取指令合并为一个更大的读指令,从而提高请求状态的读取性能,实现请求状态的高效查询。例如,第一主机需要发送两个请求状态读取指令,每个请求状态读取指令均包括读取位置和读取长度,其中,第一个请求状态读取指令中的读取位置为100,读取长度为512个字节,第二请求状态读取指令中的读取位置为101,读取长度为512个字节,因这两个请求状态读取指令中的读取位置是连续的(即100,101),则可以将这两个请求状态读取指令合并为一个更大的读指令,合并后的读指令中的读取位置为100,读取长度为1024个字节,此时第一主机只需下发一个读指令(即该合并后的读指令),即可获得第一个请求状态读取指令和第二个请求状态读取指令对应的数据。

需要说明的是,上述预设的键值排序规则可以是按照键值从小到大的顺序,还可以是按照键值从大到小的顺序,本申请对此不做限制。

还需要说明的是,本申请提出的将磁盘锁的内存对象按照红黑树的形式建立对应关系仅为一种示例,在实际应用中,该磁盘锁的内存对象还可以采用其他的形式进行组织,以便于实现数据的高效查找。

可选地,该第一磁盘锁在共享存储设备上具有对应的状态存储区域,该状态存储区域与该第一磁盘锁的位置信息关联,该状态存储区域用于存储该请求状态。第一主机根据对应关系在共享存储设备中确定与第一磁盘锁的位置信息关联的状态存储区域,并从状态存储区域读取第二主机请求对第一磁盘锁对应的共享资源加锁时的请求状态。

例如,假设每个磁盘锁在共享存储设备上对应512个字节的存储空间,则可以通过该512个字节的存储空间来存储共享资源授权给已持有该磁盘锁的主机的锁级别、已对共享资源加锁成功的主机的标识信息以及加锁主机请求对共享资源加锁时的请求状态等信息。一个示例中,可以设置该512个字节中的1~100字节用于存储共享资源授权给已持有该磁盘锁的主机的锁级别,设置101字节~400字节用于存储已对共享资源加锁成功的主机的标识信息,将401字节~512字节作为该磁盘锁的状态存储区域,用于存储请求状态,且设定在磁盘锁初始化时,该状态存储区域存储的请求状态为预设值。

当后续有第二主机请求对该磁盘锁对应的共享资源加锁时,第二主机首先需要从该磁盘锁中读取该共享资源当前授权给已持有该磁盘锁的主机的锁级别,当第二主机想要向该共享资源请求的加锁级别与该共享资源当前授权给已持有该磁盘锁的主机的锁级别不兼容时,则该第二主机的加锁请求被阻塞,第二主机将该状态存储区域中的预设值改写为该第二主机的标识信息。其中,该预设值可以理解为磁盘锁在初始化时的默认值(例如,255),该标识信息为第二主机在第一主机阻塞第二主机对共享资源加锁时写入磁盘锁的状态存储区域中,该标识信息可以是主机的节点号(例如,2、3、…、n)。

此外,若第一主机不阻塞第二主机对磁盘锁对应的共享资源加锁,即第二主机能够成功对磁盘锁对应的共享资源加锁,此时,第二主机的标识信息将被写入前述的101字节~400字节,表明第二主机已对该磁盘锁对应的共享资源成功加锁。

在实际应用中,共享资源的加锁级别一般包括三种:完全互斥(exmode,ex)、可读不可写(prmode,pr)、未加锁(nlmode,nl),当主机持有ex级别的锁时,其他主机不能在同时访问和操作对应的共享资源;当主机持有pr级别的锁时,其他主机可以同时访问,但是不能修改对应的共享资源。

如图5所示,为主机请求对共享资源加锁的一种示意图。假设在第一磁盘锁c初始化后,主机m请求对该第一磁盘锁c对应的共享资源加锁,则从该第一磁盘锁c中读取该共享资源当前授权给已持有该磁盘锁的主机的锁级别,主机m发现对该共享资源请求的加锁级别(ex)与该共享资源当前授权给已持有该磁盘锁的主机的锁级别兼容,则将自己的标识信息写入该第一磁盘锁c的加锁成功主机列表中,并将第一磁盘锁c中的当前授权给已持有该磁盘锁的主机的锁级别改写为授权给主机m的锁级别,此时主机m对该第一磁盘锁c对应的共享资源加锁成功,拥有对该第一磁盘锁c对应的共享资源的访问权限。在主机m对第一磁盘锁c对应的共享资源加锁成功后,主机n请求对该共享资源加锁且请求的加锁级别为pr,首先从第一磁盘锁c中读取出该共享资源当前授权给已持有该磁盘锁的主机的锁级别ex,发现自己请求的加锁级别pr与该共享资源当前授权给已持有该磁盘锁的主机的锁级别ex不兼容,主机n的加锁请求被阻塞,主机n向该第一磁盘锁c的状态存储区域写入主机n的标识信息。

如图6所示,为主机请求对共享资源加锁的另一种示意图。当主机m对第一磁盘锁c对应的共享资源加锁成功,且该共享资源当前授权给主机m的锁级别为pr时,若主机n请求对该共享资源加锁且请求的加锁级别也为pr,则主机n对该共享资源请求的加锁级别pr与该共享资源当前授权给主机m的锁级别pr兼容,此时主机n将自己的标识信息写入该第一磁盘锁c的加锁成功主机列表中。

在本实施例中,为了提高第一主机读取请求状态的效率,第一主机以异步io的方式从共享存储设备读取第二主机请求对第一磁盘锁对应的共享资源加锁时的请求状态。

步骤s102,依据读取的请求状态,判断请求状态是否为阻塞状态。

在本实施例中,该请求状态可以通过预设值或者共享文件系统中除第一主机之外的其他主机的标识信息进行表征。其中,该预设值用于表征该请求状态不为阻塞状态,该标识信息用于表征该请求状态为阻塞状态。

若第一主机读取的请求状态为预设值,则可判定该请求状态不为阻塞状态,执行步骤s103;若第一主机读取的请求状态为第二主机的标识信息,则可以判定该请求状态为阻塞状态,执行步骤s104。

仍以图5及图6所示的第一磁盘锁c为例,假设主机m为第一主机,主机m在检测到网络故障后,遍历对应关系,并从键值最小的磁盘锁开始读取请求状态。当主机m遍历到第一磁盘锁c时,根据第一磁盘锁c在对应关系中的键值,确定该第一磁盘锁c在共享存储设备上的位置,进而确定该第一磁盘锁c的状态存储区域,并从第一磁盘锁c的状态存储区域读取出请求状态,若该请求状态为主机n的标识信息(参考图5),则判定该请求状态为阻塞状态;若该请求状态为预设值“255”(参考图6),则判定该请求状态不为阻塞状态。

步骤s103,当请求状态不为阻塞状态时,则不释放第一磁盘锁;其中,阻塞状态在第一主机阻塞第二主机对第一磁盘锁对应的共享资源加锁时写入共享存储设备。具体的,可以由第二主机写入第一磁盘锁对应的存储空间,例如写入存储空间的状态存储区域。

在本实施例中,该阻塞状态可以通过第一磁盘锁对应存储空间的状态存储区域中存储的信息表示。当存储的信息为主机标识时,则认为是阻塞状态,当存储的信息为预设值时,则认为不存在阻塞状态。一个示例中,当第二主机在第一主机阻塞第二主机对第一磁盘锁对应的共享资源加锁时,在第一磁盘锁对应存储空间的状态存储区域中记录第二主机的标识信息。

当请求状态不为阻塞状态,表明第一主机不阻塞第二主机对第一磁盘锁对应的共享资源加锁,第一主机不需要释放该第一磁盘锁,第二主机能够对该第一磁盘锁对应的共享资源成功加锁,在第二主机对该第一磁盘锁对应的共享资源成功加锁后,第一、二主机都是第一磁盘锁的持有者。

步骤s104,当请求状态为阻塞状态时,则释放第一磁盘锁。

在本实施例中,当请求状态为阻塞状态时,表明第一主机阻塞第二主机对第一磁盘锁对应的共享资源加锁,需要第一主机释放该第一磁盘锁,此时第一主机不再是第一磁盘锁的持有者,这样第二主机的加锁请求才可以继续进行。其中,第一主机释放该第一磁盘锁,相当于是对该第一磁盘锁对应的共享资源进行解锁操作,该解锁操作可以通过caw(compareandwrite,比较写)指令实现,即第一主机在判断自己阻塞第二主机加锁时,向共享存储设备发送caw指令,共享存储设备依据caw指令将第一主机在第一磁盘锁上的加锁信息删除,比如删除加锁成功主机列表中的第一主机的标识信息以及该共享资源当前授权给第一主机的锁级别。

可见,本申请实施例提供的磁盘锁的处理方法,是在第一主机检测到与第二主机之间出现网络故障时,才启动查询请求状态的动作。即第一主机在检测到网络故障时,从共享存储设备中读取第二主机请求对第一磁盘锁对应的共享资源加锁时的请求状态,并根据该请求状态判断该第一主机是否阻塞第二主机加锁,若第一主机不阻塞第二主机加锁,则不释放第一磁盘锁;若第一主机阻塞第二主机加锁,则释放第一磁盘锁。如此,第一主机只需在阻塞第二主机对共享资源加锁时,才对该共享资源进行解锁操作,针对没有发生加锁阻塞的共享资源,只需产生一个读io,减少了解锁次数。而现有技术为了解决主机之间的网络故障时,无法通过网络消息传递加锁阻塞的消息的问题,需要主机周期性地解锁所有授权给自己的共享资源,当后续业务需要的时候,再重新加锁,而业务一般大概率地会要求重新加锁,故相比现有技术中主机对所有已加锁成功的共享资源进行解锁后重新加锁的方式,本申请有效避免了不必要的解锁和重新加锁的动作,极大降低了主机对共享存储设备的读写次数,从而有效提高了共享文件系统的性能。

还值得注意的是,在共享文件系统中,一个加锁主机一般不会阻塞其他加锁主机(这是共享文件系统所承载的业务决定的),也即是说,在实际应用中,发生加锁阻塞的概率比较小,但现有技术中主机并不会去判断是否发生加锁阻塞,而是在网络故障的时候,周期性地解锁所有授权给自己的共享资源,而后根据业务的需要重新加锁,从而进一步导致了不必要的解锁和加锁的动作,也会影响共享文件系统的性能。在本申请中,通过读取磁盘锁上的请求状态来判断该第一主机是否阻塞第二主机对该磁盘锁对应的共享资源加锁,若该第一主机不阻塞第二主机对该磁盘锁对应的共享资源加锁,则不对该磁盘锁对应的共享资源进行加锁操作;若该第一主机阻塞第二主机对该磁盘锁对应的共享资源加锁,则对该磁盘锁对应的共享资源进行加锁操作,有效避免了在未发生加锁阻塞的情况下对共享资源进行不必要的解锁和重新加锁的动作,降低了主机对共享存储设备的读写次数。

请参照图7,为本申请实施例所提供的磁盘锁的处理装置500的功能模块示意图。需要说明的是,本实施例所提供的磁盘锁的处理装置500,其基本原理及产生的技术效果与前述方法实施例相同,为简要描述,本实施例中未提及部分,可参考前述方法实施例中的相应内容。磁盘锁的处理装置500可应用于图1所示的任一个主机,其包括状态读取模块510、阻塞判断模块520及磁盘锁处理模块530。

该状态读取模块510用于当第一主机检测到与第二主机之间出现网络故障时,根据对应关系中的第一主机当前持有的第一磁盘锁的位置信息,从共享存储设备读取第二主机请求对第一磁盘锁对应的共享资源加锁时的请求状态。

可选地,该第一主机当前持有的磁盘锁在对应关系中以当前持有的磁盘锁的位置信息为键值,状态读取模块510具体用于按照预设的键值排序规则遍历对应关系,并根据第一磁盘锁在对应关系中的键值从共享存储设备读取第二主机请求对第一磁盘锁对应的共享资源加锁时的请求状态。

可选地,该第一磁盘锁在共享存储设备上具有对应的状态存储区域,该状态存储区域与第一磁盘锁的位置信息关联,该状态存储区域用于存储请求状态。该状态读取模块510具体用于根据对应关系在共享存储设备中确定与第一磁盘锁的位置信息关联的状态存储区域,并从状态存储区域读取第二主机请求对第一磁盘锁对应的共享资源加锁时的请求状态。

可选地,该状态读取模块510具体用于以异步io的方式从共享存储设备读取第一主机已加锁成功的磁盘锁的状态。

可以理解,该状态读取模块510可以执行上述步骤s101。

可选地,该请求状态通过预设值或共享文件系统中除第一主机之外的其他主机的标识信息进行表征,该阻塞判断模块520用于依据读取的请求状态,判断请求状态是否为阻塞状态;若请求状态为预设值,则判定请求状态不为阻塞状态;若请求状态为第二主机的标识信息,则判定请求状态为阻塞状态。

可以理解,该阻塞判断模块520可以执行上述步骤s102。

该磁盘锁处理模块530用于当请求状态不为阻塞状态时,则不释放第一磁盘锁;当请求状态为阻塞状态时,则释放第一磁盘锁;其中,阻塞状态在第一主机阻塞第二主机对第一磁盘锁对应的共享资源加锁时写入共享存储设备。具体的,可以由第二主机写入第一磁盘锁对应的存储空间,例如写入存储空间的状态存储区域。

可以理解,该磁盘锁处理模块530可以执行上述步骤s103及步骤s104。

请参照图8,为图1所示的主机的一种结构框图。该主机可以包括存储器610、处理器620和通信接口630,该存储器610、处理器620和通信接口630,各元件相互之间直接或间接地电性连接,以实现数据的传输或交互。例如,这些元件相互之间可通过一条或多条通讯总线或信号线实现电性连接。存储器610可用于存储软件程序及模块,如本申请实施例所提供的磁盘锁的处理方法及装置对应的程序指令/模块,处理器620通过执行存储在存储器610内的软件程序及模块,从而执行各种功能应用以及数据处理。该通信接口630可用于与其他节点设备进行信令或数据的通信。

其中,存储器610可以是但不限于,随机存取存储器(randomaccessmemory,ram),只读存储器(readonlymemory,rom),可编程只读存储器(programmableread-onlymemory,prom),可擦除只读存储器(erasableprogrammableread-onlymemory,eprom),电可擦除只读存储器(electricerasableprogrammableread-onlymemory,eeprom)等。

处理器620可能是一种集成电路芯片,具有信号处理能力。该处理器620可以是通用处理器,包括中央处理器(centralprocessingunit,cpu)、网络处理器(networkprocessor,np)等;还可以是数字信号处理器(dsp))、专用集成电路(asic)、现成可编程门阵列(fpga)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。

可以理解,图8所示的结构仅为示意,主机还可包括比图8中所示更多或者更少的组件,或者具有与图8所示不同的配置。图8中所示的各组件可以采用硬件、软件或其组合实现。

综上,本申请实施例所提供的磁盘锁的处理方法及装置,应用于共享文件系统中的第一主机,共享文件系统还包括除第一主机之外的第二主机和能够被第一主机、第二主机访问的共享存储设备,第一主机记录有第一主机当前持有的磁盘锁与当前持有的磁盘锁在共享存储设备上的位置信息的对应关系。当第一主机检测到与第二主机之间出现网络故障时,根据对应关系中的第一主机当前持有的第一磁盘锁的位置信息,从共享存储设备读取第二主机请求对第一磁盘锁对应的共享资源加锁时的请求状态,当该请求状态不为阻塞状态时,则不释放第一磁盘锁;当该请求状态为阻塞状态时,则释放该第一磁盘锁;其中,该阻塞状态在第一主机阻塞第二主机对第一磁盘锁对应的共享资源加锁时写入共享存储设备。由于第一主机是在检测到与第二主机之间出现网络故障时,才从共享存储设备读取第二主机请求加锁时的请求状态,当该请求状态表明第一主机不阻塞第二主机对磁盘锁对应的共享资源加锁时,第一主机不释放该磁盘锁,即不对该磁盘锁对应的共享资源解锁,故针对没有发生加锁阻塞的共享资源,只需产生一个读io,相比现有技术中主机对所有已加锁成功的共享资源进行解锁后重新加锁的方式,避免了不必要的解锁和重新加锁的动作,极大降低了主机对共享存储设备的读写次数,进而有效提高了共享文件系统的性能。

本领域内的技术人员应明白,本申请可提供为方法、装置、设备或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、cd-rom、光学存储器等)上实施的计算机程序产品的形式。

本申请是参照根据本申请的方法、装置、设备和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。

这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。

这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。

在本申请所提供的几个实施例中,应该理解到,所揭露的装置和方法,也可以通过其它的方式实现。以上所描述的装置和方法实施例仅仅是示意性的,例如,附图中的流程图和框图显示了根据本申请的多个实施例的装置、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段或代码的一部分,所述模块、程序段或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现方式中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个连续的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或动作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。

另外,在本申请各个实施例中的各功能模块可以集成在一起形成一个独立的部分,也可以是各个模块单独存在,也可以两个或两个以上模块集成形成一个独立的部分。

所述功能如果以软件功能模块的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本申请各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:u盘、移动硬盘、只读存储器(rom,read-onlymemory)、随机存取存储器(ram,randomaccessmemory)、磁碟或者光盘等各种可以存储程序代码的介质。需要说明的是,在本文中,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。

以上所述仅为本申请的可选实施例而已,并不用于限制本申请,对于本领域的技术人员来说,本申请可以有各种更改和变化。凡在本申请的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本申请的保护范围之内。应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步定义和解释。

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