)]}'
{"nodepool/zk.py":[{"author":{"_account_id":3099,"name":"David Shrewsbury","email":"dshrewsb@redhat.com","username":"dshrews"},"change_message_id":"d520bb7eec1e3d1851ea51894846d061617ec2f8","unresolved":false,"context_lines":[{"line_number":1932,"context_line":"        path \u003d self._nodePath(node_id)"},{"line_number":1933,"context_line":"        try:"},{"line_number":1934,"context_line":"            self.client.delete(path, recursive\u003dTrue)"},{"line_number":1935,"context_line":"        except kze.NotEmptyError:"},{"line_number":1936,"context_line":"            # basically, you can have a znode locked, then try to delete it."},{"line_number":1937,"context_line":"            # Because the lock is part of the znode itself, once the lock data"},{"line_number":1938,"context_line":"            # is deleted, another thread can attempt to lock the znode"},{"line_number":1939,"context_line":"            # before it disappears, causing new lock data to appear."},{"line_number":1940,"context_line":"            self.log.warning(\"%s yields NotEmptyError\", node_id)"},{"line_number":1941,"context_line":"        except kze.NoNodeError:"},{"line_number":1942,"context_line":"            pass"},{"line_number":1943,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"7faddb67_af32d5a5","line":1940,"range":{"start_line":1935,"start_character":0,"end_line":1940,"end_character":64},"updated":"2019-08-16 14:10:48.000000000","message":"We have to be careful with this since it\u0027s basically a change in functionality. Before, the error would propagate up to the caller of deleteNode(). Now it\u0027s hidden and we don\u0027t know if the delete is successful or not. For example, the call in NodeDeleter.delete() will immediately call manager.nodeDeletedNotification() after deleteNode() if it was successful. There\u0027s no way to tell if the node was actually deleted or not, so the notification may cause new failures if the node still exists.\n\nOne way I can think of dealing with this is having deleteNode() return True/False on success/failure, then calls to deleteNode() can check the return value.","commit_id":"8e1571d03a8e71cba60b00b8a95822b5fd3d59eb"},{"author":{"_account_id":9311,"name":"Tristan Cacqueray","email":"tdecacqu@redhat.com","username":"tristanC"},"change_message_id":"4c0d9824ab1d29c50d477b33aeb2ffe1e8b0edb4","unresolved":false,"context_lines":[{"line_number":1932,"context_line":"        path \u003d self._nodePath(node_id)"},{"line_number":1933,"context_line":"        try:"},{"line_number":1934,"context_line":"            self.client.delete(path, recursive\u003dTrue)"},{"line_number":1935,"context_line":"        except kze.NotEmptyError:"},{"line_number":1936,"context_line":"            # basically, you can have a znode locked, then try to delete it."},{"line_number":1937,"context_line":"            # Because the lock is part of the znode itself, once the lock data"},{"line_number":1938,"context_line":"            # is deleted, another thread can attempt to lock the znode"},{"line_number":1939,"context_line":"            # before it disappears, causing new lock data to appear."},{"line_number":1940,"context_line":"            self.log.warning(\"%s yields NotEmptyError\", node_id)"},{"line_number":1941,"context_line":"        except kze.NoNodeError:"},{"line_number":1942,"context_line":"            pass"},{"line_number":1943,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"7faddb67_cf99517a","line":1940,"range":{"start_line":1935,"start_character":0,"end_line":1940,"end_character":64},"in_reply_to":"7faddb67_af32d5a5","updated":"2019-08-16 14:16:44.000000000","message":"done","commit_id":"8e1571d03a8e71cba60b00b8a95822b5fd3d59eb"}]}
