用于计算用于在连续分布式构建中有效高速缓存的校验和的方法和装置制造方法
【专利摘要】用于确定配置文件的依赖关系是否已经改变、以使得应当重新计算编译策略的方法、系统和计算机可读介质。为个别配置文件计算局部构建校验和。通过对通向配置文件的输入路径加上指示路径是引用文件还是目录的数据以及在配置文件本身上计算的校验和进行排序,来计算局部构建校验和。局部构建校验和的传递闭包继而用来计算全局构建校验和;对局部构建校验和进行排序以便计算全局构建校验和。如果全局构建校验和与先前计算的全局构建校验和不同,则应当重新计算编译策略,因为这是编译策略可能不再有效的信号,例如因为在配置文件中的一些依赖关系已经改变。
【专利说明】用于计算用于在连续分布式构建中有效高速缓存的校验和的方法和装置
【技术领域】
[0001]本发明的方面涉及用于构建软件的方法、系统和计算机可读介质。具体而言,本发明的方面涉及计算校验和以确定为更早配置文件计算的构建策略是否可以被重用于更晚配置文件。
【背景技术】
[0002]在开发软件时,经常首先以人类可以容易理解的编程语言将其编写为编程代码。编程代码然后经过编译过程以便创建计算机可以容易理解的可执行代码。执行编译和链接过程以便生成可执行代码。计算机遵循可执行代码中的指令以便执行所有计算机功能、包括显示用户界面、连接到因特网和执行其它计算任务、比如实现字处理和web浏览、提供web服务等。
[0003]程序员使用与字处理程序相似的编辑器以便编写计算机软件。编辑器通常允许程序员键入他们的程序、编译程序并且运行程序以便测试它。为了管理大型软件程序,程序经常被划分成称为模块的分离单位。模块是被编写为处置一个或者多个有关任务的计算机代码,并且代码经常可以作为单个单位被一起管理。不同模块然后可以被编写为管理特定任务。例如为了编写web浏览程序,可以有用于管理书签的模块、用于处置与因特网服务的通信的模块等。
[0004]在编程代码中编写的软件程序或者模块可以引用其它软件程序或者模块。这是一种用于编写计算机程序的高效方式,因为它允许计算机程序员引用已经创建的代码、并且因此无需从暂存器重建所有代码。取而代之,计算机程序员能够并入或者依赖于其他人先前可能已经编写的代码部分或者库。程序员然后可以关注于编写他们自己的具体软件模块的操作部分。
[0005]在从编程代码生成可执行代码时,代码生成器需要知道编译模块的顺序。依托于第二模块的第一模块应当在第二模块之后被编译。程序员编写配置文件以便向代码生成器通知哪些配置文件依托或者依赖于其它配置文件。配置文件是声明模块的依赖关系的文档,以便使得代码生成器可以恰当地顺序化模块的编译。配置文件因此声明软件模块的依赖关系。软件模块的依赖关系可以影响模块被编译的顺序化。在一些情况下,模块并不相互依赖、因此可以被并行编译。
[0006]传统上,定义模块为集合,其中项是单文件和/或其它模块。如果有对模块中的项中的任何项的改变,则需要重新编译完整模块。因而,也需要重新编译依赖于重新编译的特定模块的所有模块。另外,每当重新编译模块时重新计算编译计划,该编译计划是用于编译、链接和其它任务的策略。
[0007]这样的重新编译可能对于大型软件产品而言计算成本高从而花费宝贵时间和资源。因此希望有一种用于减少计算开支的更好的重新编译技术。在一种方式中,检查文件的时间戳以确定重新编译是否必需。如果时间戳自从先前编译起尚未改变,则可以略过编译过程,因为无对软件模块的更新或者改变。然而这样的方式的一个缺点是如果未更新时间戳则不会在可执行代码中更新对软件模块中的编程代码的改变。另外,时间戳中的错误信号、例如在机器具有不同时间时可能导致非密封构建,在这些非密封构建中未包括一些依赖关系,从而导致不希望的结果。鉴于这样的缺点,寻求一种用于减少重新编译的计算开支的更好方式。
【发明内容】
[0008]在本发明的一个方面中,本发明可以包括一种由数据处理装置执行的方法,该方法包括:创建用于第一构建的第一编译策略;使用第一编译策略来执行第一构建;计算用于第一构建的第一校验和;存储第一编译策略和第一校验和;计算用于第二构建的第二校验和;确定第二校验和是否等于第一校验和;响应于确定第二校验和不等于第一校验和,创建第二编译策略;存储第二编译策略和第二校验和,并且使用第二编译策略来执行第二构建;并且响应于确定第二校验和等于第一校验和,取回第一编译策略并且使用第一编译策略来执行第二构建。
[0009]在本发明的又一方面中,该方法包括其中第一校验和是全局构建校验和;并且全局构建校验和通过使用一个或者多个局部构建校验和来计算。
[0010]在本发明的又一方面中,该方法包括确定为第一构建计算的局部构建校验和对于第二构建尚未改变并且在第二编译策略中重新使用第一编译策略的与局部构建校验和关联的部分。
[0011]在本发明的又一方面中,该方法包括其中文件系统信息按照路径名被排序以便计算局部构建校验和。
[0012]在本发明的又一方面中,该方法包括其中文件系统信息包括校验和。
[0013]在本发明的又一方面中,该方法包括其中使用第一编译策略来执行第一构建还包括检查配置文件的内容以确定依赖关系;并且为配置文件的每个依赖关系计算局部构建校验和。
[0014]在本发明的又一方面中,该方法包括基于配置文件的依赖关系来计算传递闭包。
[0015]在本发明的又一方面中,该方法其中包括为计算的传递闭包的每个配置文件计算局部构建校验和。
[0016]在本发明的又一方面中,该方法包括其中校验和通过使用XOR函数来计算。
[0017]在本发明的又一方面中,该方法包括其中计算第一校验和还包括执行确定性排序;用确定性排序来计算局部构建校验和;并且使用局部构建校验和来计算第一校验和,第一校验和是全局构建校验和。
[0018]在本发明的另一方面中,本发明可以包括一种系统,该系统包括:一个或者多个计算机;耦合到一个或者多个计算机的计算机可读介质,具有在其上存储的指令,指令在由一个或者多个计算机执行时使一个或者多个计算机执行操作,操作包括:创建用于第一构建的第一编译策略;使用第一编译策略来执行第一构建;计算用于第一构建的第一校验和;存储第一编译策略和第一校验和;计算用于第二构建的第二校验和;确定第二校验和是否等于第一校验和;响应于确定第二校验和不等于第一校验和,创建第二编译策略;存储第二编译策略和第二校验和并且使用第二编译策略来执行第二构建;以及响应于确定第二校验和等于第一校验和,取回第一编译策略、并且使用第一编译策略来执行第二构建。
[0019]在本发明的又一方面中,该系统包括其中第一校验和是全局构建校验和;并且全局构建校验和通过使用一个或者多个局部构建校验和来计算。
[0020]在本发明的又一方面中,该系统的计算机可读介质包括在其上存储的附加指令,附加指令在由一个或者多个处理器执行时使一个或者多个处理器执行附加操作,附加操作包括:确定为第一构建计算的局部构建校验和对于第二构建尚未改变,并且在第二编译策略中重新使用第一编译策略的与局部构建校验和关联的部分。
[0021]在本发明的又一方面中,该系统包括其中文件系统信息按照路径名被排序以便计算局部构建校验和。
[0022]在本发明的又一方面中,该系统包括其中文件系统信息包括校验和。
[0023]在本发明的又一方面中,该系统包括其中使用第一编译策略来执行第一构建还包括检查配置文件的内容以确定依赖关系;并且为配置文件的每个依赖关系计算局部构建校验和。
[0024]在本发明的又一方面中,该系统的计算机可读介质包括在其上存储的附加指令,附加指令在由一个或者多个处理器执行时使一个或者多个处理器执行附加操作,附加操作包括:基于配置文件的依赖关系来计算传递闭包。
[0025]在本发明的又一方面中,该系统包括其中为计算的传递闭包的每个配置文件计算局部构建校验和。
[0026]在本发明的又一方面中,该系统包括其中校验和通过使用XOR函数来计算。
[0027]在本发明的又一方面中,该系统包括其中计算第一校验和还包括执行确定性排序;用确定性排序来计算局部构建校验和;并且使用局部构建校验和来计算第一校验和,第一校验和是全局构建校验和。
[0028]在本发明的另一方面中,本发明可以包括一种耦合到一个或者多个处理器的计算机可读介质,该计算机可读介质具有在其上存储的指令,指令在由一个或者多个计算机执行时使一个或者多个计算机执行操作,操作包括:创建用于第一构建的第一编译策略;使用第一编译策略来执行第一构建;计算用于第一构建的第一校验和;存储第一编译策略和第一校验和;计算用于第二构建的第二校验和;确定第二校验和是否等于第一校验和;响应于确定第二校验和不等于第一校验和,创建第二编译策略;存储第二编译策略和第二校验和并且使用第二编译策略来执行第二构建;以及响应于确定第二校验和等于第一校验和,取回第一编译策略、并且使用第一编译策略来执行第二构建。
[0029]在本发明的又一方面中,该计算机可读介质包括其中第一校验和是全局构建校验和;并且全局构建校验和通过使用一个或者多个局部构建校验和来计算。
[0030]在本发明的又一方面中,该计算机可读介质包括在其上存储的附加指令,附加指令在由一个或者多个处理器执行时使一个或者多个处理器执行附加操作,附加操作包括:确定为第一构建计算的局部构建校验和对于第二构建尚未改变并且在第二编译策略中重新使用第一编译策略的与局部构建校验和关联的部分。
[0031]在本发明的又一方面中,该计算机可读介质包括其中文件系统信息按照路径名被排序以便计算局部构建校验和。
[0032]在本发明的又一方面中,该计算机可读介质包括其中文件系统信息包括校验和。[0033]在本发明的又一方面中,该计算机可读介质包括其中使用第一编译策略来执行第一构建还包括检查配置文件的内容以确定依赖关系;并且为配置文件的每个依赖关系计算局部构建校验和。
[0034]在本发明的又一方面中,该计算机可读介质包括在其上存储的附加指令,附加指令在由一个或者多个处理器执行时使一个或者多个处理器执行附加操作,附加操作包括:基于配置文件的依赖关系来计算传递闭包。
[0035]在本发明的又一方面中,该计算机可读介质包括其中为计算的传递闭包的每个配置文件计算局部构建校验和。
[0036]在本发明的又一方面中,该计算机可读介质包括其中校验和使用XOR函数来计
笪
ο
[0037]在本发明的又一方面中,该计算机可读介质包括其中计算第一校验和还包括执行确定性排序;用确定性排序计算局部构建校验和;并且使用局部构建校验和来计算第一校验和,第一校验和是全局构建校验和。
[0038]讨论的方法、装置和计算机可读存储介质的进一步适用范围将从下文给出的具体描述中变得清楚。然而应当理解具体描述和具体示例在指示实施例之时仅通过示例来给出,因为在这里公开的概念的精神实质和范围内的各种改变和修改将从这一具体描述中变得为本领域技术人员所 清楚。
【专利附图】
【附图说明】
[0039]讨论的系统和方法将从下文给出的具体描述以及附图中变得被更完全理解,这些附图仅通过示例来给出、因此并非限制,并且在附图中:
[0040]将在具体描述的过程中具体描述附图。
[0041]图1是图示根据一个实施例的配置文件的示例依赖关系的框图。
[0042]图2是图示根据一个实施例的用于构造编译策略的步骤的流程图。
[0043]图3是图示根据一个实施例的用于确定是否重用先前计算的编译策略的步骤的流程图。
[0044]图4是图示根据一个实施例的用于计算局部构建校验和的步骤的流程图。
[0045]图5是图示根据一个实施例的用于计算全局构建校验和的步骤的流程图。
[0046]图6图示根据一个实施例的file_info数组。
[0047]图7是图示构建服务器的一个示例实施例的框图。
【具体实施方式】
[0048]以下具体描述参照附图。在不同附图中的相同标号标识相同或者相似要素。以下具体描述也未限制讨论的概念。取而代之,这里讨论的概念的范围由所附权利要求及其等效含义限定。
[0049]概述
[0050]在用户(例如计算机程序员)想要从编程代码创建可执行代码时,他们在构建服务器计算系统上发起构建过程,该构建过程创建用于编译编程代码的计划(即编译策略)。构建服务器计算系统可以是可以执行构建过程的任何计算系统。在构建过程期间,构建模块可以处理配置文件以便确定编译策略。初始地处理的配置文件可以引用其它配置文件。在一些实施例中,在进行引用的配置文件之前处理引用的配置文件。按照串行顺序处理配置文件中的一些配置文件,而可以并行处理其它配置文件。构建服务器使用配置文件的内容来确定编译策略。在一些情况下,编译策略并不改变自先秦的计算策略。例如在一些情况下,配置文件中的依赖关系可以尚未改变,因此编译策略未改变。为了节省时间和减少计算资源的浪费,如果可能则应当重用编译策略。
[0051]为了检测是否可以重用编译策略,引入符号表示“全局构建校验和”。直观地,这是如下值,该值捕获构建输入的状态及其依赖关系。在这一个值未改变时,重用先前编译策略是安全的。如果这一个值改变,则重用先前编译策略柄部安全。通过比较为当前全局构建而计算的全局构建校验和与用于先前全局构建的先前全局构建校验和,构建服务器可以确定重用编译策略是可能的。
[0052]“校验和”是将算法用于任何数据而计算的值。如果数据改变,则校验和的值对于后续编译而言改变。这样的数据可以例如是代表配置文件的数据。在一些实施例中,用来计算校验和的算法是MD5算法。本发明的实施例不限于使用MD5算法。其它算法也可以用于计算校验和。如果两个配置文件的校验和不同,则两个配置文件的内容不同。另外,由于可以为任何数据计算校验和,所以也可以为配置文件校验和的汇集计算校验和。
[0053]在本发明的一个实施例中,为局部构建校验和集合确定全局构建校验和。如果用于更晚构建的全局构建校验和与用于更早构建的全局构建校验和不同,则更晚构建的编译策略可能必须与更早构建的编译策略不同。由于全局构建校验和并入局部构建的校验和,所以全局构建校验和反映局部构建中发生的任何改变。因此,有可能使用局部构建校验和来检测局部构建的依赖关系的改变,并且也有可能使用全局构建校验和来检测改变。例如在一个实施例中,如果删除文件并且使用与文件相同的名称来创建目录,则应当重新计算编译策略(也称为构建策略)。在这样的实施例中,局部构建校验和由于从文件到目录的改变而应当在计算时不同。
[0054]在一些实施例中,即使更早构建和更晚构建具有不同全局构建校验和,仍然可以在用于更晚构建的编译策略中重用为更早构建计算的编译策略的部分。可以检查校验和(例如局部构建校验和)以便确定可以重用更早构建的哪些部分。可以重用具有相同第一局部构建校验和和相同第二局部构建校验和的、第一构建的部分和第二构建的部分。因此,即使第一全局校验和和第二全局校验和不同,仍然可以重用第一编译策略的部分。
[0055]在一个实施例中,基于在配置文件的“传递闭包”中的配置文件{b_l,-b_n}计算可以用于计算全局构建校验和的局部构建校验和集合。“集合”是事物汇集。可以理解这里使用的符号表示13_1为第一个b( %_1”)、第二个13( %_2”)、第11个13( “b_n”)等。在形式上,有向图G= (V, E)——V是顶点集,并且E是边集——的传递闭包是图G+= (V, E+),从而对于V中的所有V、w,当且仅当在G中有从V到w的非空路径时,在E+中有边(V,w)。传递闭包包括在有向图中从顶点可达的每个顶点和边。
[0056]“传递闭包”术语的传递方面对于一对节点X和Y基本上意味着如果在图G中有从X到Y的有向边、并且如果有一对节点Y和Z而且如果在图形G中有从Y到Z的有向边,则在图形G+中也有从X到Z的有向边。
[0057]通过描述顶点汇集来最好地理解“闭包”方面。从包含单个顶点R的集合开始,然后从图收集满足X = R的所有边(X,Y),这给予也向原有集合添加的附加顶点((Χ,y)对的Y)。然后保持对于集合的所有元素重复这一过程直至在图中无要添加的更多边,在这一点已经达到闭包。已经基本上连接图中的可以沿着图中的现有边从原有顶点R到达的每个顶点。
[0058]例如这里有在美国内的城市之间的一个航班集合:{(西雅图,芝加哥),(芝加哥,纽约)}。这里有用于相同城市的示例传递闭包:{(西雅图,芝加哥),(芝加哥,纽约),(西雅图,纽约)}。(西雅图,纽约)是传递闭包的集合的一部分,因为(西雅图,芝加哥)和(芝加哥,纽约)在原有集合中存在。在配置文件方面,如果构建A依赖于构建B、即(Α,Β),并且构建B依赖于构建C、即(B,C),则(A,C)也是传递闭包的一部分。
[0059]通过使用配置文件的传递闭包,构建模块可以确定是否已经有对在配置文件之间的依赖关系中的任何依赖关系的改变。根据本发明的一个实施例,构建模块114可以确定是否已经有对向配置文件的输入中的任何输入的改变或者是否已经改变依赖关系,从而应当重新计算编译策略。
[0060]由于构建模块可以确定是否已经有对配置文件、包括在配置文件之间的依赖关系的任何改变,所以构建模块可以在没有将影响编译策略的有效性的改变时略过创建编译策略的步骤。在无需改变编译策略时,不再延迟软件工程师等待编译策略的重新计算。可以跨越不同程序员重用构建策略。重用先前创建的编译策略尤其在其中频繁地执行许多构建的大型公司中节省大量计算时间和开支。
[0061]图1是图示根据一个实施例的配置文件的示例依赖关系的框图。如图1中所示,配置文件(CF) 102引用并且依赖于CF104和106。CF 106依赖于CF108。在一个实施例中,在处理CF106之前处理CF108。可以在处理CF102之前处理CF104、106和108。配置文件声明软件模块的依赖关系。配置文件中的每个配置文件可以由构建模块(BM)处理。对于引用其它配置文件并且依赖于其它配置文件的这些配置文件,构建模块也可以加载其它配置文件。
[0062]构建模块可以是执行软件以执行构建过程的服务器。如图1中所示,CF102可以由BMl 14处理。CF104可以由BM116处理。CF106和CF108可以由BM120处理。在一些实施例中,可以实施分离构建模块中的一个或者多个构建模块为单个构建模块。在一些实施例中,可以实施所有分离构建模块为单个构建模块。例如BM114也可以是为所有配置文件执行构建过程的单个构建模块。为了描述简化,描述执行这里描述的动作的一个或者多个构建模块为由BMl 14执行,但是在不同实施例中,任何数目或者组合的构建模块、比如BMl 14与BMl 16和BM120结合可以执行这里描述的过程。
[0063]构造编译策略
[0064]图2是图示根据一个实施例的用于构造编译策略的步骤的流程图。
[0065]在步骤202中,构建模块114加载用于编译目标的配置文件。构建模块114加载初始配置文件集合。这些配置文件是顶级配置文件,并且配置文件中的一些配置文件可以依赖于其它配置文件。例如构建模块114可以加载图1的配置文件CF102。
[0066]在步骤204中,构建模块114加载用于所有引用的目标的配置文件。构建模块114也加载初始地加载的配置文件集合引用的其它配置文件。构建模块114检查初始地加载的配置文件集合的内容以便确定用于加载的其它配置文件。例如构建模块114(或者在一些实施例中构建模块120)可以加载CF104和CF106,因为这些配置文件被CF102引用。
[0067]在步骤206中,构建模块114重复加载配置文件直至编译目标的传递闭包被加载。例如构建模块114 (或者在一些实施例中构建模块120)可以基于来自CF106的依赖关系链接加载CF108。在一些实施例中,为了加载传递闭包,如果配置文件A引用配置文件B并且配置文件B也引用配置文件C,则基于传递闭包中的在配置文件A与配置文件C之间的连接来加载配置文件C。也可以基于在配置文件A与配置文件B之间的连接来加载配置文件C。构建模块114加载配置文件直至在任何其它配置文件中引用的所有配置文件被加载。以这一方式,未从加载过程遗漏和忽略依赖关系。可以使用任何常规算法来计算传递闭包。可以基于配置文件的依赖关系计算传递闭包。可以通过检查配置文件来确定依赖关系。一旦已经加载所有配置文件并且在也已经检查所有依赖关系时,则对编译目标的传递闭包的加载完成。
[0068]在步骤208中,构建模块114计算编译策略。编译策略是用于编译源代码、链接对象文件的步骤和为了完成编译而需要的其它步骤的计划。可以并行执行步骤中的一些步骤、比如编译某个源代码。在一些情况下,如果两个软件模块相互独立,则可以独立编译两个软件模块。其它步骤仅可以被依次执行。在一些实施例中,如果一个软件模块的编译依靠于另一软件模块的编译的完成,则编译步骤仅可以被依次执行。编译策略可以指定哪些输入和输出文件必须在每级可用。编译策略可以指定可以并行执行编译的哪些级而必须依次执行编译的哪些级。编译策略也可以指定将执行的源代码编译、链接和其它步骤。编译策略也可以在地理上调度将在构建机器云中执行的工作和执行的动作。
[0069]确定是否重用先前计算的编译策略
[0070]图3是图示根据一个实施例的用于确定是否重用先前计算的编译策略的步骤的流程图。
[0071]在步骤302中,构建模块114加载用于编译目标的配置文件。这一步骤等效于图2的步骤202。构建模块114加载初始配置文件集合。这些配置文件是顶级配置文件并且配置文件中的一些配置文件可以依赖于其它配置文件。例如构建模块114可以加载BF102。
[0072]在步骤304中,构建模块114加载用于所有引用的目标的配置文件。该步骤等效于图2的步骤204。构建模块114也加载初始地加载的配置文件集合引用的其它配置文件。构建模块114检查初始地加载的配置文件集合的内容以便确定用于加载的其它配置文件。例如构建模块114可以加载CF104和CF106,因为这些配置文件在CF102中被引用。
[0073]在步骤306中,构建模块114重复加载配置文件直至加载编译目标的传递闭包。这一步骤等效于图2的步骤206。构建模块114加载配置文件直至加载在任何其它配置文件中引用的所有配置文件。例如构建模块114可以加载CF108。
[0074]在步骤308中,对于在传递闭包中的每个配置文件,构建模块114计算局部构建校验和。为了执行步骤308,构建模块114执行如图4中描述的步骤。构建模块114计算将在计算全局构建校验和时使用的局部构建校验和。
[0075]在步骤310中,构建模块114使用局部构建校验和来计算全局构建校验和。为了执行步骤310,构建模块114执行如图5中描述的步骤。在图5中,构建模块114对局部构建校验和进行排序并且使用排序的局部构建校验和来计算全局构建校验和。比较全局构建校验和与先前全局构建校验和以便确定是否需要新编译策略。如果全局构建校验和已经改变,则应当重新计算新编译策略。
[0076]计算局部构建校验和
[0077]图4是图示根据一个实施例的用于计算局部构建校验和的步骤的流程图。可以为在传递闭包中的所有配置文件计算局部构建校验和以便计算全局构建校验和。
[0078]在步骤402中,构建模块114确定在配置文件中声明的输入列表。配置文件可以引用其它配置文件或者目录。对于m个引用,可以表示在配置文件中声明的引用的配置文件或者目录为{in_l,…,in_m}。对于CF102的示例,in_l可以是/dir3/fire2, in_2可以是/dirl/firel,并且in_3可以是/dir2。在一些实施例中,构建模块114可以通过检查配置文件的内容来确定引用的配置文件或者目录的列表。在一些实施例中,构建模块114可以在构建过程期间检查构建文件以确定哪些文件受到访问,以便确定引用的文件或者目录的列表。
[0079]在步骤404中,构建模块114确定用于配置文件的文件系统信息的列表。在一个实施例中,在数组file_info中存储系统信息的列表。例如file_info(l)引用file_info数组的第一槽(slot)并且可以存储/dir3/file2, file_info (2)可以存储/dirl/firel,并且file_info(3)可以存储/dir2。在一些实施例中,每个槽保持类型结构的内容。类型结构可以例如包括代表路径名的串类型。类型结构也可以包括整数或者布尔类型或者某个其它类型,该类型指示文件信息系统槽是否存储用于文件或者目录的数据。在一些实施例中,file_info O槽可以存储用于文件的所有信息,这些文件可以触发重新计算构建步骤。
[0080]在一个实施例中,数组file_info如图6中描绘的那样具有m个槽。在file_info中的槽可以各自称为 file_info (I)、file_info (2)、file_info (3)、…file_info (k)、…file_info(m)。k代表在数组的中间的某个槽。构建模块114可以检查配置文件的内容以便填充数组 file_infoo
[0081]File_info的槽中的每个槽可以存储关于配置文件的输入的信息。存储的信息可以是包括路径和数据的文件系统信息,该数据指示输入是为目录还是文件。对于每个输入in_k,构建模块114可以在用于in_k的数组位置向数组file_info指派以下信息:1)通向文件的路径和2)指示输入是为文件还是目录的数据。例如在一个类型的计算系统中,路径可以是可以向 file_info (I)指派的"C:\root\builds\configuration filel02.cf〃。作为另一示例,在另一类型的计算系统中,路径可以是〃/r00t/U/j0el23/配置文件102.cf〃。路径格式的其它变化存在,并且本发明的实施例不限于特定路径格式。
[0082]在一个实施例中,可以在变量中存储指示输入是为文件还是目录的数据。这样的变量可以是布尔型变量、整型变量或者任何其它类型的变量。例如file_info(l)可以具有指示文件的值。如果路径是目录,即"C:\root\builds\buildl02"或者"/root/builds/buildl02〃,则file_info (I)也可以存储指示目录的值。例如file_info (I)可以存储〃/dir3/file2〃——它是通向文件的路径——并且也可以存储指示file_info(l)存储文件的数据。
[0083]在步骤406中,构建模块114可选地对文件系统信息列表排序。在一个实施例中,构建模块114对于配置文件c_i将以下各项一起排序:
[0084]I)用于所有输入{in_l,..., in_m}的 file_info (in_k)。换而言之,file_info 的槽在每个槽中存储关于配置文件c_i的输入的数据。
[0085] 2) checksum(c_i)。换而言之,用于配置文件c_i的校验和值,以及[0086]3)file_info(c_i)。换而言之,配置文件c_i的file_info,它可以包括配置文件c_i的路径和指示配置文件c_i是文件的数据。在一些实施例中,可以使用任何创建规范顺序的算法来执行排序。可以使用确定性排序技术来实现规范排序。即使输入顺序改变,如果排序返回来自相同输入的相同结果,则排序仍然是确定性的。例如给出以下file_info槽值:
[0087]file_info (I) /Vroot/u/ joe 123/configuration file 110.cf〃
[0088]file_info (2) /Vroot/u/joel23/configuration filel44.cf"
[0089]file_info (3) /Vroot/u/joel23/configuration filel22.cf"
[0090]file_info (4) /Vroot/u/ joe 123/configuration filelll.cf"
[0091]局部配置文件的file_info 数据:〃/root/u/joel23/configuration file34.cf"
[0092]局部配置文件的校验和checksum(c_i):234233
[0093]在执行排序之后,在该例中的排序的结果可以是:{234233,〃/root/u/joel23/configuration file34.cf〃、〃/root/u/joel23/configuration filel10.cf〃、〃/root/u/joel23/configuration filelll.cf〃、^/root/u/joel23/configuration filel22.cf〃、〃/root/u/joel23/configuration filel44.cf〃}。
[0094]在步骤408中,构建模块114在排序的文件系统信息列表之上计算校验和。用于计算局部构建校验和的排序的数据包括具有排序的值的filejnfo、配置文件c_i的file_info和在配置文件的内容之上的校 验和。构建模块114可以使用排序的数据结果作为向计算校验和的算法中的输入。在一些实施例中,构建模块114使用MD5算法以计算校验和。例如向局部构建校验和计算的输入可以包括/dir 1/file 1、/dir2、/dir3/file2、/package I/configuration filel和校验和(通常为数值)。校验和可以是数、比如2342342,并且如果向校验和计算的输入不同,则校验和不同。
[0095]在一些实施例中,构建模块114计算独立于顺序的校验和而未排序。例如构建模块114可以使用XOR函数以计算校验和。在这样的实施例中,构建模块114验证在列表中无用于计算校验和的重复条目
[0096]计算全局构建校验和
[0097]图5是图示根据一个实施例的用于计算全局构建校验和的步骤的流程图。构建模块114可以执行图5的步骤以便确定是否可以重用先前编译策略。如果不能重用先前编译策略,则应当计算新编译策略。
[0098]在步骤502中,构建模块114取回局部构建校验和列表。为了计算全局构建校验和,构建模块114取回已经计算的局部构建校验和。局部构建校验和可以来自传递闭包中的配置文件集合{b_l,...,b_n}。在一个实施例中,每个局部构建校验和可以是已经为特定配置文件计算的数值。例如为BF104、BF102和BF106计算的局部构建校验和可以分别是980456,234231 和 343243。
[0099]在步骤504中,构建模块114对局部构建校验和列表进行排序。在一些实施例中,构建模块114按照封装名称(也称为模块名称或者目标名称)排序。按照封装名称对局部构建校验和的排序可以例如产生排序为234231、980456和343243的局部构建校验和列表。
[0100]在步骤506中,构建模块114在排序的数据之上计算校验和。构建模块114可以处理排序的局部构建校验和以计算全局校验和。如果排序算法是确定性的,则只要配置文件校验和未改变,向全局校验和计算的输入就相同。例如使用排序为234231、343243和980456的排序的局部构建校验和列表,计算的全局构建校验和可以是108934。
[0101]在步骤508中,构建模块114存储计算的校验和为全局校验和。构建模块114可以存储全局校验和。构建模块114然后可以比较全局校验和与计算的先前全局校验和以便确定是否创建新编译策略。如果全局校验和与先前全局校验和相同,则可以重用编译策略。如果全局校验和与先前全局校验和不同,则重新计算编译策略。例如,如果先前全局构建校验和是546675并且当前计算的全局构建校验和是108934,则应当重新计算编译计划,因为改变的校验和指示先前编译计划可能不再有效,例如因为一些依赖关系已经改变或者输入的性质已经改变。
[0102]FILE_INF0 数组
[0103]图6图示根据一个实施例的file_info数组。如图6中所示,file_info600具有m个槽,槽中的每个槽可以称为file_info(k),其中“k”引用第k个槽。例如file_info⑴引用file_info 数组的第一槽,file_info (2)引用 file_info 数组的第二槽,等等。File_info(m)引用file_info数组的最后槽。
[0104]文件系统服务
[0105]在一些实施例中,可以向文件系统添加局部构建校验和和全局构建校验和的计算作为服务。这样的文件系统可以添加用于计算和监视这一服务的很少开销。在这样的实施例中,向文件系统轮询构建目标的全局构建校验和在计算上成本低并且可以在计算编译策略之前被执行。
[0106]文件系统可以执行图4和图5的步骤。文件系统可以在所有改变发生时意识到改变,并且可以当时重新计算任何数据。然后在更晚时间,可以从文件系统查询而不是重新计算数据。文件系统可以比在用户空间中运行的任何应用更快和成本更低地计算校验和。另夕卜,可以高速缓存、重用编译策略,并且可以为并行工作的用户加速编译。
[0107]示例实施例
[0108]图7是图示构建服务器的一个示例实施例的框图。在很基本配置701中,计算设备700通常包括一个或者多个处理器710和系统存储器720。存储器总线730可以用于在处理器710与系统存储器720之间通信。
[0109]根据希望的配置,处理器710可以是任何类型、包括但不限于微处理器(μ P)、微控制器(μ P)、数字信号处理器(DSP)或者其任何组合。处理器710可以包括一个或者多个高速缓存级、比如一级高速缓存711和二级高速缓存712、处理器核713和寄存器714。处理器核713可以包括算术逻辑单元(ALU)、浮点单元(FPU)、数字信号处理核(DSP核)或者其任何组合。存储器控制器715也可以与处理器710使用,或者在一些实现方式中,存储器控制器715可以是处理器710的内部部分。
[0110]根据希望的配置,系统存储器720可以是任何类型、包括但不限于易失性存储器(比如RAM)、非易失性存储器(比如ROM、闪存等)或者其任何组合。系统存储器720通常包括操作系统721、一个或者多个应用722和程序数据724。应用722包括多意图局部目标通报处理算法723。如以下将进一步描述的那样,程序数据724包括多意图局部目标通报数据725。在一些实施例中,应用722可以被布置为在操作系统721上与程序数据724操作。这一描述的基本配置在图7中由在虚线701内的那些部件图示。[0111]计算设备700可以具有附加特征或者功能以及用于有助于在基本配置701与任何需要的设备和接口之间的通信的附加接口。例如总线/接口控制器740可以用来有助于经由存储接口总线741在基本配置701与一个或者多个数据存储设备750之间的通信。数据存储设备750可以是可拆卸存储设备751、非可拆卸存储设备752或者其组合。可移除存储装置和非可移除存储装置的示例,聊举数例包括磁盘设备、比如软盘驱动和硬盘驱动(HDD)、光盘驱动、比如紧致盘(CD)驱动或者数字万用盘(DVD)驱动、固态驱动(SSD)和待驱动。示例计算机存储介质可以包括在用存储信息、比如计算机可读指令、数据结构、程序模块或者其它数据的任何方法或者技术中实施的易失性和非易失性、可拆卸和非可拆卸介质。
[0112]系统存储器720、可拆卸存储装置751和非可拆卸存储装置752都是计算机存储介质的示例。计算机存储介质包括但不限于RAM、ROM、EEPR0M、闪存或者其它存储器技术、CD-ROM、数字万用盘(DVD)或者其它光学存储装置、磁盒、磁带、磁盘存储装置或者其它磁存储设备或者可以用来存储希望的信息并且可以由计算设备700访问的任何其它介质。任何这样的计算机存储介质可以是设备700的一部分。
[0113]计算设备700也可以包括用于有助于经由总线/接口控制器740从各种接口设备(例如输出接口、外围接口和通信接口)到基本配置701的通信的接口总线742。示例输出设备760包括可以被配置为经由一个或者多个Α/V端口 763向各种外部设备、比如显示器或者扬声器通信的图形处理单元761和音频处理单元762。示例外围接口 770包括可以被配置为经由一个或者多个I/O端口 773与外部设备、比如输入设备(例如键盘、鼠标、笔、语音输入设备、触摸输入设备等)或者其它外围设备(例如打印机、扫描仪等)通信的串行接口控制器771或者并行接口控制器772。示例通信设备780包括尅被布置为有助于经由一个或者多个通信端口 782通过网络通信与一个或者多个其它计算设备790的通信的网络控制器781。通信连接是通信介质的一个示例。通信介质可以通常由计算机可读指令、数据结构、程序模块或者在调制的数据信号、比如载波或者其它传送机制中的其它数据体现并且包括任何信息递送介质。“调制的数据信号”可以是如下信号,该信号让它的特性中的一个或者多个特性以对信号中的信息进行编码这样的方式来设置或者改变。举例而言而非限制,通信介质可以包括有线介质、比如有线网络或者直接接线连接以及无线介质、t匕如声学、射频(RF)、红外线(IR)和其它无线介质。如这里所用术语计算机可读介质可以包括存储介质和通信介质二者。
[0114]可以实施计算设备700为小型规格的便携(或者移动)电子设备、比如蜂窝电话、个人数据助理(PDA)、个人媒体播放器设备、无线web监视设备、个人头戴式受话器设备、专用设备或者包括以上功能中的任何功能的混合设备的部分。也可以实施计算设备700为包括膝上型计算机和非膝上型计算机配置的个人计算机。
[0115]在系统的方面的硬件与软件实现方式方面留有很少区分;硬件或者软件的使用一般(但是并非总是,因为在某些情境中,在硬件与软件之间的选择可以变得有意义)是代表成本比对效率折衷的设计选择。有各种手段,通过这些手段实现这里描述的过程和/或系统和/或其它技术(例如硬件、软件和/或固件),并且优选手段将随着在其中部署过程和/或系统和/或其它技术的情境变化。例如如果实施者确定速度和准确性至关重要,则实施者可以选择主要为硬件和/或固件的手段;如果灵活性至关重要,则实施者可以选择主要为软件的实现方式;或者另外同样备选地,实施者可以选择硬件、软件和/或固件的某个组
口 O
[0116]前文具体描述已经经由使用框图、流程图和/或示例阐述设备和/或过程的各种实施例。在这样的框图、流程图和/或示例包含一个或者多个功能和/或操作的范围内,本领域技术人员将理解在这样的框图、流程图或者示例内的每个功能和/或操作可以个别地和/或共同地由广泛硬件、软件、固件或者实质上其任何组合实施。在一个实施例中,可以经由专用集成电路(ASIC)、现场可编程门阵列(FPGA)、数字信号处理器(DSP)或者其它集成形式实施这里描述的主题内容的若干部分。然而本领域技术人员将认识到这里公开的实施例的一些方面全部或者部分可以被等效地实施于集成电路中、实施为在一个或者多个计算机上运行的一个或者多个计算机程序(例如为在一个或者多个计算机系统上运行的一个或者多个程序)、为在一个或者多个处理器上运行的一个或者多个程序(例如为在一个或者多个微处理器上运行的一个或者多个程序)、为固件或者为实质上其任何组合,并且设计电路装置和/或编写用于软件和/或固件的代码按照本公开内容将合理地在本领域技术人员的技能内。此外,本领域技术人员将认识这里描述的主题内容的机制能够以多种形式被分布为程序产品并且这里描述的主题内容的示例实施例无论用来实际实现分布的特定信号承载介质类型如何都适用。信号承载介质的示例包括但不限于以下各项:可记录型介质、比如软盘、硬盘驱动、紧致盘(⑶)、数字视频盘(DVD)、数字带、计算机存储器等;以及传输型介质、比如数字和/或模拟通信介质(例如光纤线缆、波导、有线通信链路、无线通信链路等)。
[0117]本领域技术人员将认识到在本领域内普遍以这里阐述的方式描述设备和/或过程、随后使用工程实践以将这样描述的设备和/或过程集成到数据处理系统中。也就是说,这里描述的设备和/或过程的至少部分可以经由合理数量的实验被集成到数据处理系统中。本领域技术人员将认识典型数据处理系统一般包括系统单元壳、视频显示设备、存储器、比如易失性和非易失性存储器、处理器、比如微处理器和数字信号处理器、计算实体、t匕如操作系统、驱动器、图形用户界面以及应用程序、一个或者多个交互设备、比如触板或者触屏和/或包括返回回路和控制马达(例如用于感测位置和/或速率的反馈;用于移动和/或调整部件和/或数量的控制马达)的控制系统中的一项或者多项。典型数据处理系统可以利用任何商业上可用部件、比如通常在数据计算/通信和/或网络计算/通信系统中找到的部件来实施。
[0118]关于这里对基本上任何复数和/或单数术语的使用,本领域技术人员可以如对于上下文和/或应用适合的那样从复数翻译成单数和/或从单数翻译成复数。这里为了清楚而明确地阐述各种单数/复数排列。
[0119]在本公开内容中示出和描述示例实施例。将理解实施例能够在各种其它组合和环境中使用并且能够载入这里表达的发明概念的范围内改变或者修改。一些这样的变化可以包括使用非瞬态计算机可读介质上存储的程序以使计算机和/或计算机系统能够执行以上讨论的方法变化的部分或者全部。这样的变化不会视为脱离本发明的精神实质和范围,并且如将为本领域技术人员所清楚的那样,所有这样的修改旨在于被包含在所附权利要求的范围内。
【权利要求】
1.一种由数据处理装置执行的方法,包括: 创建用于第一构建的第一编译策略; 使用所述第一编译策略来执行所述第一构建; 计算用于所述第一构建的第一校验和; 存储所述第一编译策略和所述第一校验和; 计算用于第二构建的第二校验和; 确定所述第二校验和是否等于所述第一校验和; 响应于确定所述第二校验和不等于所述第一校验和,创建第二编译策略; 存储所述第二编译策略和所述第二校验和,并且使用所述第二编译策略来执行所述第二构建;以及 响应于确定所述第二校验和等于所述第一校验和,取回所述第一编译策略、并且使用所述第一编译策略来执行所述第二构建。
2.根据权利要求1所述的方法,其中所述第一校验和是全局构建校验和;并且所述全局构建校验和通过使用一个或者多个局部构建校验和来计算。
3.根据权利要求1所述的方法,还包括确定为所述第一构建计算的局部构建校验和对于所述第二构建尚未改变,并且在所述第二编译策略中重新使用所述第一编译策略的与所述局部构建校验和关联的部分。
4.根据权利要求1所述的方法,其中文件系统信息按照路径名被排序以便计算局部构建校验和。
5.根据权利要求4所述的方法,其中所述文件系统信息包括校验和。
6.根据权利要求1所述的方法,其中使用所述第一编译策略来执行所述第一构建还包括检查配置文件的内容以确定依赖关系;并且为所述配置文件的每个依赖关系计算局部构建校验和。
7.根据权利要求1所述的方法,还包括基于所述配置文件的依赖关系来计算传递闭包。
8.根据权利要求7所述的方法,其中为计算的所述传递闭包的每个配置文件计算局部构建校验和。
9.根据权利要求1所述的方法,其中所述校验和通过使用XOR函数来计算。
10.根据权利要求1所述的方法,其中计算所述第一校验和还包括执行确定性排序;用所述确定性排序来计算局部构建校验和;并且使用所述局部构建校验和来计算所述第一校验和,所述第一校验和是全局构建校验和。
11.一种系统,包括: 一个或者多个计算机; 耦合到所述一个或者多个计算机的计算机可读介质,具有在其上存储的指令,所述指令在由所述一个或者多个计算机执行时使所述一个或者多个计算机执行操作,所述操作包括: 创建用于第一构建的第一编译策略; 使用所述第一编译策略来执行所述第一构建; 计算用于所述第一构建的第一校验和;存储所述第一编译策略和所述第一校验和; 计算用于第二构建的第二校验和; 确定所述第二校验和是否等于所述第一校验和; 响应于确定所述第二校验和不等于所述第一校验和,创建第二编译策略; 存储所述第二编译策略和所述第二校验和,并且使用所述第二编译策略来执行所述第二构建;以及 响应于确定所述第二校验和等于所述第一校验和,取回所述第一编译策略、并且使用所述第一编译策略来执行所述第二构建。
12.根据权利要求11所述的系统,其中所述第一校验和是全局构建校验和;并且所述全局构建校验和通过使用一个或者多个局部构建校验和来计算。
13.根据权利要求11所述的系统,所述指令还包括在被执行时操作以使所述计算机执行进一步操作的指令,所述进一步操作包括: 确定为所述第一构建计算的局部构建校验和对于所述第二构建尚未改变,并且在所述第二编译策略中重新使用所述第一编译策略的与所述局部构建校验和关联的部分。
14.根据权利要求11所述的系统,其中文件系统信息按照路径名被排序以便计算局部构建校验和。
15.根据权利要求14所述的系统,其中所述文件系统信息包括校验和。
16.根据权利要求11所述的系统,其中使用所述第一编译策略来执行所述第一构建还包括检查配置文件的内容以确定依赖关系;并且为所述配置文件的每个依赖关系计算局部构建校验和。
17.根据权利要求11所述的系统,所述指令还包括在被执行时操作以使所述计算机执行进一步操作的指令,所述进一步操作包括: 基于所述配置文件的依赖关系来计算传递闭包。
18.根据权利要求17所述的系统,其中为计算的所述传递闭包的每个配置文件计算局部构建校验和。
19.根据权利要求11所述的系统,其中所述校验和通过使用XOR函数来计算。
20.根据权利要求11所述的系统,其中计算所述第一校验和还包括执行确定性排序;用所述确定性排序来计算局部构建校验和;并且使用所述局部构建校验和来计算所述第一校验和,所述第一校验和是全局构建校验和。
【文档编号】G06F9/455GK103999050SQ201280062431
【公开日】2014年8月20日 申请日期:2012年10月26日 优先权日:2011年10月28日
【发明者】M·弗尔斯特, U·亚当斯, S·舍青格, C·K·肯珀 申请人:谷歌公司