)]}'
{"tests/unit/test_v3.py":[{"author":{"_account_id":4146,"name":"Clark Boylan","email":"cboylan@sapwetik.org","username":"cboylan"},"change_message_id":"e4878f062cd5c55997e6d7d4805725fa3ff7b22a","unresolved":false,"context_lines":[{"line_number":3369,"context_line":"        # * We cache configuration objects if they load without error"},{"line_number":3370,"context_line":"        #   in their first tenant; that means that they can show up as"},{"line_number":3371,"context_line":"        #   errors in later tenants, but as long as those other"},{"line_number":3372,"context_line":"        #   tenants aren\u0027t proposing changes to that repo, it doesn\u0027t"},{"line_number":3373,"context_line":"        #   matter."},{"line_number":3374,"context_line":"        #"},{"line_number":3375,"context_line":"        # * If a merge job for a dynamic config change arrives out of"}],"source_content_type":"text/x-python","patch_set":2,"id":"ff570b3c_7b186974","line":3372,"range":{"start_line":3372,"start_character":59,"end_line":3372,"end_character":61},"updated":"2020-05-14 20:54:28.000000000","message":"Might want to expand on what \"it\" is here. I think you are saying \"we\u0027ll cache the config anyway because the first tenant had no error\" ?","commit_id":"d5b044c361facb466e0c5cbf0035d5b92923ae32"},{"author":{"_account_id":1,"name":"James E. Blair","email":"jim@acmegating.com","username":"corvus"},"change_message_id":"e16f96ccb88bea2ff0132f1d5f0af6ab6716a050","unresolved":false,"context_lines":[{"line_number":3369,"context_line":"        # * We cache configuration objects if they load without error"},{"line_number":3370,"context_line":"        #   in their first tenant; that means that they can show up as"},{"line_number":3371,"context_line":"        #   errors in later tenants, but as long as those other"},{"line_number":3372,"context_line":"        #   tenants aren\u0027t proposing changes to that repo, it doesn\u0027t"},{"line_number":3373,"context_line":"        #   matter."},{"line_number":3374,"context_line":"        #"},{"line_number":3375,"context_line":"        # * If a merge job for a dynamic config change arrives out of"}],"source_content_type":"text/x-python","patch_set":2,"id":"ff570b3c_5b9805bf","line":3372,"updated":"2020-05-14 20:57:20.000000000","message":"The second thing is true, but I was trying to say that the persistent errors aren\u0027t a big deal because they get filtered out.","commit_id":"d5b044c361facb466e0c5cbf0035d5b92923ae32"},{"author":{"_account_id":1,"name":"James E. Blair","email":"jim@acmegating.com","username":"corvus"},"change_message_id":"e16f96ccb88bea2ff0132f1d5f0af6ab6716a050","unresolved":false,"context_lines":[{"line_number":3381,"context_line":"        #   irrelevant errors except by virtue of the first point"},{"line_number":3382,"context_line":"        #   above, which is why this test relies on a second tenant."},{"line_number":3383,"context_line":""},{"line_number":3384,"context_line":"        # This test has two tenants.  The first loads project1,"},{"line_number":3385,"context_line":"        # project2, and project3 without errors and all config objects"},{"line_number":3386,"context_line":"        # are cached.  The second tenant loads only project1 and"},{"line_number":3387,"context_line":"        # project2.  Project2 references a job that is defined in"}],"source_content_type":"text/x-python","patch_set":2,"id":"ff570b3c_3b9391a5","line":3384,"updated":"2020-05-14 20:57:20.000000000","message":"Agreed.","commit_id":"d5b044c361facb466e0c5cbf0035d5b92923ae32"},{"author":{"_account_id":4146,"name":"Clark Boylan","email":"cboylan@sapwetik.org","username":"cboylan"},"change_message_id":"e4878f062cd5c55997e6d7d4805725fa3ff7b22a","unresolved":false,"context_lines":[{"line_number":3381,"context_line":"        #   irrelevant errors except by virtue of the first point"},{"line_number":3382,"context_line":"        #   above, which is why this test relies on a second tenant."},{"line_number":3383,"context_line":""},{"line_number":3384,"context_line":"        # This test has two tenants.  The first loads project1,"},{"line_number":3385,"context_line":"        # project2, and project3 without errors and all config objects"},{"line_number":3386,"context_line":"        # are cached.  The second tenant loads only project1 and"},{"line_number":3387,"context_line":"        # project2.  Project2 references a job that is defined in"}],"source_content_type":"text/x-python","patch_set":2,"id":"ff570b3c_1b584d30","line":3384,"range":{"start_line":3384,"start_character":54,"end_line":3384,"end_character":62},"updated":"2020-05-14 20:54:28.000000000","message":"I don\u0027t think this project is loaded by the first tenant.","commit_id":"d5b044c361facb466e0c5cbf0035d5b92923ae32"}],"zuul/manager/__init__.py":[{"author":{"_account_id":4146,"name":"Clark Boylan","email":"cboylan@sapwetik.org","username":"cboylan"},"change_message_id":"e4878f062cd5c55997e6d7d4805725fa3ff7b22a","unresolved":false,"context_lines":[{"line_number":668,"context_line":"            fallback_layout \u003d item.item_ahead.layout"},{"line_number":669,"context_line":"            if fallback_layout is None:"},{"line_number":670,"context_line":"                # We\u0027re probably waiting on a merge job for the item ahead."},{"line_number":671,"context_line":"                return None"},{"line_number":672,"context_line":"        else:"},{"line_number":673,"context_line":"            fallback_layout \u003d item.pipeline.tenant.layout"},{"line_number":674,"context_line":"        if not item.change.updatesConfig(item.pipeline.tenant):"}],"source_content_type":"text/x-python","patch_set":2,"id":"ff570b3c_dbfff5fe","line":671,"updated":"2020-05-14 20:54:28.000000000","message":"As an aid to other reviewers: getLayout() is called by prepareItem(). prepareItem() returns False if getLayout() returns None. prepareItem() is called by _processOneItem() and it checks the return value of prepareItem() and uses it as a ready(ness) flag. If it isn\u0027t ready it basically noops and the next loop through processQueue will check if things are ready again.\n\nAll that to say the return None here creates a delay in processQueue until the parent and child both have layouts ready.","commit_id":"d5b044c361facb466e0c5cbf0035d5b92923ae32"}]}
