一种处理写入冲突的方法及装置与流程

文档序号:15849882发布日期:2018-11-07 09:41阅读:159来源:国知局
一种处理写入冲突的方法及装置与流程

本申请涉及存储领域,特别涉及一种处理写入冲突的方法及装置。

背景技术

在存储领域,为保证存储系统的可靠性,可以利用两台存储设备组成一个存储系统。各存储设备都处于运行状态,互为冗余,各存储设备上的数据完全一致。当一台存储设备发生故障后,另一台存储设备可以无缝接管业务。这种存储系技术称为双活存储。

双活存储系统可能发生写入冲突,导致双活存储系统的两个存储设备上,同一地址中写入的数据不同,从而丧失两台存储设备互为备份的功能。

参见图1,为本申请示出的一种双活存储系统的架构图。如图1所示,存储设备a和存储设备b组成一个双活存储系统,存储设备a上的lun(logicalunitnumber,逻辑单元号)和存储设备b上的lun经配置互为镜像。

存储设备a和存储设备b对外形成一个虚拟lun空间,对于双活存储系统的外部设备而言,访问存储设备a上的lun和存储设备b上的lun就是访问上述虚拟lun空间的两条路径。因此,若其中一个存储设备发生故障,另一个存储设备接管上述存储设备的业务后,对于外部设备而言,仅仅相当于一次访问路径的切换,切换时间极短,业务无需中断。

若图1中的主机a和主机b同属于一个服务器集群,当主机a和主机b存在通信故障时,主机a和主机b可能同时分别向两个存储设备下发针对同一地址的写请求,此时,若两个写请求中的待写入数据不一致,则双活存储系统的两个存储设备的同一地址中的数据不同,发生写入冲突。



技术实现要素:

有鉴于此,本申请提供一种处理写入冲突的方法及装置,用以解决双活存储系统出现的写入冲突。

具体地,本申请是通过如下技术方案实现的:

一种处理写入冲突的方法,应用于双活存储系统的存储设备,所述双活存储系统包括两个存储设备,所述存储设备上已保存日志表,所述日志表包括若干日志条目,所述日志条目包括第一字段、第二字段、lunid和逻辑地址,所述日志条目包括本端日志条目和对端日志条目,所述本端日志条目的第一字段填入本端存储设备为写请求生成的日志id,所述本端日志条目的第二字段填入对端存储设备最近处理的写请求对应的日志id,所述对端日志条目的第一字段填入对端存储设备为写请求生成的日志id,所述对端日志条目的第二字段填入本端存储设备最近处理的写请求对应的日志id;

其中,所述日志id携带存储设备标识和对应的写请求在存储设备处理时的序号,本端存储设备生成的日志id为本端id,对端存储设备生成的日志id为对端id;

所述方法包括:

判断本设备是主存储设备或从存储设备;

若本设备是从存储设备,依据所述日志条目的排列顺序,检查第一对端日志条目后最近的第一本端日志条目;其中所述第一对端条目包含第一对端id和第一本端id,所述第一本端日志条目包括第二本端id和第二对端id,所述第二对端id的序号不小于所述第一对端id的序号;

确定所述第一本端id和所述第二本端id之间是否存在第三本端id,如果是,检查所述第一对端id对应的lunid、逻辑地址和所述第三本端id对应的lunid、逻辑地址是否相同;

若相同,确定所述第一对端id对应的写请求与所述第三本端id对应的写请求存在写入冲突,将所述第一对端id和所述第三本端id发送至所述主存储设备,以由所述主存储设备返回存在写入冲突的写请求的处理顺序;

按照所述处理顺序,调整所述第一对端日志条目和所述第三本端id对应的第三本端日志条目在所述日志表中的排列顺序;

依据所有存在写入冲突的写请求的处理顺序调整所述日志表中日志条目的排列顺序后,按照所述排列顺序,依次将各日志条目对应的写请求中的待写入数据从本地的缓存空间写入到该写请求中的逻辑地址。

一种处理写入冲突的装置,应用于双活存储系统的存储设备,所述双活存储系统包括两个存储设备,所述存储设备上已保存日志表,所述日志表包括若干日志条目,所述日志条目包括第一字段、第二字段、lunid和逻辑地址,所述日志条目包括本端日志条目和对端日志条目,所述本端日志条目的第一字段填入本端存储设备为写请求生成的日志id,所述本端日志条目的第二字段填入对端存储设备最近处理的写请求对应的日志id,所述对端日志条目的第一字段填入对端存储设备为写请求生成的日志id,所述对端日志条目的第二字段填入本端存储设备最近处理的写请求对应的日志id;

其中,所述日志id携带存储设备标识和对应的写请求在存储设备处理时的序号,本端存储设备生成的日志id为本端id,对端存储设备生成的日志id为对端id;

所述装置包括:

判断单元,用于判断本设备是主存储设备或从存储设备;

第一检查单元,用于若本设备是从存储设备,依据所述日志条目的排列顺序,检查第一对端日志条目后最近的第一本端日志条目;其中所述第一对端条目包含第一对端id和第一本端id,所述第一本端日志条目包括第二本端id和第二对端id,所述第二对端id的序号不小于所述第一对端id的序号;

第二检查单元,用于确定所述第一本端id和所述第二本端id之间是否存在第三本端id,如果是,检查所述第一对端id对应的lunid、逻辑地址和所述第三本端id对应的lunid、逻辑地址是否相同;

发送单元,用于若相同,确定所述第一对端id对应的写请求与所述第三本端id对应的写请求存在写入冲突,将所述第一对端id和所述第三本端id发送至所述主存储设备,以由所述主存储设备返回存在写入冲突的写请求的处理顺序;

调整单元,用于按照所述处理顺序,调整所述第一对端日志条目和所述第三本端id对应的第三本端日志条目在所述日志表中的排列顺序;

写入单元,用于依据所有存在写入冲突的写请求的处理顺序调整所述日志表中日志条目的排列顺序后,按照所述排列顺序,依次将各日志条目对应的写请求中的待写入数据从本地的缓存空间写入到该写请求中的逻辑地址。

在本申请实施例中,存储设备在确定自身为从存储设备后,可以检查第一对端日志条目后最近的第一本端日志条目,其中,所述第一对端条目包含第一对端id和第一本端id,所述第一本端日志条目包括第二本端id和第二对端id,所述第二对端id的序号不小于所述第一对端id的序号;

由于本端日志条目的第一字段填入本端存储设备为写请求生成的日志id,所述本端日志条目的第二字段填入对端存储设备最近处理的写请求对应的日志id,可知,对于双活存储系统而言,所述第二对端id对应的写请求在所述第二本端id对应的写请求之前处理;进一步地,由于所述第二对端id的序号不小于所述第一对端id的序号,所述第一对端id对应的写请求必然也在所述第二本端id对应的写请求之前处理;

由于对端日志条目的第一字段填入对端存储设备为写请求生成的日志id,所述对端日志条目的第二字段填入本端存储设备最近处理的写请求对应的日志id,可知,对于双活存储系统而言,所述第一本端id对应的写请求在所述第一对端id对应的写请求之前处理;

进一步地,可以确定生成第一对端id的时间点,在生成第一本端id的时间点和生成第二本端id的时间点之间;

存储设备确定所述第一本端id和第二本端id之间是否存在第三本端id,如果是,则第三本端id对应的写请求与所述第一对端id对应的写请求可能存在写入冲突,为进一步验证,检查所述第一对端id对应的lunid、逻辑地址与所述第三本端id对应的lunid、逻辑地址是否相同;

若相同,则可以确定存在写入冲突,并将所述第一对端id和所述第三本端id发送至主存储设备,以由所述主存储设备返回存在写入冲突的写请求的处理顺序,然后按照该处理顺序,调整上述第一对端日志条目和上述第三本端id对应的第三本端日志条目在日志表中的排列顺序;

依据所有存在写入冲突的写请求的处理顺序调整上述日志表中日志条目的排列顺序后,按照上述排列顺序,依次将各日志条目对应的写请求中待写入数据从本地的缓存空间写入到该写请求中的逻辑地址;

通过上述措施,双活存储系统的从存储设备可以在检查到写入冲突时,依照与主存储设备相同的处理顺序将写入冲突的写请求中的待写入数据写入到逻辑地址中,使得双活存储系统中同一地址中的数据相同。

附图说明

图1是本申请示出的一种双活存储系统的架构图;

图2是本申请示出的另一种双活存储系统的架构图;

图3是本申请示出的一种日志表的示意图;

图4是本申请示出的另一种日志表的示意图;

图5是本申请示出的一种日志条目的格式示意图;

图6是本申请示出的一种检查点条目的格式示意图;

图7是本申请示出的一种处理写请求的方法的流程图;

图8是本申请示出的一种日志条目应用的示意图;

图9是本申请示出的一种处理写入冲突的方法的流程图;

图10是本申请示出的一种基于检查点处理写入冲突的方法的流程图;

图11是本申请示出的一种处理读请求的方法的流程图;

图12是本申请示出的一种处理写入冲突的装置的实施例框图;

图13是本申请示出的一种处理写入冲突的装置的硬件结构图。

具体实施方式

为了使本技术领域的人员更好地理解本发明实施例中的技术方案,并使本发明实施例的上述目的、特征和优点能够更加明显易懂,下面结合附图对现有技术方案和本发明实施例中的技术方案作进一步详细的说明。

在现有技术中,双活存储系统的两台存储设备分别被配置为主存储设备和从存储设备。从存储设备接收到外部下发的写请求后,均转发至主存储设备。主存储设备对自身从外部接收的写请求和从存储设备转发的写请求排序后,产生处理顺序,然后将该处理顺序转发至从存储设备。

从存储设备基于该处理顺序,将自身从外部接收的写请求中的待写入顺序和主存储设备转发的写请求中的待写入顺序,写入到lun中。

然而,双活存储系统外部的服务器下发写请求时,一般都有严密的业务逻辑,实际上极少情况下才会出现写入冲突。在上述现有技术中,为解决写入冲突,从存储设备和主存储设备之间需要大量交互,且从存储设备需接收到主存储设备发送的处理顺序以后,才能处理写请求,由此产生了大量的处理延时。

为保证不影响双活存储系统处理io(input/output,输入/输出)请求的响应速度,又能在发生写入冲突时准确识别存在写入冲突的写请求,在本申请实施例中,为双活存储系统的两台存储设备分别预配置缓存空间,存储设备可将写请求中的待写入数据写入到缓存空间后,即可返回写入成功信息。存储设备后续从缓存空间将待写入数据写入到写请求中的逻辑地址时,再检查是否存在写入冲突,并对写入冲突进行处理。整个过程既不会影响处理io请求的响应速度,又能保证两台存储设备上同一地址写入的数据一致。

参见图2,为本申请示出的另一种双活存储系统的架构图,如图2所示,存储设备a上预配置缓存空间1,存储设备b上预配置缓存空间2。当存储设备a接收到主机a下发的写请求后,首先将该写请求中的待写入数据写入到缓存空间1,并转发该写请求至存储设备b。存储设备b将该写请求中的待写入数据写入到缓存空间2后,向存储设备a返回缓存成功信息。存储设备a接收到该缓存成功信息后,即可向主机a发送写入成功信息。

存储设备a在处理写请求的过程中,会更新本申请提出的日志表。后续存储设备a从缓存空间1向本地的lun中写入数据时,可以依据该日志表检查是否存在写入冲突。

存储设备b的操作与存储设备a相同。

下面为说明本申请技术方案,首先对本申请提出的日志表进行介绍:

参见图3,为本申请示出的一种日志表的示意图,如图3所示,双活存储系统的两个存储设备分别配置一份日志表,每份日志表包括多个日志条目,每条日志条目对应一个写请求。

因此,存储设备上的日志表中的各日志条目分别对应该存储设备处理的写请求,其中,存储设备处理的写请求包括存储设备从双活存储系统外部接收的写请求和从另一存储设备接收的写请求。

需要指出的是,每份日志表中日志条目的顺序不完全相同。

参见图4,为本申请示出的另一种日志表的示意图,如图4所示,相比图3中的日志表,增加了检查点条目。两个检查点条目之间限定了一个时间范围,在这个时间范围内,两个存储设备上的日志条目相同(顺序不完全相同)。实际上,两个检查点条目之间的内容与图3示出的日志表一样。

如果基于图3示出的日志表处理写入冲突,存储设备可以在每次处理完成后清空日志表,以降低日志表的维护难度。如果基于图4示出的日志表处理写入冲突,由于日志表中包含检查点条目,将对应于各写请求的日志条目按时间段划分,降低了日志表的维护难度。

参见图5,为本申请示出的一种日志条目的格式示意图,如图5所示,日志条目包括“当前id”字段、“最近返回id”字段、“lunid”字段、“lba”字段、“数据长度”字段、“缓存地址”字段和可选字段。

其中,“当前id”字段为存储设备为写请求生成的日志id,作为一种实施例,日志id可包括存储设备标识和该日志id对应的写请求在存储设备处理时的序号。比如:存储设备a从外部接收的第一个写请求,则日志id可为a1,其中,a为存储设备标识,1为序号。当然,这里的存储设备是广义的概念,在存储设备中,只需有两个可以区分两台存储设备的标识即可,比如,可用0和1代表两台存储设备。

为方便后续描述,将本端存储设备生成的日志id为本端id,将对端存储设备生成的日志id称为对端id。相应地,“当前id”字段填入本端id的日志条目称为本端日志条目,“当前id”字段填入对端id的日志条目称为对端日志条目。

“最近返回id”字段为以生成日志条目为时间点,对端存储设备离该时间点最近向外部返回写入成功信息的写请求对应的日志id。存储设备在成功处理写请求后,会将该写请求对应的日志id发送至对端存储设备,以由对端存储设备保存该日志id,并在后续将该日志id添加到对端存储设备自身生成的日志条目的“最近返回id”字段中。

“lunid”字段为日志条目对应的写请求中的lunid,表征写请求中的待写入数据需要写入的lun。

“lba”字段为日志条目对应的写请求中的lba(logicalblockaddress,逻辑区块地址),表征写请求中待写入数据需要写入的逻辑地址。

“数据长度”字段为日志条目对应的写请求中的数据长度,表征写请求中待写入数据的数据长度。

“缓存地址”字段为日志条目对应的写请求中的待写入数据在缓存空间中的缓存地址。

可选字段用以拓展其它功能而存在,本申请不涉及,故不赘述。

参见图6,为本申请示出的一种检查点条目的格式示意图,如图6所示,检查点条目包括“检查点id”字段、“时戳”字段和可选字段。

其中,“检查点id”字段为存储设备为检查点生成的唯一标识。

“时戳”字段记录存储设备生成检查点条目的时间。

可选字段用以拓展其它功能而存在,本申请不涉及,故不赘述。

至此,本申请的日志表介绍完毕。

下面对本申请处理写请求的流程进行说明。

参见图7,为本申请示出的一种处理写请求的方法的流程图,该方法应用于双控存储系统的存储设备,包括以下步骤:

步骤701:接收到写请求。

步骤702:将所述写请求中的待写入数据写入到本地的缓存空间,为该写请求生成对应的第四本端id,并生成对应于该写请求的本端日志条目;其中,所述本端日志条目的第一字段填入所述第四本端id,所述本端日志条目的第二字段填入对端存储设备最近处理的写请求对应的第三对端id,所述本端日志条目的lunid、逻辑地址为所述写请求中的lunid、逻辑地址,所述本端日志条目中的缓存地址为所述待写入数据在缓存空间中的缓存地址。

其中,第四本端id泛指本端存储设备为自身从外部接收的写请求生成的日志id,其只是为便于描述进行的命名,并不限定本申请;同样地,第三对端id泛指对端存储设备为自身从外部接收的写请求生成的日志id,其只是为便于描述进行的命名,并不限定本申请。

第一字段即为前述“当前id”字段。

第二字段即为前述“最近返回id”字段。

需要说明的是,双活存储系统的存储设备在每次处理完自身从外部接收的写请求后,会向对端存储设备发送该写请求对应的日志id。对于接收该日志id的存储设备而言,该日志id即为对端id。存储设备持续记录并更新对端存储设备发送的对端id,用以填入第二字段,以作为双活存储系统处理写请求顺序的判断依据。

以图2示出的双活存储系统的架构为例进行说明。

若存储设备b处理了一个自身从主机b接收的写请求,且存储设备b为该写请求生成的日志id为b1,则在该写请求处理完成后,存储设备b可以将该日志id发送至存储设备a。存储设备a保存该日志id,对于存储设备a而言,b1即为对端id。后续存储设备接收到主机a下发的写请求后,为该写请求生成本端ida1,并生成对应于该写请求的本端日志条目,然后向第一字段填入a1,向第二字段填入b1。这就说明,a1对应的写请求是在b1对应的写请求之后处理的。

存储设备接收到外部的写请求以后,可以将该写请求中的待写入数据写入到缓存空间,并为该写请求生成本端id和本端日志条目。

如前文所示,除第一字段(“当前id”字段)和第二字段(“最近返回id”字段)以外,日志条目中还包括“lunid”字段、“lba”字段、“数据长度”字段和“缓存地址”字段。在生成本端日志条目时,分别依据上述写请求中的内容和为待写入数据分配的缓存空间的缓存地址,填写本端日志条目中的其它字段。

参见图8,为本申请示出的一种日志条目应用的示意图。如图8所示,左侧为存储设备a上的日志表,右侧为存储设备b上的日志表。存储设备a为接收到的四个写请求依次生成的日志id为a1、a2、a3和a4;存储设备b为接收到的四个写请求依次生成的日志id为b1、b2、b3和b4。

当存储设备a接收到第一个写请求时,将该写请求中的待写入数据写入到自身的缓存空间,并为该写请求生成日志ida1,生成本端日志条目,然后将已保存的对端idb1填入到“最近返回id”字段,并相应地基于写请求的内容填充其它字段(图8中为存储设备a和存储设备b已处理多个写请求后更新的日志表)。

此外,需要指出的是,如果对端存储设备此前未返回对端id,说明存储设备当前处理的写请求是双活存储系统接收到的首个写请求,在这种情况下,存储设备可在为该写请求生成的日志条目的第二字段中填零。

步骤703:将所述写请求、所述第四本端id和所述第三对端id发送至所述对端存储设备,以由所述对端存储设备将所述写请求中的待写入数据写入到自身的缓存空间、生成对应于所述写请求的对端日志条目、并返回缓存成功信息;其中,所述对端日志条目的第一字段填入所述第四本端id,所述对端日志条目的第二字段填入所述第三对端id,所述对端日志条目的lunid和逻辑地址为所述写请求中的lunid和逻辑地址,所述对端日志条目中的缓存地址为所述待写入数据在所述对端存储设备的缓存空间中的缓存地址。

双活存储系统中,两个存储设备的同一逻辑地址需写入相同的数据,以此达到互相冗余的目的。因此,存储设备除了将上述写请求中的待写入数据写入到自身的缓存空间,还需将上述写请求转发至对端存储设备,以由对端存储设备缓存上述写请求中的待写入数据。此外,存储设备还需将上述第四本端id和上述第三对端id发送至上述对端存储设备,以由上述对端存储设备生成对应于上述写请求的对端日志条目。

需要指出的是,此处对端日志条目是相对对端存储设备来说的。仍以图8为例,存储设备a将对应于a1的写请求中的待写入数据缓存到自身的缓存空间,并将该写请求、本端ida1和对端idb1发送至存储设备b。存储设备b接收到上述写请求后,将上述写请求中的待写入数据写入到本地的缓存空间,并生成对应于上述写请求的对端日志条目。该对端日志条目的“当前id”字段填入a1,“最近返回id”字段填入b1,并相应地基于写请求的内容填充其它字段。

其中,双活存储系统的两个存储设备在处理同一写请求时,所生成的对应于该写请求的日志条目的内容除“缓存地址”字段以外都是相同的。

对于“缓存地址”字段,由于记录的是待写入数据写入到两个存储设备的缓存空间中的缓存地址,可以不同。

以图8为例,存储设备a上对应于a1的日志条目的“缓存地址”,可能与存储设备b上对应于a1的日志条目的“缓存地址”不同。

对端存储设备生成上述对端日志条目后,即可获知该对端日志条目中对应于上述第四本端id的写请求在对应于上述第三对端id的写请求之后处理。

对端存储设备可在缓存上述写请求中的待写入数据后,返回缓存成功信息。

步骤704:接收到所述缓存成功信息,发送写入成功信息。

存储设备接收到对端存储设备返回的缓存成功信息后,可确定本次写请求处理完成,向接收写请求的外部发送写入成功信息。

在本申请实施例中,存储设备在向外部发送写入成功信息后,还需向对端存储设备发送已处理的写请求对应的本端id。

在示出的一种实施方式中,存储设备可在发送上述写入成功信息后,向对端存储设备发送写入完成消息,其中,该写入完成消息携带上述第四本端id。

仍以图8为例,存储设备a在处理完成a1对应的写请求后,可向存储设备b发送写入完成消息,该写入完成消息携带上述日志ida1。存储设备b接收到上述写入完成消息后,保存该日志id。存储设备b在下一次接收到写入完成消息后,可基于新接收的写入完成消息携带的日志id替换已保存的日志id,从而始终可以获知存储设备a上写请求的处理进度。

在这种实施方式中,存储设备在处理完成写请求后,立即向对端存储设备通知已处理的写请求对应的日志id。使得对端存储设备在生成其自身的本端日志条目时,可以向该本端日志条目的第二字段填入存储设备最近完成的写请求对应的日志id。

在示出的另一种实施方式中,为减少双控存储系统内部的交互,存储设备可利用现有的交互消息传递最近处理的写请求对应的日志id。

作为一种实施例,存储设备可在下一次向对端存储设备发送写请求时,将上述第四本端id添加到该写请求中。具体地,存储设备可以为转发至对端存储设备的写请求添加指定字段,然后向该指定字段中填入最近已处理的写请求对应的上述第四本端id。

对端存储设备接收到上述写请求,从该写请求的指定字段中获取并保存上述第四本端id,从而更新自身保存的本端存储设备最近处理的写请求对应的日志id。

在这种实施例中,为保证双控存储系统的两个存储设备都可以及时向对方发送自身最近处理的写请求对应的日志id,存储设备还可在向对端存储设备发送缓存成功信息时,将上述第四本端id添加到该缓存成功信息中。具体地,存储设备可以为缓存成功信息添加指定字段,然后向该指定字段中填入最近已处理的写请求对应的上述第四本端id。

对端存储设备接收到上述缓存成功信息,从该缓存成功信息的指定字段中获取并保存上述第四本端id,从而更新自身保存的本端存储设备最近处理的写请求对应的日志id。

在这种实施方式中,存储设备利用已有的交互消息传递最近处理的写请求对应的日志id,可减少两台存储设备之间的交互,避免因大量交互影响双控存储系统的性能。

至此,本申请处理写请求的流程介绍完毕。

下面对本申请处理写入冲突的流程进行说明。

参见图9,为本申请示出的一种处理写入冲突的方法的流程图,该方法应用于双控存储系统的存储设备,包括以下步骤:

步骤901:判断本设备是主存储设备或从存储设备。

其中,主存储设备可确定在发生写入冲突时向存在写入冲突的逻辑地址实际写入的数据;从存储设备从主存储设备获取存在写入冲突的写请求的处理顺序,从而保证最终写入的数据与主存储设备相同。

在示出的一种实施方式中,双控存储系统的两台存储设备可被预配置为主存储设备或从存储设备。

在这种情况下,存储设备可以基于配置信息确定自身为主存储设备或从存储设备。

在示出的另一种实施方式中,双活存储系统的两台存储设备可以基于预设的选举策略,选举出主存储设备;除主存储设备以外的另一存储设备即为从存储设备。

选举策略可基于应用环境灵活配置。

比如:若外部向两台存储设备的访问频率不同,则两台存储设备可以在比对单位时间内处理的io请求的数量后,选择处理的io请求较多的存储设备为主存储设备。由于从存储设备处理的io请求较少,有更多的性能用于后续检查写入。

当然,也可以通过其它方式进行选举,本申请不具体限定。

在这种情况下,存储设备在选举完成后,可在自身保存表征主存储设备或从存储设备的标记,后续通过读取该标记确定自身为主存储设备或从存储设备。

在本申请实施例中,若本设备为主存储设备,可以依据本地的日志表中各日志条目的排列顺序,将与每一日志条目对应的写请求中的待写入数据,从本地的缓存空间写入到该写请求中的逻辑地址。如果日志条目对应的写请求存在写入冲突,本设备最终写入的是对应的日志条目排列在后的写请求中的待写入数据。

以图8为例进行说明,当存储设备b确定自身为主存储设备,则在将数据从缓存空间写入lun的过程中,直接依据本地的日志表各日志条目的排列顺序,从b1对应的写请求开始,将各写请求中的待写入数据从缓存空间写入lun。

步骤902:若本设备是从存储设备,依据所述日志条目的排列顺序,检查第一对端日志条目后最近的第一本端日志条目;其中所述第一对端条目包含第一对端id和第一本端id,所述第一本端日志条目包括第二本端id和第二对端id,所述第二对端id的序号不小于所述第一对端id的序号。

其中,第一对端日志条目泛指日志表中第一字段为对端id的日志条目,第一本端日志条目泛指日志表中第一字段为本端id的日志条目,第一对端id和第二对端id泛指对端存储设备为自身从外部接收的写请求生成的日志id,第一本端id和第二本端id泛指本端存储设备为自身从外部接收的写请求生成的日志id;以上均是为便于描述进行的命名,并不限定本申请。

第一字段即为前述“当前id”字段。

第二字段即为前述“最近返回id”字段。

在本设备是从存储设备的情况下,需对每一对端日志条目进行检查。存储设备需找到第一对端日志条目后最近的第一本端日志条目,该第一本端日志条目携带的第二对端id的序号不小于上述第一对端日志条目携带的第一对端id的序号。

以图8为例进行说明。存储设备b检查“当前id”为a1的第一对端日志条目后最近的第一本端日志条目是“当前id”为b2的日志条目。其中,“当前id”为b2的日志条目中第二对端id为a2,a2的序号大于a1的序号。

需要说明的是,第一对端日志后最近的本端日志条目中的对端id的序号,可能小于第一对端日志中的第一对端id的序号。在这种情况下,继续往后查找,直到找到第一条满足条件的本端日志条目,该本端日志条目才是上述第一本端日志条目。

由于本端日志条目的第一字段填入本端存储设备为写请求生成的日志id,本端日志条目的第二字段填入对端存储设备最近处理的写请求对应的日志id,可知,对于双活存储系统而言,上述第二对端id对应的写请求在上述第二本端id对应的写请求之前处理;进一步地,由于上述第二对端id的序号不小于上述第一对端id的序号,上述第一对端id对应的写请求必然也在上述第二本端id对应的写请求之前处理。

由于对端日志条目的第一字段填入对端存储设备为写请求生成的日志id,所述对端日志条目的第二字段填入本端存储设备最近处理的写请求对应的日志id,可知,对于双活存储系统而言,上述第一本端id对应的写请求在上述第一对端id对应的写请求之前处理。

因此,可以确定生成上述第一对端id的时间点,在生成第一本端id的时间点和生成第二本端id的时间点之间。换而言之,对于双控存储系统而言,接收第一对端id对应的写请求的时间点,在接收第一本端id对应的写请求的时间点和接收第二本端id对应的写请求的时间点之间。

步骤903:确定所述第一本端id和所述第二本端id之间是否存在第三本端id,如果是,检查所述第一对端id对应的lunid、逻辑地址和所述第三本端id对应的lunid、逻辑地址是否相同。

存储设备在确定出生成上述第一对端id的时间点所在的时间区间后,可以判断该时间区间内本设备是否生成日志id。

因此,存储设备可以确定上述第一本端id和上述第二本端id之间是否存在第三本端id。具体地,存储设备可在日志表中查找第一本端id对应的日志条目和第二本端id对应的日志条目之间是否存在本端日志条目,若存在,该本端日志条目即为第三本端id所在的本端日志条目。

以图8为例进行说明。存储设备b检查“当前id”为a3的第一对端日志条目后最近的第一本端日志条目是“当前id”为b4的日志条目。存储设备b确定第一本端idb2对应的日志条目和第二本端idb4对应的日志条目之间是否存在本端日志条目。此时,存在“当前id”为b3的日志条目,可确定第三本端id为b3。

在存在第三本端id的情况下,检查第一对端id对应的lunid、逻辑地址和第三本端id对应的lunid、逻辑地址是否相同。从而执行进一步的操作,具体详见下文相关描述。

当然,第一本端id和第二本端id之间可能不存第三本端id,在这种情况下,可以直接确定不存在与上述第一对端id对应的写请求有写入冲突的写请求。

仍以图8为例进行说明。存储设备b检查“当前id”为a1的第一对端日志条目后最近的第一本端日志条目是“当前id”为b2的日志条目。存储设备b需确定第一本端idb1对应的日志条目和第二本端idb2对应的日志条目之间是否存在本端日志条目。此时,不存在本端日志条目,也就不存在第三本端id,可以确定不存在与a1对应的写请求由写入冲突的写请求。

此外,需要指出两种特殊情况:

(1)上述第一对端日志条目后不存在上述第一本端日志条目。这种情况又可分两类:

一方面,上述第一对端日志条目后不存在本端日志条目。

在这种情况下,可以直接确定该第一对端日志条目对应的写请求不存在写入冲突。

另一方面,上述第一对端日志条目后存在本端日志条目,但是该本端日志条目中的对端id的序号小于上述对端日志条目中的第一对端id的序号。

在这种情况下,可以将该本端日志条目当作第三本端id对应的日志条目,做进一步的判断。

(2)上述第一对端条目中的第一本端id为零。这种情况表明,对端存储设备在生成第一对端条目时,本端存储设备尚未向其发送自身已处理的写请求对应的日志id。

在这种情况下,后续检查第一本端id和第二本端id之间是否存在第三本端id时,实际是检查第二本端id之前是否存在本端id。若存在则该本端id可作为第三本端id,并执行进一步的判断。

步骤904:若相同,确定所述第一对端id对应的写请求与所述第三本端id对应的写请求存在写入冲突,将所述第一对端id和所述第三本端id发送至所述主存储设备,以由所述主存储设备返回存在写入冲突的写请求的处理顺序。

在确定存在第三本端id,且上述第一对端id对应的lunid、逻辑地址和上述第三本端id对应的lunid、逻辑地址相同的情况下,可以确定上述第一对端id对应的写请求与上述第三本端id对应的写请求存在写入冲突。

在这种情况下,为保证与主存储设备在同一地址写入相同数据,存储设备需将上述第一对端id和上述第三本端id发送至上述主存储设备。

仍以图8为例进行说明。存储设备b检查到第一对端ida3对应的lunid、逻辑地址和第三本端idb3对应的lunid、逻辑地址相同的情况下,可以将第一对端ida3和第三本端idb3发送至主存储设备。

作为一种实施例,存储设备可以向主存储设备发送冲突处理请求,其中,该冲突处理请求携带上述第一对端id和上述第三本端id。

在本申请实施例中,主存储设备接收到从存储设备发送的存在写入冲突的写请求对应的若干日志id,可以查找上述若干日志id对应的日志条目在本地的日志表中的先后顺序。

进一步地,主存储设备可以向上述从存储设备返回该先后顺序;其中,该先后顺序即为上述从存储设备处理上述存在写入冲突的写请求的处理顺序。

仍以图8为例进行说明。若存储设备a接收到存储设备b发送的第一对端ida3和第三本端idb3,则可以查找a3对应的日志条目和b3对应的日志条目在本地的日志表中的先后顺序,即b3对应的日志条目在a3对应的日志条目之后。进一步地,存储设备a向存储设备b发送该先后顺序。

步骤905:按照所述处理顺序,调整所述第一对端条目和所述第三本端id对应的第三本端日志条目在所述日志表中的排列顺序。

存储设备从主存储设备获取存在写入冲突的写请求的处理顺序后,可以按照该处理顺序,调整上述第一对端条目和上述第三本端条目在日志表中的排序顺序。具体地,若上述处理顺序与上述排列顺序相同,则保持该排列顺序不变;若上述处理顺序与上述排列顺序相反,则将上述第一对端条目和上述第三本端条目在日志表中互换位置。

通过该措施,后续对于第一对端条目对应的写请求和第三本端条目对应的写请求,存储设备依照上述排列顺序将写请求中的待写入数据写入到写请求中的逻辑地址时,最终写入的数据与主存储设备相同。

仍以图8为例进行说明。存储设备b检查出a3对应的写请求和b3对应的写请求存在写入冲突,可以依据存储设备a返回的处理顺序,调整“当前id”为a3的日志条目和“当前id”为b3的日志条目在日志表中的排列顺序,在图8中,即为互为两个日志条目的位置。

存储设备对本地的日志表中的每一对端日志条目,重复上述处理流程,直到依据所有存在写入冲突的写请求的处理顺序调整上述日志表中日志条目的排列顺序。

步骤906:依据所有存在写入冲突的写请求的处理顺序调整所述日志表中日志条目的排列顺序后,按照所述排列顺序,依次将各日志条目对应的写请求中的待写入数据从本地的缓存空间写入到该写请求中的逻辑地址。

通过该措施,对于存在写入冲突的写请求,存储设备可以按照与主存储设备相同的处理顺序将写请求中的待写入数据写入到写请求中的逻辑地址;对于不存在写入冲突的写请求,存储设备可以按照接收写请求的先后顺序将待写入数据写入到写请求中的逻辑地址。因此,存储设备最终写入的待写入数据与主存储设备完全一致。

在本申请实施例中,如果存储设备采用增加了检查点条目的日志表处理写入冲突,则在处理写请求阶段,存储设备可为日志表添加检查点条目。

作为一种实施例,存储设备可在空闲的时候为日志表添加检查点条目。

作为另一种实施例,存储设备在添加前一个检查点条目后,若增加的日志条目达到预设的数量阈值,则暂停处理写请求,并为日志表添加检查点条目。

作为又一种实施例,存储设备可以周期性为日志表添加检查点条目。

需要注意的是,双控存储系统的两台存储设备在添加检查点条目前可相互通信,以确定两台存储设备上检查点条目的位置相同。

存储设备为日志表添加检查点条目后,后续可基于检查点处理写入冲突。

参见图10,为本申请示出的一种基于检查点处理写入冲突的方法的流程图。

首先存储设备需查找日志表中未处理的最早的检查点,然后处理该检查点之前未处理的写请求。具体的处理步骤参照前述步骤901至步骤905。

在处理完成该检查点之前的写请求之后,确定是否存在下一检查点。

一方面,若存在下一检查点,继续处理该检查点之前未处理的写请求;

另一方面,若不存在下一检查点,则处理完毕。

以图4为例,存储设备在查找出检查点1后,首先处理该检查点1之前的日志条目对应的写请求,并在处理完成之后,查找出检查点2,并处理该检查点2之前的日志条目对应的写请求。重复上述流程,直到处理完最后一个检查点之前的日志条目对应的写请求。

存储设备基于检查点处理写入冲突,可将双活存储系统接收到的写请求划分在多个时间段内,每次对一个时间段内的写请求处理写入冲突,从而降低了每次处理的写请求的数量,降低了技术实现的难度,也降低了日志表的维护难度。

至此,本申请处理写入冲突的流程介绍完毕。

在本申请实施例中,双活存储系统将写请求中的待写入数据缓存以后,在将缓存空间中的待写入数据写入到其对应的写请求的逻辑地址之前,可能接收到对缓存空间中的数据的读请求。此外,存储设备尚未对缓存空间中的数据处理写入冲突,缓存空间中可能已缓存同一逻辑地址的多种数据,因此,存储设备从缓存空间获取数据来响应读请求时需要判断是否存在写入冲突。

下面对本申请处理读请求的流程进行说明。

参见图11,为本申请示出的一种处理读请求的方法的流程图,该方法应用于双控存储系统的存储设备,包括以下步骤:

步骤111:接收到读请求。

步骤112:基于所述读请求中的逻辑地址,查找所述日志表,确定是否存在对应的日志条目。

存储设备基于读请求中的逻辑地址查找日志表后,可确定本地的缓存空间是否存在该读请求的待读取数据。

一方面,如果不存在对应的日志条目,则确定本地的缓存空间中不存在上述读请求的待读取数据。在这种情况下,可以直接基于上述读请求中的lunid、逻辑地址和数据长度从lun中读取并返回待读取数据。

另一方面,如果存在对应的日志条目,则确定本地的缓存空间中存在上述读请求的待读取数据。存储设备需基于自身是从存储设备或主存储设备,分情况进行处理,具体详见下文相关描述。

步骤113:如果存在对应的日志条目,判断本设备是主存储设备或从存储设备。

存储设备需判断本设备是主存储设备或从存储设备,来选择进一步处理的方式。

一方面,如果本设备是主存储设备,由于主存储设备后续依据日志表的日志条目的排序顺序,将每一日志条目对应的待写入数据写入lun。因此,当存在对任一逻辑地址的写入冲突时,主存储设备最终写入的是对应于该逻辑地址的最新日志条目对应的待写入数据。

在这种情况下,存储设备可以选择对应于上述逻辑地址的最新日志条目,然后基于该日志条目中的缓存地址和上述读请求中的数据长度读取并返回待读取数据。

当然,若对应于上述逻辑地址的日志条目只有一条,则存储设备直接基于该日志条目中的缓存地址和上述逻辑读请求中的数据长度读取并返回待读取数据。

另一方面,如果本设备是从存储设备,则需根据上述日志条目对应的写请求是否存在写入冲突,分两种情况处理,具体详见下文相关描述。

步骤114:若本设备是从存储设备,检查对应于所述逻辑地址的若干日志条目对应的写请求是否存在写入冲突。

存储设备查找到的对应于上述逻辑地址的若干日志条目分为以下几种情况:

(1)查找到对应于上述逻辑地址的一条本端日志条目或一条对端日志条目;

(2)查找到对应于上述逻辑地址的至少两条本端日志条目或至少两条对端日志条目;

(3)查找到对应于上述逻辑地址的至少一条本端日志条目和至少一条对端日志条目。

在(1)和(2)这两种情况下,不存在写入冲突。因此,对情况(3)中是否存在写入冲突进行说明。

当存储设备查找到对应于上述逻辑地址的至少一条本端日志条目和至少一条对端日志条目,实际上只需检查最新的本端日志条目对应的写请求和最新的对端日志条目对应的写请求是否存在写入冲突。

具体地,存储设备可以基于上述步骤902的方法,确定出生成该最新的对端日志条目中的第一对端id的时间点所在的时间区间,然后确定生成该最新的本端日志条目中的本端id的时间点是否在上述时间区间内。

一方面,如果是,则确定该最新的对端日志条目对应的写请求和该最新的本端日志条目对应的写请求之间存在写入冲突。

另一方面,如果不是,则确定该最新的对端日志条目对应的写请求和该最新的本端日志条目对应的写请求之间不存在写入冲突。

仍以图8为例进行说明,假设存储设备b接收到读请求,该读请求中的lunid为1、逻辑地址为100、数据长度为100。存储设备b查找到对应于该逻辑地址的是“当前id”分别为a2和b2的两条日志条目。

进一步地,存储设备b可以从“当前id”分别为a2和b2的两条日志条目中,确定对端ida2之前的本端idb1,以及,确定对端ida2之后的本端idb2。而本端idb2并不处于本端idb1和b2之间(实际上b1和b2之间不存在日志id),因此,可以确定对端ida2对应的写请求和本端idb2对应的写请求之间不存在写入冲突。

步骤115:如果存在写入冲突,将所述若干日志条目中第一字段的日志id发送至所述主存储设备,以由所述主存储设备返回最新的日志id,并基于该日志id对应的日志条目中的缓存地址和所述读请求中的数据长度读取并返回待读取数据。

存储设备在确定存在写入冲突的情况下,可以将上述若干日志条目中第一字段的日志id发送至上述主存储设备。

作为一种实施例,存储设备可以向对端存储设备发送冲突解决请求,其中,该冲突解决请求携带存在写入冲突的写请求对应的日志id。

上述主存储设备接收到该冲突解决请求后,基于该冲突解决请求中的日志id查找本地的日志表,确定上述日志id对应的日志条目在日志表中的先后顺序,然后选择顺序在后的日志id返回。其中,顺序在后的日志id即为上述逻辑地址对应的最新的日志id。

存储设备接收到上述主存储设备返回的日志id,基于该日志id对应的日志条目中的缓存地址和上述读请求中的数据长度读取并返回待读取数据。

另一方面,在本申请实施例中,若本设备是从存储设备,且对应于上述逻辑地址的若干日志条目对应的写请求不存在写入冲突,则可以选择对应于上述逻辑地址的最新的日志条目,然后基于该日志条目中的缓存地址和上述读请求中的数据长度读取并返回待读取数据。

具体地,对于前述情况(1),存储设备是基于查找到的唯一日志条目中的缓存地址和上述读请求中的数据长度读取并返回待读取数据。

对于前述情况(2),存储设备是基于至少两条本端日志条目中最新的本端日志条目中的缓存地址和上述读请求中的数据长度读取并返回待读取数据。

或者,存储设备是基于至少两条对端日志条目中最新的对端日志条目中的缓存地址和上述读请求中的数据长度读取并返回待读取数据。

对于前述情况(3),存储设备在确定出最新的本端日志条目对应的写请求和最新的对端日志条目对应的写入冲突后,可以选择两者中较新的日志条目,然后基于该日志条目中的缓存地址和上述读请求中的数据长度读取并返回待读取数据。

通过上述措施,双活存储系统的存储设备可以处理针对缓存空间中的数据的读请求,并在返回待读取数据前,首先判断是否存在写入冲突,从而使双活存储系统的两台存储设备响应同一个读请求的待读取数据相同。

至此,本申请处理读请求的流程介绍完毕。

综上所述,在本申请实施例中,存储设备在确定自身为从存储设备后,可以检查第一对端日志条目后最近的第一本端日志条目,其中,所述第一对端条目包含第一对端id和第一本端id,所述第一本端日志条目包括第二本端id和第二对端id,所述第二对端id的序号不小于所述第一对端id的序号;

由于本端日志条目的第一字段填入本端存储设备为写请求生成的日志id,所述本端日志条目的第二字段填入对端存储设备最近处理的写请求对应的日志id,可知,对于双活存储系统而言,所述第二对端id对应的写请求在所述第二本端id对应的写请求之前处理;进一步地,由于所述第二对端id的序号不小于所述第一对端id的序号,所述第一对端id对应的写请求必然也在所述第二本端id对应的写请求之前处理;

由于对端日志条目的第一字段填入对端存储设备为写请求生成的日志id,所述对端日志条目的第二字段填入本端存储设备最近处理的写请求对应的日志id,可知,对于双活存储系统而言,所述第一本端id对应的写请求在所述第一对端id对应的写请求之前处理;

进一步地,可以确定生成第一对端id的时间点,在生成第一本端id的时间点和生成第二本端id的时间点之间;

存储设备确定所述第一本端id和第二本端id之间是否存在第三本端id,如果是,则第三本端id对应的写请求与所述第一对端id对应的写请求可能存在写入冲突,为进一步验证,检查所述第一对端id对应的lunid、逻辑地址与所述第三本端id对应的lunid、逻辑地址是否相同;

若相同,则可以确定存在写入冲突,并将所述第一对端id和所述第三本端id发送至主存储设备,以由所述主存储设备返回存在写入冲突的写请求的处理顺序,然后按照该处理顺序,调整上述第一对端日志条目和上述第三本端id对应的第三本端日志条目在日志表中的排列顺序;

依据所有存在写入冲突的写请求的处理顺序调整上述日志表中日志条目的排列顺序后,按照上述排列顺序,依次将各日志条目对应的写请求中待写入数据从本地的缓存空间写入到该写请求中的逻辑地址;

通过上述措施,双活存储系统的从存储设备可以在检查到写入冲突时,依照与主存储设备相同的处理顺序将写入冲突的写请求中的待写入数据写入到逻辑地址中,使得双活存储系统中同一地址中的数据相同;

相比现有技术,本申请在处理写请求时,首先将待写入数据缓存到缓存空间,从而缩短了响应写请求的时间;此外,从存储设备可基于本申请提出的日志表,独立确定出存在写入冲突的写请求,仅在存在写入冲突时向主存储设备获取写请求的处理顺序,减少了两台存储设备之间的交互,提高了双活存储系统的整体效率。

与前述处理写入冲突的方法的实施例相对应,本申请还提供了处理写入冲突的装置的实施例。

参见图12,为本申请示出的一种处理写入冲突的装置的实施例框图:

如图12所示,该处理写入冲突的装置200包括:

判断单元201,用于判断本设备是主存储设备或从存储设备。

第一检查单元202,用于若本设备是从存储设备,依据所述日志条目的排列顺序,检查第一对端日志条目后最近的第一本端日志条目;其中所述第一对端条目包含第一对端id和第一本端id,所述第一本端日志条目包括第二本端id和第二对端id,所述第二对端id的序号不小于所述第一对端id的序号。

第二检查单元203,用于确定所述第一本端id和所述第二本端id之间是否存在第三本端id,如果是,检查所述第一对端id对应的lunid、逻辑地址和所述第三本端id对应的lunid、逻辑地址是否相同。

发送单元204,用于若相同,确定所述第一对端id对应的写请求与所述第三本端id对应的写请求存在写入冲突,将所述第一对端id和所述第三本端id发送至所述主存储设备,以由所述主存储设备返回存在写入冲突的写请求的处理顺序。

调整单元205,用于按照所述处理顺序,调整所述第一对端日志条目和所述第三本端id对应的第三本端日志条目在所述日志表中的排列顺序。

写入单元206,用于按照所述处理顺序,将所述第一对端id对应的写请求中的待写入数据从本地的缓存空间写入到该写请求中的逻辑地址,以及,将所述第三本端id对应的写请求中的待写入数据从本地的缓存空间写入到该写请求中的逻辑地址。

在本例中,所述写入单元206,进一步用于:

若本设备为主存储设备,依据本地的日志表中各日志条目的排列顺序,将与每一日志条目对应的写请求中的待写入数据,从本地的缓存空间写入到该写请求中的逻辑地址。

在本例中,所述装置还包括:

接收单元207,用于若本设备为主存储设备,当接收到从存储设备发送的存在写入冲突的写请求对应的若干日志id,查找所述若干日志id对应的日志条目在所述日志表中的先后顺序。

所述发送单元204,进一步用于向所述从存储设备返回该先后顺序;其中,该先后顺序即为所述从存储设备处理存在写入冲突的写请求的处理顺序。

在本例中,所述日志条目包括缓存地址,所述装置还包括:

所述接收单元207,进一步用于接收到写请求。

缓存单元208,用于将所述写请求中的待写入数据写入到本地的缓存空间,为该写请求生成对应的第四本端id,并生成对应于该写请求的本端日志条目;其中,所述本端日志条目的第一字段填入所述第四本端id,所述本端日志条目的第二字段填入对端存储设备最近处理的写请求对应的第三对端id,所述本端日志条目的lunid和逻辑地址为所述写请求中的lunid和逻辑地址,所述本端日志条目中的缓存地址为所述待写入数据在缓存空间中的缓存地址。

所述发送单元204,进一步用于将所述写请求、所述第四本端id和所述第三对端id发送至所述对端存储设备,以由所述对端存储设备将所述写请求中的待写入数据写入到自身的缓存空间、生成对应于所述写请求的对端日志条目、并返回缓存成功信息;其中,所述对端日志条目的第一字段填入所述第四本端id,所述对端日志条目的第二字段填入所述第三对端id,所述对端日志条目的lunid和逻辑地址为所述写请求中的lunid和逻辑地址,所述对端日志条目中的缓存地址为所述待写入数据在所述对端存储设备的缓存空间中的缓存地址;接收到所述缓存成功信息,发送写入成功信息。

在本例中,所述发送单元204,进一步用于:

在发送所述写入成功信息后,向所述对端存储设备发送写入完成消息,其中,所述写入完成消息携带所述第四本端id,以由所述对端存储设备更新自身保存的本端存储设备最近处理的写请求对应的日志id;或者,

在下一次向所述对端存储设备转发写请求时,将所述第四本端id添加到所述写请求中,以由所述对端存储设备更新自身保存的本端存储设备最近处理的写请求对应的日志id;

在向所述对端存储设备发送缓存成功信息时,将所述第四本端id添加到所述缓存成功信息中,以由所述对端存储设备更新自身保存的本端存储设备最近处理的写请求对应的日志id。

在本例中,所述日志条目包括缓存地址,所述装置还包括:

所述接收单元207,进一步用于接收到读请求;基于所述读请求中的逻辑地址,查找所述日志表,确定是否存在对应的日志条目。

所述判断单元201,进一步用于如果存在对应的日志条目,判断本设备是主存储设备或从存储设备。

所述第一检查单元202,用于若本设备是从存储设备,检查对应于所述逻辑地址的若干日志条目对应的写请求是否存在写入冲突。

所述发送单元204,进一步用于如果存在写入冲突,将所述若干日志条目中第一字段的日志id发送至所述主存储设备,以由所述主存储设备返回最新的日志id,并基于该日志id对应的日志条目中的缓存地址和所述读请求中的数据长度读取并返回待读取数据。

在本例中,所述发送单元204,进一步用于:

如果不存在对应的日志条目,基于所述读请求中的lunid、逻辑地址和数据长度读取并返回待读取数据。

在本例中,所述发送单元204,进一步用于:

若本设备是主存储设备,选择对应于所述逻辑地址的最新的日志条目,基于该日志条目中的缓存地址和所述读请求中的数据长度读取并返回待读取数据。

在本例中,所述发送单元204,进一步用于:

如果不存在写入冲突,选择对应于所述逻辑地址的最新的日志条目,基于该日志条目中的缓存地址和所述读请求中的数据长度读取并返回待读取数据。

本申请处理写入冲突的装置的实施例可以应用在存储设备上。装置实施例可以通过软件实现,也可以通过硬件或者软硬件结合的方式实现。以软件实现为例,作为一个逻辑意义上的装置,是通过其所在存储设备的处理器将非易失性存储器中对应的计算机程序指令读取到内存中运行形成的。从硬件层面而言,如图13所示,为本申请处理写入冲突的装置所在存储设备的一种硬件结构图,除了图13所示的处理器、内存、网络接口、以及非易失性存储器之外,实施例中装置所在的存储设备通常根据该处理写入冲突的装置的实际功能,还可以包括其他硬件,对此不再赘述。

上述装置中各个单元的功能和作用的实现过程具体详见上述方法中对应步骤的实现过程,在此不再赘述。

对于装置实施例而言,由于其基本对应于方法实施例,所以相关之处参见方法实施例的部分说明即可。以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本申请方案的目的。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。

以上所述仅为本申请的较佳实施例而已,并不用以限制本申请,凡在本申请的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本申请保护的范围之内。

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