James E. Blair a0ed933fa4 Track object versions in the Buildset object
This further reduces the number of ZK object reads during pipeline
refreshes by tracking when builds and frozen jobs are updated.

During the phases of a build where we know no updates can occur,
we already avoid refreshing the Build and FrozenJob objects.
But, for example, while a build is running we have to continually
refresh it to see if it has completed.

We can avoid this by recording expected version information in ZK
and only refresh those objects if we know our local copy is out
of date.

We can store the latest ZK object version of FrozenJob and Build
objects on the Buildset.  On pipeline refresh, we currently
always refresh the buildset object, which means that when we
prepare to refresh the FrozenJob or Build objects underneath a
Buildset, we will have information about the latest versions of
those objects in ZK and can compare to the versions we currently
have in memory to decide if we need to refresh them.  This should
reduce the number of reads in a pipeline refresh by about 50%.
But it will cause more writes, in that we will update the
Buildset object each time we modify one of its children.  This
may affect pipeline processing times but the impact should be
very small.

We will use version numbers (rather than transaction ids) because they
are predictable, and updating the buildset first with the predicted
next version before updating the child avoids issues caused by a crash
between those two steps.

Since it is typical for many objects to be created at once, we do
optimize the case where the objects are initially created and we
avoid making an update to the BuildSet in that case so that we
don't repeatedly write the buildset object.

Change-Id: I3824af6149bf27c41a8d895fc682236bd0d91f6b
2023-01-05 14:08:10 -08:00
2022-12-20 08:57:53 -08:00
2022-12-20 08:57:53 -08:00
2022-11-02 08:45:17 -07:00
2018-05-17 08:33:40 -07:00
2022-12-20 08:57:53 -08:00
2019-04-19 19:25:28 +00:00
2012-09-26 14:23:10 +00:00
2022-12-20 09:21:39 -08:00
2022-07-01 15:59:48 -07:00
2018-03-19 09:25:52 -07:00
2022-10-27 16:47:14 -07:00
2012-05-29 14:49:32 -07:00
2020-02-28 09:43:56 +01:00
2022-12-29 10:55:28 -08:00
2020-07-22 08:45:46 -07:00
2022-12-20 08:57:53 -08:00
2022-12-20 08:57:53 -08:00

Zuul

Zuul is a project gating system.

The latest documentation for Zuul v3 is published at: https://zuul-ci.org/docs/zuul/

If you are looking for the Edge routing service named Zuul that is related to Netflix, it can be found here: https://github.com/Netflix/zuul

If you are looking for the Javascript testing tool named Zuul, it can be found here: https://github.com/defunctzombie/zuul

Getting Help

There are two Zuul-related mailing lists:

zuul-announce

A low-traffic announcement-only list to which every Zuul operator or power-user should subscribe.

zuul-discuss

General discussion about Zuul, including questions about how to use it, and future development.

You will also find Zuul developers on Matrix <https://matrix.to/#/#zuul:opendev.org>.

Contributing

To browse the latest code, see: https://opendev.org/zuul/zuul To clone the latest code, use git clone https://opendev.org/zuul/zuul

Bugs are handled at: https://storyboard.openstack.org/#!/project/zuul/zuul

Suspected security vulnerabilities are most appreciated if first reported privately following any of the supported mechanisms described at https://zuul-ci.org/docs/zuul/user/vulnerabilities.html

Code reviews are handled by gerrit at https://review.opendev.org

After creating a Gerrit account, use git review to submit patches. Example:

# Do your commits
$ git review
# Enter your username if prompted

Join us on Matrix to discuss development or usage.

License

Zuul is free software. Most of Zuul is licensed under the Apache License, version 2.0. Some parts of Zuul are licensed under the General Public License, version 3.0. Please see the license headers at the tops of individual source files.

Python Version Support

Zuul requires Python 3. It does not support Python 2.

Since Zuul uses Ansible to drive CI jobs, Zuul can run tests anywhere Ansible can, including Python 2 environments.

Description
The Gatekeeper, or a project gating system
Readme 151 MiB
Languages
Python 89.1%
JavaScript 9.9%
Shell 0.5%
CSS 0.4%