CN108369498B - 用于分布式存储库的系统和计算机可读存储介质 - Google Patents
用于分布式存储库的系统和计算机可读存储介质 Download PDFInfo
- Publication number
- CN108369498B CN108369498B CN201680074354.8A CN201680074354A CN108369498B CN 108369498 B CN108369498 B CN 108369498B CN 201680074354 A CN201680074354 A CN 201680074354A CN 108369498 B CN108369498 B CN 108369498B
- Authority
- CN
- China
- Prior art keywords
- code
- repositories
- change
- request
- references
- 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.)
- Active
Links
Images
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/176—Support for shared access to files; File sharing support
- G06F16/1767—Concurrency control, e.g. optimistic or pessimistic approaches
- G06F16/1774—Locking methods, e.g. locking methods for file systems allowing shared and concurrent access to files
-
- 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
- G06F8/00—Arrangements for software engineering
- G06F8/30—Creation or generation of source code
- G06F8/36—Software reuse
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/60—Software deployment
- G06F8/65—Updates
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/70—Software maintenance or management
- G06F8/71—Version control; Configuration management
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/49—Partial evaluation
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Computer Security & Cryptography (AREA)
- Data Mining & Analysis (AREA)
- Databases & Information Systems (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
一种用于分布式存储库的系统包括输入接口和处理器。输入接口用以接收要更改一部分代码的请求。处理器用以确定更改引用和现有引用,指示要锁定一个或多个存储库,通过投票来确定是否批准调换引用,并且在通过投票批准了调换引用的情况下,调换所述引用,以及指示要解锁所述一个或多个存储库。
Description
背景技术
用于存储软件的系统包括为软件开发者托管代码的在线软件存储库。在线软件存储库协助项目共享、协作、版本控制等。当多个开发者从事于单个项目时,可以通过在正在做出更改时锁定存储库(例如,每次只允许一个写入)来避免同时做出的更改中的冲突。然而,锁定存储库会造成效率低下,因为在被锁定时,存储库对于想要做出更改的其它过程而言不可用。随着系统被越来越多的大量软件开发者所使用,越来越多的锁定将增加系统不可用的时间。
附图说明
在以下详细描述和附图中公开了本发明的各种实施例。
图1是例示网络系统的实施例的框图。
图2是例示存储库系统的实施例的框图。
图3是例示代码段索引和代码段数据库的实施例的图示。
图4是例示在代码段索引中调换引用的实施例的图示。
图5是例示存储库系统之间的通信的实施例的图示。
图6是例示用于更新分布式存储库上的文件的过程的实施例的流程图。
图7是例示用于通过投票来确定是否批准调换引用的过程的实施例的流程图。
图8是例示用于调换引用的过程的实施例的流程图。
图9是例示用于更新分布式存储库上的文件的过程的实施例的流程图。
具体实施方式
本发明可以以众多方式来实现,包括被实现为过程;装置;系统;物质组合;被实施在计算机可读存储介质上的计算机程序产品;和/或处理器,诸如被配置成执行存储在耦合到处理器的存储器上的和/或由耦合到处理器的存储器提供的指令的处理器。在本说明书中,可以将这些实现方式或本发明可以采取的任何其它形式称为技术。一般地,可以在本发明的范围内改变所公开过程的步骤的顺序。除非另有说明,否则可以将被描述为被配置成执行任务的诸如处理器或存储器之类的组件实现为暂时地被配置成在给定时间执行任务的通用组件或被制造成执行所述任务的专用组件。如本文中所使用的,术语“处理器”是指被配置成处理数据(诸如计算机程序指令)的一个或多个设备、电路和/或处理核心。
下面连同例示本发明的原理的附图一起提供对本发明的一个或多个实施例的详细描述。结合这样的实施例对本发明进行描述,但是本发明并不限于任何实施例。本发明的范围仅受权利要求限制,并且本发明涵盖众多替换方案、修改和等同物。在以下描述中阐述了众多具体细节,以便提供对本发明的透彻理解。这些细节被提供用于示例的目的,并且可以根据权利要求在没有这些具体细节中的一些或全部的情况下实践本发明。为了清晰起见,在与本发明相关的技术领域中已知的技术材料并未被详细描述,以免不必要地模糊本发明。
用于分布式存储库的系统包括:用以接收要更改一部分代码的请求的输入接口以及处理器,所述处理器用以确定更改引用和现有引用,指示要锁定一个或多个存储库,通过投票来确定是否批准调换引用,在通过投票批准了调换引用的情况下,调换所述引用,以及指示要解锁所述一个或多个存储库。在一些实施例中,该系统包括耦合到处理器并被配置成向处理器提供指令的存储器。
在一些实施例中,用于分布式存储库的系统包括用于具有有限同步锁定的分布式代码存储库的系统。用于分布式代码存储库的系统包括用于存储软件项目的代码存储库系统。在各种实施例中,用于存储软件项目的系统包括用于存储软件、用于启用协作、用于提供版本控制、用于发布软件或用于任何其它适当目的的系统。软件项目被存储在代码存储库上并且在软件开发者之间进行共享或被发布以便公开查看或修改。当代码存储库系统变得(例如,由跨许多不同位置的大量用户)广泛使用时,使用分布式存储库系统(例如,使用在地理上、在用户间等等分布的一组存储库)变得有利。分布式存储库系统使用多个存储库服务器,每个存储库服务器都包括整个代码存储库。当对一个存储库服务器上的代码存储库做出更改时,它会被镜像到其它存储库服务器。多个用户可能正在尝试在任何给定时间修改代码存储库,因此必须锁定正被修改的文件,以便防止同时对单个文件做出多重更改。当其中一个存储库服务器接收到指示对文件的更改的更改数据时,它会被镜像到其它存储库服务器,并且然后由每个存储库服务器检查其正确性(例如,使用随所述更改数据一起分发的校验和)。然后在所有服务器上锁定要修改的文件并检查同步性(例如,不同服务器上的对应文件都是相同的版本)。在确定同步了足够的服务器的情况下,然后使用所述更改数据修改文件,并去除锁定。在各种实施例中,足够的服务器是大多数服务器、包括指定的主服务器的任何服务器集合、所有服务器或任何其它适当的服务器集合。
在一些实施例中,在保持锁定的时间期间为其他用户去除写入功能性。这个时间应当被最小化,以便减少性能中断。用于代码存储库的文件存储结构被设计用于保留所有文件的所有版本,并且易于被适配成最小化修改时间。不是通过修改存储的代码数据来修改文件,而是将新的代码数据与先前版本的代码数据一起存储在数据库中。软件项目的索引文件存储对代码数据段的一组引用。可以组装由引用指示的代码数据段以创建完整的软件项目。当文件被修改时,在保持锁定时需要发生的对文件的唯一更改就是将引用从指向先前版本的代码数据调换成指向新版本的代码数据。这种更改可以非常快地做出(例如,与要将代码数据更改写入到磁盘的时间相比),从而最小化必要的锁定时间。
在一些实施例中,锁定在分布式系统中是重要的,因为一个用户需要确保在他们做出更改时没有其他人正在做出更改。但是锁定在速度和用户体验方面也具有成本。因此,在分布式系统中设计尽可能不显眼的锁定是合期望的。例如,你通常甚至不会希望在写入正在发生时进行只读操作。一种常见的解决方案是使用读写锁定。只要没有写入者存在,多个读取者就可以获得读取锁定并执行他们的操作。每次只有一位写入者可以进行,而且该写入者保持阻止任何读取者的锁定。
在一些实施例中,几乎任何具有锁定的分布式系统都将采取措施以最小化所保持的锁定的范围(例如,锁定了多少数据)和持续时间(例如,锁定了多长时间)。用于分布式存储库的系统聚焦于所保持的锁定的持续时间。在所示示例中,是在更新引用时锁定存储库,而不是每次做出更改时锁定存储库。在不保持锁定的情况下将数据对象存储到孤立的命名空间。只有在将那些对象移动到可见的命名空间(例如,更新对代码数据版本的可见引用)时才保持锁定。
在一些实施例中,在分布式系统中,期望出现即使当两个用户读写不同的副本时,也只有一个单一副本。做到这一点的一个方法是当上传数据时锁定整个存储库,使得其他用户在上传完成之前不能对存储库进行写入。然而,这可能导致存储库被锁定很长时间。任何持续很长时间(例如,超过约一秒)的锁定对用户体验而言都是破坏性的,并且使系统显著变慢。例如,试图执行小型写入(例如,删除代码分支)的用户可能会被锁定其接口,直到另一用户的大型上传完成为止。
在所示示例中,当保持锁定时执行的更新过程的唯一部分是将更新数据分配给引用分支时的点。这是由于文件系统存储了所有先前版本的文件并且以旧版本为基础来构建新版本的文件。当对文件进行更新时,将引用从旧版本的文件调换到已更新版本的文件。这还允许在不保持锁定的情况下执行读取操作。甚至是在正在读取文件时更新文件的情况下,正被读取的特定版本的文件将不会被更改。
图1是例示网络系统的实施例的框图。在一些实施例中,图1的网络系统包括用于使用用于修订控制的系统来存储大型资产(large assets)的系统。在一些实施例中,图1的网络系统提供任何适当数量的软件开发者与修订控制服务器之间的通信。在所示示例中,图1包括网络100。在各种实施例中,网络100包括以下中的一个或多个:局域网、广域网、有线网络、无线网络、互联网、内联网、存储区域网络或任何其它适当的通信网络。在所示示例中,开发者系统102和开发者系统104包括供软件开发者在开发软件时使用的系统。在各种实施例中,存在与网络100通信的1、6、22、122、1059个或任何其它适当数量的开发者系统。在一些实施例中,开发者系统包括处理器和存储器。存储库系统106、存储库系统108和存储库系统110包括用于存储数据的服务器系统。在各种实施例中,存在1、2、3、4、5、7、9、14、22个或任何其它适当数量的存储库系统。在一些实施例中,存储库系统包括处理器和存储器。在一些实施例中,存储库系统106、存储库系统108和存储库系统110包括用于存储代码的服务器系统。在各种实施例中,存储库系统106、存储库系统108和存储库系统110包括用于存储软件、用于启用协作、用于提供版本控制、用于发布软件或用于任何其它适当目的的系统。在一些实施例中,开发者系统从存储库系统下载软件存储库。在一些实施例中,开发者系统将软件修改上传到软件存储库。在一些实施例中,每个存储库系统存储相同的软件。在一些实施例中,开发者系统与所有存储库系统通信以存储软件更改。在一些实施例中,开发者系统与跟所有存储库系统通信的中间服务器或代理通信以存储软件更改。在一些实施例中,开发者系统与一个存储库系统通信以存储软件更改,并且对该存储库系统做出的任何更改都被直接拷贝到其它存储库系统。在各种实施例中,开发者系统与最近的存储库系统、与最不忙的存储库系统、与具有最少数量的已连接开发者系统的存储库系统、与开发者选择的存储库系统或与以任何其它适当的方式选择的存储库系统通信。在一些实施例中,当开发者对一存储库系统做出更改时,该存储库系统在做出更改时锁定存储库(例如,以便防止同时对该存储库做出单独的更改)。在一些实施例中,当开发者对存储库系统做出更改时,所有的存储库系统都被锁定并且对每一个都做出所述更改。
图2是例示存储库系统的实施例的框图。在各种实施例中,图2的存储库系统200包括图1的存储库系统106、图1的存储库系统108或图1的存储库系统110。在所示示例中,存储库系统200包括接口202。在一些实施例中,接口202包括用于与网络通信的接口。在各种实施例中,接口202包括以下接口:用于向用户提供代码存储库、向用户提供一部分代码、向用户提供代码更改的指示、向存储库系统提供代码更改、从用户接收代码更改、从存储库系统接收代码更改、提供或接收对代码更改的投票、提供或接收要锁定存储库的指示或者提供或接收任何其它适当的信息。在一些实施例中,使用处理器来实现接口202。代码段索引204包括用于存储对一组代码段的索引的代码段索引。在一些实施例中,代码段索引204包括一组引用。在一些实施例中,代码段索引204包括一组文件(例如,代码文档等),每个文件包括对代码段的一组引用。在一些实施例中,代码段索引204包括单个文件的多个版本。在一些实施例中,单个文件的不同版本包括对不同代码段的引用。在一些实施例中,单个文件的不同版本包括对相同代码段中的一些的引用。在一些实施例中,文件的版本包括版本号、版本更新日期、版本标识符、文件内容的概要或散列或任何其它适当的版本指示符。在一些实施例中,代码段数据库206包括在代码段索引204中引用的代码段。在一些实施例中,代码段包括文件的部分。在一些实施例中,在存储在代码段索引204中的索引文件中指示包括文件的代码段。在一些实施例中,将包括文件的代码段存储在代码段数据库206中。代码验证器208包括用于验证代码的代码验证器。在一些实施例中,代码验证器208验证所上传的代码文件是否正确(例如,通过检查校验和)。在一些实施例中,代码验证器208验证存储库的状态是否是期望的状态(例如,通过检查与存储在代码段索引204中的一个或多个文件索引相关联的版本指示符)。在一些实施例中,代码验证器208确定更新投票(例如,是否确定要更新存储库)。在一些实施例中,使用处理器来实现代码验证器208。代码更新器210包括用于更新存储在存储库上的代码的代码更新器。在各种实施例中,代码更新器210确定更改引用(例如,代码段索引204中的指示在文件的更新版本中的替换现有代码段的一代码段的引用),代码更新器210确定现有引用(例如,代码段索引204中的指示在文件的更新版本中要被替换的代码段的引用),代码更新器210指示要锁定一个或多个存储库,代码验证器208通过投票来确定是否批准调换引用,代码段更新器210调换引用,代码段更新器210指示要解锁一个或多个存储库,或代码段更新器执行任何其它适当的代码段更新动作。在各种实施例中,存储库系统200的元件全部都使用单个处理器来实现,各自使用它们自己的处理器来实现,或者以任何其它适当的方式被组合到多个处理器上。在一些实施例中,存储库系统200另外包括耦合到一个或多个处理器的存储器。在各种实施例中,存储器包括磁性存储器、光学存储器、固态存储器、闪速存储器、非易失性存储器、只读存储器、带式存储器、盘式存储器或任何其它适当的存储器。
图3是例示代码段索引和代码段数据库的实施例的图示。在一些实施例中,代码段索引300包括图2的代码段索引204并且代码段数据库302包括图2的代码段数据库206。在所示示例中,代码段索引300包括代码项目22索引304。在一些实施例中,代码项目22索引304包括对存储在存储库系统上的软件项目的索引。在一些实施例中,代码项目22索引304包括对题为代码项目22的软件项目的索引。在一些实施例中,代码项目22包括存储在软件存储库上的唯一软件项目。在一些实施例中,代码项目22包括存储在软件存储库上的多个项目中的项目。在一些实施例中,将代码项目22和多个其它代码项目存储在同一软件存储库上。在所示示例中,代码项目22索引304包括一组引用。在一些实施例中,引用包括指针(例如,存储器中的位置的指示符)。引用1包括对代码段数据库302的代码段C308的引用;引用2包括对代码段数据库302的代码段D 310的引用;引用3包括对代码段数据库302的代码段E312的引用;引用4包括对代码段数据库302的代码段F 314的引用;引用5包括对代码段数据库302的代码段G 316的引用;引用6包括对代码段数据库302的代码段H 318的引用;等等。在一些实施例中,通过存储在代码项目22索引304中的该组引用进行引用的代码段以其最新近的形式进行组合以形成代码项目22。在一些实施例中,存在代码项目22的先前版本(例如,并且它们通过不同的索引文件进行引用)。在一些实施例中,将代码项目22的代码段存储在代码段数据库302内的容器中(例如,代码项目22代码306)。在一些实施例中,不将代码项目22的代码段存储在代码段数据库302内的容器中。
图4是例示在代码段索引中调换引用的实施例的图示。在一些实施例中,代码段索引400包括图2的代码段索引204并且代码段数据库402包括图2的代码段数据库206。代码段索引400包括代码项目22索引404。在一些实施例中,在调换引用的过程期间,代码项目22索引404包括图3的代码项目22索引304。在一些实施例中,通过调换引用来更新软件存储库中的软件(例如,代码项目22)。在所示示例中,引用1包括对代码段数据库402的代码段C 408的引用;引用2包括对代码段数据库402的代码段D 410的引用;引用4包括对代码段数据库402的代码段F 416的引用;引用5包括对代码段数据库402的代码段G 418的引用;引用6包括对代码段数据库402的代码段H 420的引用;等等。去除代码项目22索引404中的指向代码段E 412的引用3,并将其替换为(例如,调换为)指向代码段E'414的引用7。代码段E包括先前版本的代码段,并且代码段E'包括替换版本的代码段。在一些实施例中,引用3包括现有引用,并且引用7包括更改引用。在一些实施例中,在通过投票确定了批准调换引用之后调换所述引用。
图5是例示存储库系统之间的通信的实施例的图示。在一些实施例中,图5的存储库系统包括图1的存储库系统。在一些实施例中,开发者系统506包括图1的开发者系统506。在一些实施例中,图5的各系统经由网络(例如,图1的网络100)进行通信。在所示示例中,存储库系统500与存储库系统502和存储库系统504通信。存储库系统500包括已经接收到要更新(例如,来自开发者系统506的)文件的请求的存储库系统。在一些实施例中,要更新文件的请求包括代码段和校验和。在一些实施例中,存储库系统500使用校验和(例如,使用校验和检查器510)来检查代码段以确定该代码段是否已被正确接收。在一些实施例中,存储库系统500(例如,使用版本检查器512)确定要更新的文件的先前(例如,更新之前的)版本号。在一些实施例中,存储库系统500向存储库系统502和存储库系统504提供包括代码段和校验和的要更新文件的请求。在一些实施例中,要更新文件的请求还包括要更新的文件的版本号。在一些实施例中,存储库系统502和存储库系统504(例如,使用校验和)确定它们是否正确地接收到所述文件。在一些实施例中,存储库系统502和存储库系统504(例如,使用版本号)确定它们是否具有要更新的文件的相同先前版本。存储库系统502和存储库系统504中的每一个向存储库系统500提供投票,所述投票指示是否批准调换引用。在确定了文件被正确接收并且文件的先前版本与存储库系统500上的相同的情况下,存储库系统502和存储库系统504中的每一个都提供要批准调换引用的投票。存储库系统500通过所述投票来确定是否批准调换引用。在一些实施例中,在半数以上(例如,3个中有2个)的存储库系统批准了调换引用的情况下,所述投票批准调换引用。在一些实施例中,在一存储库系统提供不要批准调换引用的投票但是投票批准了调换引用的情况下,向提供了不要批准调换引用的投票的系统提供修复指示。在一些实施例中,在所述投票不批准调换引用的情况下,向开发者系统506提供调换引用失败的指示。在一些实施例中,在锁定存储库系统的同时(例如,在已提供要锁定存储库系统的指示之后)执行投票以确定是否要调换引用。在一些实施例中,在锁定存储库系统的同时执行投票以确定是否要调换引用,以便确保在自执行投票时(例如,当检查文件的先前版本以确认它与开发者系统500上的文件的先前版本匹配时)起至调换引用时止的时间段期间文件将不会被更改。
图6是例示用于更新分布式存储库上的文件的过程的实施例的流程图。在一些实施例中,由存储库系统(例如,图1的存储库系统106、图1的存储库系统108或图1的存储库系统110)执行图6的过程。在所示示例中,在600中,接收要更改一部分代码的请求。在一些实施例中,从开发者系统接收请求。在一些实施例中,请求包括新的代码部分。在各种实施例中,请求包括相关联的元数据、校验和、要由新的代码部分替换的代码部分的指示符或任何其它适当的数据。在602中,确定请求是否有效。在一些实施例中,确定请求是否有效包括使用校验和来检查新的代码部分。在确定了请求无效的情况下,过程结束。在一些实施例中,在确定了请求无效的情况下,(例如,向开发者系统)提供错误消息。在于602中确定了请求有效的情况下,控制转到604。在604中,存储请求。在一些实施例中,存储请求包括将新的代码部分存储在代码段数据库中。在606中,分发请求。在一些实施例中,分发请求包括将请求提供给其它存储库系统。在一些实施例中,分发请求包括提供新的代码部分和校验和。在608中,确定更改引用和现有引用。在一些实施例中,现有引用包括指示要由新的代码部分替换的代码部分的存储位置的引用。在一些实施例中,更改引用指示新的代码部分的存储位置。在610中,过程指示要锁定一个或多个存储库。在一些实施例中,指示要锁定一个或多个存储库包括提供准备好锁定状态的指示。在一些实施例中,锁定存储库。在一些实施例中,锁定要修改的文件。在612中,过程请求对调换引用进行投票。在一些实施例中,对调换引用的投票包括调换指示。在614中,通过投票来确定是否批准调换引用。在一些实施例中,通过投票来确定是否批准调换引用包括从一个或多个其它系统接收调换指示。在一些实施例中,通过投票来确定是否批准调换引用包括确定是否接收到的大部分调换指示都指示要调换引用。在一些实施例中,在接收到不要调换的调换指示但是批准了调换引用的情况下,向提供了不要调换的调换指示的系统提供修复指示。
在通过投票确定了不批准调换引用的情况下,控制转到618。在一些实施例中,在通过投票确定了不批准调换引用的情况下,指示更改一部分代码失败。在于614中通过投票确定了批准调换引用的情况下,控制转到616。在一些实施例中,在确定了批准调换引用的情况下,提供已完成更改一部分代码的指示。在616中,调换所述引用。然后控制转到618。在618中,过程指示要解锁所述一个或多个存储库。在一些实施例中,解锁存储库。在一些实施例中,解锁所修改的文件。
图7是例示用于通过投票来确定是否批准调换引用的过程的实施例的流程图。在一些实施例中,图7的过程实现图6的614。在所示示例中,在700中,接收对调换引用的投票。在一些实施例中,从一个或多个存储库系统接收对调换引用的投票。在702中,确定是否半数以上的投票指示要调换引用。在确定了半数以上的投票指示要调换引用的情况下,控制转到704。在704中,过程指示通过投票批准了调换引用,并且过程结束。在于702中确定了没有半数以上的投票指示要调换引用的情况下,控制转到706。在706中,过程指示通过投票不批准调换引用,并且过程结束。
图8是例示用于调换引用的过程的实施例的流程图。在一些实施例中,图8的过程实现图6的616。在所示示例中,在800中,从索引文件中删除现有引用。在一些实施例中,在删除现有引用之前复制索引文件,以便保留索引文件的先前版本。在802中,将更改引用添加到索引文件代替现有引用。在一些实施例中,更改引用指向替换现有引用所指向的代码片段的代码片段。在一些实施例中,确定索引文件的新版本号。在一些实施例中,确定索引文件的新校验和。
图9是例示用于更新分布式存储库上的文件的过程的实施例的流程图。在一些实施例中,由存储库系统(例如,图1的存储库系统106、图1的存储库系统108或图1的存储库系统110)执行图9的过程。在所示示例中,在900中,从存储库系统接收要更改一部分代码的请求。在一些实施例中,请求包括新的代码部分。在一些实施例中,请求包括校验和。在一些实施例中,请求包括要由新的代码部分替换的代码部分的指示符。在一些实施例中,请求包括要由新的代码部分替换的代码部分的版本号。在902中,确定请求是否有效。在一些实施例中,确定请求是否有效包括使用校验和来检查新的代码部分。在确定了请求无效的情况下,过程结束。在一些实施例中,在确定了请求无效的情况下,(例如,向存储库系统)提供错误消息。在于902中确定了请求有效的情况下,控制转到904。在904中,存储请求。在一些实施例中,存储请求包括将新的代码部分存储在代码段数据库中。在906中,确定更改引用和现有引用。在一些实施例中,现有引用包括指示要由新的代码部分替换的代码部分的存储位置的引用。在一些实施例中,更改引用指示新的代码部分的存储位置。在908中,接收要锁定存储库的指示。在一些实施例中,锁定存储库。在一些实施例中,锁定要修改的文件。在910中,接收要对调换引用进行投票的指示。在912中,确定对调换引用的投票。在一些实施例中,在版本号匹配与要更改一部分代码的请求相关联的版本号的情况下,确定要批准调换引用。在914中,提供对调换引用的投票。在一些实施例中,所述投票被提供给请求所述更改的存储库系统。在一些实施例中,所述投票被提供给所有存储库系统。在916中,通过投票来确定是否批准调换引用。在一些实施例中,通过投票来确定是否批准调换引用包括确定是否大部分的投票都指示要调换引用。在通过投票确定了不批准调换引用的情况下,控制转到920。在通过投票确定了批准调换引用的情况下,控制转到918。在918中,调换所述引用。然后控制转到920。在920中,接收要解锁存储库的指示。在一些实施例中,解锁存储库。在一些实施例中,解锁所修改的文件。
虽然出于理解清晰的目的对前述实施例做出了比较详细的描述,但是本发明并不局限于所提供的细节。存在实现本发明的许多替换方法。所公开的实施例是例示性的而不是限制性的。
Claims (16)
1.一种用于分布式存储库的系统,包括:
硬件处理器,被配置为:
接收要更改一部分代码的请求,其中更改所述一部分代码的所述请求包括新的代码部分;
确定与所述代码相关联的更改引用和与所述代码相关联的现有引用;
指示要锁定分布式存储库中对所述代码具有访问权的多个存储库;
请求所述多个存储库批准要更改所述一部分代码的所述请求;
从所述多个存储库中的每个存储库接收对应的投票;
基于所述对应的投票来确定调换引用是否被所述多个存储库中的大部分存储库批准;
响应于确定调换引用被所述多个存储库中的所述大部分存储库批准:
通过将与所述代码相关联的所述现有引用与所述更改引用调换,来修改所述代码;以及
指示要解锁所述多个存储库;以及
存储器,与所述硬件处理器耦合,并且被配置为向所述硬件处理器提供指令。
2.根据权利要求1所述的系统,其中,引用包括指针。
3.根据权利要求1所述的系统,其中,所述新的代码部分包括代码块和相关联的元数据。
4.根据权利要求1所述的系统,其中,所述硬件处理器还被配置为存储所述新的代码部分。
5.根据权利要求1所述的系统,其中,所述硬件处理器还被配置为向其它系统提供所述新的代码部分。
6.根据权利要求1所述的系统,其中,所述硬件处理器还被配置为确定所述新的代码部分是否有效。
7.根据权利要求1所述的系统,其中,所述硬件处理器被配置为提供准备好锁定状态的指示。
8.根据权利要求1所述的系统,其中,为了指示要锁定所述多个存储库,所述硬件处理器还被配置为指示要锁定存储在所述系统上的存储库。
9.根据权利要求1所述的系统,其中,为了指示要锁定所述多个存储库,所述硬件处理器还被配置为指示要锁定存储在其它系统上的存储库。
10.根据权利要求1所述的系统,其中,所述硬件处理器还被配置为:
在接收到不要调换的调换指示但批准了调换引用的情况下,向提供了所述不要调换的调换指示的系统提供修复指示。
11.根据权利要求1所述的系统,其中,所述硬件处理器还被配置为:
在不批准调换引用的情况下,提供更改一部分代码失败的指示。
12.根据权利要求1所述的系统,其中,所述硬件处理器还被配置为:
在批准了调换引用的情况下,提供已完成更改一部分代码的指示。
13.根据权利要求1所述的系统,其中,所述系统和一个或多个其它系统各自通过投票来确定是否批准调换引用。
14.根据权利要求1所述的系统,其中,所述处理器还被配置为:
在批准了调换引用的情况下,向一个或多个其它系统提供要调换引用的指示。
15.一种用于分布式存储库的方法,包括:
接收要更改一部分代码的请求,其中更改所述一部分代码的所述请求包括新的代码部分;
使用硬件处理器确定与所述代码相关联的更改引用和与所述代码相关联的现有引用;
指示要锁定分布式存储库中对所述代码具有访问权的多个存储库;
请求所述多个存储库批准要更改所述一部分代码的所述请求;
从所述多个存储库中的每个存储库接收对应的投票;
基于所述对应的投票来确定调换引用是否被所述多个存储库中的大部分存储库批准;以及
响应于确定调换引用被所述多个存储库中的所述大部分存储库批准:
通过将与所述代码相关联的所述现有引用与所述更改引用调换,来修改所述代码;以及
指示要解锁所述多个存储库。
16.一种非暂时性计算机可读存储介质,所述非暂时性计算机可读存储介质包括存储在其上的计算机程序产品,所述计算机程序产品包括用于以下操作的计算机指令:
接收要更改一部分代码的请求,其中更改所述一部分代码的所述请求包括新的代码部分;
使用处理器确定与所述代码相关联的更改引用和与所述代码相关联的现有引用;
指示要锁定分布式存储库中对所述代码具有访问权的多个存储库;
请求所述多个存储库批准要更改所述一部分代码的所述请求;
从所述多个存储库中的每个存储库接收对应的投票;
基于所述对应的投票来确定调换引用是否被所述多个存储库中的大部分存储库批准;以及
响应于确定调换引用被所述多个存储库中的所述大部分存储库批准:
通过将与所述代码相关联的所述现有引用与所述更改引用调换,来修改所述代码;以及
指示要解锁所述多个存储库。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US14/998,079 US9977786B2 (en) | 2015-12-23 | 2015-12-23 | Distributed code repository with limited synchronization locking |
US14/998079 | 2015-12-23 | ||
PCT/US2016/061685 WO2017112123A1 (en) | 2015-12-23 | 2016-11-11 | Distributed code repository with limited synchronization locking |
Publications (2)
Publication Number | Publication Date |
---|---|
CN108369498A CN108369498A (zh) | 2018-08-03 |
CN108369498B true CN108369498B (zh) | 2022-10-25 |
Family
ID=59086437
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201680074354.8A Active CN108369498B (zh) | 2015-12-23 | 2016-11-11 | 用于分布式存储库的系统和计算机可读存储介质 |
Country Status (4)
Country | Link |
---|---|
US (2) | US9977786B2 (zh) |
EP (1) | EP3394741B1 (zh) |
CN (1) | CN108369498B (zh) |
WO (1) | WO2017112123A1 (zh) |
Families Citing this family (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10572226B2 (en) * | 2016-12-21 | 2020-02-25 | Aon Global Operations Ltd (Singapore Branch) | Methods, systems, and portal using software containers for accelerating aspects of data analytics application development and deployment |
US11023215B2 (en) * | 2016-12-21 | 2021-06-01 | Aon Global Operations Se, Singapore Branch | Methods, systems, and portal for accelerating aspects of data analytics application development and deployment |
CN110968563B (zh) * | 2018-09-29 | 2023-11-17 | 华为技术有限公司 | 一种数据存储方法、元数据服务器及客户端 |
US11023490B2 (en) * | 2018-11-20 | 2021-06-01 | Chicago Mercantile Exchange Inc. | Selectively replicated trustless persistent store |
US20230121238A1 (en) * | 2021-10-15 | 2023-04-20 | International Business Machines Corporation | Dynamic virtual network access |
CN116719540B (zh) * | 2023-04-25 | 2024-03-12 | 广州汽车集团股份有限公司 | 评审文档更新方法、装置、设备及计算机可读存储介质 |
Family Cites Families (36)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6873997B1 (en) * | 1999-08-04 | 2005-03-29 | Agile Software Corporation | Data management system and method for automatically propagating information to disparate information systems from a central location |
US20020138706A1 (en) * | 2001-03-21 | 2002-09-26 | Littera, Inc. | Reader-writer lock method and system |
US6922694B2 (en) * | 2001-11-14 | 2005-07-26 | Sun Microsystems, Inc. | Lock delegation with space-efficient lock management |
US8577908B2 (en) * | 2003-03-20 | 2013-11-05 | International Business Machines Corporation | Automatic lock management in an abstract database |
US7660794B2 (en) * | 2003-06-03 | 2010-02-09 | Hewlett-Packard Development Company, L.P. | Method and program product for reducing database walk frequency while repetitively accessing a firewall connection and rule database |
US20050086384A1 (en) | 2003-09-04 | 2005-04-21 | Johannes Ernst | System and method for replicating, integrating and synchronizing distributed information |
US7451434B1 (en) * | 2003-09-09 | 2008-11-11 | Sap Aktiengesellschaft | Programming with shared objects in a shared memory |
US7788314B2 (en) * | 2004-04-23 | 2010-08-31 | Waratek Pty Ltd. | Multi-computer distributed processing with replicated local memory exclusive read and write and network value update propagation |
US20060106889A1 (en) * | 2004-11-12 | 2006-05-18 | Mannby Claes-Fredrik U | Method, system, and program for managing revisions to a file |
US7933956B2 (en) | 2006-01-24 | 2011-04-26 | Simulat, Inc. | System and method to create a collaborative web-based multimedia layered platform |
US7769792B1 (en) * | 2006-02-10 | 2010-08-03 | Google Inc. | Low overhead thread synchronization system and method for garbage collecting stale data in a document repository without interrupting concurrent querying |
US8443354B1 (en) | 2006-03-29 | 2013-05-14 | Symantec Corporation | Detecting new or modified portions of code |
US8060879B2 (en) * | 2006-05-30 | 2011-11-15 | Oracle America, Inc. | Predictive log synchronization |
CN101145101A (zh) * | 2006-09-14 | 2008-03-19 | 国际商业机器公司 | 版本控制中定制和执行策略的方法、装置和系统 |
US7953778B2 (en) * | 2008-05-20 | 2011-05-31 | International Business Machines Corporation | Efficient support of consistent cyclic search with read-copy update and parallel updates |
US8738573B2 (en) * | 2008-05-23 | 2014-05-27 | Microsoft Corporation | Optimistic versioning concurrency scheme for database streams |
US8122434B2 (en) * | 2009-05-29 | 2012-02-21 | Invensys Sytems, Inc. | Methods and apparatus for control configuration control objects associated with a track attribute for selecting configuration information |
US20140222758A1 (en) * | 2009-08-14 | 2014-08-07 | Ic Manage, Inc. | Coherent File State Maintained Among Confederated Repositories By Distributed Workspace Apparatuses Backed Up By a File State Ledgerdemain Store |
JP2013514569A (ja) * | 2009-12-18 | 2013-04-25 | シダンスク ユニバーシティ | 静的に型付けされたクラスベースのオブジェクト指向ソフトウェアのノンブロッキング動的更新の方法、コンピュータ・プログラム製品、およびシステム |
US9311056B2 (en) * | 2010-08-06 | 2016-04-12 | International Business Machines Corporation | Automated analysis of code developer's profile |
US8869127B2 (en) * | 2011-01-03 | 2014-10-21 | International Business Machines Corporation | Refactoring programs for flexible locking |
US8533699B2 (en) * | 2011-03-31 | 2013-09-10 | Oracle International Corporation | System and method for optimizing a code section by forcing a code section to be executed atomically |
US8826222B2 (en) * | 2011-08-02 | 2014-09-02 | International Business Machines Corporation | Pre-merge conflict avoidance |
CN102436633A (zh) * | 2011-11-30 | 2012-05-02 | 华为技术有限公司 | 数据管理方法及系统、数据库系统 |
US8943034B2 (en) * | 2011-12-22 | 2015-01-27 | Sap Se | Data change management through use of a change control manager |
US20140047413A1 (en) | 2012-08-09 | 2014-02-13 | Modit, Inc. | Developing, Modifying, and Using Applications |
US9342380B2 (en) * | 2013-03-05 | 2016-05-17 | Oracle International Corporation | System and method for implementing reader-writer locks using hardware transactional memory |
US9665593B2 (en) * | 2013-03-28 | 2017-05-30 | International Business Machines Corporation | Dynamically synching elements in file |
US9619668B2 (en) * | 2013-09-16 | 2017-04-11 | Axis Ab | Managing application data in distributed control systems |
CN103647669B (zh) * | 2013-12-16 | 2017-04-05 | 上海证券交易所 | 一种保证分布式数据处理一致性的系统及方法 |
US9311076B2 (en) * | 2014-01-22 | 2016-04-12 | Linkedin Corporation | Systems and methods for enforcing code reviews |
US9460143B2 (en) * | 2014-02-14 | 2016-10-04 | Oracle International Corporation | Methods, systems, and computer readable media for a multi-view data construct for lock-free operations and direct access |
US10649742B2 (en) * | 2014-06-13 | 2020-05-12 | James L. Bosworth | Computing expression medium, development environment, and device communication and control architecture |
US10303665B2 (en) * | 2014-09-24 | 2019-05-28 | Sap Se | Zero downtime maintenance for applications and databases |
US10120917B2 (en) * | 2014-09-26 | 2018-11-06 | Oracle International Corporation | Integrating object-based data integration tool with a version control system in centralized and decentralized environments |
US9679003B2 (en) * | 2015-01-07 | 2017-06-13 | International Business Machines Corporation | Rendezvous-based optimistic concurrency control |
-
2015
- 2015-12-23 US US14/998,079 patent/US9977786B2/en active Active
-
2016
- 2016-11-11 CN CN201680074354.8A patent/CN108369498B/zh active Active
- 2016-11-11 EP EP16879618.3A patent/EP3394741B1/en active Active
- 2016-11-11 WO PCT/US2016/061685 patent/WO2017112123A1/en unknown
-
2018
- 2018-04-19 US US15/957,258 patent/US10114833B2/en active Active
Non-Patent Citations (2)
Title |
---|
Cloudifying Source Code Repositories:;Michael Siegenthaler等;《ACM SIGOPS Operating Systems Review》;20100430;第44卷(第2期);24-28 * |
分布式的源代码管理工具Git初学者教程;西西整理;《https://www.cr173.com/html/12603_1.html》;20110731;1-14 * |
Also Published As
Publication number | Publication date |
---|---|
EP3394741A1 (en) | 2018-10-31 |
US9977786B2 (en) | 2018-05-22 |
CN108369498A (zh) | 2018-08-03 |
US20180246904A1 (en) | 2018-08-30 |
WO2017112123A1 (en) | 2017-06-29 |
EP3394741A4 (en) | 2019-08-21 |
EP3394741B1 (en) | 2022-06-15 |
US20170185627A1 (en) | 2017-06-29 |
US10114833B2 (en) | 2018-10-30 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN108369498B (zh) | 用于分布式存储库的系统和计算机可读存储介质 | |
US11561956B2 (en) | Key pattern management in multi-tenancy database systems | |
EP3477501B1 (en) | System sharing types in multi-tenancy database systems | |
US7933870B1 (en) | Managing file information | |
US10437795B2 (en) | Upgrading systems with changing constraints | |
US10713654B2 (en) | Enterprise blockchains and transactional systems | |
US9660962B2 (en) | Network-attached storage gateway validation | |
US7801855B2 (en) | Method and apparatus for merging log entries in a database management system | |
CN101268439B (zh) | 数据库片段克隆和管理 | |
CN100422949C (zh) | 用于拷贝存储内容的方法和系统 | |
CN101046821B (zh) | 通用数据库操纵器 | |
CN111527487A (zh) | 用于内容项同步的唯一标识符的指配和再分配 | |
CN109947773A (zh) | 在多租户数据库系统中部署对键模式的改变 | |
US9990391B1 (en) | Transactional messages in journal-based storage systems | |
CN110147369A (zh) | 多重租赁数据库系统中的数据分离和写入重新定向 | |
US20060106898A1 (en) | Method, system, and program for storing and using metadata in multiple storage locations | |
US10108658B1 (en) | Deferred assignments in journal-based storage systems | |
KR20140079451A (ko) | 다수의 소스로부터의 재생 목록의 병합 | |
US20190114166A1 (en) | Function tracking for source code files | |
US11875178B2 (en) | Using multiple blockchains for applying transactions to a set of persistent data objects in persistent storage systems | |
CN100403269C (zh) | 用于管理关于目标卷与源卷之间关系的信息的方法和系统 | |
US8572048B2 (en) | Supporting internal consistency checking with consistency coded journal file entries | |
US8862550B1 (en) | Reliable in-place bootstrap metadata transformation in a shared data store | |
US10942912B1 (en) | Chain logging using key-value data storage | |
CN105659214B (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 | ||
TA01 | Transfer of patent application right |
Effective date of registration: 20200812 Address after: Washington State Applicant after: MICROSOFT TECHNOLOGY LICENSING, LLC Address before: California, USA Applicant before: GITHUB Inc. |
|
TA01 | Transfer of patent application right | ||
GR01 | Patent grant | ||
GR01 | Patent grant |