详细描述
示例性操作环境
图1示出了其中可实现此处所描述的主题的各方面的合适的计算系统环境100的一个示例。计算系统环境100仅为合适的计算环境的一个示例,并非对本发明的使用范围或功能提出任何局限。也不应将计算环境100解释为对示例性操作环境100中示出的任一组件或其组合具有任何依赖或需求。
此处所描述的本主题的各方面可以使用众多其它通用或专用计算系统环境或配置来操作。适用于本发明的众所周知的计算系统、环境和/或配置的例子包括但不限于,个人计算机、服务器计算机、手持式或膝上型设备、多处理器系统、基于微处理器的系统、机顶盒、可编程消费电子产品、网络PC、小型机、大型计算机、包括任一上述系统或设备的分布式计算环境等等。
此处所描述的本主题的各方面可以在诸如由计算机执行的程序模块等计算机可执行指令的一般上下文环境中描述。一般而言,程序模块包括例程、程序、对象、组件、数据结构等等,它们执行特定的任务或实现特定的抽象数据类型。此处所描述的本主题的各方面也可以在分布式计算环境中实现,其中任务由通过通信网络链接的远程处理设备来执行。在分布式计算环境中,程序模块可以位于包括存储器存储设备的本地和远程计算机存储介质中。
参考图1,用于实现此处所描述的本主题的各方面的示例系统包括计算机110形式的通用计算设备。计算机110的组件可包括,但不限于,处理单元120、系统存储器130以及将包括系统存储器的各类系统组件耦合至处理单元120的系统总线121。系统总线121可以是若干种总线结构类型的任一种,包括存储器总线或存储器控制器、外围总线以及使用各类总线体系结构的任一种的局部总线。作为示例而非局限,这类体系结构包括工业标准体系结构(ISA)总线、微通道体系结构(MCA)总线、增强型ISA(EISA)总线、视频电子技术标准协会(VESA)局部总线以及外围部件互连(PCI)总线(也称为小背板(Mezzanine)总线)。
计算机110通常包括各种计算机可读介质。计算机可读介质可以是可由计算机110访问的任一可用介质,包括易失性和非易失性介质、可移动和不可移动介质。作为示例而非局限,计算机可读介质包括计算机存储介质和通信介质。计算机存储介质包括以用于储存诸如计算机可读指令、数据结构、程序模块或其它数据等信息的任一方法或技术实现的易失性和非易失性,可移动和不可移动介质。计算机存储介质包括但不限于,RAM、ROM、EEPROM、闪存或其它存储器技术、CD-ROM、数字多功能盘(DVD)或其它光盘存储、磁盒、磁带、磁盘存储或其它磁存储设备、或可以用来储存所期望的信息并可由计算机110访问的任一其它介质。通信介质通常以诸如载波或其它传输装置等已调制数据信号来体现计算机可读指令、数据结构、程序模块或其它数据,并包括任一信息传送介质。术语“已调制数据信号”指以对信号中的信息进行编码的方式设置或改变其一个或多个特征的信号。作为示例而非局限,通信介质包括有线介质,如有线网络或直接有线连接,以及无线介质,如声学、RF、红外和其它无线介质。上述任一的组合也应当包括在计算机可读介质的范围之内。
系统存储器130包括易失性和/或非易失性存储器形式的计算机存储介质,如只读存储器(ROM)131和随机存取存储器(RAM)132。基本输入/输出系统133(BIOS)包括如在启动时帮助在计算机110内的元件之间传输信息的基本例程,通常储存在ROM 131中。RAM 132通常包含处理单元120立即可访问或者当前正在操作的数据和/或程序模块。作为示例而非局限,图1示出了操作系统134、应用程序135、其它程序模块136和程序数据137。
计算机110也可包括其它可移动/不可移动、易失性/非易失性计算机存储介质。仅作示例,图1示出了对不可移动、非易失性磁介质进行读写的硬盘驱动器141,对可移动、非易失性磁盘152进行读写的磁盘驱动器151,以及对可移动、非易失性光盘156,如CD ROM或其它光介质进行读写的光盘驱动器155。可以在示例性操作环境中使用的其它可移动/不可移动、易失性/非易失性计算机存储介质包括但不限于,磁带盒、闪存卡、数字多功能盘、数字录像带、固态RAM、固态ROM等等。硬盘驱动器141通常通过不可移动存储器接口,如接口140连接到系统总线121,磁盘驱动器151和光盘驱动器155通常通过可移动存储器接口,如接口150连接到系统总线121。
上文讨论并在图1示出的驱动器及其相关联的计算机存储介质为计算机110提供了计算机可读指令、数据结构、程序模块和其它数据的存储。例如,在图1中,示出硬盘驱动器141储存操作系统144、应用程序145、其它程序模块146和程序数据147。注意,这些组件可以与操作系统134、应用程序135、其它程序模块136和程序数据137相同,也可以与它们不同。这里对操作系统144、应用程序145、其它程序模块146和程序数据147给予不同的标号来说明至少它们是不同的副本。用户可以通过输入设备,如键盘162和定位设备161(诸如指鼠标、跟踪球或触摸垫)向计算机110输入命令和信息。其它输入设备(未示出)可包括话筒、操纵杆、游戏手柄、圆盘式卫星天线、扫描仪等等。这些和其它输入设备通常通过耦合至系统总线的用户输入接口160连接至处理单元120,但是也可以通过其它接口和总线结构连接,如并行端口、游戏端口或通用串行总线(USB)。监视器191或其它类型的显示设备也通过接口,如视频接口190连接至系统总线121。除监视器之外,计算机也可包括其它外围输出设备,如扬声器197和打印机196,它们通过输出外围接口195连接。
计算机110可以使用到一个或多个远程计算机,如远程计算机180的逻辑连接在网络化环境中操作。远程计算机180可以是个人计算机、服务器、路由器、网络PC、对等设备或其它常见的网络节点,并通常包括许多或所有相对于计算机110所描述的元件。图1描述的逻辑连接包括局域网(LAN)171和广域网(WAN)173,但也可包括其它网络。这类网络环境常见于办公室、企业范围计算机网络、内联网以及因特网。
当在LAN网络环境中使用时,计算机110通过网络接口或适配器170连接至LAN 171。当在WAN网络环境中使用时,计算机110通常包括调制解调器172或用于通过WAN 173,如因特网建立通信的其它装置。调制解调器172可以是内置或外置的,它通过用户输入接口160或其他适当的机制连接至系统总线121。在网络化环境中,相对于计算机110所描述的程序模块或其部分可储存在远程存储器存储设备中。作为示例而非局限,图1示出远程应用程序185驻留在存储器设备181上。可以理解,示出的网络连接是示例性的,也可以使用在计算机之间建立通信链路的其它手段。
资源复制
如可以容易理解的,调制解调器机器可以在相对较短的一段时间之内处理数千次的资源交换。复制这些资源并且在经由不同可靠性和带宽的各种网络连接的数百或数千台机器上使得它们保持同步是重大的挑战。
乐观的是,多主(multi-master)复制系统允许对参与给定复制组的任何机器上的复制内容的不受限制的改变。复制组包括在参与复制组的机器上复制的一组资源。一复制组的资源组会跨卷。例如,复制组可能包括与C:\DATA、D:\APPS和E:\DOCS相关联的资源,它们可以在参与复制组的一组机器上复制。潜在的冲突改变在使用一组冲突解决准则的复制系统的控制下调和,该组冲突解决准则为每种冲突情况定义哪个冲突改变优先于其他的。
术语“机器”并非仅被限于物理机器。而是,单个物理机器可以包括多个虚拟机器。如此处所使用的,从一个机器到另一机器的复制意味着将同一复制组的一个或多个成员从(虚拟或物理的)一台机器复制到(虚拟或物理的)另一机器。单个物理机器可以包括同一复制组的多个成员。由此,复制组的复制成员可以涉及同步包括同一复制组的两个或多个成员的单个物理机器的成员。
资源可以被看作对象。每个资源与资源数据或资源元数据相关联。资源数据可以包括内容和与内容相关联的属性,而资源元数据包括可能在协商同步和冲突解决中相关的其他属性。资源数据和元数据可以被存储在数据库或其他合适的存储中;在一替换实施例中,可以使用分开的存储来存储资源数据和元数据。
在包括基于文件系统中的命名文件的数据存储的复制系统中,资源数据可以包括文件内容以及与文件内容相关联地存储在文件系统上的任何文件属性。文件属性可以包括访问控制列表(ALC)、创建/修改时间以及与文件相关联的其他数据。如此处所使用的,文件可以包括目录(即可以与后代文件和目录以及祖先目录相关联的文件系统对象)和非目录。除非上下文明确地另外指示,否则术语文件可以被理解为“资源数据”。
在包括并非基于文件系统中的命名文件的数据存储的复制系统中(例如资源被存储在数据库或基于对象的数据存储中的那些),适用于数据存储的资源数据被存储。在该整个文档中,基于文件系统中的文件的复制系统有时被用作示例,但是应该认识到可以使用能够存储内容的任何数据存储而不背离此处所描述的主题的精神和范围。
对于每个资源,资源数据可以包括全局唯一标识符(GUED)、资源是否被删除、版本序列号加上改变的作者、反映发生改变的时间的时钟值、以及诸如总结资源数据的值并且可包括资源内容的签名的摘要等其他字段。摘要可用于快速比较,以便在例如复制同步期间绕开数据传输。如果将目的地机器上的资源与资源机器上的内容同步(例如摘要所示),那么可以通过仅传递资源元数据而不传送资源数据本身来最小化网络开销。进行资源元数据的传送,使得目的地机器可以反映在其后续复制活动中包括在源机器上的元数据。这可以允许目的地机器例如成为后续复制活动的源机器。可以将资源元数据与资源数据一起存储或分开存储,而不背离此处所描述的主题的精神和范围。
在复制资源时可以使用版本向量。版本向量可以被看作是参与复制组的机器的计数器或时钟的全局集合。参与复制组的每个机器维护表示该机器的当前最新版本和该机器接收到的关于其他机器的最新版本的版本向量。每次从机器创建、修改或删除资源时,资源的版本就被设置成等于该机器的当前版本号加一的版本号。该机器的版本向量也被更新,以便反映该机器的版本号被递增了。
版本向量维护有关知识状态的信息。版本向量可以将机器标识符映射到时间戳。参与复制组的每个机器可以维护其自身的时钟向量以便记录它所知道的其他机器已获得的时钟值。时钟向量可以包括版本序列号。在一个实施例中,可以维护一组时钟值,而非为每个机器维护单个时钟值,以便适应于处理无序更新并利用对版本向量的基本组操作。
在同步期间,可以传送版本向量以便用于同步资源。例如,如果机器A(下游机器)和B(上游机器)参与一同步活动,诸如加入,那么机器B将其版本传送给机器A。A将从B接收到的版本向量减去其版本向量,并将差值发送给B。接着B可以传送具有版本差异的所有资源的改变(如果有的话)。
在题为“Interval Vector Based Knowledge Synchronization for ResourceVersioning(用于资源版本的基于内部向量的知识同步)”的美国专利申请序列号10/791,041、题为“Garbage Collection of Tombstones for OptimisticReplication Systems(用于乐观复制系统的墓碑的无用信息收集)”的美国专利申请序列号第10/779,030、以及题为“Granular Control Over the Authority ofReplicated Information via Fencing and UnFencing(经由围栅或解围栅对复制信息的授权的粒度控制”的美国专利申请序列号第10/733,459中描述了在同步中使用版本向量的示例。
可能期望不要将更新复制到参与复制组的某些成员之外。例如,在发表的情况下,可能不期望将来自轮辐(spoke)的更新复制回轮轴(hub)。在数据收集的情况下,可能期望避免对轮轴作出任何更新。在客户机上,可能期望使得一些机器能够查看复制文件夹的内容但是不能对其作出更新。
此处所描述的本主题的各方面允许系统管理员等设置复制组的从属(也称为“只读”)成员。简而言之,丢弃对于从属成员的任何更新。如果在成员上创建文件,该文件被删除。如果删除现有文件,那么该文件被重新激活(例如撤销删除)。如果更新文件,那么丢弃更新,并且重新安装原始或较新的版本。此外,从从属成员的任何本地创建、删除或更新不会被复制到其下游合作版本上。
如果对于一成员临时需要合并行为(例如复制入或复制出),那么管理员等可以首先将该成员设置为读/写,并接着在合并完成之后将其改变为从属。在一个实施例中,一成员可以被同时设置为主要和从属。在这种意义下,主要意指在与下游合作伙伴的同步期间的冲突中,来自该成员的资源获胜并且被复制出去。
在一个实施例中,为了设置从属成员,与复制文件夹相关联的状态数据的只读属性被设置为真。该状态数据可以被持久地存储在非易失性存储器中,诸如文件、数据库等。
在一个实现中,对于只读属性的默认值为假。由此,无需管理员等的干涉,参与复制组的成员默认能够复制资源进出。
图2是依照此处所描述的主题的各方面一般地示出参与复制组的机器的框图。作为一个示例,上游机器201和下游机器202可以参与包括两个资源的复制组。这两个资源可以包括例如文档目录205和215和帮助目录210和220(在两台机器上给予它们不同的号码以表示在一特定时刻,这些资源可能不包括相同的资源数据-即它们可以是非同步的)。
响应于本地改变,下游机器202可以向上游机器201请求更新,经改变的资源以及在上游机器201上它们相应的资源。虽然仅在图2中示出了两台机器,但是上游机器201和下游机器202可以是包括许多其他机器的复制系统的一部分。在一个交互中为源的机器(有时称为上游机器)可以稍后成为另一个交互中的目的地(有时称为下游机器),反之亦然。
下游机器202可以包括确定何时从上游机器201获取更新的更新机制225。例如,如果用作从属,那么下游行机器202可以响应于对下游机器202上的资源的本地更新,从上游机器201请求更新。如果下游机器202也是另一机器(未示出)的下游合作伙伴,那么更新机制225也可以确定要将哪些更新发送给其他机器。例如,如果用作从属,那么下游机器202可以跳过将本地改变的资源发送给其他机器。
图3是依照此处所描述的主题的各方面示出被配置成在资源复制系统中运作的机器的框图。机器305包括更新机制225、资源322和通信机制340。更新机制包括从属监视器345、协议逻辑320和其他同步逻辑320。
资源322包括用于存储资源数据的资源数据存储325和资源元数据存储330。虽然在相同的框中示出,但是资源数据存储325可以相对于资源元数据存储330一起存储或被存储分开的存储中。特别地,资源元数据存储330可以包括存储在资源存储325中的每个资源数据记录的版本,并且还可以包括内部向量(框335)。
通信机制340允许更新机制225与其他机器上的其他更新机制(未示出)通信。通信机制340可以是网络接口或适配器170、调制解调起172或者结合图1所描述的用于建立通信的任何其他装置。
更新机制225包括用于与其他复制合作伙伴通信的协议逻辑315。其他同步逻辑320包括除了协议逻辑之外的同步逻辑(例如在冲突更新的情况下做什么,如何确定要获取哪些更新等)。虽然将协议逻辑315和其他同步逻辑320示为分开的框,但是在其他实施例中,可以全部或部分地将它们组合在一起。
如此处所使用的,复制服务可以包括以上结合图3所描述的任何一个或多个组件。
在操作中,机器305可以用作下游机器和/或上游机器。下游机器可以建立与上游和下游机器都参与的复制组的上游机器的连接。这可以通过例如通信机制340来完成。在建立连接的过程中,每个合作伙伴(即上游和下游机器)可以将其版本向量发送给其他合作伙伴。接着,建立会话以便将更新从上游机器发送到下游机器。
可以将会话用于将上游机器的复制文件夹与下游机器的其相应复制文件夹绑定。可以为一复制组的每个复制文件夹建立会话。可以在上游和下游机器之间的单个连接上建立多个文件夹的会话。
在来自会话的所有更新被处理或丢弃之后,下游机器可关闭会话。
下游机器可请求(例如经由通信介质340)上游机器在与会话相关联的任何资源的更新发生时通知下游机器。当上游机器通知下游机器更新可用时,下游机器可以请求更新的版本向量。作为响应,下游机器发送其版本向量(有时称为“VVup”)。注意VVup可以包括完整的版本向量或者包括自从发送上一个版本向量以来改变的版本向量。通知下游机器更新可用并且等待下游机器请求更新可以用两个步骤执行,这样使得下游机器不会被来自多个上游合作伙伴的版本向量意外地溢满。
下游机器使用它接收到的上游版本向量(即“VVup”),并计算与其自身的版本向量的设置差异,以便计算出下游机器不知道的驻留在上游机器上的版本。下游机器接着可以请求有关版本的元数据。在请求更新时,下游机器可以包括增量版本向量,该增量版本向量指示下游机器需要哪些更新。
下游机器可以分开或一起请求墓碑(tombstone)或活更新。墓碑表示资源被删除,而活更新表示没有删除资源的更新。在某些实现中,下游机器会在请求活更新之前请求不被。这可以用于提高效率,因为被修改接着被删除的资源无需在它在复制合作伙伴上被删除之前被修改。此外,在活更新之前处理基碑可清除下游机器的数据存储(例如在文件系统中)的名称空间,以便为处理活替换更新作准备。
在接收到更新之后,下游机器可以开始处理更新,以便确定从下游机器请求与更新相关联的哪些资源或其部分。可以例如通过其他同步逻辑340来执行该处理,该同步逻辑340可以被分成多个组件(未示出)。例如,更新可以指示一特定资源的源数据或其部分被改变。在一个实施例中,可以由下游机器请求与资源相关联的所有资源数据。在另一实施例中,下游机器可以请求包括改变的资源数据的一部分。如此处所使用的,涉及资源数据的交互(例如请求、响应、更新等)应该被理解为意指涉及与资源相关联的资源数据的一部分或全部的交互。例如,对资源数据的请求可以意味着对于与资源相关联的资源数据的一部分或全部的请求。
在确定需要被请求的资源数据之后,下游机器可以请求资源数据。作为对于资源数据的请求的响应,下游机器可以发送与资源相关联的资源数据。请求和响应可以继续直至下游机器确定需要更新的所有资源数据已经被请求。注意,并非所有的资源数据可以被发送,因为例如如果资源已经被删除,上游机器可能不再具有所请求的资源数据。其中可能不发送资源数据的另一示例是如果相对于下游机器的唯一有效的改变是资源被重命名或元数据属性被更新。在这种情况下,接收更新并重命名本地资源或更新本地元数据是将下游资源与上游资源同步所需的全部。
例如,如果复制文件夹被删除、如果在复制期间发生不可恢复的错误、或者如果复制系统被关闭,那么可以关闭会话。否则,所建立的会话可用于涉及上述事件的全部或一部分的后续同步。
更新机制225可以使用数据库(例如资源元数据存储330)来跟踪资源数据存储325中的资源数据的文件和目录状态。每次资源被更新时,该资源可以在数据库中被分配一新的版本。
更新机制225可以从上游合作伙伴接收更新并且更新本地资源,使得它们与上游合作伙伴上的复制资源同步。对资源元数据的更新可以被存储在资源元数据存储330中,而对资源数据的更新可以被存储在资源数据存储325中。在一个实施例中,资源数据存储325和资源元数据存储330可以被包括在相同的卷和物理设备(例如硬盘驱动器)上。
也可以通过与资源数据相关的本地文件活动来改变资源数据。例如,下游机器可以用作许多客户机机器(未示出)的文件服务器。客户机机器可以访问和修改下游机器上的源数据(例如作为文件)。更新机制225可以包括可以监视对复制资源的改变(例如对文件的改变)的资源数据改变监视器(未示出)。当复制资源改变时,资源改变监视器可以更新资源元数据存储330以便指示更新。这可用于保持资源元数据存储330与资源数据325同步以及复制组成员之间的同步。
从属行为
当用作从属时,更新机制225可以包括从属监视器345。从属监视器345可以被实现为与入站连接(下文中称为“InConnection”)相关联的任务。Inconnection是下游机器从中从上游机器接收更新的连接。对于下游机器的每个上游合作伙伴,可以有一个InConnection。在一个实施例中,对于每个InConnection有一个从属监视器345。在另一实施例中,可以在多个InConnection之间共享从属监视器345。
图4是依照此处所描述的主题的各方面示出与从属监视器相关联的一些示例性状态的状态图。当它首先开始时,从属监视器可以以监视本地更新状态405开始。在该状态的第一活动中,从属监视器可以请求(例如,经由GetNewLocalVersionChain()(获得新本地版本链))驻留在本地从属机器上的版本向量的最新副本,该版本向量包括在从属上起源的改变的概述。作为响应,可以向从属监视器提供一本地版本链,该本地版本链包括对在从属上起源和对从属机器上的资源作出的改变的概述。如果没有新的版本可用,那么可以将从属监视器的请求置入队列,以便接收本地链改变通知。当新版本的版本向量可用时,可以唤醒从属监视器。如果本地链没有改变,那么从属监视器转换到监视器本地更新状态405。从属监视器可以通过将新版本链与从先前会话保存的版本链作比较来确定是否有改变。
如果有对本地版本链的更新或者如果来自先前会话的更新被丢弃,那么从属监视器可以转换到检查本地更新状态415。
在检索到新版本链之后,从属监视器可以检查资源元数据存储,以便在从属监视器请求上游合作伙伴的版本向量之前确定改变是否来自本地更新。对于每个资源的标志(例如intemalUpdate(内部更新))可以指示版本改变是来自本地改变还是来自远程更新。为了确定改变是否来自本地更新,从属监视器可以使用标志来删除与远程改变相关联的更新,并接着计算新版本链和所保存的较早的版本之间的增量。此外,从先前会话丢弃的版本可以被添加到增量上。然后,从属监视器于是可以搜索资源元数据以便获取由增量支配的任何更新。
如果从属监视器确定没有本地更新,那么它会转换回监视本地更新状态405。否则,从属监视器会转换到请求VVup状态410。
在请求VVup状态410中,从属监视器可以从与从属监视器相关联的InConnection的上游合作伙伴请求版本向量。如果已经有太多未完成的请求或者如果发生错误,那么从属监视器会在休眠一段时间后转换回检查本地更新状态415。如果从属监视器确定从属监视器将使用高速缓存版本的VVup,那么从属监视器转换到比较版本向量状态425。否则,从属监视器休眠并转换到请求VVup未决状态420。
当从属监视器接收到VVup或发生错误时,可以将其唤醒。如果在接收VVup时发生错误,那么从属监视器转换到检查本地更新状态415。否则,从属监视器转换到比较版本向量425状态。
在比较版本向量状态425中,从属监视器可以使用从上游合作伙伴或本地高速缓存检索到的版本向量,以便决定去往该特定的上游合作伙伴来拉取本地更新的资源的原始或较新内容是安全的。在该上下文中,“安全”意指上游合作伙伴的版本向量支配除了特定资源的本地版本链之外的内容。短语“一版本向量支配另一个”是版本向量之间的相应包含关系的同义词。
例如,对于名为A、B和C的三台机器,其中A是上游机器而B是从属机器,如果A的版本向量是(A->5,B->6,C->7),而B的版本向量是(A->5,B->15,C->6),除了B的本地版本链之外A的版本向量支配B的版本向量。由此,A是B可以从中获取本地更新资源的原始或较新的内容的“安全”的上游合作伙伴。如果C也是对于B的上游机器,而C的版本是(A->4,B->6,C->7),那么C不是B可以从中获取本地更新资源的原始或较新的内容的“安全”的上游合作伙伴,因为即使排除了本地链(即B->15),C的版本向量也不支配B的版本向量。
如果上游合作伙伴的版本向量不是支配的,那么从属监视器会休眠一段时间,并接着转换回检查本地更新状态415。虽然从属监视器在休眠,但是其他连接之一上的从属监视器任务可以从“安全”上游合作伙伴恢复资源。
如果上游合作伙伴的版本向量是支配的,那么从属监视器可以转换到找出/提交本地更新状态430。在该状态中,从属监视器可以将更新注入到更新机制225中。如果更新对应于本地新创建的资源且资源还未被复制,这可以由资源元数据上的标志确定(例如uidVisible=0),那么资源及其元数据被删除。
在一个实施例中,使用全局唯一资源ID(下文中称为“UID”)来检测本地新创建的资源。UID包括GUID(全局唯一ID)组件和版本序列号。GUID组件标识创建者(例如从属成员)并且被分开地存储在数据库中。为了确定资源是否是本地创建的,可以执行数据库GUID和UID中的GUID之间的比较。可以在本地创建的资源上将标志(例如uidVisible)设置为0。举例而言,一旦资源被复制出来,就可将标志设置为1。
如果更新并非对应于本地新创建的资源或更新已被复制出来,那么更新机制225创建一从属同步会话,并从上游合作伙伴请求资源。如果在上游合作伙伴上不存在资源,那么可以认为在上游合作伙伴上删除了该资源。作为响应,资源数据被本地地删除,并且在资源元数据中设置墓碑。否则,使用重新分配的本地版本来本地地安装来自上游合作伙伴的更新。在一个实施例中,如果从属不具有下游合作伙伴,那么可以不重新分配本地版本。
在一个实施例中,当会话完成时,从属同步会话可能不改变从属的版本向量,即使从上游下载了较新版本的更新。此外,如果由于重复的同步失败更新被丢弃(例如未成功完成),那么会通知从属监视器并且它会随后试图获取更新。
在同步完成之后,会话被关闭并且从属监视器转换到监视本地更新状态405。
图5是依照此处所描述的主题的各方面一般地示出可能在从属复制成员上发生的动作的流程图。在框505处,动作开始。
在框510处,从属监视器检测本地资源已经被本地更新,如结合图6更为详细地描述的。术语“本地更新”在该情况下意指本地资源响应于本地资源存储活动而改变而非响应于对参与复制组的另一成员作出的改变而改变(例如经由与上游合作伙伴同步)。用户改变从属复制成员的复制资源构成了已本地更新的资源的一个示例。
此外,虽然从复制组的观点来看复制成员可以是只读的,但是从访问复制成员上的复制资源的用户的观点来看,复制成员可以是读写的。在一个实施例中,访问复制资源的用户(甚至在从属复制成员上)可以具有修改或删除任何现有资源或添加新的资源的能力。
在框515处,判定在更新中资源是否是本地创建的。如果是,那么动作继续到框520;否则,动作继续到框525。更新可以包括本地资源的创建。例如,用户可以创建新的文字处理文档并将该文档保存在一复制文件夹下。本地(非复制)创建可以如上所述地用标志(例如uidVisible=0)来指示。
在框520处,资源被删除。
在框525处,确定从中安装替换资源的上游合作伙伴,并且从上游合作伙伴安装替换资源,如结合图7更详细描述的。
在框530处,动作结束。
图6是依照此处所描述的主题的各方面一般地示出可能在检测本地资源已被本地更新的过程中发生的、对应于图5的框510的动作的流程图。在框605处,动作开始。
在框610处,请求对本地版本链的改变的通知。在框615处,接收到对本地版本链的改变的通知。在框620处,判定由本地版本链表示的任何更新是否对应于本地更新的资源。如果有任何更新对应于本地更新的资源,那么在框625处,动作继续到框630处。否则,动作继续到框630处,并且从该处继续到图5的框515处。
图7是依照此处所描述的主题的各方面一般地示出可能在从上游合作伙伴安装替换资源的过程中发生的、对应于图5的框525的动作的流程图。在框705处,动作开始。
在框710处,从上游合作伙伴处请求或从本地高速缓冲检索VVup。在框715处,判定VVup是否支配除了本地版本链之外的本地版本向量。如果是,那么在框720处动作继续到框725处;否则,动作继续到框730处。
在框725处,请求并安装对应于经改变的资源的更新。注意,这可能涉及安装正好在本地更新之前在从属复制成员上存在的资源的版本或可能涉及安装比正好在本地更新之前在从属复制成员上存在的较新的版本。
在框730处,从属监视器休眠。在框735处,从属监视器转换到监视本地更新状态。在框740处,动作继续到图5的框530处。
注意,与图7相关联的动作可以与结合其他从属监视器发生的动作并行或交错发生。虽然与由一个从属监视器监视的InConnection相关联的上游合作伙伴可能不具有支配本地版本向量(除了本地版本链之外)的版本向量,但与另一InConnection相关联的另一上游合作伙伴通常将具有支配的版本向量。由此,如果VVup不支配本地版本向量,则替换资源可以来自另一上游合作伙伴。
此外,在一个实施例中,判定从中安装替换资源的上游合作伙伴可以包括与InConnection相关联的第一从属监视器,InConnection判定从属监视器的上游合作伙伴是否具有支配本地版本向量的版本向量,并将对替换资源的更新请求注入到更新机制中。
应该理解,结合图5-7描述的动作并非包含了参与复制组的从属复制成员在复制资源时会采用的所有动作。此外,虽然所描述的动作以特定的顺序发生,但是在其他实施例中,一些动作可以并行发生或可以用另一顺序执行而不背离此处所描述的主题的精神和范围。
如可以从以上详细描述看出,描述了有关资源复制系统的关闭恢复的各方面。虽然此处所描述的主题的各方面容许各种修改或替换性构造,但是其某些所示的实施例在附图中示出并且在以上作出了详细描述。然而,应该理解并不旨在将所要求保护的主题的各方面限于所公开的具体形式,而是相反,本发明是要覆盖落入此处所描述的本主题的各方面的精神和范围内的所有修改、替换性构造和等价形式。