文件系统目录的快速、可靠同步的制作方法

文档序号:6567076阅读:117来源:国知局
专利名称:文件系统目录的快速、可靠同步的制作方法
技术领域
本发明一般涉及计算机系统,尤其涉及计算机文件和目录。
技术背景计算机用户通常需要在诸如旅行时、在家中工作时、或网络当机时从网络断 开而离线工作。结果,各种机制旨在将网络信息高速缓存到本地计算机上以允许在 本地计算机从网络断开时可以访问该信息。本地高速缓存也可减少网络服务器与以 离线模式工作的客户端之间通信的数据量。减少传输数据量的好处包括减少服务器 工作负荷、减少客户端的反应时间、以及增加可用网络带宽。离线工作通常相关于服务器目录层次改变离线目录层次的状态。层次中目录 的变化可通过诸如属性变化或数据写入的文件变化形式、或诸如创建新文件或目录 或删除文件的名空间变化形式来进行。不管变化或多个变化,在某种意义上,有必要进行某些进程来将离线客户端 与服务器目录同步到同步状态。在同步状态中,两个目录层次具有相同的子目录结 构,在这些目录内包含相同的文件名。而且,对于在两个目录中都存在的各个文件, 这些文件需要在其数据流中包含相同的数据,并且具有相同的关联属性、时间戳和 其它文件系统信息。然而,将高速缓存离线项目与服务器文件系统项目(目录和文件)同步十分 复杂、相对较慢,并且总会遇到问题。需要一种快速、可靠的同步离线文件的方法。发明内容简而言之,本发明涉及一种方便目录及其文件同步的多阶段系统和方法,诸 如将本地、离线高速缓存中维护的目录与远程网络文件系统中另一目录同步。为此,快速、可靠的同步(FastSync)子系统在发现/列举阶段中操作以向呼叫客户端提供 差异集,然后在动作阶段进行如客户端指示的操作以对不同目录进行同步。在发现/列举阶段中,FastSync子系统确定目录之间存在的差异,其中包括诸如一文件己从一目录中删除但其对应目录并未删除的名空间差异或两个文件属性和/或内容之间的差异。在一实现中,可由FastSync子系统将诸如描述差异的节点 树的同步结构返回到客户端呼叫器。建立同步树结构作为包含表示已经改变的项目(文件或目录)的目录名空间 子集。为了节省存储器使用,对于未更改项目,节点未被置于树中,但是对于未改 变的子目录(但其下具有改变的项目),在树中维护简单节点以保持正确的层次组 织。各个同步项包含描述当前状态的同步状况域,例如在一个目录或另一目录或两 者中是否有文件从其原始状态改变,或者是否由于它是在其存在的目录中新创建的 或已从其消失的目录中删除而只存在于一个目录中。客户端呼叫器按需分析返回的结构,然后请求FastSync子系统采取旨在使目 录进入同步状态的指定动作。在动作阶段中,FastSync子系统执行如客户端指示地 同步原语(可组合成更复杂动作中的操作)。在一实现中,FastSync子系统的发现/列举和动作阶段利用并行操作和I/O (输 入/输出)流水线操作,包括通过在各个阶段过程中使用多线程。例如,在列举过 程中,各个线程在两个目录下打开同一路径,并列举孩子(文件和目录)。线程入 队将由新线程处理的各个子目录,然后通过将树更改成包括改变元素的同步项而在 该目录内处理差异。除了文件列举,FastSync子系统也使用目录列举。在各个列举 发现新目录时,进而由另一个线程对这些目录进行排队。因此,目录及其子目录有 可能由不同线程并行处理。这使CPU利用率最大化并且利用了 I/O流水线操作, 尤其是通过网络。在网络上,这种流水线操作减少了等待时间对同步的总时间的影 响。在动作阶段过程中,当有操作被请求,FastSync子系统将操作、项目指针和 上下文信息封装在内部上下文块中并将该包排队为由处理线程池处理的工作项目。 注意到,内部排队确保这些动作以适当顺序被执行。当线程可用于进行一项操作时, FastSync子系统从该队列中提取一项目并进行该工作,对呼叫器按需进行回叫。如 果该动作己成功,则总体进程可视为将线程返回到线程池直到以后另-一项目需要。 如果没有成功,则客户端允许一定数目的再试,或者使该项目添加回工作列表,例 如通过向呼叫器返回失败代码。其它优点将在结合附图并参照详细描述而变得显而易见。


图1是一般示出将本发明结合其中的计算环境的框图2是包括通过根据本发明各个方面的快速、可靠同步子系统实现同步的一 般示例架构的框图3是包括根据本发明各个方面进行同步的目录的框图4是由根据本发明各个方面的在列举阶段中的同步子系统开发的同步树示
图5是根据本发明各个方面的用于维护待同步项目的数据的示例数据结构的
示图6和7是示出根据本发明各个方面的通常旨在同步目录的示例逻辑的流程
图8是根据本发明各个方面的在客户端呼叫器与快速、可靠的同步子系统之 间的各种相互作用的表示。
具体实施方式
示例性操作环境
图1示出实施本发明的适当计算系统环境100的示例。计算系统环境100仅 为适当计算环境的一个示例并且不旨在对本发明的使用或功能范围产生任何限制。 计算环境IOO不应解释为具有与示例性操作环境IOO所示的部件中任一个或任一结
合相关的任何依赖或要求。
本发明可通过许多其它一般目的或专用目的的计算系统环境或配置来运行。
可适用于本发明的公知计算系统、环境、和/或配置的示例包括,但不局限于个
人计算机、服务器计算机、手持或膝上型器件、平板设备、多处理器系统、基于微
处理器的系统、置顶盒、可编程消费电子设备、网络PC、小型计算机、大型计算
机、包括任何上述系统或设备的分布式计算环境等。
本发明可在由计算机执行的诸如程序模块的计算机可执行指令的一般上下文 中描述。通常,程序模块包括执行特定任务或实现特定抽象数据结构的例程、程序、 对象、部件、数据结构等。本发明能在其中任务由通过通信网络链接的远程处理设 备执行的分布式计算环境中实施。在分布式计算环境中,程序模块可位于包括存储 器存储设备的本地和/或远程计算机存储介质中。
参照图1,实现本发明的示例性系统包括计算机110形式的通用计算设备。计 算机110的部件包括,但不局限于处理单元120、系统存储器130、和将包括系统存储器的各种系统部件耦连于处理单元120的系统总线121。系统总线121可以是 包括存储器总线或存储器控制器、外围总线、和使用各种总线构架中任一种的局域 总线的若干种总线结构中的任一种。作为示例而非限制,这种架构包括工业标准架
构(ISA)总线、微通道架构(MCA)总线、增强ISA (EISA)总线、视频电子标 准协会(VESA)局域总线、和也称为Mezzanine总线的外围部件互连(PCI)总线。
计算机110通常包括各种计算机可读介质。计算机可读介质可以是由计算机 110访问的任何可用介质,并且包括易失性和非易失性介质、和可移动和不可移动 介质。作为示例而非限制,计算机可读介质可包括计算机存储介质和通信媒介。计 算机存储介质包括以存储诸如计算机可读指令、数据结构、程序模块、或其它数据 的信息的任何方法或技术实现的易失性和非易失性、可移动和不可移动介质。计算 机存储介质包括,但不局限于RAM、 ROM、 EEPROM、闪存或其它存储技术、 CD-ROM、数字多功能盘(DVD)或其它光盘存储、盒式磁带、磁带、磁盘存储 或其它磁性存储器件、或可用于存储期望信息并由计算机110访问的任何其它介 质。通信媒介通常包含在诸如载波或其它传输机制中调制数据信号的计算机可读指 令、数据结构、程序模块、或其它数据,并且包括任何信息传输媒介。术语"调制 数据信号"表示使其一个或多个特征以在该信号中编码信息的方式设置或改变的信 号。作为示例而非限制,通信媒介包括诸如有线网络或直接线连接的有线网络、和 诸如声学、RF、红外和其它无线媒介的无线媒介。上述中任一种的组合也同样被 包括在计算机可读介质的范围之内。
系统存储器130包括以诸如只读存储器(ROM)131和随机存取存储器(RAM) 132的易失性和/或非易失性存储器形式的计算机存储介质。包含诸如在启动过程中 帮助在计算机110内的元件之间传递信息的基本例程的基本输入/输出系统133 (BIOS)通常存储在ROM 131。 RAM 132通常包含可由处理单元120即时访问和 Z或正在其上操作的数据和/或程序模块。作为示例而非限制,图1示出操作系统134、 应用程序135、其它程序模块136和程序数据137。
计算机110也可包括其它可移动/不可移动、易失性/非易失性计算机存储介质。 仅作为示例,图1示出从不可移动、非易失性磁性介质读取或向其写入的硬盘驱动 器141、从可移动、非易失性磁盘152读取或向其写入的磁盘驱动器151、和从诸 如CD ROM或其它光学介质的可移动、非易失性光盘156读取或向其写入的光盘 驱动器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提供不同的附图标记以至少表示它们是不同的拷贝。用户可 通过诸如书写板、或电子数字转换器164、话筒163、键盘162、和通常是指鼠标、 轨迹球或触控板的指点器件161的输入器件将指令和信息输入到计算机110中。图 1中未示出的其它输入器件可包括操纵杆、游戏手柄、卫星盘、扫描仪等。这些和 其它输入器件通常通过耦连于系统总线的用户输入接口 160连接于处理单元120, 但是也可由诸如并行端口、游戏端口和通用串行总线(USB)的其它接口和系统总 线连接。监视器191或其它类型的显示器件也经由诸如视频接口 190的接口连接于 系统总线121。监视器191也可与触控屏幕面板等集成。注意,监视器和/或触控屏 幕面板可以物理耦合于计算器件110结合其中的外壳,诸如在平板型个人计算机 中。此外,诸如计算器件110的计算机还可包括可通过输出外围接口 194等连接的 诸如扬声器195和打印机196的其它外围输出器件。
计算机110可在逻辑连接于-一个或多个诸如远程计算机180的远程计算机的 网络化环境中操作。远程计算机180可以是个人计算机、服务器、路由器、网络 PC、对等器件或其它共用网络节点,并且通常包括上述与计算机110相关的元件 中的多个或全部,尽管只有存储器存储器件181在图1中示出。图1所示逻辑连接 包括局域网(LAN) 171和广域网(WAN) 173,但是也可包括其它网络。这种网 络环境在办公室、企业范围计算机网络、内部网和因特网中十分常见。
当用于LAN网络环境中时,计算机110通过网络接口或适配器170连接于 LAN 171。当用于WAN网络环境中时,计算机110通常包括调制解调器172或用 于在诸如因特网的WAN 173上建立通信的其它装置。内置或外置调制解调器172 可经由用户输入接口 160或其它适当机制连接于系统总线121。在网络化环境中, 相关于计算机110或其部分描述的程序模块可存储在远程存储器存储器件中。作为示例而非限制,图1示出驻留在存储器器件181的远程应用程序185。应该理解, 所示网络连接为示例性的,并且可使用在计算机之间建立通信链接的其它装置。
对本地和远程文件和目录进行同步
本发明-一般涉及一种系统和方法,通过该系统和方法,在诸如本地离线高速 缓冲和远程网络文件系统中的目录得以同步。为此,本发明发现在目录之间存在何 种差异,向呼叫客户端列举该差异,然后在客户端请求时,例如发出要达到同步状 态所需的文件系统相关的命令时,采取动作。如将要理解的,许多实现本发明的方 法都是可行的,但本文只描述一些可选方案。例如,以下主要参考并行执行许多同 步相关操作的多阶段、多线程模型来描述本发明。然而,其它类型的安排同样可行, 且本发明不局限于本文使用的任何特定示例,而且可通过通常在计算中提供益处和 优点的各种方式使用。
在一实现中,对于多阶段操作,同步子系统操作在定位和列举待同步的两个 H录结构之间的差异的发现阶段、以及其中同步原语(可组合到更复杂动作中的操 作)得以执行的动作阶段。这向操作在分析阶段中的客户端呼叫机制提供非常快速、 可靠的机制作为手段。如将会理解的,本实现中的子系统提供重要的并行操作和 I/O (输入/输出)流水线操作,因此方便了快速同步,因此本文中该子系统(简) 称为FastSync子系统200 (图2)。
通常,在本示例实施方式中,FastSync子系统200部件列举目录之间的差异 并执行同步相关的请求,但是对如何对目录进行同步不作确定。作为替代,FastSync 子系统200在列举阶段报告目录的状态,并在动作阶段中采取来自客户端呼叫器 202 (图2)的关于要进行哪个或哪些操作(与动作对应)来对独立文件或目录进 行同步的明确命令。这允许不同类型的呼叫器与FastSync子系统200进行接口, 诸如需要获取用户输入来同步的交互式应用程序、或需要在无需提示用户的背景下 运行的组策略处理器和脚本。一个适当的客户端呼叫器202包括高速缓冲服务的客 户端控制器,如在2005年1月10日提交的美国专利申请序列号No. 11/032,870中 所述,该申请授让给本发明的受让人并通过引用结合于此。注意,在该服务模型中, 服务允许应用程序或同步管理器程序204具有同步功能而无需进行许多复杂的同 步分析。
通常,在本实现中,FastSync子系统200不包含解决不同步条件的逻辑。一 个原因是这允许不同的呼叫器以不同方式同步。作为替代,FastSync子系统200动
9作操作提供原语,诸如以下示例操作(将两个目录A和B同步)中列举的:
Create new file/directory in A Create new file/directory in B
Copy information (data stream/attributes) from file in A to one丄n B Copy information (data stream/attributes) from file in B to one in A Delete a file/directory in A Delete a file/directory in B
Copy a full sub-tree from A to B____
Copy a full sub-tree from B to A
Delete a full sub-tree in A
Delete a full sub-tree in B
Make a copy of a file from A to a backup location
Make a copy of a file from B to a backup location__^____
该操作足够高级,使得呼叫器无需担心细节,但是它向呼叫器给出以不同方 式解决冲突的选择权。例如,呼叫器有时(并不总是)可能期望在删除或盖写文件
之前将其备份;这种行为在本系统中是可能的。作为另一示例,在某些情况下,呼 叫器总是期望使文件夹B看起来像文件夹A,不管文件夹A已经改变与否。在这 种事件中,呼叫器可简单地选择删除或盖写B中变化、然后从A向B拷贝新内容
的操作。
注意,在FastSync子系统200中不具有分析逻辑将在某些方面使其简化,但 在其它方面使事情更复杂。复杂是指FastSync子系统200总是有必要通过例如更 新数据结构来提供关于文件或目录状态的最新的正确信息。
参照图2,其中示出的示例安排包括应用程序/同步管理器204、客户端呼叫器 /同步分析机构202和FastSync子系统200。在一实现中,这些部件通过定义的接 U集通信。
FastSync子系统200经由巻A 214和巻B 216上的文件系统212和/或适当远 程接口 (未示出)访问目录信息。虽然图2示出本地巻214和通常为远程巻上的网 络服务器的服务器巻216,但是本发明不局限于任何特定巻安排。实际上,本发明 能够将两个远程巻、两个本地巻上的文件同步,并且甚至适于将同一巻上的两个目 录同步。本发明也可支持安装点(mountpoint)巻,其中安装点巻实质上是安装在 另 -巻目录中的巻。因此,虽然本发明通过将本地巻(或某些其基于目录的子集) 与远程巻同步的典型示例描述,但是它们仅仅是非限制性示例。
如图3所示,在列举阶段中,FastSync子系统200估计两个目录314和316, 这可开始于本地巻和服务器上的对应用户名空间的根目录(但是可以是彼此对应的 子目录)。注意,在图3中,目录示为圆形,而文件示为正方形。还要注意,列举 阶段可使用多线程以便于快速操作,如下所述。
通常,列举阶段之后,客户端呼叫器202从FastSync子系统200获得包含关于待同步项目的信息的同步状态数据结构。在图3的示例实施方式中,该结构排列
成同步树320。如下所述,客户端呼叫器202估计该信息,按需参考系统策略等, 并引导FastSync子系统200对这些项目进行一个或多个同步相关的动作(原语)。 这在图3中通过由客户端呼叫器202向动作处理部件326提供的动作请求324示出。
为了提供同步树数据结构320, FastSync子系统200有效地检测各个目录状态, 以便于向呼叫器报告目录之间的差异。建立同步树320作为包含已经改变的文件或 目录的目录名空间子集。为了节省存储器使用,未更改文件不在树中出现,不包含 改变内容或自身未改变的目录不包含在树中。然而,注意未改变但其中具有已改变 文件的目录作为树中的简单节点得以维持以便于保留正确的分层组织。
图4示出包含从图3中待同步的示例目录构建的不同节点的同步树320。在图 4中,树中示出用来保留分层组织的简单节点由下标S字符标示。此外,.与图3类 似,在图4中表示目录的节点示为圆形,而表示文件的节点示为正方形。
可以看出,同步树320中的节点对应于名空间差异或文件(属性和/或内容) 间差异。例如,在图4中,节点E和I (以及E的子节点)不在两个目录中都出现, 因此这些名空间差异与其子节点一起是同步树320中的节点。节点J及其子文件K 在各个目录中相同,因此为了效率目的而不包括在同步树320中。此外,在文件H 中存在文件差异,如图3目录结构316中的阴影框所示,因此该文件与作为其父亲 的简单节点C -起包括在同步树320中。
如图5所示,树320中各个节点(除简单节点以外)包含可以是文件或目录 的一个同步项目的信息的数据结构550。同步项目包含同步描述,该描述可表示同 歩项目的初始、同步状态以及各个项目自从其上次同步状态以来改变的方式。例如, 对于已更改的文件,同步项目应包含来自同步状态的原始上次写入时间、文件大小、 属性等,以及如果存在拷贝时来自两个目录的拷贝的这些域的当前值;(注意,至 少一个值集与初始不同或它应该没有不同步)。
此外,各个同步项包含描述文件"状态"的同步状况域。例如,同步状况指 示文件是否在一个目录或另一个或两者中从初始状态改变,或者是否因为在其存在 的目录中是新创建的文件或在从其消失的目录删除的文件而仅在一个目录中存在。 同步状况足够细化(granular)使得呼叫器可用它作为基础来应用其状态机器以选 择为同步项目要执行的 一 个或多个操作。
呼叫器202使用同步树320及其中的项目来进行分析,诸如上述美国专利申 请序列号No. 11/032,870中所述。基于该分析,呼叫器202随后请求FastSync子系统进行旨在使目录进入同步状态的一个或多个动作。
更具体地,响应于来自呼叫器202的操作请求,FastSync子系统200可向客
户端高速缓存驱动器和服务器巻驱动器(例如重定向器)进行必要的呼叫以进行所 请求的操作和其它操作,并将进展/状况报告回呼叫器202。虽然对本发明并不必要, 但是在一实现中,当一操作被请求,FastSync子系统200将该操作、项目指针、和 上下文信息封装到内部上下文块中,并将该包作为一个工作项目排队给处理线程池 以进行处理。注意,内部排队确保动作以适当顺序执行。当一线程可用于进行一操 作时,FastSync子系统200从该队列中提取一项目并进行该工作,按需回叫呼叫器 202。还要注意,FastSync子系统操作是异步的。然而,因为回叫可在任何时间从 许多线程池线程之一执行,所以回叫上下文没有特定线程亲和性,并且因此由例如 呼叫器202发出的对客户端进展和冲突处理实现的呼叫得以串行化。呼叫器202 也可将进展/状况反映回呼叫应用程序204 (图2)。
图6示出FastSync子系统200的呼叫器202的典型控帝U/流程。在图6中,如 步骤600所示,呼叫器202请求FastSync子系统200进行以上列举阶段。如果如 步骤602所估计的由于某些原因未成功(例如服务器未响应),则进程通过在步骤 616报告适当错误而结束。
在没有错误发生的典型状况中,取而代之,步骤602分支到向工作列表添加
-个或多个动作项目的步骤604 (注意该工作列表与上述呼叫器使其串行化的内部
FastSync —f系统工作项目队列不同)。通常工作列表表示待由呼叫器处理的同步项 佳a
采口 o
步骤606表示从工作列表中选择项目,且步骤608表示处理该所选项目。在 一实现中,文件的最初入队包括以深度优先遍历树,为各个项目选择最初动作并用 于向该列表添加项目,包括旋转队列。注意,在步骤606,工作项目可从树的最初 遍历以及从错误(通过如下所述的步骤710)到达,而且该进程实质上在队列上重 复直到不剩余工作项目,如下所述。
因此,通常对项目的处理是确定对该项目所请求的动作、判定该项目是否具 有不可恢复的错误、或推断该项目已被同步。如果该项目需要被同步,则步骤610 和612表示请求将由FastSync控制器200进行动作的该项目入队。
步骤614重复选择、处理以及可能的入队步骤直到工作列表为空。在为空时, 呼叫器操作完成,尽管有可能在如果FastSync子系统200不能适当进行所请求的 动作时将 -项目添加回工作列表中,如下所述。同步在FastSync子系统200成功完成所有处理且对呼叫器没有留下待处理同步项时真正完成。
每当在步骤612入队一动作(例如通过向FastSync子系统200的API呼叫), FastSync子系统200只要在其具有资源(例如可用线程)可用时就可使其出队。通 常,图7表示这些操作,包括在步骤702等待队列中项目。在一实现中,出队的项 目在由另一线程消耗的另一队列中入队,从而方便如下所述的并行操作。
在该并行实现中,FastSync子系统200通过分立线程处理有关同步项的操作, 因此步骤704之后的步骤表示操作执行(成功或未成功)完成后的控制流程,如分 立线程所进行的。通常如步骤706所示地尝试动作并进行回叫。如果动作成功(步 骤708),总的进程可视为将线程返回到线程池直到随后另一项目需要。如果不成 功,则客户端可允许数次重试,如步骤710返回到步骤706所示。如果不允许重试, 则通过从图7返回到步骤604而如图6所示地将该项目添加回工作列表,例如通过 向呼叫器返回失败代码。
图8更详细地解释并行处理,主要示出在呼叫器的视野中的FastSync子系统 200应用编程接口 (API)。在高层次上,使用FastSync子系统200的同步具有两个 阶段,即如上所述的列举和动作。列举的目的是快速有效地找到并报告需要同步的 目录部分,并且以某些逻辑方式向呼叫器202报告差异。在动作阶段,呼叫器202 为未同步的各个文件或目录选择一个或多个操作,这旨在使项目返回同步状态。
呼叫器202可使用FastSync子系统API集来入队操作,其中FastSync子系统 200将它们简单地添加到队列并立即返回。FastSync子系统200并行地使用多线程 进行该操作,各个线程从队列中取一未决操作并将其执行。 一旦各个操作完成, FastSync子系统200通过执行在该操作入队时提供的回叫来通知呼叫器。然后呼叫 器评估操作结果,并在失败时尝试重试该操作,或者将对该文件或目录的新操作入 队。
注意,呼叫器放弃对其呼叫线程的控制的值得重视的时间的唯一点在列举阶 段过程中,其间FastSync子系统200并不返回控制直到列举完成(成功或失败), 即使它提供频繁回叫,以允许呼叫器更改列举行为或完全中止列举。在动作阶段中, 呼叫器对将与同步项关联的操作入队的请求返回得相当快速,因为FastSync子系 统200对将它们添加到待进行的操作队列只进行较少工作。
在动作阶段结束时,当FastSync子系统200线程完成其工作时,它执行在该 操作入队时提供的回叫,以返回关于操作结果的信息和表示在动作中被操作的文件 或目录的同步项。回叫发生在与用于使操作入队到FastSync子系统200的线程分
13开的线程。在回叫中,呼叫器可以选择重试操作,在此情形中呼叫器将收到报告重 试操作结果的另一回叫。否则,即使呼叫器不期望在完成回叫过程中重试完全相同 的操作,它可以在此后为同一同步项入队新的操作(与以前相同的操作或新操作)。 通过这种方式,并行操作和I/O流水线操作(多个线程用于处理和I/O以减少 空闲时间)通常得到最大化,而总的传输数据得以最小化。为此,在一实现中,在
列举和动作过程中都使用多线程,如图8 —般示出,其中FastSync子系统200在
多线程上列举两边的目录树的内容并在所有线程完成处理时返回。
在列举过程中,各线程打开两个目录下相同的路径,并列举所有孩子(文件 和冃录)。线程将由新线程处理的各个子目录入队,然后通过更改树以包括改变元 素的同步项来处理该目录中的差异。
FastSync子系统200的列举方法的一个其它方面是它如此操作而无需打开待 同步的目录中的每个文件。打开是代价高昂的,尤其是通过网络打开。为了通过打 开每个文件来确定文件性质(诸如改变时间、大小和属性),不得不打开文件、查 询文件信息、以及关闭文件。在本地系统上,三个操作中的每个需要进入操作系统, 而且在远程文件系统上,这表示网络上至少三次往返,且有可能开销更多。
为避免这一代价,FastSync子系统200代之以使用目录列举。对于目录列举, 只需要打开目录一次,之后对该处理的各个查询取得关于多个文件的信息而无需打 开它们。然后,需要关闭目录。 一个主要差别是通过利用目录列举,对每个目录只 需要一次打幵和一次关闭,而不是对每个文件和目录一次。此外,对目录的仅一次 查询产生许多文件的信息,而不是使用逐文件方法对各个文件和目录的一次查询信 息(就操作系统和往返代价而言,文件和目录通常是等价的)。除了最小化与服务 器往返交互之外,这还因降低开销而减少总的传输数据量。
在各个列举发现新目录时,这些目录被排队用于另一线程的列举。因此,目 录及其所有子目录有可能由不同线程并行处理。这使CPU利用率最大化并利用了 1/0流水线操作的优势,特别是在网络上。在网络上,这种流水线操作减小了等待 时间对同步总时间的影响。
在动作阶段中,多个线程处理由呼叫器入队的操作,使各个动作在单个线程 上运行和完成,即每个动作一个线程,且多个动作同时执行。
容易理解,对于可靠性,系统应通过多次重试任何操作的能力来适度处理文 件系统多个部分的中断和不可用(例如由于共享违规)。对于列举,如果列举个别 文件或目录失败则列举阶段不会失败。相反,FastSync子系统200将报告同步树中的某个节点不能被列举。呼叫器可在以后的时间点启动从该子树开始的新列举。
动作阶段可包含更加复杂的失败处理逻辑。例如,当FastSync子系统200报 告对特定同步项操作失败时,它更新该项目以反映新的同步状态和文件相关信息 (诸如属性、大小和改变时间)。呼叫器可选择向FastSync子系统200发送信号来 立即重试先前的动作(并在重试操作完成时接收另一回叫),或者等待并在任何点 将同一操作或新操作的同步项入队。
通过具有该弹性,呼叫器有可能实现许多种可能来响应操作结果。例如,呼 叫器有可能通过等待一段时间并且之后通过将该操作入队并期望打开文件的应用 程序关闭其处理以重试该操作,来响应共享违规。此外,呼叫器有可能在每次失败 之后通过任意复杂状态机运行该项目(例如在许多情形中,最初用来确定如何将文 件同歩的相同状态机)。这样,呼叫器有可能通过确定如何将文件同步的单个无状 态系统一次又一次地运行同步项。该系统可包括互动地询问用户做什么、参考机器 或域策略、制作文件的备份拷贝等。
此外,因为意识到文件或目录不应被锁住很长时间,本发明减小对文件系统 可用性的影响。与一次同步一个文件相反,为了效率和速度一次同步整个目录树的 问题是通过例如打开禁止其它应用程序写入操作的句柄而排他地控制文件不切实 际。然而,当一次同步一个文件时,排他地控制文件、询问呼叫器做什么、之后执 行该动作而不将其释放是可以接受的。FastSync子系统200尝试通过在上一操作完 成过程中不一直控制来自列举的每个单个更改文件或目录而避免耗尽系统资源以 及打扰应用程序用户。
为此,FastSync子系统200通过目录列举来列举目录层次,这允许诸如查询 和文件/子目录创建的目录操作,但是不防止向文件写入。在动作阶段过程中, FastSync子系统200检验文件在列举过程中时该文件在相同状态;通常,该文件在 列举过程中在相同状态,但是它有可能改变。如果文件在列举与动作之间已改变, 则不同的操作有可能比所选的更适合。在这种情形中,FastSync子系统200完成该 操作而无需接触文件或目录,并报告一个失败代码以向呼叫器说明发生了变化。呼 叫器有机会立即响应以重试操作或取消操作。在后者中,呼叫器有可能为该项目提 交新的动作。呼叫器也可命令FastSync子系统200忽略以无害方式改变的文件某 些方面。
因此,FastSync子系统200打开文件(因此将其在某种程度上锁住以免其它 文件系统访问)的唯一时机是列举过程中以及之后在处理操作时的动作过程中的短
15暂时间。因为可适当接受中断,FastSync子系统200及其呼叫器也可处理列举和动 作阶段之间的矛盾。注意通过事务文件系统(诸如事务(Transactional) NTFS,如 美国专利No. 6,856,993中所述),FastSync子系统200有可能将事务上下文与同步 项关联以提供回退同步变化的能力。
虽然对本发明不是必须的,呼叫器应当为任何每文件或每目录处理提供回叫, 但是需要在FastSync子系统200操作过程中进行。虽然FastSync子系统200驱动 列举和动作,但是存在呼叫器需要进行某些处理并向FastSync子系统200提供回 叫的情形。在这些情形中,使用回叫使得FastSync子系统200可提示用户。 一个 示例是在列举过程中,其中呼叫器可选择仅同步全部可用目录的子集而忽略其它。 -个示例是当某些目录是实际上安装在缓慢连接的远程文件系统时、或当存在己知 为仅包含只读数据的目录时。FastSync子系统200可向呼叫器提供回叫使得在列举 H录之前,它执行回叫以实际上询问呼叫器做什么。然后呼叫器可通过指示是否应 列举目录、跳过、或完全中止列举来响应FastSync子系统200。
另一示例是在动作阶段过程中,在拷贝新创建的子目录时,此时对于呼叫器 知道每个文件并避免拷贝某些文件或目录很重要。例如,使某一文件服务器的诸如 版权内容的某些类型文件排除在外很重要,或者不拷贝远程文件系统安装的子目录 很重要。出于这种原因,在拷贝目录树时提供回叫,从而呼叫器可选择跳过某些文 件或目录或者完全取消拷贝。
从上述详细描述可见,提供了同步模型,其中列举和动作方法实际上是独立 的并由FastSync子系统驱动,同时允许呼叫器具有其在同步进程中所需的控制。 同步进程快速、可靠、以及弹性以使不同呼叫器能够获得所列举的信息并请求动作。 因此,本发明提供当前计算中所需的许多益处和优点。
虽然本发明可容许各种更改和替换构建,但是其特定说明实施方式在附图中 示出并在上文中详细描述。然而,应该理解,不旨在将本发明限制于具体公开形式, 相反,本发明将涵盖落在本发明的精神和范围内的所有更改、替换构建、和等效方 案。
权利要求
1. 一种在计算环境中的计算机实现的方法,包括在第一阶段中评估多个目录的内容以列举所述目录之间的差异;以及在第二阶段中响应于请求的动作执行操作以将所述目录同步。
2. 如权利要求1所述的方法,其特征在于,所述第一和第二阶段是响应于至 少一个客户请求而进行的,且所述方法还包括向客户端呼叫器返回包括所列举的所述目录之间的差异的数据结构用于分析。
3. 如权利要求2所述的方法,其特征在于,还包括按照节点树安排所述数据 结构,节点中的至少一些包含与未同步的文件或目录相关的信息。
4. 如权利要求3所述的方法,其特征在于,按照节点树安排所述数据结构包 括排除同步的节点。
5. 如权利要求1所述的方法,其特征在于,在第二阶段中响应于请求的动作 执行操作以将所述目录同步包括处理组合成复合动作的一组原语操作。
6. 如权利要求l所述的方法,其特征在于,评估多个目录的内容包括使用多 线程目录列举来确定两个目录树之间的差异。
7. 如权利要求1所述的方法,其特征在于,响应于请求的动作执行操作包括 排队与同步相关的操作供各个线程并行处理。
8. 如权利要求7所述的方法,还包括在回叫中报告完成的操作的结果。
9. 具有执行时实现如权利要求1所述方法的计算机可执行指令的至少一个计 算机可读介质。
10. —种在具有多个存储单元的计算环境中的系统,包括同步子系统,包括相对于另一存储单元上的对应目录树评估一存储单元上的 目录树,以确定所述目录树之间的差异的装置; 响应于请求报告所述差异的装置;以及 进行所请求的操作以将所述目录树同步的装置。
11. 如权利要求IO所述的系统,其特征在于,评估所述目录树装置包括进行 多线程目录列举的装置。
12. 如权利要求IO所述的系统,其特征在于,进行所请求的操作的装置包括 排队操作供线程池的并行线程进行处理的装置。
13. 具有计算机可执行指令的至少一个计算机可读介质,所述指令在执行时进 行以下步骤,包括从客户端呼叫器接收至少一个与同步相关的请求; 在第一阶段评估多个目录的内容以列举目录之间的差异; 向所述客户端呼叫器返回所述差异;以及在第二阶段进行由所述客户端呼叫器指示的操作以将所述目录同步。
14. 如权利要求13所述的计算机可读介质,其特征在于,向所述客户端呼叫 器返回所述差异包括安排包括具有对应于所述差异的信息的项目节点树的数据结 构。
15. 如权利要求13所述的计算机可读介质,其特征在于,还具有包括使用基 于事务的机制回退至少一个文件上的同步改变的计算机可执行指令。
16. 如权利要求13所述的计算机可读介质,其特征在于,评估多个目录的内 容包括使用多线程目录列举。
17. 如权利要求13所述的计算机可读介质,其特征在于,响应于所请求的动 作执行操作包括排队与同步相关的操作供各个线程并行处理。
18. 如权利要求17所述的计算机可读介质,还具有包括在回叫中报告所完成 的操作的结果的计算机可执行指令。
19. 如权利要求17所述的计算机可读介质,还具有包括尝试失败的操作的计 算机可执行指令。
20. 如权利要求17所述的计算机可读介质,还具有包括确保待同步的项目自 向所述客户端呼叫器返回所述差异以来未改变状态,以及在所述项目上进行所请求 的操作的计算机可执行指令。
全文摘要
描述了一种方便对计算机/文件系统目录进行快速、可靠同步的系统和方法。同步(FastSync)子系统在发现/列举阶段操作以向呼叫客户端提供目录之间的差异集、然后在动作阶段操作以进行由客户端指示的操作来将不同目录同步。发现/列举和动作阶段使用并行操作和I/O(输入/输出)流水线操作。多线程在列举过程中用来列举各个目录的孩子,并将各个子目录入队以便由新线程处理。在动作阶段,当操作被请求时,FastSync子系统将操作、项目指针、和上下文信息封装到内部上下文块中并且将该包排队作为处理线程池要处理的工作项目。
文档编号G06F12/00GK101523358SQ200680012476
公开日2009年9月2日 申请日期2006年4月3日 优先权日2005年5月9日
发明者B·S·奥斯特, N·弗克, T·A·兰根 申请人:微软公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1