CN109313634A - 用于单个文件的文件同步暂停 - Google Patents
用于单个文件的文件同步暂停 Download PDFInfo
- Publication number
- CN109313634A CN109313634A CN201780018535.3A CN201780018535A CN109313634A CN 109313634 A CN109313634 A CN 109313634A CN 201780018535 A CN201780018535 A CN 201780018535A CN 109313634 A CN109313634 A CN 109313634A
- Authority
- CN
- China
- Prior art keywords
- file
- server
- content
- client
- synchronous
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/10—File systems; File servers
- G06F16/17—Details of further file system functions
- G06F16/178—Techniques for file synchronisation in file systems
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/10—File systems; File servers
- G06F16/13—File access structures, e.g. distributed indices
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/10—File systems; File servers
- G06F16/18—File system types
- G06F16/182—Distributed file systems
- G06F16/184—Distributed file systems implemented as replicated file system
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Data Mining & Analysis (AREA)
- Databases & Information Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
- Information Transfer Between Computers (AREA)
- Document Processing Apparatus (AREA)
Abstract
提供了用于在本地文件系统和服务器之间同步文件的系统、组件、设备和方法。在示例中,通过将单个文件置于保持状态,来暂停单个文件的同步。一种非限制性示例方法访问存储在本地文件系统上的文件以用于与服务器上的相关联的文件同步,并且确定文件与相关联的文件之间的差异是否阻止同步。在确定文件与相关联的文件之间的差异阻止同步时,该方法将文件置于保持状态。保持状态暂停文件的内容与相关联的文件的内容的同步。在一些示例中,在确定文件不再与相关联的文件不同之后,该方法继续同步针对已经置于保持状态的文件的拓扑改变和/或恢复同步。
Description
背景技术
基于网络的存储服务在可经由网络可用的计算设备上存储文件。基于网络的存储服务的非限制性示例包括来自华盛顿雷蒙德的微软公司的OneDrive、来自加利福尼亚州山景谷歌公司的谷歌驱动器、来自加利福尼亚州洛斯阿尔托斯的Box公司的Box、来自加利福尼亚州旧金山的Dropbox公司的Dropbox、以及来自加利福尼亚州圣克拉拉的syncplicityLLC的syncplicity。取决于使用,使用基于网络的存储服务所存储的文件可以被仅仅单一用户访问,也可以被多个用户访问。
基于网络的存储服务通常还将本地存储在客户端计算设备上的文件与由基于网络的存储服务所存储的文件进行同步。例如,基于网络的存储服务可以对位于客户端计算设备上的文件系统中的一个或多个目录里的文件进行同步。在用户对该目录中的文件进行编辑之后,将对文件的改变中继到基于网络的存储服务。相反,如果在基于网络的存储服务中改变了正在同步的文件(例如,另一个用户访问该文件),则将这些改变中继到客户端计算设备上的文件。
当多个用户同时地改变同一文件时,可能不能进行同步。替代地,基于网络的存储服务可以对改变的文件进行“分叉”,创建具有不同名称和不同内容的该文件的两个副本。文件的这种分叉通常是不期望的。用户通常不想具有文件的两个副本。具有文件的两个副本会阻止合并或冲突的其它调解。此外,由于存在文件的两个副本,因此用户可能会在没有认识到存在其它副本的情况下,访问副本中的一个。
关于这些和其它一般考虑因素,实现了各方面。虽然已经讨论了相对具体的问题,但是应当理解的是,这些方面不应限于解决背景技术中识别的特定问题。
发明内容
提供本发明内容来以简化的形式介绍将在以下的具体实施方式中进一步描述的概念选择。本发明内容并不是旨在标识所要求保护的主题的所有关键特征或本质特征,也不是用于帮助确定所要求保护的主题的保护范围。
一个方面是用于在本地文件系统和服务器之间同步文件的方法。该方法包括:访问存储在本地文件系统上的文件以用于与服务器上的相关联的文件同步。此外,该方法还包括:确定文件与相关联的文件之间的差异是否阻止文件和相关联的文件的同步。在确定文件与相关联的文件之间的差异阻止该文件与相关联的文件的同步时,该方法将文件放置于保持状态。保持状态暂停文件的内容与相关联的文件的内容的同步。在一些示例中,在确定文件不再与相关联的文件不同之后,该方法继续对放置于保持状态的文件的拓扑改变进行同步和/或恢复同步。
示例被实现为计算机过程、计算系统或者诸如设备、计算机程序产品或计算机可读介质之类的制品。根据一个方面,计算机程序产品是计算机系统可读的计算机存储介质,并且对计算机程序进行编码,所述计算机程序包括用于执行计算机过程的指令。
在附图和下面的描述中,阐述了一个或多个方面的细节。根据阅读以下详细描述并查看相关联的附图,其它特征和优点将变得显而易见。应当理解的是,下面的详细描述仅是示例性的,而并非是对权利要求的限制。
附图说明
参照下面的附图来描述非限制性和非详尽的示例。
图1是用于提供基于网络的存储服务的系统的示例的简化框图。
图2示出了用于在将本地改变同步到基于网络的文件服务器之前,识别潜在冲突的方法。
图3示出了用于在将远程改变从基于网络的文件服务器同步到本地文件之前,识别潜在冲突的方法。
图4包括基于检测冲突来保持文件的示例性客户端的示出。
图5包括基于客户端检测冲突来保持文件的两个示例性客户端的示出。
图6A-图6C示出了同步引擎将文件放置于保持状态的场景。
图7包括针对图6中所示出的冲突的示例性解决方案的示出。
图8A和图8B示出了对正被保持的文件进行的编辑。
图9A和图9B示出了对正由另一个客户端保持的文件进行的编辑。
图10示出了由同步引擎的实现器组件的一些方面所执行的处理所保持文件的远程编辑的方法。
图11A和图11B示出了正由客户端保持的文件在该客户端上进行重命名。
图12A和图12B示出了正由客户端保持的文件在另一个客户端上进行重命名。
图13A和图13B示出了正由客户端保持的文件从一个文件夹移动到另一个文件夹。
图14A和图14B示出了正由客户端保持的文件从一个文件夹移动到另一个客户端上的另一个文件夹。
图15A和图15B示出了对正由客户端保持的文件进行删除的场景。
图16示出了由同步引擎的扫描器组件的一些方面所执行的处理所保持的文件的本地删除方法。
图17A和图17B示出了正由客户端保持的文件被另一个客户端删除的场景。
图18示出了由同步引擎的扫描器组件的一些方面所执行的处理已经远程删除的保持文件的方法。
图19A和图19B示出了对正由客户端保持的文件进行本地和远程重命名的场景。
图20示出了在使用共同创作应用对文件进行编辑时,由扫描器组件的方面执行的方法。
图21示出了在使用共同创作应用对文件进行编辑时,由扫描器组件的方面执行的方法。
图22示出了在一些方面,在图1的用户计算设备上生成以引导用户解决正在被保持的文件的冲突的示例性用户界面。
图23是示出了计算设备的示例性物理组件的框图。
图24A和图24B是移动计算设备的框图。
图25是分布式计算系统的框图。
具体实施方式
下面的具体实施方式参照附图。在可以时,在附图和下面的描述中使用相同的附图标记来指代相同或者类似的元素。虽然描述了本发明的示例,但针对其的修改、调整和其它实现方式也是可能的。例如,可以对附图中所示出的元素进行替代、增加或者修改,并且可以通过对所公开的方法进行替代、重新排序或者增加阶段来修改本文所描述的方法。因此,以下的详细描述并非是对本发明进行限制,相反,本发明的适当保护范围由所附权利要求书进行限定。示例可以采用硬件实现的形式,或者完全地采用软件实现的形式,或者采用组合软件和硬件方面的实现的形式。因此,下面的详细描述不应是限制意义的。
文件同步可用于多种通用活动。例如,共同创作涉及多个用户从多个计算设备访问共享文件,以同时地对文件进行编辑。当用户编辑文件时,需要将这些编辑同步到其它用户。通常,在用户没有关闭和保存文件的情况下,对这些改变进行同步。但是,如果用户在共同创作时失去了网络接入,则用户正在编辑的文件可能将变得失去与共享文件的同步。这可能导致冲突。提供共同创作能力的文件编辑器的示例包括:诸如来自华盛顿雷蒙德的微软公司的WORD文档编辑器之类的文档编辑器、诸如也来自微软公司的电子表格之类的电子表格编辑器、诸如也来自微软公司的幻灯片编辑器之类的幻灯片编辑器、以及诸如也来自微软公司的图表编辑软件之类的图表编辑器。
同步引擎可以响应于检测到冲突而将文件设置为保持状态。将文件设置为保持状态可以是对文件进行分叉的替代方案。当文件处于保持状态时,同步引擎可以继续同步其它文件。当文件处于保持状态时,同步引擎将不会对文件的内容的改变进行同步(例如,将不会上传文件的更新的内容,也不会从基于网络的服务器下载对文件的内容的改变),但同步引擎将继续同步对文件的拓扑改变。拓扑改变的示例包括:对文件进行重命名或者将文件移动到文件系统中的另一个目录。
当文件处于保持状态时,同步引擎还可以继续同步对文件的至少一些元数据改变。另外,用户可以在文件处于保持状态时,继续修改文件的内容。当解决了冲突时,文件将离开保持状态并恢复内容同步。可以通过用户合并内容(例如,使用合并工具),选择覆盖本地或远程改变(即,用户选择以本地文件或远程文件来继续),或者选择将文件分叉成两个文件,来解决冲突。
还可以由于诸如以下的其它原因,将文件放置于保持状态:例如,当由于文件损坏而不能同步本地产生的改变时、文件名太长、文件被加密、文件太大等等。在一些方面,可以通过基于用户请求(例如,通过用户界面上的菜单选项)将文件放置于保持状态,来暂停文件的同步。
通常,可以使用适当的文件编辑器来解决冲突。例如,如果处于保持状态的文件是文档,则文档编辑器能够分析对本地文件和远程文件的改变,以确定是否自动地合并这两个文件。自动合并可以在无需用户输入的情况下,对来自文档的多个版本的改变进行组合,其中文档的多个版本例如处于文档的不同区域。但是,一些文档编辑器可能不能够自动地合并所有类型的改变。例如,如果在文件的冲突版本中改变了相同的语句,则文档编辑器可能无法确定将对该语句的哪些改变并入到该文件的合并版本中。在这些情形下,文档编辑器可以呈现引导用户解决该冲突的用户界面。
图1是用于提供基于网络的存储服务的系统100的示例的简化框图。如图1中所示,系统100包括可由用户U操作的用户计算设备102和基于网络的存储服务器104。用户计算设备102和基于网络的存储服务器104通过网络进行通信。
用户计算设备102包括用户代理108、同步引擎110和数据存储112。用户代理108允许用户与文件(例如,存储在数据存储112中的文件114)进行交互。在一些实施例中,用户代理108是运行在用户计算设备102上的应用。另外,用户代理108可以是运行在用户计算设备102上的操作系统的组件。在一些示例中,用户代理108是浏览器应用,其基于经由网络接收的内容来生成交互式图形用户界面。根据示例,在用户计算设备102上安装扩展件作为浏览器应用(即,用户代理108)的插件或附加组件,或者将扩展件嵌入在浏览器应用中。
数据存储112操作以存储文件114和文件状态数据库116以及其它数据。数据存储可以包括一个或多个文件系统和诸如关系数据库之类的数据库。可以将文件114组织成分层目录结构。文件状态数据库116存储关于文件114中的至少一些的数据。
同步引擎110可以被配置为对文件114的所有进行同步。替代地,同步引擎110被配置为对文件114中的一些(例如,存储在数据存储112中的目录里的一个或多个中的文件)进行同步。在一些方面,同步引擎包括扫描器组件和实现器组件。扫描器组件对数据存储112中的文件或目录进行扫描,以识别发生了改变并需要上传到基于网络的存储服务器104的文件。实现器组件与基于网络的存储服务器104进行通信,以确定何时文件被远程地更新并需要从基于网络的存储服务器104下载。
同步引擎110存储关于文件114的信息,其被配置为在文件状态数据库116中进行同步。例如,同步引擎110可以存储资源ID、版本值、一个或多个哈希值、以及已经从基于网络的存储服务器104同步的每个文件的同步状态。
资源ID用于识别文件,并且将文件与由基于网络的存储服务器104所存储的文件进行关联。版本值指示文件的版本号。可以在文件的内容或元数据发生改变的任何时间,更新版本值(其有时称为etag值)。在一些方面,存储两个哈希值:服务器哈希(其有时称为DB中的服务器哈希)和本地哈希(其有时称为DB中的本地哈希)。存储在文件状态数据库116中的服务器哈希是用户计算设备102从服务器接收的最新文件哈希值。文件状态数据库116中的本地哈希是当用户计算设备102上的文件最新与基于网络的存储服务器104同步时的文件哈希值。
使用该哈希值,同步引擎110可以确定本地存储的文件在上一次同步操作之后是否发生改变(例如,通过计算相对应的本地存储的文件的哈希值,将其与文件状态数据库116中的本地哈希值进行比较)。同步状态指示文件的当前同步状态。例如,同步状态可以指示同步对于文件是有效的,还是同步处于保持。此外,文件状态数据库116还可以存储与同步状态有关的其它数据,例如,ServerFileIsNewer(或ServerFileIsNewerThanLocalFile)标志,以指示在基于网络的存储服务器104可获得文件的更新版本。在一些方面,文件状态数据库还存储保持原因和保持解决字段。用于保持原因的示例值可以包括表示“冲突”、“最大路径”和“暂停”的值。
基于网络的存储服务器104操作以向诸如用户计算设备102之类的一个或多个计算设备提供基于网络的存储服务。如图1中所示,基于网络的存储服务器104包括基于网络的存储服务引擎118和数据存储120。基于网络的存储服务引擎118与同步引擎110进行交互以提供对数据存储120中的文件122以及关于这些文件的信息的访问,使得同步引擎110可以确定何时需要进行同步。
如果在本地和服务器上编辑了文件,而没有在它们进行同步,则可能发生编辑到编辑冲突。例如,当多个用户同时地从不同的客户端设备来编辑文件时,可能发生这种类型的编辑到编辑冲突。此外,当同一用户从多个计算设备编辑文件时,也可能发生这种类型的编辑到编辑冲突。当用户计算设备与网络断开一段时间时(例如,当用户计算设备操作在飞行模式时),最可能发生这些编辑到编辑冲突。至少参照图2-3来示出和描述生成编辑到编辑冲突的情形的示例。
数据存储120存储文件和其它数据,并且可以包括一个或多个文件系统和诸如关系数据库之类的数据库。数据存储112可以包括一个或多个服务器计算设备。在一些方面,数据存储112可以包括分布式数据库或分布式文件系统。
如本文所使用的,服务器可以包括能位于任何地方的一个或多个计算设备(其包括一个或多个服务器群),这包括:与用户计算设备102邻近或者分布在世界的各个位置。
在本地编辑期间发生下面的步骤。用户编辑文件,并且保存改变(例如,使用用户代理108)。同步引擎110扫描本地改变,并上传到基于网络的存储服务器104。至少参照图2来示出和描述了扫描和上传改变的示例性方法。在上传了改变之后,同步引擎110从基于网络的存储服务器104下载文件的更新的元数据,并且将其本地存储在文件状态数据库116中。元数据可以包括文件的更新的版本号和文件的更新的服务器哈希值。
在下载远程编辑时发生下面的步骤。同步引擎110从基于网络的存储服务器104下载元数据,并且将元数据存储在文件状态数据库116中。随后,同步引擎110将远程改变的文件的文件内容下载到临时位置。随后,使用下载到临时位置的副本来替代本地文件。至少参照图3来示出和描述了下载远程文件编辑和检查潜在冲突的示例性方法。
图2示出了用于在将本地改变同步到基于网络的文件服务器之前,识别潜在冲突的方法200。方法200可以由系统(例如,系统100)的组件来执行。例如,方法200可以由同步引擎110的扫描器组件来执行。可以在包括至少一个处理器的设备上执行方法200,其中所述至少一个处理器被配置为存储和执行操作、程序或指令。
初始时,在操作202处,同步引擎在被激活(例如,基于调度、检测到的改变、来自用户或应用的信号等等)之前空闲。随后,在操作204处,同步引擎针对改变来扫描本地文件。在操作204期间,可以对本地文件中的一些或全部进行扫描。
在操作206处,选择特定的本地文件。在操作208处,确定所选择的文件是否发生移动。如果是,则方法转到操作210处,其中,创建并存储文件移动记录(例如,增加到记录的表或队列中,其需要进一步处理以用于同步)。如果不是,则该方法转到操作212处。
在操作212处,确定文件的哈希值是否发生改变(例如,通过计算磁盘上的文件的新哈希值)。如果改变,则该方法转到操作214处,其中创建并存储文件改变记录(例如,增加到记录的表或队列中,其需要进一步处理以用于同步)。如果没有改变,则该方法转到操作206处,其中可以选择新的文件进行扫描。类似地,在创建文件移动或文件改变记录之后,该方法可以返回到操作206,直到扫描完所有本地文件为止。
在扫描完文件之后,方法200转到操作216处,其中对这些改变进行解释。在一些方面,与扫描文件并行地解释改变和移动。在操作218处,选择文件改变或文件移动以进行解释。
在操作220处,确定与选择的记录相关联的文件的服务器版本是否比上一次从服务器同步的文件的版本更新(例如,通过将数据库中存储的版本号与服务器上的版本号进行比较)。如果是,则该方法转到操作222,其中,确定本地文件的哈希值是否与服务器上的文件的哈希值相匹配。如果不是,则在操作224处,将该文件标记成处于冲突或者预冲突,并使其处于保持状态。在保持状态下,可以停止或者中止进一步的同步活动,以避免不必要的活动,并且将同步资源保留用于其它文件。在检测到冲突/预冲突之后,方法200可以返回到操作218以解释额外的记录。
如果替代地,在操作222处哈希值匹配,或者在操作220处确定服务器版本不是更新的,则该方法返回到操作218处,其中选择另一个记录以进行解释。
在操作226处,将扫描过程期间检测到的改变发送到服务器。但是,在一些方面,针对于处于保持状态的改变不发送到服务器。在操作228处,扫描器等待来自服务器的指示已经接收到和接受这些改变的响应。
可以在完成全扫描或精确扫描时,执行方法200。全扫描对于同步引擎被配置为同步的所有文件和目录进行处理。可以由于多种原因而执行全扫描。在一些方面,在系统重新启动之后,执行全扫描。精确扫描可以对于同步引擎被配置为同步的文件和目录的子集进行处理。也可以由于多种原因来执行精确扫描。作为示例,当观察器组件注意到对文件的改变(例如,文件被写入、编辑时间戳发生更新等等)时,可以执行精确扫描。
图3示出了用于在将远程改变从基于网络的文件服务器同步到本地文件之前,识别潜在冲突的方法300。方法300可以由系统(例如,系统100)的组件来执行。例如,方法300可以由同步引擎110的实现器组件来执行。可以在包括至少一个处理器的设备上执行方法300,其中所述至少一个处理器被配置为存储和执行操作、程序或指令。
同步引擎110通过从基于网络的存储服务器104下载数据来发现文件改变,处理这些文件改变,处理预冲突,处理本地文件替换,以及存储(坚持)同步令牌。在这些步骤期间,可以检测冲突或者预冲突。可以通过使与远程编辑的文件相对应的本地文件置于保持状态,来处理冲突或预冲突。虽然该附图将改变示出成远程地发生,但通常是由于在没有同步的情况下对文件进行了本地和远程改变而发生冲突/预冲突状况。
在操作302处,从服务器接收改变。例如,可以从服务器下载改变。在操作304处,对所接收的改变进行处理。在操作306处,将改变匹配到本地文件,并且对本地文件进行标记。在操作308处,确定本地文件的哈希值是否与服务器上的哈希值匹配。如果匹配,则该方法继续到操作312处。否则,该方法继续到操作310处,其中将该文件标记成用于预冲突处理。
在操作312处,对所接收的文件改变进行处理。在314处,确定执行方法300的用户计算设备是否是该改变的发起者。如果是,该方法转到操作316处,对本地元数据进行更新。否则,该方法转到操作318。
在操作318处,确定磁盘上的该文件的哈希值是否与服务器上的文件的哈希值相匹配。如果匹配,则该方法转到操作320,其中对本地元数据进行更新。并且随后,该方法转到操作322,其中向服务器通知不需要该文件。
如果替代地,在操作318处确定磁盘上的该文件的哈希值与服务器上的文件的哈希值不匹配,则该方法转到操作324,其中对元数据的服务器集进行更新。并且随后,该方法转到操作326,向服务器通知需要该文件。
在操作328处,对预冲突进行处理。在一些方面,操作328处理在操作310期间被标记成预冲突的文件中的每一个。在操作330处,将这些文件置于保持状态,如先前已经描述的。
在操作332处,对替换文件操作进行处理。在一些方面,针对在操作326中向服务器通知的每一个文件,来执行替换文件操作。可以将所需要的替换文件初始地下载到临时目录。其后,该方法转到操作334,其中将磁盘上的该文件的哈希值与数据库中存储的哈希值进行比较。如果它们相同,则其指示本地文件的内容自从上一次同步以来没有发生改变,并且该方法可以转到操作340。
如果哈希不匹配,则该方法转到操作336,其中将本地文件的哈希值与数据库中的服务器哈希值(其对应于客户端从服务器监听的上一个哈希)进行比较。如果哈希匹配,则文件的内容是相同的,并且该方法可以转到操作340。
否则,该方法转到操作338,其中检测冲突。当检测到该冲突时,可以将文件置于保持状态,如先前已经描述的。随后,该方法转到操作340。
在操作340处,坚持同步令牌。在一些方面,通过将同步令牌存储在数据存储112中,来坚持同步令牌。同步令牌可以包括:已同步到用户计算设备的最新发生的改变的指示符。使用同步令牌,基于网络的存储服务器能够识别自从用户计算设备上一次同步以来发生的改变。之后,该方法转到操作342,其中完成同步操作。
在图2和图3所示出的两个处理中,通过将哈希值与先前存储的文件的哈希值进行比较,来检测和确认冲突/预冲突。例如,在同步时,本地文件的哈希值将与服务器上的文件的哈希值相匹配。将该匹配的哈希值存储在文件状态数据库116中。之后,如果本地文件改变,则其哈希值也将改变。转而,该哈希值也将不再与文件状态数据库116中的哈希值匹配。通常,可以对本地文件改变进行上传,以同步基于网络的存储服务器104上的内容。类似地,如果文件远程地发生改变,则远程文件的哈希值将不再与文件状态数据库116中存储的哈希值匹配(直到完成另一次同步为止)。通常,可以下载远程文件改变,以将内容从基于网络的存储服务器104同步到用户计算设备102。
如果存储在文件状态数据库116中的哈希值既不与本地文件的哈希值匹配,也不与远程文件的哈希值匹配,则在没有中间同步的情况下这两个文件均发生了改变。在该情况下,不期望上传本地文件或者下载远程文件来同步文件,这是由于这样做将覆盖本地或远程改变。可以将该情形描述成编辑到编辑冲突。在检测到文件的编辑到编辑冲突时,同步引擎110对文件进行保持。当文件被保持时,同步引擎既不将本地改变上传到基于网络的存储服务器104,也不从基于网络的存储服务器104下载远程改变。但是,同步引擎110可以继续同步不影响哈希值的改变。例如,如果本地文件被重命名,则同步引擎110也可以使相关联的远程文件进行重命名。
下面将描述生成或检测冲突的一些非限制性示例。
在示例中,在同步引擎110的扫描器组件重新开始本地编辑之前,同步引擎110的实现器组件下载和坚持元数据改变。扫描器组件对冲突进行高速缓存,发现文件在本地改变。在上传文件改变之前,同步引擎110检查本地文件版本是否滞后于基于网络的存储服务器上的版本。如果是,并且哈希值不与数据库中的服务器哈希相匹配,则中止上传。随后,可以将该文件置于保持状态。
在另一个示例中,在同步引擎110的实现器组件从基于网络的存储服务器104下载对文件的改变并进行存储之前,该文件在本地改变。实现器组件可以将元数据改变应用于本地文件。但是,同步引擎110的扫描器组件可以挑选改变,对冲突进行高速缓存,潜在地将文件置于保持状态。
在另一个示例中,在同步引擎110从基于网络的存储服务器104下载更新的元数据之前,进行了本地编辑(例如,使用用户代理108)。当文件在基于网络的存储服务器104上发生改变,并且同步引擎110获得该新改变时,在其更新来自服务器的元数据之前,同步引擎检查是否存在对同一文件的本地改变。如果存在本地改变,并且本地文件的哈希值与基于网络的存储服务器104上的文件的哈希值不同,则可以检测到冲突。转而,可以将该文件置于保持状态。
在类似于先前示例的另一个示例中,在从基于网络的存储服务器104下载新的元数据之前,进行了本地编辑。在该示例中,同步引擎的扫描器组件尝试上传文件改变,并且从服务器接收失败响应(由于服务器已经具有更新的版本)。基于该冲突,可以将本地文件置于保持状态。在另一个示例中,在同步引擎110完成从基于网络的存储服务器104下载更新的文件之后,但在其替换本地副本之前(例如,将改变下载到临时位置),识别冲突。同步引擎110的实现器组件获取冲突。在覆盖本地文件之前,实现器组件针对文件状态数据库116中存储的本地哈希值和根据基于网络的存储服务器104中的文件所计算的哈希值,来检查本地文件的哈希值。如果任意一个都不匹配,则检测到冲突,并且将本地文件置于保持状态。
虽然本文的大部分示例都与编辑到编辑冲突相关,但本文的方面也可以应用于其它类型的冲突。例如,在新创建的文件进行完全同步之前发生的冲突,可能造成类似的冲突(例如,创建到创建冲突或预种子冲突)。可以类似于本文所描述的编辑到编辑冲突,来解决这些冲突。除了对冲突的检测之外,还可能由于其它原因而对文件进行保持。例如,当高速网络访问是不可获得的时,用户可以明确地选择对较大文件的同步进行保持。用此方式,其它较小的文件可以继续进行同步,而不会具有用于传输较大文件所需要的延迟。
图4包括基于检测到冲突来保持文件的客户端的示例的示出400。在该示出中,在第一客户端404和第二客户端406之间没有同步的情况下,由服务器402(例如,基于网络的存储服务器104)存储和同步的文件夹410中的文件408被这两个客户端进行编辑。例如,第一客户端404可以是用户计算设备102,而第二客户端406可以是由相同或不同用户使用的第二类似的计算设备。在该示例中,第一客户端404修改了文件408的内容以生成内容412A,而第二客户端406修改了该文件的内容以生成内容412B。
在该示例中,第一客户端404的同步引擎不能将第一客户端404上的文件408的内容412A与服务器402上的文件408的内容412B进行合并。所以,第一客户端404的同步引擎对文件408进行保持(通过H图标来指示)。该保持状态对于第一客户端404是本地的,所以服务器402和第二客户端406仍然可以关于文件408保持同步。相比而言,如果使用了分叉模型,则第一客户端404、第二客户端406和服务器402中的每一个将具有两个不同的文件(一个具有内容412A,而一个具有内容412B)。
图5包括基于两个客户端检测到冲突而保持文件的两个示例性客户端的示出500。在该示出中,在第一客户端504和第二客户端506之间没有同步的情况下,由服务器502(例如,基于网络的存储服务器104)存储和同步的文件夹510中的文件508被这两个客户端进行编辑。例如,第一客户端504可以是用户计算设备102,而第二客户端506可以是由相同或不同用户使用的第二类似的计算设备。在该示例中,第一客户端504修改了文件508的内容以生成内容512A,而第二客户端506修改了文件508的内容以生成内容512B。在该示例中,第一客户端504和第二客户端506都不能将它们相应的文件与服务器进行同步(例如,由于第三客户端(没有示出)也对该文件进行了编辑)。所以第一客户端504和第二客户端506独立地对它们相应的文件进行保持。虽然在该示例中,将第一客户端504上的文件508的内容512A示出成与第二客户端506上的文件508的内容512B不同,但即使这两个客户端上的文件的内容相同,这两个客户端也可能对该文件进行保持。针对服务器502来评估该冲突(由于服务器502存储用于所有客户端的事实真相)。
在一些方面,在客户端计算设备处本地维持保持状态。在服务器502不了解在客户端计算设备中的一个或多个上将文件置于保持状态的情况下,维持保持状态。在这些客户端中的一个上保持的冲突的文件,并不会阻止其它客户端与服务器进行同步。但是,具有被保持文件的客户端上的内容改变不会被发送到服务器,并且因此将不会同步到其它客户端(并潜在地将这些其它客户端也置于冲突)。
在一些方面,在客户端或服务器上不存在数据丢失。保留在客户端上本地进行的内容改变,直到解决了冲突为止。即使本地文件处于冲突状态,用户也可以继续编辑和保存文件。但是,内容改变将不上传到服务器。可以继续从其它客户端更新服务器上的文件,但这些改变将不会下载到该客户端。在用户稍后解决了冲突时,用户可以选择合并、只保持本地副本、只保持服务器副本、或者这两个副本。
在一些方面,一个或多个冲突的存在不会阻止同步引擎以其它方式正常地执行。同步引擎将检测冲突,并且保持冲突(例如,通过使文件置于保持状态)并随后继续进行,或者解决冲突(如果可能的话)。在未来扫描期间,同步引擎可以检查文件状态数据库来确定扫描的文件中的任何一个是否当前正被保持。如果文件正被保持,则同步引擎可以继续进行拓扑改变和针对元数据文件的至少一些元数据改变的同步,但将不同步文件的内容(例如,同步引擎将不与基于网络的存储服务器104进行联系来上传或下载内容更新)。有利的是,同步引擎将不会保持尝试对被保持文件的内容改变进行处理。用此方式,同步引擎可以继续处理其它文件中的其它改变。
在一些方面,在文件处于保持状态时,对拓扑改变进行同步。同步引擎继续对于已经本地或远程执行的类似于重命名/移动/删除操作的拓扑改变进行同步。当执行扫描时,同步引擎可以继续针对拓扑改变或者对与文件相关联的元数据的改变,来分析被保持文件。如果检测到任何拓扑或元数据改变,则同步引擎可以将这些改变上传到基于网络的文件服务器。类似地,如果同步引擎从基于网络的文件服务器接收到拓扑或元数据改变,则其可以将这些改变应用于被保持文件。
在一些方面,将保持状态的指示符存储在文件状态数据库116中。可以通过比较哈希值来检测冲突,但计算和比较哈希值可能计算开销很大。有利的是,通过存储保持状态的指示符,通常可以避免该计算,并且可以加速对本地文件进行扫描的过程。
一些方面包括遥测工具以关于文件(其包括处于保持状态的文件)进行跟踪和报告。一种示例性报告可以包括:用于跟踪处于保持状态的文件数量的单独类别。另外,这些报告还可以包括关于以下的信息:多少文件进入保持状态、文件如何退出保持状态、多少文件退出保持状态、多长的文件处于保持状态、多少冲突文件发生移动/重命名、以及删除了多少冲突文件。
另外,一些方面包括用于以定期方式(例如,每天)将本地存储的文件与远程文件进行比较,以验证同步过程是否在正确地同步文件的审核工具。在这些实施例中,由于哈希文件在服务器副本和本地副本之间通常是不同的,因此审核者将忽略被保持文件。
为了维持文件之间的关系,当本地文件处于冲突时,不对文件的资源ID进行改变。代替地,资源ID保持不变,使得同步操作可以继续使用该资源ID将本地文件与服务器上的文件进行关联。当文件被保持时,可以将文件状态数据库116中的标志设置为true(真),以指示服务器文件比本地文件更新(例如,ServerFileIsNewerThanLocalFile标志)。由于文件失去同步并且现在处于冲突,因此服务器文件必须位于本地文件之前。
为了允许继续同步与文件有关的元数据,将文件状态数据库116中存储的版本(etag)值以及该文件的至少一些其它属性(例如,修改时间、大小和哈希值)与服务器保持一致。用此方式,即使文件处于保持状态,并且同步引擎110不同步文件的内容,同步引擎110仍然对文件的元数据进行同步。由于服务器文件比本地文件更新,因此现在使用文件状态数据库116中的服务器属性集合来存储客户端从基于网络的存储服务器104接收的属性。在一些方面,也对其它类型的元数据进行同步。例如,可以对由应用维持和使用以支持共同创作的元数据进行同步。
当存在冲突时,针对本地存储的文件所计算的哈希值与文件状态数据库116中存储的服务器哈希值不同。由于本地文件内容必将与存储文件内容不同,并且存储在文件状态数据库116中的服务器哈希值继续与远程存储在基于网络的存储服务器104上存储的文件的哈希值同步,因此这些哈希值将不匹配。
在一些方面,当同步引擎110重新启动时,扫描器组件将扫描根文件夹下的所有文件(其包括所有现有的被保持文件)。同步引擎将执行类似于在上传文件时执行的过程,对冲突进行确认并维持保持状态。
图6A-图6C示出了同步引擎将文件置于保持状态的场景。在600处,示出了文件的初始状态。客户端604上具有内容612的文件夹610中的文件608与服务器602上的文件608同步。在与文件608相关联的数据记录614中,示出了存储在文件状态数据库116中的用于文件608的示例性数据值。版本(或etag值)是1,本地哈希值与服务器哈希值相匹配,ServerNewer(服务器更新)标志是假(false),而不对文件进行保持。
在616处,客户端604离线,而用户对文件608进行改变,生成内容612A。由于客户端604离线,因此同步引擎不能够对文件608进行同步(由于其不能访问服务器602)。当客户端604离线时,还从其它地方改变文件608,生成内容612B。当客户端604返回在线时,由同步引擎的实现器组件取回来自服务器的元数据。将存储在文件状态数据库116中的用于文件608的示例性数据值,示出成数据记录614A中的更新。由于在服务器602上可获得文件608的新版本,因此现在将版本设置为2。现在基于服务器602上的改变的内容612B,对ServerHash(服务器哈希)值进行更新。LocalHash(本地哈希)值保持不变,这是由于LocalHash值反映了在上一次同步客户端604和服务器602时的哈希值。另外,由于与用于同客户端604同步的版本相比,服务器602具有更新的版本(2),因此将ServerNewer(服务器更新)标志设置为true(真)。
在618处,在同步引擎的实现器组件取回来自服务器602的元数据改变之后,实现器识别冲突(例如,通过确定根据内容612A所计算的哈希值与数据库中存储的LocalHash不匹配)。随后,同步引擎更新如数据记录614B中所示的数据库,以将存储状态存储成保持原因。在一些方面,同步引擎还存储与保持状态相关联的时间戳。
图7包括对图6中所示出的冲突的示例性解决方案的示出700。如示出700中所示,在冲突解决之后,客户端604和服务器602二者包括具有内容612C的文件608的版本(3)。另外,客户端604上的文件608不再被保持,LocalHash和ServerHash均等于‘ccc’,而将ServerNewer设置为false。存在用于对冲突进行解决的多种方式。例如,用户可以使用诸如包括合并工具的用户代理108之类的文件编辑器打开文件608。在注意到文件608处于保持状态之后或者由于其它原因,用户可以打开文件608。文件编辑器可以自动地处理客户端604上的文件608的内容612A(参见图6C)和服务器602上的文件608的内容612B,以生成用于解决该冲突的内容612C。
取决于文件编辑器和内容改变的本质,文件编辑器还可以提示用户对冲突进行解决(例如,通过呈现用户界面来指示如何解决冲突)。一旦进行了解决,文件编辑器就可以将内容612C上传到服务器602,并且指示已解决了该冲突(例如,通过向同步引擎进行适当的API调用)。随后,同步引擎可以更新文件状态数据库116中的数据记录614B里的元数据,并且清除保持状态。在一些方面,同步引擎立即地清除保持状态。替代地,同步引擎不立即地清除冲突。替代地,同步引擎将文件置于中间状态;同步状态是“syncing(同步)”,而被保持的解决是“合并”。例如,文件可以保持在该状态,直到对元数据进行了同步为止。
对冲突进行解决的另一种方式是用户选择对文件进行分叉(例如,通过从用户界面上选择分叉选项)。在该情况下,将来自客户端604上的文件608的内容612A,作为具有不同名称和不同资源ID的单独文件上传到服务器602。其后,将在服务器602和客户端604上存在两个单独的文件。
在一些方面,当确定服务器602上的文件608的内容和客户端604上的文件608的内容相同时,清除保持。例如,对这些文件进行了独立地编辑以返回到同步(或者用户独立地下载了服务器内容)。如果同步引擎的扫描器组件检测到该情形(例如,哈希匹配),则清除保持状态。在一些情形下,扫描器组件不能够完全地确定文件608处于同步。在这些情形下,扫描器组件可以上传来自客户端604上的文件608的内容,并且如果基于网络的存储服务引擎接受这些改变,则清除保持。可以清除保持的另一种方式是:当实现器从服务器602上的文件608下载内容(或者针对服务器602上的文件608的内容的哈希),并且确定该哈希现在与客户端604上的文件608的哈希相匹配。在该情况下,由于客户端604上的文件608不再与服务器602上的文件608冲突,因此可以清除保持。
图8A和图8B示出了针对正被保持的文件进行的编辑。图8A包括示出800,其示出了文件的预编辑状态。服务器802、客户端804和客户端806都在文件夹810中存储文件808。在均存储内容812的服务器802和客户端806之间,对文件808进行同步。文件808正由客户端804进行保持,并且文件808具有与服务器802失去同步的内容812A。
虽然在客户端804上对文件808进行保持,但用户可以继续本地和远程地关于该文件执行正常操作(例如,用户可以编辑、重命名(移动)或者删除)。通常,对于扫描器组件(本地改变)和实现器组件(远程改变),如通常一样同步非内容改变(例如,重命名、移动、删除),而丢弃内容改变(例如,不进行同步),除非内容改变重新同步该文件(即,改变这些文件中的一个的内容,使得哈希匹配)。
图8B包括示出814,其示出了文件的后编辑状态。例如,即使客户端804正对文件808进行保持,客户端804的用户也可以编辑文件808以生成内容812B。在该情形下,保持状态保留,而服务器802和客户端806上的文件808不受影响。在该情况下,当同步引擎的扫描器组件检测到客户端804上的文件808的内容改变时(例如,基于时间戳更新或者文件大小改变),扫描器组件确定文件808处于保持状态,并且该改变不解析冲突(例如,通过将针对内容812A所计算的哈希值与数据库中的本地哈希值进行比较),并且丢弃该改变(即,不将这些改变上传到服务器)。
图9A和图9B示出了针对另一个客户端正在保持的文件进行的编辑。图9A包括示出900,其示出了文件的预编辑状态。在该示例中,服务器902、客户端904和客户端906都在文件夹910中存储文件908。在均存储内容812的服务器802和客户端806之间,对文件908进行同步。文件808正由客户端806进行保持,而文件808具有与服务器802失去同步的内容812A,并且其造成客户端806将文件808置于保持状态。
图9B包括示出914,其示出了文件908的后编辑状态。在客户端904上编辑文件908,以生成内容912B。该改变不会在客户端904和服务器902之间创建冲突,所以将内容改变从客户端904上传到服务器902。其间,客户端906上的文件908的内容912A不受影响,而文件908在客户端906上仍处于保持状态。
图10示出了由同步引擎的实现器组件的一些方面所执行的处理被保持文件的远程编辑的方法1000。在一些方面,方法1000类似于图3中所示出的方法300。在一些方面,方法1000包括更少的、不同的或者额外的步骤。另外,可以以与图10中所示出的不同顺序来执行方法1000的步骤。
在操作1002处,同步引擎110发现文件改变。可以类似于方法300的操作302-310来发现这些文件改变。在操作1004处,对这些文件改变进行处理。在1006处,确定执行方法1000的用户计算设备是否是该改变的发起者。如果是,则该方法转到操作1008,其中对本地元数据进行更新。如果不是,则该方法转到操作1010。
在操作1010处,确定磁盘上的文件的哈希值是否与服务器上的文件的哈希值相匹配。如果匹配,则该方法转到操作1012,其中对本地元数据进行更新。并且随后,该方法转到操作1014,其中向服务器通知不需要该文件。
替代地,如果在操作1010处确定磁盘上的文件的哈希值与服务器上的文件的哈希值不匹配,则该方法转到操作1016,其中对元数据的服务器集进行更新。并且随后,该方法转到操作1018,其中确定该文件是否正在客户端上被保持。如果不是,则该方法转到操作1020处,其中向服务器通知需要该文件。否则,该方法转到操作1022,其中向服务器通知不需要该文件。
在操作1024处,对同步令牌进行坚持。在一些方面,操作1024类似于操作340。之后,该方法转到操作1026,其中完成同步操作。
图11A和图11B示出了正由客户端保持的文件在该客户端上进行重命名。图11A包括示出1100,其示出了将文件从名称1112重命名为名称1112A。在该示例中,服务器1102、客户端1104和客户端1106都在文件夹1110中存储文件1108。在服务器1102和客户端1106之间,对文件1108进行同步,但文件1108正由客户端1104进行保持(例如,客户端1104上的该文件的内容可以与服务器1102上的内容不同。)
图11B包括在客户端1104上将文件1108进行重命名之后的示出1114。在客户端1104上将文件1108重命名为名称1112A之后,将名称1112A同步到服务器1102,而随后经由服务器1102来同步到客户端1106。如图所示,即使文件1108正在客户端1104上被保持,文件1108也以在服务器1102和客户端1106上被重命名为名称1112A来结束。即使在文件1108进行了重命名之后,文件1108仍然在客户端1104上处于保持状态。换言之,不在客户端1104和服务器1102之间同步文件1108的内容(没有示出)。
图12A和图12B示出了正由客户端保持的文件在另一个客户端上进行重命名。图12A包括示出1200,其示出了将文件1208从名称1212重命名为名称1212A。在该示例中,服务器1202、客户端1204和客户端1206都在文件夹1210中存储文件1208。在服务器1202和客户端1206之间,对文件1208进行同步,但文件1208正由客户端1206进行保持(例如,客户端1206上的该文件1208的内容可以与服务器1202上的内容不同。)
图12B包括在客户端1204上将文件1208进行重命名之后的示出1214。在客户端1204上将文件1208重命名为名称1212A之后,将名称1212A同步到服务器1202,并且随后经由服务器1202来同步到客户端1206。如图所示,即使文件1208正在客户端1204上进行保持,文件1208也以在客户端1206上被重命名为名称1212A来结束。即使在文件1208进行了重命名之后,文件1208仍然在客户端1206上处于保持状态。换言之,即使名称被同步,也不在客户端1206和服务器1202之间同步文件1208的内容(没有示出)。
例如,客户端1206的同步引擎的实现器组件可以检测对服务器1202上的文件1208的名称元数据的改变,并且随后下载新名称以同步该元数据。但是,来自于服务器1202的文件1208的内容并未下载到客户端1206,客户端1206上的文件1208的内容也未上传到服务器1202。替代地,文件1208仍然在客户端1206上处于保持状态。
图13A和图13B示出了将正由客户端保持的文件从一个文件夹移动到另一个文件夹。图13A包括都在文件夹1310中存储文件1308的服务器1302、客户端1304和客户端1306的示出1300。客户端1304具有处于保持状态的文件1308(例如,客户端1304上的文件1308的内容可以与服务器1302上的内容不同),而文件1308不在客户端1306上进行保持。另外,在客户端1304上,将文件1308从文件夹1310移动到文件夹1312。
图13B包括在客户端1304上将文件1308从文件夹1310移动到文件夹1312之后的示出1314。将该移动上传到服务器1302,转而,服务器1302将该移动同步到客户端1306。但是,不对来自客户端1304上的文件1308的内容进行上传,而该文件仍然处于保持状态。在该示例中,运行在客户端1304上的同步引擎的扫描器组件确定与文件1308相关联的元数据被修改为指示新的父文件夹,并且当文件1308在客户端1304上进行保持时,可以将该改变上传到服务器1302(例如,无需解决该冲突)。
图14A和图14B示出了在另一个客户端上将正由客户端保持的文件从一个文件夹移动到另一个文件夹。除了在不对文件进行保持的客户端上移动该文件之外,图14A和图14B示出了类似于图13A和图13B中所示出的场景。
图14A包括都在文件夹1410中存储文件1408的服务器1402、客户端1404和客户端1406的示出1400。客户端1404具有处于保持状态的文件1408(例如,客户端1404上的文件1408的内容可以与服务器1402上的内容不同),而在客户端1404上不对文件1408进行保持。另外,在客户端1404上,将文件1408从文件夹1410移动到文件夹1412。
图14B包括在客户端1404上将文件1408从文件夹1410移动到文件夹1412之后的示出1414。将该移动上传到服务器1402,转而,服务器1402将该移动同步到客户端1406。客户端1406的同步引擎的实现器组件检测到对服务器上的元数据的改变,并且下载新的文件夹位置以同步该元数据。但是,在客户端1406上不解析该保持状态(例如,不将来自服务器的文件1408的内容下载到客户端1406,也不将客户端1406上的文件1408的内容上传到服务器)。替代地,该文件仍然处于保持状态。
图15A和图15B示出了对正由客户端保持的文件进行删除的场景。图15A包括都在文件夹1510中存储文件1508的服务器1502、客户端1504和客户端1506的示出1500。客户端1504具有处于保持状态的文件1508(例如,客户端1504上的文件1508的内容1512A与服务器1502上的文件1508的内容1512不同),而文件1508不在客户端1506上进行保持。如图15A中所示,在客户端1504上,删除文件1508。
图15B包括在客户端1504删除文件1508之后的示出1514。在客户端1504上删除文件1508之后,客户端1504的同步引擎从服务器1502下载具有内容1512的文件1508,以在客户端1504上重新创建文件1508。在客户端1504上重新创建之后,文件1508具有与服务器1502相匹配的内容1512。因此,不再存在冲突,并且文件1508不再在客户端1504上处于保持状态。
图16示出了由同步引擎的扫描器组件的一些方面所执行的处理被保持文件的本地删除的方法1600。方法1600的操作中的至少一些可以类似于图2中所示出的方法200。在一些方面,方法1600包括更少的、不同的或者额外的步骤。另外,可以以与图16中所示出的不同顺序来执行方法1600的步骤。
初始时,在操作1602处,同步引擎在被激活(例如,基于调度、检测到的改变、来自用户或应用的信号等等)之前空闲。随后,在操作1604处,同步引擎针对改变来扫描本地文件。操作1604可以类似于至少参照图2所示出和描述的操作204-214。
在操作1606处,对文件删除进行解释。可以关于在1604中的扫描期间所检测到的改变的子集(即,包括删除的改变的子集),来执行操作1606。扫描过程检测到的其它改变可以由本文所描述的其它方法来处理。
在操作1608处,选择文件删除记录进行解释。在操作1610处,确定与所选择的记录相关联的文件的服务器版本是否比上一次从服务器同步的文件的版本更新(例如,通过将数据库中存储的版本号与服务器上的版本号进行比较)。如果是,则该方法转到操作1612,其中确定被删除的文件是否处于保持状态。如果是,则该方法转到操作1614,其中丢弃该文件删除记录(例如,标记为完成而不传输到服务器)。之后,在操作1614处,针对该文件向服务器发送请求(例如,该文件的副本,由于其存在于服务器上)。在解释了删除记录之后,方法200可以返回到操作1608以解释额外的记录。
图17A和图17B示出了正由客户端保持的文件被另一个客户端删除的场景。图17A包括都在文件夹1710中存储文件1708的服务器1702、客户端1704和客户端1706的示出1700。客户端1706具有处于保持状态的文件1708(例如,客户端1706上的文件1708的内容1712A与服务器1702上的文件1708的内容1712不同),而文件1708不在客户端1706上进行保持。如图17A中所示,在客户端1704上,删除文件1708。
图17B包括在客户端1704删除文件1708之后的示出1714。在客户端1704上删除文件1708之后,客户端1704的同步引擎将该删除发送到服务器1702,其中在服务器1702处,对文件1708也进行删除。但是,该删除不从服务器1702同步到客户端1706,这是因为文件1708正在客户端1706上进行保持。替代地,将具有内容1712A的文件1708从客户端1706上传到服务器1702。解决服务器1702和客户端1706之间的关于文件1708的冲突,并且客户端1706从文件1708中移除保持。在一些方面,新的资源ID被分配给文件1708,而服务器1702将新上传的文件视作为新的并且与删除的文件无关的文件。
图18示出了由同步引擎的实现器组件的一些方面所执行的处理正在保持的文件的删除的方法1800。方法1800的操作中的至少一些可以类似于图3中所示出的方法300。在一些方面,方法1800包括更少的、不同的或者额外的步骤。另外,可以以与图18中所示出的不同顺序来执行方法1800的步骤。
初始时,在操作1802处,从服务器接收改变。操作1802可以类似于操作302。在一些场景中,操作1802将包括操作1804,其中,基于从服务器接收的改变来增加移除文件记录。例如,如果文件被远程地删除,则服务器可以将导致创建移除文件记录的改变发送到实现器。
在操作1806处,对移除文件记录进行处理。在一些方面,操作1806与操作1802并行地执行。在操作1808处,选择移除文件记录。
在操作1810处,确定磁盘上的文件的哈希值是否与数据库中存储的服务器哈希值相匹配。如果匹配,则该方法转到操作1812,其中从磁盘中删除该文件。
在操作1810处如果哈希值不匹配,则该方法转到操作1814,其中从数据库中移除该文件。但是,该文件仍然保持在磁盘上。之后,该方法转到操作1816,其中对扫描器做出请求以重新扫描驱动器。在重新扫描时,扫描器将发现该文件,并且将该文件作为新文件增加到数据库和服务器中。
在操作1818处,对任何本地替换文件操作进行处理。操作1818可以类似于先前描述的操作332-338。在操作1820处,坚持同步令牌。在操作1822处,完成同步。操作1820可以类似于先前描述的操作340。之后,该方法转到操作1822,其中完成同步操作。
可以影响处于保持状态的本地文件的操作的其它示例包括:文件夹重命名、移动或者改变。在这些场景中,本地文件夹改变将由同步引擎的扫描器组件来检测,并且由于哈希不匹配,因此将冲突的文件视作为在本地驱动器上发生改变的文件。稍后,由于检测到冲突,同步引擎将文件置于保持状态,并且丢弃驱动器改变(即,不将新内容上传到服务器)。这可以类似于本地文件编辑的情形。
如果替代地改变来自于服务器,则在处理了远程改变(即,对文件夹进行重命名、移动或者改变以匹配服务器)和完成同步之后,扫描器组件将再次挑选磁盘改变。因此,将扫描冲突的文件,并且一旦再次检测到该冲突,则不将内容改变上传到服务器。
当本地删除文件夹时,也删除该文件夹中的每一个文件(甚至正在被保持的文件)。在该情况下,类似于如至少参照图15-图16所示出和描述的文件删除,来处理处于保持状态的任何文件。类似地,当远程地删除文件夹时,实现器组件将接收用于删除文件夹中的任何被保持文件的指示。类似于如至少参照图17-18所示出和描述的处理,来处理这些被保持文件。
如果对文件夹进行取消映射(例如,针对该文件夹禁用同步),则针对现有的保持,对该文件夹自身以及其所有子文件夹进行检查。如果有任何文件被保持,则拒绝该取消映射动作,并且向用户通知原因。在一些方面,用户需要在能够执行取消映射动作之前,对保持冲突进行解决。
图19A和图19B示出了对客户端正保持的文件进行本地和远程重命名的场景(即,重命名到重命名冲突)。图19A包括都在文件夹1910中存储具有名称1912的文件1908的服务器1902、客户端1904和客户端1906的示出1900。客户端1906具有处于保持状态的文件1908(例如,客户端1906上的文件1908的内容与服务器1902上的文件1908的内容不同),而文件1908在客户端1906上不进行保持。如图19A中所示,在客户端1904上将文件1908重命名为名称1912A,并且在客户端1906上将文件1908重命名为名称1912B。
图19B包括在客户端1904和客户端1906对文件1908进行重命名之后的示出1914。在客户端1904和客户端1906上对文件1908进行重命名之后,将文件1908分叉成具有名称1912A和来自于客户端1904上的被保持文件1908的内容的第二文件1916。文件1908将具有名称1912B,并且将保留在重命名之前服务器1902和客户端1906上的文件1908的内容。在分叉之后,这两种文件将存储在服务器1902、客户端1904和客户端1906中的每一个上。文件1908独立于第二文件1916,并且不与第二文件1916同步。
可共同创作的文件(例如,来自华盛顿雷蒙德的微软公司的生产力套集的各种应用中的任何一种的文件)可以具有一些特殊的属性。如果使用共同创作应用来编辑可共同创作的文件,则在打开该文件进行编辑时,该共同创作应用将执行同步。另外,共同创作应用将创建同步锁(例如,在文件状态数据库116中),使得当在共同创作应用中打开文件时,同步引擎不会尝试对文件进行同步。当文件关闭时,将移除同步锁,并且同步引擎将恢复对文件进行同步。可共同创作的文件可以与用于在编辑期间同步共同创作改变的其它元数据相关联。例如,可以由共同创作应用在共同创作活动期间来计算单独的哈希值(即,不需要将改变保存到磁盘)。类似地,共同创作应用可以生成和设置在共同创作会话期间进行更新的内容的版本号,而无需将文件写入到磁盘。
来自微软公司的Office生产力套集中的应用是共同创作应用的示例。作为非限制性示例,这些Office应用计算在共同创作期间称为Cobalt哈希的哈希值,以及在共同创作期间称为水线的版本值。其它共同创作应用可以针对共同创作来生成额外的或不同的元数据。如果额外的元数据可用于共同创作,则同步引擎还可以使用该数据来识别服务器文件和本地文件之间的差异。虽然本文的示例、附图和时间轴指代Office和Cobalt哈希,但这些示例、附图和时间轴也可适用于其它共同创作应用。
当共同创作应用不在运行时,使用数据库中的先前所描述的本地哈希(如果其存在的话)。如果文件在数据库中不具有本地哈希,而只具有Cobalt哈希,则如果本地文件Cobalt哈希与数据库中的服务器或本地副本都不匹配时,扫描器组件将计算本地哈希。此外,实现器组件还计算磁盘文件Cobalt哈希,并且将其与数据库中的本地副本进行比较。如果这些哈希匹配,则确定文件是最新的,并且实现器组件将磁盘上的哈希文件存储成数据库中的本地哈希。
当共同创作应用在运行时,在文件处于冲突状态时,共同创作应用不会上传该文件。同步引擎将不从共同创作应用(例如,经由组件对象模型(COM)接口)或者服务器(经由通知)接收关于文件的任何指示。此外,当文件被共同创作应用锁定时,扫描器组件将跳过该文件。这意味着同步引擎在共同创作应用运行时,无法知道文件变得失去同步。替代地,在用户退出共同创作应用之后,同步引擎将需要检测冲突,并且随后可以将文件移动到保持状态。
在一些情形下,共同创作应用可以清除保持状态。例如,如果共同创作应用成功地将改变上传到服务器,则可以确定冲突已清除。另外,如果共同创作应用成功地对来自服务器的下载的内容进行了合并,则冲突被解决。在一些情况下,共同创作应用将保持状态已进行清除的指示发送到同步引擎。
另外,如果服务器Cobalt哈希与本地Cobalt哈希相匹配,则隐式地解决了冲突。在示例性时间轴中,使用共同创作应用来解决被保持文件中的冲突。共同创作应用上传改变的文件,并且保存上传的文件。随后,当实现器下一次执行发现改变时,由于这些哈希匹配,而从文件中移除保持。
图20示出了由同步引擎的实现器组件的一些方面执行的对在共同创作应用中编辑的被保持文件的改变进行处理的方法2000。方法2000的操作中的至少一些可以类似于图3中所示出的方法300。在一些方面,方法2000包括更少的、不同的或者额外的步骤。另外,可以以与图18中所示出的不同顺序来执行方法2000的步骤。
初始时,在操作2002处,同步引擎110发现文件改变。可以类似于方法300的操作302-310来发现这些文件改变。在操作2004处,针对从服务器接收的改变,来生成改变文件记录。
在操作2006处,对文件改变记录进行处理。在操作2008处,确定服务器cobalt哈希是否与本地cobalt哈希相匹配。如果不匹配,则该方法转到操作2012,其中对服务器cobalt哈希进行更新。如果这些哈希匹配,则该方法转到操作2014,其中清除保持。随后,在操作2014处,向服务器通知不需要该文件。
在操作2016处,坚持同步令牌。操作2016可以类似于先前所描述的操作340。之后,该方法转到操作2018,其中同步操作完成。
下面将描述与在共同创作应用中解决冲突有关的另一种场景。在同步引擎从共同创作应用接收到SaveProperties(保存属性)调用之后,对冲突解决比特进行设置,但文件仍然被保持。文件状态将显示为“同步”。扫描器组件将挑选该文件,并且由于本地cobalt哈希与磁盘文件cobalt哈希相匹配,因此同步引擎将上传非内容文件改变。当同步引擎处理ChangeFile(改变文件)改变时,清除保持状态(由于在该时间,服务器cobalt哈希与本地cobalt哈希相匹配)。
图21示出了在使用共同创作应用对文件进行编辑时,可以由同步引擎的实施例执行的方法2100。在一些方面,方法2100包括更少的、不同的或者额外的步骤。另外,可以以与图21中所示出的不同顺序来执行方法2100的步骤。
初始时,在操作2102处,开始保存属性操作。可以响应于来自共同创作应用的用于指示在共同创作应用中解决冲突的调用,来开始保存属性。在操作2104处,对本地cobalt哈希进行更新。
在操作2106处,确定与所选择的记录相关联的文件的服务器版本是否比上一次与服务器同步的文件的版本更新(例如,通过将存储在数据库中的版本号与服务器上的版本号进行比较)。如果不是,则该方法在操作2108处结束。如果是,则该方法转到操作2110,其中将服务器cobalt哈希与本地cobalt哈希进行比较。
如果服务器cobalt哈希与本地cobalt哈希相匹配,则该方法转到操作2112,其中向服务器通知不需要该文件。否则,该方法转到2214,其中将该冲突标记成已解决(即使文件的内容也不一定匹配)。
在操作2216处,触发发现改变操作。例如,可以随后执行方法2000来完成同步操作。
当正使用共同创作应用来编辑文件时,存在可能发生以用于对文件进行同步的多种不同场景。下面将讨论一些示例性场景。
在一种场景中,在共同创作应用中解决被保持文件上的冲突。共同创作应用将这些改变上传到服务器。同步引擎的扫描器组件可以运行以识别文件在本地被改变。由于文件被保持,因此同步引擎只在服务器上更新元数据改变。但是,当扫描器组件确定服务器cobalt哈希与磁盘文件cobalt哈希相匹配时,将清除保持状态。
在另一种场景中,在共同创作应用中解决冲突,并且用户继续对文件进行编辑。在共同创作应用中解决了冲突之后,用户继续对文件进行编辑。但是,存在针对发现改变通知的延迟,并且同步引擎仅在来自共同创作应用的两个SaveProperties(保存属性)之后才接收到它们。在该情况下,只要接收到第一SaveProperties调用,就清除该冲突,并且同步引擎将文件置于推迟的下载队列中。
当接收到第一FindChange(发现改变)时,本地和服务器cobalt哈希不匹配,并且该文件从下载队列中移除。一旦接收到第二FindChange,cobalt哈希相匹配,冲突就再次被清除,并且该文件再次从下载队列中移除。
在另一种场景中,在共同创作应用中解决冲突之后,用户继续编辑文件。但是,同步引擎并不会及时地接收到SaveProperties调用。替代地,第二FindChange比第一SaveProperties调用更早到来。两个FindChange简单地更新服务器cobalt哈希,并且从下载队列中移除该文件。
第一SaveProperties调用对解决进行设置,但仍然具有过期的本地cobalt哈希。第二SaveProperties将具有最新的本地cobalt哈希,并且服务器和本地哈希现在匹配。在该时刻,同步引擎了解到解决了冲突,并且可以对保持进行释放。
在一些方面,共同创作应用将在离线模式下打开文件,并且将不解决冲突(例如,如果服务器不可用,或者当共同创作应用第一次打开文件时,同步引擎没有运行)。
如果在共同创作应用中解决了冲突,但文件没有上传到服务器,则同步引擎将既不接收FindChange也不接收SaveProperties指令。同时,如果文件仍然被同步引擎打开,则扫描器组件不能计算该哈希。所以,当共同创作应用将文件打开时,同步引擎不能清除冲突。
一旦共同创作应用被关闭,则扫描器组件将挑选改变,并且识别用于上传到服务器的改变。但是,由于文件被保持,因此将不上传这些改变,而文件仍然处于冲突状态。一旦共同创作应用返回到在线,则其将自动合并所有冲突,或者引导用户使用诸如挑选赢家对话框之类的对话框来手动地解决冲突。
图22示出了在一些方面,在用户计算设备102上生成的示例性用户界面2200,以引导用户解决正在被保持的文件的冲突。该用户界面包括弹出菜单2202,当用户驱使(例如,点击、右击、触摸等等)正在被保持的文件时,可以显示弹出菜单2202。在一些方面,以具有图标的目录列表方式来显示正在被保持的文件,其中该图标指示保持状态(例如,红色X)。弹出菜单2202可以包括与解决冲突有关的各种命令,比如,“查看同步问题”命令、“解决冲突-保留本地”命令、“解决冲突-保留服务器”命令、以及“解决冲突-保留二者”命令。
虽然在程序模块的一般上下文中描述了本发明的实现,其中这些程序模块结合在计算机上的操作系统上运行的应用程序来执行,但本领域普通技术人员应当认识到,本文的方面还可以结合其它程序模块来实现。通常,程序模块包括例程、程序、组件、数据结构、以及执行特定任务或者实现特定的抽象数据类型的其它类型的结构。
本文描述的方面和功能可以经由多种多样的计算系统来操作,其中这些计算系统包括但不限于:桌面型计算机系统、有线和无线计算系统、移动计算系统(例如,移动电话、上网本、平板设备或者板型计算机、笔记本计算机和膝上型计算机)、手持设备、多处理器系统、基于微处理器的或者可编程消费电子件、微型计算机和大型计算机。
此外,根据一个方面,本文描述的方面和功能可以在分布式系统(例如,基于云的计算系统)上操作,其中,应用功能、存储器、数据存储装置以及获取和各种处理功能可以彼此之间通过分布式计算网络(例如,互联网或者内联网)来远程操作。根据一个方面,可以经由板上计算设备显示器或者经由与一个或多个计算设备相关联的远程显示单元,来显示用户界面和各种类型的信息。例如,可以在将用户界面和各种类型的信息所投影到的墙壁表面上,显示用户界面和各种类型的信息并与其进行交互。与可以实现本发明的实施方式的多种多样的计算系统进行的交互,包括:键击输入、触摸屏输入、语音或者其它音频输入、手势输入,其中,相关联的计算设备装备有用于捕捉和解释用户手势的检测(例如,摄像头)功能,以控制该计算设备的功能,等等。
图23-图25以及相关联的描述提供了可以实现本发明的示例的各种操作环境的讨论。但是,参照图23-图25所示出和讨论的设备和系统只是用于举例和说明目的,而不是对用于实现本文所描述的方面的众多数量的计算设备配置进行限制。
图23是示出了可以实现本公开内容的示例的计算设备2300的物理部件(即,硬件)的框图。在基本配置中,计算设备2300包括至少一个处理单元2302和系统存储器2304。根据一个方面,取决于计算设备的配置和类型,系统存储器2304包括但不限于:易失性存储(如,随机存取存储器)、非易失性存储(如,只读存储器)、闪存或者这些存储器的任意组合。根据一个方面,系统存储器2304包括操作系统2305和适合于运行软件应用2350的一个或多个程序模块2306。根据一个方面,系统存储器2304包括同步引擎110。例如,操作系统2305适合于对计算设备2300的操作进行控制。此外,本发明的方面可以结合图形库、其它操作系统或者任何其它应用程序来实现,并且不受限于任何特定的应用或系统。在图23中,通过位于虚线2308之内的那些部件来示出该基本配置。根据一个方面,计算设备2300具有额外的特征或功能。例如,根据一个方面,计算设备2300包括额外的数据存储设备(可移动和/或不可移动),比如磁盘、光盘或磁带。在图23中通过移动存储设备2309和非移动存储设备2310的方式,来示出这种额外的存储装置。
如上所述,根据一个方面,在系统存储器2304中,存储多个程序模块和数据文件。当在处理单元2302上执行时,程序模块2306(例如,同步引擎110)执行如下处理:包括但不限于本文所示出的方法(其包括图2和图3中的方法)的阶段中的一个或多个。根据一个方面,其它程序模块根据本发明的示例进行使用,并且包括诸如电子邮件和联系人应用、文字处理应用、电子表格应用、数据库应用、幻灯片呈现应用、绘图或计算机辅助应用程序等等之类的应用。
根据一个方面,本发明的方面实现在电子电路中,所述电子电路包括离散电子元件、包含逻辑门的封装或者集成电子芯片、使用微处理器的电路,或者实现在包含电子元件或微处理器的单一芯片上。例如,经由片上系统(SOC)来实现本发明的方面,其中,图23中所示出的部件里的每一个或大部分集成到单一集成电路上。根据一个方面,这种SOC设备包括一个或多个处理单元、图形单元、通信单元、系统虚拟化单元和各种应用功能,所有这些都集成(或者“烧”)到芯片衬底上作为单一集成电路。当经由SOC进行操作时,本文所描述的功能经由与计算设备2300的其它部件集成在单一集成电路(芯片)上的专用逻辑来进行操作。根据一个方面,本发明的方面使用能够执行逻辑操作的其它技术来实现,所述逻辑操作诸如与(AND)、或(OR)和非(NOT),所述其它技术包括但不限于:机械、光、流体和量子技术。此外,还可以在通用计算机或者任何其它电路或系统中实现本发明的方面。
根据一个方面,计算设备2300具有诸如键盘、鼠标、笔、声音输入设备、触摸输入设备等等之类的一个或多个输入设备2312。根据一个方面,还包括诸如显示器、扬声器、打印机等等之类的输出设备2314。前述的设备只是示例性的,可以使用其它设备。根据一个方面,计算设备2300包括允许与其它计算设备2318进行通信的一个或多个通信连接2316。适当通信连接2316的示例包括但不限于:射频(RF)发射机、接收机和/或收发机电路;通用串行总线(USB)、并行和/或串行端口。
如本文所使用的术语计算机可读介质包括计算机存储介质。计算机存储介质包括以用于存储信息(如,计算机可读指令、数据结构或程序模块)的任何方法或技术来实现的易失性和非易失性、可移动和不可移动介质。系统存储器2304、可移动存储设备2309和不可移动存储设备2310都是计算机存储介质的示例(即,存储器存储)。根据一个方面,计算机存储介质包括RAM、ROM、电可擦除可编程只读存储器(EEPROM)、闪存或其它存储器技术、CD-ROM、数字通用光盘(DVD)或其它光存储技术、盒式磁带、磁带、磁盘存储或其它磁存储设备、或者可以用于存储信息并能由计算设备2300进行存取的任何其它制品。根据一个方面,任何这种计算机存储介质是计算设备2300的一部分。计算机存储介质不包括载波波形或者其它传播的数据信号。
根据一个方面,通信介质通过计算机可读指令、数据结构、程序模块、或者调制的数据信号(如,载波波形或其它传输机制)中的其它数据来体现,并包括任何信息传送介质。根据一个方面,术语“调制的数据信号”描述以将信息编码在该信号之中的方式对一个或多个特性进行设置或者改变的信号。举例而言,但非做出限制,通信介质包括诸如有线网络或直接有线连接之类的有线介质、以及诸如声波、射频(RF)、红外线和其它无线介质之类的无线介质。
图24A和图24B示出了可以使用其来实现本发明的方面的移动计算设备2400(例如,移动电话、智能电话、平板个人计算机、膝上型计算机等等)。参见图24A,示出了用于实现本发明的方面的移动计算设备2400的示例。在基本配置中,移动计算设备2400是具有输入单元和输出单元的手持计算机。通常,移动计算设备2400包括显示器2405和用于允许用户向该移动计算设备2400输入信息的一个或多个输入按键2410。根据一个方面,移动计算设备2400的显示器2405可以充当为输入设备(例如,触摸屏显示器)。如果包括的话,可选的侧输入单元2415也允许另外的用户输入。根据一个方面,侧输入单元2415可以是旋转开关、按键或者任何其它类型的手工输入单元。在替代的示例中,移动计算设备2400可以合并更多或更少的输入单元。例如,在一些示例中,显示器2405可以不是触摸屏。在替代的示例中,移动计算设备2400是便携式电话系统,例如,蜂窝电话。根据一个方面,移动计算设备2400包括可选的键盘2435。根据一个方面,可选的键盘2435是物理键盘。根据另一个方面,可选的键盘2435是在触摸屏显示器上生成的“软”键盘。在各个方面,输出单元包括用于显示图形用户界面(GUI)的显示器2405、视觉指示器2420(例如,发光二极管)和/或音频换能器2425(例如,扬声器)。在一些示例中,移动计算设备2400并入振动换能器,以向用户提供触觉反馈。在另一个示例中,移动计算设备2400并入输入和/或输出端口(例如,音频输入(如,麦克风插孔)、音频输出(如,耳机插孔)和视频输出(如,HDMI端口)),以向外部设备发送信号或者从外部设备接收信号。在另一个示例中,移动计算设备2400并入外部设备端口2440(例如,音频输入(如,麦克风插孔)、音频输出(如,耳机插孔)和视频输出(如,HDMI端口)),以向外部设备发送信号或者从外部设备接收信号。
图24B是示出了移动计算设备的一个示例的架构的框图。也就是说,移动计算设备2400可以合并系统(即,架构)2402来实现一些示例。在一个示例中,将系统2402被实现为能够运行一个或多个应用(例如,浏览器、电子邮件、日历、联系人管理器、消息传送客户端、游戏和媒体客户端/播放器)的“智能电话”。在一些示例中,将系统2402集成为计算设备,例如,集成的个人数字助理(PDA)和无线电话。
根据一个方面,一个或多个应用程序2450装载到存储器2462中,并且在操作系统2464上运行或者关联操作系统2464来运行。这些应用程序的示例包括电话拨号程序、电子邮件程序、个人信息管理(PIM)程序、文字处理程序、电子表格程序、互联网浏览器程序、消息传送程序等等。根据一个方面,同步引擎110加载到存储器2462。系统2402还包括位于存储器2462中的非易失性存储区域2468。非易失性存储区域2468用于存储如果系统2402关闭,而不应当丢失的持久信息。应用程序2450可以使用非易失性存储区域2468中的信息,并且在非易失性存储区域2468中存储该信息(例如,电子邮件或者电子邮件应用所使用的其它消息等等)。此外,同步应用(没有示出)也位于系统2402上,并被编程为与位于主机计算机上的相应同步应用进行交互,以保持非易失性存储区域2468中存储的信息与主机计算机处存储的相应信息相同步。应当意识到的是,其它应用也可以加载到存储器2462中,并运行在移动计算设备2400上。
根据一个方面,系统2402具有电源2470,其中电源2470被实现为一个或多个电池。根据一个方面,电源2470还包括外部电源,例如,AC适配器或者对电池进行补充或充电的供电对接支座。
根据一个方面,系统502包括用于执行发送和接收无线电频率通信的功能的无线电装置2472。无线电装置2472有助于经由通信载波或服务提供商,实现系统2402和“外部世界”之间的无线连接。在操作系统2464的控制之下,进行去往和来自无线电装置2472的传输。换言之,可以经由操作系统2464将无线电装置2472接收的通信传播到应用程序2450,反之亦然。
根据一个方面,使用视觉指示器2420来提供视觉通知,和/或使用音频接口2474来经由音频换能器2425产生可听见的通知。在所示出的示例中,视觉指示器2420是发光二极管(LED),而音频换能器2425是扬声器。这些设备可以直接地耦合到电源2470,使得当被激活时,它们仍保持通知机制所指示的持续时间(即使处理器2460和其它部件关闭以节省电池电量)。可以对LED进行编程以无限期地保持开启,直到用户采取动作来指示该设备的开机状态为止。音频接口2474用于向用户提供可听见的信号和从用户接收可听见的信号。例如,除了耦合到音频换能器2425之外,音频接口2474还可以耦合到麦克风以接收可听见的输入,例如以便促进电话会话。根据一个方面,系统2402还包括视频接口2476,视频接口2476实现板上摄像头2430的用于记录静止图像、视频流等等的操作。
根据一个方面,实现系统2402的移动计算设备2400具有额外的特征或功能。例如,该移动计算设备2400包括诸如磁盘、光盘或磁带之类的额外的数据存储设备(可移动和/或不可移动)。在图24B中,通过非易失性存储区域2468的方式来示出这种额外的存储。
根据一个方面,由移动计算设备2400生成或捕捉并经由系统2402来存储的数据/信息,可以本地地存储在移动计算设备2400上,如上所述。根据另一个方面,该数据存储在任意数量的存储介质上,其中该设备经由无线电装置2472或者经由移动计算设备2400和与该移动计算设备2400相关联的单独计算设备(例如,诸如互联网之类的分布式计算网络中的服务器计算机)之间的有线连接来访问该任意数量的存储介质。应当意识到的是,经由移动计算设备2400可以经由无线电装置2472或者经由分布式计算网络,来访问该数据/信息。类似地,根据一个方面,该数据/信息根据公知的数据/信息传送和存储方式(其包括电子邮件和协作式数据/信息共享系统),在计算设备之间进行容易地传送以进行存储和使用。
图25示出了一种用于单个文件的文件同步暂停的系统的架构的一个示例。利用同步引擎110所开发的内容、与同步引擎110交互的内容或者关联同步引擎110来编辑的内容,被实现为存储在不同的通信信道或其它存储类型中。例如,可以使用目录服务2522、web门户2524、邮箱服务2526、瞬时消息传送存储2528或社交网络站点2530来存储各种文档。同步引擎110可操作以使用这些类型的系统等等中的任何一种,来在共同创作会话中或者当单个地编辑时管理同步的文件,如本文所描述的。根据一个方面,服务器2520向客户端2505a、b、c提供同步引擎110。作为一个示例,服务器2520是通过web来提供同步引擎110的web服务器。服务器2520通过网络2540,在web上向客户端2505提供同步引擎110。举例而言,客户端计算设备实现并体现在在个人计算机2505a、平板计算设备2505b或移动计算设备2505c(例如,智能电话)或者其它计算设备中。客户端计算设备的这些示例中的任何一个可操作用于从存储2516获得内容。
例如,上面参照根据本发明的方面的方法、系统和计算机程序产品的框图和/或操作说明,来描述实施方式。这些方框中所述的功能/动作可以按不同于任何流程图所示的次序来出现。例如,取决于所涉及的功能/动作,连续示出的两个框可以在事实上基本并行执行,或者这些框有时可以以相反顺序来执行。
本申请中提供的一个或多个示例的描述和说明,并非是旨在以任何方式来限制或者限定所要求的本发明的保护范围。本申请中提供的方面、示例和细节被认为足以传达拥有所主张的本发明,并使他人能够制造和使用所主张的本发明的最佳模式。实施方式不应被解释为限于本申请中提供的任何方面、示例或者细节。不管是以组合方式还是单独地进行示出和描述,各种特征(包括结构和方法)旨在进行选择性地包括或者省略,以产生具有一组特定特征的示例。在提供本申请的描述和说明之后,本领域普通技术人员可以预想落入本申请所体现的更广泛方面的通用发明概念的精神之内的变型、修改和替代示例,而不脱离更广泛的保护范围。
Claims (15)
1.一种用于在本地文件系统和服务器之间同步文件的系统,包括:
至少一个处理器;以及
存储器,其操作性地连接到所述至少一个处理器并且存储指令,所述指令当由所述至少一个处理器执行时,使得所述至少一个处理器执行以下操作:
访问存储在所述本地文件系统上的文件以用于与所述服务器上的相关联的文件进行同步;
确定所述文件与所述相关联的文件之间的差异是否阻止所述文件与所述相关联的文件的同步;以及
当确定所述文件与所述相关联的文件之间的差异阻止所述文件与所述相关联的文件的同步时,将所述文件置于保持状态,其中,所述保持状态暂停所述文件的内容与所述相关联的文件的内容的同步。
2.根据权利要求1所述的系统,其中,所述存储器还存储用于使所述处理器执行以下操作的指令:同步对已经置于所述保持状态的文件的拓扑改变。
3.根据权利要求2所述的系统,其中,所述存储器还存储用于使所述处理器执行以下操作的指令:
接收对所述文件的额外改变,其中,所述额外改变与所述文件的拓扑相关;以及
将所述额外改变发送到所述服务器,以应用于存储在所述服务器上的所述相关联的文件。
4.根据权利要求1所述的系统,其中,所述存储器还存储用于使所述处理器执行以下操作的指令:
确定所述文件的所述内容不再与所述服务器上的所述相关联的文件的所述内容不同;以及
移除保持。
5.根据权利要求1所述的系统,其中,为了确定所述文件与所述相关联的文件之间的差异是否阻止所述文件与所述相关联的文件的同步,所述存储器还存储用于使所述处理器执行以下操作的指令:
确定所述文件的所述内容自从最近的同步事件以来是否被改变;
确定所述相关联的文件的所述内容自从所述最近的同步事件以来是否被改变;以及
当确定所述文件的所述内容自从所述最近的同步事件以来被改变并且确定所述相关联的文件的所述内容自从所述最近的同步事件以来被改变时,确定所述文件与所述相关联的文件之间的差异阻止所述文件与所述相关联的文件的同步。
6.根据权利要求5所述的系统,其中,为了确定所述文件的所述内容自从最近的同步事件以来是否被改变,将所述文件的所述内容的哈希值与存储的哈希值进行比较,所述存储的哈希值对应于在所述最近的同步事件时计算的所述文件的哈希值。
7.根据权利要求1所述的系统,其中,所述文件是响应于扫描所述本地文件系统上的目录而被访问的。
8.根据权利要求1所述的系统,其中,所述文件是响应于从所述服务器接收到改变而被访问的。
9.根据权利要求1所述的系统,其中,将所述文件置于保持状态,包括:对与所述文件相关联的数据库中的保持字段进行设置。
10.根据权利要求1所述的系统,其中,所述存储器还存储用于使所述处理器执行以下操作的指令:在将所述文件置于所述保持状态之后,访问存储在所述本地文件系统上的第二文件以用于与所述服务器上的第二相关联的文件进行同步。
11.一种用于在本地文件系统和服务器之间同步文件的方法,包括:
访问存储在所述本地文件系统上的文件以用于与服务器上的相关联的文件进行同步;
确定所述文件与所述相关联的文件之间的差异是否阻止所述文件与所述相关联的文件的同步;以及
当确定所述文件与所述相关联的文件之间的差异阻止所述文件与所述相关联的文件的同步时,将所述文件置于保持状态,其中,所述保持状态暂停所述文件的内容与所述相关联的文件的内容的同步。
12.根据权利要求11所述的方法,其中,所述存储器还存储用于使所述处理器执行以下操作的指令:同步对已经置于所述保持状态的文件的拓扑改变。
13.根据权利要求12所述的方法,其中,所述存储器还存储用于使所述处理器执行以下操作的指令:
接收对所述文件的额外改变,其中,所述额外改变与所述文件的拓扑相关;以及
将所述额外改变发送到所述服务器,以应用于存储在所述服务器上的所述相关联的文件。
14.根据权利要求11所述的方法,其中,为了确定所述文件与所述相关联的文件之间的差异是否阻止所述文件与所述相关联的文件的同步,所述存储器还存储用于使所述处理器执行以下操作的指令:
确定所述文件的所述内容自从最近的同步事件以来是否被改变;
确定所述相关联的文件的所述内容自从所述最近的同步事件以来是否被改变;以及
当确定所述文件的所述内容自从所述最近的同步事件以来被改变并且确定所述相关联的文件的所述内容自从所述最近的同步事件以来被改变时,确定所述文件与所述相关联的文件之间的差异阻止所述文件与所述相关联的文件的同步。
15.一种包含计算机可执行指令的计算机可读存储介质,所述计算机可执行指令当由计算机执行时,执行一种用于在本地文件系统和服务器之间同步文件的方法,所述方法包括:
访问存储在所述本地文件系统上的文件以用于与服务器上的相关联的文件同步;
确定所述文件与所述相关联的文件之间的差异是否阻止所述文件与所述相关联的文件的同步;以及
当确定所述文件与所述相关联的文件之间的差异阻止所述文件与所述相关联的文件的同步时,将所述文件置于保持状态,其中,所述保持状态暂停所述文件的所述内容与所述相关联的文件的所述内容的同步。
Applications Claiming Priority (5)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US201662308738P | 2016-03-15 | 2016-03-15 | |
US62/308,738 | 2016-03-15 | ||
US15/199,296 US10936548B2 (en) | 2016-03-15 | 2016-06-30 | File synchronization pausing for individual files |
US15/199,296 | 2016-06-30 | ||
PCT/US2017/021234 WO2017160545A1 (en) | 2016-03-15 | 2017-03-08 | File synchronization pausing for individual files |
Publications (2)
Publication Number | Publication Date |
---|---|
CN109313634A true CN109313634A (zh) | 2019-02-05 |
CN109313634B CN109313634B (zh) | 2021-12-21 |
Family
ID=59847810
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201780018535.3A Active CN109313634B (zh) | 2016-03-15 | 2017-03-08 | 用于单个文件的文件同步暂停 |
Country Status (4)
Country | Link |
---|---|
US (1) | US10936548B2 (zh) |
EP (1) | EP3430534B1 (zh) |
CN (1) | CN109313634B (zh) |
WO (1) | WO2017160545A1 (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114422533A (zh) * | 2021-12-29 | 2022-04-29 | 成都鲁易科技有限公司 | 云备份中路径冲突的处理方法、装置及电子设备 |
Families Citing this family (14)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10831715B2 (en) | 2015-01-30 | 2020-11-10 | Dropbox, Inc. | Selective downloading of shared content items in a constrained synchronization system |
US9361349B1 (en) | 2015-01-30 | 2016-06-07 | Dropbox, Inc. | Storage constrained synchronization of shared content items |
US10909080B2 (en) * | 2015-05-04 | 2021-02-02 | Microsoft Technology Licensing, Llc | System and method for implementing shared document edits in real-time |
US10049145B2 (en) * | 2016-04-25 | 2018-08-14 | Dropbox, Inc. | Storage constrained synchronization engine |
US9934303B2 (en) | 2016-04-25 | 2018-04-03 | Dropbox, Inc. | Storage constrained synchronization engine |
US10719532B2 (en) | 2016-04-25 | 2020-07-21 | Dropbox, Inc. | Storage constrained synchronization engine |
US11755615B2 (en) * | 2017-10-06 | 2023-09-12 | The Boeing Company | Distributed data management system and method |
US10866963B2 (en) * | 2017-12-28 | 2020-12-15 | Dropbox, Inc. | File system authentication |
US11055261B2 (en) | 2018-02-28 | 2021-07-06 | Microsoft Technology Licensing, Llc | In-application support for topological changes to files during remote synchronization |
CN109246190B (zh) * | 2018-08-07 | 2021-06-01 | 深圳市先河系统技术有限公司 | 网络寻址方法、数据编辑方法、装置及存储介质 |
US11226983B2 (en) * | 2019-06-18 | 2022-01-18 | Microsoft Technology Licensing, Llc | Sub-scope synchronization |
US11221785B2 (en) * | 2019-12-03 | 2022-01-11 | Western Digital Technologies, Inc. | Managing replication state for deleted objects |
US11921680B2 (en) * | 2020-07-13 | 2024-03-05 | Red Hat, Inc. | Speedup containers in production by ignoring sync to file system |
US12001401B2 (en) * | 2021-10-27 | 2024-06-04 | Microsoft Technology Licensing, Llc | Enhanced co-authoring and file syncing |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101005428A (zh) * | 2006-01-19 | 2007-07-25 | 华为技术有限公司 | 一种检测与解决数据同步冲突的实现方法 |
US7529780B1 (en) * | 2005-12-30 | 2009-05-05 | Google Inc. | Conflict management during data object synchronization between client and server |
CN102016834A (zh) * | 2008-04-28 | 2011-04-13 | 微软公司 | 冲突解决 |
CN102457549A (zh) * | 2010-10-28 | 2012-05-16 | 盛乐信息技术(上海)有限公司 | 多个网络存储装置的数据同步系统及方法 |
US8621161B1 (en) * | 2010-09-23 | 2013-12-31 | Amazon Technologies, Inc. | Moving data between data stores |
US20140201145A1 (en) * | 2013-01-17 | 2014-07-17 | Box, Inc. | Conflict resolution, retry condition management, and handling of problem files for the synchronization client to a cloud-based platform |
Family Cites Families (16)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5993522A (en) | 1998-05-13 | 1999-11-30 | Huang; Chin-Fu | Compressed air strainer and drying treatment |
US20060106879A1 (en) | 2004-11-16 | 2006-05-18 | International Business Machines Corporation | Conflict resolution in a synchronization framework |
US20060242204A1 (en) | 2005-04-22 | 2006-10-26 | Microsoft Corporation | Sync manager conflict resolution |
US8095495B2 (en) | 2007-09-25 | 2012-01-10 | Microsoft Corporation | Exchange of syncronization data and metadata |
US7941410B2 (en) | 2008-09-30 | 2011-05-10 | Microsoft Corporation | Method and system of managing conflicts for a set of synchronized folders |
US8572022B2 (en) | 2010-03-02 | 2013-10-29 | Microsoft Corporation | Automatic synchronization conflict resolution |
US20130268480A1 (en) | 2012-04-05 | 2013-10-10 | Box, Inc. | Method and apparatus for selective subfolder synchronization in a cloud-based environment |
US8949179B2 (en) | 2012-04-23 | 2015-02-03 | Google, Inc. | Sharing and synchronizing electronically stored files |
US9083766B2 (en) | 2012-12-27 | 2015-07-14 | Dropbox, Inc. | Maintaining consistent globally unique identifiers via an asynchronous interface |
EP2755151A3 (en) | 2013-01-11 | 2014-09-24 | Box, Inc. | Functionalities, features and user interface of a synchronization client to a cloud-based environment |
US9189533B2 (en) | 2013-05-29 | 2015-11-17 | Microsoft Technology Licensing, Llc | Sync framework extensibility |
US9805050B2 (en) | 2013-06-21 | 2017-10-31 | Box, Inc. | Maintaining and updating file system shadows on a local device by a synchronization client of a cloud-based platform |
US9805056B2 (en) * | 2014-06-24 | 2017-10-31 | Panzura, Inc. | Synchronizing file updates between two cloud controllers of a distributed filesystem |
US9208167B1 (en) | 2014-09-04 | 2015-12-08 | Edifire LLC | Distributed data synchronization and conflict resolution |
US9632892B1 (en) * | 2015-03-30 | 2017-04-25 | EMC IP Holding Company LLC | NFS cluster failover |
US9697092B2 (en) * | 2015-08-27 | 2017-07-04 | International Business Machines Corporation | File-based cluster-to-cluster replication recovery |
-
2016
- 2016-06-30 US US15/199,296 patent/US10936548B2/en active Active
-
2017
- 2017-03-08 CN CN201780018535.3A patent/CN109313634B/zh active Active
- 2017-03-08 EP EP17711965.8A patent/EP3430534B1/en active Active
- 2017-03-08 WO PCT/US2017/021234 patent/WO2017160545A1/en active Application Filing
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7529780B1 (en) * | 2005-12-30 | 2009-05-05 | Google Inc. | Conflict management during data object synchronization between client and server |
CN101005428A (zh) * | 2006-01-19 | 2007-07-25 | 华为技术有限公司 | 一种检测与解决数据同步冲突的实现方法 |
CN102016834A (zh) * | 2008-04-28 | 2011-04-13 | 微软公司 | 冲突解决 |
US8621161B1 (en) * | 2010-09-23 | 2013-12-31 | Amazon Technologies, Inc. | Moving data between data stores |
CN102457549A (zh) * | 2010-10-28 | 2012-05-16 | 盛乐信息技术(上海)有限公司 | 多个网络存储装置的数据同步系统及方法 |
US20140201145A1 (en) * | 2013-01-17 | 2014-07-17 | Box, Inc. | Conflict resolution, retry condition management, and handling of problem files for the synchronization client to a cloud-based platform |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114422533A (zh) * | 2021-12-29 | 2022-04-29 | 成都鲁易科技有限公司 | 云备份中路径冲突的处理方法、装置及电子设备 |
CN114422533B (zh) * | 2021-12-29 | 2023-05-09 | 成都鲁易科技有限公司 | 云备份中路径冲突的处理方法、装置及电子设备 |
Also Published As
Publication number | Publication date |
---|---|
US10936548B2 (en) | 2021-03-02 |
EP3430534B1 (en) | 2021-05-05 |
EP3430534A1 (en) | 2019-01-23 |
WO2017160545A1 (en) | 2017-09-21 |
US20170270136A1 (en) | 2017-09-21 |
CN109313634B (zh) | 2021-12-21 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109313634A (zh) | 用于单个文件的文件同步暂停 | |
US10567484B2 (en) | Identifying content items for inclusion in a shared collection | |
US20200293169A1 (en) | Content item activity feed for presenting events associated with content items | |
AU2017203690B2 (en) | File-level commenting | |
AU2022201538B2 (en) | Control transfer of shared content | |
EP3595243B1 (en) | Email integration with shared folder based integrated workspaces | |
US20110258526A1 (en) | Web content annotation management web browser plug-in | |
US11799810B2 (en) | Managing message attachments | |
US20140181157A1 (en) | Intelligent content item importing | |
JP2019509538A (ja) | 相互作用情報のユーザ通知 | |
CN108780465A (zh) | 用于操作排序的基于属性的依赖性识别 | |
CN102355503A (zh) | 客户端资源管理方法、资源管理装置及系统、云服务器 | |
US20150326620A1 (en) | Media presentation in a virtual shared space | |
US12061998B2 (en) | Managing projects in a content management system | |
US20130304802A1 (en) | Asynchronous, passive knowledge sharing system and method | |
US20230177015A1 (en) | Method and system for real-time collaboration, task linking, and code design and maintenance in software development | |
US20080059538A1 (en) | Method and system for synchronizing offline records | |
CN108345664A (zh) | 一种文件同步的方法、介质、系统和电子设备 | |
CN102930368B (zh) | 容错外部应用服务器 | |
GB2491612A (en) | Synchronizing a web feed collaboratively produced by users | |
TW201415241A (zh) | 於離線時儲存目標檔案以等待連線時同步之系統及其方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |