用于分布式文件系统执行重命名操作的方法和设备与流程

文档序号:11216341阅读:586来源:国知局
用于分布式文件系统执行重命名操作的方法和设备与流程

本申请涉及计算机领域,尤其涉及一种用于分布式文件系统执行重命名操作的技术。



背景技术:

随着信息技术的不断普及和深入化应用,越来越多的人们习惯使用计算机进行传输以及存储文件。为了区分每个文件的不同以及便于查找文件,每个文件都设定了自己的名称。但通常情况下,同一个文件名是不能标注在两个文件上的,或者在文件名出现冲突的情况下,就需要使用重命名功能。在单机系统或分布式系统中,重命名包括文件名变化的情况,也包括文件路径变化的情况(即文件移动)。在分布式系统中将命名空间进行分布式,使其构成一个联盟(federation),从而实现分布式系统的可扩展性。而federation中进行重命名(rename)操作只支持同一主节点组列表(volume)上的rename,而不支持volume间进行的rename操作。



技术实现要素:

本申请的目的是提供一种用于分布式文件系统执行重命名操作的方法与设备,以解决在不同主节点组列表间进行文件或目录重命名操作的问题。

根据本申请的一个方面,提供了一种用于分布式文件系统执行文件重命名操作的方法,包括:

获取文件重命名请求,并解析所述重命名请求;

当所述重命名请求为不同主节点组列表之间的文件重命名请求,则从源主节点组列表中获取源文件的文件锁,并在目标主节点组列表中创建临时文件并获取所述临时文件的文件锁;

基于所述源文件的文件类型,在存储所述源文件对应真实数据的从节点磁盘上进行硬链接操作和/或数据复制操作,以将所述真实数据对应关联到所述临时文件中;

将所述临时文件重命名为目标文件,并删除所述源文件。

根据本申请的另一个方面,提供了一种用于分布式文件系统执行目录重命名操作的方法,包括:

获取目录重命名请求,并解析所述重命名请求;

当所述重命名请求为不同主节点组列表之间的目录重命名请求,则从源主节点组列表中源目录的目录锁,并在目标主节点组列表中创建临时目录并在所述临时目录下创建临时文件,并获取所述临时目录的目录锁;

扫描所述源目录,以获取所述源目录的所有源文件,基于所述源文件的文件类型,在存储所述源文件对应真实数据的从节点磁盘上进行硬链接操作和/或数据复制操作,以将所述真实数据对应关联到所述临时文件中;

将所述临时文件重命名为目标文件,基于所述目标文件将所述临时目录重命名为目标目录,并删除所述源目录。

根据本申请的又一方面,还提供了一种用于分布式文件系统执行文件重命名操作的设备,包括:

获取文件请求装置,用于获取文件重命名请求,并解析所述重命名请求;

创建临时文件装置,用于当所述重命名请求为不同主节点组列表之间的文件重命名请求,则从源主节点组列表中获取源文件的文件锁,并在目标主节点组列表中创建临时文件并获取所述临时文件的文件锁;

数据操作装置,用于基于所述源文件的文件类型,在存储所述源文件对应真实数据的从节点磁盘上进行硬链接操作和/或数据复制操作,以将所述真实数据对应关联到所述临时文件中;

删除源文件装置,用于将所述临时文件重命名为目标文件,并删除所述源文件。

根据本申请的再一方面,还提供了一种用于分布式文件系统执行目录重命名操作的设备,包括:

获取目录请求装置,用于获取目录重命名请求,并解析所述重命名请求;

创建临时目录装置,用于当所述重命名请求为不同主节点组列表之间的目录重命名请求,则从源主节点组列表中源目录的目录锁,并在目标主节点组列表中创建临时目录并在所述临时目录下创建临时文件,并获取所述临时目录的目录锁;

数据处理装置,用于扫描所述源目录,以获取所述源目录的所有源文件,基于所述源文件的文件类型,在存储所述源文件对应真实数据的从节点磁盘上进行硬链接操作和/或数据复制操作,以将所述真实数据对应关联到所述临时文件中;

删除源目录装置,用于将所述临时文件重命名为目标文件,基于所述目标文件将所述临时目录重命名为目标目录,并删除所述源目录。

此外,本申请还提供了一种用于分布式文件系统执行文件重命名操作的设备,包括:

处理器;

以及被安排成存储计算机可执行指令的存储器,所述可执行指令在被执行时使所述处理器:

获取文件重命名请求,并解析所述重命名请求;

当所述重命名请求为不同主节点组列表之间的文件重命名请求,则从源主节点组列表中获取源文件的文件锁,并在目标主节点组列表中创建临时文件并获取所述临时文件的文件锁;

基于所述源文件的文件类型,在存储所述源文件对应真实数据的从节点磁盘上进行硬链接操作和/或数据复制操作,以将所述真实数据对应关联到所述临时文件中;

将所述临时文件重命名为目标文件,并删除所述源文件。

此外,本申请还提供了一种分布式文件系统中执行目录重命名操作的设备,包括:

处理器;

以及被安排成存储计算机可执行指令的存储器,所述可执行指令在被执行时使所述处理器:

获取目录重命名请求,并解析所述重命名请求;

当所述重命名请求为不同主节点组列表之间的目录重命名请求,则从源主节点组列表中源目录的目录锁,并在目标主节点组列表中创建临时目录并在所述临时目录下创建临时文件,并获取所述临时目录的目录锁;

扫描所述源目录,以获取所述源目录的所有源文件,基于所述源文件的文件类型,在存储所述源文件对应真实数据的从节点磁盘上进行硬链接操作和/或数据复制操作,以将所述真实数据对应关联到所述临时文件中;

将所述临时文件重命名为目标文件,基于所述目标文件将所述临时目录重命名为目标目录,并删除所述源目录。

与现有技术相比,根据本申请一个方面的实施例所述的方法和设备,通过对文件的重命名请求进行解析,确定重命名请求是否在同一主节点组列表中,若不在,则从源主节点组列表中获取源文件的文件锁,并在目标主节点组列表中创建临时文件并获取所述临时文件的文件锁,通过获取文件锁避免了在重命名过程中有用户写入新的数据;基于所述源文件的文件类型,在存储所述源文件对应真实数据的从节点磁盘上进行硬链接操作和/或数据复制操作,以将所述真实数据对应关联到所述临时文件中;最后,将所述临时文件重命名为目标文件,并删除所述源文件,完成不同主节点组列表之间的文件重命名操作,尽量保持了原有的文件系统的语义,同时上层用户可以无感知的继续使用文件系统。进一步地,通过上述重命名操作仅是元信息的迁移,减少了数据的大量拷贝操作。

进一步地,根据本申请的另一个方面的实施例所述的方法和设备,通过获取目录重命名请求对其进行解析确定是否在同一主节点组列表上,当在不同的主节点组列表时首先获取目录锁,以将目录设置成只读状态并在目标主节点组列表上创建临时目录和在临时目录下创建临时文件;接着,通过获取的源目录锁对源目录进行递归以获取源目录下的所有文件,在存储所述源文件对应真实数据的从节点磁盘上进行硬链接操作和/或数据复制操作,以将所述真实数据对应关联到所述临时文件中;最后,将文件进行重命名操作后将目标主节点组列表上的临时目录重命名成真正的文件,然后删除源目录完成目录的重命名操作,从而完成了在不同主节点组列表之间的目录重命名操作,且过程中避免出现数据丢失同时不影响用户使用。

附图说明

通过阅读参照以下附图所作的对非限制性实施例所作的详细描述,本申请的其它特征、目的和优点将会变得更明显:

图1示出根据本申请一个方面的一种用于分布式文件系统执行重命名操作的流程示意图;

图2示出根据本申请一个方面的一种用于分布式文件系统执行文件重命名操作的方法流程示意图;

图3示出根据本申请一个方面的一个优选实施例的步骤s13的流程示意图;

图4示出根据本申请一个方面的一种用于分布式文件系统执行目录重命名操作的方法流程示意图;

图5示出根据本申请一个方面的又一个优选实施例的步骤s23的流程示意图;

图6示出根据本申请再一个方面的一种用于分布式文件系统执行文件重命名操作的设备结构示意图;

图7示出根据本申请再一个方面的一个优选实施例的数据操作装置的结构示意图;

图8示出根据本申请又一个方面的一种用于分布式文件系统执行目录重命名操作的设备结构示意图;

图9示出根据本申请又一个方面的又一个优选实施例的数据处理装置的结构示意图。

附图中相同或相似的附图标记代表相同或相似的部件。

具体实施方式

下面结合附图对本申请作进一步详细描述。

图1示出根据本申请一个方面的一种用于分布式文件系统执行重命名操作的流程示意图。在一优选实施例中,如盘古(pangu)文件系统中,重命名操作分为重命名文件和重命名目录,其中,pangu属于主从节点(master-slave)结构,数据的元信息存储在主节点服务器上,真正的数据存储在从节点服务器上。用户可以使用pangu提供的应用程序接口(api)进行读写数据,对于一个文件,同时只能有一个客户端进行写数据。在系统中执行重命名文件和重命名目录操作时需要调用不同的api来完成,重命名文件应用程序接口(renamefileapi)和重命名目录应用程序接口(renamedirectoryapi)。因此,当有重命名请求时,需判断是重命名文件还是重命名目录,基于请求采用不同的方法执行文件重命名操作和目录重命名操作。

需要说明的是,以下用于分布式文件系统执行文件重命名操作的方法和设备中所述的实施例均以pangu文件系统架构为场景进行说明的,本领域技术人员应能理解,以pangu文件系统架构为场景的实施例仅为本申请的优选实施例,若其他现有的或今后可能出现的文件系统架构中的重命名操作如采用本申请所述的分布式文件系统执行文件重命名操作的方法和设备,也应包含在本发明保护范围以内,并在此以引用方式包含于此。

图2示出根据本申请一个方面的一种用于分布式文件系统执行文件重命名操作的方法流程示意图。所述方法包括步骤s11、步骤s12、步骤s13和步骤s14,其中,在步骤s11中,获取文件重命名请求,并解析所述重命名请求;在步骤s12中,当所述重命名请求为不同主节点组列表之间的文件重命名请求,则从源主节点组列表中获取源文件的文件锁,并在目标主节点组列表中创建临时文件并获取所述临时文件的文件锁;在步骤s13中,基于所述源文件的文件类型,在存储所述源文件对应真实数据的从节点磁盘上进行硬链接操作和/或数据复制操作,以将所述真实数据对应关联到所述临时文件中;在步骤s14中,将所述临时文件重命名为目标文件,并删除所述源文件。

具体地,在步骤s11中,获取文件重命名请求,并解析所述重命名请求。

在此,客户端在收到文件重命名请求后,按照内存中文件所在的主节点组列表(volume)的路由表对文件进行解析,确定重命名请求是否在相同的volume上,若是,则客户端发送重命名远程调用(renamerpc)接口对相应源文件进行重命名即可,若不在同一volume上,则执行步骤s12。需要说明的是,所述volume为在命名空间联盟(federation)中对命名空间分组后,每一组的称谓,为主节点(master)组的列表,通过列表的查询可知重命名请求是否在同一volume上进行。

具体地,在步骤s12中,当所述重命名请求为不同主节点组列表之间的文件重命名请求,则从源主节点组列表中获取源文件的文件锁,并在目标主节点组列表中创建临时文件并获取所述临时文件的文件锁。

在此,当确定重命名请求为不同主节点组列表(volume)之间的文件重命名请求时,利用open4append在源主节点组列表(源volume)上获取源文件的文件锁,并在目标volume上创建临时文件并获取临时文件的文件锁。优选地,所述文件锁为可读不可写锁类;只有获取到写锁的进程或线程才可以对文件进行写操作,在文件重命名过程中,获取源文件锁是为了避免在重命名过程中有用户写入了新的数据,但是在重命名后的目标volume上并没有看到新的数据而造成数据丢失,获取临时文件的锁是为了避免在重命名过程中有用户写数据导致重命名后与源文件中内容不一致。

需要说明的是,所述open4append是用于pangu内部文件打开写的方法,会保证对于同一个文件在同一个时刻只有一个客户端可以进行写操作。本领域技术人员应能理解,所述利用open4append获取文件锁的方法仅为本申请的一个举例,其他现有的或今后可能出现的获取文件锁的方法如可适用于本发明,也应包含在本发明保护范围以内,并在此以引用方式包含于此。

具体地,在步骤s13中,基于所述源文件的文件类型,在存储所述源文件对应真实数据的从节点磁盘上进行硬链接操作和/或数据复制操作,以将所述真实数据对应关联到所述临时文件中。

在此,获取临时文件锁后基于所述源文件的文件类型开始对真实的数据(data)在从节点服务器(数据块存储服务器,chunkserver)的磁盘上进行硬链接(hardlink)或数据复制操作,以将源文件中真实的数据移动到所创建的临时文件中;对不同文件类型中的真实数据对应关联到临时文件的处理方式的不同的目的是:在重命名过程失败,造成源volume上和目标volume上都相同的文件,那么用户再写数据后,由于真正的数据在磁盘上进行的硬链接可能造成数据错乱。在一优选实施例中,pangu文件系统中,文件的元信息存储在master上,文件的真实数据存储在chunkserver上,创建文件时是只在master端修改元信息,链接时只是在chunkserver上对数据进行链接;例如,用户写了一个长度为64mb的文件,则文件的长度、创建时间、修改时间。文件名等元信息记录在master端,而用户的实际数据记录在chunkserver上,当在volume之间进行文件的移动时,是对实际的数据进行链接,而元信息需要重新创建。

具体地,在步骤s14中,将所述临时文件重命名为目标文件,并删除所述源文件。

在此,在本申请一优选实施例中,优选地,当完成步骤s13后,则进行更新所述临时文件的元信息,将所述临时文件的元信息写入所述目标主节点设备,并关闭所述临时文件的当前写操作。在此,当将存储在chunkserver上的真实数据通过硬链接操作和/或数据复制操作对应关联到所述临时文件中后,将临时文件的元信息进行更新,将创建临时文件及对临时文件进行修改等元信息写到目标volume上的目标主节点设备(目标master)上,并关闭所述临时文件的当前写操作,如可调用commitandclose函数可实现元信息写到目标volume上,其中,所述commitandclose是盘古内部将文件的元信息写到master端并且将该文件的写关闭掉的函数;随后将已有真实数据的临时文件重命名为目标文件,最后将源volume上的源文件删除完成不同volume之间的文件重命名操作。

本申请一实施例所述用于分布式文件系统中执行文件重命名操作的方法,通过在目标volume上采用先创建一个临时文件,再将临时文件重命名到真正的文件是防止重命名过程中失败,造成目标volume端有一个残缺的文件,影响用户的使用,而且通过所述方法降低了在两个volume上出现相同文件的概率,从而避免分布式文件系统中使用文件混乱的情况。

优选地,所述源文件的文件类型包括:仅能追加写的非日志文件、仅能追加写的日志文件、可随机写入文件;图3示出根据本申请一个方面的一个优选实施例的步骤s13的流程示意图;所述步骤s13包括:步骤s131、步骤s132和步骤s133;其中,在步骤s131中,若所述源文件的类型为仅能追加写的非日志文件,则将所述真实数据的最后一个数据块进行数据复制操作,并将其他数据块通过硬链接操作对应关联到所述临时文件;在步骤s132中,若所述源文件类型为仅能追加写的日志文件,则将所述真实数据的所有的数据块通过硬链接操作对应关联到所述临时文件;在步骤s133中,若所述源文件的类型为可随机写入文件,则将所述真实数据的所有数据块进行复制操作。

在一优选实施例中,例如在盘古文件系统中,文件类型有四种类型:normalfile、raidfile、logfile和randomaccessfile,其中,所述normalfile:用户只能追加写,在写完后需要将数据的元信息存储在主节点设备端;所述raidfile:对数据进行磁盘失效算法(erasurecode)后的normalfile;所述logfile:用户每次追加写,写完就算成功,如果写失败,则换一个数据块进行写;所述randomaccessfile:用户可以随机写的文件。由此可知,源文件的文件类型中仅能追加写的非日志文件在盘古文件系统里包括normalfile和raidfile。在对源文件中真实数据进行硬链接操作和/或数据复制操作时根据不同的文件类型采用不同的操作方式,如对于仅能追加写的非日志文件normalfile和raidfile,将该文件类型对应的最后一个数据块进行复制操作,其余的数据块进行硬链接操作;若文件类型为logfile,则将所有的数据块进行硬链接;若文件类型为randomaccessfile,则将所有的数据块进行复制操作。在此,对于不同文件种类的处理方式的不同的目的是防止在重命名操作过程失败,造成源volume上和目标volume上都相同的文件,那么用户再写数据后,由于真正的数据在磁盘上是进行的硬件,可能造成数据错乱的问题。

优选地,所述方法还包括:当所述重命名请求为同一主节点组列表之间的文件重命名请求,则调用重命名远程调用接口对相应源文件进行重命名。

在此,当客户端在接收重命名请求后对请求进行解析,确定重命名请求是否在同一主节点列表上,若在同一主节点组列表上,则直接发送重命名远程调用请求(renamerpc)即可,调用重命名远程调用接口对相应的源文件进行重命名。

优选地,所述方法还包括:创建扫描线程,定期扫描所述临时文件,若所述临时文件在超时时间内未被重命名为所述目标文件,则删除所述临时文件。

在此,创建扫描线程,进行定期地扫描临时文件,如果被扫描的临时文件在超过时间阈值内没有被重命名为目标文件,则将其删除,避免不用的临时文件构成的垃圾占用过多的空间,对其进行垃圾回收。

在本申请所述的用于分布式文件系统执行文件重命名操作的方法,使得文件系统支持在不同主节点组列表之间能够进行重命名文件操作使上层用户可以无感知的继续使用文件系统。需要说明的是,在进行文件重命名的过程中,无论是在相同主节点组列表中进行还是在不同主节点组列表中进行的都需要对文件所在的目录进行更新操作。

图4示出根据本申请一个方面的一种用于分布式文件系统执行目录重命名操作的方法流程示意图;其中,所述方法包括:步骤s21、步骤s22、步骤s23和步骤s24;其中,在步骤s21中,获取目录重命名请求,并解析所述重命名请求;在步骤s22中,当所述重命名请求为不同主节点组列表之间的目录重命名请求,则从源主节点组列表中源目录的目录锁,并在目标主节点组列表中创建临时目录并在所述临时目录下创建临时文件,并获取所述临时目录的目录锁;在步骤s23中,扫描所述源目录,以获取所述源目录的所有源文件,基于所述源文件的文件类型,在存储所述源文件对应真实数据的从节点磁盘上进行硬链接操作和/或数据复制操作,以将所述真实数据对应关联到所述临时文件中;在步骤s24中,将所述临时文件重命名为目标文件,基于所述目标文件将所述临时目录重命名为目标目录,并删除所述源目录。

具体地,在步骤s21中,获取目录重命名请求,并解析所述重命名请求。

在此,客户端在收到目录重命名请求后,按照所需重命名的源目录所在的主节点组列表(源volume)的路由表对源目录进行解析,确定重命名请求是否在相同的volume上,若是,则客户端发送重命名远程调用(renamerpc)接口对相应源目录进行重命名即可,若不在同一volume上,则执行步骤s22。

具体地,在步骤s22中,当所述重命名请求为不同主节点组列表之间的目录重命名请求,则从源主节点组列表中源目录的目录锁,并在目标主节点组列表中创建临时目录并在所述临时目录下创建临时文件,并获取所述临时目录的目录锁。

在此,优选地,所述目录锁为可读不可写锁类。对于目录的重命名操作,需要获取整个目录的锁,保证在重命名操作过程中没有用户进行写操作,避免出现数据丢失的情况。客户端获取目录锁将目录设置成只读状态,然后客户端定期向主节点设备发送远程调用请求,主节点设备在收到请求后确定客户端存在,当主节点设备一个只读状态的目录长时间没有收到请求后,主节点设备将该只读状态的目录设置成正常状态,即可读可写状态,用户还可以写该目录。在目标主节点组列表中创建完临时目录后,需在临时目录下创建临时文件,以使将源文件中的真实数据迁移到临时文件中。

具体地,在步骤s23中,扫描所述源目录,以获取所述源目录的所有源文件,基于所述源文件的文件类型,在存储所述源文件对应真实数据的从节点磁盘上进行硬链接操作和/或数据复制操作,以将所述真实数据对应关联到所述临时文件中。

在此,客户端在获取源目录的目录锁后对源目录进行递归以获取源目录下的所有的文件,之后开始对所获取的源文件进行重命名操作,需要说明的是,在此不需要获取文件的锁,因已获取目录锁。在所创建的临时目录中创建临时文件,基于所述源文件的文件类型开始对真实的数据(data)在从节点服务器(数据块存储服务器,chunkserver)的磁盘上进行硬链接(hardlink)或数据复制操作,以将源文件中真实的数据移动到所创建的临时目录下的临时文件中。在一优选实施例中,如在源volume1上的源目录/src/dir1/dir2/file需要重命名操作到目标volume2上的目标目录/dst/dir3/file,则客户端将源目录下的文件移动到目标volume2上的一个临时目录下/pangutempdir/file,之后客户端通知目标volume2的主节点设备(master)将临时目录/pangutempdir/file重命名成目标目录/dst/dir3/file。

具体地,在步骤s24中,将所述临时文件重命名为目标文件,基于所述目标文件将所述临时目录重命名为目标目录,并删除所述源目录。

接前例,将源目录下的所有文件进行重命名操作之后即完成将源文件移动到目标目录下,主节点设备收到客户端请求后,将记录文件名的目录树进行加锁,之后进行临时目录重命名成目标目录的操作,完成目录重命名操作后将源目录进行删除。需要说明的是,在完成源目录下所有文件的重命名操作后,不需要删除源文件,因源目录状态是只读的不能被写操作处理,且在进行文件重命名操作过程中可能会失败,因此不能过早的删除源文件。

优选地,所述方法还包括:进行硬链接操作和/或数据复制操作之后,更新所述临时文件的元信息,将所述临时文件的元信息写入所述目标主节点设备,并关闭所述临时文件的当前写操作。

在此,所述进行硬链接操作和/或数据复制操作之后,更新所述临时文件的元信息,将所述临时文件的元信息写入所述目标主节点设备,并关闭所述临时文件的当前写操作与上述当完成步骤s13后进行的更新所述临时文件的元信息,将所述临时文件的元信息写入所述目标主节点设备,并关闭所述临时文件的当前写操作的内容相同或基本相同,为简明起见,不再赘述,仅以引用的方式包含于此。

优选地,所述源文件的文件类型包括:仅能追加写的非日志文件、仅能追加写的日志文件、可随机写入文件;图5示出根据本申请另一个方面的一个优选实施例的步骤s23的流程示意图;所述步骤s23包括:步骤s231、步骤s232和步骤s233;在步骤s231中,若所述源文件的类型为仅能追加写的非日志文件,则将所述真实数据的最后一个数据块进行数据复制操作,并将其他数据块通过硬链接操作对应关联到所述临时文件;在步骤s232中,若所述源文件类型为仅能追加写的日志文件,则将所述真实数据的所有的数据块通过硬链接操作对应关联到所述临时文件;在步骤s233中,若所述源文件的类型为可随机写入文件,则将所述真实数据的所有数据块进行复制操作。

在此,图5中所示的步骤s231、步骤s232和步骤s233和图3中所示的步骤s131、步骤s132和步骤s133的内容相同或基本相同,为简明起见,不再赘述,仅以引用的方式包含于此。

优选地,所述方法还包括:当所述重命名请求为同一主节点组列表之间的目录重命名请求,则调用重命名远程调用接口对相应源目录进行重命名。

在此,当客户端在接收目录重命名请求后对该请求进行解析,确定重命名请求是否在同一主节点列表上,若在同一主节点组列表上,则直接发送重命名远程调用请求(renamerpc)即可,调用重命名远程调用接口对相应的源目录进行重命名操作。需要说明的是,进行目录重命名操作的过程中需要将目录下的所有文件也进行重命名操作。

优选地,所述方法还包括:获取客户端发送的心跳请求,若在超时时间内未收到所述心跳请求,则将所述源目录修改为可读可写状态。

在此,在源volume上的主节点设备获取到客户端发送的心跳请求,若在超过预设时间内未收到心跳请求,则将源目录改为可读可写的状态(normal状态),所述心跳为客户端向主节点设备发送远程调用请求(rpc),主节点设备收到rpc请求后确认客户端存在,这一过程称为心跳。

优选地,所述方法还包括:创建扫描线程,定期扫描所述临时目录,若所述临时目录在超时时间内未被重命名为所述目标目录,则删除所述临时目录。

在此,创建扫描线程,进行定期地扫描临时目录,如果被扫描的临时目录在超过时间阈值内没有被重命名为目标目录,则将其删除,避免不用的临时目录构成的垃圾占用过多的空间,对其进行垃圾回收。

在本申请所述的用于分布式文件系统中执行目录重命名操作的方法的实施例中,通过目录锁以设置目录为可读不可写状态,扫描源目录下的所有文件,将文件进行重命名操作后在目标主节点组列表上将临时目录重命名成目标目录,删除源目录,完成不同主节点组列表之间的重命名操作,尽量保持了原有的文件系统语义,使得上层用户可以无感知的继续使用文件系统;同时在进行重命名操作过程中将临时文件的元信息存储在主节点设备,完成了元信息的迁移,大量减少了数据的拷贝过程。进一步地,创建了扫描线程对临时目录进行扫描,将长期未进行重命名操作的临时目录删除避免占用过多的空间。

图6示出根据本申请再一个方面的一种用于分布式文件系统执行文件重命名操作的设备结构示意图。所述设备1包括获取文件请求装置11、创建临时文件装置12、数据操作装置13和删除源文件装置14,其中,获取文件请求装置11获取文件重命名请求,并解析所述重命名请求;创建临时文件装置12用于当所述重命名请求为不同主节点组列表之间的文件重命名请求,则从源主节点组列表中获取源文件的文件锁,并在目标主节点组列表中创建临时文件并获取所述临时文件的文件锁;数据操作装置13基于所述源文件的文件类型,在存储所述源文件对应真实数据的从节点磁盘上进行硬链接操作和/或数据复制操作,以将所述真实数据对应关联到所述临时文件中;删除源文件装置14将所述临时文件重命名为目标文件,并删除所述源文件。

在此,所述设备1包括但不限于用户设备、或用户设备与网络设备通过网络相集成所构成的设备。所述用户设备其包括但不限于任何一种可与用户通过触摸板进行人机交互的移动电子产品,例如智能手机、pda等,所述移动电子产品可以采用任意操作系统,如android操作系统、ios操作系统等。其中,所述网络设备包括一种能够按照事先设定或存储的指令,自动进行数值计算和信息处理的电子设备,其硬件包括但不限于微处理器、专用集成电路(asic)、可编程门阵列(fpga)、数字处理器(dsp)、嵌入式设备等。所述网络包括但不限于互联网、广域网、城域网、局域网、vpn网络、无线自组织网络(adhoc网络)等。优选地,设备1还可以是运行于所述用户设备、或用户设备与网络设备、触摸终端或网络设备与触摸终端通过网络相集成所构成的设备上的脚本程序。当然,本领域技术人员应能理解上述设备1仅为举例,其他现有的或今后可能出现的设备1如可适用于本申请,也应包含在本申请保护范围以内,并在此以引用方式包含于此。

具体地,获取文件请求装置11获取文件重命名请求,并解析所述重命名请求。

在此,客户端在收到文件重命名请求后,按照内存中文件所在的主节点组列表(volume)的路由表对文件进行解析,确定重命名请求是否在相同的volume上,若是,则客户端发送重命名远程调用(renamerpc)接口对相应源文件进行重命名即可,若不在同一volume上,则创建临时文件装置12进行后续的处理。需要说明的是,所述volume为在命名空间联盟(federation)中对命名空间分组后,每一组的称谓,为主节点(master)组的列表,通过列表的查询可知重命名请求是否在同一volume上进行。

具体地,创建临时文件装置12当所述重命名请求为不同主节点组列表之间的文件重命名请求,则从源主节点组列表中获取源文件的文件锁,并在目标主节点组列表中创建临时文件并获取所述临时文件的文件锁。

在此,当确定重命名请求为不同主节点组列表(volume)之间的文件重命名请求时,利用open4append在源主节点组列表(源volume)上获取源文件的文件锁,并在目标volume上创建临时文件并获取临时文件的文件锁。优选地,所述文件锁为可读不可写锁类;只有获取到写锁的进程或线程才可以对文件进行写操作,在文件重命名过程中,获取源文件锁是为了避免在重命名过程中有用户写入了新的数据,但是在重命名后的目标volume上并没有看到新的数据而造成数据丢失,获取临时文件的锁是为了避免在重命名过程中有用户写数据导致重命名后与源文件中内容不一致。

需要说明的是,所述open4append是用于pangu内部文件打开写的方法,会保证对于同一个文件在同一个时刻只有一个客户端可以进行写操作。本领域技术人员应能理解,所述利用open4append获取文件锁的方法仅为本申请的一个举例,其他现有的或今后可能出现的获取文件锁的方法如可适用于本发明,也应包含在本发明保护范围以内,并在此以引用方式包含于此。

具体地,数据操作装置13基于所述源文件的文件类型,在存储所述源文件对应真实数据的从节点磁盘上进行硬链接操作和/或数据复制操作,以将所述真实数据对应关联到所述临时文件中。

在此,获取临时文件锁后基于所述源文件的文件类型开始对真实的数据(data)在从节点服务器(数据块存储服务器,chunkserver)的磁盘上进行硬链接(hardlink)或数据复制操作,以将源文件中真实的数据移动到所创建的临时文件中;对不同文件类型中的真实数据对应关联到临时文件的处理方式的不同的目的是:在重命名过程失败,造成源volume上和目标volume上都相同的文件,那么用户再写数据后,由于真正的数据在磁盘上进行的硬链接可能造成数据错乱。在一优选实施例中,pangu文件系统中,文件的元信息存储在master上,文件的真实数据存储在chunkserver上,创建文件时是只在master端修改元信息,链接时只是在chunkserver上对数据进行链接;例如,用户写了一个长度为64mb的文件,则文件的长度、创建时间、修改时间。文件名等元信息记录在master端,而用户的实际数据记录在chunkserver上,当在volume之间进行文件的移动时,是对实际的数据进行链接,而元信息需要重新创建。

具体地,删除源文件装置14将所述临时文件重命名为目标文件,并删除所述源文件。

在此,在本申请一优选实施例中,优选地,所述设备1还包括第一更新装置(未示出):更新所述临时文件的元信息,将所述临时文件的元信息写入所述目标主节点设备,并关闭所述临时文件的当前写操作。在此,当将存储在chunkserver上的真实数据通过硬链接操作和/或数据复制操作对应关联到所述临时文件中后,将临时文件的元信息进行更新,将创建临时文件及对临时文件进行修改等元信息写到目标volume上的目标主节点设备(目标master)上,并关闭所述临时文件的当前写操作,如可调用commitandclose函数可实现元信息写到目标volume上,其中,所述commitandclose是盘古内部将文件的元信息写到master端并且将该文件的写关闭掉的函数;随后将已有真实数据的临时文件重命名为目标文件,最后将源volume上的源文件删除完成不同volume之间的文件重命名操作。

本申请一实施例所述用于分布式文件系统中执行文件重命名操作的方法,通过在目标volume上采用先创建一个临时文件,再将临时文件重命名到真正的文件是防止重命名过程中失败,造成目标volume端有一个残缺的文件,影响用户的使用,而且通过所述方法降低了在两个volume上出现相同文件的概率,从而避免分布式文件系统中使用文件混乱的情况。

优选地,所述源文件的文件类型包括:仅能追加写的非日志文件、仅能追加写的日志文件、可随机写入文件;图7示出根据本申请再一个方面的一个优选实施例的数据操作装置的结构示意图;所述数据操作装置13包括:第一关联单元131、第二关联单元132和第三关联单元133;其中,所述第一关联单元131用于若所述源文件的类型为仅能追加写的非日志文件,则将所述真实数据的最后一个数据块进行数据复制操作,并将其他数据块通过硬链接操作对应关联到所述临时文件;所述第二关联单元132用于若所述源文件类型为仅能追加写的日志文件,则将所述真实数据的所有的数据块通过硬链接操作对应关联到所述临时文件;所述第三关联单元133用于若所述源文件的类型为可随机写入文件,则将所述真实数据的所有数据块进行复制操作。

在一优选实施例中,例如在盘古文件系统中,文件类型有四种类型:normalfile、raidfile、logfile和randomaccessfile,其中,所述normalfile:用户只能追加写,在写完后需要将数据的元信息存储在主节点设备端;所述raidfile:对数据进行磁盘失效算法(erasurecode)后的normalfile;所述logfile:用户每次追加写,写完就算成功,如果写失败,则换一个数据块进行写;所述randomaccessfile:用户可以随机写的文件。由此可知,源文件的文件类型中仅能追加写的非日志文件在盘古文件系统里包括normalfile和raidfile。在对源文件中真实数据进行硬链接操作和/或数据复制操作时根据不同的文件类型采用不同的操作方式,如对于仅能追加写的非日志文件normalfile和raidfile,将该文件类型对应的最后一个数据块进行复制操作,其余的数据块进行硬链接操作;若文件类型为logfile,则将所有的数据块进行硬链接;若文件类型为randomaccessfile,则将所有的数据块进行复制操作。在此,对于不同文件种类的处理方式的不同的目的是防止在重命名操作过程失败,造成源volume上和目标volume上都相同的文件,那么用户再写数据后,由于真正的数据在磁盘上是进行的硬件,可能造成数据错乱的问题。

优选地,所述设备1还包括:第一调用装置(未示出),当所述重命名请求为同一主节点组列表之间的文件重命名请求,则调用重命名远程调用接口对相应源文件进行重命名。

在此,当客户端在接收重命名请求后对请求进行解析,确定重命名请求是否在同一主节点列表上,若在同一主节点组列表上,则直接发送重命名远程调用请求(renamerpc)即可,调用重命名远程调用接口对相应的源文件进行重命名。

优选地,所述设备1还包括:第一扫描装置(未示出),创建扫描线程,定期扫描所述临时文件,若所述临时文件在超时时间内未被重命名为所述目标文件,则删除所述临时文件。

在此,创建扫描线程,进行定期地扫描临时文件,如果被扫描的临时文件在超过时间阈值内没有被重命名为目标文件,则将其删除,避免不用的临时文件构成的垃圾占用过多的空间,对其进行垃圾回收。

在本申请所述的设备用于分布式文件系统执行文件重命名操作,使得文件系统支持在不同主节点组列表之间能够进行重命名文件操作使上层用户可以无感知的继续使用文件系统。需要说明的是,在进行文件重命名的过程中,无论是在相同主节点组列表中进行还是在不同主节点组列表中进行的都需要对文件所在的目录进行更新操作。

图8示出根据本申请又一个方面的一种用于分布式文件系统执行目录重命名操作的设备结构示意图;其中,所述设备2包括:获取目录请求装置21、创建临时目录装置22、数据处理装置23和删除源目录装置24;其中,所述获取目录请求装置21获取目录重命名请求,并解析所述重命名请求;所述创建临时目录装置22当所述重命名请求为不同主节点组列表之间的目录重命名请求,则从源主节点组列表中源目录的目录锁,并在目标主节点组列表中创建临时目录并在所述临时目录下创建临时文件,并获取所述临时目录的目录锁;所述数据处理装置23扫描所述源目录,以获取所述源目录的所有源文件,基于所述源文件的文件类型,在存储所述源文件对应真实数据的从节点磁盘上进行硬链接操作和/或数据复制操作,以将所述真实数据对应关联到所述临时文件中;所述删除源目录装置24将所述临时文件重命名为目标文件,基于所述目标文件将所述临时目录重命名为目标目录,并删除所述源目录。

在此,所述设备2包括但不限于用户设备、或用户设备与网络设备通过网络相集成所构成的设备。所述用户设备其包括但不限于任何一种可与用户通过触摸板进行人机交互的移动电子产品,例如智能手机、pda等,所述移动电子产品可以采用任意操作系统,如android操作系统、ios操作系统等。其中,所述网络设备包括一种能够按照事先设定或存储的指令,自动进行数值计算和信息处理的电子设备,其硬件包括但不限于微处理器、专用集成电路(asic)、可编程门阵列(fpga)、数字处理器(dsp)、嵌入式设备等。所述网络包括但不限于互联网、广域网、城域网、局域网、vpn网络、无线自组织网络(adhoc网络)等。优选地,设备2还可以是运行于所述用户设备、或用户设备与网络设备、触摸终端或网络设备与触摸终端通过网络相集成所构成的设备上的脚本程序。当然,本领域技术人员应能理解上述设备2仅为举例,其他现有的或今后可能出现的设备2如可适用于本申请,也应包含在本申请保护范围以内,并在此以引用方式包含于此。

具体地,获取目录请求装置21获取目录重命名请求,并解析所述重命名请求。

在此,客户端在收到目录重命名请求后,按照所需重命名的源目录所在的主节点组列表(源volume)的路由表对源目录进行解析,确定重命名请求是否在相同的volume上,若是,则客户端发送重命名远程调用(renamerpc)接口对相应源目录进行重命名即可,若不在同一volume上,则创建临时目录装置22进行后续的处理。

具体地,创建临时目录装置22当所述重命名请求为不同主节点组列表之间的目录重命名请求,则从源主节点组列表中源目录的目录锁,并在目标主节点组列表中创建临时目录并在所述临时目录下创建临时文件,并获取所述临时目录的目录锁。

在此,优选地,所述目录锁为可读不可写锁类。对于目录的重命名操作,需要获取整个目录的锁,保证在重命名操作过程中没有用户进行写操作,避免出现数据丢失的情况。客户端获取目录锁将目录设置成只读状态,然后客户端定期向主节点设备发送远程调用请求,主节点设备在收到请求后确定客户端存在,当主节点设备一个只读状态的目录长时间没有收到请求后,主节点设备将该只读状态的目录设置成正常状态,即可读可写状态,用户还可以写该目录。在目标主节点组列表中创建完临时目录后,需在临时目录下创建临时文件,以使将源文件中的真实数据迁移到临时文件中。

具体地,数据处理装置23扫描所述源目录,以获取所述源目录的所有源文件,基于所述源文件的文件类型,在存储所述源文件对应真实数据的从节点磁盘上进行硬链接操作和/或数据复制操作,以将所述真实数据对应关联到所述临时文件中。

在此,客户端在获取源目录的目录锁后对源目录进行递归以获取源目录下的所有的文件,之后开始对所获取的源文件进行重命名操作,需要说明的是,在此不需要获取文件的锁,因已获取目录锁。在所创建的临时目录中创建临时文件,基于所述源文件的文件类型开始对真实的数据(data)在从节点服务器(数据块存储服务器,chunkserver)的磁盘上进行硬链接(hardlink)或数据复制操作,以将源文件中真实的数据移动到所创建的临时目录下的临时文件中。在一优选实施例中,如在源volume1上的源目录/src/dir1/dir2/file需要重命名操作到目标volume2上的目标目录/dst/dir3/file,则客户端将源目录下的文件移动到目标volume2上的一个临时目录下/pangutempdir/file,之后客户端通知目标volume2的主节点设备(master)将临时目录/pangutempdir/file重命名成目标目录/dst/dir3/file。

具体地,删除源目录装置24将所述临时文件重命名为目标文件,基于所述目标文件将所述临时目录重命名为目标目录,并删除所述源目录。

接前例,将源目录下的所有文件进行重命名操作之后即完成将源文件移动到目标目录下,主节点设备收到客户端请求后,将记录文件名的目录树进行加锁,之后进行临时目录重命名成目标目录的操作,完成目录重命名操作后将源目录进行删除。需要说明的是,在完成源目录下所有文件的重命名操作后,不需要删除源文件,因源目录状态是只读的不能被写操作处理,且在进行文件重命名操作过程中可能会失败,因此不能过早的删除源文件。

优选地,所述设备2还包括:第二更新装置(未示出),进行硬链接操作和/或数据复制操作之后,更新所述临时文件的元信息,将所述临时文件的元信息写入所述目标主节点设备,并关闭所述临时文件的当前写操作。

在此,所述设备2中的第二更新装置与所述设备1中的第一更新装置的内容相同或基本相同,为简明起见,不再赘述,仅以引用的方式包含于此。

优选地,所述源文件的文件类型包括:仅能追加写的非日志文件、仅能追加写的日志文件、可随机写入文件;图9示出根据本申请又一个方面的一个优选实施例的数据处理的结构示意图;所述数据处理装置23包括:第一处理单元231、第二处理单元232和第三处理单元233;所述第一处理单元231若所述源文件的类型为仅能追加写的非日志文件,则将所述真实数据的最后一个数据块进行数据复制操作,并将其他数据块通过硬链接操作对应关联到所述临时文件;所述第二处理单元232若所述源文件类型为仅能追加写的日志文件,则将所述真实数据的所有的数据块通过硬链接操作对应关联到所述临时文件;所述第三处理单元233若所述源文件的类型为可随机写入文件,则将所述真实数据的所有数据块进行复制操作。

在此,图9中所示的第一处理单元231、第二处理单元232和第三处理单元233和图7中所示的第一关联单元131、第二关联单元132和第三关联单元133的内容相同或基本相同,为简明起见,不再赘述,仅以引用的方式包含于此。

优选地,所述设备2还包括:第二调用装置(未示出),当所述重命名请求为同一主节点组列表之间的目录重命名请求,则调用重命名远程调用接口对相应源目录进行重命名。

在此,当客户端在接收目录重命名请求后对该请求进行解析,确定重命名请求是否在同一主节点列表上,若在同一主节点组列表上,则直接发送重命名远程调用请求(renamerpc)即可,调用重命名远程调用接口对相应的源目录进行重命名操作。需要说明的是,进行目录重命名操作的过程中需要将目录下的所有文件也进行重命名操作。

优选地,所述设备2还包括:获取心跳请求装置(未示出)获取客户端发送的心跳请求,若在超时时间内未收到所述心跳请求,则将所述源目录修改为可读可写状态。

在此,在源volume上的主节点设备获取到客户端发送的心跳请求,若在超过预设时间内未收到心跳请求,则将源目录改为可读可写的状态(normal状态),所述心跳为客户端向主节点设备发送远程调用请求(rpc),主节点设备收到rpc请求后确认客户端存在,这一过程称为心跳。

优选地,所述设备2还包括:第二扫描装置(未示出),创建扫描线程,定期扫描所述临时目录,若所述临时目录在超时时间内未被重命名为所述目标目录,则删除所述临时目录。

在此,创建扫描线程,进行定期地扫描临时目录,如果被扫描的临时目录在超过时间阈值内没有被重命名为目标目录,则将其删除,避免不用的临时目录构成的垃圾占用过多的空间,对其进行垃圾回收。

在本申请所述的设备2用于分布式文件系统中执行目录重命名操作的实施例中,通过目录锁以设置目录为可读不可写状态,扫描源目录下的所有文件,将文件进行重命名操作后在目标主节点组列表上将临时目录重命名成目标目录,删除源目录,完成不同主节点组列表之间的重命名操作,尽量保持了原有的文件系统语义,使得上层用户可以无感知的继续使用文件系统;同时在进行重命名操作过程中将临时文件的元信息存储在主节点设备,完成了元信息的迁移,大量减少了数据的拷贝过程。进一步地,创建了扫描线程对临时目录进行扫描,将长期未进行重命名操作的临时目录删除避免占用过多的空间。

此外,本申请还提供了一种用于分布式文件系统执行文件重命名操作的设备,包括:

处理器;

以及被安排成存储计算机可执行指令的存储器,所述可执行指令在被执行时使所述处理器:

获取文件重命名请求,并解析所述重命名请求;

当所述重命名请求为不同主节点组列表之间的文件重命名请求,则从源主节点组列表中获取源文件的文件锁,并在目标主节点组列表中创建临时文件并获取所述临时文件的文件锁;

基于所述源文件的文件类型,在存储所述源文件对应真实数据的从节点磁盘上进行硬链接操作和/或数据复制操作,以将所述真实数据对应关联到所述临时文件中;

将所述临时文件重命名为目标文件,并删除所述源文件。

此外,本申请还提供了一种分布式文件系统中执行目录重命名操作的设备,包括:

处理器;

以及被安排成存储计算机可执行指令的存储器,所述可执行指令在被执行时使所述处理器:

获取目录重命名请求,并解析所述重命名请求;

当所述重命名请求为不同主节点组列表之间的目录重命名请求,则从源主节点组列表中源目录的目录锁,并在目标主节点组列表中创建临时目录并在所述临时目录下创建临时文件,并获取所述临时目录的目录锁;

扫描所述源目录,以获取所述源目录的所有源文件,基于所述源文件的文件类型,在存储所述源文件对应真实数据的从节点磁盘上进行硬链接操作和/或数据复制操作,以将所述真实数据对应关联到所述临时文件中;

将所述临时文件重命名为目标文件,基于所述目标文件将所述临时目录重命名为目标目录,并删除所述源目录。

需要注意的是,本申请可在软件和/或软件与硬件的组合体中被实施,例如,可采用专用集成电路(asic)、通用目的计算机或任何其他类似硬件设备来实现。在一个实施例中,本申请的软件程序可以通过处理器执行以实现上文所述步骤或功能。同样地,本申请的软件程序(包括相关的数据结构)可以被存储到计算机可读记录介质中,例如,ram存储器,磁或光驱动器或软磁盘及类似设备。另外,本申请的一些步骤或功能可采用硬件来实现,例如,作为与处理器配合从而执行各个步骤或功能的电路。

另外,本申请的一部分可被应用为计算机程序产品,例如计算机程序指令,当其被计算机执行时,通过该计算机的操作,可以调用或提供根据本申请的方法和/或技术方案。而调用本申请的方法的程序指令,可能被存储在固定的或可移动的记录介质中,和/或通过广播或其他信号承载媒体中的数据流而被传输,和/或被存储在根据所述程序指令运行的计算机设备的工作存储器中。在此,根据本申请的一个实施例包括一个装置,该装置包括用于存储计算机程序指令的存储器和用于执行程序指令的处理器,其中,当该计算机程序指令被该处理器执行时,触发该装置运行基于前述根据本申请的多个实施例的方法和/或技术方案。

对于本领域技术人员而言,显然本申请不限于上述示范性实施例的细节,而且在不背离本申请的精神或基本特征的情况下,能够以其他的具体形式实现本申请。因此,无论从哪一点来看,均应将实施例看作是示范性的,而且是非限制性的,本申请的范围由所附权利要求而不是上述说明限定,因此旨在将落在权利要求的等同要件的含义和范围内的所有变化涵括在本申请内。不应将权利要求中的任何附图标记视为限制所涉及的权利要求。此外,显然“包括”一词不排除其他单元或步骤,单数不排除复数。装置权利要求中陈述的多个单元或装置也可以由一个单元或装置通过软件或者硬件来实现。第一,第二等词语用来表示名称,而并不表示任何特定的顺序。

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