)]}'
{"doc/source/developer/specs/circular-dependencies.rst":[{"author":{"_account_id":1,"name":"James E. Blair","email":"jim@acmegating.com","username":"corvus"},"change_message_id":"f9344fe29fc2e6f2913d8da64f092ecbcfa73c5b","unresolved":false,"context_lines":[{"line_number":160,"context_line":"    Zuul fails to submit all changes of a bundle."},{"line_number":161,"context_line":""},{"line_number":162,"context_line":"    In those cases the best way would be to automatically recover from the"},{"line_number":163,"context_line":"    situation. However this might mean force-pushing to the target branch and"},{"line_number":164,"context_line":"    reopening changes, which will introduce a new set of problems on its own."},{"line_number":165,"context_line":"    In addition the recovery might be affect by e.g. network issues aswell and"},{"line_number":166,"context_line":"    can potentially fail."}],"source_content_type":"text/x-rst","patch_set":3,"id":"5fc1f717_6ab9c5e7","line":163,"updated":"2019-03-19 18:20:15.000000000","message":"Zuul could automatically push a revert which would be a regular push, not a force-push.  I do agree that force-pushes are problematic and we should avoid them.","commit_id":"eb40c64040800f2db7eb9a7c5167e17c3085c75f"},{"author":{"_account_id":27582,"name":"Simon Westphahl","email":"simon.westphahl@bmw.de","username":"simon.westphahl"},"change_message_id":"514157b4d7d6f4f658d5a7d4322773805c3fe738","unresolved":false,"context_lines":[{"line_number":160,"context_line":"    Zuul fails to submit all changes of a bundle."},{"line_number":161,"context_line":""},{"line_number":162,"context_line":"    In those cases the best way would be to automatically recover from the"},{"line_number":163,"context_line":"    situation. However this might mean force-pushing to the target branch and"},{"line_number":164,"context_line":"    reopening changes, which will introduce a new set of problems on its own."},{"line_number":165,"context_line":"    In addition the recovery might be affect by e.g. network issues aswell and"},{"line_number":166,"context_line":"    can potentially fail."}],"source_content_type":"text/x-rst","patch_set":3,"id":"7faddb67_0ec3e139","line":163,"in_reply_to":"5fc1f717_6ab9c5e7","updated":"2019-07-16 07:51:46.000000000","message":"I think even pushing a revert might make the situation worse than just properly reporting what succeeded and what failed and fall back to human intervention for resolving the inconsistent state.","commit_id":"eb40c64040800f2db7eb9a7c5167e17c3085c75f"},{"author":{"_account_id":1,"name":"James E. Blair","email":"jim@acmegating.com","username":"corvus"},"change_message_id":"f9344fe29fc2e6f2913d8da64f092ecbcfa73c5b","unresolved":false,"context_lines":[{"line_number":169,"context_line":"    normal failing item and require human intervention to bring the"},{"line_number":170,"context_line":"    repositories back into a consistent state. Zuul can assist in that by"},{"line_number":171,"context_line":"    logging detailed information of the performed steps and encountered errors"},{"line_number":172,"context_line":"    to the affected change pages."},{"line_number":173,"context_line":""},{"line_number":174,"context_line":"Execution overhead"},{"line_number":175,"context_line":"    Without any de-duplication logic, every change that is part of a bundle"}],"source_content_type":"text/x-rst","patch_set":3,"id":"5fc1f717_0ace0183","line":172,"updated":"2019-03-19 18:20:15.000000000","message":"In our previous discussions on the topic, we generally considered \"Zuul push\", ie, having Zuul push the merge rather than asking Gerrit or GitHub to do it, to be a pre-requisite for this, because we thought that errors (for example, due to merge or permissions discrepancies between Zuul and the code review system) were likely and error recovery (by reverting previously merged patches) was important.  I still think that\u0027s the best way to handle it, so I think we should look into that.\n\nIn both Gerrit and GitHub\u0027s case, if Zuul pushes a commit for a change/PR, the change/PR will be closed.  And it should be a simple matter to add a \"push\" command to the merger.","commit_id":"eb40c64040800f2db7eb9a7c5167e17c3085c75f"},{"author":{"_account_id":27582,"name":"Simon Westphahl","email":"simon.westphahl@bmw.de","username":"simon.westphahl"},"change_message_id":"514157b4d7d6f4f658d5a7d4322773805c3fe738","unresolved":false,"context_lines":[{"line_number":169,"context_line":"    normal failing item and require human intervention to bring the"},{"line_number":170,"context_line":"    repositories back into a consistent state. Zuul can assist in that by"},{"line_number":171,"context_line":"    logging detailed information of the performed steps and encountered errors"},{"line_number":172,"context_line":"    to the affected change pages."},{"line_number":173,"context_line":""},{"line_number":174,"context_line":"Execution overhead"},{"line_number":175,"context_line":"    Without any de-duplication logic, every change that is part of a bundle"}],"source_content_type":"text/x-rst","patch_set":3,"id":"7faddb67_2ed57de5","line":172,"in_reply_to":"5fc1f717_0ace0183","updated":"2019-07-16 07:51:46.000000000","message":"Agree, that this could be added. However, IIRC with Github Apps it is not possible to allow pushes to a protected branch. So this would be mainly useful for Gerrit.","commit_id":"eb40c64040800f2db7eb9a7c5167e17c3085c75f"},{"author":{"_account_id":2,"name":"Monty Taylor","email":"mordred@inaugust.com","username":"mordred"},"change_message_id":"77c376570ed48d7d34249abeaaffc8e6f688b895","unresolved":false,"context_lines":[{"line_number":169,"context_line":"    normal failing item and require human intervention to bring the"},{"line_number":170,"context_line":"    repositories back into a consistent state. Zuul can assist in that by"},{"line_number":171,"context_line":"    logging detailed information of the performed steps and encountered errors"},{"line_number":172,"context_line":"    to the affected change pages."},{"line_number":173,"context_line":""},{"line_number":174,"context_line":"Execution overhead"},{"line_number":175,"context_line":"    Without any de-duplication logic, every change that is part of a bundle"}],"source_content_type":"text/x-rst","patch_set":3,"id":"7faddb67_a20bbc21","line":172,"in_reply_to":"7faddb67_2ed57de5","updated":"2019-07-16 11:20:55.000000000","message":"Yeah - which is super sad making.\n\nPerhaps when we look at \"Zuul push\" we could consider allowing a \"push\" account to be configured in the github driver that would be a regular account for Zuul to use to push things, separate from the App. (it\u0027s an ugly workaround, but such is life)","commit_id":"eb40c64040800f2db7eb9a7c5167e17c3085c75f"},{"author":{"_account_id":16068,"name":"Tobias Henkel","email":"tobias.henkel@bmw.de","username":"tobias.henkel"},"change_message_id":"1c70505d673925611d03296e05e423a3d88a543e","unresolved":false,"context_lines":[{"line_number":169,"context_line":"    normal failing item and require human intervention to bring the"},{"line_number":170,"context_line":"    repositories back into a consistent state. Zuul can assist in that by"},{"line_number":171,"context_line":"    logging detailed information of the performed steps and encountered errors"},{"line_number":172,"context_line":"    to the affected change pages."},{"line_number":173,"context_line":""},{"line_number":174,"context_line":"Execution overhead"},{"line_number":175,"context_line":"    Without any de-duplication logic, every change that is part of a bundle"}],"source_content_type":"text/x-rst","patch_set":3,"id":"7faddb67_026bb084","line":172,"in_reply_to":"7faddb67_a20bbc21","updated":"2019-07-16 11:41:07.000000000","message":"Using a push account is not really feasible from my role as an operator of a large scale multi tenant setup.\n\nHowever where we support it (probably all but Github) we should be able to use it in order to at least rule out algorithmic differences between different git versions/implementations.\n\nBut I\u0027m not sure if we can just default to push in Gerrit or make that configurable separately per project (I guess in Gerrit we might need different permissions for push than submit).\n\nThat said I think we should make this as best effort as possible but don\u0027t try to \u0027repair\u0027 things if they still go wrong. And we should make this very clean in the docs that this is a tradeof that has to be made when allowing circular dependencies.","commit_id":"eb40c64040800f2db7eb9a7c5167e17c3085c75f"},{"author":{"_account_id":16068,"name":"Tobias Henkel","email":"tobias.henkel@bmw.de","username":"tobias.henkel"},"change_message_id":"1c70505d673925611d03296e05e423a3d88a543e","unresolved":false,"context_lines":[{"line_number":42,"context_line":"3. Set the ``Depends-On`` (e.g. pointing to the last uploaded change) to"},{"line_number":43,"context_line":"   complete the cycle."},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"By default Zuul will retain the current behavior of preventing dependency"},{"line_number":46,"context_line":"cycles. Circular dependencies need to be explicitly enabled on a per project"},{"line_number":47,"context_line":"basis:"},{"line_number":48,"context_line":""}],"source_content_type":"text/x-rst","patch_set":4,"id":"7faddb67_c2d3585f","line":45,"updated":"2019-07-16 11:41:07.000000000","message":"@Monty: Configuration of this feature is mentioned here (together with the note that it\u0027s off by default)\n\n@Simon: We should also add a config option to completely disallow this in the whole tenant. Or we allow them in the tenant and enable per repo.","commit_id":"dc7cbefcb1de9d8ff4d704e6c04fd2a354be39a2"},{"author":{"_account_id":27582,"name":"Simon Westphahl","email":"simon.westphahl@bmw.de","username":"simon.westphahl"},"change_message_id":"5106c1f8c1c902584819d2ad9fa61c21c5b6bda3","unresolved":false,"context_lines":[{"line_number":42,"context_line":"3. Set the ``Depends-On`` (e.g. pointing to the last uploaded change) to"},{"line_number":43,"context_line":"   complete the cycle."},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"By default Zuul will retain the current behavior of preventing dependency"},{"line_number":46,"context_line":"cycles. Circular dependencies need to be explicitly enabled on a per project"},{"line_number":47,"context_line":"basis:"},{"line_number":48,"context_line":""}],"source_content_type":"text/x-rst","patch_set":4,"id":"7faddb67_d37bf788","line":45,"in_reply_to":"7faddb67_c2d3585f","updated":"2019-07-19 08:53:54.000000000","message":"Ok, will add that this must be enabled explicitly in the tenant config.","commit_id":"dc7cbefcb1de9d8ff4d704e6c04fd2a354be39a2"},{"author":{"_account_id":16068,"name":"Tobias Henkel","email":"tobias.henkel@bmw.de","username":"tobias.henkel"},"change_message_id":"1c70505d673925611d03296e05e423a3d88a543e","unresolved":false,"context_lines":[{"line_number":52,"context_line":"     name: foobar"},{"line_number":53,"context_line":"     allow-circular-dependencies: true"},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"Since circular dependencies often involve different repositories, we have to"},{"line_number":56,"context_line":"allow enqueuing dependent changes across change queues."},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"As a side effect, Zuul would also be able to support dependencies for in-flight"},{"line_number":59,"context_line":"changes. For this we could create the bundle item only in the dependent change."}],"source_content_type":"text/x-rst","patch_set":4,"id":"7faddb67_42144844","line":56,"range":{"start_line":55,"start_character":0,"end_line":56,"end_character":55},"updated":"2019-07-16 11:41:07.000000000","message":"Maybe it makes sense to elaborate a little bit more about that. Reading further down it becomes clear that the intention is to enqueue one queue item for each change in the cycle and hold back reporting until the whole cycle is finished. This is the essential part that makes it possible to enqueue such a cycle over multiple change queues.","commit_id":"dc7cbefcb1de9d8ff4d704e6c04fd2a354be39a2"},{"author":{"_account_id":27582,"name":"Simon Westphahl","email":"simon.westphahl@bmw.de","username":"simon.westphahl"},"change_message_id":"5106c1f8c1c902584819d2ad9fa61c21c5b6bda3","unresolved":false,"context_lines":[{"line_number":52,"context_line":"     name: foobar"},{"line_number":53,"context_line":"     allow-circular-dependencies: true"},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"Since circular dependencies often involve different repositories, we have to"},{"line_number":56,"context_line":"allow enqueuing dependent changes across change queues."},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"As a side effect, Zuul would also be able to support dependencies for in-flight"},{"line_number":59,"context_line":"changes. For this we could create the bundle item only in the dependent change."}],"source_content_type":"text/x-rst","patch_set":4,"id":"7faddb67_336ccbcc","line":56,"range":{"start_line":55,"start_character":0,"end_line":56,"end_character":55},"in_reply_to":"7faddb67_42144844","updated":"2019-07-19 08:53:54.000000000","message":"Will do.","commit_id":"dc7cbefcb1de9d8ff4d704e6c04fd2a354be39a2"},{"author":{"_account_id":16068,"name":"Tobias Henkel","email":"tobias.henkel@bmw.de","username":"tobias.henkel"},"change_message_id":"1c70505d673925611d03296e05e423a3d88a543e","unresolved":false,"context_lines":[{"line_number":135,"context_line":"   user might not be able to identify why a failure is reported despite the"},{"line_number":136,"context_line":"   fact that all jobs succeeded."},{"line_number":137,"context_line":""},{"line_number":138,"context_line":"   The reporting of the bundle summary needs to be done in the last item of a"},{"line_number":139,"context_line":"   bundle, because only then we know if the complete bundle succeeded or not."},{"line_number":140,"context_line":""},{"line_number":141,"context_line":"   To accomplish all this we might want to introduce a separate reporting path"},{"line_number":142,"context_line":"   for queue items that are part of a bundle."}],"source_content_type":"text/x-rst","patch_set":4,"id":"7faddb67_62962496","line":139,"range":{"start_line":138,"start_character":0,"end_line":139,"end_character":77},"updated":"2019-07-16 11:41:07.000000000","message":"If we hold back the reporting until the whole bundle is finished we actually have all the needed information already. So in fact we could report each item in one go with the bundle result.","commit_id":"dc7cbefcb1de9d8ff4d704e6c04fd2a354be39a2"},{"author":{"_account_id":27582,"name":"Simon Westphahl","email":"simon.westphahl@bmw.de","username":"simon.westphahl"},"change_message_id":"5106c1f8c1c902584819d2ad9fa61c21c5b6bda3","unresolved":false,"context_lines":[{"line_number":135,"context_line":"   user might not be able to identify why a failure is reported despite the"},{"line_number":136,"context_line":"   fact that all jobs succeeded."},{"line_number":137,"context_line":""},{"line_number":138,"context_line":"   The reporting of the bundle summary needs to be done in the last item of a"},{"line_number":139,"context_line":"   bundle, because only then we know if the complete bundle succeeded or not."},{"line_number":140,"context_line":""},{"line_number":141,"context_line":"   To accomplish all this we might want to introduce a separate reporting path"},{"line_number":142,"context_line":"   for queue items that are part of a bundle."}],"source_content_type":"text/x-rst","patch_set":4,"id":"7faddb67_f805b214","line":139,"range":{"start_line":138,"start_character":0,"end_line":139,"end_character":77},"in_reply_to":"7faddb67_62962496","updated":"2019-07-19 08:53:54.000000000","message":"The reason for holding back the bundle reporting is that we don\u0027t know at this point if all items could be merged. We could of course assume (the very likely) happy path and report the whole bundle. Then we only have to come back and report again in the error case.","commit_id":"dc7cbefcb1de9d8ff4d704e6c04fd2a354be39a2"},{"author":{"_account_id":1,"name":"James E. Blair","email":"jim@acmegating.com","username":"corvus"},"change_message_id":"4916fae9d5d55a3e7ffe6f3bcab08fbac3a2715f","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":8,"id":"3fa7e38b_4697ee38","updated":"2020-02-04 15:52:44.000000000","message":"We should add the standard header from the other specs about how this is not authoritative documentation.","commit_id":"24d8633bdd9f3fbf9d38a95a43e290effa253c05"},{"author":{"_account_id":27582,"name":"Simon Westphahl","email":"simon.westphahl@bmw.de","username":"simon.westphahl"},"change_message_id":"374d0505212735fb6dbf131daa1c75dde289ccc9","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":8,"id":"3fa7e38b_843394c3","in_reply_to":"3fa7e38b_4697ee38","updated":"2020-02-05 08:35:49.000000000","message":"Done","commit_id":"24d8633bdd9f3fbf9d38a95a43e290effa253c05"},{"author":{"_account_id":2,"name":"Monty Taylor","email":"mordred@inaugust.com","username":"mordred"},"change_message_id":"e980b6ed965ca293d9e72abb082e69e7bd7db760","unresolved":false,"context_lines":[{"line_number":14,"context_line":"given dependency graph. The individual changes in those subgraphs need to know"},{"line_number":15,"context_line":"about each other."},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"Circular dependency handling needs to be configurable on a per tenand and"},{"line_number":18,"context_line":"project basis."},{"line_number":19,"context_line":""},{"line_number":20,"context_line":".. _strongly connected components: https://en.wikipedia.org/wiki/Strongly_connected_component"}],"source_content_type":"text/x-rst","patch_set":8,"id":"3fa7e38b_6650ea0a","line":17,"range":{"start_line":17,"start_character":68,"end_line":17,"end_character":69},"updated":"2020-02-04 15:34:28.000000000","message":"nit: tenant","commit_id":"24d8633bdd9f3fbf9d38a95a43e290effa253c05"},{"author":{"_account_id":27582,"name":"Simon Westphahl","email":"simon.westphahl@bmw.de","username":"simon.westphahl"},"change_message_id":"374d0505212735fb6dbf131daa1c75dde289ccc9","unresolved":false,"context_lines":[{"line_number":14,"context_line":"given dependency graph. The individual changes in those subgraphs need to know"},{"line_number":15,"context_line":"about each other."},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"Circular dependency handling needs to be configurable on a per tenand and"},{"line_number":18,"context_line":"project basis."},{"line_number":19,"context_line":""},{"line_number":20,"context_line":".. _strongly connected components: https://en.wikipedia.org/wiki/Strongly_connected_component"}],"source_content_type":"text/x-rst","patch_set":8,"id":"3fa7e38b_243ae096","line":17,"range":{"start_line":17,"start_character":68,"end_line":17,"end_character":69},"in_reply_to":"3fa7e38b_6650ea0a","updated":"2020-02-05 08:35:49.000000000","message":"Done","commit_id":"24d8633bdd9f3fbf9d38a95a43e290effa253c05"},{"author":{"_account_id":1,"name":"James E. Blair","email":"jim@acmegating.com","username":"corvus"},"change_message_id":"4916fae9d5d55a3e7ffe6f3bcab08fbac3a2715f","unresolved":false,"context_lines":[{"line_number":15,"context_line":"about each other."},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"Circular dependency handling needs to be configurable on a per tenand and"},{"line_number":18,"context_line":"project basis."},{"line_number":19,"context_line":""},{"line_number":20,"context_line":".. _strongly connected components: https://en.wikipedia.org/wiki/Strongly_connected_component"},{"line_number":21,"context_line":""}],"source_content_type":"text/x-rst","patch_set":8,"id":"3fa7e38b_e6a5baa1","line":18,"updated":"2020-02-04 15:52:44.000000000","message":"Why should it be configured per-project?  Per-tenant seems enough to me.  Is there a use-case for multiple projects within a tenant having differing values for this?  I think that would make it confusing for users?  Though I guess you don\u0027t have to use that feature, and if you don\u0027t the tenant default would control?","commit_id":"24d8633bdd9f3fbf9d38a95a43e290effa253c05"},{"author":{"_account_id":16068,"name":"Tobias Henkel","email":"tobias.henkel@bmw.de","username":"tobias.henkel"},"change_message_id":"b1971dd32bc3a6aba1b6d286b5513c2bfb3aba0a","unresolved":false,"context_lines":[{"line_number":25,"context_line":""},{"line_number":26,"context_line":"By default Zuul will retain the current behavior of preventing dependency"},{"line_number":27,"context_line":"cycles. The circular dependency handling must be explicitly enabled in the"},{"line_number":28,"context_line":"tenant configuration. "},{"line_number":29,"context_line":""},{"line_number":30,"context_line":".. code-block:: yaml"},{"line_number":31,"context_line":""}],"source_content_type":"text/x-rst","patch_set":8,"id":"3fa7e38b_97be7dff","line":28,"updated":"2020-02-03 22:14:42.000000000","message":"nit: trailing whitespace","commit_id":"24d8633bdd9f3fbf9d38a95a43e290effa253c05"},{"author":{"_account_id":1,"name":"James E. Blair","email":"jim@acmegating.com","username":"corvus"},"change_message_id":"4916fae9d5d55a3e7ffe6f3bcab08fbac3a2715f","unresolved":false,"context_lines":[{"line_number":31,"context_line":""},{"line_number":32,"context_line":"   allow-circular-dependencies: true"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"In addition circular dependencies need to be enabled on a per project basis:"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":".. code-block:: yaml"},{"line_number":37,"context_line":""}],"source_content_type":"text/x-rst","patch_set":8,"id":"3fa7e38b_06a1f692","line":34,"updated":"2020-02-04 15:52:44.000000000","message":"Apparently I guessed wrongly above.  Users probably will too.  Oh, and this is still in the tenant config, this isn\u0027t a project-level config.  In that case, why would you even have a tenant-level setting?","commit_id":"24d8633bdd9f3fbf9d38a95a43e290effa253c05"},{"author":{"_account_id":1,"name":"James E. Blair","email":"jim@acmegating.com","username":"corvus"},"change_message_id":"2e7e784986362e14c37577e319d7eebd341160e3","unresolved":false,"context_lines":[{"line_number":31,"context_line":""},{"line_number":32,"context_line":"   allow-circular-dependencies: true"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"In addition circular dependencies need to be enabled on a per project basis:"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":".. code-block:: yaml"},{"line_number":37,"context_line":""}],"source_content_type":"text/x-rst","patch_set":8,"id":"3fa7e38b_e1a4c44e","line":34,"updated":"2020-02-04 16:54:17.000000000","message":"Ok the \"need to be enabled\" reads to me like: in order to enable it, you must explicitly set both the tenant and project settings to true.  I\u0027d suggest saying something like \"In addition, the tenant default may be overridden on a per-project basis\".  I agree that the exclude-unprotected-branches pattern makes sense here.","commit_id":"24d8633bdd9f3fbf9d38a95a43e290effa253c05"},{"author":{"_account_id":16068,"name":"Tobias Henkel","email":"tobias.henkel@bmw.de","username":"tobias.henkel"},"change_message_id":"922ac90c54b96cb5254f172e1e05bd238d4d5fda","unresolved":false,"context_lines":[{"line_number":31,"context_line":""},{"line_number":32,"context_line":"   allow-circular-dependencies: true"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"In addition circular dependencies need to be enabled on a per project basis:"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":".. code-block:: yaml"},{"line_number":37,"context_line":""}],"source_content_type":"text/x-rst","patch_set":8,"id":"3fa7e38b_c133c8c2","line":34,"in_reply_to":"3fa7e38b_06a1f692","updated":"2020-02-04 16:33:40.000000000","message":"The intention was setting the default on tenant level and allowing to override this on a per project level similar to exclude-unprotected branches. I guess that needs a little bit more words.","commit_id":"24d8633bdd9f3fbf9d38a95a43e290effa253c05"},{"author":{"_account_id":27582,"name":"Simon Westphahl","email":"simon.westphahl@bmw.de","username":"simon.westphahl"},"change_message_id":"374d0505212735fb6dbf131daa1c75dde289ccc9","unresolved":false,"context_lines":[{"line_number":31,"context_line":""},{"line_number":32,"context_line":"   allow-circular-dependencies: true"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"In addition circular dependencies need to be enabled on a per project basis:"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":".. code-block:: yaml"},{"line_number":37,"context_line":""}],"source_content_type":"text/x-rst","patch_set":8,"id":"3fa7e38b_e4c92852","line":34,"in_reply_to":"3fa7e38b_e1a4c44e","updated":"2020-02-05 08:35:49.000000000","message":"IIRC the initial idea was, that you have to explicitly allow circular dependencies on the tenant AND project level. However, I think the current implementation that is similar to exclude-unprotected-branches makes more sense. Will fix.","commit_id":"24d8633bdd9f3fbf9d38a95a43e290effa253c05"},{"author":{"_account_id":16068,"name":"Tobias Henkel","email":"tobias.henkel@bmw.de","username":"tobias.henkel"},"change_message_id":"b1971dd32bc3a6aba1b6d286b5513c2bfb3aba0a","unresolved":false,"context_lines":[{"line_number":43,"context_line":""},{"line_number":44,"context_line":"   [...]"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"Chanes with cross-repo circular dependencies are required to share the same"},{"line_number":47,"context_line":"change queue. We would still enqueue on queue item per change but hold back"},{"line_number":48,"context_line":"reporting of the cycle until all items have finished. All the items in a cycle"},{"line_number":49,"context_line":"would reference a shared bundle item."}],"source_content_type":"text/x-rst","patch_set":8,"id":"3fa7e38b_b7bb790e","line":46,"range":{"start_line":46,"start_character":0,"end_line":46,"end_character":6},"updated":"2020-02-03 22:14:42.000000000","message":"Changes","commit_id":"24d8633bdd9f3fbf9d38a95a43e290effa253c05"},{"author":{"_account_id":27582,"name":"Simon Westphahl","email":"simon.westphahl@bmw.de","username":"simon.westphahl"},"change_message_id":"374d0505212735fb6dbf131daa1c75dde289ccc9","unresolved":false,"context_lines":[{"line_number":43,"context_line":""},{"line_number":44,"context_line":"   [...]"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"Chanes with cross-repo circular dependencies are required to share the same"},{"line_number":47,"context_line":"change queue. We would still enqueue on queue item per change but hold back"},{"line_number":48,"context_line":"reporting of the cycle until all items have finished. All the items in a cycle"},{"line_number":49,"context_line":"would reference a shared bundle item."}],"source_content_type":"text/x-rst","patch_set":8,"id":"3fa7e38b_e4436811","line":46,"range":{"start_line":46,"start_character":0,"end_line":46,"end_character":6},"in_reply_to":"3fa7e38b_b7bb790e","updated":"2020-02-05 08:35:49.000000000","message":"Done","commit_id":"24d8633bdd9f3fbf9d38a95a43e290effa253c05"},{"author":{"_account_id":16068,"name":"Tobias Henkel","email":"tobias.henkel@bmw.de","username":"tobias.henkel"},"change_message_id":"b1971dd32bc3a6aba1b6d286b5513c2bfb3aba0a","unresolved":false,"context_lines":[{"line_number":44,"context_line":"   [...]"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"Chanes with cross-repo circular dependencies are required to share the same"},{"line_number":47,"context_line":"change queue. We would still enqueue on queue item per change but hold back"},{"line_number":48,"context_line":"reporting of the cycle until all items have finished. All the items in a cycle"},{"line_number":49,"context_line":"would reference a shared bundle item."},{"line_number":50,"context_line":""}],"source_content_type":"text/x-rst","patch_set":8,"id":"3fa7e38b_77b50119","line":47,"range":{"start_line":47,"start_character":37,"end_line":47,"end_character":39},"updated":"2020-02-03 22:14:42.000000000","message":"one","commit_id":"24d8633bdd9f3fbf9d38a95a43e290effa253c05"},{"author":{"_account_id":27582,"name":"Simon Westphahl","email":"simon.westphahl@bmw.de","username":"simon.westphahl"},"change_message_id":"374d0505212735fb6dbf131daa1c75dde289ccc9","unresolved":false,"context_lines":[{"line_number":44,"context_line":"   [...]"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"Chanes with cross-repo circular dependencies are required to share the same"},{"line_number":47,"context_line":"change queue. We would still enqueue on queue item per change but hold back"},{"line_number":48,"context_line":"reporting of the cycle until all items have finished. All the items in a cycle"},{"line_number":49,"context_line":"would reference a shared bundle item."},{"line_number":50,"context_line":""}],"source_content_type":"text/x-rst","patch_set":8,"id":"3fa7e38b_043fa484","line":47,"range":{"start_line":47,"start_character":37,"end_line":47,"end_character":39},"in_reply_to":"3fa7e38b_77b50119","updated":"2020-02-05 08:35:49.000000000","message":"Done","commit_id":"24d8633bdd9f3fbf9d38a95a43e290effa253c05"},{"author":{"_account_id":16068,"name":"Tobias Henkel","email":"tobias.henkel@bmw.de","username":"tobias.henkel"},"change_message_id":"b1971dd32bc3a6aba1b6d286b5513c2bfb3aba0a","unresolved":false,"context_lines":[{"line_number":50,"context_line":""},{"line_number":51,"context_line":"A different approach would be to allow enquing of changes accross change"},{"line_number":52,"context_line":"queues. This however would be a very substancial change with a lot of edge"},{"line_number":53,"context_line":"cases."},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"Dependencies are currently expressed with a ``Depends-On`` in the footer of a"},{"line_number":56,"context_line":"commit message or pull-request body. This information is already used for"}],"source_content_type":"text/x-rst","patch_set":8,"id":"3fa7e38b_d73955a2","line":53,"updated":"2020-02-03 22:14:42.000000000","message":"I\u0027d further mention that this is out of scope of this spec and could be considered as a later improvement if needed.","commit_id":"24d8633bdd9f3fbf9d38a95a43e290effa253c05"},{"author":{"_account_id":1,"name":"James E. Blair","email":"jim@acmegating.com","username":"corvus"},"change_message_id":"4916fae9d5d55a3e7ffe6f3bcab08fbac3a2715f","unresolved":false,"context_lines":[{"line_number":50,"context_line":""},{"line_number":51,"context_line":"A different approach would be to allow enquing of changes accross change"},{"line_number":52,"context_line":"queues. This however would be a very substancial change with a lot of edge"},{"line_number":53,"context_line":"cases."},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"Dependencies are currently expressed with a ``Depends-On`` in the footer of a"},{"line_number":56,"context_line":"commit message or pull-request body. This information is already used for"}],"source_content_type":"text/x-rst","patch_set":8,"id":"3fa7e38b_a6b102e6","line":53,"updated":"2020-02-04 15:52:44.000000000","message":"This one is pretty hard to imagine, so I\u0027m fine not suggesting it as a follow-up.  :)","commit_id":"24d8633bdd9f3fbf9d38a95a43e290effa253c05"},{"author":{"_account_id":27582,"name":"Simon Westphahl","email":"simon.westphahl@bmw.de","username":"simon.westphahl"},"change_message_id":"374d0505212735fb6dbf131daa1c75dde289ccc9","unresolved":false,"context_lines":[{"line_number":50,"context_line":""},{"line_number":51,"context_line":"A different approach would be to allow enquing of changes accross change"},{"line_number":52,"context_line":"queues. This however would be a very substancial change with a lot of edge"},{"line_number":53,"context_line":"cases."},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"Dependencies are currently expressed with a ``Depends-On`` in the footer of a"},{"line_number":56,"context_line":"commit message or pull-request body. This information is already used for"}],"source_content_type":"text/x-rst","patch_set":8,"id":"3fa7e38b_c46aec16","line":53,"in_reply_to":"3fa7e38b_a6b102e6","updated":"2020-02-05 08:35:49.000000000","message":"Done","commit_id":"24d8633bdd9f3fbf9d38a95a43e290effa253c05"},{"author":{"_account_id":2,"name":"Monty Taylor","email":"mordred@inaugust.com","username":"mordred"},"change_message_id":"e980b6ed965ca293d9e72abb082e69e7bd7db760","unresolved":false,"context_lines":[{"line_number":50,"context_line":""},{"line_number":51,"context_line":"A different approach would be to allow enquing of changes accross change"},{"line_number":52,"context_line":"queues. This however would be a very substancial change with a lot of edge"},{"line_number":53,"context_line":"cases."},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"Dependencies are currently expressed with a ``Depends-On`` in the footer of a"},{"line_number":56,"context_line":"commit message or pull-request body. This information is already used for"}],"source_content_type":"text/x-rst","patch_set":8,"id":"3fa7e38b_a66fc2c5","line":53,"in_reply_to":"3fa7e38b_d73955a2","updated":"2020-02-04 15:34:28.000000000","message":"I think I actually like the restriction that circular deps need to share a queue. But definitely it\u0027s out of scope / future work if we want to change that.","commit_id":"24d8633bdd9f3fbf9d38a95a43e290effa253c05"},{"author":{"_account_id":1,"name":"James E. Blair","email":"jim@acmegating.com","username":"corvus"},"change_message_id":"4916fae9d5d55a3e7ffe6f3bcab08fbac3a2715f","unresolved":false,"context_lines":[{"line_number":170,"context_line":"    Zuul fails to submit all changes of a bundle."},{"line_number":171,"context_line":""},{"line_number":172,"context_line":"    In those cases the best way would be to automatically recover from the"},{"line_number":173,"context_line":"    situation. However this might mean force-pushing to the target branch and"},{"line_number":174,"context_line":"    reopening changes, which will introduce a new set of problems on its own."},{"line_number":175,"context_line":"    In addition the recovery might be affect by e.g. network issues aswell and"},{"line_number":176,"context_line":"    can potentially fail."}],"source_content_type":"text/x-rst","patch_set":8,"id":"3fa7e38b_c6b43ed6","line":173,"updated":"2020-02-04 15:52:44.000000000","message":"As mentioned on an earlier patchset, it need not be a force-push.  We could recover with a normal push of a revert.","commit_id":"24d8633bdd9f3fbf9d38a95a43e290effa253c05"},{"author":{"_account_id":27582,"name":"Simon Westphahl","email":"simon.westphahl@bmw.de","username":"simon.westphahl"},"change_message_id":"374d0505212735fb6dbf131daa1c75dde289ccc9","unresolved":false,"context_lines":[{"line_number":170,"context_line":"    Zuul fails to submit all changes of a bundle."},{"line_number":171,"context_line":""},{"line_number":172,"context_line":"    In those cases the best way would be to automatically recover from the"},{"line_number":173,"context_line":"    situation. However this might mean force-pushing to the target branch and"},{"line_number":174,"context_line":"    reopening changes, which will introduce a new set of problems on its own."},{"line_number":175,"context_line":"    In addition the recovery might be affect by e.g. network issues aswell and"},{"line_number":176,"context_line":"    can potentially fail."}],"source_content_type":"text/x-rst","patch_set":8,"id":"3fa7e38b_845e3476","line":173,"in_reply_to":"3fa7e38b_c6b43ed6","updated":"2020-02-05 08:35:49.000000000","message":"Done","commit_id":"24d8633bdd9f3fbf9d38a95a43e290effa253c05"},{"author":{"_account_id":1,"name":"James E. Blair","email":"jim@acmegating.com","username":"corvus"},"change_message_id":"4916fae9d5d55a3e7ffe6f3bcab08fbac3a2715f","unresolved":false,"context_lines":[{"line_number":183,"context_line":""},{"line_number":184,"context_line":"Execution overhead"},{"line_number":185,"context_line":"    Without any de-duplication logic, every change that is part of a bundle"},{"line_number":186,"context_line":"    will have it\u0027s jobs executed. For circular dependent changes with the same"},{"line_number":187,"context_line":"    jobs configured this could mean executing the same jobs twice."},{"line_number":188,"context_line":""},{"line_number":189,"context_line":".. rubric:: Footnotes"}],"source_content_type":"text/x-rst","patch_set":8,"id":"3fa7e38b_66ab0a71","line":186,"updated":"2020-02-04 15:52:44.000000000","message":"typo: its","commit_id":"24d8633bdd9f3fbf9d38a95a43e290effa253c05"},{"author":{"_account_id":27582,"name":"Simon Westphahl","email":"simon.westphahl@bmw.de","username":"simon.westphahl"},"change_message_id":"374d0505212735fb6dbf131daa1c75dde289ccc9","unresolved":false,"context_lines":[{"line_number":183,"context_line":""},{"line_number":184,"context_line":"Execution overhead"},{"line_number":185,"context_line":"    Without any de-duplication logic, every change that is part of a bundle"},{"line_number":186,"context_line":"    will have it\u0027s jobs executed. For circular dependent changes with the same"},{"line_number":187,"context_line":"    jobs configured this could mean executing the same jobs twice."},{"line_number":188,"context_line":""},{"line_number":189,"context_line":".. rubric:: Footnotes"}],"source_content_type":"text/x-rst","patch_set":8,"id":"3fa7e38b_c448ac2c","line":186,"in_reply_to":"3fa7e38b_66ab0a71","updated":"2020-02-05 08:35:49.000000000","message":"Done","commit_id":"24d8633bdd9f3fbf9d38a95a43e290effa253c05"}]}
