一种数据发送方法、装置、设备及存储介质转让专利

申请号 : CN202311515349.4

文献号 : CN117234743B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 肖诗淼邵雨恬刘志魁

申请人 : 苏州元脑智能科技有限公司

摘要 :

本申请实施例涉及数据存储技术领域,具体涉及一种数据发送方法、装置、设备及存储介质,旨在实现控制器群组内的各个节点之间的数据转发。所述方法包括:将待存储数据发送至控制器节点的数据转发层;响应于所述待存储数据对应的存储卷为运行状态,确定所述待存储数据对应的数据区域;响应于所述待存储数据对应的所述数据区域为非单一数据区域,根据所述待存储数据对应的所述数据区域,对所述待存储数据进行数据拆分,得到多个待存储子数据;响应于所述待存储子数据为待转发子数据,根据每个所述待存储子数据对应的所述数据区域,确定每个所述待存储子数据对应的索引节点号;将每个所述待存储子数据发送至对应的控制器节点中。

权利要求 :

1.一种数据发送方法,其特征在于,所述方法包括:将待存储数据发送至控制器群组中任意一个控制器节点的数据转发层;

响应于所述待存储数据对应的存储卷为运行状态,确定所述待存储数据对应的数据区域;

响应于所述待存储数据对应的所述数据区域为非单一数据区域,根据所述待存储数据对应的所述数据区域,对所述待存储数据进行数据拆分,得到多个待存储子数据;

响应于所述待存储子数据为待转发子数据,根据每个所述待存储子数据对应的所述数据区域,确定每个所述待存储子数据对应的索引节点号;

将每个所述待存储子数据发送至目标控制器节点中,所述目标控制器节点是所述索引节点号对应的控制器节点;

所述数据区域由存储空间预先拆分得到,多个所述数据区域的地址是连续的,每个所述数据区域对应一个所述控制器节点,所述控制器节点负责处理所述数据区域对应的所述待存储子数据。

2.根据权利要求1所述的方法,其特征在于,在将待存储数据发送至控制器群组中任意一个控制器节点的数据转发层之前,所述方法还包括:在所述控制器群组中添加多个所述控制器节点;

通过循环镜像的方式,对多个所述控制器节点进行结对,得到多个控制器节点对;

在每个所述控制器节点对中指定一个所述控制器节点为主控制器节点。

3.根据权利要求1所述的方法,其特征在于,所述方法还包括:响应于所述存储卷为非运行状态,将所述待存储数据放入等待队列中;

响应于所述存储卷由所述非运行状态变更为所述运行状态,确定所述待存储数据对应的所述数据区域。

4.根据权利要求1所述的方法,其特征在于,所述方法还包括:响应于所述待存储数据对应的所述数据区域为单一数据区域,确定所述待存储数据对应的传输路径是否为快速路径;

当所述待存储数据对应的传输路径为快速路径时,将所述待存储数据直接传输至所述待存储数据对应的存储设备。

5.根据权利要求4所述的方法,其特征在于,所述方法还包括:当所述存储数据对应的所述传输路径不是所述快速路径时,确定所述待存储数据对应的存储卷是否为非运行状态;

当所述存储卷为非运行状态时,将所述待存储数据放入等待队列中。

6.根据权利要求1所述的方法,其特征在于,在根据所述待存储数据对应的所述数据区域,对所述待存储数据进行数据拆分,得到多个待存储子数据之前,所述方法还包括:确定所述待存储数据对应的起始存储地址以及终止存储地址;

根据所述起始存储地址与所述终止存储地址,确定所述待存储数据对应的所述数据区域是否为单一数据区域。

7.根据权利要求6所述的方法,其特征在于,所述根据所述起始存储地址与所述终止存储地址,确定所述待存储数据对应的所述数据区域是否为单一数据区域,包括:将所述起始存储地址与所述终止存储地址与每个所述数据区域的预设起始地址和预设终止地址进行对比;

当所述起始存储地址与所述终止存储地址位于同一个所述数据区域内时,确定所述待存储数据对应的所述数据区域为所述单一数据区域;

当所述起始存储地址与所述终止存储地址位于不同所述数据区域内时,确定所述待存储数据对应的所述数据区域为非单一数据区域。

8.根据权利要求1所述的方法,其特征在于,所述根据所述待存储数据对应的所述数据区域,对所述待存储数据进行数据拆分,得到多个待存储子数据,包括:获取所述待存储数据对应的每个所述数据区域的起始地址以及终止地址;

根据所述起始地址以及所述终止地址,将所述待存储数据拆分至每个所述数据区域中。

9.根据权利要求1所述的方法,其特征在于,在根据每个所述待存储子数据对应的所述数据区域,确定每个所述待存储子数据对应的索引节点号之前,所述方法还包括:确定所述待存储子数据对应的所述数据区域中是否存在转发标志;

当所述待存储子数据对应的所述数据区域中存在所述转发标志时,确定所述待存储子数据为所述待转发子数据。

10.根据权利要求1所述的方法,其特征在于,所述根据每个所述待存储子数据对应的所述数据区域,确定每个所述待存储子数据对应的索引节点号,包括:获取所述数据区域对应的节点位图集合;

从所述节点位图集合中,将数值为1的节点号作为所述待存储子数据对应的所述索引节点号。

11.根据权利要求1所述的方法,其特征在于,所述方法还包括:响应于所述控制器节点发生故障事件,确定所述待存储子数据是否开始进行转发;

当所述待存储子数据未开始进行转发时,将所述待存储子数据对应的所述目标控制器节点设置为故障状态;

在所述控制器节点对应的节点位图上添加转发失败标记;

将所述待存储子数据放入等待队列;

每隔一个预设时间段,对所述待存储子数据进行重试转发;

当所述待存储子数据正常转发时,删除所述转发失败标记。

12.根据权利要求11所述的方法,其特征在于,所述方法还包括:在与所述待存储子数据同属于一个所述待存储数据的后续待存储子数据中,设置故障标记;

对所述控制器节点对应的所述节点位图添加所转发失败标记;

将所述后续待存储子数据的状态码设置为失败状态;

等待一个所述预设时间段后,清理所述故障标记;

将所述后续待存储子数据重新进行转发;

当所述后续待存储子数据正常转发时,清除所述转发失败标记。

13.根据权利要求11所述的方法,其特征在于,所述方法还包括:当所述待存储子数据已经开始转发时,将所述待存储子数据对应的所述目标控制器节点设置为故障状态;

在所述控制器节点对应的节点位图上添加所述转发失败标记;

将所述待存储子数据的数据状态码设置为错误状态;

将所述待存储子数据放入所述等待队列;

每隔一个预设时间段,对所述待存储子数据进行重试转发;

确定所述待存储子数据转发失败。

14.根据权利要求13所述的方法,其特征在于,所述方法还包括:将与所述待存储子数据同属于一个所述待存储数据的后续待存储子数据的数据状态码设置为失败状态;

确定所述后续待存储子数据转发失败;

结束对所述后续待存储子数据的转发流程;

在所述后续待存储子数据对应的所述控制器节点对应的所述节点位图上添加所述转发失败标记。

15.一种数据发送装置,其特征在于,所述装置包括:待存储数据发送模块,用于将待存储数据发送至控制器群组中任意一个控制器节点的数据转发层;

数据区域确定模块,用于响应于所述待存储数据对应的存储卷为运行状态,确定所述待存储数据对应的数据区域;

数据拆分模块,用于响应于所述待存储数据对应的所述数据区域为非单一数据区域,根据所述待存储数据对应的所述数据区域,对所述待存储数据进行数据拆分,得到多个待存储子数据;

索引节点号确认模块,用于响应于所述待存储子数据为待转发子数据,根据每个所述待存储子数据对应的所述数据区域,确定每个所述待存储子数据对应的索引节点号;

待存储子数据发送模块,用于将每个所述待存储子数据发送至目标控制器节点中,所述目标控制器节点是所述索引节点号对应的控制器节点;

所述数据区域由存储空间预先拆分得到,多个所述数据区域的地址是连续的,每个所述数据区域对应一个所述控制器节点,所述控制器节点负责处理所述数据区域对应的所述待存储子数据。

16.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,该计算机程序被处理器执行时,实现如权利要求1至14任一所述的方法中的步骤。

17.一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其特征在于,所述处理器执行所述计算机程序时,实现如权利要求1至14任一所述的方法的步骤。

说明书 :

一种数据发送方法、装置、设备及存储介质

技术领域

[0001] 本申请实施例涉及数据存储技术领域,具体而言,涉及一种数据发送方法、装置、设备及存储介质。

背景技术

[0002] 在高端存储架构下,主机IO(Input/Output,输入/输出)数据下发后,会随机发送到一个控制器群组中,当该控制器群组无法处理下发的数据时,需要将数据转发至可以处理该数据的控制器群组的节点中,由该节点进行处理之后再发送至存储设备进行存储,相关技术中的存储方式中,数据在不同控制器群组之间进行转发。
[0003] 相关技术中,主机下发的数据无法在同一个控制器群组内的多个节点之间进行转发,导致控制器群组内的各个节点的负载不均衡,处理速度较慢。

发明内容

[0004] 本申请实施例提供一种数据发送方法、装置、设备及存储介质,旨在实现控制器群组内的各个节点之间的数据转发。
[0005] 本申请实施例第一方面提供一种数据发送方法,所述方法包括:
[0006] 将待存储数据发送至控制器群组中任意一个控制器节点的数据转发层;
[0007] 响应于所述待存储数据对应的存储卷为运行状态,确定所述待存储数据对应的数据区域;
[0008] 响应于所述待存储数据对应的所述数据区域为非单一数据区域,根据所述待存储数据对应的所述数据区域,对所述待存储数据进行数据拆分,得到多个待存储子数据;
[0009] 响应于所述待存储子数据为待转发子数据,根据每个所述待存储子数据对应的所述数据区域,确定每个所述待存储子数据对应的索引节点号;
[0010] 将每个所述待存储子数据发送至目标控制器节点中,所述目标控制器节点是所述索引节点号对应的控制器节点。
[0011] 可选地,在将待存储数据发送至控制器群组中任意一个控制器节点的数据转发层之前,所述方法还包括:
[0012] 在所述控制器群组中添加多个所述控制器节点;
[0013] 通过循环镜像的方式,对多个所述控制器节点进行结对,得到多个控制器节点对;
[0014] 在每个所述控制器节点对中指定一个所述控制器节点为主控制器节点。
[0015] 可选地,所述方法还包括:
[0016] 响应于所述存储卷为非运行状态,将所述待存储数据放入等待队列中;
[0017] 响应于所述存储卷由所述非运行状态变更为所述运行状态,确定所述待存储数据对应的所述数据区域。
[0018] 可选地,所述方法还包括:
[0019] 响应于所述待存储数据对应的所述数据区域为单一数据区域,确定所述待存储数据对应的传输路径是否为快速路径;
[0020] 当所述待存储数据对应的传输路径为快速路径时,将所述待存储数据直接传输至所述待存储数据对应的存储设备。
[0021] 可选地,所述方法还包括:
[0022] 当所述存储数据对应的所述传输路径不是所述快速路径时,确定所述待存储数据对应的存储卷是否为非运行状态;
[0023] 当所述存储卷为非运行状态时,将所述待存储数据放入等待队列中。
[0024] 可选地,在根据所述待存储数据对应的所述数据区域,对所述待存储数据进行数据拆分,得到多个待存储子数据之前,所述方法还包括:
[0025] 确定所述待存储数据对应的起始存储地址以及终止存储地址;
[0026] 根据所述起始存储地址与所述终止存储地址,确定所述待存储数据对应的所述数据区域是否为单一数据区域。
[0027] 可选地,所述根据所述起始存储地址与所述终止存储地址,确定所述待存储数据对应的所述数据区域是否为单一数据区域,包括:
[0028] 将所述起始存储地址与所述终止存储地址与每个所述数据区域的预设起始地址和预设终止地址进行对比;
[0029] 当所述起始存储地址与所述终止存储地址位于同一个所述数据区域内时,确定所述待存储数据对应的所述数据区域为所述单一数据区域;
[0030] 当所述起始存储地址与所述终止存储地址位于不同所述数据区域内时,确定所述待存储数据对应的所述数据区域为非单一数据区域。
[0031] 可选地,所述根据所述待存储数据对应的所述数据区域,对所述待存储数据进行数据拆分,得到多个待存储子数据,包括:
[0032] 获取所述待存储数据对应的每个所述数据区域的起始地址以及终止地址;
[0033] 根据所述起始地址以及所述终止地址,将所述待存储数据拆分至每个所述数据区域中。
[0034] 可选地,在根据每个所述待存储子数据对应的所述数据区域,确定每个所述待存储子数据对应的索引节点号之前,所述方法还包括:
[0035] 确定所述待存储子数据对应的所述数据区域中是否存在转发标志;
[0036] 当所述待存储子数据对应的所述数据区域中存在所述转发标志时,确定所述待存储子数据为所述待转发子数据。
[0037] 可选地,所述根据每个所述待存储子数据对应的所述数据区域,确定每个所述待存储子数据对应的索引节点号,包括:
[0038] 获取所述数据区域对应的节点位图集合;
[0039] 从所述节点位图集合中,将数值为1的节点号作为所述待存储子数据对应的所述索引节点号。
[0040] 可选地,所述方法还包括:
[0041] 响应于所述控制器节点发生故障事件,确定所述待存储子数据是否开始进行转发;
[0042] 当所述待存储子数据未开始进行转发时,将所述待存储子数据对应的所述目标控制器节点设置为故障状态;
[0043] 在所述控制器节点对应的节点位图上添加转发失败标记;
[0044] 将所述待存储子数据放入等待队列;
[0045] 每隔一个预设时间段,对所述待存储子数据进行重试转发;
[0046] 当所述待存储子数据正常转发时,删除所述转发失败标记。
[0047] 可选地,所述方法还包括:
[0048] 在与所述待存储子数据同属于一个所述待存储数据的后续待存储子数据中,设置故障标记;
[0049] 对所述控制器节点对应的所述节点位图添加所转发失败标记;
[0050] 将所述后续待存储子数据的状态码设置为失败状态;
[0051] 等待一个所述预设时间段后,清理所述故障标记;
[0052] 将所述后续待存储子数据重新进行转发;
[0053] 当所述后续待存储子数据正常转发时,清除所述转发失败标记。
[0054] 可选地,所述方法还包括:
[0055] 当所述待存储子数据已经开始转发时,将所述待存储子数据对应的所述目标控制器节点设置为故障状态;
[0056] 在所述控制器节点对应的节点位图上添加所述转发失败标记;
[0057] 将所述待存储子数据的数据状态码设置为错误状态;
[0058] 将所述待存储子数据放入所述等待队列;
[0059] 每隔一个预设时间段,对所述待存储子数据进行重试转发;
[0060] 确定所述待存储子数据转发失败。
[0061] 可选地,所述方法还包括:
[0062] 将与所述待存储子数据同属于一个所述待存储数据的后续待存储子数据的数据状态码设置为失败状态;
[0063] 确定所述后续待存储子数据转发失败;
[0064] 结束对所述后续待存储子数据的转发流程;
[0065] 在所述后续待存储子数据对应的所述控制器节点对应的所述节点位图上添加所述转发失败标记。
[0066] 本申请实施例第二方面提供一种数据发送装置,所述装置包括:
[0067] 待存储数据发送模块,用于将待存储数据发送至控制器群组中任意一个控制器节点的数据转发层;
[0068] 数据区域确定模块,用于响应于所述待存储数据对应的存储卷为运行状态,确定所述待存储数据对应的数据区域;
[0069] 数据拆分模块,用于响应于所述待存储数据对应的所述数据区域为非单一数据区域,根据所述待存储数据对应的所述数据区域,对所述待存储数据进行数据拆分,得到多个待存储子数据;
[0070] 索引节点号确认模块,用于响应于所述待存储子数据为待转发子数据,根据每个所述待存储子数据对应的所述数据区域,确定每个所述待存储子数据对应的索引节点号;
[0071] 待存储子数据发送模块,用于将每个所述待存储子数据发送至目标控制器节点中,所述目标控制器节点是所述索引节点号对应的控制器节点。
[0072] 可选地,所述装置还包括:
[0073] 控制器节点添加模块,用于在所述控制器群组中添加多个所述控制器节点;
[0074] 控制器结对模块,用于通过循环镜像的方式,对多个所述控制器节点进行结对,得到多个控制器节点对;
[0075] 主控制器节点指定模块,用于在每个所述控制器节点对中指定一个所述控制器节点为主控制器节点。
[0076] 可选地,所述装置还包括:
[0077] 第一存储数据等待模块,用于响应于所述存储卷为非运行状态,将所述待存储数据放入等待队列中;
[0078] 存储数据状态变更模块,用于响应于所述存储卷由所述非运行状态变更为所述运行状态,确定所述待存储数据对应的所述数据区域。
[0079] 可选地,所述装置还包括:
[0080] 路径确认模块,用于响应于所述待存储数据对应的所述数据区域为单一数据区域,确定所述待存储数据对应的传输路径是否为快速路径;
[0081] 数据透传模块,用于当所述待存储数据对应的传输路径为快速路径时,将所述待存储数据直接传输至所述待存储数据对应的存储设备。
[0082] 可选地,所述装置还包括:
[0083] 存储卷运行状态确定模块,用于当所述存储数据对应的所述传输路径不是所述快速路径时,确定所述待存储数据对应的存储卷是否为非运行状态;
[0084] 第二存储数据等待模块,用于当所述存储卷为非运行状态时,将所述待存储数据放入等待队列中。
[0085] 可选地,所述装置还包括:
[0086] 地址确定模块,用于确定所述待存储数据对应的起始存储地址以及终止存储地址;
[0087] 数据区域判定模块,用于根据所述起始存储地址与所述终止存储地址,确定所述待存储数据对应的所述数据区域是否为单一数据区域。
[0088] 可选地,所述数据区域判定模块包括:
[0089] 地址对比子模块,用于将所述起始存储地址与所述终止存储地址与每个所述数据区域的预设起始地址和预设终止地址进行对比;
[0090] 单一数据区域确定子模块,用于当所述起始存储地址与所述终止存储地址位于同一个所述数据区域内时,确定所述待存储数据对应的所述数据区域为所述单一数据区域;
[0091] 非单一数据区域确定子模块,用于当所述起始存储地址与所述终止存储地址位于不同所述数据区域内时,确定所述待存储数据对应的所述数据区域为非单一数据区域。
[0092] 可选地,所述数据拆分模块包括:
[0093] 地址获取子模块,用于获取所述待存储数据对应的每个所述数据区域的起始地址以及终止地址;
[0094] 数据拆分子模块,用于根据所述起始地址以及所述终止地址,将所述待存储数据拆分至每个所述数据区域中。
[0095] 可选地,所述装置还包括:
[0096] 转发标志确定模块,用于确定所述待存储子数据对应的所述数据区域中是否存在转发标志;
[0097] 待转发数据确定模块,用于当所述待存储子数据对应的所述数据区域中存在所述转发标志时,确定所述待存储子数据为所述待转发子数据。
[0098] 可选地,所述索引节点号确定模块包括:
[0099] 节点位图集合获取子模块,用于获取所述数据区域对应的节点位图集合;
[0100] 索引节点号确定子模块,用于从所述节点位图集合中,将数值为1的节点号作为所述待存储子数据对应的所述索引节点号。
[0101] 可选地,所述装置还包括:
[0102] 转发状态确定模块,用于响应于所述控制器节点发生故障事件,确定所述待存储子数据是否开始进行转发;
[0103] 第一标记模块,用于当所述待存储子数据未开始进行转发时,将所述待存储子数据对应的所述目标控制器节点设置为故障状态;
[0104] 第二标记模块,用于在所述控制器节点对应的节点位图上添加转发失败标记;
[0105] 第一放入等待队列模块,用于将所述待存储子数据放入等待队列;
[0106] 第一重试模块,用于每隔一个预设时间段,对所述待存储子数据进行重试转发;
[0107] 第一失败标记删除模块,用于当所述待存储子数据正常转发时,删除所述转发失败标记。
[0108] 可选地,所述装置还包括:
[0109] 第三标记模块,用于在与所述待存储子数据同属于一个所述待存储数据的后续待存储子数据中,设置故障标记;
[0110] 第四标记模块,用于对所述控制器节点对应的所述节点位图添加所转发失败标记;
[0111] 第一状态设置模块,用于将所述后续待存储子数据的状态码设置为失败状态;
[0112] 第一故障标记清除模块,用于等待一个所述预设时间段后,清理所述故障标记;
[0113] 第二重试模块,用于将所述后续待存储子数据重新进行转发;
[0114] 第二失败标记删除模块,用于当所述后续待存储子数据正常转发时,清除所述转发失败标记。
[0115] 可选地,所述装置还包括:
[0116] 第五标记模块,用于当所述待存储子数据已经开始转发时,将所述待存储子数据对应的所述目标控制器节点设置为故障状态;
[0117] 第六标记模块,用于在所述控制器节点对应的节点位图上添加所述转发失败标记;
[0118] 第二状态设置模块,用于将所述待存储子数据的数据状态码设置为错误状态;
[0119] 第二放入等待队列模块将所述待存储子数据放入所述等待队列;
[0120] 第三重试模块,用于每隔一个预设时间段,对所述待存储子数据进行重试转发;
[0121] 第一转发失败确定模块,用于确定所述待存储子数据转发失败。
[0122] 可选地,所述方法还包括:
[0123] 第七标记模块,用于将与所述待存储子数据同属于一个所述待存储数据的后续待存储子数据的数据状态码设置为失败状态;
[0124] 第二转发失败确定模块,用于确定所述后续待存储子数据转发失败;
[0125] 转发流程结束模块,用于结束对所述后续待存储子数据的转发流程;
[0126] 第八标记模块,用于在所述后续待存储子数据对应的所述控制器节点对应的所述节点位图上添加所述转发失败标记。
[0127] 本申请实施例第三方面提供一种可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时,实现如本申请第一方面所述的方法中的步骤。
[0128] 本申请实施例第四方面提供一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述计算机程序时,实现本申请第一方面所述的方法的步骤。
[0129] 采用本申请提供的数据发送方法,将待存储数据发送至控制器群组中任意一个控制器节点的数据转发层;响应于所述待存储数据对应的存储卷为运行状态,确定所述待存储数据对应的数据区域;响应于所述待存储数据对应的所述数据区域为非单一数据区域,根据所述待存储数据对应的所述数据区域,对所述待存储数据进行数据拆分,得到多个待存储子数据;响应于所述待存储子数据为待转发子数据,根据每个所述待存储子数据对应的所述数据区域,确定每个所述待存储子数据对应的索引节点号;将每个所述待存储子数据发送至目标控制器节点中,所述目标控制器节点是所述索引节点号对应的控制器节点。
[0130] 本申请中,在对待存储数据进行处理时,预先设置了多个数据区域,首先将待存储数据发送至数据转发层,确定待存储数据对应的数据区域,当待存储数据对应的数据区域为非单一数据区域时,对该待存储数据进行数据拆分,将拆分得到的待存储子数据发送至该数据区域对应的控制器节点中,这样就实现了数据在控制器群组内部的节点之间的灵活转发,增强了对存储卷的处理性能,实现了控制器群组内的负载均衡,提升了数据处理的效率,节省了数据处理的时间。

附图说明

[0131] 为了更清楚地说明本申请实施例的技术方案,下面将对本申请实施例的描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
[0132] 图1是本申请一实施例提出的数据发送方法的流程图;
[0133] 图2是存储系统结构示意图;
[0134] 图3是本申请一实施例提出的数据转发流程示意图;
[0135] 图4是本申请一实施例提出的数据发送系统结构示意图;
[0136] 图5是本申请一实施例提出的数据发送流程示意图;
[0137] 图6是本申请一实施例提出的IO异常处理机制流程图;
[0138] 图7是本申请一实施例提出的数据转发装置的示意图;
[0139] 图8是本申请一实施例提出的数据发送设备的示意图。

具体实施方式

[0140] 下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有付出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
[0141] 参考图1,图1是本申请一实施例提出的数据发送方法的流程图。如图1所示,该方法包括以下步骤:
[0142] S11:将待存储数据发送至控制器群组中任意一个控制器节点的数据转发层。
[0143] 本实施例中,待存储数据是由存储系统的主机向下层发送的需要进行存储的数据,控制器群组是对上层下发的数据进行处理的控制器节点组成的去群组,数据转发层是控制器节点中的数据转发模块,可以与其他控制器节点之间进行数据的发送和接收。
[0144] 本实施例中,参考图2,图2是存储系统结构示意图,如图2所示,图中包括主机、控制器群组以及存储设备,主机将待存储数据发送至控制器群组中,再由控制器群组发送至存储设备中。
[0145] 本实施例中,当主机需要对待存储数据进行存储时,将待存储数据发送至控制器群组中的任意一个控制器节点中,具体发送到控制器节点中的数据转发层。
[0146] 示例地,数据转发。
[0147] S12:响应于所述待存储数据对应的存储卷为运行状态,确定所述待存储数据对应的数据区域。
[0148] 本实施例中,存储卷是多个节点之间的共享的数据存储空间。数据区域是将存储空间按照条带宽度划分出的多个子存储空间,每个数据区域都对应一个控制器节点。
[0149] 本实施例中,在待存储数据对应的存储卷为运行状态时,确定待存储数据对应的数据区域,根据待存储数据在存储空间中的起始地址和终止地址,可以确定该待存储空间数据对应的数据区域。待存储数据会带有对应的lun(存储卷号)、起始地址(startLba_i)以及终止地址(endLba_i)来标识待存储数据的信息。在获取到lun之后,可以查询待存储数据对应的存储卷的运行状态,还可以获取到待存储数据对应的数据区域的起始地址和终止地址。
[0150] S13:响应于所述待存储数据对应的所述数据区域为非单一数据区域,根据所述待存储数据对应的所述数据区域,对所述待存储数据进行数据拆分,得到多个待存储子数据。
[0151] 本实施例中,非单一数据区域代表待存储数据对应了多个数据区域,存储空间中按照条带宽度预先分为了多个数据区域,每个数据区域的地址是连续的,非单一数据区域的待存储数据,其数据的存储位置跨越了不同的数据区域。待存储子数据是对待存储数据进行拆分后得到的数据,待存储子数据都是单一数据区域存储的数据。
[0152] 本实施例中,当待存储数据为非单一数据区域时,需要对待存储数据进行拆分,根据待存储数据对应的数据区域,对待存储数据进行数据拆分,得到多个待存储子数据。
[0153] 本实施例中,响应于所述待存储数据对应的所述数据区域为非单一数据区域,根据所述待存储数据对应的所述数据区域,对所述待存储数据进行数据拆分,得到多个待存储子数据的具体步骤包括:
[0154] S13‑1:获取所述待存储数据对应的每个所述数据区域的起始地址以及终止地址。
[0155] 本实施例中,获取待存储数据对应的每个数据区域的起始地址以及终止地址。
[0156] S13‑2:根据所述起始地址以及所述终止地址,将所述待存储数据拆分至每个所述数据区域中。
[0157] 本实施例中,在获取到待存储数据对应的每个数据区域的起始地址以及终止地址之后,将待存储数据在存储空间中的起始地址以及终止地址和每个数据区域的起始地址以及终止地址进行对比,进而将待存储数据按照每个数据区域的起始地址和终止地址拆分进多个数据区域中。
[0158] 示例地,预先分了4个存储区域,存储区域1的起始地址为0,终止地址为5,存储区域2的起始地址为5,终止地址为10,存储区域3的起始地址为10,终止地址为15,存储区域4的起始地址为15,终止地址为20。待存储数据的起始地址为3,终止地址为18,则将待存储数据拆分为4个待存储子数据,其中待存储子数据1的起始地址为3,终止地址为5,待存储子数据2的起始地址为5,终止地址为10,待存储子数据3的起始地址为10,终止地址为15,待存储子数据的起始地址为15,终止地址为18。
[0159] S14:响应于所述待存储子数据为待转发子数据,根据每个所述待存储子数据对应的所述数据区域,确定每个所述待存储子数据对应的索引节点号。
[0160] 本实施例中,待转发子数据为不属于该节点处理的待存储子数据,待转发子数据需要转发至另外的控制器节点进行处理。索引节点号(nodeIndex)是控制器节点的编号,可以根据索引节点号确定对应的控制器。
[0161] 本实施例中,每个数据区域都对应有一个控制器节点进行数据处理,该控制器节点由索引节点号进行标识。当确定待存储子数据为待转发子数据之后,从该待存储子数据对应的数据区域的信息中,获取到该待存储子数据对应的索引节点号。
[0162] 本实施例中,响应于所述待存储子数据为待转发子数据,根据每个所述待存储子数据对应的所述数据区域,确定每个所述待存储子数据对应的索引节点号的具体步骤包括:
[0163] S14‑1:获取所述数据区域对应的节点位图集合。
[0164] 本实施例中,节点位图集合是将节点编号用位图的形式进行表示,并形成的集合。
[0165] 本实施例中,每个数据区域都对应一个节点位图集合,从主机可以获取到每个数据区域对应的节点位图集合。
[0166] 示例地,每个数据区域对应的节点位图集合的位数为32位。
[0167] S14‑2:从所述节点位图集合中,将数值为1的节点号作为所述待存储子数据对应的所述索引节点号。
[0168] 本实施例中,索引节点号是通过预先设置的索引节点号计算函数,根据节点路径、控制器群组中的镜像对的主节号、在线节点的节点号计算得到,计算的结果显示在节点位图集合中,通过1<
[0169] 本实施例中,节点位图集合中,有一个节点位图中的某一位为1,该节点位图表示的节点号,即该待存储子数据对应的索引节点号。
[0170] 示例地,某32位位图的第5位为1,其余位数为0,则该待存储子数据对应的索引节点号为00001……0,一共32位,该索引节点号实际对应的接节点编号为5号节点。
[0171] S15:将每个所述待存储子数据发送至目标控制器节点中,所述目标控制器节点是所述索引节点号对应的控制器节点。
[0172] 本实施例中,目标控制器节点就是索引节点号对应的控制器节点,也就是对待存储子数据进行处理的控制器节点。
[0173] 本实施例中,在确定了待存储子数据对应的索引节点号之后,通过转发模块,将待存储子数据发送至索引节点号对应的目标控制器节点中。
[0174] 示例地,一个待存储数据拆分为4个待存储子数据,待存储子数据1由当前节点处理,待存储子数据2‑3分别转发至控制器节点2‑3中。
[0175] 本实施例中,预先对数据区域进行了划分,对跨区域的大块数据按照预先划分的数据区域进行拆分,在将拆分后的数据转发至各个控制器节点进行处理,提高了数据处理的效率,降低了数据传输时的“长尾效应”。
[0176] 参考图3,图3是本申请一实施例提出的数据转发流程示意图,其中包括了4个数据区域数据区域0、数据区域1、数据区域2、数据区域3(region0‑region3),原IO为跨数据区域IO,拆分为子IO1以及子IO2,分别发送至控制器节点0(node0)以及node1控制器节点1(node1)。IO1和IO2是单一区域数据,将IO1发送至控制器节点2(node2),将IO2发送至node3控制器节点3(node3)。
[0177] 参考图4,图4是本申请一实施例提出的数据发送系统结构示意图,如图4所示,上层IO进行随机下发,再对数据进行跨区域判断以及数据拆分,再进行IO换发、IO下发、故障处理、对子IO进行并行处理,这些模块构成了一个完整的数据发送系统。
[0178] 在本申请的另一个实施例中,在将待存储数据发送至控制器群组中任意一个控制器节点的数据转发层之前,所述方法还包括:
[0179] S21:在所述控制器群组中添加多个所述控制器节点。
[0180] 原有的控制器群组中一般是双控制器节点。
[0181] 本实施例中,在原有的控制器群组中添加多个控制器节点。
[0182] S22:通过循环镜像的方式,对多个所述控制器节点进行结对,得到多个控制器节点对。
[0183] 本实施例中,通过循环镜像的方式,对控制器群组中的多个控制器节点进行结对,得到多个控制器节点。
[0184] 示例地,控制器群组中有4个控制器节点,控制器节点1与控制器节点2结对,控制器节点2与控制器节点3结对,控制器节点3与控制器节点4结对,控制器节点4余控制器节点1结对。
[0185] S23:在每个所述控制器节点对中指定一个所述控制器节点为主控制器节点。
[0186] 本实施例中,主控制器节点是控制器节点对中处理数据的主节点,另一个节点起到辅助作用。
[0187] 本实施例中,在每个控制器节点对中指定一个控制器节点作为主控制器节点。
[0188] 示例地,主控制器节点可以根据实际情况自行设置,可以设置控制器节点对中的奇数编号节点为主控制器节点。
[0189] 本实施例中,将原本的双控制器节点扩展为多控制器节点,不同节点之间通过循环镜像方式实现结对,从而保留了原本双控的耦合结构,同时能够提高控制器节点对运行业务的高效并发性,基于这一基础架构,本实施例提出了单卷多控负载均衡架构,即一个存储卷的数据可以由多个控制器节点并行处理,使得上层下发的数据可以在多控制器节点之间负载均衡。
[0190] 在本申请的另一个实施例中,所述方法还包括:
[0191] S31:响应于所述存储卷为非运行状态,将所述待存储数据放入等待队列中。
[0192] 本实施例中,等待队列是待处理任务等待进行处理的队列。
[0193] 本实施例中,存储卷为非运行状态时,无法接收或发送数据,因此无法对待存储数据进行存储,此时将待存储数据放入等待队列中,等待存储卷原型之后再进行处理。
[0194] S32:响应于所述存储卷由所述非运行状态变更为所述运行状态,确定所述待存储数据对应的所述数据区域。
[0195] 本实施例中,当存储卷由非运行状态变更为运行状态时,确定待存储数据对应的数据区域。
[0196] 在本申请的另个一实施例中,所述方法还包括:
[0197] S41:响应于所述待存储数据对应的所述数据区域为单一数据区域,确定所述待存储数据对应的传输路径是否为快速路径。
[0198] 本实施例中,快速路径(fastpath)是不需要进行分析处理的数据包快速传递的路径,通过快速路径,可以将数据包直接发送至目标存储设备,不经过控制器节点。
[0199] 本实施例中,当待存储数据对应的数据区域为单一数据区域时,说明待存储数据的起始存储地址以及终止存储地址都落在了同一个数据区域内,此时根据该待存储数据的数据信息,确定该待存储数据对应的路径是否为快速路径。
[0200] S42:当所述待存储数据对应的传输路径为快速路径时,将所述待存储数据直接传输至所述待存储数据对应的存储设备。
[0201] 本实施例中,当待存储数据对应的传输路径为快速路径时,将待存储数据通过快速路径直接进行透传,传输至对应的存储设备。
[0202] 在本申请的另个一实施例中,所述方法还包括:
[0203] S43:当所述存储数据对应的所述传输路径不是所述快速路径时,确定所述待存储数据对应的存储卷是否为非运行状态。
[0204] S44:当所述存储卷为非运行状态时,将所述待存储数据放入等待队列中。
[0205] 本实施例中,在确定了待存储数据对对应的数据区域为单一数据区域,且当存储数据对应的传输路径不是快速路径时,再次确认存储数据对应的存储卷是否为非运行状态。当存储卷为非运行状态时,该存储卷无法接收或者发送数据,此时将待存储数据放入等待队列中。
[0206] 在本申请的另一个实施例中,在根据所述待存储数据对应的所述数据区域,对所述待存储数据进行数据拆分,得到多个待存储子数据之前,所述方法还包括:
[0207] S51:确定所述待存储数据对应的起始存储地址以及终止存储地址。
[0208] 本实施例中,待存储数据对应的起始存储地址为待存储数据在存储空间中的起始地址,终止存储地址为待存储数据在存储空间中的终止地址。
[0209] 本实施例中,在根据待存储数据对应的数据区域对待存储数据进行拆分之前,首先确定待存储数据对应的起始存储地址以及终止存储地址。
[0210] S52:根据所述起始存储地址与所述终止存储地址,确定所述待存储数据对应的所述数据区域是否为单一数据区域。
[0211] 本实施例中,根据起始存储地址与终止存储地址,确定待存储数据对应的数据区域是否为单一数据区域。
[0212] 本实施例中,所述根据所述起始存储地址与所述终止存储地址,确定所述待存储数据对应的所述数据区域是否为单一数据区域的具体步骤包括:
[0213] S52‑1:将所述起始存储地址与所述终止存储地址与每个所述数据区域的预设起始地址和预设终止地址进行对比。
[0214] 本实施例中,每个数据区域都有对应的预设起始地址与预设终止地址,将待存储数据的起始存储地址与每个数据区域的预设起始地址进行对比,将待存储数据的终止存储区地址与每个数据区域的预设终止地址进行对比。
[0215] S52‑2:当所述起始存储地址与所述终止存储地址位于同一个所述数据区域内时,确定所述待存储数据对应的所述数据区域为所述单一数据区域。
[0216] 本实施例中,当待存储数据的起始存储地址与终止存储地址位于同一个数据区域内时,确定待存储数据对应的数据区域是单一数据区域。
[0217] 示例地,待存储数据的起始存储地址为2,终止存储地址为5,某个数据区域的起始地址为0,终止地址为5,该待存储数据的起始存储地址与终止存储地址都落在了该数据区域内,则该待存储数据对应的数据区域为单一数据区域。
[0218] S52‑3:当所述起始存储地址与所述终止存储地址位于不同所述数据区域内时,确定所述待存储数据对应的所述数据区域为非单一数据区域。
[0219] 本实施例中,当待存储数据的起始存储地址与终止存储地址位于不同的数据区域内时,确定待存储数据对应的数据区域为非单一数据区域。
[0220] 示例地,当待存储数据的起始存储地址为2,终止存储地址为8,某个数据区域的起始地址为0,终止地址为5时,待存储数据的起始存储数据在该数据区域内,终止存储地址不在该数据区域内,则该待存储数据至少对应有两个数据区域,确定该待存储数据对应的数据区域为非单一数据区域。
[0221] 在判断待存储数据的数据区域是否为单一数据区域时,用到的判断语句如下:
[0222] if(startSeg != endSeg) retrun true;
[0223] startSeg = startLba_i/REGION_LBA_SIZE;
[0224] endSeg = endLba_i/REGION_LBA_SIZE;
[0225] 其中,当startSeg不等于endSeg时,确定该待存储数据对应的数据区域为非单一数据区域。
[0226] 在本申请的另一个实施例中,在根据每个所述待存储子数据对应的所述数据区域,确定每个所述待存储子数据对应的索引节点号之前,所述方法还包括:
[0227] S61:确定所述待存储子数据对应的所述数据区域中是否存在转发标志。
[0228] 本实施例中,转发标志存在于待存储子数据对应的数据区域中。
[0229] S62:当所述待存储子数据对应的所述数据区域中存在所述转发标志时,确定所述待存储子数据为所述待转发子数据。
[0230] 本实施例中,当待存储子数据对应的数据区域中存在带有FORWARD(转发标志位)的flag标记,就表示该待存储子数据需要转发到其他节点进行处理,当不存在转发标志时,就通过submit down(下层转发),直接交由本节点的下层进行处理。
[0231] 参考图5,图5是本申请一实施例提出的数据发送流程示意图,图中首先由数据转发层接收数据,检测卷是否在线,当卷在线时判断IO是否块区域,当IO块区域时,进行数据拆分,处理子IO,当IO不是跨区域数据时,判断IO是否需要进行直接转发,再看卷是否离线,确认卷在线之后,再确定当前节点上的IO是否需要转发,当IO不需要转发时,直接从当前节点处理后下发,当IO需要转发时,获取转发到节点的索引节点号(nodeindex),当索引节点码无效时或者节点不在线时,将IO放入等待队列中,当索引节点码有效且节点在线时,进行IO数据的转发。
[0232] 在本申请的另一个实施例中,所述方法还包括:
[0233] S71:响应于所述控制器节点发生故障事件,确定所述待存储子数据是否开始进行转发。
[0234] 本实施例中,参考图6,图6是本申请一实施例提出的IO异常处理机制流程图,如图6所示,当待存储数据所在的节点发生故障事件时,确定待存储子数据是否已经开始进行转发(transfer)。
[0235] S72:当所述待存储子数据未开始进行转发时,将所述待存储子数据对应的所述目标控制器节点设置为故障状态。
[0236] 本实施例中,当待存储子数据未开始进行转发时,将待存储子数据对应的目标控制器节点设置为故障状态(pend)。
[0237] S73:在所述控制器节点对应的节点位图上添加转发失败标记。
[0238] 本实施例中,在该控制器节点对应的节点位图上添加转发失败标记,转发失败标记用于标志该节点最近一次的数据转发失败。
[0239] S74:将所述待存储子数据放入等待队列。
[0240] 本实施例中,将待存储子数据放入等待队列中,等待重新进行转发。
[0241] S75:每隔一个预设时间段,对所述待存储子数据进行重试转发。
[0242] 本实施例中,每隔一个预设时间段,对待存储子数据进行重试转发,预设时间段可以自行设置。
[0243] S76:当所述待存储子数据正常转发时,删除所述转发失败标记。
[0244] 本实施例中,当待存储子数据正常转发时,删除转发失败标记,即清除该IO失败子位图。
[0245] 在本申请另一个实施例中,所述方法还包括:
[0246] S81:在与所述待存储子数据同属于一个所述待存储数据的后续待存储子数据中,设置故障标记。
[0247] 本实施例中,当第一个待存储子数据对应的节点出现故障事件时,同属于一个待存储数据的后续待存储子数据也会进行故障处理,如图6所示,在后续子IO,即后续待存储子数据中设置故障标记(特殊IO标记),该故障标记用于使后续待存储子数据执行失败处理流程后再进行数据转发,以保证目标控制器节点确定当前控制器节点出现故障。
[0248] S82:对所述控制器节点对应的所述节点位图添加所转发失败标记。
[0249] 本实施例中,在控制器节点对应的节点位图中添加转发失败标记。
[0250] S83:将所述后续待存储子数据的状态码设置为失败状态。
[0251] 本实施例中,将后续待存储子数据的状态码设置为失败状态,状态码用于标记数据的状态,标记为失败状态的数据需要进行重试转发。
[0252] S84:等待一个所述预设时间段后,清理所述故障标记。
[0253] 本实施例中,等待一个预设时间段,清理待存储子数据的故障标记,准备进行重试转发。
[0254] S85:将所述后续待存储子数据重新进行转发。
[0255] 本实施例中,将后续待存储子数据重新进行转发。
[0256] S86:当所述后续待存储子数据正常转发时,清除所述转发失败标记。
[0257] 本实施例中,当后续待存储子数据正常转发时,清除转发失败标记。
[0258] 在本申请的另一个实施例中,所述方法还包括:
[0259] S91:当所述待存储子数据已经开始转发时,将所述待存储子数据对应的所述目标控制器节点设置为故障状态。
[0260] 本实施例中,如图6所示,当待存储子数据已经开始转发时,将待存储子数据对应的目标控制器节点设置为故障状态,以终止数据的转发。
[0261] S92:在所述控制器节点对应的节点位图上添加所述转发失败标记。
[0262] 本实施例中,在该控制器节点对应的节点位图上添加转发失败标记。
[0263] S93:将所述待存储子数据的数据状态码设置为错误状态(DROP)。
[0264] 本实施例中,将所述存储子数据的数据状态码设置为错误状态,对于错误状态的数据,确定该存储子数据的转发失败。
[0265] S94:将所述待存储子数据放入所述等待队列。
[0266] 本实施例中,将待存储子数据放入等待队列中。
[0267] S95:每隔一个预设时间段,对所述待存储子数据进行重试转发。
[0268] 本实施例中,每隔一个预设时间段,对待存储子数据进行重试转发,但是由于该待存储子数据已经标记为错误状态,因此重试转发也不会成功。
[0269] S96:确定所述待存储子数据转发失败。
[0270] 本实施例中,当重试转发还不成功时,确定待存储子数据转发失败。
[0271] 在本申请的另一个实施例中,所述方法还包括:
[0272] S101:将与所述待存储子数据同属于一个所述待存储数据的后续待存储子数据的数据状态码设置为失败状态。
[0273] 本实施例中,如图6所示,当IO已将开始转发时,对待存储子数据的后续待存储的数据状态码设置为失败状态(FALLED)。
[0274] S102:确定所述后续待存储子数据转发失败。
[0275] 本实施例中,当后续待存储子数据的状态码设置为失败状态后,确定后续待存储子数据的转发为失败状态。
[0276] S103:结束对所述后续待存储子数据的转发流程。
[0277] 本实施例中,当后续待存储子数据的转发为失败状态后,结束对后续待存储子数据的转发流程。
[0278] S104:在所述后续待存储子数据对应的所述控制器节点对应的所述节点位图上添加所述转发失败标记。
[0279] 本实施例中,在后续待存储子数据对应的控制器节点对应的节点位图上添加转发失败标记。
[0280] 本实施例中,当待存储子数据已经开始转发时,需要停止转发流程,并且将当前的待存储子数据以及后续待存储子数据都标记为转发失败的状态,并且不再进行转发,直至完成整个流程之后,再从头开始执行转发流程,保证数据的完整性。
[0281] 本实施例中,对于节点故障,适配了相应的故障处理和重试机制,对于转发失败的数据进行失败标志,并通过resume函数发起重试流程,设置了对跨数据区域拆分数据的故障处理机制,保证前后子IO(待存储子数据)在发生节点故障事件时还能够按照正确的逻辑进行处理,如图3所示,针对已经开始转发的IO,设置其状态码为DROP(错误状态),后续子IO也进行失败处理。对于未开始转发的IO,都需要做重试处理,其中当前子IO放入重试队列等待重试,后续子IO通过子IO失败位图标记、特殊IO标记机制,进行一次失败处理后再重试正常的处理流程。
[0282] 本实施例中,将原本的双控制节点扩展为多控制节点群组,实现了对嗲存储数据下分的拆分、转发,对于转发节点的选择依赖与不同数据区域的归属节点,从而实现多个控制器节点的负载均衡,对待存储数据拆分后可以并行处理,并且提出了发生故障时的解决方法,保证了数据发送的正确性,提升了数据的处理效率。
[0283] 基于同一发明构思,本申请一实施例提供一种数据转发装置。参考图7,图7是本申请一实施例提出的数据转发装置700的示意图。如图7所示,该装置包括:
[0284] 待存储数据发送模块701,用于将待存储数据发送至控制器群组中任意一个控制器节点的数据转发层;
[0285] 数据区域确定模块702,用于响应于所述待存储数据对应的存储卷为运行状态,确定所述待存储数据对应的数据区域;
[0286] 数据拆分模块703,用于响应于所述待存储数据对应的所述数据区域为非单一数据区域,根据所述待存储数据对应的所述数据区域,对所述待存储数据进行数据拆分,得到多个待存储子数据;
[0287] 索引节点号确认模块704,用于响应于所述待存储子数据为待转发子数据,根据每个所述待存储子数据对应的所述数据区域,确定每个所述待存储子数据对应的索引节点号;
[0288] 待存储子数据发送模块705,用于将每个所述待存储子数据发送至目标控制器节点中,所述目标控制器节点是所述索引节点号对应的控制器节点。
[0289] 作为本申请的一个实施例,所述装置还包括:
[0290] 控制器节点添加模块,用于在所述控制器群组中添加多个所述控制器节点;
[0291] 控制器结对模块,用于通过循环镜像的方式,对多个所述控制器节点进行结对,得到多个控制器节点对;
[0292] 主控制器节点指定模块,用于在每个所述控制器节点对中指定一个所述控制器节点为主控制器节点。
[0293] 作为本申请的一个实施例,所述装置还包括:
[0294] 第一存储数据等待模块,用于响应于所述存储卷为非运行状态,将所述待存储数据放入等待队列中;
[0295] 存储数据状态变更模块,用于响应于所述存储卷由所述非运行状态变更为所述运行状态,确定所述待存储数据对应的所述数据区域。
[0296] 作为本申请的一个实施例,所述装置还包括:
[0297] 路径确认模块,用于响应于所述待存储数据对应的所述数据区域为单一数据区域,确定所述待存储数据对应的传输路径是否为快速路径;
[0298] 数据透传模块,用于当所述待存储数据对应的传输路径为快速路径时,将所述待存储数据直接传输至所述待存储数据对应的存储设备。
[0299] 作为本申请的一个实施例,所述装置还包括:
[0300] 存储卷运行状态确定模块,用于当所述存储数据对应的所述传输路径不是所述快速路径时,确定所述待存储数据对应的存储卷是否为非运行状态;
[0301] 第二存储数据等待模块,用于当所述存储卷为非运行状态时,将所述待存储数据放入等待队列中。
[0302] 作为本申请的一个实施例,所述装置还包括:
[0303] 地址确定模块,用于确定所述待存储数据对应的起始存储地址以及终止存储地址;
[0304] 数据区域判定模块,用于根据所述起始存储地址与所述终止存储地址,确定所述待存储数据对应的所述数据区域是否为单一数据区域。
[0305] 作为本申请的一个实施例地,所述数据区域判定模块包括:
[0306] 地址对比子模块,用于将所述起始存储地址与所述终止存储地址与每个所述数据区域的预设起始地址和预设终止地址进行对比;
[0307] 单一数据区域确定子模块,用于当所述起始存储地址与所述终止存储地址位于同一个所述数据区域内时,确定所述待存储数据对应的所述数据区域为所述单一数据区域;
[0308] 非单一数据区域确定子模块,用于当所述起始存储地址与所述终止存储地址位于不同所述数据区域内时,确定所述待存储数据对应的所述数据区域为非单一数据区域。
[0309] 作为本申请的一个实施例,所述数据拆分模块包括:
[0310] 地址获取子模块,用于获取所述待存储数据对应的每个所述数据区域的起始地址以及终止地址;
[0311] 数据拆分子模块,用于根据所述起始地址以及所述终止地址,将所述待存储数据拆分至每个所述数据区域中。
[0312] 作为本申请的一个实施例,所述装置还包括:
[0313] 转发标志确定模块,用于确定所述待存储子数据对应的所述数据区域中是否存在转发标志;
[0314] 待转发数据确定模块,用于当所述待存储子数据对应的所述数据区域中存在所述转发标志时,确定所述待存储子数据为所述待转发子数据。
[0315] 可选地,所述索引节点号确定模块包括:
[0316] 节点位图集合获取子模块,用于获取所述数据区域对应的节点位图集合;
[0317] 索引节点号确定子模块,用于从所述节点位图集合中,将数值为1的节点号作为所述待存储子数据对应的所述索引节点号。
[0318] 作为本申请的一个实施例,所述装置还包括:
[0319] 转发状态确定模块,用于响应于所述控制器节点发生故障事件,确定所述待存储子数据是否开始进行转发;
[0320] 第一标记模块,用于当所述待存储子数据未开始进行转发时,将所述待存储子数据对应的所述目标控制器节点设置为故障状态;
[0321] 第二标记模块,用于在所述控制器节点对应的节点位图上添加转发失败标记;
[0322] 第一放入等待队列模块,用于将所述待存储子数据放入等待队列;
[0323] 第一重试模块,用于每隔一个预设时间段,对所述待存储子数据进行重试转发;
[0324] 第一失败标记删除模块,用于当所述待存储子数据正常转发时,删除所述转发失败标记。
[0325] 作为本申请的一个实施例,所述装置还包括:
[0326] 第三标记模块,用于在与所述待存储子数据同属于一个所述待存储数据的后续待存储子数据中,设置故障标记;
[0327] 第四标记模块,用于对所述控制器节点对应的所述节点位图添加所转发失败标记;
[0328] 第一状态设置模块,用于将所述后续待存储子数据的状态码设置为失败状态;
[0329] 第一故障标记清除模块,用于等待一个所述预设时间段后,清理所述故障标记;
[0330] 第二重试模块,用于将所述后续待存储子数据重新进行转发;
[0331] 第二失败标记删除模块,用于当所述后续待存储子数据正常转发时,清除所述转发失败标记。
[0332] 作为本申请的一个实施例,所述装置还包括:
[0333] 第五标记模块,用于当所述待存储子数据已经开始转发时,将所述待存储子数据对应的所述目标控制器节点设置为故障状态;
[0334] 第六标记模块,用于在所述控制器节点对应的节点位图上添加所述转发失败标记;
[0335] 第二状态设置模块,用于将所述待存储子数据的数据状态码设置为错误状态;
[0336] 第二放入等待队列模块将所述待存储子数据放入所述等待队列;
[0337] 第三重试模块,用于每隔一个预设时间段,对所述待存储子数据进行重试转发;
[0338] 第一转发失败确定模块,用于确定所述待存储子数据转发失败。
[0339] 作为本申请的一个实施例,所述方法还包括:
[0340] 第七标记模块,用于将与所述待存储子数据同属于一个所述待存储数据的后续待存储子数据的数据状态码设置为失败状态;
[0341] 第二转发失败确定模块,用于确定所述后续待存储子数据转发失败;
[0342] 转发流程结束模块,用于结束对所述后续待存储子数据的转发流程;
[0343] 第八标记模块,用于在所述后续待存储子数据对应的所述控制器节点对应的所述节点位图上添加所述转发失败标记。
[0344] 基于同一发明构思,本申请另一实施例提供一种可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现如本申请上述任一实施例所述的数据发送方法中的步骤。
[0345] 基于同一发明构思,本申请另一实施例提供一种电子设备,参考图8,图8是本申请一实施例提出的数据发送设备800的示意图,包括存储器801、处理器802及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行时实现本申请上述任一实施例所述的数据发送方法中的步骤。
[0346] 对于装置实施例而言,由于其与方法实施例基本相似,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
[0347] 本说明书中的各个实施例均采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似的部分互相参见即可。
[0348] 本领域内的技术人员应明白,本申请实施例可提供为方法、装置、或计算机程序产品。因此,本申请实施例可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本申请实施例可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD‑ROM、光学存储器等)上实施的计算机程序产品的形式。
[0349] 本申请实施例是参照根据本申请实施例的方法、终端设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理终端设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理终端设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
[0350] 这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理终端设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
[0351] 这些计算机程序指令也可装载到计算机或其他可编程数据处理终端设备上,使得在计算机或其他可编程终端设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程终端设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
[0352] 尽管已描述了本申请实施例的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例做出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本申请实施例范围的所有变更和修改。
[0353] 最后,还需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者终端设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者终端设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者终端设备中还存在另外的相同要素。
[0354] 以上对本申请所提供的数据发送方法、装置、设备及存储介质,进行了详细介绍,本文中应用了具体个例对本申请的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本申请的方法及其核心思想;同时,对于本领域的一般技术人员,依据本申请的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本申请的限制。