在本地对象存储节点中同步对象的方法及装置的制造方法_2

文档序号:9791679阅读:来源:国知局
中的同步状态将包括多个第一状态标志以分别指示是否执行了对象从当前对象存储节点到多个其它对象存储节点的每一个的同步,并包括多个第二状态标志以分别指示是否执行了对象从多个其它对象存储节点的每一个到当前对象存储节点的同步。
[0033]在当前对象存储节点具有多个对象的情况下,针对每一个对象,可存在对应的一个或多个其它对象存储节点。因此,在针对某个对象而存在一个其它对象存储节点的情况下,当前对象存储节点的关于该对象的状态记录中的同步状态将包括一个第一状态标志以指示是否执行了该对象从当前对象存储节点到该一个其它对象存储节点的同步和一个第二状态标志以指示是否执行了该对象从该一个其它对象存储节点到当前对象存储节点的同步。在多个其它对象存储节点的情况下,当前对象存储节点的关于该对象的状态记录中的同步状态将包括多个第一状态标志以分别指示是否执行了该对象从当前对象存储节点到多个其它对象存储节点的每一个的同步,并包括多个第二状态标志以分别指示是否执行了该对象从多个其它对象存储节点的每一个到当前对象存储节点的同步。
[0034]在以下的实施例中,为了便于说明,将在本地对象存储节点和一个远程对象存储节点存储了一个相同的对象的情形下对本实施例的方法进行描述。
[0035]如图2所示,在步骤S210,获取本地对象存储节点中对象的最新的状态记录,作为该对象的本地状态记录。如前所述,对象的状态记录存储了与改变对象的操作有关的信息。对于本地对象存储节点来说,当前对象存储节点是本地对象存储节点,其它对象存储节点是远程对象存储节点。因此,对象的状态记录中同步状态的第一状态标志指示是否执行了对象从本地对象存储节点到远程对象存储节点的同步(以下简称为“本地到远程同步”),第二状态标志指示是否执行了对象从远程对象存储节点到本地对象存储节点的同步(以下简称为“远程到本地同步”)。当发生了改变该对象的操作时,例如创建对象、删除对象等,将生成与该操作相应的状态记录。在所生成的状态记录中,记录了对象的名称、操作的名称、操作的时间戳,并且同步状态的第一状态标志和第二状态标志都被设置为指示未执行同步。假定第一状态标志被表不为L — R,第二状态标志被表TK为R — L,其中,L代表本地对象存储节点,R代表远程对象存储节点,则在本地对象存储节点中,对象的状态记录中的同步状态可被表不为L(L — R, R — L) = (O, O)。
[0036]由于对改变对象的每一个操作都生成了状态记录,因此,对象的当前状态可由最新的状态记录反映。这样,为了检查对象的多个复本(在本实施例中是两个)之间是否存在不一致,可以仅考虑对象在本地对象存储节点中的最新的状态记录和在远程对象存储节点中的最新的状态记录。
[0037]在该步骤中,可以根据状态记录中的时间戳,确定最新的状态记录。在一个实施例中,响应于启动对象的同步,选择对象的时间戳先于启动时间的至少一个状态记录。对象的同步可以周期性地执行或者由特定的操作触发。因此,启动时间可以容易地确定。然后,在所选择的至少一个状态记录中确定时间戳最大的状态记录,作为最新的状态记录。进一步地,可以将至少一个状态记录中剩余的状态记录从内存中删除。这样,该最新的状态记录成为对象的本地状态记录。
[0038]在另一个实施例中,可以响应于启动对象的同步,选择对象的时间戳先于启动时间减去预定时间后的时间的至少一个状态记录。这样,可以避免处理正在被操作的对象。预定时间例如是60秒。然后,确定时间戳最大的状态记录,作为最新的状态记录。然后,可将至少一个状态记录中剩余的状态记录从内存中删除。
[0039]通过步骤S210获得的对象的本地状态记录可以反映直到启动对象的同步为止的对象的最新状态。
[0040]接着,在步骤S220,获取远程对象存储节点中对象的最新的状态记录,作为对象的远程状态记录。如前所述,在每个存储了相同对象的对象存储节点中都存储了该对象的状态记录。因此,存储了与本地对象存储节点相同的对象的远程对象存储节点也在每次发生与对象有关的操作时,生成该对象的状态记录。在远程对象存储节点中,对象的状态记录中的同步状态可被表不为R(R — L, L — R)。
[0041]在该步骤S220中,首先向远程对象存储节点发送请求,该请求包括对象的名称和启动时间。响应于所接收的请求,远程对象存储节点可使用与步骤S210中的获取最新的状态记录类似的方法获取远程对象存储节点中对象的最新的状态记录。具体地,远程对象存储节点可根据对象的名称和启动时间,从所存储的该对象的状态记录中获取时间戳先于启动时间或者启动时间减去预定时间后的时间的至少一个状态记录。然后远程对象存储节点确定其中时间戳最大的状态记录,作为远程对象存储节点中该对象的最新的状态记录,并删除至少一个状态记录中剩余的状态记录。然后,远程对象存储节点将所确定的最新的状态记录作为对象的远程状态记录发送到本地对象存储节点。相应地,本地对象存储节点接收到来自远程对象存储节点的对象的远程状态记录。
[0042]虽然以上按照步骤S210、S220的顺序描述了获取对象的本地状态记录和远程状态记录,但本领域技术人员能够知道,步骤S210和步骤S220并没有明显的先后顺序,也可以按照与上述的顺序相反的顺序执行或者同时执行。
[0043]然后,在步骤S230,基于在步骤S210中获取的对象的本地状态记录和在步骤S220中获取的对象的远程状态记录,在本地对象存储节点中执行对象的同步。在本实施例中,在本地对象存储节点中只能执行对象的本地到远程同步,而不能执行对象的远程到本地同步。对象的远程到本地同步在远程对象存储节点中执行。在本地对象存储节点中,可以将本地状态记录中针对对象的操作复制到不具有远程状态记录或者远程状态记录比本地状态记录旧的远程对象存储节点。
[0044]图3示出了根据实施例的执行对象的同步的过程(步骤S230)的示意性流程图。如图3所示,在步骤S310,检查本地状态记录中的第一状态标志L(L — R)。如果检查为本地状态记录中的第一状态标志指示未执行本地到远程同步,例如,第一状态标志为“O”或“假”,则在步骤S320,执行对象的本地到远程同步。如果检查为本地状态记录中的第一状态标志指示已执行本地到远程同步,例如,第一状态标志为“ I”或“真”,则在步骤S330,将本地状态记录中的第二状态标志设置为与远程状态记录中的第一状态标志相同。此时,本地状态记录中的同步状态可被表示为L(L — R, R — L) = (1,R(R —L))。或者,如果通过步骤S220未获取到对象的远程状态记录,则可以在步骤S330,将本地状态记录中的第二状态标志设置为已执行远程到本地同步。在这种情况下,本地状态记录中的同步状态被表示为L(L — R,R — L) = (I, I)。
[0045]在本实施例中,对象的本地到远程同步的过程可根据是否获取到对象的远程状态记录而被划分为两个子过程,分别如图4和图5所7K。
[0046]图4示出了说明在通过步骤S220获取到对象的远程状态记录时执行对象的本地到远程同步的过程(第一子过程)的示意性流程图。如图4所示,在步骤S401,响应于获取到远程状态记录(即,远程对象存储节点生成并存储了对象的状态记录),比较本地状态记录中的时间戳与远程状态记录中的时间戳。如前所述,时间戳表明改变对象的操作的发生时间,因此,通过比较时间戳,可以确定直到启动时间为止在本地对象存储节点和远程对象存储节点中的对象的操作是否一致。接着,响应于比较的结果,执行相应的对象同步过程。
[0047]如果比较的结果为本地状态记录中的时间戳晚于远程状态记录中的时间戳,表明本地状态记录比远程状态记录新,则在步骤S405,将本地状态记录中所记录的操作复制到远程对象存储节点,以使得能够在远程对象存储节点中执行该操作。然后,在步骤S410,将本地状态记录中的第一状态标志设置为指示已执行本地到远程同步。第一状态标志可以被表示为L — R = I。在这种情况下,本地状态记录中的第二状态标志可维持不变。
[0048]此外,在将操作复制到远程对象存储节点之后,除了设置本地状态记录中的第一状态标志以外,还可以将本地状态记录中的第二状态标志设置为指示已执行远程到本地同步,并向远程对象存储节点通知对象是复制的。此时,本地状态记录中的同步状态可被表示为L(L —R,R—L) = (I, I) ο这样,远程对象存储节点能够根据该通知而直接将远程状态记录中的第一状态标志和第二状态标志分别设置为指示已执行远程到本地同步和指示已执行本地到远程同步。
[0049]如果比较的结果为本地状态记录中的时间戳与远程状态记录中的时间戳相同,即,本地状态记录与远程状态记录相同,则在步骤S415,将本地状态记录中的第一状态标志设置为指示已执行本地到远程同步,并在步骤S420,将本地状态记录中的第二状态标志设置为与远程状态记录中的第一状态标志相同。此时,本地状态记录中的同步状态可被表示为 L(L —R,R—L) = (1,R(R—L))。
[0050]如果比较的结果为本地状态记录的时间戳先于远程状态记录中的时间戳,表明本地状态记录比远程状态记录旧,则在步骤S425,删除本地状态记录。
[0051]通过上述的同步过程可以看出,本地对象存储节点只能设置或修改自己的本地状态记录的同步状态,而不能设置或修改远程对象存储节点中的状态记录的同步状态。
[0052]图5示出了说明在通过步骤S220未获取到对象的远程状态记录时执行对象的同步的过程(第二子过程)的示意性流程图。
[0053]如图5所示,在步骤S501,响应于未获取到对象的远程状态记录(即,远程对象存储节点没有生成/存储对象的状态记录),将本地状态记录中所记录的对象的操作从本地对象存储节点复制到远程对象存储节点,以使得能够在远程对象存储节点中执行该操作。然后,在步骤S505,将本地状态记录中的第一状态标志设置为指示已执行本地到远程同步,并在步骤S510,将本地状态记录中的第二状态标志设置为指示已执行远程到本地同步。此时,本地状态记录的同步状态可被表示为L(L —R,R—L) = (I, 1)0然后,在步骤S515,向远程对象存储节点通知对象是复制的。远程对象存储节点根据该通知,可直接将远程状态记录中的第一状态标志和第二状态标志分别设置为指示已执行远程到本地同步和指示已执行本地到远程同步。
[0054]进一步地,在执行对象的同步的期间,如果本地状态记录中的第一状态标志被设置为指示已执行本地到远程同步且第二状态标志被设置为指示已执行远程到本地同步,即L(L-R1R-L) = (1,I),表明对象的同步已完成,则删除本地状态记录。
[0055]此外,在执行对象的同步的期间,还可以检查本地状态记录中的第二状态标
当前第2页1 2 3 4 5 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1