针对客户端同步服务更新远程树的制作方法

文档序号:21788339发布日期:2020-08-07 20:38阅读:237来源:国知局
针对客户端同步服务更新远程树的制作方法

相关申请的交叉引用

本申请要求2018年1月5日提交的美国非临时申请号15/863,751;2018年1月5日提交的美国非临时申请号15/863,748;和2017年12月28日提交的美国临时申请号62/611,473的优先权,其全部内容通过引用明确地整体并入本文。



背景技术:

内容管理系统允许用户使用网络跨多个设备访问和管理内容项。一些内容管理系统可允许用户共享内容项并且提供有助于用户协同使用内容项的另外的特征。内容管理系统通常将内容项存储在服务器上并且允许用户通过网络访问内容项。一些内容管理系统还允许将本地副本存储在客户端设备上,以便以更自然的接口(例如,本机应用程序或在客户端设备的文件系统内)向用户提供对内容项的更快访问。另外,这使用户在用户离线时能够访问内容项。内容管理系统尝试跨多个客户端设备和服务器使内容项的副本同步,使得每个副本是相同的。然而,内容项同步是困难的并且与许多技术障碍相关联。

附图说明

通过参考在附图中示出的特定实现方式,本技术的上述和其他优点和特征将变得显而易见。本领域普通技术人员将理解,这些附图仅示出了本技术的一些实例,并且本技术的范围将不限于这些实例。此外,技术人员将通过使用附图如以另外的特征和细节所描述和解释的来理解本技术的原理,在附图中:

图1示出根据一些实施方案的内容管理系统和客户端设备的实例;

图2示出根据一些实施方案的客户端同步服务的实例;

图3示出根据各种实施方案的树数据结构的实例;

图4示出根据各种实施方案的树数据结构的实例;

图5示出根据本主题技术的各种实施方案的用于使用树数据结构来使服务器状态和文件系统状态同步的示例性方法;

图6示出根据本主题技术的各种实施方案的用于在使用树数据结构来使服务器状态和文件系统状态同步时解决冲突的示例性方法;

图7示出根据各种实施方案的示出违反添加操作规则的树数据结构的实例;

图8示出根据本主题技术的各种实施方案的用于使服务器状态和文件系统状态逐步地收敛的示例性方法;

图9示出根据各种实施方案的树数据结构的实例;

图10示出示例性场景;

图11示出根据本主题技术的各种实施方案的两个操作计划的示例性维恩图表示。

图12示出根据本主题技术的各种实施方案的用于管理操作计划改变的示例性方法;

图13示出根据本主题技术的各种实施方案的示例性场景;

图14示出根据本主题技术的各种实施方案的用于更新本地树的示例性方法;

图15示出根据本主题技术的各种实施方案的用于响应于移动或重命名操作而更新本地树的示例性方法;

图16示出根据各种实施方案的树数据结构的实例;

图17示出根据各种实施方案的安装名称空间的概念图示;

图18示出根据本主题技术的各种实施方案的用于在远程树中安装名称空间的示例性方法;

图19a示出根据本主题技术的各种实施方案的用于使内容在内容管理系统与客户端设备之间同步的示例性架构的示意图;

图19b示出根据本主题技术的各种实施方案的用于使内容在内容管理系统与客户端设备之间同步的示例性架构中存储和跟踪内容项的块的示例性配置;

图19c示出根据本主题技术的各种实施方案的由文件日志接口处理客户端设备与内容管理系统上的服务器文件日志之间的示例性通信的图;

图19d示出根据本主题技术的各种实施方案的用于转换客户端设备与内容管理系统上的服务器文件日志之间的通信的示例性过程的图;

图20a示出根据本主题技术的各种实施方案的用于将服务器文件日志数据转换成线性化操作的示例性转换和线性化过程的图;

图20b示出根据本主题技术的各种实施方案的用于将来自客户端设备的操作转换成对服务器文件日志的修订的示例性转换和线性化过程的图;

图20c示出用于将修订从内容管理系统上的服务器文件日志转换成针对客户端设备的操作的示例方法;

图21示出根据本主题技术的各种实施方案的跨名称空间操作的示例性线性化;

图22示出根据本主题技术的各种实施方案的根据针对事件计算的兰波特时钟排序的跨名称空间的事件的图;并且

图23示出用于实现本技术的某些方面的系统的实例。

具体实施方式

本技术的各种实例在下文中详细讨论。虽然讨论了具体的实现方式,但应理解这仅出于说明目的而进行。相关领域的技术人员应认识到,可在不背离本技术的精神和范围的情况下使用其他组件和配置。

计算和网络技术的各种进步使内容管理系统能够向用户提供跨多个设备对内容项的访问。内容项可包括但不限于文件、文档、消息(例如,电子邮件消息或文本消息)、媒体文件(例如,照片、视频和音频文件)、包含多个文件的文件夹或任何其他内容单元。内容项可与多个用户共享、被编辑、删除、添加、重命名或移动。然而,跨若干个计算设备(例如,服务器和客户端设备)以及跨若干个用户账户使这些内容项同步仍然存在缺陷并且充满技术障碍。

为了说明技术障碍中的一些,第一机器(例如,客户端设备或服务器)可向第二机器发送通信,所述第二机器提供关于用户已如何修改由内容管理系统管理的内容项的信息。这些通信可由第二机器使用以使第二机器上的内容项同步,使得对第一机器上的内容项执行的动作反映在第二机器上的内容项中,并且第一机器上的内容项与第二机器上的内容项基本上相同。

然而,由于用于传输通信的一个或多个网络所使用的各种网络路由协议、第一机器或第二机器的技术操作或某种其他原因,可发送若干通信并且通信可被无序地接收。此外,用户可能正在对大量内容项执行大量修改,在短时间内撤消先前的修改,或者对先前修改的内容项或一组内容项快速地执行另外的修改。这增加了这些通信被无序地接收、某些通信过时或第二机器将对不是最新的内容项执行操作的可能性。因此,许多操作可能与内容项的当前状态不兼容。实际上,甚至可能难以检测到一些操作是与其他操作还是与内容项的当前状态冲突。

另外,关于同步动作存在固有的等待时间。例如,第一机器首先检测在第一机器上采取的动作,并且通信被生成并且然后通过网络传输。通信由第二机器接收、处理,所述第二机器仍然可处理先前的通信并且可在第二机器处采取通信中详述的动作。在这种说明性场景中,存在其中第一机器、第二机器和网络的有限计算资源(例如,带宽、存储器、处理时间、处理周期等)引入等待时间的若干个点。当等待时间增加时,由于某种原因通信与内容项的当前状态发生冲突的可能性增加。此外,处理这些冲突通信并且解决冲突也耗费不必要的计算资源(诸如处理时间、内存、能量或带宽),并且进一步增加了等待时间。

为了进一步使事情复杂化,第二机器和/或访问内容项的另外的机器上的相同或不同用户也可能正在对内容项执行修改。因此,上述问题可能成倍增加,并且出现关于本地动作是否与远程动作冲突和/或本地动作是否正在对最新内容项进行操作的另外的技术问题。

所公开的技术满足了本领域对用于内容管理系统的客户端同步服务的需求,这为上述以及其他技术问题提供了技术解决方案。客户端同步服务可被配置来在客户端设备上操作并且标识内容管理系统的服务器上的内容项与客户端设备上的对应内容项之间的同步失配。对于每个同步失配,客户端同步服务可标识使内容项同步所需的操作并且发起那些操作。

客户端同步服务可使用一组树数据结构(“树”)来跟踪服务器上的内容项的状态、客户端设备上的内容项的状态以及它们的同步状态。根据一些实施方案,可使用一组3个树。三个树可包括表示服务器状态的远程树、表示客户端设备上的文件系统状态的本地树、以及表示用于本地树和远程树的合并基础的同步树。合并基础可被认为是本地树和远程树的共同祖先,或者本地树与远程树之间最后已知的同步状态。因此,当所有3个树(例如,远程树、同步树和本地树)相同时,客户端同步服务可确定服务器状态和客户端设备状态同步。

当检测到对内容项的服务器状态或内容项的客户端设备文件系统状态(“文件系统状态”)的修改时,客户端同步服务更新适当的树并且基于树的三权分立来确定服务器状态和文件系统状态是否同步。基于对树中的一个的更新,服务器状态和文件系统状态可变得同步、变得不同步或变得进一步不同步。如果服务器状态和文件系统状态不同步,则客户端同步服务可标识出使服务器状态和文件系统状态收敛并且使服务器状态和文件系统状态更靠近同步状态所需的至少一组初始操作。

通过依赖于所述一组树数据结构来监控服务器状态和文件系统状态提供根源于计算技术对各种技术问题的替代性方案和/或解决方案。例如,客户端同步服务能够跟踪服务器状态以及文件状态,并且存储这两种状态的合并基础的表示。因此,本主题技术的各种实施方案避免了与接收多个通信相关联的技术问题,所述多个通信指定用户如何远程地修改内容项并且确定应在本地实现这些修改的顺序、所述修改是与其他修改冲突还是过时以及远程修改是否与用户在本地执行的本地修改冲突。这些问题中的许多问题是由其他解决方案引起的,所述其他解决方案无法跟踪所涉及的各个参与者(例如,服务器和客户端设备)的状态,并且无法快速地确定状态是否同步。相反,这些其他解决方案依赖于接收有关在没有服务器状态和文件系统状态是否同步的上下文的情况下如何在本地修改内容项的指令。

此外,由于服务器状态和文件系统状态被连续地监控,因此就过程复杂性以及计算时间和资源而言,确定它们是否同步更为有效。如下文进一步详细描述的,客户端同步服务以更加确定的方式使服务器状态和文件系统状态逐步地且有条不紊地实现同步。因此,内容管理系统特征的扩展和测试也更加有效。

内容管理系统

在一些实施方案中,所公开的技术部署在具有内容项同步能力和协同特征等的内容管理系统的上下文中。在图1a中示出示例性系统配置100,所述示例性系统配置100描绘了内容管理系统110与客户端设备150进行交互。

账户

内容管理系统110可与账户相关联地存储内容项,以及执行多种内容项管理任务,诸如检索、修改、浏览和/或共享一个或多个内容项。此外,内容管理系统110可使账户能够从多个客户端设备访问一个或多个内容项。

内容管理系统110支持多个账户。实体(用户、用户组、团队、公司等)可利用内容管理系统创建账户,并且账户细节可存储在账户数据库140中。账户数据库140可存储所注册实体的档案信息。在一些情况下,所注册实体的档案信息包括用户名和/或电子邮件地址。账户数据库140可包括账户管理信息,诸如账户类型(例如,免费或付费账户的各个层)、分配的存储空间、使用的存储空间、具有驻留在其上的所注册内容管理客户端应用程序152的客户端设备150、安全设置、个人配置设置等。

账户数据库140可存储与实体相关联的账户组。组可基于组策略和/或访问控制列表而具有许可权,并且组的成员可继承所述许可权。例如,营销组可访问一组内容项,而工程组可访问另一组内容项。管理员组可修改组、修改用户账户等。

内容项存储

内容管理系统110的特征是内容项的存储,所述内容项可存储在内容存储装置142中。内容项可以是任何数字数据,诸如文档、协同内容项、文本文件、音频文件、图像文件、视频文件、网页、可执行文件、二进制文件等。内容项还可包括用于将内容项与不同行为(诸如文件夹、zip文件、播放列表、专辑等)分组在一起的集合或其他机制。集合可以是指一个文件夹或由共同属性相关或分组的多个内容项。在一些实施方案中,内容存储装置142与其他类型的存储装置或数据库组合以处置特定功能。内容存储装置142可存储内容项,而关于内容项的元数据可存储在元数据数据库146中。同样,关于内容项在内容存储装置142中的存储位置的数据可存储在内容目录144中。另外,关于改变、访问等的数据可存储在服务器文件日志148中。各种存储装置/数据库(诸如内容存储装置142、内容目录144、服务器文件日志148和元数据数据库146)中的每一者可包括多于一个此类存储装置或数据库,并且可分布在许多设备和位置上。其他配置也是可能的。例如,来自内容存储装置142、内容目录144、服务器文件日志148和/或元数据数据库146的数据可组合成一个或多个内容存储装置或数据库,或者进一步被分割成另外的内容存储装置或数据库。因此,内容管理系统110可包括比图1中所示的更多或更少的存储装置和/或数据库。

在一些实施方案中,内容存储装置142与至少一个内容存储服务116相关联,所述至少一个内容存储服务116包括用于管理内容项的存储的软件或其他处理器可执行指令,包括但不限于接收要存储的内容项、准备要存储的内容项、为内容项选择存储位置、从存储装置检索内容项等。在一些实施方案中,内容存储服务116可将内容项划分成更小的小块以用于存储在内容存储装置142处。组成内容项的每个小块的位置可记录在内容目录144中。内容目录144可包括存储在内容存储装置142中的每个内容项的内容条目。内容条目可与标识内容项的唯一id相关联。

在一些实施方案中,标识内容目录144中的内容项的唯一id可从确定性哈希函数导出。导出内容项的唯一id的这种方法可确保如此辨识内容项重复,因为确定性哈希函数将针对相同内容项的每个副本输出相同的标识符,但将针对不同的内容项输出不同的标识符。使用这种方法,内容存储服务116可针对每个内容项输出唯一id。

内容存储服务116还可在元数据数据库146中指定或记录用于内容项的内容路径。内容路径可包括内容项的名称和/或与内容项相关联的文件夹层次结构。例如,内容路径可包括一个文件夹或文件夹路径,其中内容项存储在客户端设备上的本地文件系统中。尽管内容项以块形式存储在内容存储装置142中并且可不存储在树状目录结构下,但是此类目录结构对于用户而言是舒适的导航结构。内容存储服务116可定义或记录用于内容项的内容路径,其中目录结构的“根”节点可以是用于每个账户的名称空间。在名称空间内可以是由账户和/或内容存储服务116的用户定义的目录结构。元数据数据库146可存储用于每个内容项的内容路径作为内容条目的一部分。

在一些实施方案中,名称空间可包括嵌套在目录结构中,好像它们存储在根节点内一样的另外的名称空间。这可在账户访问共享集合时发生。共享集合可在内容管理系统110内分配有其自己的名称空间。虽然一些共享集合实际上是共享集合的根节点,但是它们位于从属于目录结构中的账户命名空间并且可显现为账户文件夹内的文件夹。如上所述,目录结构对于用户而言仅是一种舒适的导航结构,但与内容存储装置142中的内容项的存储位置不相关。

虽然账户查看内容项的目录结构与内容管理系统110处的存储位置不相关,但是目录结构可取决于客户端设备150所使用的文件系统而与客户端设备150上的存储位置相关。

如上所述,内容目录144中的内容条目还可包括组成内容项的每个小块的位置。更具体地,内容条目可包括标识组成内容项的小块在内容存储装置142中的位置的内容指针。

除了内容路径和内容指针之外,内容目录144中的内容条目还可包括标识访问内容项的用户账户的用户账户标识符和/或标识访问内容项的组和/或内容条目所属的名称空间的组标识符。

内容存储服务116可通过标识重复的内容项或组成内容项或内容项版本的重复块来减少所需的存储空间的量。替代存储多个副本,内容存储装置142可存储内容项的单一副本或内容项的块,并且内容目录144可包括指针或其他机制以将重复项链接到单一副本。

内容存储服务116还可与内容项的唯一id相关联地存储元数据,所述元数据描述内容项、内容项类型、文件夹、文件路径和/或内容项与元数据数据库146中的各种账户、集合或组的关系。

内容存储服务116还可将关于改变、访问等的数据日志存储在服务器文件日志148中。服务器文件日志148可包括内容项的唯一id和改变或访问动作的描述以及时间戳或版本号和任何其他相关数据。服务器文件日志148还可包括指向受改变或内容项访问影响的块的指针。内容存储服务可通过使用内容项版本控件来提供撤消操作的能力,所述内容项版本控件跟踪对内容项的改变、内容项的不同版本(包括发散的版本树)以及可从服务器文件日志148获取的改变历史。

内容项同步

内容管理系统110的另一个特征是内容项与至少一个客户端设备150同步。一个或多个客户端设备可采用不同的形式并且具有不同的能力。例如,客户端设备1501是具有可由驻留在其上的多个应用程序访问的本地文件系统的计算设备。客户端设备1502是其中内容项仅可被特定应用程序或通过由特定应用程序给出的许可权访问并且内容项通常存储在应用程序特定空间中或云中的计算设备。客户端设备1503是通过web浏览器访问内容管理系统110并且通过web接口访问内容项的任何客户端设备。虽然示例性客户端设备1501、1502和1503以诸如膝上型计算机、移动设备或web浏览器的形态因素描绘,但是应理解,其描述不限于这些示例性形态因素的设备。例如,移动设备(诸如客户端1502)可具有可由驻留在其上的多个应用程序访问的本地文件系统,或者客户端1502可通过web浏览器访问内容管理系统110。这样,当考虑客户端150的能力时,不应将形态因素视为限制性的。取决于设备的特定能力,在本文关于客户端设备150描述的一个或多个功能在每个客户端设备上可用或不可用——文件访问模型就是一种此类能力。

在许多实施方案中,客户端设备与内容管理系统110的账户相关联,但是在一些实施方案中,客户端设备可使用共享链接来访问内容并且不需要账户。

如上所述,一些客户端设备可使用web浏览器来访问内容管理系统110。然而,客户端设备还可使用在客户端设备150上存储并运行的客户端应用程序152来访问内容管理系统110。客户端应用程序152可包括客户端同步服务156。

客户端同步服务156可与服务器同步服务112通信,以使对内容项的改变在客户端设备150与内容管理系统110之间同步。

客户端设备150可通过客户端同步服务156使内容与内容管理系统110同步。同步可以是平台无关的。也就是说,内容可跨具有不同类型、能力、操作系统等的多个客户端设备同步。客户端同步服务156可使对内容项的任何改变(新的、删除的、修改的、复制的或移动的内容项)在客户端设备150的文件系统的指定位置中同步。

内容项可从客户端设备150同步到内容管理系统110,并且反之亦然。在其中同步是从客户端设备150到内容管理系统110的实施方案中,用户可直接从客户端设备150的文件系统操纵内容项,而客户端同步服务156可针对对所监控文件夹内的文件的改变监控客户端设备150上的目录。

当客户端同步服务156在其监控的目录中检测到内容的写入、移动、复制或删除时,客户端同步服务156可使所述改变同步到内容管理系统服务116。在一些实施方案中,客户端同步服务156可执行内容管理系统服务116的一些功能,包括上述功能,诸如将内容项分成块、对内容项进行哈希以生成唯一标识符等。客户端同步服务156可在客户端存储索引164内对内容进行索引并且将结果保存在存储索引164中。索引可包括存储路径加上每个内容项的唯一服务器标识符和唯一客户端标识符。在一些实施方案中,客户端同步服务156从服务器同步服务112学习唯一服务器标识符,并且从客户端设备150的操作系统学习唯一客户端标识符。,

客户端同步服务156可使用存储索引164来促进客户端存储装置内的至少一部分内容与同内容管理系统110上的用户账户相关联的内容同步。例如,客户端同步服务156可将存储索引164与内容管理系统110进行比较,并且检测客户端存储装置上的内容与同内容管理系统110上的用户账户相关联的内容之间的差异。然后,客户端同步服务156可通过适当地上传、下载、修改和删除客户端存储装置上的内容来尝试协调差异。内容存储服务116可适当地存储内容项的所改变或新块并且更新服务器文件日志148、元数据数据库146、内容目录144、内容存储装置142、账户数据库140等。

当从内容管理系统110同步到客户端设备150时,在服务器文件日志148中记录的内容项的安装、修改、添加、删除、移动可触发使用通知服务117向客户端设备150发送通知。当客户端设备150被告知改变请求时,从对客户端设备已知的最后的同步点开始进行列于服务器文件日志148中的改变。当客户端设备150确定它与内容管理系统110不同步时,客户端同步服务156请求包括改变的内容项块,并且更新其所改变内容项的本地副本。

在一些实施方案中,存储索引164存储树数据结构,其中一个树根据服务器同步服务112反映目录的最新表示,而另一个树根据客户端同步服务156反映目录的最新表示。客户端同步服务可起作用来确保通过从服务器同步服务112请求数据或将客户端设备150上的改变提交给内容管理系统110来使树结构匹配。

有时客户端设备150可能不具有可用的网络连接。在这种场景中,客户端同步服务156可监控用于内容项改变的所链接集合,并且使那些改变形成队列以供稍后在网络连接可用时与内容管理系统110同步。类似地,用户可手动开始、停止、暂停或恢复与内容管理系统110的同步。

客户端同步服务156可使与内容管理系统110上的特定用户账户相关联的所有内容同步。替代地,客户端同步服务156可使与内容管理系统110上的特定用户账户相关联的总内容中的一部分内容同步。选择性地仅使一部分内容同步可保留客户端设备150上的空间并且节省带宽。

在一些实施方案中,客户端同步服务156选择性地存储与特定用户账户相关联的一部分内容,并且将占位符内容项存储在客户端存储装置中以用于内容的其余部分。例如,客户端同步服务156可将其相应完整内容项的具有相同文件名、路径、扩展名、元数据的占位符内容项存储在内容管理系统110上,但是缺少完整内容项的数据。占位符内容项的大小可以为几个字节或更小,而相应的完整内容项可能显著地更大。在客户端设备150尝试访问内容项之后,客户端同步服务156可从内容管理系统110检索内容项的数据,并且将完整内容项提供给访问的客户端设备150。这种方法可提供显著的空间和带宽节省,同时仍然提供对内容管理系统110上的用户内容的完全访问。

协同特征

内容管理系统110的另一个特征是促进用户之间的协同。协同特征包括内容项共享、对内容项进行评论、对内容项进行协同作用、即时消息传送、提供关于内容项的存在状态信息和可见状态信息等。

共享

内容管理系统110可通过共享服务128来管理共享内容。通过提供到内容的链接来共享内容可包括使内容项可从与内容管理系统110进行网络通信的任何计算设备访问。然而,在一些实施方案中,链接可与由内容管理系统110和访问控制列表145实施的访问约束相关联。共享内容还可包括使用共享服务128链接内容以使内容管理系统110内的内容与至少一个另外的用户账户(除与内容项相关联的原始用户账户之外)共享,使得每个用户账户能够访问内容项。另外的用户账户可通过接受内容来获得对内容的访问,所述内容然后可通过web接口服务124或直接从与客户端设备150上的其账户相关联的目录结构内访问。可以平台无关的方式执行共享。也就是说,可跨具有不同类型、能力、操作系统等的多个客户端设备150共享内容。还可跨不同类型的用户账户共享内容。

为了在内容管理系统110内共享内容项,共享服务128可将一个用户账户标识符或多个用户账户标识符添加到访问控制列表数据库145中与内容项相关联的内容条目,因此从而准许所添加用户账户访问内容项。共享服务128还可将用户账户标识符从内容条目移除以约束用户账户对内容项的访问。共享服务128可将内容项标识符、被允许访问内容项的用户账户标识符以及访问级别记录在控制列表数据库145中。例如,在一些实施方案中,与单一内容条目相关联的用户账户标识符可关于相关联内容项对相应的用户账户标识符指定不同的许可权。

为了在内容管理系统110之外共享内容项,共享服务128可生成自定义网络地址(诸如统一资源定位符(url)),所述自定义网络地址允许任何web浏览器访问内容管理系统110中的内容项或集合而无需任何认证。为了实现这一点,共享服务128可在生成的url中包括内容标识数据,所述内容标识数据稍后可用于正确地标识并返回所请求内容项。例如,共享服务128可在生成的url中包括账户标识符和内容路径或内容项标识代码。在选择url之后,可将url中所包括的内容标识数据传输到内容管理系统110,所述内容管理系统110可使用接收的内容标识数据来标识适当的内容项并且返回所述内容项。

除生成url之外,共享服务128还可被配置来在访问控制列表数据库145中记录已创建内容项的url。在一些实施方案中,与内容项相关联的内容条目可包括指示是否已创建内容项的url的url标志。例如,url标志可以是布尔值,所述布尔值初始地设置为0或假以指示尚未创建内容项的url。共享服务128可在生成内容项的url之后将标志的值改变为1或真。

在一些实施方案中,共享服务128可使一组许可权与内容项的url相关联。例如,如果用户尝试通过url访问内容项,则共享服务128可向内容项提供一组受限许可权。受限许可权的实例包括如下约束:用户不能下载内容项、保存内容项、复制内容项、修改内容项等。在一些实施方案中,受限许可权包括仅允许从特定域(即,从公司网络域内)或者由与特定域相关联的账户(例如,与公司账户(例如,@acme.com))相关联的账户访问内容项的约束。

在一些实施方案中,共享服务128也可被配置来停用生成的url。例如,每个内容条目还可包括url活动标志,所述url活动标志指示是否应响应于来自生成的url的请求而返回内容。例如,如果url活动标志设置为1或真,则共享服务128仅可返回由生成的链接请求的内容项。因此,通过改变url活动标志的值,可容易地约束对已经针对其生成url的内容项的访问。这允许用户约束对共享内容项的访问,而无需移动内容项或删除生成的url。同样,共享服务128可通过再次将url活动标志的值改变为1或真来重新激活url。用户因此可容易地恢复对内容项的访问,而无需生成新的url。

在一些实施方案中,内容管理系统110可指定用于上传内容项的url。例如,具有用户账户的第一用户可请求这种url,将url提供给贡献用户,并且贡献用户可使用url将内容项上传到第一用户的用户账户。

团队服务

在一些实施方案中,内容管理系统110包括团队服务130。团队服务130可提供用于创建并管理定义的用户账户团队的功能性。可为公司创建团队以及子团队(例如,事业单位或项目团队等),并且向团队和子团队分配用户账户,或者可针对任何定义的用户账户组创建团队。团队服务130可向团队、私有用户账户文件夹和访问受限的共享文件夹提供公共的共享空间。团队服务还可向管理员提供管理接口以管理团队内的集合和内容项,并且可管理与团队相关联的用户账户。

授权服务

在一些实施方案中,内容管理系统110包括授权服务132。授权服务132确保尝试访问名称空间的用户账户具有访问所述名称空间的适当权限。授权服务132可从客户端应用程序152接收遵循访问命名空间的请求的令牌并且可将允许的能力返回给用户账户。对于具有多个访问级别的用户账户(例如,具有用户权限和管理员权限的用户账户),授权服务132也可需要明确的特权提升来避免管理员的意外动作。

存在状态和可见状态

在一些实施方案中,内容管理系统可提供关于与之共享内容项的用户如何交互或已经与内容项交互的信息。在一些实施方案中,内容管理系统110可报告与之共享内容项的用户当前正在查看内容项。例如,当客户端设备150正在访问内容项时,客户端协同服务160可通知通知服务117。通知服务117然后可向访问相同内容项的其他用户的所有客户端设备通知客户端设备150的用户相对于内容项存在。

在一些实施方案中,内容管理系统110可报告与共享内容项交互的用户的历史。协同服务126可查询数据源(诸如元数据数据库146和服务器文件日志148)以确定用户已经保存内容项,用户尚未查看内容项等,并且使用通知服务117来向其他用户散布这种状态信息,使得他们可知道当前正在或已经查看或修改内容项的人。

协同服务126可促进与内容相关联的评论,即使内容项本身不支持评论功能性。此类评论可存储在元数据数据库146中。

协同服务126可向用户始发和传输通知。例如,用户可在评论中提及另一个用户,并且协同服务126可向该用户发送他已经在评论中被提及的通知。各种其他内容项事件可触发通知,包括删除内容项、共享内容项等。

协同服务126可提供消息传送平台,由此用户可发送和接收即时消息、语音呼叫、电子邮件等。

协同内容项

在一些实施方案中,内容管理服务还可包括协同文档服务134,所述协同文档服务134可提供交互式内容项协同平台,由此用户可同时创建协同内容项,在协同内容项中进行评论并且管理协同内容项内的任务。协同内容项可以是用户可使用协同内容项编辑器创建和编辑的文件并且可包含协同内容项元素。协同内容项元素可包括协同内容项标识符、一个或多个作者标识符、协同内容项文本、协同内容项属性、交互信息、评论、共享用户等。协同内容项元素可存储为数据库实体,所述数据库实体允许搜索和检索协同内容项。多个用户可同时或在不同时间处访问、查看、编辑协同内容项并对协同内容项进行协同。在一些实施方案中,这可通过要求两个用户通过web接口访问内容项并且在所述web接口那里他们可同时处理内容项的相同副本来进行管理。

协同伴随接口

在一些实施方案中,客户端协同服务160可出于显示与呈现在客户端设备150上的内容项相关的信息的目的而提供本机应用程序伴随接口。在其中内容项由在客户端设备150上存储并执行的本机应用程序访问的实施方案中,其中内容项在客户端设备150的文件系统的指定位置中,使得内容项由内容应用程序152管理,本机应用程序可不提供任何本机方式来显示上述寻址的协同数据。在此类实施方案中,客户端协同服务160可检测到用户已经打开了内容项,并且可利用针对内容项的另外的信息(诸如协同数据)提供覆盖。例如,另外的信息可包括对内容项的评论、内容项的状态、先前或当前查看内容项的其他用户的活动。这种覆盖可警告用户改变可能会丢失,因为另一个用户当前正在编辑内容项。

在一些实施方案中,可使用公共或私有应用程序编程接口来访问上文论述的服务或存储装置/数据库中的一者或多者。

某些软件应用程序可以用户的名义通过api访问内容存储装置142。例如,当用户提供认证凭证以读取、写入、创建、删除、共享或以其他方式操纵内容时,软件包(诸如在客户端设备150上运行的应用程序)可以编程方式直接向内容管理系统110进行api调用。

用户可通过由web接口服务124生成和服务的web接口来查看或操纵存储在用户账户中的内容。例如,用户可在web浏览器中导航到由内容管理系统110提供的web地址。通过web接口对内容存储装置142中的内容作出的改变或更新(诸如上传内容项的新版本)可传播回与用户账户相关联的其他客户端设备。例如,各自具有其自己的客户端软件的多个客户端设备可与单一账户相关联,并且所述账户中的内容项可在多个客户端设备中的每一个之间同步。

客户端设备150可以用户的名义连接到内容管理系统110。用户可直接与客户端设备150交互,例如,当客户端设备150是台式计算机或膝上型计算机、电话、电视、物联网设备等时。替代地或另外地,客户端设备150可以用户的名义进行作用而无需用户物理访问客户端设备150,例如当客户端设备150是服务器时。

客户端设备150的一些特征由装配在客户端设备150上的应用程序启用。在一些实施方案中,应用程序可包括内容管理系统特定的组件。例如,内容管理系统特定的组件可以是独立应用程序152、一个或多个应用程序插件和/或浏览器扩展。然而,用户还可通过驻留在客户端设备150上并且被配置来与内容管理系统110通信的第三方应用程序(诸如web浏览器)来与内容管理系统110交互。在各种实现方式中,客户端应用程序152可呈现供用户与内容管理系统110交互的用户接口(ui)。例如,用户可通过与文件系统集成一体的文件系统资源管理器或通过使用web浏览器应用程序显示的网页来与内容管理系统110交互。

在一些实施方案中,客户端应用程序152可被配置来管理内容管理系统110的多于一个账户的内容并且使所述内容同步。在此类实施方案中,客户端应用程序152可保持登录到多个账户并且向多个账户提供正常服务。在一些实施方案中,每个账户可显现为文件系统中的文件夹,并且该文件夹内的所有内容项可与内容管理系统110同步。在一些实施方案中,客户端应用程序152可包括选择器以选择多个账户中的一个作为主要账户或默认账户。

虽然内容管理系统110被呈现为具有特定组件,但是本领域技术人员应当理解,系统100的体系结构配置仅仅是一种可能的配置并且具有更多或更少组件的其他配置是可能的。另外,服务可具有更多或更少的功能,甚至包括描述为与另一服务一起的功能性。此外,本文关于实施方案描述的特征可与关于另一个实施方案描述的特征组合。

虽然系统100被呈现为具有特定组件,但是本领域技术人员应当理解,系统100的体系结构配置仅仅是一种可能的配置并且具有更多或更少组件的其他配置是可能的。

客户端同步服务

图2示出根据一些实施方案的客户端同步服务156的实例。根据一些实施方案,客户端同步服务156可在图1的客户端设备中实现。然而,在其他实施方案中,客户端同步服务156可在另一个计算设备上实现。客户端同步服务156被配置来使对内容项的改变在内容管理系统与在其上运行客户端同步服务156的客户端设备之间同步。

客户端同步服务156可包括文件系统接口205、服务器接口210、树存储装置220、计划器225和调度器230。还可包括另外的或替代性组件。在下文关于图2论述客户端同步服务156及其组件的高级描述。然而,贯穿全文论述客户端同步服务156及其组件的另外的细节和实施方案。

文件系统接口205被配置来处理对客户端设备的本地文件系统上的内容项的改变并且更新本地树。例如,文件系统接口205可与图1的客户端同步服务156通信以检测对客户端设备的本地文件系统上的内容项的改变。也可通过图1的客户端应用程序152来进行并检测改变。文件系统接口205可基于对客户端设备上的内容项的改变(新的、删除的、修改的、复制的、重命名的或移动的内容项)来进行对本地树的更新。

服务器接口210被配置来帮助处理在内容管理系统的远程存储装置处对内容项的远程改变并且更新远程树。例如,服务器接口210可与图1的服务器同步服务112通信,以使对内容项的改变在客户端设备150与内容管理系统110之间同步。可检测对内容管理系统110处的内容项的改变(新的、删除的、修改的、复制的、重命名的或移动的内容项),并且可对远程树进行更新以反映内容管理系统110处的改变。

树存储装置220被配置来存储并维持由客户端同步服务156使用的树数据结构。例如,树存储装置220可存储本地树、同步树和远程树。根据一些实施方案,树存储装置200可将树数据结构存储在持久性存储器(例如,硬盘或其他辅助存储设备)中以及主存储器(例如,ram或其他主存储设备)中,以便减少等待时间和响应时间。例如,在客户端设备或客户端同步服务156启动时,树数据结构可从持久性存储器中检索并且加载到主存储器中。树存储装置220可访问和更新主存储器上的树数据结构,并且在关闭客户端设备或客户端同步服务156之前,树存储装置220可将更新的树数据结构存储在持久性存储器上。因为主存储器的成本昂贵并且在大多数客户端设备上通常受大小限制,所以实现另外的技术改进以减少树数据结构在主存储器上的占用空间。这些技术解决方案在下文中进一步描述。

计划器225被配置来基于树数据结构的状态检测与内容管理系统相关联的服务器状态和与客户端设备相关联的文件系统状态之间的差异。例如,计划器225可确定在远程树与同步树之间是否存在差异。远程树与同步树之间的差异指示对存储在内容管理系统处的一个或多个内容项远程地执行的动作已经致使服务器状态和文件系统状态不同步。类似地,计划器225也可确定在本地树与同步树之间是否存在差异。本地树与同步树之间的差异指示对存储在客户端设备上的一个或多个内容项本地执行的动作已经致使服务器状态和文件系统状态不同步。如果检测到差异,则计划器225生成使树数据结构同步的一组操作。

在一些场景中,基于远程树与同步树之间的差异生成的一组操作和基于本地树与同步树之间的差异生成的一组操作可发生冲突。计划器225也可被配置来将两组操作合并成单一合并的操作计划。

调度器230被配置来采取生成的操作计划并且管理那些操作的执行。根据一些实施方案,调度器230将操作计划中的每个操作转换成需要执行以便执行所述操作的一系列一个或多个任务。在一些场景中,一些任务可能变得过时或不再相关。调度器230被配置来标识那些任务并且取消它们。

树数据结构

图3示出根据各种实施方案的树数据结构的实例。树数据结构可存储在客户端设备处并且由客户端同步服务(诸如图2中的客户端同步服务156)管理。在图3中,示出了树数据结构,所述树数据结构包括远程树310、同步树330和本地树350。

远程树310表示服务器状态或从客户端设备(例如,在内容管理系统的服务器上)远程地存储的内容项的状态。本地树350表示文件系统状态或本地存储在客户端设备上的对应的内容项的状态。同步树330表示本地树和远程树的合并基础。合并基础可被认为是本地树和远程树的共同祖先,或者本地树与远程树之间最后已知的同步状态。

每个树数据结构(例如,远程树310、同步树330或本地树350)可包括一个或多个节点。每个节点可具有一个或多个子节点,并且父级-子级关系由边表示。例如,远程树310包括节点312和314。节点312是节点314的父级,而节点314是节点312的子级。这种父级-子级关系由边316表示。根节点(诸如根节点312)不具有父节点。叶节点(诸如节点314)不具有子节点。

树数据结构中的每个节点可表示内容项(例如,文件、文档、文件夹等)。例如,根节点312可表示与内容管理系统相关联的根文件夹,并且节点314可表示位于该根文件夹中的文件(例如,名为“foo.txt”的文本文件)。树数据结构中的每个节点可包含数据,例如像指定内容项的父节点的文件标识符的目录文件标识符(“dirfileid”)、用于内容项的文件名、用于内容项的文件标识符以及用于内容项的元数据。在一些实施方案中,树数据结构中的每个节点可由其文件标识符来键控或引用并且具有从根到节点的唯一路径。

如上所述,当所有3个树(例如,远程树310、同步树330和本地树350)相同时,客户端同步服务可确定客户端设备的服务器状态和文件系统状态同步。换句话讲,当树的树结构和它们表达的关系相同并且它们的节点中包含的数据也相同时,树同步。相反,如果3个树不相同,则这些树不同步。在图3所示的示例性场景中,远程树310、同步树330和本地树350被示出为相同并且同步,并且因此,服务器状态和文件系统状态同步。

使用树数据结构来跟踪改变

图4示出根据各种实施方案的树数据结构的实例。与图3所示的树数据结构一样,图4所示的树数据结构(包括远程树410、同步树430和本地树450)可存储在客户端设备处并且由客户端同步服务(诸如图2中的客户端同步服务156)管理。在图3中,示出树数据结构。

图4示出在先前同步状态(诸如图3所示的场景)之后的场景,对树中所表示的内容项执行另外的动作以修改内容项,使得树不再同步。同步树430维持先前已知的同步状态的表示并且可由客户端同步服务使用以标识服务器状态与文件系统状态之间的差异以及生成供内容管理系统和/或客户端设备执行以收敛,使得服务器状态和文件系统状态同步的操作。

例如,用户(访问内容项的与同客户端设备相关联的用户相同的用户或不同用户)可对由内容管理系统存储的“foo.txt”内容项进行修改。该内容项由远程树410中的节点414表示。远程树410中所示的修改是移除(例如,将内容项从由内容管理系统管理的空间中移除)或删除foo.txt内容项。这些修改可例如在另一个客户端设备上执行,并且这些修改通过web浏览器同步到由内容管理系统存储的内容项或由内容管理系统存储的内容项。

当在内容管理系统上进行改变时,内容管理系统生成指定所进行的改变的修改数据,并且将修改数据传输到客户端设备上的客户端同步服务。客户端同步服务基于修改数据来更新表示由内容管理系统存储的内容项的服务器状态的远程树。例如,在远程树410中,表示foo.txt内容项的节点414被示出为已删除。

客户端同步服务可标识远程树410与同步树430之间的差异,并且因此确定对在内容管理系统处的内容项的修改已经致使服务器状态和文件系统状态不再同步。客户端同步服务可进一步针对存储在客户端设备上的内容项生成并执行一组或一系列操作,所述一组或一系列操作被配置来使服务器状态和文件系统状态收敛以使得它们将同步。

另外地或替代地,用户(访问内容项的与同内容管理系统处的修改相关联的用户相同的用户或不同用户)可对本地存储在客户端设备上的与内容管理系统相关联的内容项进行修改。例如,用户可向“/root”文件夹添加文件夹“/bar”并且向“/bar”文件夹添加“hi.doc”文档。

当在客户端设备上进行改变时,客户端设备(例如,图1的客户端同步服务156或客户端应用程序152)生成指定所进行的改变的修改数据,并且将修改数据传递到客户端设备上的客户端同步服务。客户端同步服务基于修改数据来更新表示存储在客户端设备上的内容项的文件系统状态的本地树。例如,在本地树450中,节点452和节点454被示出为已添加。节点452和节点454分别表示“/bar”文件夹和“hi.doc”文档。

客户端同步服务可标识本地树450与同步树430之间的差异,并且因此确定对在客户端设备处的内容项的修改已经致使服务器状态和文件系统状态不再同步。客户端同步服务可进一步针对由内容管理系统存储的内容项生成一组或一系列操作,所述一组或一系列操作被配置来使服务器状态和文件系统状态收敛以使得它们将同步。这些操作可被传输到内容管理系统以供执行。

如图4所示,对存储在客户端设备上的内容项和由内容管理系统存储的内容项的修改可基本上同时或在特定时间段内发生。这些修改可反映在树数据结构中并且由客户端同步服务使用以并行生成用于客户端设备和用于内容管理系统的操作。然而,在其他场景中,修改可不必在同一时间段内发生,并且可以按需的方式生成操作。此外,尽管图4示出用于添加内容项和删除内容项的场景,但是还支持其他类型的修改,诸如编辑、重命名、复制或移动内容项。

根据各种实施方案,标识两个树数据结构之间的差异并且生成操作可涉及检查两个树数据结构中的每个节点并且确定是否已经对节点执行动作。动作可包括例如添加节点、删除节点、编辑节点或移动节点。这些动作然后可用于生成被配置来使服务器状态和文件系统状态收敛的操作。

例如,如果两个树数据结构是同步树和远程树,则客户端同步服务可通过例如请求同步树中所有节点的文件标识符来标识同步树中的每个节点。对于同步树中的每个节点或所述节点的文件标识符,客户端同步服务可确定所述节点或所述文件标识符是否也在远程树中。在远程树中没有发现同步树中的节点或文件标识符可指示已经将节点从由远程树表示的服务器状态中删除。因此,客户端同步服务可确定删除动作在远程树上已发生。如果在远程树中发现节点或所述节点的文件标识符,则客户端同步服务可检查远程树中的节点是否已被编辑或移动。

为了确定远程树中的节点是否已相对于同步树中的节点进行编辑,客户端同步服务可将同步树中节点的元数据与远程树中对应的节点(例如,具有相同文件标识符的节点)的元数据进行比较。元数据可包括可用于确定由节点表示的内容项是否已经被编辑的信息。例如,元数据可包括基于内容项或其一部分中的数据生成的一个或多个哈希值。另外地或替代地,元数据可包括内容项的大小值、最后修改的值或其他值。可将同步树中的节点的元数据与远程树中的节点的元数据进行比较。如果元数据不匹配,则对内容项的编辑在由远程树表示的服务器状态下可能已编辑。因此,客户端同步服务可确定对于远程树上的节点已发生编辑动作。如果元数据匹配,则编辑可能没有发生。

为了确定远程树中的节点是否已移动,客户端同步服务可将同步树中节点的位置与远程树中对应的节点(例如,具有相同文件标识符的节点)的位置进行比较。位置可包括例如节点所位于的路径、文件名和/或指定节点的父级的文件标识符的目录文件标识符(“dirfileid”)。如果位置匹配,则移动可能没有发生。另一方面,如果位置不匹配,则内容项的移动在由远程树表示的服务器状态下可能已发生。因此,客户端同步服务可确定对于远程树上的节点已发生移动动作。

为了确定是否已将节点添加到远程树,客户端同步服务可标识在同步树中未发现的远程树中的任何节点或文件标识符。如果节点或文件标识符在远程树中发现而在同步树中没有发现,则客户端同步服务可确定该节点的添加动作在表示服务器状态的远程树上已发生。

尽管关于同步树和远程树对上述实例进行了描述,但是在其他实施方案中,同步树和本地树可发生类似的过程,以便标识同步树与本地树之间的差异并且确定哪些动作在表示文件系统状态的本地树上已发生。

使用树数据结构的同步

图5示出根据本主题技术的各种实施方案的用于使用树数据结构来使服务器状态和文件系统状态同步的示例性方法。尽管本文描述的方法和过程可以特定次序与某些步骤和操作一起示出,但是除非另有说明,否则以类似或替代性次序或并行执行的另外的、更少或替代性步骤和操作在各种实施方案的范围内。方法500可由在客户端设备上运行的系统(例如像图2的客户端同步服务156)来实现。

系统被配置来标识表示由内容管理系统存储的内容项的服务器状态的远程树、表示存储在客户端设备上的对应的内容项的文件系统状态的本地树与表示服务器状态与文件系统状态之间已知的同步状态的同步树之间的差异。基于这些差异,可生成一组操作,所述一组操作如果被执行,则被配置来使服务器状态和文件系统状态朝向三个树数据结构将相同的同步状态收敛。

例如,在操作505处,系统可接收针对由内容管理系统存储或存储在客户端设备上的内容项的修改数据。在操作510处,修改数据可用于更新远程树或本地树。

修改数据指定与内容管理服务相关联的一个或多个内容项进行了何种改变。因此,可从内容管理系统或从客户端设备(例如,从在图1中的客户端设备150上运行的客户端应用程序152)接收修改数据。从内容管理系统接收的修改数据可被称为服务器修改数据。服务器修改数据指定内容管理系统对一个或多个内容项进行了何种改变,并且在操作510处可用于更新远程树。从客户端设备接收的修改数据可被称为客户端修改数据。客户端修改数据指定对客户端设备上的一个或多个内容项进行了何种改变,并且在操作510处可用于更新本地树。

在操作515处,系统可确定由内容管理系统存储的内容项的服务器状态和存储在客户端设备上的内容项的文件系统状态是否同步。因为本地树和远程树表示文件系统状态和服务器状态并且不断更新以跟踪发生在内容管理系统和客户端设备处的改变,所以确定服务器状态和文件系统状态是否同步可通过将本地树和/或远程树与同步树进行比较以发现树之间的差异来完成。发现树之间的差异的这个过程有时被称为使树“差异化”。

根据一些实施方案和场景,确定服务器状态和文件系统状态是否同步可包括标识远程树与同步树之间的差异和/或标识本地树与同步树之间的差异中的一者或多者。远程树与同步树之间的差异可指示对由内容管理系统存储的内容项的改变发生,所述改变可能不会反映在客户端设备处。类似地,本地树与同步树之间的差异可指示对在客户端设备处存储的内容项的改变发生,所述改变可能不会反映在内容管理系统处。

如果树之间不存在差异,则服务器状态和文件系统状态同步,并且不需要同步动作。因此,方法可返回至操作505并且等待新修改数据。另一方面,如果检测到差异,则在操作520处,系统可生成被配置来使服务器状态和文件系统状态收敛的一组操作。

生成的所述一组操作取决于检测到的一个或多个差异。例如,如果两个树之间的差异是添加的内容项,则生成的所述一组操作可包括检索所述添加的内容项并且添加它。如果两个树之间的差异是内容项的删除,则生成的所述一组操作可包括删除内容项。根据一些实施方案,所述一组操作还可包括多次检查以确保维持树约束。如将在下文进一步描述,所述一组操作可能与服务器状态、文件系统状态或未决执行的其他操作的当前状态冲突。因此,系统还可在前进之前解决这些冲突。

如上所述,如果远程树与同步树之间存在差异,则对由内容管理系统存储的内容项的改变可发生,所述改变可能不会反映在客户端设备处。因此,在这种场景中,系统可生成一组客户端操作,所述一组客户端操作被配置来对存储在客户端设备上的内容项进行操作以使服务器状态和文件系统状态收敛,并且在操作525处可将该组客户端操作提供给客户端设备以供执行。

另一方面,如果本地树与同步树之间存在差异,则对在客户端设备处存储的内容项的改变可发生,所述改变可能不会反映在内容管理系统处。因此,在这种场景中,系统可生成一组服务器操作,所述一组服务器操作被配置来对由内容管理系统存储的内容项进行操作以使服务器状态和文件系统状态收敛,并且在操作525处可将该组服务器操作提供给内容管理系统以供执行。在一些情况下,两种情况都可能是正确的,并且一组客户端操作和一组服务器操作可被生成并且在操作525处提供给它们预期的接收者。

一旦将所述一组或多组操作提供给一个或多个预期的接收者,方法就可返回至操作505并且等待新修改数据。所述一组或多组操作可提供朝向服务器状态和文件系统状态的收敛的一个或多个步骤,或者提供使服务器状态和文件系统状态同步所需的所有步骤。例如,内容管理系统可接收所述一组服务器操作并且对由内容管理系统存储的内容项执行所述一组服务器操作。所述一组服务器操作的这种执行引起对由内容管理系统存储的内容项的改变,所述改变在服务器修改数据中被检测和指定,所述服务器修改数据被传输回至系统。然后,系统可更新远程树并且确定服务器状态和文件系统状态是否同步。

客户端设备可接收所述一组客户端操作并且对存储在客户端设备上的内容项执行所述一组客户端操作。所述一组客户端操作的这种执行引起对存储在客户端设备上的内容项的改变,所述改变在客户端修改数据中被检测和指定,所述客户端修改数据被传递至系统。然后,系统可更新本地树并且确定服务器状态和文件系统状态是否同步。方法500的这些操作可继续直到服务器状态和文件系统状态同步。

方法500的操作关于客户端侧和服务器侧(例如,本地树和远程树、文件系统状态和服务器状态、一组客户端操作和一组服务器操作、客户端修改数据和服务器修改数据)进行了描述。在各种实施方案中,与两侧相关联的操作可并行地、顺序地、与另一侧隔离地或组合地发生。

如将进一步详细论述,根据一些实施方案,在提供操作用于执行之前,系统可检查操作以确定它们是否符合一组规则或不变量。如果操作违反规则,则系统执行与违反规则相关联的解决过程。

另外,根据一些实施方案,系统(例如,图2中的客户端同步服务156的调度器230)可管理所述一组操作的执行。例如,所述一组操作中的每个操作可与任务、执行线程、一系列步骤或指令相关联。系统可被配置来执行任务、线程、步骤或指令并且与客户端设备和/或内容管理系统对接以执行所述一组操作并且使服务器状态和文件系统状态收敛。

冲突处置

如上文关于图5所描述,同步树与远程树之间的差异被标识并且用于生成被配置来使服务器状态和文件系统状态收敛的一组客户端操作。然而,在一些情况下,所述一组客户端操作可与本地树的当前状态冲突。类似地,同步树与本地树之间的差异被标识并且用于生成被配置来使服务器状态和文件系统状态收敛的一组服务器操作。然而,所述一组服务器操作可与远程树的当前状态冲突。另外地或替代地,所述一组客户端操作和所述一组服务器操作可彼此冲突或违反由系统维持的另一规则或不变量。因此,本主题技术的各种实施方案通过解决这些冲突来提供另外的技术改进。

例如,图2的客户端同步服务156中的计划器225可标识一组操作(例如,所述一组客户端操作或所述一组服务器操作)中与规则冲突的操作。用于标识冲突的每个规则也可与冲突的解决方案相关联。客户端同步服务可基于冲突的解决方案来更新所述一组操作,或者可通过执行与冲突的解决方案相关联的操作,之后提供所述一组操作以供执行来执行解决冲突。

图6示出根据本主题技术的各种实施方案的用于在使用树数据结构来使服务器状态和文件系统状态同步时解决冲突的示例性方法600。尽管本文描述的方法和过程可以特定次序与某些步骤和操作一起示出,但是除非另有说明,否则以类似或替代性次序或并行执行的另外的、更少或替代性步骤和操作在各种实施方案的范围内。方法600可由在客户端设备上运行的系统(例如像图2的客户端同步服务156)来实现。

在操作620处,系统可接收被配置来使服务器状态和文件系统状态收敛的一组操作。所述一组操作可以是例如所述一组客户端操作、所述一组服务器操作或关于图5的方法500生成和描述的一组组合操作。

在操作650处,系统基于一组规则来标识所述一组操作中的一个或多个违规。所述一组规则可由图2中的客户端同步服务156存储并且针对要解决的操作指定多个约束、不变量或冲突。所述一组规则可应用于树数据结构并且帮助控制同步行为。所述一组规则中的每个规则也可与违反该规则的解决方案相关联或以其他方式链接到所述解决方案。例如,解决方案可包括更改所述一组操作中的一个或多个操作、移除一个或多个操作、添加一个或多个操作、对服务器状态或文件状态进行一个或多个另外的动作或动作的组合。

对于一组操作中的每个操作,系统可确定是否违反所述一组规则中的任何规则。如果违反规则,则系统标识违反的解决方案,并且在操作655处执行所述解决方案。解决方案可包括诸如如下的动作:修改所述一组操作中的一个或多个操作、移除或添加一个或多个操作或对服务器状态或文件状态进行另外的动作。

一旦执行了解决方案动作,系统就可在操作660处基于解决方案和所述一组操作来生成一组解决或重建基础操作,并且在操作665处将所述一组解决操作提供给适当的实体以供执行。例如,可将所述一组解决操作提供给图2中的客户端同步服务146的调度器230以用于管理执行。替代地,如果所述一组操作是一组客户端操作,则可将所述一组解决操作提供给客户端设备。如果所述一组操作是一组服务器操作,则可将所述一组解决操作提供给内容管理服务。另外,图6的方法600可顺序地、并行地或以各种不同的次序基于一组客户端操作和一组服务器操作执行。

根据一些实施方案,每种类型的操作可与相同规则或一组不同规则相关联。例如,操作类型可包括例如添加内容项、删除内容项、编辑内容项、移动内容项、重命名内容项等。所述一组操作可由各自属于上述操作类型中的一个的操作组成。每个操作类型可与特定的一组规则相关联。

出于说明目的,针对“添加”操作类型的一组规则可包括诸如如下的规则:内容项的文件标识符在树中必须是唯一的(例如,树中的两个节点都不能具有相同的文件标识符),指定内容项的父节点的文件标识符的目录文件标识符(“dirfileid”)必须存在于相对的树数据结构中,并且用于内容项的dirfileid和文件名组合未在相对树中使用。

如在此使用的相对树是指表示相对实体的状态的树数据结构。例如,被配置来在客户端设备上操作的一组客户端操作以及对客户端设备上的文件系统所产生的改变将反映在本地树中。因此,针对所述一组客户端操作的相对树是远程树。类似地,一组服务器操作被配置成传输至内容管理系统以供执行并且对服务器状态所产生的改变将反映在远程树中。因此,针对所述一组服务器操作的相对树是本地树。

图7示出根据各种实施方案的示出违反添加操作规则的树数据结构的实例。树数据结构包括远程树710、同步树750和本地树770。当引用本地树770时,远程树710可被认为是相对树。另一方面,当引用远程树710时,本地树770可被认为是相对树。图7示出在远程树710中添加由节点712表示的内容项的一组操作。例如,客户端同步服务可将远程树710与同步树750进行比较,标识差异,并且生成包括添加节点712的一组操作。节点712与为4的fileid、为3的dirfileid(其引用父节点714,所述父节点714是节点712的父级)以及“hi”的文件名相关联。父节点714与为3的fileid、为1的dirfileid(其引用根节点716,所述根节点716是节点714的父级)以及“foo”的文件名相关联。

客户端同步服务可执行图6的方法600,并且确定针对节点712的添加操作违反了针对“添加”操作类型的“内容项的目录文件标识符(“dirfileid”)必须存在于相对的树数据结构中”规则。这在图7中通过本地树770不具有文件id为3的节点来示出,所述节点引用节点712的父节点714。例如,这可在远程树710与同步树750之间的差异被确定并且生成一组操作之后,将对应于节点714的“foo”节点从相对树中移除时发生。

与该规则相关联的解决方案可包括从同步树750中删除从本地树770缺少的节点以使同步树750和本地树770同步并且使远程树710和同步树750重新差异化(例如,发现远程树710与同步树750之间的差异)。在图7所示的场景中,同步树750中的节点754将被移除758,并且差异化操作将开始标识远程树710与同步树750之间的差异。这将导致在所述一组操作中包括对节点714的添加操作以及针对节点712的添加操作。

类似地,违反针对“添加”操作类型的“内容项的文件标识符在树中必须是唯一的”规则可通过包括以下的操作来解决:从内容管理系统请求用于要添加的节点的新文件id,以及当添加节点时使用新文件id。违反针对“添加”操作类型的“内容项的dirfileid和文件名组合未在相对树中使用”规则可通过包括以下的操作来解决:通过与两个节点相关联的元数据检查内容项是否相同。如果内容项相同,则可能已在其他动作中添加了要添加的内容项。如果内容项不相同,则可重命名要添加的内容项的文件名。例如,要添加的内容项的文件名可附加有文本“(冲突版本)”。

逐步进行的计划器

尽管图3、图4和图7所示的各种树数据结构包含相对较少数目的节点并且结构相对简单,但是由系统支持的树数据结构可能大得多且复杂并且具有多个级别,并且每个级别处潜在地具有大数目的节点。因此,在操作期间存储树数据结构所需的存储器用量可能相当大,并且对树数据结构进行操作所需的计算时间和资源可能相当大。例如,发现远程树与同步树和/或本地树与同步树之间的差异并且生成使远程树和同步树和/或本地树和同步树收敛所需的操作可能需要大量的存储器、时间和其他计算资源。

不幸地,这些计算资源是有限的。例如,客户端设备可具有有限数量的可用存储器,并且使树差异化并且生成操作所需的时间长度可阻碍客户端设备、客户端应用程序或由内容管理系统提供的内容管理服务的可用性。此外,使服务器状态和文件系统状态收敛所需的时间越长,对任一状态的中间改变就越可能使正在计算或执行的所述一组操作和/或目标同步状态过时。因此,本主题技术的各种实施方案通过逐步地收敛服务器状态和文件系统状态以及表示它们的树数据结构来提供另外的技术改进。

图8示出根据本主题技术的各种实施方案的用于使服务器状态和文件系统状态逐步地收敛的示例性方法800。尽管本文描述的方法和过程可以特定次序与某些步骤和操作一起示出,但是除非另有说明,否则以类似或替代性次序或并行执行的另外的、更少或替代性步骤和操作在各种实施方案的范围内。方法800可由在客户端设备上运行的系统(例如像图2的客户端同步服务156)来实现。

在操作805处,系统可接收可用于更新远程树或本地树的修改数据。例如,服务器修改数据可从内容管理服务接收并且指定与由内容管理系统存储的一个或多个内容项相关联的修改或其他动作(例如,编辑、添加、删除、移动或重命名)。服务器修改数据可用于更新远程树,所述远程树表示由内容管理系统存储的内容项的服务器状态。类似地,客户端修改数据可从客户端设备(例如,客户端应用程序)接收并且指定与存储在客户端设备上的一个或多个内容项相关联的修改或其他动作。客户端修改数据可用于更新本地树,所述本地树表示存储在客户端设备上的内容项的文件系统状态。

基于指定与内容项相关联的修改的接收的修改数据,在操作810处,系统可标识对应于修改的内容项的节点并且将所述节点添加到修改的内容项列表(例如,将与节点相关联的文件标识符添加到修改的内容项列表)。在系统前进至方法800的下一阶段之前,操作805和810可连续发生达一定时间。例如,另外的修改数据可被接收并且用于更新由系统管理的树并且将节点添加到修改的内容项列表。

为了使服务器状态和文件系统状态逐步地收敛,在操作815处,系统获取修改的内容项列表中的每个节点并且确定如何修改节点(例如,哪些动作与节点相关联)。在一些实施方案中,修改数据可指定对节点的修改。然而,在其他实施方案中,系统可基于远程树与同步树的比较和/或本地树与同步树的比较来确定对节点的修改。例如,修改可包括添加节点、删除节点、编辑节点或移动节点。

对于修改的内容项列表中的每个节点或所述节点的文件标识符,系统可执行一系列检查以确定对节点执行何种修改(如果有的话)。例如,系统可确定文件标识符是否在同步树中但不在远程树中。在远程树中没有发现同步树中的文件标识符可指示已经将节点从由远程树表示的服务器状态中删除。因此,客户端同步服务可确定对节点的删除修改在远程树上已发生。类似地,系统还可确定文件标识符是否在同步树中但不在本地树中。在本地树中没有发现同步树中的文件标识符可指示已经将节点从由本地树表示的文件系统状态中删除。因此,客户端同步服务可确定对节点的删除修改在本地树上已发生。

为了确定是否已对节点执行编辑修改,系统可将同步树中节点的元数据与远程树中对应的节点(例如,具有相同文件标识符的节点)的元数据进行比较。元数据可包括可用于确定由节点表示的内容项是否已经被编辑的信息。例如,元数据可包括基于内容项或其一部分中的数据生成的一个或多个哈希值。另外地或替代地,元数据可包括内容项的大小值、最后修改的值或其他值。如果元数据不匹配,则对内容项的编辑在由远程树表示的服务器状态和/或由本地树表示的文件系统状态下可能已编辑。因此,系统可确定对于远程树和/或本地树上的节点已发生编辑动作。

为了确定远程树中的节点是否已移动,系统可将同步树中节点的位置与远程树和/或本地树中对应的节点(例如,具有相同文件标识符的节点)的位置进行比较。位置可包括例如节点所位于的路径、文件名和/或指定节点的父级的文件标识符的目录文件标识符(“dirfileid”)。如果位置匹配,则移动可能没有发生。另一方面,如果位置不匹配,则内容项的移动在远程树或本地树中可能已发生。因此,客户端同步服务可确定对于远程树和/或本地树上的节点已发生移动动作。

为了确定是否已将节点添加到远程树,系统可确定修改的内容项列表中的文件标识符是在远程树中还是在本地树中,但不是在同步树中。如果在远程树或本地树中发现文件标识符,而在同步树中没有发现文件标识符,则系统可确定已对于该节点发生添加修改。

一旦对修改的内容项列表中的节点的一个或多个修改被确定,则在操作820处,系统可确定那些修改中的任一个是否具有相依性。如将关于图9进一步示出,当例如不首先发生另一修改就无法执行所述修改时,对节点的修改具有相依性。

如果修改不具有相依性,则在操作825处,系统将修改添加到不受阻止的动作列表。如果修改具有相依性,则在操作830处所述修改被暂时阻止,并且如果不首先处理另一修改就不能执行。在处理修改中的每一个之后,系统可从修改的内容项列表中清除与修改相关联的文件标识符。

图9示出根据各种实施方案的树数据结构的实例。图9所示的树数据结构可存储在客户端设备处并且由系统(诸如图2中的客户端同步服务156)管理。出于说明的目的,在图9中仅示出和描述了远程树910和同步树950。类似的操作和描述也可应用于本地树。

远程树910包括文件标识符为1的根节点912、文件标识符为5且文件名为“foo”的节点914、文件标识符为6且文件名为“bar”的节点916以及文件标识符为7且文件名为“bye”的节点918。同步树包括文件标识符为1的根节点952。

基于图9所示的树数据结构,系统可标识出在操作810处文件标识符为5、6和7的节点已被修改,并且将这些节点添加到修改的内容项列表,如由图9中的参考标号980所示。在操作815处,系统确定对修改的内容项列表中的节点的修改列表。如由远程树910与同步树950的比较可见,节点914、916和918已添加到远程树910。更具体地,如图9中的参考标号982所示,文件标识符为6且名为“bar”的节点916已作为子级添加到文件标识符为5的节点914。这由参考标号982中的“add(6,5,bar)”条目表示。文件标识符为7且名为“bye”的节点918已作为子级添加到文件标识符为5的节点914。这由参考标号982中的“add(7,5,bye)”条目表示。文件标识符为5且名为“foo”的节点914已作为子级添加到文件标识符为1的根节点912。这由参考标号982中的“add(5,/root,foo)”条目表示。

在操作820处,系统确定节点914的添加修改不具有相依性,并且因此未受到阻止。因此,在操作825处,系统将与节点914相关联的修改(例如,由参考标号982中的“add(5,/root,foo)”条目表示的修改)添加到不受阻止的动作列表。这在图9的附图标号984中可见。另一方面,由参考标号982中的“add(6,5,bar)”条目和“add(7,5,bye)”条目表示的针对节点916和918的修改取决于首先发生的由“add(5,/root,foo)”表示的修改。换句话讲,在添加节点914之前,不能添加节点916和/或节点918。因此,这些修改包括在由图9中的参考标号986示出的受阻止的动作列表中。

返回至图8的方法800,在操作835处,系统可从不受阻止的动作列表中选择一组修改并且基于选择的所述一组修改来生成一组操作。所述一组操作被配置来使服务器状态和文件系统状态收敛。生成的所述一组操作取决于从不受阻止列表中选择的所述一组修改。例如,如果选择的所述一组修改包括与图9中的节点914相关联的添加修改(例如,由参考标号984中的“add(5,/root,foo)”条目表示的修改),则生成的所述一组操作可包括从内容管理系统检索添加的内容项并且将其添加到客户端设备的本地文件系统。

根据一些实施方案,系统可从不受阻止的动作列表中选择所有修改以生成一组或多组操作。然而,在一些场景中,不受阻止列表中的修改数目可能相当高,并且处理所有修改所需的计算资源(例如,存储器和处理时间)相当大。为了减轻这些技术负担,系统可在不受阻止的动作列表中选择较小的一组修改,以便逐步地处理。例如,系统可选择第一个或前x个或第一或前x百分比的修改来生成操作。在过程的进一步迭代中,可处理不受阻止列表中的剩余修改。

在一些实施方案中,可对不受阻止列表中的修改进行排序以用于处理。可基于例如修改类型(例如,删除修改优先于添加修改)、与修改相关联的元数据(例如,对较小大小的内容项的添加修改优先于对较大大小的内容项的添加修改,对较大大小的内容项的删除修改优先于对较小大小的内容项的删除修改等)来对修改进行排序。

这些排序规则可由系统存储并且可被设计来实现用于内容同步的各种性能目标。例如,删除修改可优先于添加修改,以便在可添加新内容项之前为用户释放尽可能多的可能的有限存储空间。较小内容项的添加可优先于较大内容项,以便关于所添加的内容项的数目尽快地提供尽可能多的进步。

在操作835处,系统可将所述一组操作提供给内容管理系统和/或客户端设备。如上所述,与由内容管理系统执行的动作相关联的修改可能不会反映在客户端设备处。因此,在这种场景中,系统可生成一组客户端操作,所述一组客户端操作被配置来对存储在客户端设备上的内容项进行操作以使服务器状态和文件系统状态收敛,并且在操作835处可将该组客户端操作提供给客户端设备以供执行。

另一方面,与由客户端设备执行的动作相关联的修改可能不会反映在内容管理系统处。因此,在这种场景中,系统可生成一组服务器操作,所述一组服务器操作被配置来对由内容管理系统存储的内容项进行操作以使服务器状态和文件系统状态收敛,并且在操作835处可将该组服务器操作提供给内容管理系统以供执行。

在一些情况下,两种情况都可能是正确的,并且一组客户端操作和一组服务器操作可被生成并且在操作835处提供给它们预期的接收者。所述一组操作还可包括多次检查以确保维持树约束。例如,所述一组操作可解决如关于图6所论述的各种冲突或约束。

一旦将所述一组或多组操作提供给一个或多个预期的接收者,方法就可返回至操作805并且等待新修改数据。例如,关于图9所示的场景,所述一组操作可包括从内容管理系统检索与节点914相关联的内容项,并且将其添加到客户端设备的本地文件系统。这将导致在本地树(图9中未示出)和同步树950中添加对应于节点914的节点。在图8的过程800的下一次迭代中,由参考标号982中的“add(6,5,bar)”条目和“add(7,5,bye)”条目表示的节点916和节点918的添加修改不再被阻止,因为它们的父级,即,节点914已被添加到同步树。因此,在参考标号982中由“add(6,5,bar)”条目和“add(7,5,bye)”条目表示的节点916和节点918的添加修改可被添加到不受阻止的动作列表并且用于生成被配置来使服务器状态和文件系统状态收敛的一组或多组操作。

所述一组或多组操作可针对服务器状态和文件系统状态的逐步收敛提供一个或多个步骤。尽管实现逐步过程有时可能更加复杂,但是逐步过程可实现处理时间减少和所需的存储器减少。这些以及其他初始技术改进自然地导致了另外的技术改进。例如,因为处理时间减少,所以来自客户端设备或内容管理系统的另外的改变使得某些修改陈旧或过时的可能性也降低。

关于图9,出于说明的目的,内容项、修改、动作或文件标识符的各种分组被描述为列表。其他类型的数据结构也兼容。例如,不受阻止的动作列表可实现为b树数据结构,以便保持数据分类并且允许以对数时间进行搜索、按顺序访问、插入和删除。

调度器

在一些实施方案中,客户端同步服务可生成被配置来使服务器状态和文件系统状态的收敛一组或一系列操作,并且将这些操作提供给内容管理系统或客户端设备以供执行。然而,在一些场景中,客户端设备的文件系统上或内容管理系统上的改变可致使生成的所述一组操作在所述一组操作处于执行过程中时变得过时或陈旧。各种实施方案涉及提供对这些和其他技术问题的技术解决方案。例如,客户端同步服务可被配置来监控客户端设备的文件系统上或内容管理系统上的改变并且根据需要更新客户端设备和/或内容管理。此外,客户端同步服务可被配置来通过允许同时执行操作来提高性能并且减少处理时间。

根据一些实施方案,图2所示的客户端同步服务156的计划器225可生成由无序的一组操作组成的一个或多个操作计划。计划内的所有操作都没有相依性,并且因此能够以单独线程或以任何次序同时执行。根据一些实施方案,计划中的操作是可由内容管理系统和/或客户端设备采取的抽象指令,以便使状态和树数据结构收敛。示例性指令可包括远程或本地添加内容项、远程或本地删除内容项、远程或本地编辑内容项或远程或本地移动内容项。

图2所示的客户端同步服务156的调度器230可被配置来从计划器225接收操作计划,管理计划中的操作的执行,确定计划是否已被更新或改变并且管理更新或改变的计划的执行。例如,调度器230可与文件系统接口205和服务器接口210协作以执行实现计划中的操作所需的任务和步骤。这可包括从文件系统或内容管理系统接收确认,或者当没有网络连接时或当内容项被某种其他应用程序锁定时接收错误处置活动(诸如处置重试)。

每个操作可由称为任务的脚本或线程来实现。任务与相关联操作的应用程序协作,并且可包括实现操作所需的一个或多个步骤。例如,“本地添加操作”可指示内容项已被添加到客户端设备的本地文件系统,并且因此内容项应被添加在内容管理系统处以便使服务器状态和文件系统状态同步。因此,本地添加操作可与“本地添加任务”相关联,所述“本地添加任务”包括实现本地添加操作所需的一个或多个步骤。所述步骤可包括以下中的一项或多项:向内容管理系统通知新内容项,将内容项以一个或多个数据块上传至内容管理系统,确认内容管理系统已接收到所有数据块,确保内容项不被破坏,将内容项的元数据上传至内容管理系统,并且承诺将内容项添加到内容管理系统处的适当位置。

任务可开始执行,在等待其他事件完成时在明确定义的点处暂停,当事件发生时重新开始,并且最后终止。根据一些实施方案,调度器230被配置来取消、重新生成或替换任务。例如,基于对服务器状态或文件系统状态的改变,任务可在执行之前变得失效,并且调度器230可在失效任务被执行之前将其取消。

如上所述,计划器225可基于一组树数据结构(例如,远程树、同步树和本地树)来生成操作计划。随时间推移,计划器225基于树数据结构的状态来继续生成操作计划。如果树数据结构改变以反映服务器状态和文件系统状态的状态,则计划器225还可生成与先前计划不同的新的更新计划。调度器230执行由计划器225生成的每个操作计划。

在一些场景中,后续计划的操作的改变可致使意外的行为与执行过程中的先前计划中的操作发生冲突。例如,当正在执行第一计划中的操作时,操作中的一个或多个在第二计划中被取消(或不存在)。为了说明,图10示出示例性场景,其中在时间t1处,由远程树表示的服务器状态和由本地树表示的文件系统状态同步,如通过远程树、同步树和本地树全部匹配示出。基于该同步状态,计划器225可在t1处生成无操作的计划(例如,空计划)。

客户端设备上的用户可从本地文件系统中删除内容项a,或者将内容项a从由客户端同步服务156管理的文件夹中移出,这通过在时间t2处将节点a从本地树中移除来反映。计划器225可在时间t2处基于树数据结构的状态来生成包括操作localdelete(a)的计划。调度器230可发起实现localdelete(a)操作所需的任务或步骤。这些步骤可包括将指令传输至内容管理系统以删除内容项a。

在将删除内容项a的指令传输至内容管理系统之后,客户端设备上的用户可撤消对内容项a的删除或将内容项a移动回至先前的位置。在时间t3处基于此新动作来更新本地树,并且计划器可生成无操作的空的新计划。树数据结构再次匹配,并且系统在时间t3处处于同步状态。

然而,因为将删除内容项a的指令传输至内容管理系统,所以内容管理系统将内容项a从服务器状态删除。尽管调度器230可尝试取消对内容项a的删除,但是指令可能已经由内容管理系统传输并完成。服务器中的该改变被传送至客户端同步服务器156,所述客户端同步服务器156通过在时间t4处删除节点a来更新远程树。计划器225可注意到远程树中的改变以及远程树与同步树之间的差异,并且确定在服务器状态下内容项a被移除。因此,计划器225将在时间t4处创建具有remotedelete(a)操作的计划。为了使服务器状态和文件系统状态同步,最终将内容项a从客户端设备和本地树中删除。

问题在于,将内容项a从服务器状态中移除,生成remotedelete(a)操作以及最终将内容项a从文件系统状态中移除都不是有意的并且往后(downtheline)可能会给用户带来进一步的问题。此外,在一些情况下,应用程序或过程也可访问内容项,并且意外的同步行为可引起一连串的另外的技术问题。各种实施方案涉及在使服务器状态与文件系统状态之间的内容项同步时防止意外的后果发生。

根据一些实施方案,当取消不再在操作计划中的失效操作的任务时,调度器230可在前进至发起其他任务的执行之前等待取消完成。例如,调度器230可在进行其他任务之前等待从客户端设备或内容管理系统接收取消的确认。调度器230可确定是否已发起任务,并且如果尚未发起任务,则调度器可取消任务并且确认任务不再等待执行。如果已发起任务,则确认可来自客户端设备或内容管理系统,并且通知调度器与已取消任务相关联的所有步骤都已撤消。根据一些实现方式,调度器230一旦发起任务就不允许取消任务。对于所有任务或任务或任务类型的某些子集(例如,向内容管理系统发送关于文件系统状态的更新以用于与服务器状态同步的提交任务),情况可能如此。

为了提高性能并且允许同时执行任务以及取消任务,调度器230还可被配置来基于第一操作计划与更新的第二操作计划之间的差异来管理任务的执行和取消。图11示出根据本主题技术的各种实施方案的两个操作计划的示例性维恩图1100表示。计划器225可利用第一组操作来生成计划11110,接收对树数据结构的更新,并且利用第二组操作来生成更新的计划21120。

计划11110和计划21120可共享多个共有操作,所述多个共有操作由维恩图1100的部分1130表示。计划11110和计划21120也可共享不共有的多个操作。例如,基于由计划器225检测到的对树结构的更新,在计划11110中不在计划21120中的操作失效并且不再是当前的。计划11110的这些失效操作由维恩图1100的部分1140表示。在计划21120中不在计划11110中的新操作由部分1150表示。表示计划11110与计划21120之间的差异和共性的部分1130、1140和1150中的每一个可包括无操作或许多操作,这取决于对树数据结构中所反映的服务器状态和文件系统状态的更新。

因为部分1140中的操作不再在最新计划中,所以调度器230可取消与这些操作相关联的任务。为了防止意外的同步行为,推迟与在计划2中不在计划1中(例如,在部分1150中)的操作相关联的任务,直到完成取消与部分1140中的操作相关联的任务为止。然而,因为每个计划中的操作被配置成能够同时执行,所以与由部分1130表示的计划1和计划2的相交部中的操作相关联的任务可与取消与部分1140中的操作相关联的任务同时执行,而无需等待它们完成。通过允许同时取消与部分1140相关联的任务和执行与部分1130相关联的任务,可实现更有效地使用可用的计算资源以及减少处理时间。

图12示出根据本主题技术的各种实施方案的用于管理操作计划改变的示例性方法。尽管本文描述的方法和过程可以特定次序与某些步骤和操作一起示出,但是除非另有说明,否则以类似或替代性次序或并行执行的另外的、更少或替代性步骤和操作在各种实施方案的范围内。方法1200可由在客户端设备上运行的系统(例如像图2的客户端同步服务156)来实现。

系统可被配置来从内容管理系统和/或客户端设备接收关于与内容管理服务相关联的内容项的更新。例如,系统可接收由内容管理服务存储的内容项的服务器修改数据,并且基于所述服务器修改数据来更新远程树。远程树表示由内容管理系统存储的内容项的服务器状态。系统还可接收针对存储在客户端设备上的内容项的客户端修改数据,并且基于所述客户端修改数据来更新本地树。本地树表示存储在客户端设备上的内容项的文件系统状态。

在操作1205处,系统可接收第一组操作,所述第一组操作被配置来使与内容管理系统相关联的服务器状态和与客户端设备相关联的文件系统状态收敛。例如,系统可标识同步树与远程树之间或同步树与本地树之间的差异,并且基于树之间的任何差异来生成所述第一组操作。同步树表示服务器状态与文件系统状态之间已知的同步状态。

系统可开始实现所述第一组操作。例如,在一些情况下,操作呈准备传输至内容管理系统和/或客户端设备以供执行的格式。在其他情况下,操作可转变成可由系统管理的一个或多个任务、脚本或执行线程。系统可根据任务、脚本或执行线程与内容管理系统和/或客户端设备对接,以便使服务器状态和文件系统状态收敛。

在这期间,系统可继续从内容管理系统和/或客户端设备接收关于与内容管理服务相关联的内容项的修改数据。基于所述修改数据,系统可更新远程树或本地树并且基于对树数据结构的更新来生成第二组操作。在操作1210处,系统可接收所述第二组操作。

在操作1215处,系统标识在所述第一组操作中不在所述第二组操作中的第一操作(如果有的话)。如果系统发现在所述第一组操作中不在所述第二组操作中的操作,则由于修改数据中所指定的改变,该操作可能失效且过时。因此,系统将在操作1220处发起取消第一操作。取消第一操作可包括多个步骤、用于这些步骤的多个确认接收以及大量的处理时间。

在操作1225处,系统标识包括在所述第一组操作和所述第二组操作两者中的第二操作(如果有的话)。如果系统发现所述第一组操作和所述第二组操作两者中的操作,则尽管具有修改数据中所指定的修改,该操作可能仍然无效。此外,由于两组操作中的操作被配置成能够相对于所述一组中的其他操作同时执行或以任何次序执行,因此当取消第一操作时第二操作可继续执行。因此,系统将在操作1230处发起执行第二操作,而无需等待第一操作完成取消。

在操作1235处,系统标识在所述第二组操作中但不在所述第一组操作中的第三操作(如果有的话)。如果系统发现在所述第二组操作中不在所述第一组操作中的操作,则由于修改数据中所指定的改变,该操作可能是新操作。为了防止意外的后果出现,系统将发起等待第一操作完成取消。在操作1240处,系统可确定第一操作已完成取消,并且因此在操作1245处发起执行第三操作。

更新本地树

如上所述,本地树被配置来反映存储在客户端设备的本地文件系统上的内容项的文件系统状态。例如,图2中的客户端同步服务156的文件系统接口205被配置来对客户端设备的本地文件系统进行改变(例如,添加、删除、移动、编辑或重命名一个或多个内容项),检测对本地文件系统的改变,并且基于对本地文件系统的改变来更新本地树。这些改变可能是由文件系统上的用户动作、在客户端设备上运行的第三方应用程序、或由使文件系统状态与服务器状态同步的客户端同步服务引起的。

本主题技术的各种实施方案提供了各种技术解决方案以基于对本地文件系统的改变来更新本地树。在各种实施方案中,本地树以及其他树数据结构对于客户端设备与内容管理系统之间的同步过程至关重要。例如,一旦对本地树进行了更新,其余的系统就对所述更新做出反应,并且在一些情况下,对本地树的改变可同步并应用到内容管理系统处的服务器状态。因此,重要的是要注意本地树的更新方式。

例如,如果用户将文件从a.txt重命名为b.txt,则在一些情况下,系统可检测到内容项a.txt的删除和内容项b.txt的添加。这可致使在本地树上删除a.txt的节点并且添加b.txt的节点。然而,这导致在一定时间内,本地树上不存在用于重命名的内容项的节点的情况。这可致使对数据完整性造成显著损坏,因为在添加b.txt的节点之前,客户端设备、客户端应用程序和/或客户端同步服务可关闭、出现故障或重新启动,并且因此,用户的内容项丢失。然后,用户内容项的丢失可同步到内容管理系统处的服务器状态。用户将内容项从一个位置移动到另一个位置会带来类似的风险。

另外,对本地文件系统的改变可被无序地检测并且可包括大量的改变,这些改变不一定全部与用户或应用程序的单一动作相关。在对本地文件系统进行许多改变时,客户端应用程序也可被关闭或不运行。在启动时,客户端应用程序可爬取本地文件系统,将所述本地文件系统与本地树进行比较,并且确定在客户端应用程序关闭时本地文件系统发生了哪些改变。这些改变可能并不呈正确的时间顺序。如果没有仔细地更新本地树,则这些因素也可导致意外的同步行为。

一组约束可用于确保树数据结构的完整性并且防止意外的同步行为。约束可包括例如(1)树中的所有节点都与文件标识符(fileid)相关联,(2)树中的所有节点都具有唯一文件标识符,(3)不能删除非空父节点,(4)已删除的节点实际上是从由客户端同步服务管理的位置中删除(而不仅仅是移动)或移除的,(5)所有同级节点都具有唯一文件名,而不管大小写如何,(6)所有节点必须具有现有的父级,和/或(7)所有同级节点都同意其父级文件id(dirfileid)。在一些实现方式中,可使用上述约束的子集,可使用替代的或另外的约束,或它们的组合。所述一组约束可应用到所有树数据结构或者仅应用到树数据结构的子集,而不同的一组或多组约束可应用到其他树数据结构。

当检测到对本地文件系统的改变时,可对照所述一组约束检查所述改变。如果改变与所述一组约束一致,则可基于对本地文件系统的改变来更新本地树。如果改变违反约束中的一条,则约束可需要满足另外的条件。例如,约束可需要在将改变应用到本地树之前观察另外的路径或发生文件事件,执行一个或多个补救步骤或它们的组合。当动作发生以满足某些约束(例如,采取补救步骤,观察到另外的路径或发生文件事件)时,可违反其他约束。因此,可连续地检查所述一组约束,直到满足所有约束为止。一旦满足约束,与文件事件相关联的改变就可应用到本地树。

客户端同步服务156可响应于在本地文件系统上检测到的改变来检测文件事件。每个文件事件可与内容项(例如,内容项的文件标识符)和事件类型(例如,添加、移动、删除或编辑事件类型)相关联。每个文件事件还可与指定相关联内容项的路径或位置的路径相关联。与检测到的文件事件相关联的路径可填充客户端同步服务观察到的一组路径。然而,在一些情况下,由于一个或多个约束违反,可观察到与文件事件不对应的路径。

图13示出根据本主题技术的各种实施方案的示例性场景。具体地,图13示出当检测到文件事件1315时本地树1310的当前状态。例如,客户端同步服务可将文件系统与本地树1310进行比较,并且发现内容项在路径/root/a/b/c.txt处存在于文件系统中,但是用于内容项的节点在/root/a/b/c.txt处不存在于本地树1310中。因此,可生成指定在本地树1310上需要在/root/a/b/c.txt处添加节点的文件事件1315。

客户端同步服务可将文件事件1315添加到一组观察到的路径以供更新,并且确定观察到的路径1320是否与一组约束一致并且发现观察到的路径1320或文件事件1315是否违反了所述组中的约束中的一个。在图13所示的场景中,观察到的路径1320违反了“所有节点必须具有现有父级”约束。更具体地,在/root/a/b/c.txt处要添加的节点的父级不存在,所述节点的祖父级也不存在。因此,在将改变应用到本地树之前,必须观察另外的路径(父节点和祖父节点)。

客户端同步服务可检测另外的文件事件,并且将它们添加到所述一组观察到的路径中以供更新。例如,客户端同步服务可检测到/root/a文件事件和添加/root/a/b文件事件,并且向所述一组观察到的路径添加/root/a路径和添加/root/a/b路径。一旦观察到这些路径,就满足违反的约束(并且没有违反其他约束)。因此,用于更新的所有观察到的文件事件可应用到本地树。更具体地,可在/root/a处添加节点,可在/root/a/b处添加节点,并且可在/root/a/b/c.txt处添加节点。因此,客户端同步服务将相关的文件事件分组在一起以进行原子更新或整体更新。如将进一步详细描述,将相关的文件事件分组在一起以对本地树进行原子更新增加了树数据结构的完整性,防止意外的同步行为,并且防止本地树中出现中间状态。

图14示出根据本主题技术的各种实施方案的用于更新本地树的示例性方法。尽管本文描述的方法和过程可以特定次序与某些步骤和操作一起示出,但是除非另有说明,否则以类似或替代性次序或并行执行的另外的、更少或替代性步骤和操作在各种实施方案的范围内。方法1400可由在客户端设备上运行的系统(例如像图2的客户端同步服务156)来实现。

在操作1405处,系统检测文件事件并且将与文件事件相关联的路径添加到一组观察到的路径。例如,在启动时,系统可爬取客户端设备的文件系统,收集关于文件系统的信息,并且将收集到的信息与表示文件系统的最后已知状态的本地树进行比较。系统可标识本地树与客户端设备的文件系统之间的差异,并且基于标识的差异来生成多个文件事件。替代地或另外地,系统可在运行时间期间监控文件系统,检测未反映在本地树中的对文件系统进行的改变,并且基于对文件系统的检测到的改变来生成文件事件。可将生成的文件事件视为由系统进行的关于文件系统的观察。

在操作1410处,系统将对照一组本地树约束检查所述一组观察到的路径以确定观察到的路径中的任一个是否违反本地树约束。如果没有观察到的路径违反所述一组本地树约束中的任何约束,则在操作1435处,可使用所述一组观察到的路径来更新本地树。

约束的每个违反可与被配置来满足约束的补救相关联。例如,如图13所示,违反“所有节点都必须具有现有父级”约束可与观察到添加父节点的要求相关联。

在其他情况下,违反约束可需要采取动作来解决违反并且满足约束。例如,当用户复制文件系统中的内容项并且创建现有内容项的新副本时,新内容项可具有与原始内容项相同的文件标识符。系统可观察到新副本的添加,但是该新副本违反了“树中的所有节点都具有唯一文件标识符”的约束。违反该约束可与以下补救步骤相关联:在更新本地树之前,请求内容项的新文件标识符并且将新内容标识符分配给内容项,因此从而解决违反并且满足约束。因此,本地树在任何时候都不会处于违反任何约束的状态。

在另一个实例中,用户可在文件名已经存在的文件系统的位置中创建新内容项,但是字母大小写不同。为了示出,当文件“a.txt”已经存在并且具有相同文件系统路径时,用户可创建名称为“a.txt”的文件。客户端设备的操作系统可允许这样做,而客户端同步服务可能不允许这样做。系统可观察到添加新内容项,但是该新内容项违反了“所有同级节点都具有唯一文件名,而不管大小写如何”的约束。该约束的违反可与如下补救步骤相关联:编辑新内容项的名称以表示存在大小写冲突。例如,可将“a.txt”文件重命名为“a(caseconflict).txt”,因此从而解决违反并且满足约束。可从所述一组观察到的路径中移除文件事件和路径并且重起所述过程,使得检测到用于添加“a(caseconflict).txt”内容项的新文件事件或可更新用于“a.txt”的文件事件以反映新名称“a(caseconflict).txt”。

如果一个或多个观察到的路径违反了一个或多个约束,则系统可在操作1415处确定违反的约束是否需要采取补救动作,或者在操作1425处确定违反的约束是否需要观察另外的路径。如果需要另外的补救动作,则在操作1420处,系统可执行另外的补救动作。如果要观察另外的路径,则在操作1430处,系统可检测另外的文件事件并且在操作1430处,将与文件事件相关联的路径添加到所述一组观察到的路径。

然后,过程返回到操作1410以确定所述一组观察到的路径是否违反本地树约束。在一些情况下,执行补救动作、检测新文件事件或将路径添加到所述一组观察到的路径可致使对一个或多个约束出现新违反,这些新违反必须在可对本地树执行更新之前得到解决。因此,所述过程可迭代进行,直到不再存在对本地树约束的违反为止。然后所述过程可前进至操作1435,在操作1435中,系统可基于所述一组观察到的路径来更新本地树。

用移动或重命名改变更新本地树

根据一些实现方式,对本地文件系统上的内容项的移动或重命名操作可引入另外的技术问题。例如,在一些情况下,当用户或应用程序将内容项(诸如文件或文件夹)从旧位置移动到新位置时,操作可向文件系统或客户端应用程序显现为将内容项从旧位置删除并且在新位置处添加新内容项。类似地,将内容项从旧文件名重命名为新文件名可显现为删除具有旧文件名的内容项并且添加具有新文件名的新内容项。此外,如果内容项是作为许多其他内容项的父级的文件夹并且具有潜在地深且复杂的树结构,则移动或重命名内容项也可显现为将所有后代内容项从其旧位置或路径删除到新位置或路径。

如上所述,中间状态是不期望的并且可使可丢失用户数据的数据脆弱性增加,在所述中间状态下,在将内容项重新添加到新位置或具有新名称之前将它们从本地树删除或移除。另外,移动或重命名操作显现为对客户端同步服务的删除操作,直到检测到对应的添加操作为止。然而,基于本地文件系统的大小和复杂性,在检测到删除操作之后较长一段时间内可能无法检测到添加操作。例如,客户端同步服务可爬取本地文件系统的一部分并且发现删除内容项,而没有发现将内容项已添加到本地文件系统的另一部分,由此从而完成移动操作,直到客户端同步服务爬取本地文件系统的该部分为止。

本主题技术的各种实施方案涉及通过提供确定删除操作是移动或重命名操作的一部分还是仅仅删除操作的更有效和更快的方法来提供对这些和其他技术问题的技术解决方案。

图15示出根据本主题技术的各种实施方案的用于响应于移动或重命名操作而更新本地树的示例性方法。尽管本文描述的方法和过程可以特定次序与某些步骤和操作一起示出,但是除非另有说明,否则以类似或替代性次序或并行执行的另外的、更少或替代性步骤和操作在各种实施方案的范围内。方法1500可由在客户端设备上运行的系统(例如像图2的客户端同步服务156)来实现。

在操作1505处,系统检测针对内容项的删除事件。系统可爬取或监控对客户端设备的本地文件系统或系统被配置来管理的本地文件系统的一部分(例如,内容管理文件夹)的改变。系统可将本地文件系统与本地树进行比较以便标识本地文件系统与本地树之间的差异。可基于一个或多个标识的差异来检测删除事件。例如,用于内容项的节点存在于本地树中特定位置处,但不存在于本地文件系统上的该位置处。这可指示用户或应用程序已执行致使内容项从该位置删除的动作,这致使系统检测到删除事件。

致使检测到删除事件的动作可能是由用户或应用程序将内容项移动到系统监控的另一个位置,将内容项移动到系统未监控的另一个位置,重命名内容项(其可被一些文件系统视为移动)或实际上删除内容项引起的。为了确定何种用户动作造成删除事件和/或是否将要或已经检测到与删除事件相关联的添加事件,在操作1510处,系统可标识内容项的操作系统提供的标识符。

在一些实施方案中,操作系统提供的标识符可以是索引节点标识符并且不同于内容管理系统和/或客户端同步服务提供的文件标识符。在许多情况下,操作系统可提供索引节点标识符,以便除其他之外允许基于索引节点标识符快速查询内容项的位置。例如,一些操作系统可提供系统可使用索引节点标识符作为关键字来查询内容项的当前路径或位置的接口。在操作1515处,系统可通过针对内容项的位置查询操作系统来确定内容项的位置。响应于所述查询,操作系统可返回由索引节点标识符引用的内容项在本地文件系统中的当前位置或路径。

使用内容项的当前位置,系统可确定何种动作造成删除事件。例如,如果当前位置为空位置,或以其他方式指示内容项不再在本地文件系统上,则造成删除事件的动作是实际删除。因此,系统可适当地从本地树中删除用于内容项的节点。如果当前位置是系统(例如,客户端同步服务)未管理的位置,则造成删除事件的动作可能是将内容项从其先前位置移动到其当前位置。然而,因为内容项已被移出系统管理的区域,所以系统不再需要跟踪所述内容项并且可从本地树中删除所述内容项的节点。

如果当前位置是系统仍在管理的新位置,则造成删除事件的动作也是将内容项从其先前位置移动到其当前位置。然而,因为内容项仍在系统管理的区域内,所以系统应等待检测对应的添加事件并且将删除事件和添加事件一起视为移动动作并且原子地更新本地树,从而镜像造成删除事件的实际动作。

类似地,如果当前位置是与系统管理的旧位置相同的位置,则造成删除事件的动作也是将内容项从其先前位置重命名到其当前位置。在一些文件系统中,重命名操作和移动操作是相关的,因为重命名操作被视为从具有一个名称的一个位置到具有新名称的相同位置的移动操作。因此,系统应等待检测对应的添加事件(利用新名称),并且将删除事件和添加事件一起视为移动或重命名动作并且原子地更新本地树,从而镜像造成删除事件的实际动作。

因此,在操作1520处,系统基于内容项的位置来确定删除事件是否与内容项的添加事件相关联。如果删除事件不与添加事件相关联,则可在操作1525处处理删除事件。如果删除事件与添加事件相关联,则系统可等待添加事件,在操作1530处检测针对内容项的添加事件,并且在操作1535处以对本地树的整体更新来处理删除事件以及添加事件。根据一些实现方式,不需要等待添加事件,因为索引节点查询已经提供内容项的当前位置或路径。因此,系统可观察到内容项的路径并且将路径添加到所述一组观察到的路径。

尽管分别描述了图14的方法1400和图15的方法1500,但是这两种方法可彼此结合地工作以便更新本地树。例如,如果删除事件不与添加事件相关联,则在图15的操作1525处,可在无需将删除事件与对应的添加事件组合的情况下处理删除事件。根据一些实施方案,处理删除事件可包括图14所示的操作,其中例如可将删除事件添加到一组观察到的路径并且进行检查以确定是否违反本地树约束。

例如,如果与删除事件相关联的内容项在本地树中具有一个或多个后代节点,则可能违反“非空父节点不能被删除”约束。针对该违反的补救可包括等待观察另外的路径(例如,针对内容项的每个后代节点的删除事件)。一旦检测到另外的文件事件,就可检查这些另外的文件事件或路径的约束,包括进行检查以确定另外的删除文件事件是否与另外的对应的添加事件相关联。一旦所有观察到的文件事件都得到验证,就可将文件事件一起批处理并且用于更新本地树。

类似地,如果删除事件与添加事件相关联,则系统可等待添加事件,在操作1535处以对本地树的整体更新来处理删除事件以及添加事件可包括:将两个事件添加到所述一组观察到的文件事件;确定是否违反任何本地树约束;如果违反,则执行适当的补救;以及基于整个所述一组观察到的文件事件来更新本地树。

更新远程树

如上所述,远程树表示由内容管理系统存储的内容项的服务器状态。例如,图1中的服务器同步服务112被配置来与客户端同步服务156通信以使对内容项的改变在客户端设备150与内容管理系统110之间同步。

本主题技术的各种实施方案提供了各种技术解决方案以基于在内容管理系统处的改变来更新远程树。在各种实施方案中,远程树以及其他树数据结构对于客户端设备与内容管理系统之间的同步过程至关重要。例如,一旦对远程树进行了更新,其余的系统就对所述更新做出反应,并且在一些情况下,对远程树的改变可同步并应用到客户端设备处的文件系统状态。因此,重要的是要注意远程树的更新方式。

如在全文进一步详细描述,在一些实施方案中,内容管理系统110还可将关于改变、访问等的数据日志存储在服务器文件日志148中。服务器文件日志148可维持对内容存储装置142中内容项的修订的一个或多个日志。一个或多个日志可跟踪对每个名称空间上每个内容项的修订。服务器文件日志148上的日志中的一行值可标识名称空间中的内容项并且反映名称空间中内容项的状态。日志中的对应于名称空间中相同内容项的后续行可反映对名称空间中内容项的后续修订。

因此,服务器文件日志148中的与内容项相关联的行可标识内容项的当前状态以及对内容项从创建到当前状态的任何修订。为了使内容项信息与服务器文件日志148同步,内容管理系统110可将服务器文件日志148中所包含的信息转换成可提供给客户端设备150的操作数据,并且向客户端设备150提供来自服务器文件日志148的内容项的最新服务器状态。

本主题技术的各种实施方案涉及客户端设备150从内容管理系统110接收操作数据,并且基于操作数据来更新表示存储在内容管理系统上的内容项的服务器状态的远程树。然而,提供给客户端设备150的操作数据可不具有像远程树一样的树数据结构。相反,操作数据表示操作日志。因此,在客户端设备150上运行的客户端同步服务156被配置来接收包括操作日志的操作数据并且在远程树上执行操作日志,从而更新远程树。

根据一些实施方案,内容管理系统110可生成并提供被配置来重建整个远程树的操作数据。这可包括一个或多个名称空间的整个操作日志。在一些情况下,内容管理系统110可从日志移除不再是当前的或者不需要构建远程树的操作。例如,可从操作数据移除随后被删除的内容项的操作。客户端同步服务156可接收操作日志,并且逐步地通过日志中的每个操作以构建完整的远程树。替代地,客户端同步服务可将现有远程树与操作日志进行比较以确定需要将日志中的哪些操作应用到现有远程树以便使远程树保持最新状态。

在其他实施方案中,内容管理系统110可生成并提供被配置来逐步地更新由客户端设备存储的远程树的操作数据。为了确定应使用日志的哪一部分来生成操作数据,内容管理系统110使用表示名称空间时间线中的点的光标。光标可例如包括服务器文件日志148中对应于特定名称空间的操作日志中的条目标识符。在一个实施方案中,条目标识符可以是sj_id,其使用于名称空间的操作日志中的每个条目增加。然而,光标也可实现为逻辑时钟值、计数器、时间戳或能够标记服务器状态生命周期中的点的任何其他值。

例如,内容管理系统110可确定已经对名称空间进行了改变并且向客户端同步服务156发送通知。响应于接收到所述改变的通知,客户端同步服务156可传输自从最后一次更新远程树以来针对操作日志的请求。所述请求可包括表示最后一次更新远程树或从内容管理系统110接收的最后的更新的光标。替代地,客户端同步服务156可传输包括光标的请求,而无需来自内容管理系统110的通知。在另一个实现方式中,每当将操作数据发送到客户端同步服务156并且客户端同步服务156不需要将光标传输至内容管理系统时,内容管理系统110就可跟踪光标。

使用该光标,内容管理系统110可确定将操作日志的哪一部分发送到客户端同步服务156并且将该部分作为操作数据进行发送。客户端同步服务156可接收操作日志的一部分作为操作数据,并且逐步地通过日志中的每个操作以便更新远程树。

然而,为了实现某些特征,服务器状态和表示所述服务器状态的远程树可包括多于一个名称空间。例如,具有多个名称空间可实现更加以组织为中心的存储模型和/或在个体和分组之间实现共享。图16示出根据各种实施方案的树数据结构的实例。尽管远程树1600在图16中示出,但是其他树数据结构(例如,同步树和本地树)可具有类似的结构和特性。远程树可包括四个名称空间:1605、1610、1615和1620。当名称空间1610和1615安装在名称空间1605内时,名称空间1605可表示根名称空间。嵌套名称空间也是可能的,如通过将名称空间1620安装在名称空间1610内所示。

每个名称空间可与一个或多个单个用户和不同许可权相关联。例如,企业名称空间1605可与整个公司或组织相关联,而名称空间1615可与组织中的会计部门相关联,并且名称空间1610可与组织内的工程部门相关联。名称空间1620可与工程部门内的分组相关联,并且可包括另外的名称空间,包括用于单个用户的名称空间。不同的名称空间允许在用户之间更好地合作并控制内容项的共享和访问。

每个名称空间可与由名称空间标识符(例如,ns_id)和表示该名称空间时间线中的点的光标(例如,sj_id)标识的单独操作日志相关联。然而,使用多个名称空间的sj_id难以跟踪跨多个名称空间的进度和同步时间线。例如,用于第一名称空间的第一sj_id等于用于第二名称空间的第二sj_id不能保证第一名称空间和第二名称空间对应于相同的状态或时间点。

当跨名称空间进行操作时,这存在严重的技术问题。例如,一个名称空间到另一个名称空间的安装操作在两个名称空间的操作日志之间引入相依性。跨名称空间的操作(诸如移动操作)可违反对树数据结构施加的约束。例如,图16所示的将名称空间1620中的内容项1650移动到名称空间1615的移动操作1655将在名称空间1620的操作日志中显现为操作(例如,删除操作),并且在名称空间1615的操作日志中显现为对应的操作(例如,添加操作)。为了保留在树中多于一个位置中可不存在文件标识符的约束,名称空间1620中的删除操作应在名称空间1615中的添加操作之前进行。然而,难以仅使用每个名称空间日志的sj_id来保证这一点。

如将在下文章节中进一步详细论述,本主题技术的各种实施方案提供一种使用内容管理系统的技术解决方案,所述内容管理系统被配置来使用兰波特时钟使多个名称空间的多个日志条目标识符(例如,sj_id)同步,以编码多个名称空间的sj_id之间的排序约束,并且因此编码跨名称空间的总排序。内容管理系统可进一步被配置来将名称空间中的每一个的操作日志线性化为一组线性化操作,所述一组线性化操作包括在操作数据中并且被提供给客户端设备。

关于客户端设备,客户端同步服务可接收操作数据,所述操作数据包括跨多个名称空间线性化并且以正确顺序排序的一组操作。客户端同步服务可使用光标逐步地通过所述一组线性化操作中的每个操作以便更新远程树。

在远程树中安装名称空间

如上所述,客户端同步服务可基于从内容管理系统接收的操作数据来更新客户端设备上的远程树。当客户端同步服务遇到针对操作数据中先前未知的名称空间目标的安装操作时,出现另外的技术问题。客户端同步服务在确定安装目标的内容并且潜在地对照各种约束或规则对其进行验证之前被防止安装名称空间目标,以便保留远程树的完整性。然而,因为安装目标先前未知,所以客户端同步服务无法知道安装目标的内容。本主题技术的各种实施方案解决了这些和其他技术问题。

图17示出根据各种实施方案的安装名称空间的概念图示。内容管理系统被配置来将每个名称空间的操作日志线性化为被提供给客户端设备的一组线性化操作。图17包括用于名称空间nsid11710的操作日志和用于名称空间nsid21715的操作日志的表示。通过使用条目日志标识符(例如,sj_id)和兰波特时钟值来建立两个名称空间之间的跨名称空间排序。

在初始时间段期间,内容管理系统将与用户账户相关联的两个名称空间线性化。在事件1720处,名称空间nsid21715的操作日志在sj_id9,时钟15处进行处理,所述sj_id9,时钟15指示将在名称空间nsid21715内安装新名称空间。直到该点之前,客户端设备可不具有与新名称空间相关联的任何信息,并且因此,如果立即安装名称空间,则不能保证不会违反树约束。

内容管理系统检测用于安装目标名称空间1725的安装操作1720。响应于检测到安装操作1720,内容管理系统向客户端设备传输包括用于目标名称空间的名称空间标识符的安装通知。内容管理系统进一步将目标名称空间1725连同名称空间nsid11710和名称空间nsid21715一起添加到线性化过程,并且将目标名称空间1725的操作日志的前缀传输至客户端设备。所述前缀可以是直到安装操作1720之前要添加的目标名称空间1725的操作日志的初始部分,并且在将名称空间安装到远程树之前可由客户端设备使用以构建目标名称空间1725的子树。

图18示出根据本主题技术的各种实施方案的用于在远程树中安装名称空间的示例性方法。尽管本文描述的方法和过程可以特定次序与某些步骤和操作一起示出,但是除非另有说明,否则以类似或替代性次序或并行执行的另外的、更少或替代性步骤和操作在各种实施方案的范围内。方法1800可由在客户端设备上运行的系统(例如像图2的客户端同步服务156)来实现。

在操作1805处,系统可接收针对目标名称空间的安装通知。安装通知可由内容管理系统传输至系统,以基于目标名称空间的操作日志的进入前缀或初始部分来通知系统要创建子树。在操作1810处,系统可接收用于目标名称空间的操作日志的初始部分。

如图17所示,将用于目标名称空间的操作日志的前缀或初始部分1730从内容管理系统传输至系统(例如,客户端设备)。在操作1815处,系统可基于操作日志的初始部分来开始构建用于目标名称空间的子树。如图17所示,可在预远程保持区1760中生成用于目标名称空间1750的子树,直到系统完成构建子树为止。

预远程保持区是客户端设备存储并生成与安装目标(例如,要安装的名称空间)相关联的一个或多个子树的位置。用于这些安装目标的子树可在预远程保持区中存储和更新,直到子树追上远程树的当前状态(例如,光标)。一旦用于安装目标的子树追上远程树的当前状态,就可将用于安装目标的子树安装在远程树中。

如上所述,另外的名称空间可嵌套在目标名称空间内并且对于客户端设备先前可以是未知的。当操作日志的初始部分1730正在被处理并且被传输至客户端设备时,可发现另外的安装并且可递归地重复方法1800。例如,当将用于目标名称空间的操作日志的初始部分1730传输至系统时,内容管理系统可检测到另外的安装操作,从而致使内容管理系统传输针对另一个目标名称空间的另一个安装通知,从而在方法1800的第一次迭代内发起方法1800的递归迭代。一旦方法1800的递归迭代完成(以及发现的另外的嵌套名称空间的任何另外的迭代),则过程就可返回至方法1800的第一次迭代。

当将用于目标名称空间的操作日志的初始部分1730已经传输至客户端设备时,内容管理系统可传输图17的安装操作1720,所述安装操作1720的检测从一开始就发起了所述过程。客户端设备接收安装操作,并且在操作1820处,将用于目标名称空间的子树安装在远程树的安装位置处。根据一些实施方案,安装位置可通过安装操作、安装通知或两者来提供。如图17所示,将用于目标名称空间1750的子树安装在远程树1780的安装位置1770处。根据一些实施方案,可执行另外的验证检查以确保包含安装的子树的远程树与应用到远程树的所有树约束一致。

根据一些实施方案,可处理目标名称空间的操作日志的前缀或初始部分,以便移除不再有效、最新或将不会反映在最终子树中的操作。例如,初始部分可包括针对将不会反映在最终子树中的内容项的删除操作,针对将不会反映在最终子树中的内容项的添加和对应的删除操作,或将内容项移动到目标名称空间之外的移动操作。这些类型的操作将不会反映在用于目标名称空间的最终子树中,并且可从操作日志的初始部分移除,以便减少空间、带宽、处理时间和其他计算资源。

内容管理系统文件日志和存储系统

将注意力转向内容管理系统110,图19a示出用于使内容在系统配置100中的内容管理系统110与客户端设备150之间同步的示例性架构的示意图。在这个实例中,客户端设备150通过内容存储接口1906和文件日志接口1902分别与内容存储装置142和服务器文件日志148交互。内容存储接口1906可由内容存储服务116提供或管理,并且文件日志接口1902可由服务器同步服务112提供或管理。例如,内容存储接口1906可以是内容存储服务116的子组件或子服务,而文件日志接口1902可以是服务器同步服务112的子组件或子服务。

内容存储接口1906可管理客户端设备150与内容存储装置142之间的通信,诸如内容请求或交互。内容存储接口1906可处理来自客户端设备150的请求,以将内容上传到内容存储装置142和从内容存储装置142下载。内容存储接口1906可从客户端设备150接收内容请求(例如,下载、上传等),验证访问控制列表145的许可权,与授权服务132通信以确定客户端设备150(和/或来自客户端设备150的请求)是否被授权将内容上传到内容存储装置142或从内容存储装置142下载,并且与内容存储装置142交互以下载内容存储装置142中的内容或将所述内容上传到客户端设备150。如果来自客户端设备150的请求是下载内容项的请求,则内容存储接口1906可从内容存储装置142检索内容项并且将内容项提供给客户端设备150。如果来自客户端设备150的请求是上传内容项的请求,则内容存储接口1906可从客户端设备150获得内容项并且将内容项上传到内容存储装置142以供存储。

当处理来自客户端设备150的内容请求时,内容存储接口1906可与存储索引1910通信以检查所请求的内容在内容存储装置142中的可用性和/或存储位置,并且跟踪内容存储装置142中的内容项。存储索引1910可维持内容存储装置142上内容项的索引,所述索引标识内容存储装置142上的内容项,并且还可标识内容项在内容存储装置142内的相应位置。因此,存储索引1910可跟踪内容存储装置142上的内容项以及内容项的存储位置。存储索引1910可跟踪整个内容项(诸如文件)和/或内容项的部分(诸如块或小块)。在一些情况下,内容项可被分成可存储在内容存储装置142处并且以存储索引1910进行跟踪的块或小块。例如,内容存储装置142可将内容项存储为数据的包括内容项的相应数据部分的块或小块。存储索引1910可跟踪存储在内容存储装置142中的内容项的块或小块。下文描述的图19b示出用于存储和跟踪内容项的块的示例性配置。

文件日志接口1902可管理客户端设备150与服务器文件日志148之间的通信,诸如元数据请求以及内容同步和操作。例如,文件日志接口1902可在客户端设备150与服务器文件日志148之间转换、检验、认证和/或处理操作、配置和状态信息。文件日志接口1902可根据光标中的fsauth令牌或通过授权服务132验证许可权,以授权客户端设备150发送到服务器文件日志148的请求或验证对所述请求的授权。当处理来自客户端设备150的请求或操作时,文件日志接口1902可访问名称空间成员资格存储区1908以确定或验证针对与来自客户端设备150的请求或操作相关联的任何名称空间的名称空间所有权信息,并且从访问控制列表145检索许可权信息以验证与来自客户端设备150的请求或操作相关联的内容的许可权。

文件日志接口1902中的转换服务1904可执行线性化和转换操作以用于在客户端设备150与服务器文件日志148之间进行通信。例如,转换服务1904可将来自客户端设备150的通信转换成与服务器文件日志148中数据的结构和格式一致的不同格式,并且反之亦然。为了示出,在一些情况下,客户端设备150可将客户端设备150处的内容项信息(例如,状态、改变、版本等)处理为操作,而服务器文件日志148可处理与由数据结构(诸如数据库表)中的行反映的内容项修订相同的信息。为了使内容项信息能够在客户端设备150与服务器文件日志148之间同步,转换服务1904可将来自客户端设备150的操作转换成适于服务器文件日志148的修订,并且可将反映在服务器文件日志148上的数据行中的修订转换成适于客户端设备150的操作。

在一些情况下,授权服务132可生成令牌,所述令牌验证或指示客户端设备150被授权访问、更新、下载或上传所请求的内容项。令牌可包括与客户端设备150相关联的设备标识符、与在客户端设备150处认证或授权的用户账户相关联的账户标识符、与在客户端设备150处授权的会话相关联的会话标识符、视图上下文以及对标识的集合的访问许可权。令牌可包括在将在下文详细描述的称为光标的加密签名的数据对象中。内容管理系统110和/或授权服务132可将一个或多个令牌发送到客户端设备150,并且客户端设备150可在向服务器文件日志148请求内容项修订和/或更新时向内容管理系统110提供令牌,如下文进一步描述。客户端设备150还可将令牌提供给内容存储接口1906以检验任何内容请求(例如,下载、上传等)。内容存储接口1906可使用令牌来授权对存储索引1910的查询,并且将内容项上传到内容存储装置142或从内容存储装置142下载。

例如,客户端设备150可向内容存储接口1906发送将内容项上传到内容存储装置142的请求。所述请求可包括令牌和要上传的内容项。内容存储接口1906可使用令牌来授权对存储索引1910的查询以检查内容项是否已存在于内容存储装置142上,并且授权将内容项上传到内容存储装置142。客户端设备150还可将令牌提供给文件日志接口1902以授权将元数据存储在服务器文件日志148上的请求以便跟踪内容项的上传和修订。

图19b示出示例性块存储和同步配置。在这个实例中,内容存储装置142可存储数据块,所述数据块可以是多至特定大小(例如,4mb)的内容项(例如,文件)的不透明小块。内容项可被分成块,并且这些块可存储在内容存储装置142处以供访问。存储索引1910可跟踪存储在内容存储装置142处的块以及存储在内容存储装置142处的块的相应位置。文件日志接口1902可与服务器文件日志148交互以跟踪对存储在内容存储装置142处的内容项和/或块的修订。

例如,内容项1920(例如,myfile.abc)可被分成块1920a、1920b、1920c、1920n。内容存储接口1906可接收块1920a、1920b、1920c、1920n,并且将块数据1922b发送到内容存储装置142以便存储在内容存储装置142处。块数据1922b可包括与内容项1920相关联的块1920a、1920b、1920c、1920n。

块1920a、1920b、1920c、1920n可存储在内容存储装置142处的一个或多个存储设备或卷上和/或聚合在一个或多个逻辑存储容器(例如,桶)或数据集群内。在一些情况下,块1920a、1920b、1920c、1920n可一起存储在相同位置(例如,存储设备、卷、容器和/或集群)上。在其他情况下,块1920a、1920b、1920c、1920n中的一些或全部可存储在两个或更多个不同位置(例如,两个或更多个不同的存储设备、卷、容器和/或集群)上。

内容存储接口1906还可将块元数据1922a存储在存储索引1910处。块元数据1922a可标识块1920a、1920b、1920c、1920n,并且允许存储索引1910在内容存储装置142处跟踪块1920a、1920b、1920c、1920n。块元数据1922a可包括用于每个块1920a、1920b、1920c、1920n的标识符。块的标识符可以是标识块的名称或关键字,诸如块的哈希。

块元数据1922a还可包括针对块1920a、1920b、1920c、1920n的位置信息,所述位置信息指示块1920a、1920b、1920c、1920n的相应存储位置。块的位置信息可标识存储块的存储设备或卷和/或包含块的逻辑存储容器或数据集群。位置信息可用于访问或检索相关联的块。

内容存储接口1906可在将块1920a、1920b、1920c、1920n存储在内容存储装置142处之前或之后,将块元数据1922a存储在存储索引1910处。例如,内容存储接口1906可将块1920a、1920b、1920c、1920n存储在内容存储装置142处并且随后将块元数据1922a存储在存储索引1910处,以指示块1920a、1920b、1920c、1920n已经存储在内容存储装置142处。

在一些情况下,内容存储接口1906可在将块1920a、1920b、1920c、1920n存储在内容存储装置142处之前查询存储索引1910,以确定是否将块1920a、1920b、1920c、1920n存储在内容存储装置142处(或存储在何处)。例如,内容存储接口1906可基于块元数据1922a来查询存储索引1910,以检查是否将块1920a、1920b、1920c、1920n存储在内容存储装置142处。存储索引1910可将块元数据1922a中的块标识符与存储索引1910处的块标识符进行比较以检查任何匹配。块标识符之间的匹配指示相关联的块存储在内容存储装置142处。

如先前所提及的,服务器文件日志148跟踪内容项修订,包括内容项添加、编辑、移动或重命名、删除等。因此,文件日志接口1902可将修订1922c存储在服务器文件日志148处以指示内容项1920和/或块1920a、1920b、1920c、1920n被添加到内容存储装置142。修订1922c可表示对服务器文件日志148处的内容项修订的日志内的内容项1920的修订。

修订1922c可标识内容项1920和与内容项1920相关联的操作,诸如添加操作(例如,上传)、编辑操作、移动或重命名操作、删除操作等。修订1922c还可标识内容管理系统110中的存储内容项1920的名称空间和在服务器文件日志148处的内容项修订的日志中的用于存储修订1922c的行。内容项修订的日志内的行可表示与对内容项1920的修订1922c相关联的修订号。

文件日志接口

图19c示出由文件日志接口1902处理客户端设备150与服务器文件日志148之间的通信的图。服务器文件日志148跟踪内容项状态和改变(例如,修订)作为服务器文件日志148中的行和字段的值。例如,服务器文件日志148可维持对内容存储装置142中内容项的修订的一个或多个日志。一个或多个日志可跟踪对每个名称空间上每个内容项的修订。服务器文件日志148上的日志中的一行值可标识名称空间中的内容项并且反映名称空间中内容项的状态。日志中的对应于名称空间中相同内容项的后续行可反映对名称空间中内容项的后续修订。因此,服务器文件日志148中的与内容项相关联的行可标识内容项的当前状态以及对内容项从创建到当前状态的任何修订。

为了使内容项信息(例如,状态、改变或修订等)与客户端设备150同步,服务器文件日志148可向文件日志接口1902发送修订数据1934或从文件日志接口1902接收修订数据1934,所述修订数据1934表示对一个或多个内容项的在服务器文件日志148中跟踪或存储的修订。修订数据1934可包括例如对应于服务器文件日志148中的行的内容项修订的日志记录(log)。服务器文件日志148可将修订数据1934发送到文件日志接口1904,所述文件日志接口1904可将修订数据1934转换成客户端设备150的操作数据1932,如下文进一步描述的。

客户端设备150可执行内容操作以在客户端设备150处更新或修改内容项。为了使内容项信息与服务器文件日志148同步,客户端设备150可向文件日志接口1902发送操作数据1932或从文件日志接口1902接收操作数据1932。客户端设备150可将操作数据1932发送到文件日志接口1902以将客户端设备150处的改变报告给内容项,并且从文件日志接口1902接收操作数据1932以从服务器文件日志148(例如,修订数据1934)获得内容项的最新状态。

例如,客户端设备150可在客户端设备150处编辑内容项a并且向文件日志接口1902报告指示对内容项a进行编辑的编辑操作。编辑操作可包括在与文件日志接口1902通信的操作数据1932中以指示对内容项a的修订。文件日志接口1902可接收包括编辑操作的操作数据1932并且生成修订以用于存储在服务器文件日志148处,从而跟踪对内容项a的编辑。文件日志接口1902可包括与修订数据1934中的编辑操作相关联的对服务器文件日志148的修订以便更新服务器文件日志148以存储表示内容项a的编辑状态的修订。

如下文进一步描述,操作数据1932可包括光标,所述光标标识由客户端设备150针对与客户端设备150相关联的每个名称空间获得的最新状态或修订。例如,光标可标识由客户端设备150针对与客户端设备150相关联的每个名称空间获得的服务器文件日志148中的最新修订。光标中的信息允许文件日志接口1902确定来自客户端设备150的操作数据1932中的操作是否反映了与操作相关联的一个或多个名称空间的服务器文件日志148中的最新状态或修订。这可帮助文件日志接口1902确保来自客户端设备150的操作数据1932中的对应于服务器文件日志148中的较旧修订的操作未写入服务器文件日志148中,这可在服务器文件日志148中的现有修订与从操作数据1932转换的修订之间造成冲突。

为了使内容项信息能够在客户端设备150与服务器文件日志148之间同步,文件日志接口1902可将操作数据1932(例如,通过转换服务1904)转换成修订数据1934,并且反之亦然。当从客户端设备150接收到操作数据1932时,文件日志接口1902可将操作数据1932转换成修订数据1934,所述修订数据1934包括从操作数据1932中的操作解译的内容项修订。当从服务器文件日志148接收修订数据1934时,文件日志接口1902可将修订数据1934转换成操作数据1932,所述操作数据1932包括用于在客户端设备150处实现修订数据1934中的修订的操作。修订数据1934包括服务器文件日志148中的描述一个或多个内容项所发生的事(即,对一个或多个内容项的修订)的数据,并且操作数据1932包括在客户端设备150处已经执行或应当执行以修改一个或多个内容项的操作。因此,文件日志接口1902可将描述对一个或多个内容项的修订的数据从服务器文件日志148(例如,操作数据1934)转换成在客户端设备150处已经执行或应当执行以修改客户端设备150处的一个或多个内容项的操作。

如前所述,除了将操作数据1932从客户端设备150转换成针对服务器文件日志148的修订数据1934之外,文件日志接口1902还可将修订数据1934从服务器文件日志148转换成针对客户端设备150的操作数据1932。文件日志接口1902可从服务器文件日志148获得修订数据1934,并且将修订数据1934中的修订转换成用于在客户端设备150处执行的操作,以根据此类修订来修订客户端设备150处的一个或多个内容项。从修订数据1934中的修订生成的操作包括在由文件日志接口1902提供给客户端设备150的操作数据1932中。在操作数据1932与修订数据1934之间的这种转换允许客户端设备150和服务器文件日志148根据需要使内容项信息彼此同步。

在向服务器文件日志148写入从由客户端设备150提供的操作数据1932生成的任何修订数据1934之前,文件日志接口1902可检查操作数据1932中的光标和/或查询服务器文件日志148以确保修订数据1934中的任何修订不会在服务器文件日志148中造成冲突。例如,文件日志接口1902可查询服务器文件日志148以检查与修订数据1934中的修订相关联的内容项的版本是否与服务器文件日志148处的内容项的版本相同,或者服务器文件日志148处的内容项的版本是否是作为同与修订数据1934中的修订有关的内容项的更新或不同版本。如果服务器文件日志148示出内容项的最新版本同与修订数据1934有关的版本不同的版本,则这两个版本冲突。

文件日志接口1902可更新服务器文件日志148,以存储包括在从操作数据1932导出的修订数据1934中的新修订。当查询和/或更新服务器文件日志148中的修订时,文件日志接口1902可查询名称空间成员存储区1908以检索与受修订数据1934中的修订影响的任何名称空间相关联的名称空间所有权信息。名称空间所有权信息可指示哪些用户账户拥有特定名称空间或属于特定名称空间的成员,并且因此能够访问特定名称空间。因此,文件日志接口1902可分析名称空间所有权信息,以确保服务器文件日志148不被更新成包括对来自不是名称空间成员的用户账户的名称空间的修订。

参考图19d,服务器文件日志148可存储日志1960、1962以跟踪和标识内容项修订和状态。在这个实例中,日志1960包括包含名称空间标识符(ns_id)、服务器日志标识符(sj_id)、路径、块、先前的修订(prev_rev)和目标名称空间(target_ns)的记录。ns_id可包括用于唯一地标识服务器文件日志148中的名称空间的一个或多个值。sj_id可包括映射到名称空间的给定日志中的行的单调地增加的值并且提供操作或修订在该名称空间内的排序。路径可以是标识相关联的内容项的名称空间相对路径。prev_rev标识对应于与路径相关联的内容项的先前状态的行的sj_id。target_ns标识已安装名称空间的安装点的目标名称空间的ns_id。对于与安装点不对应的行(例如,修订),不设置target_ns字段。

日志1962包括包含ns_id、sj_id、时钟(例如,时间戳)、文件标识符(file_id)、一个或多个扩展属性(xattr)等的记录。xattr可存储与内容项或操作相关联的元数据。

在一些情况下,日志1960可包括其他字段,诸如表示相关联内容项的大小的大小字段、可设置成指示内容项何时是目录的目录字段(例如,is_dir)、唯一地标识相关联文件的文件标识符、时钟或时间戳字段等。

如先前所提及的,文件日志接口1902可基于操作数据1932和修订数据1934来执行转换1970。当执行转换1970时,转换服务1904可将操作数据1932变换成修订1972以用于存储在服务器文件日志148中,所述修订1972包括线性化修订。转换服务1904还可将修订数据1934变换成包括在发送给客户端设备150的操作数据1932中的线性化操作1974a,所述线性化操作1974a可由客户端设备150应用以更新客户端设备150处的内容项信息(例如状态、改变等)。转换服务1904还可生成或更新光标1974b并且将操作数据1932中的光标1974b提供给客户端设备150。光标1974b标识服务器文件日志148中对应于与线性化操作1974b相关联的每个名称空间和/或内容项的相应修订或行。

例如,光标1974b可标识名称空间(例如ns_id)和服务器文件日志148中针对该名称空间的行(例如sj_id),所述行指示服务器文件日志148中针对该名称空间的最新修订。光标1974b中的名称空间和行可与线性化操作1974a中的操作相关联。光标1974b可在服务器文件日志148中针对特定名称空间的修订的日志记录上标识特定位置,从而指示在客户端设备150处应用线性化操作1974a之后和/或之前服务器文件日志148中名称空间的修订或状态。因此,光标1974b可指示在线性化操作1974a之前或之后服务器文件日志148中的名称空间和/或内容项的状态,这可帮助避免修订冲突并且跟踪在应用线性化操作1974a之前和之后的修订顺序。

图20a示出用于将服务器文件日志数据转换成线性化操作的示例性转换和线性化过程的图。在这个实例中,服务器文件日志148中的日志1960包括行2002,其中服务器文件日志148跟踪修订1972。日志1960中的修订1972与名称空间100和101(即,ns_id100和101)相关联。在一些情况下,服务器文件日志148可存储名称空间特定的日志,所述名称空间特定的日志跟踪特定于相应名称空间的修订。名称空间特定的日志中的行(例如,2002)包括特定于该名称空间的数据,并且每行反映特定于该名称空间的修订。

日志1960中的每行(2002)包括名称空间标识符字段(ns_id),其用于唯一地标识与该行相关联的名称空间;服务器日志标识符字段(sj_id),其包括映射到给定名称空间中的行的单调地增加的值并且提供操作或修订在该名称空间内的排序。日志1960还包括用于标识内容项的名称空间相对路径的路径字段(路径)、用于标识与内容项相关联的块或块列表的块字段(块)、用于标识日志1960中的表示内容项的先前状态或修订的行(即,sj_id)的先前修订字段(prev_rev)以及用于标识已安装名称空间的安装点的目标名称空间(如果行对应于安装的话)的目标名称空间字段(target_ns)。对于与安装点不对应的行(例如,修订),不存在针对target_ns字段的数据。

日志1960中的第一行2002标识名称空间“100”(ns_id100)中“file1”(路径字段值file1)的第一修订(sj_id1),所述第一修订(sj_id1)对应于块“h1”并且没有先前的修订(prev_rev)或目标名称空间(target_ns)。由于所述行不包括先前的修订或目标名称空间,因此由所述行表示的修订对应于在名称空间“100”处添加与块“h1”相关联的“file1”。日志1960中的包含sj_id“4”的行表示日志1960中的对名称空间“100”上的“file1”的最后修订,因为该行是日志1960中的对应于名称空间“100”上的“file1”的最后的行或sj_id。包含sj_id“4”的该行指示名称空间“100”上的“file1”在被添加到sj_id“1”中之后被编辑,并且所述编辑对应于块“h4”。

修改2004描绘了表示修订1972的修改的实例。在这个实例中,修改2004中的每一个示出来自日志1960中的对应行(2002)的内容修订。每个修改对应于日志1960中的sjid和nsid,以及与日志1960中对应的sjid和nsid相关联的文件。在这个实例中,与修改2004相关联的内容表示日志1960中的块(例如,“h1”、“h2”、“h3”、“h4”)的示例性内容值。出于说明目的提供修改2004中的内容值,以描绘对与每个修订相关联的内容的示例性修改。

例如,修改2004中的第一修改表示日志1960中的sjid“1”和nsid“100”,并且描绘了在名称空间“100”中添加“file1”。内容“aaa”表示在nsid“100”的sjid“1”处“file1”的“h1”值。修改2004还描绘了对表示日志1960中的sjid“4”和nsid“100”的名称空间“100”中的“file1”的编辑,其示出将与名称空间“100”中的“file1”相关联的内容“aaa”(例如,“h1”)修改成“aa2”(例如,“h4”)。

在转换1970中,来自日志1960中的行2002的修订1972转换成线性化操作1974a。线性化操作1974a从日志1960中的修订1972生成并且表示线性化之后的修改2004。如线性化操作1974a所示,线性化操作1974a中的操作可基于多个修订(1972)和/或修改(2004),或单一修订版(1972)和/或修改(2004)。

例如,修改2004描绘了将“file1”添加到对应于日志1960中的sjid“1”和nsid“100”的名称空间“100”的修订和编辑对应于日志1960中的sjid“4”和nsid“100”的名称空间“100”中的“file1”的修订。可从与“file1”和nsid“100”相关联的内容值“aaa”(例如,“h1”)以及缺少“file1”和nsid“100”的任何先前修订来推断添加修订。换句话讲,内容“aaa”指示内容(例如,“h1”)已被添加或编辑,并且缺少对“file1”和nsid“100”的先前修订表明内容“aaa”表示内容(例如,“h1”)被添加而不是被编辑。可从与“file1”和nsid“100”相关联的内容值“aa2”(例如,“h4”)和与“file1”和nsid“100”相关联的先前修订(sjid“1”和nsid“100”)来推断编辑修订。换句话讲,从与“file1”和nsid“100”相关联的内容“aaa”改变到“aa2”表明内容“aa2”表示编辑。

在线性化操作1974a中,可将对应于针对nsid“100”的sjid“1”和sjid“4”的添加和编辑修改(2004)转换成单一线性化操作(编辑操作),所述单一线性化操作将与“file1”相关联的内容值从“aaa”(例如,“h1”)编辑到“aa2”(例如,“h4”)。将“file1”的内容(例如,“h1”)编辑成“aa2”(例如,“h4”)的单一线性化操作反映了将与内容“aaa”(例如,“h1”)相关联的“file1”添加到名称空间“100”的修改以及将与名称空间“100”中的“file1”相关联的内容“aaa”(例如,“h1”)编辑成“aa2”(例如,“h4”)的修改。因此,该线性化操作基于两个修改2004和修订1972中的两个对应的修订。

修改2004中的对应于日志1960中的sjid“2”和nsid“100”的修改表示将与内容“bbb”(例如,“h2”)相关联的“file2”添加到名称空间“100”的修订。该修改表示对应于名称空间“100”上的“file2”的来自日志1960的唯一修订1972。因此,线性化操作1974a包括针对名称空间“100”上的“file2”的单一操作,所述单一操作将与内容“bbb”(例如,“h2”)相关联的“file2”添加到名称空间“100”并且基于单一修改2004(在名称空间“100”上添加“file2”)和修订1972。

在这个实例中,修改2004还包括用于将与内容“ccc”(例如,“h3”)相关联的“file3”添加到对应于日志1960中的sjid“3”和nsid“100”的名称空间“100”,以及从对应于日志1960中的sjid“5”和nsid“100”的名称空间“100”删除“file3”(表示为“-1”)的修改。因此,修订1972包括与名称空间“100”上的“file3”相关联的两个修改2004。由于日志1960中的与“file3”和命名空间“100”相关联的最后修订对应于表示日志1960中的sjid“5”和nsid“100”的删除修改,因此与“file3”和命名空间“100”相关联的从修订1972的添加和删除修改2004可被线性化成从名称空间“100”删除“file3”的单一操作。因此,线性化操作1974a包括针对“file3”和名称空间“100”的单一操作,所述单一操作是从名称空间“100”删除“file3”的单一操作。

日志1960中的针对nsid“100”的sjid“6”和“7”以及针对nsid“101”的sjid“1”表示将“dir”添加到名称空间“100”,并且之后从名称空间“100”移动到名称空间“101”。例如,sjid“6”和nsid“100”标识“dir”和名称空间“100”并且不包括先前的修订,这指示“dir”在sjid“6”处已被添加到名称空间“100”。sjid“7”标识“dir”从名称空间“100”移动到名称空间“101”,如由块字段(“-“)、先前的修订字段(sjid“6”)和目标名称空间字段(“101”)所反映的。然后,针对nsid“101”的sjid“1”标识将“dir”添加到名称空间“101”,如由缺少针对“dir”和名称空间“101”的先前行或修订所指示的。nsid“100”中的sjid“6”和“7”以及nsid“8”中的sjid“1”的添加和移动修订通过三个修改2004进行描绘:向对应于sjid“6”和nsid“100”的名称空间“100”添加“dir”、从对应于sjid“7”和nsid“100”的名称空间“100”删除“dir”以及向对应于sjid“1”和nsid“101”的名称空间“101”添加“dir”。

将分别对应于日志1960中的nsid“100”的sjid“6”和“7”的“dir”和名称空间“100”的添加和删除修改2004线性化成从名称空间“100删除“dir”的单一操作,因为日志1960中的对应于“dir”和名称空间“100”的最后修订是在sjid“7”和nsid“100”处从名称空间“100”删除“dir”。向对应于日志1960中的sjid“1”和nsid“101”的名称空间“101”添加“dir”是对应于“dir”和名称空间“101”的唯一修改2004和修订1972。因此,在线性化操作1974a中将添加提供为针对“dir”和名称空间“101”的单一安装操作。因此,将来自修订1972的对应于nsid“100”中的sjid“6”和“7”以及nsid“101”中的sjid“1”的三个修改2004(即,“dir”在名称空间“100”上的添加和删除以及“dir”在名称空间“101”上的添加)在线性化操作1974a中线性化成如下两个操作:针对“dir”在名称空间“100”中的删除操作和“dir”在名称空间“101”中的安装操作。

如上所述,线性化操作1974a包括针对“file1”和名称空间“100”的编辑操作、针对“file2”和名称空间“100”的添加操作、“file3”在名称空间“100”中的删除操作、“dir”在名称空间“100”中的删除操作以及用于将“dir”添加到名称空间“101”的安装操作。线性化操作1974a中的这些操作从修订1972生成并且反映了日志1960中每个内容项的最新状态。文件日志接口1902可生成线性化操作1974a并且将线性化操作1974a发送到客户端设备150,以确保客户端设备150包含来自日志1960中的修订1972的最新状态。

当向客户端设备150提供线性化操作1974a时,文件日志接口1902可包括光标1974b以及对客户端设备150的线性化操作1974a。光标1974b可标识对日志1960中的每个名称空间(nsid)的最后修订(sjid)。在一些实施方案中,光标1974b还可包括fsauth令牌,所述fsauth令牌包括用户id以及对在光标中提供的ns_id的最后观察到的访问许可权。对每个名称空间的最后修订可指示日志1960中对应于发送给客户端设备150的对每个名称空间的最新修订。

在一些情况下,光标1974b还可将线性化操作1974a中的每个操作映射到日志1960中的名称空间(nsid)和行(sjid)。与操作相关联的名称空间和行可指示日志1960中对应于操作的位置。换句话讲,与操作相关联的名称空间和行可指示由该操作表示的日志1960中的修订号。光标1974b中的名称空间和行对应于与线性化操作1974a相关联的每个名称空间和内容项的日志1960中的最新状态。光标1974b可作为客户端设备150的工具提供给客户端设备150,以在尝试从客户端设备150向一个或多个名称空间和/或内容项应用改变(例如,通过操作数据1932)时向文件日志接口1902标识由客户端设备150获得的针对一个或多个名称空间和/或内容项的最新状态或修订。当文件日志接口1902从客户端设备150接收到光标1974b时,它可使用光标1974b来标识客户端设备150在日志1960处的位置(例如,由客户端设备150获得的来自日志1960的最新修订),并且检测或避免由来自客户端设备150的操作引起的冲突。

例如,如果文件日志接口1902从客户端设备150接收到修改命名空间“100”中的“file1”的操作,则文件日志接口1902可使用从客户端设备150接收的光标1974b以及操作来检查与来自客户端设备150的光标1974b中标识的修订相比,日志1960对名称空间“100”中的“file1”是否具有更新的修订。如果光标1974b中的修订是日记1960中的最新修订,则文件日记接口1902可将编辑操作提交为日志1960中的对名称空间“100”中的“file1”的新修订(例如,nsid“100”中的sjid“8”)。

替代地,如果光标1974b中的修订不是日志1960中的对名称空间“100”中“file1”的最新修订,则文件日志接口1902可确定来自客户端设备150的编辑操作不是基于日志1960中的对名称空间“100”中“file1”的最新版本。例如,如果光标1974b在日志1960中标识sjid“4”和nsid“100”,并且文件日志接口1902确定日志1960在sjid“12”和nsid“100”处包括对名称空间“100”中“file1”的修订,则文件日志接口1902可确定来自客户端设备150的编辑操作与名称空间“100”上“file1”的较旧版本(例如,sjid“4”和nsid“100”)有关,并且编辑操作可造成冲突,因为它编辑的文件已被修改。文件日志接口1902可检测到由编辑操作造成的该冲突并且拒绝编辑操作,尝试协调冲突,或者向客户端设备150提供最新修订并且允许客户端设备150协调冲突。

每当文件日志接口1902向客户端设备150发送线性化操作时,它可包括如本文所述的光标,所述光标针对每个名称空间和/或内容项在日志1960中标识相应位置。类似地,每当客户端设备150向文件日志接口1902发送操作时,它可包括其最新光标,文件日志接口1902可使用所述最新光标来使客户端设备150处的状态与日志1960处的状态映射。

在这个实例中,日志1960描绘具有多个名称空间的日志。如前所述,在一些实例中,服务器文件日志148可维持名称空间特定的日志。光标1974b可包括用于每个名称空间的sjid和nsid,以指示对每个名称空间的最新修订。如本文进一步所解释,基于光标1974b,在维持多个日志的实施方案中,文件日志接口200可查询多个日志,和/或从多个日志检索修订。

图20b示出用于线性化2010以将操作数据1932从客户端设备150转换成对服务器文件日志148处日志1960的修订1972的示例性过程的图。客户端设备150可将操作数据1932提供给文件日志接口1902。在这个实例中,操作数据1932包括客户端设备150处的操作2012,诸如内容项编辑操作、添加操作、重命名操作、移动操作、安装操作或删除操作。在一些情况下,操作2012可包括对相同内容项的多个操作。例如,操作2012可包括编辑名称空间“100”上的“file4”的操作和从名称空间“100”删除“file4”的操作。

操作数据1932还包括先前由客户端设备150从文件日志接口1902接收的光标1974b。光标1974b可标识日志1960中针对一个或多个名称空间和/或内容项的状态(例如,nsid和sjid)或最新修订。客户端设备150可将光标1974b提供给文件日志接口1902作为操作2012的参考点。在这个实例中,光标1974b提供名称空间“100”的最新状态,其由sjid“9”表示。

在一些情况下,光标由内容管理系统110加密签名,这允许文件日志接口1902确定光标未被篡改。此外,由于客户端设备150在其已从服务器文件日志148接收到对名称空间的最新修订时向服务器文件日志148提交修订,因此文件日志接口1902可接受最后观察到的对ns_id的访问许可权仍然有效,并且因此,客户端设备150有权访问名称空间。

文件日志接口1902可接收操作2012和光标1974b并且执行线性化2010,以将操作2012从客户端设备150线性化和变换到对日志1960的修订1972。基于操作2012,文件日志接口1902可生成操作的日志记录2014。日志记录2014可包括来自映射到日志1960中的相应名称空间的操作2012的操作列表。在一些情况下,日志记录2014可包括从操作2012生成的如前所述的线性化操作。

文件日志接口1902可使用光标1974b来在更新日志1960以反映日志记录2014中的操作之前,验证操作2012反映日志1960中的最新状态或修订。如果文件日志接口1902确认光标1974b反映日志1960中针对与日志记录2014相关联的名称空间和/或内容项的最新状态或修订,则文件日志接口1902可基于日志记录2014向日志1960添加修订1972。修订1972可包括与日志记录2014中的操作相关联的每个内容项和/或名称空间的最新状态或修订。

日志记录2014中的操作包括针对“file5”的添加和编辑操作。因此,修订1972包括对“file5”的编辑,文件日志接口1902可将所述对“file5”的编辑作为“file5”的最新状态(即,将添加和编辑操作以线性化方式应用到“file5”之后的状态)写入日志1960。日志记录2014中的操作还包括针对“dir2”的添加操作以及针对名称空间“100”上的“file4”的编辑和删除操作。因此,修订1972可包括将“dir2”添加到名称空间“100”的操作以及从名称空间“100”删除“file4”的操作分别作为“dir2”和“file4”的最新状态。

在图20b中,日志1960中描绘的修订(1972)反映与操作2012相关联的每个内容项(“file4”、“file5”、“dir2”)的最新状态。然而,应当注意,在一些情况下,文件日志接口1902可将由日志记录2014表示的每个修订写入日志1960,以便不但反映由日志记录2014导致的每个名称空间和/或内容项的最新状态修订,而且反映导致最新状态或修订的任何先前状态或修订。例如,文件日志接口1902可在日志1960中写入针对“file4”的编辑的修订和针对“file4”的删除的后续修订,而不是仅写入反映来自操作2012的最新状态的“file4”的编辑,以在日志1960中指示来自操作2012的“file4”修订的完整序列。

文件日志接口1902可将日志记录2014中的操作变换成修订1972,并且将日志1960更新成包括修订1972。文件日志接口1902可将对日志1960的修订1972写入日志1960中的相应行处。文件日志接口1902可将修订1972添加到日志1960中的下一个可用行(例如,sjid)。在一些情况下,文件日志接口1902可基于相对顺序来添加修订1972,所述相对顺序可基于线性化2010和/或相应的时间戳或时钟来确定。

如图20b所示,名称空间“100”中的“file4”的删除操作包括在行“11”或名称空间“100”的sjid“11”中。日志1960的sjid“11”中的修订指示名称空间“100”中的“file4”已被删除,如由块字段中的减符号所反映,并且将sjid“9”标识为日志1960中的对名称空间“100”中的“file4”的先前修订。“dir2”的添加和“file5”的编辑分别包括在行或sjid12和14中。

图20b中的日志1960已被更新为包括基于日志记录2014和光标1974b的修订1972,以反映在日志记录2014中修改的每个内容项的状态。日志1960中的每行的路径字段标识相关联的名称空间(例如,名称空间“100”)内的内容项。行的路径字段基于来自日志记录2014中对应操作的文件和名称空间。日志1960中的块字段表示内容项。在一些情况下,块字段可包括相应内容项或数据块的哈希。如果内容项已被删除和/或是目录、文件夹、安装项等,则块字段可为空。

当基于日志记录2014和光标1974b将日志1960更新成包括修订1972时,转换服务1904可将每个内容项的路径标识成包括在日志1960的路径字段中。在一些情况下,转换服务1904可将内容项的标识符(例如,文件id)转换成内容项的路径(例如,/目录/文件名)。例如,客户端设备150可使用标识符来标识内容项(例如,操作数据1932中的内容项目),而无需跟踪或计算内容项的相应路径。日志1960可作为替代使用内容项的路径来标识内容项。转换服务1904可使用来自客户端设备150的内容项的标识符来计算日志1960的内容项的路径,并且使用针对内容项计算的路径来更新日志1960。转换服务1904还可执行反向转换,以基于内容项的路径获得内容项的标识符,并且在与客户端设备150通信中引用内容项时使用内容项的标识符。

例如,转换服务1904可使用日志1960中的路径、日志1960中的nsid和/或日志1960中的目录字段(或服务器文件日志148中的其他地方)来标识内容项并且获得该内容项的标识符(例如,文件id)。如果文件日志接口1902向客户端设备150发送与该内容项有关的更新或信息,则文件日志接口1902可将内容项的标识符提供给客户端设备150,客户端设备150可使用所述标识符来在具有或不具有内容项路径的情况下标识内容项。

如先前所提及的,在将修订1972从操作2012写入日志1960之前,文件日志接口1902可检查光标1974b是否反映日志1960中针对与操作2012相关联的每个名称空间和/或内容项的最新状态或修订。在一些情况下,在确认光标1974b反映日志1960中的最新状态或修订之后,文件日志接口1902也可执行第二次检查以确保从操作2012生成的修订将不会与日志1960中的现有修订冲突。例如,如果日志1960处的名称空间“100”中的sjid“5”表示“file5”的删除操作,则sjid“14”中描绘的从文件日志接口1902从客户端设备150接收的操作2012发出的“file5”的编辑修订1972将通过尝试编辑“file5”而造成冲突,即使“file5”在sjid“5”处被删除。因此,在这个实例中,文件日志接口1902可拒绝编辑操作和修订,并且向客户端设备150传达编辑操作无效。文件日志接口1902可更新光标1974b并且将更新的光标提供给客户端设备150,以根据需要通知客户端设备150日志1960中针对“file5”(以及任何其他内容项)的最新状态或修订。

当将新修订添加到日志1960和/或服务器文件日志148时,文件日志接口1902可将更新的光标发送到客户端设备150以报告新修订并且使新修订与客户端设备150同步。客户端设备150还可在客户端设备150处请求对光标进行更新。客户端设备150可存储从文件日志接口1902接收的最后光标的副本作为内容项的状态在客户端设备150上的反映和/或客户端设备150在日志1960中的位置,从而指示客户端设备150获得的一个或多个最后修订。

图20c示出用于将修订从服务器文件日志148转换成客户端设备150的操作的示例性方法。在步骤2050处,文件日志接口1902从服务器文件日志148处修订的日志1960检索与存储在客户端设备150处的一个或多个内容项相关联的对在内容管理系统110处注册的用户账户的多个修订(例如,1972)。每个修订可修改名称空间、文件夹、文件或任何内容项。此外,每个修订可与名称空间和该名称空间的日志标识符(sjid)相关联。

在一些情况下,文件日志接口1902可基于确定已将日志1960更新成包括在客户端设备150处不可用的修订来从日志1960检索多个修订。例如,文件日志接口1902可跟踪添加到日志1960的新修订和/或将日志1960处的修订与客户端设备150处的光标进行比较。在一些情况下,文件日志接口1902可查询日志1960以检索多个修订和/或检查在日志1960处可用的修订。

在步骤2052处,文件日志接口1902基于与多个修订相关联的每个内容项的相应一组修订来确定相应的操作。例如,文件日志接口1902可使内容项的任何修订线性化,并且将这些修订转换成针对该内容项的一个或多个相应操作。在一些情况下,当多个操作以线性方式执行时,文件日志接口1902还可将针对该内容项的多个操作转换成定义或反映内容项的状态或修改的单一操作。

在一些情况下,当计算针对多个修订的相应操作时,文件日志接口1902可基于与特定内容项相关联的修订号和/或与此类修订相关联的内容项的类型来进行推断或计算。例如,如果多个修订包括对内容项的单一修订,则文件日志接口1902可根据所述单一修订(例如,修订1972)和/或与所述修订相关联的块或内容(例如,日志1960的行2002中的块或内容)、由该修订表示的内容项的修改(例如,2004)类型进行推断,并且基于由修订表示的修改类型来计算针对该内容项的相应操作。

为了示出,如图4a所示,修改2004描绘对应于sjid“1”和nsid“100”的对名称空间“101”处“dir”的修改。该修改是名称空间“101”的唯一修改(2004)和修订(1972)。因此,文件日志接口1902可推断出描绘名称空间“101”中“dir”的修改是对“dir”的添加或安装,因为它表示名称空间“101”的第一实例被修改或修订为包括“dir”。由于“dir”是目录或文件夹,如日志1960中的块字段所示,因此修改可以是对目录或文件夹的添加或安装。如果“dir”是名称空间,则修改将表示将名称空间“dir”安装在名称空间“101”处。另一方面,如果“dir”是与特定内容或块相关联的文件(其可基于日志1960中的块字段确定),则对“dir”的修改将是向名称空间“101”添加文件“dir”。例如,作为替代,如果sjid“1”和nsid“101”描绘与“h1”相关联的“file1”,则对应的修改将是向名称空间“101”添加“file1”。

因此,除非与日志1960中的修订(1972)相关联的内容或块字段描绘删除(例如,在块或内容字段中的减符号),否则针对内容项的第一或唯一修订的相应操作可表示取决于内容项是名称空间还是另一种类型的内容项而进行的安装或添加操作。这是基于假设其他操作(诸如编辑操作、卸载操作或删除操作)将期望包括用于安装或添加相关联内容项的先前修订。如果内容项不具有与其相关联的先前修订,则文件日志接口1902可推断出与内容项相关联的修订可能不是编辑操作、卸载操作或删除操作,而是添加或安装操作。

在一些情况下,文件日志接口1902可基于对内容项和相关联名称空间的多个修订(1972)来计算针对该内容项的操作。例如,文件日志接口1902可根据表示内容项的添加或安装的修订和表示删除、编辑或卸载的后续修订来推断删除操作、编辑操作或卸载操作。为了示出,如图20a所示,文件日志接口1902基于对应于sjid“1”和“4”的对日志1960中名称空间“100”的多次修改(2004)和修订(1972)来计算针对名称空间“100”中“file1”的编辑操作。由于sjid“1”和“4”包括表示修改2004中的内容值“aaa”和“aa2”的块“h1”和“h4”,因此文件日志接口1902可确定sjid“1”表示添加操作,并且sjid“4”表示编辑操作,并且结果状态基于sjid“4”处的编辑操作。

在步骤2054处,基于相应的操作,文件日志接口1902针对每个内容项生成一组线性化操作(例如,1972)。所述一组线性化操作可基于日志1960中的多个修订来反映每个内容项的修改2004。文件日志接口1902可通过使基于相对时钟和/或因果关系针对每个内容项计算的相应操作线性化来将多个修订(1972)转换成所述一组线性化操作(324a)。

在步骤2056处,文件日志接口1902生成标识由所述一组线性化操作表示的日志1960中的位置的光标(例如,324b)。在步骤2058处,文件日志接口1902向客户端设备150发送所述一组线性化操作和光标。光标可包括用于每个名称空间和/或操作的相应名称空间标识符(nsid)和日志标识符(sjid)。光标中nsid和sjid的组合可指示日志1960中对特定名称空间的修订号。客户端设备150可使用光标来标识由客户端设备150获得的修订以及对应于已经由客户端设备150获得的修订的客户端设备150在日志1960中的位置。客户端设备150还可将其最新光标提供给文件日志接口1902以向文件日志接口1902报告客户端设备150在日志1960中的当前位置。例如,客户端设备150可将光标提供给文件日志接口1902以确定客户端设备150是否需要新的修订。

当在客户端设备150处向文件日志接口1902报告操作时,客户端设备150还可将其光标提供给文件日志接口1902。光标将操作映射到日志1960中的特定修订和/或日志1960中的位置。这允许文件日志接口1902确定来自客户端设备150的操作是否基于由操作修改的对内容项的最新修订。

客户端设备150可接收光标和一组线性化操作并且基于所述操作在客户端设备150处更新内容项。这样,客户端设备150可使内容项在客户端设备150与内容管理系统110之间同步。客户端设备150可存储光标以将其在日志1960中的位置提供给文件日志接口1902。

图21示出跨名称空间操作的示例性线性化的图。跨名称空间线性化和跨分片或跨名称空间列表可通过时钟排序来执行。表2102a、2102b(统称为“2102”)示出针对线性化的一批跨名称空间操作。表2102a、2102b分别包括列2106a、2108a,所述列2106a、2108a是用于标识表2102a、2102b中的记录的名称空间的名称空间(nsid)字段;列2106b、2108b,所述列2106b、2108b是用于标识表2102a、2102b中的针对列2106a、2108a中相应名称空间的行或sjid的sjid字段;列2106c、2108c,所述列2106c、2108c是用于标识与每个sjid相关联的操作的操作字段;以及列2106d、2108d,所述列2106d、2108d是用于标识与列2106c、2108c中的操作相关的时间戳的时钟字段。

在这个实例中,表2102a描绘nsid“1”的sjid“100”和“101”。sjid“100”与在时间戳“1000”处向名称空间“1”添加“foo.txt”的操作相关联,并且sjid“101”与在时间戳“1001”处安装名称空间“2”的操作相关联。表2102b描绘nsid“2”的sjid“1”和“2”。sjid“1”与在时间戳“2100”处向名称空间“2”添加“bar.txt”的操作相关联,并且sjid“2”与在时间戳“1002”处编辑“bar.txt”的操作相关联。

线性化程序(例如,转换服务1904)可获得表2102a和2102b(统称2102)中的这批操作,并且利用光标(2114)发出单一操作流(2112)。线性化程序可标识在表2102中具有至少一个操作的所有名称空间,并且基于相应的时间戳、nsid、sjid来使针对所有名称空间的操作线性化。在这个实例中,表2102中的这批操作被线性化为表2104中所示的操作流。

表2104包括:nsid列2110,所述nsid列2110包括用于标识每个操作的名称空间的nsid字段;操作列2112,所述操作列2112包括用于标识表2104中的操作的操作字段;以及光标列2114,所述光标列2114包括用于标识每个操作的光标状态的光标字段。表2104中的行2104a包括来自表2102a中的名称空间“1”的sjid“100”的添加操作。行2104a的光标列2114中的光标状态是名称空间“1”和sjid“100”,这指示添加操作对应于表2102a中所示的名称空间“1”中的sjid“100”。表2104中的行2104b不包括nsid列2110或操作列2112中的值,但是将光标列2114中的光标状态更新成包括跨名称空间光标状态,在这个实例中,所述跨名称空间光标状态针对名称空间“2”添加sjid“0”。

表2104中的行2104c包括来自表2102a中所示的名称空间“2”中的sjid“1”的添加操作。针对行2104c的光标列2114中的光标状态包括与行2104c中的添加操作相关联的名称空间“1”和“2”的相应的sjid“100”和“1”。如图所示,光标状态指示光标在名称空间“1”中的sjid“100”和名称空间“2”中的sjid“1”处。换句话讲,名称空间“1”中的行或sjid并未增加,因为添加操作不会影响名称空间“1”的状态,但是名称空间“2”中的行或sjid增加了一,因为添加操作表示名称空间“2”中的修订并且影响了名称空间“2”的状态。因此,行2104c中的光标状态在名称空间“2”中的sjid“1”处进行添加操作之后,跟踪名称空间“1”和名称空间“2”的相应sjid。

表2104中的行2104d包括在表2102a的sjid“101”和名称空间“1”处的安装操作。安装操作将名称空间“2”安装在名称空间“1”处。安装操作将名称空间“1”中的sjid从“100”增加到“101”,但不会增加名称空间“2”中的sjid。因此,行2104d的光标列2114中的光标状态包括用于名称空间“1”的sjid“101”,并且保持用于名称空间“2”的sjid“1”。该光标状态反映名称空间“1”和“2”处的状态和/或顺序。

表2104中的行2104e包括在表2102a中的sjid“2”和名称空间“2”处的编辑操作,根据安装操作和编辑操作的相应时间戳,所述编辑操作在名称空间“1”中的sjid“101”处的安装操作之后进行。行2104e的光标列2114中的光标状态将针对名称空间“1”的光标状态维持在sjid“101”处,但将针对名称空间“2”的光标状态增加到sjid“2”。

如表2104所示,操作2112被列出为基于跨名称空间“1”和“2”的因果关系和时间戳线性化的操作流。一旦在表2104中使操作2112线性化以反映跨名称空间的因果关系和排序,就可将操作2112转换成服务器文件日志148中的修订(例如,日志1960中的修订1972)并且写入服务器文件日志148。

例如,可将服务器文件日志148中的名称空间“1”的日志更新成包括sjid“100”处的修订和sjid“101”处的修订,所述sjid“100”处的修订表示将“foo.txt”添加到名称空间“1”的添加操作,所述sjid“101”处的修订表示在名称空间“1”上安装名称空间“2”的安装操作。此外,可将服务器文件日志148中的名称空间“2”的日志更新成包括sjid“1”处的修订和sjid“2”处的修订,所述sjid“1”处的修订表示将“bar.txt”添加到名称空间“2”的添加操作,所述sjid“2”处的修订表示编辑名称空间“2”上的“bar.txt”的编辑操作。

兰波特时钟

图22示出跨名称空间根据针对事件计算的兰波特时钟排序的事件的图。在这个实例中,跨名称空间nsid1、nsid2和nsid3已经执行各种操作。每个名称空间维持该名称空间处的每个操作的sjid,以便确定操作在名称空间内的排序。然而,名称空间的sjid不会标识操作跨名称空间的排序和因果关系。因此,针对名称空间nsid1、nsid2、nsid3中的操作计算兰波特时钟,以确定因果关系并且获得操作的跨命名空间排序。

在nsid1处,操作2210具有sjid1和时钟1。在nsid2处,操作2216具有sjid1和时钟1。在nsid处,操作2220具有sjid1和时钟1。操作2210、2216、2220跨越多个名称空间并且不具有因果关系。因此,操作2210、2216、2220不会影响彼此的时钟。

可基于名称空间处的sjid来确定操作在名称空间内的顺序。相同名称空间内的操作的时钟可仅仅递增1。因此,在nsid1中的sjid2处,操作2212的时钟递增至2。

nsid1中的操作2212是file1移动到nsid2。因此,操作2212在nsid2处触发操作2218,所述操作2218是在nsid2处添加file1。由于nsid2处的操作2218有因果地取决于来自不同名称空间的另一个操作,即,来自nsid1的操作2212,因此基于nsid1处的时钟和nsid2处的时钟来计算操作2218的时钟。算法可表述为:targetns_clockt1=最大(source_nsclock,targetns_clockt0)+1。因此,在这个实例中,用于nsid2处的操作2218的时钟为3(例如,最大(2,1)+1)。因此,nsid2处的操作2218具有sjid2和时钟3。

类似地,在nsid处的操作2216是将file2从nsid2移动到nsid1。因此,操作2216在nsid1处触发操作2222,所述操作2222是在nsid1处添加file2。基于时钟算法计算操作2222的时钟,所述时钟等于3。因此,操作2222在nsid1处具有sjid3和时钟3。

nsid3处的操作2223有因果地取决于相同名称空间中的操作,即,nsid3处的操作2220。因此,可通过使nsid3处的操作2220的时钟递增来计算操作2223的时钟。在这个实例中,操作2223的时钟因此为2。nsid3处的操作2223具有sjid2和时钟2。由于操作2223是用于将dir移至nsid1的移动操作,因此操作2223触发nsid1处的操作2224,从而将dir添加到nsid1。

由于操作2224由不同名称空间(nsid3)中的操作2222触发,因此基于nsid1处的时钟和操作2222的时钟来计算操作2224的时钟。因此,操作2224的时钟被设置为4(例如,最大(2,3+1)。因此,操作2224在nsid1处具有sjid4和时钟4。

nsid1处的操作2226将file3添加到nsid1,并且不是跨名称空间操作。因此,通过使nsid1处的时钟递增来计算操作2226的时钟。因此,操作2226的时钟被设置为5。

操作2228有因果地也取决于nsid1内的操作2226。因此,通过使nsid1处的操作2226的时钟递增来将操作2228的时钟设置为6。操作2228在nsid1处具有sjid6和时钟6。

操作2228是将file3移动至nsid3的移动操作。因此,操作2228触发nsid3处的操作2230。由于操作2230基于来自不同名称空间的操作,因此其时钟使用时钟算法基于nsid3处的时钟和操作2228的时钟来计算。在这种情况下,操作2230的时钟被设置为7。因此,操作2230在nsid3处具有sjid3和时钟7。

操作2232、2234不是跨名称空间操作,并且有因果地与nsid3处的操作2230相关。因此,可通过使操作2230的时钟递增来计算操作2232、2234的时钟。在这个实例中,操作2232、2234的时钟分别被设置为8和9。

图23示出计算系统2300的实例,所述计算系统2300可以是例如构成客户端设备150、内容管理系统110或其任何组件的任何计算设备,其中系统的组件使用连接2305彼此通信。连接2305可以是通过总线的物理连接或诸如在芯片组架构中与处理器2310的直接连接。连接2305也可以是虚拟连接、网络连接或逻辑连接。

在一些实施方案中,计算系统2300是分布式系统,其中本公开中描述的功能可分布在一个数据中心、多个数据中心、对等网络等内。在一些实施方案中,所描述的系统组件中的一个或多个标识许多此类组件,每个此类组件执行描述组件的功能中的一些或全部。在一些实施方案中,组件可以是物理设备或虚拟设备。

示例性系统2300包括至少一个处理单元(cpu或处理器)2310和连接2305,所述连接2305将各种系统组件(包括系统存储器2315,诸如只读存储器(rom)2320和随机存取存储器(ram)2325)耦合到处理器2310。计算系统2300可包括与处理器2310直接连接、紧密接近处理器2310或者作为处理器2310的一部分集成的高速存储器2312的高速缓存。

处理器2310可包括任何通用处理器和硬件服务或软件服务,诸如存储在存储设备2330中的服务2332、2334和2336,其被配置来为控制处理器2310;以及专用处理器,其中软件指令被并入到实际的处理器设计中。处理器2310实质上可以是完全独立成套的计算系统,其包含多个核或处理器、总线、存储器控制器、高速缓存等。多核处理器可以是对称的或不对称的。

为了实现用户交互,计算系统2300包括输入设备2345,所述输入设备2345可表示任何数目的输入机制,诸如用于语音的麦克风、用于手势或图形输入的触敏屏幕、键盘、鼠标、运动输入、语音等。计算系统2300还可包括输出设备2335,所述输出设备2335可以是本领域技术人员已知的许多输出机制中的一个或多个。在一些情况下,多模态系统可使用户能够提供多种类型的输入/输出以与计算系统2300通信。计算系统2300可包括通信接口2340,所述通信接口2340总体上可支配并管理用户输入和系统输出。在任何特定硬件布置上没有操作限制,并且因此本文的基本特征可以很容易地替代随着开发而改进的硬件或固件布置。

存储设备2330可以是非易失性存储设备并且可以是硬盘或可存储可由计算机访问的数据的其他类型的计算机可读介质,诸如磁带盒、闪存卡、固态存储器设备、数字多用光盘、盒式磁盘(cartridge)、随机存取存储器(ram)、只读存储器(rom)和/或这些设备的一些组合。

存储设备2330可包括软件服务、服务器、服务等,当定义此类软件的代码由处理器2310执行时其致使系统执行功能。在一些实施方案中,执行特定功能的硬件服务可包括存储在计算机可读介质中并与必要的硬件组件(诸如处理器2310、连接2305、输出设备2335等)一起实现功能的软件组件。

为了解释清楚,在一些情况下,本技术可以被呈现为包括单独的功能块,所述单独的功能块包括包括有设备、设备组件、软件中体现的方法中的步骤或例程或者硬件和软件的组合的功能块。

本文所述的任何步骤、操作、功能或过程可单独地或与其他设备组合地用硬件和软件服务来执行或实现。在一些实施方案中,服务可以是驻留在客户端设备的存储器和/或内容管理系统的一个或多个服务器中的软件并且当处理器执行与服务相关联的软件时执行一个或多个功能。在一些实施方案中,服务是执行特定功能的程序或程序集合。在一些实施方案中,服务可被认为是服务器。存储器可以是非暂时性计算机可读介质。

在一些实施方案中,计算机可读存储设备、介质和存储器可以包括包含比特流等的有线或无线信号。然而,当提及时,非暂时性计算机可读存储介质本身明确地排除了诸如能量、载波信号、电磁波和信号的介质。

根据上述实例的方法可以使用计算机可读介质存储或以其他方式获得的计算机可执行指令来实现。此类指令可以包括例如使得或以其他方式配置通用计算机、专用计算机或专用处理设备来执行某一功能或一组功能的指令和数据。所使用的计算机资源的部分可以通过网络访问。计算机可执行指令可以是例如二进制文件、中间格式指令(诸如汇编语言)、固件或源代码。可用于存储指令、所使用的信息和/或在根据所述实例的方法期间创建的信息的计算机可读介质的实例包括磁盘或光盘、固态存储器设备、闪存、提供有非易失性存储器的usb设备、网络存储设备等。

实现根据这些公开的方法的设备可以包括硬件、固件和/或软件,并且可以采取多种形态因素中的任一种。此类形态因素的典型实例包括服务器、膝上型计算机、智能电话、小型个人计算机、个人数字助理等。本文描述的功能性也可以在外围设备或插入卡中体现。作为另外的实例,此种功能性还可以在不同芯片中的电路板上或者在单个设备中执行的不同进程中实现。

指令、用于传送此类指令的介质、用于执行所述指令的计算资源以及用于支持此类计算资源的其他结构是用于提供这些公开中所述的功能的手段。

尽管使用多种实例和其他信息来解释处于所附权利要求书的范围内的方面,但是基于此类实例中的特定特征或布置不应暗示权利要求书的限制,因为普通技术人员将能够使用这些实例推导出多种多样的实现方式。此外,尽管一些主题可能已用特定于结构特征和/或方法步骤的实例的语言进行描述,但是应理解,所附权利要求书中限定的主题不必限于这些描述的特征或动作。例如,此种功能性可以不同地分布或者在除了本文鉴别的组件之外的组件中执行。相反,所述特征和步骤被公开为处于所附权利要求书的范围内的系统和方法的组件的实例。

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