)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":27582,"name":"Simon Westphahl","email":"simon.westphahl@bmw.de","username":"simon.westphahl"},"change_message_id":"59aded8708de2d44e07a11ede880ebf5548b0976","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"2efd8e91_f55b288e","updated":"2025-10-02 07:47:55.000000000","message":"recheck","commit_id":"4e6b466a65bf3d26e83210114945bd989c043f07"},{"author":{"_account_id":27582,"name":"Simon Westphahl","email":"simon.westphahl@bmw.de","username":"simon.westphahl"},"change_message_id":"609e0060143dad88616245cbbb5c0974f484302d","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"59c31887_7d0c13fc","updated":"2025-10-02 09:39:39.000000000","message":"recheck","commit_id":"4e6b466a65bf3d26e83210114945bd989c043f07"},{"author":{"_account_id":27582,"name":"Simon Westphahl","email":"simon.westphahl@bmw.de","username":"simon.westphahl"},"change_message_id":"c0259f90757eca07bd5cac549deee8d15b750409","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"b45aa2fd_bfbfef93","updated":"2025-09-30 05:54:51.000000000","message":"recheck","commit_id":"4e6b466a65bf3d26e83210114945bd989c043f07"}],"zuul/launcher/server.py":[{"author":{"_account_id":27582,"name":"Simon Westphahl","email":"simon.westphahl@bmw.de","username":"simon.westphahl"},"change_message_id":"5a2978e4ff4f8c4e3a7d95ab87cecc10e9b00154","unresolved":true,"context_lines":[{"line_number":1341,"context_line":"                        )"},{"line_number":1342,"context_line":"                        with self.createZKContext("},{"line_number":1343,"context_line":"                                nearest_lock, self.log) as ctx:"},{"line_number":1344,"context_line":"                            node.assign("},{"line_number":1345,"context_line":"                                ctx,"},{"line_number":1346,"context_line":"                                request_id\u003drequest.uuid,"},{"line_number":1347,"context_line":"                                tenant_name\u003drequest.tenant_name,"}],"source_content_type":"text/x-python","patch_set":2,"id":"3f94c02d_be8af6bc","line":1344,"updated":"2025-09-25 13:28:40.000000000","message":"I think we need to handle race conditions here and continue in case we get a `NodeExistsError`.","commit_id":"af07e3f08cf78e17e060f93e418935d46961f97a"},{"author":{"_account_id":1,"name":"James E. Blair","email":"jim@acmegating.com","username":"corvus"},"change_message_id":"6062c33be7bc046a49fd2f7b486d66dffc3e71f7","unresolved":false,"context_lines":[{"line_number":1341,"context_line":"                        )"},{"line_number":1342,"context_line":"                        with self.createZKContext("},{"line_number":1343,"context_line":"                                nearest_lock, self.log) as ctx:"},{"line_number":1344,"context_line":"                            node.assign("},{"line_number":1345,"context_line":"                                ctx,"},{"line_number":1346,"context_line":"                                request_id\u003drequest.uuid,"},{"line_number":1347,"context_line":"                                tenant_name\u003drequest.tenant_name,"}],"source_content_type":"text/x-python","patch_set":2,"id":"586d6c0b_366eb5b3","line":1344,"in_reply_to":"3f94c02d_be8af6bc","updated":"2025-09-25 13:52:05.000000000","message":"Agreed, this is opportunistic, and there\u0027s no need to fail here.","commit_id":"af07e3f08cf78e17e060f93e418935d46961f97a"}],"zuul/model.py":[{"author":{"_account_id":27582,"name":"Simon Westphahl","email":"simon.westphahl@bmw.de","username":"simon.westphahl"},"change_message_id":"5a2978e4ff4f8c4e3a7d95ab87cecc10e9b00154","unresolved":true,"context_lines":[{"line_number":2945,"context_line":"        self.assignment.internalCreate(context)"},{"line_number":2946,"context_line":""},{"line_number":2947,"context_line":"    def unassign(self, context):"},{"line_number":2948,"context_line":"        self.assignment._clear()"},{"line_number":2949,"context_line":"        self.assignment.delete(context)"},{"line_number":2950,"context_line":""},{"line_number":2951,"context_line":"    def deserialize(self, raw, context, extra\u003dNone):"},{"line_number":2952,"context_line":"        if context is not None:"}],"source_content_type":"text/x-python","patch_set":2,"id":"efd67a3c_6a00277a","line":2949,"range":{"start_line":2948,"start_character":0,"end_line":2949,"end_character":39},"updated":"2025-09-25 13:28:40.000000000","message":"Would it make sense to make this idempotent?\n\n```\ntry:\n    self.assignment.delete(context)\nexcept NoNodeError:\n    pass\nself.assignment._clear()\n```","commit_id":"af07e3f08cf78e17e060f93e418935d46961f97a"},{"author":{"_account_id":27582,"name":"Simon Westphahl","email":"simon.westphahl@bmw.de","username":"simon.westphahl"},"change_message_id":"95cdab592990177ec6063a2956f999d2cdff4c87","unresolved":false,"context_lines":[{"line_number":2945,"context_line":"        self.assignment.internalCreate(context)"},{"line_number":2946,"context_line":""},{"line_number":2947,"context_line":"    def unassign(self, context):"},{"line_number":2948,"context_line":"        self.assignment._clear()"},{"line_number":2949,"context_line":"        self.assignment.delete(context)"},{"line_number":2950,"context_line":""},{"line_number":2951,"context_line":"    def deserialize(self, raw, context, extra\u003dNone):"},{"line_number":2952,"context_line":"        if context is not None:"}],"source_content_type":"text/x-python","patch_set":2,"id":"618e6a9d_dbccc16d","line":2949,"range":{"start_line":2948,"start_character":0,"end_line":2949,"end_character":39},"in_reply_to":"efd67a3c_6a00277a","updated":"2025-09-26 11:44:54.000000000","message":"Done","commit_id":"af07e3f08cf78e17e060f93e418935d46961f97a"},{"author":{"_account_id":1,"name":"James E. Blair","email":"jim@acmegating.com","username":"corvus"},"change_message_id":"6062c33be7bc046a49fd2f7b486d66dffc3e71f7","unresolved":false,"context_lines":[{"line_number":2946,"context_line":""},{"line_number":2947,"context_line":"    def unassign(self, context):"},{"line_number":2948,"context_line":"        self.assignment._clear()"},{"line_number":2949,"context_line":"        self.assignment.delete(context)"},{"line_number":2950,"context_line":""},{"line_number":2951,"context_line":"    def deserialize(self, raw, context, extra\u003dNone):"},{"line_number":2952,"context_line":"        if context is not None:"}],"source_content_type":"text/x-python","patch_set":2,"id":"a6f481ae_8ba4a03b","line":2949,"in_reply_to":"efd67a3c_6a00277a","updated":"2025-09-25 13:52:05.000000000","message":"Sure, I don\u0027t think that will hurt (though it should not be necessary, and it might hide potential bugs).","commit_id":"af07e3f08cf78e17e060f93e418935d46961f97a"}]}
