On 02/10/2015 05:26 PM, Boris Pavlovic wrote: > James, > > Awesome! Amazing! You guys rock!=)
Thanks Boris! Just trying to keep up with all of the awesome developers we have out there! > On Wed, Feb 11, 2015 at 1:26 AM, James E. Blair <cor...@inaugust.com> wrote: > >> Hi, >> >> We have added support for cross-repo dependencies (CRD) in Zuul. The >> important bits: >> >> * To use them, include "Depends-On: <gerrit-change-id>" in the footer of >> your commit message. Use the full Change-ID ('I' + 40 characters). >> >> * These are one-way dependencies only -- do not create a cycle. >> >> * This is what all the grey dots and lines are in the check pipeline. >> >> Cross-Repo Dependencies Explained >> ================================= >> >> There are two behaviors that might go by the name "cross-repo >> dependencies". We call them one-way and multi-way. >> >> Multi-way CRD allow for bidirectional links between changes. For >> instance, A depends on B and B depends on A. The theory there is that >> both would be tested together and merged as a unit. This is _not_ what >> we have implemented in Zuul. Discussions over the past two years have >> revealed that this type of behavior could cause problems for continuous >> deploments as it means that two components must be upgraded >> simultaneously. Not supporting this behavior is a choice we have made. >> >> One-way CRD behaves like a directed acyclic graph (DAG), like git >> itself, to indicate a one-way dependency relationship between changes in >> different git repos. Change A may depend on B, but B may not depend on >> A. This is what we have implemented in Zuul. >> >> Gate Pipeline >> ============= >> >> When Zuul sees CRD changes, it serializes them in the usual manner when >> enqueuing them into a pipeline. This means that if change A depends on >> B, then when they are added to the gate pipeline, B will appear first >> and A will follow. If tests for B fail, both B and A will be removed >> from the pipeline, and it will not be possible for A to merge until B >> does. >> >> Note that if changes with CRD do not share a change queue (such as the >> "integrated gate" then Zuul is unable to enqueue them together, and the >> first will be required to merge before the second is enqueued. >> >> Check Pipeline >> ============== >> >> When changes are enqueued into the check pipeline, all of the related >> dependencies (both normal git-dependencies that come from parent commits >> as well as CRD changes) appear in a dependency graph, as in gate. This >> means that even in the check pipeline, your change will be tested with >> its dependency. So changes that were previously unable to be fully >> tested until a related change landed in a different repo may now be >> tested together from the start. >> >> All of the changes are still independent (so you will note that the >> whole pipeline does not share a graph as in gate), but for each change >> tested, all of its dependencies are visually connected to it, and they >> are used to construct the git references that Zuul uses when testing. >> When looking at this graph on the status page, you will note that the >> dependencies show up as grey dots, while the actual change tested shows >> up as red or green. This is to indicate that the grey changes are only >> there to establish dependencies. Even if one of the dependencies is >> also being tested, it will show up as a grey dot when used as a >> dependency, but separately and additionally will appear as its own red >> or green dot for its test. >> >> (If you don't see grey dots on the status page, reload the page to get >> the latest version.) >> >> Multiple Changes >> ================ >> >> A Gerrit change ID may refer to multiple changes (on multiple branches >> of the same project, or even multiple projects). In these cases, Zuul >> will treat all of the changes with that change ID as dependencies. So >> if you say that a tempest change Depends-On a change ID that has changes >> in nova master and nova stable/juno, then when testing the tempest >> change, both nova changes will be applied, and when deciding whether the >> tempest change can merge, both changes must merge ahead of it. >> >> A change may depend on more than one Gerrit change ID as well. So it is >> possible for a change in tempest to depend on a change in devstack and a >> change in nova. Simply add more "Depends-On:" lines to the footer. >> >> Cycles >> ====== >> >> If a cycle is created by use of CRD, Zuul will abort its work very >> early. There will be no message in Gerrit and no changes that are part >> of the cycle will be enqueued into any pipeline. This is to protect >> Zuul from infinite loops. I hope that we can improve this to at least >> leave a message in Gerrit in the future. But in the meantime, please be >> cognizant of this and do not create dependency cycles with Depends-On >> lines. >> >> Examples >> ======== >> >> The following two infra changes have been tested together because of the >> Depends-On: line in the commit message of the first: >> >> https://review.openstack.org/#/c/152508/ >> https://review.openstack.org/#/c/152504/ >> >> In fact, you can see earlier test results failing until it was rechecked >> after CRD went into production (around 2015-02-10 15:20 UTC). >> >> This devstack change depended on a grenade change: >> >> https://review.openstack.org/#/c/154575/ >> https://review.openstack.org/#/c/153702/ >> >> And with CRD, was able to be tested in check together as well as being >> enqueued into the gate at the same time as its dependency. >> >> Note that in this example, the Gerrit change ID that 154575 depends on >> is actually associated with two changes on two separate branches. In >> cases such as this, Zuul treats all instances as dependencies (so both >> changes would be tested together, and both must merge before 154575 >> may). >> >> Further Questions >> ================= >> >> This is a fairly substantial new feature, and we may still have a bit to >> learn about it. >> >> If you have any further questions, feel free to ask here or in the >> #openstack-infra channel on Freenode. >> >> We will update the infra manual soon to reflect this change. >> >> -Jim >> >> _______________________________________________ >> OpenStack-Infra mailing list >> OpenStack-Infra@lists.openstack.org >> http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-infra >> > > > > _______________________________________________ > OpenStack-Infra mailing list > OpenStack-Infra@lists.openstack.org > http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-infra > _______________________________________________ OpenStack-Infra mailing list OpenStack-Infra@lists.openstack.org http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-infra