IP Library Granted Patent US 9,069,644
Granted Patent B2
US 9,069,644 · App. 12/422,022 · Granted Jun 30, 2015

Architecture and method for versioning registry entries in a distributed program build

View Patent ↗
Loading inventors, assignments & file history…
Monitor This Case
Get email alerts when status or documents change.
Order Certified Copies
Most orders are placed with the USPTO same day — all within 24 business hours.
Order via The Patent Place →
Pre-filled with this patent's details
Quick Facts
Patent No.
US 9,069,644
App. No.
12/422,022
Granted
Jun 30, 2015
Kind
B2
Abstract

A method for executing program builds. According to one embodiment of the invention, jobs are scheduled for a program build based on dependencies between the jobs, where at least some of those jobs include one or more registry operations. Usage information is collected from each of those jobs responsive to those jobs being executed. The usage information includes registry usage information from those jobs that include one or more registry operations and includes the results of those registry operations. The registry usage information is analyzed to determine whether the execution of any of those jobs resulted in a conflict. The analyzing includes, for each job including a registry operation, comparing a version of a registry entry used by that job in the program build with a version of a registry entry that the job would have used in a sequential program build. Results of jobs that generated a conflict are invalidated, and the invalidated job is rebuilt using the correct registry entry versions.

Claims (58)

1. A computer-implemented method for executing a program build, comprising:

scheduling jobs to be executed for the program build based on dependencies between the jobs, wherein at least some of the jobs include one or more registry operations;

collecting usage information from each of the jobs responsive to those jobs being executed, wherein the usage information collected includes registry usage information, the registry usage information being received from those jobs that include the one or more registry operations and including results of those registry operations;

analyzing the registry usage information to determine whether execution of any of those jobs including the one or more registry operations resulted in a conflict, wherein the analyzing includes, for each job including one or more registry operations, comparing a version of a registry entry used by that job in the program build with a version of a registry entry that the job would have used in a sequential program build;

invalidating the results of a particular job upon determining that the particular job generated a conflict;

rebuilding the invalidated job using the correct registry entry version;

storing a plurality of versions of registry entries used at different points in time during the program build, wherein each of those versions includes a key object version which itself includes one or more sub key object versions and one or more value object versions;

discarding the results of the job that generated the conflict;

identifying the correct registry entry versions for the job; and

rebuilding the job using the correct registry entry versions.

2. The method of claim 1 , wherein the jobs are scheduled to different ones of a plurality of nodes to be executed.

3. The method of claim 1 , further comprising:

virtualizing at least a portion of a registry; and

upon determining that the path of a particular registry operation is included in the virtualized portion of the registry, redirecting that registry operation to the virtualized registry.

4. The method of claim 1 , wherein scheduling the jobs comprises:

analyzing file dependency information contained in a Makefile; and

scheduling jobs that are independent of one another to execute in parallel.

5. The computer-implemented method of claim 1 , wherein the usage information further includes file usage information indicating operations performed on files used by jobs in the program build, the method further comprising:

analyzing the file usage information to determine whether any of the executed jobs resulted in a conflict, wherein analyzing the file usage information includes comparing versions of files used during the build with versions of files that would have been used in a sequential program build.

6. The method of claim 5 , further comprising:

for each executed job that included one or more registry operations, detecting a conflict based on the comparison between the one or more registry versions used by that job and the one or more registry versions that the job would have used in a sequential program build.

7. The method of claim 6 , wherein a conflict is not declared for a particular job including a read operation upon determining that content of the version read by that job in the program build is equivalent to content of the version that the job would have read in a sequential program build.

8. The method of claim 6 , wherein a conflict is not declared for a particular job including a conditional set registry operation upon determining that content of the version used by that job in the program build resulted in a set operation and content of the version that job would have used in a sequential program build also would have resulted in a set operation.

9. A program building machine having at least one processor, comprising:

a job scheduler module to schedule jobs for a program build based on dependencies between the jobs, wherein at least some of the jobs include one or more registry operations;

a usage tracking module to collect usage information from each of the jobs responsive to those jobs being executed, wherein the usage information collected includes registry usage information, the registry usage information being received from those jobs that include the one or more registry operations and including results of those registry operations;

a conflict detection module to analyze the registry usage information to determine whether execution of any of those jobs including the one or more registry operations resulted in a conflict, wherein for each job including one or more registry operations, the conflict detection module to compare a version of a registry entry used by that job in the program build with a version of a registry entry that the job would have used in a sequential program build;

a conflict resolution module to discard the results of a particular job upon a determination that the particular job generated a conflict, to reschedule that job using the correct registry entry version, and to identify the correct registry entry versions for the particular job via the versioning file system;

a versioning file system to store a plurality of versions of registry entries used at different points in time during the program build, wherein each of those versions includes a key object version which itself includes one or more sub key object versions and one or more value object versions.

10. The program building machine of claim 9 , wherein the job scheduler module is to schedule the jobs to different ones of a plurality of nodes.

11. The program building machine of claim 9 , wherein the job schedule module is to analyze file dependency information contained in a Makefile and is to schedule jobs that are independent of one another to execute in parallel.

12. The program building machine of claim 9 , wherein the usage information further includes file usage information indicating operations performed on files used by jobs in the program build, the conflict detection module further to:

analyze the file usage information to determine whether any of the executed jobs resulted in a conflict, wherein the conflict detection module is to compare versions of files used during the build with versions of files that would have been used in a sequential program build.

13. The program building machine of claim 12 , wherein the conflict detection module further is to, for each executed job that included one or more registry operations, detect a conflict based on the comparison between the one or more registry versions used by that job and the one or more registry versions that the job would have used in a sequential program build.

14. The program building machine of claim 13 , wherein the conflict detection module does not declare a conflict for a particular job that includes a read operation upon determining that content of the version read by that job in the program build is equivalent to content of the version that the job would have read in a sequential program build.

15. The program building machine of claim 13 , wherein the conflict detection module does not declare a conflict for a particular job that includes a conditional set registry operation upon determining that content of the version used by that job in the program build resulted in a set operation and content of the version that job would have used in a sequential program build also would have resulted in a set operation.

16. A non-transitory machine readable storage medium that provides instructions that, if executed by a machine, will cause the machine to perform operations for executing a program build, comprising

scheduling jobs to be executed for the program build based on dependencies between the jobs, wherein at least some of the jobs include one or more registry operations;

collecting usage information from each of the jobs responsive to those jobs being executed, wherein the usage information collected includes registry usage information, the registry usage information being received from those jobs that include the one or more registry operations and including results of those registry operations;

analyzing the registry usage information to determine whether execution of any of those jobs including the one or more registry operations resulted in a conflict, wherein the analyzing includes, for each job including one or more registry operations, comparing a version of a registry entry used by that job in the program build with a version of a registry entry that the job would have used in a sequential program build;

invalidating the results of a particular job upon determining that the particular job generated a conflict;

rebuilding the invalidated job using the correct registry entry version storing a plurality of versions of registry entries used at different points in time during the program build, wherein each of those versions includes a key object version which itself includes one or more sub key object versions and one or more value object versions;

discarding the results of the job that generated the conflict;

identifying the correct registry entry versions for the job; and

rebuilding the job using the correct registry entry versions.

17. The non-transitory machine readable storage medium of claim 16 , wherein the jobs are scheduled to different ones of a plurality of nodes to be executed.

18. The non-transitory machine readable storage medium of claim 16 , further comprising:

virtualizing at least a portion of a registry; and

upon determining that the path of a particular registry operation is included in the virtualized portion of the registry, redirecting that registry operation to the virtualized registry.

19. The non-transitory machine readable storage medium of claim 16 , wherein scheduling the jobs comprises:

analyzing file dependency information contained in a Makefile; and

scheduling jobs that are independent of one another to execute in parallel.

20. The non-transitory machine readable storage medium of claim 16 , wherein the usage information further includes file usage information indicating operations performed on files used by jobs in the program build, the method further comprising:

analyzing the file usage information to determine whether any of the executed jobs resulted in a conflict, wherein analyzing the file usage information includes comparing versions of files used during the build with versions of files that would have been used in a sequential program build.

21. The non-transitory machine readable storage medium of claim 20 , further comprising:

for each executed job that included one or more registry operations, detecting a conflict based on the comparison between the one or more registry versions used by that job and the one or more registry versions that the job would have used in a sequential program build.

22. The non-transitory machine readable storage medium of claim 21 , wherein a conflict is not declared for a particular job including a read operation upon determining that content of the version read by that job in the program build is equivalent to content of the version that the job would have read in a sequential program build.

23. The non-transitory machine readable storage medium of claim 21 , wherein a conflict is not declared for a particular job including a conditional set registry operation upon determining that content of the version used by that job in the program build resulted in a set operation and content of the version that job would have used in a sequential program build also would have resulted in a set operation.

Assignments (14)
RELEASE OF SECURITY INTEREST Recorded Mar 9, 2026
From: GOLDMAN SACHS PRIVATE MIDDLE MARKET CREDIT II LLC
To: CLOUDBEES, INC.
Reel/Frame 074010/0480 →
TERMINATION AND RELEASE OF SECOND INTELLECTUAL PROPERTY SECURITY AGREEMENT Recorded Nov 29, 2021
From: GOLUB CAPITAL LLC, AS AGENT
To: CLOUDBEES, INC.; ELECTRIC CLOUD, INC.
Reel/Frame 058252/0867 →
SECURITY INTEREST Recorded Nov 24, 2021
From: CLOUDBEES, INC.
To: GOLDMAN SACHS PRIVATE MIDDLE MARKET CREDIT II LLC
Reel/Frame 058207/0183 →
ASSIGNMENT OF ASSIGNOR'S INTEREST Recorded Jun 26, 2020
From: ELECTRIC CLOUD, INC.
To: CLOUDEBEES, INC.
Reel/Frame 053045/0442 →
ASSIGNMENT OF ASSIGNOR'S INTEREST Recorded Jun 1, 2020
From: ELECTRIC CLOUD, INC.
To: CLOUDBEES, INC.
Reel/Frame 052804/0275 →
SECOND INTELLECTUAL PROPERTY SECURITY AGREEMENT Recorded May 29, 2019
From: CLOUDBEES, INC.
To: GOLUB CAPITAL LLC, AS ADMINISTRATIVE AGENT
Reel/Frame 049314/0377 →
RELEASE OF SECURITY INTEREST Recorded Apr 12, 2019
From: WESTERN ALLIANCE BANK
To: ELECTRIC CLOUD, INC.
Reel/Frame 048870/0921 →
RELEASE OF SECURITY INTEREST Recorded Apr 12, 2019
From: CANADIAN IMPERIAL BANK OF COMMERCE
To: ELECTRIC CLOUD, INC.
Reel/Frame 048870/0890 →
ASSIGNMENT AND ASSUMPTION OF SECURITY INTERESTS Recorded Jan 9, 2018
From: WF FUND V LIMITED PARTNERSHIP, C/O/B/ AS WELLINGTON FINANCIAL LP AND WELLINGTON FINANCIAL FUND V
To: CANADIAN IMPERIAL BANK OF COMMERCE
Reel/Frame 045028/0880 →
SECURITY INTEREST Recorded Dec 30, 2016
From: ELECTRIC CLOUD, INC.
To: WF FUND V LIMITED PARTNERSHIP
Reel/Frame 040811/0173 →
RELEASE OF SECURITY INTEREST Recorded Dec 28, 2016
From: COMERICA BANK
To: ELECTRIC CLOUD, INC.
Reel/Frame 040787/0473 →
SECURITY INTEREST Recorded Dec 23, 2016
From: ELECTRIC CLOUD, INC.
To: WESTERN ALLIANCE BANK
Reel/Frame 040759/0644 →
SECURITY INTEREST Recorded Jul 5, 2016
From: ELECTRIC CLOUD, INC.
To: COMERICA BANK
Reel/Frame 039255/0292 →
ASSIGNMENT OF ASSIGNOR'S INTEREST Recorded Apr 13, 2009
From: MELSKI, JOHN ERIC; NGUYEN, HONGDUC
To: ELECTRIC CLOUD, INC.
Reel/Frame 022539/0641 →