)]}'
{"doc/source/admin/components.rst":[{"author":{"_account_id":29671,"name":"Albin Vass","email":"opendev@albinvass.com","username":"albin_vass"},"change_message_id":"1ce8a41e777b122a6de1e2a0a211986124040d4f","unresolved":false,"context_lines":[{"line_number":356,"context_line":"To start the scheduler, run ``zuul-scheduler``.  To stop it, kill the"},{"line_number":357,"context_line":"PID which was saved in the pidfile specified in the configuration."},{"line_number":358,"context_line":""},{"line_number":359,"context_line":"Reonfiguration"},{"line_number":360,"context_line":"~~~~~~~~~~~~~~"},{"line_number":361,"context_line":""},{"line_number":362,"context_line":"Most of Zuul\u0027s configuration is automatically updated as changes to"}],"source_content_type":"text/x-rst","patch_set":12,"id":"3fa7e38b_ea4611a8","line":359,"range":{"start_line":359,"start_character":0,"end_line":359,"end_character":14},"updated":"2019-12-16 15:10:57.000000000","message":"Reconfiguration :)","commit_id":"4b532d1a0a5656bc081fa56c7f0c8ef477b6b89b"},{"author":{"_account_id":9311,"name":"Tristan Cacqueray","email":"tdecacqu@redhat.com","username":"tristanC"},"change_message_id":"5b41fb258bda5316241de1c805a2e821d0c5ca3f","unresolved":false,"context_lines":[{"line_number":362,"context_line":"Most of Zuul\u0027s configuration is automatically updated as changes to"},{"line_number":363,"context_line":"the repositories which contain it are merged.  However, Zuul must be"},{"line_number":364,"context_line":"explicitly notified of changes to the tenant config file, since it is"},{"line_number":365,"context_line":"not read from a git repository. Zuul supports two kinds of reconfigurations."},{"line_number":366,"context_line":""},{"line_number":367,"context_line":"The full reconfiguration refetches and reloads the configuration of all"},{"line_number":368,"context_line":"tenants. To do so, run `zuul-scheduler full-reconfigure`. For example this"}],"source_content_type":"text/x-rst","patch_set":12,"id":"3fa7e38b_8af99d1d","line":365,"range":{"start_line":365,"start_character":32,"end_line":365,"end_character":76},"updated":"2019-12-16 14:32:19.000000000","message":"Do we need two kinds of reconfigurations? E.g. it seems like `full-reconfigure` could be replaced by a scheduler restart.","commit_id":"4b532d1a0a5656bc081fa56c7f0c8ef477b6b89b"},{"author":{"_account_id":1,"name":"James E. Blair","email":"jim@acmegating.com","username":"corvus"},"change_message_id":"a57a6b7bd5173fd2146075a0c0ead3fb09dcd3da","unresolved":false,"context_lines":[{"line_number":362,"context_line":"Most of Zuul\u0027s configuration is automatically updated as changes to"},{"line_number":363,"context_line":"the repositories which contain it are merged.  However, Zuul must be"},{"line_number":364,"context_line":"explicitly notified of changes to the tenant config file, since it is"},{"line_number":365,"context_line":"not read from a git repository. Zuul supports two kinds of reconfigurations."},{"line_number":366,"context_line":""},{"line_number":367,"context_line":"The full reconfiguration refetches and reloads the configuration of all"},{"line_number":368,"context_line":"tenants. To do so, run `zuul-scheduler full-reconfigure`. For example this"}],"source_content_type":"text/x-rst","patch_set":12,"id":"3fa7e38b_650d728e","line":365,"updated":"2019-12-16 15:37:10.000000000","message":"Full-reconfigure still keeps the queue contents in memory, but it clears the caches and so could be used to recover from errors.","commit_id":"4b532d1a0a5656bc081fa56c7f0c8ef477b6b89b"}],"zuul/configloader.py":[{"author":{"_account_id":16068,"name":"Tobias Henkel","email":"tobias.henkel@bmw.de","username":"tobias.henkel"},"change_message_id":"702ff35573393d8663069f84c49cc5160d54b4d4","unresolved":false,"context_lines":[{"line_number":2179,"context_line":"            # First check if the tenant is still existing and if not remove"},{"line_number":2180,"context_line":"            # from the abide."},{"line_number":2181,"context_line":"            if tenant.name not in unparsed_abide.known_tenants:"},{"line_number":2182,"context_line":"                del new_abide.tenants[tenant.name]"},{"line_number":2183,"context_line":"                return new_abide"},{"line_number":2184,"context_line":""},{"line_number":2185,"context_line":"            unparsed_config \u003d next(t for t in unparsed_abide.tenants"}],"source_content_type":"text/x-python","patch_set":9,"id":"7faddb67_ddf28c05","line":2182,"updated":"2019-08-30 08:29:23.000000000","message":"Deleted tenants get removed here.","commit_id":"d7e5b2360f9c9d2ab77d5d2aae0f987bbd3dcc54"}],"zuul/scheduler.py":[{"author":{"_account_id":2,"name":"Monty Taylor","email":"mordred@inaugust.com","username":"mordred"},"change_message_id":"7ba481794d76036196fce8c9287805421b7e39e4","unresolved":false,"context_lines":[{"line_number":707,"context_line":"        self.config \u003d event.config"},{"line_number":708,"context_line":"        try:"},{"line_number":709,"context_line":"            self.log.info(\"Full reconfiguration beginning\")"},{"line_number":710,"context_line":"            start \u003d time.monotonic()"},{"line_number":711,"context_line":""},{"line_number":712,"context_line":"            # Reload the ansible manager in case the default ansible version"},{"line_number":713,"context_line":"            # changed."}],"source_content_type":"text/x-python","patch_set":6,"id":"7faddb67_a2117c06","line":710,"updated":"2019-07-16 11:37:20.000000000","message":"Maybe we should do this in SmartReconfigure too","commit_id":"be7588209ad05033ecc315340fa3e574ebdeb188"},{"author":{"_account_id":16068,"name":"Tobias Henkel","email":"tobias.henkel@bmw.de","username":"tobias.henkel"},"change_message_id":"1af1cb46e0262d5bf29d544cc6ac2e37f2ad3682","unresolved":false,"context_lines":[{"line_number":707,"context_line":"        self.config \u003d event.config"},{"line_number":708,"context_line":"        try:"},{"line_number":709,"context_line":"            self.log.info(\"Full reconfiguration beginning\")"},{"line_number":710,"context_line":"            start \u003d time.monotonic()"},{"line_number":711,"context_line":""},{"line_number":712,"context_line":"            # Reload the ansible manager in case the default ansible version"},{"line_number":713,"context_line":"            # changed."}],"source_content_type":"text/x-python","patch_set":6,"id":"7faddb67_82e480e1","line":710,"in_reply_to":"7faddb67_8281e0fd","updated":"2019-07-16 11:49:58.000000000","message":"Done","commit_id":"be7588209ad05033ecc315340fa3e574ebdeb188"},{"author":{"_account_id":16068,"name":"Tobias Henkel","email":"tobias.henkel@bmw.de","username":"tobias.henkel"},"change_message_id":"10cbfebc7eb278ac41939b3deb0ccb26b9defe1d","unresolved":false,"context_lines":[{"line_number":707,"context_line":"        self.config \u003d event.config"},{"line_number":708,"context_line":"        try:"},{"line_number":709,"context_line":"            self.log.info(\"Full reconfiguration beginning\")"},{"line_number":710,"context_line":"            start \u003d time.monotonic()"},{"line_number":711,"context_line":""},{"line_number":712,"context_line":"            # Reload the ansible manager in case the default ansible version"},{"line_number":713,"context_line":"            # changed."}],"source_content_type":"text/x-python","patch_set":6,"id":"7faddb67_8281e0fd","line":710,"in_reply_to":"7faddb67_a2117c06","updated":"2019-07-16 11:44:19.000000000","message":"Yepp, we should","commit_id":"be7588209ad05033ecc315340fa3e574ebdeb188"},{"author":{"_account_id":2,"name":"Monty Taylor","email":"mordred@inaugust.com","username":"mordred"},"change_message_id":"7ba481794d76036196fce8c9287805421b7e39e4","unresolved":false,"context_lines":[{"line_number":735,"context_line":"            self.layout_lock.release()"},{"line_number":736,"context_line":""},{"line_number":737,"context_line":"        duration \u003d round(time.monotonic() - start, 3)"},{"line_number":738,"context_line":"        self.log.info(\"Full reconfiguration complete (duration: %s seconds)\","},{"line_number":739,"context_line":"                      duration)"},{"line_number":740,"context_line":""},{"line_number":741,"context_line":"    def _doSmartReconfigureEvent(self, event):"}],"source_content_type":"text/x-python","patch_set":6,"id":"7faddb67_22fd8cb0","line":738,"range":{"start_line":738,"start_character":53,"end_line":738,"end_character":75},"updated":"2019-07-16 11:37:20.000000000","message":"So that we can include a similar info in the log message.","commit_id":"be7588209ad05033ecc315340fa3e574ebdeb188"},{"author":{"_account_id":16068,"name":"Tobias Henkel","email":"tobias.henkel@bmw.de","username":"tobias.henkel"},"change_message_id":"1af1cb46e0262d5bf29d544cc6ac2e37f2ad3682","unresolved":false,"context_lines":[{"line_number":735,"context_line":"            self.layout_lock.release()"},{"line_number":736,"context_line":""},{"line_number":737,"context_line":"        duration \u003d round(time.monotonic() - start, 3)"},{"line_number":738,"context_line":"        self.log.info(\"Full reconfiguration complete (duration: %s seconds)\","},{"line_number":739,"context_line":"                      duration)"},{"line_number":740,"context_line":""},{"line_number":741,"context_line":"    def _doSmartReconfigureEvent(self, event):"}],"source_content_type":"text/x-python","patch_set":6,"id":"7faddb67_a2e97cb7","line":738,"range":{"start_line":738,"start_character":53,"end_line":738,"end_character":75},"in_reply_to":"7faddb67_22fd8cb0","updated":"2019-07-16 11:49:58.000000000","message":"Done","commit_id":"be7588209ad05033ecc315340fa3e574ebdeb188"},{"author":{"_account_id":2,"name":"Monty Taylor","email":"mordred@inaugust.com","username":"mordred"},"change_message_id":"7ba481794d76036196fce8c9287805421b7e39e4","unresolved":false,"context_lines":[{"line_number":786,"context_line":"                if tenant is not None:"},{"line_number":787,"context_line":"                    self._reconfigureTenant(tenant)"},{"line_number":788,"context_line":"                self.abide \u003d abide"},{"line_number":789,"context_line":"        self.log.info(\"Smart reconfiguration complete\")"},{"line_number":790,"context_line":""},{"line_number":791,"context_line":"    def _doTenantReconfigureEvent(self, event):"},{"line_number":792,"context_line":"        # This is called in the scheduler loop after another thread submits"}],"source_content_type":"text/x-python","patch_set":6,"id":"7faddb67_e2345495","line":789,"updated":"2019-07-16 11:37:20.000000000","message":"In addition to the duration, should we log which tenants we reconfigured?","commit_id":"be7588209ad05033ecc315340fa3e574ebdeb188"},{"author":{"_account_id":16068,"name":"Tobias Henkel","email":"tobias.henkel@bmw.de","username":"tobias.henkel"},"change_message_id":"1af1cb46e0262d5bf29d544cc6ac2e37f2ad3682","unresolved":false,"context_lines":[{"line_number":786,"context_line":"                if tenant is not None:"},{"line_number":787,"context_line":"                    self._reconfigureTenant(tenant)"},{"line_number":788,"context_line":"                self.abide \u003d abide"},{"line_number":789,"context_line":"        self.log.info(\"Smart reconfiguration complete\")"},{"line_number":790,"context_line":""},{"line_number":791,"context_line":"    def _doTenantReconfigureEvent(self, event):"},{"line_number":792,"context_line":"        # This is called in the scheduler loop after another thread submits"}],"source_content_type":"text/x-python","patch_set":6,"id":"7faddb67_42d20802","line":789,"in_reply_to":"7faddb67_0275f031","updated":"2019-07-16 11:49:58.000000000","message":"Done","commit_id":"be7588209ad05033ecc315340fa3e574ebdeb188"},{"author":{"_account_id":16068,"name":"Tobias Henkel","email":"tobias.henkel@bmw.de","username":"tobias.henkel"},"change_message_id":"10cbfebc7eb278ac41939b3deb0ccb26b9defe1d","unresolved":false,"context_lines":[{"line_number":786,"context_line":"                if tenant is not None:"},{"line_number":787,"context_line":"                    self._reconfigureTenant(tenant)"},{"line_number":788,"context_line":"                self.abide \u003d abide"},{"line_number":789,"context_line":"        self.log.info(\"Smart reconfiguration complete\")"},{"line_number":790,"context_line":""},{"line_number":791,"context_line":"    def _doTenantReconfigureEvent(self, event):"},{"line_number":792,"context_line":"        # This is called in the scheduler loop after another thread submits"}],"source_content_type":"text/x-python","patch_set":6,"id":"7faddb67_0275f031","line":789,"in_reply_to":"7faddb67_e2345495","updated":"2019-07-16 11:44:19.000000000","message":"++","commit_id":"be7588209ad05033ecc315340fa3e574ebdeb188"},{"author":{"_account_id":4146,"name":"Clark Boylan","email":"cboylan@sapwetik.org","username":"cboylan"},"change_message_id":"52ae5582861fb1ed16859136f7541e9a2ac8a8d8","unresolved":false,"context_lines":[{"line_number":542,"context_line":"        self._zuul_app.fullReconfigure()"},{"line_number":543,"context_line":""},{"line_number":544,"context_line":"    def smartReconfigureCommandHandler(self):"},{"line_number":545,"context_line":"        self._zuul_app.smartReconfigure()"},{"line_number":546,"context_line":""},{"line_number":547,"context_line":"    def start_repl(self):"},{"line_number":548,"context_line":"        if self.repl:"}],"source_content_type":"text/x-python","patch_set":9,"id":"7faddb67_df35a7a9","line":545,"updated":"2019-08-29 23:20:37.000000000","message":"I know the full reconfigure works this way too, but any idea why we have the scheduler call the app to call the scheduler?","commit_id":"d7e5b2360f9c9d2ab77d5d2aae0f987bbd3dcc54"},{"author":{"_account_id":16068,"name":"Tobias Henkel","email":"tobias.henkel@bmw.de","username":"tobias.henkel"},"change_message_id":"702ff35573393d8663069f84c49cc5160d54b4d4","unresolved":false,"context_lines":[{"line_number":542,"context_line":"        self._zuul_app.fullReconfigure()"},{"line_number":543,"context_line":""},{"line_number":544,"context_line":"    def smartReconfigureCommandHandler(self):"},{"line_number":545,"context_line":"        self._zuul_app.smartReconfigure()"},{"line_number":546,"context_line":""},{"line_number":547,"context_line":"    def start_repl(self):"},{"line_number":548,"context_line":"        if self.repl:"}],"source_content_type":"text/x-python","patch_set":9,"id":"7faddb67_eb9301ff","line":545,"in_reply_to":"7faddb67_df35a7a9","updated":"2019-08-30 08:29:23.000000000","message":"I don\u0027t know the initial reasoning but I\u0027d like to keep it the same. If we want to change that we could do a follow-up.","commit_id":"d7e5b2360f9c9d2ab77d5d2aae0f987bbd3dcc54"},{"author":{"_account_id":4146,"name":"Clark Boylan","email":"cboylan@sapwetik.org","username":"cboylan"},"change_message_id":"52ae5582861fb1ed16859136f7541e9a2ac8a8d8","unresolved":false,"context_lines":[{"line_number":771,"context_line":"            # all tenants from the currently known and the new ones."},{"line_number":772,"context_line":"            tenant_names \u003d {t for t in self.abide.tenants}"},{"line_number":773,"context_line":"            tenant_names.update("},{"line_number":774,"context_line":"                {t[\u0027name\u0027] for t in self.unparsed_abide.tenants})"},{"line_number":775,"context_line":"            for tenant_name in tenant_names:"},{"line_number":776,"context_line":"                old_tenant \u003d [x for x in old_unparsed_abide.tenants"},{"line_number":777,"context_line":"                              if x[\u0027name\u0027] \u003d\u003d tenant_name]"}],"source_content_type":"text/x-python","patch_set":9,"id":"7faddb67_bfaa2b81","line":774,"updated":"2019-08-29 23:20:37.000000000","message":"The unparsed abide config has a known_tenants set() that tracks these names already. You can remove this comprehension and use that.","commit_id":"d7e5b2360f9c9d2ab77d5d2aae0f987bbd3dcc54"},{"author":{"_account_id":16068,"name":"Tobias Henkel","email":"tobias.henkel@bmw.de","username":"tobias.henkel"},"change_message_id":"702ff35573393d8663069f84c49cc5160d54b4d4","unresolved":false,"context_lines":[{"line_number":771,"context_line":"            # all tenants from the currently known and the new ones."},{"line_number":772,"context_line":"            tenant_names \u003d {t for t in self.abide.tenants}"},{"line_number":773,"context_line":"            tenant_names.update("},{"line_number":774,"context_line":"                {t[\u0027name\u0027] for t in self.unparsed_abide.tenants})"},{"line_number":775,"context_line":"            for tenant_name in tenant_names:"},{"line_number":776,"context_line":"                old_tenant \u003d [x for x in old_unparsed_abide.tenants"},{"line_number":777,"context_line":"                              if x[\u0027name\u0027] \u003d\u003d tenant_name]"}],"source_content_type":"text/x-python","patch_set":9,"id":"7faddb67_0b677d27","line":774,"in_reply_to":"7faddb67_bfaa2b81","updated":"2019-08-30 08:29:23.000000000","message":"Done","commit_id":"d7e5b2360f9c9d2ab77d5d2aae0f987bbd3dcc54"},{"author":{"_account_id":4146,"name":"Clark Boylan","email":"cboylan@sapwetik.org","username":"cboylan"},"change_message_id":"52ae5582861fb1ed16859136f7541e9a2ac8a8d8","unresolved":false,"context_lines":[{"line_number":787,"context_line":"                    # correct name"},{"line_number":788,"context_line":"                    old_tenant \u003d Tenant(tenant_name)"},{"line_number":789,"context_line":"                abide \u003d loader.reloadTenant("},{"line_number":790,"context_line":"                    self.abide, old_tenant, self.ansible_manager,"},{"line_number":791,"context_line":"                    self.unparsed_abide)"},{"line_number":792,"context_line":""},{"line_number":793,"context_line":"                tenant \u003d abide.tenants.get(tenant_name)"}],"source_content_type":"text/x-python","patch_set":9,"id":"7faddb67_9f93af4e","line":790,"range":{"start_line":790,"start_character":20,"end_line":790,"end_character":30},"updated":"2019-08-29 23:20:37.000000000","message":"During a normal full reconfigure we create a new abide without any tenants and start from there. In this case we are reusing self.abide which means if tenants are deleted I don\u0027t think we will remove them from the abide leaking them.\n\nI\u0027m not sure this is a major concern as tenants probably don\u0027t get removed often but if we are trying to optimize this  we may want to consider it?","commit_id":"d7e5b2360f9c9d2ab77d5d2aae0f987bbd3dcc54"},{"author":{"_account_id":16068,"name":"Tobias Henkel","email":"tobias.henkel@bmw.de","username":"tobias.henkel"},"change_message_id":"702ff35573393d8663069f84c49cc5160d54b4d4","unresolved":false,"context_lines":[{"line_number":787,"context_line":"                    # correct name"},{"line_number":788,"context_line":"                    old_tenant \u003d Tenant(tenant_name)"},{"line_number":789,"context_line":"                abide \u003d loader.reloadTenant("},{"line_number":790,"context_line":"                    self.abide, old_tenant, self.ansible_manager,"},{"line_number":791,"context_line":"                    self.unparsed_abide)"},{"line_number":792,"context_line":""},{"line_number":793,"context_line":"                tenant \u003d abide.tenants.get(tenant_name)"}],"source_content_type":"text/x-python","patch_set":9,"id":"7faddb67_9d465421","line":790,"range":{"start_line":790,"start_character":20,"end_line":790,"end_character":30},"in_reply_to":"7faddb67_9f93af4e","updated":"2019-08-30 08:29:23.000000000","message":"In case of a deleted tenant we reload with a new tenant \u0027None\u0027 which causes it to be deleted in reloadTenant (see my comment in the configloader). The test case also verifies removed tenants (tenant-three gets removed in the test).","commit_id":"d7e5b2360f9c9d2ab77d5d2aae0f987bbd3dcc54"},{"author":{"_account_id":1,"name":"James E. Blair","email":"jim@acmegating.com","username":"corvus"},"change_message_id":"5a20f4f9b38e2371770302b3dcc3804181ab6687","unresolved":false,"context_lines":[{"line_number":862,"context_line":"                              if x[\u0027name\u0027] \u003d\u003d tenant_name]"},{"line_number":863,"context_line":"                new_tenant \u003d [x for x in self.unparsed_abide.tenants"},{"line_number":864,"context_line":"                              if x[\u0027name\u0027] \u003d\u003d tenant_name]"},{"line_number":865,"context_line":"                if old_tenant \u003d\u003d new_tenant:"},{"line_number":866,"context_line":"                    continue"},{"line_number":867,"context_line":""},{"line_number":868,"context_line":"                reconfigured_tenants.append(tenant_name)"}],"source_content_type":"text/x-python","patch_set":12,"id":"3fa7e38b_05d59eb8","line":865,"updated":"2019-12-16 15:42:44.000000000","message":"Note to reviewers: these are yaml dicts, so equality comparison should work as expected here.","commit_id":"4b532d1a0a5656bc081fa56c7f0c8ef477b6b89b"}]}
