)]}'
{"nova/tests/unit/virt/libvirt/test_driver.py":[{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"5d6467a29758f36243278063aa4ab4ad35b0851a","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"df7087c5_2b792392","updated":"2018-03-21 22:18:55.000000000","message":"Add tests for the two OSError branches.","commit_id":"0472bb8b4caa88a8237aaf42ed112e208c70b663"}],"nova/virt/libvirt/driver.py":[{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"98007201ccd52df0255c66e4e7910a75af490a65","unresolved":false,"context_lines":[{"line_number":1218,"context_line":"            # for the second time."},{"line_number":1219,"context_line":"            attempts \u003d 0"},{"line_number":1220,"context_line":"            while(os.path.exists(target) and attempts \u003c 5):"},{"line_number":1221,"context_line":"                shutil.rmtree(target)"},{"line_number":1222,"context_line":"                if os.path.exists(target):"},{"line_number":1223,"context_line":"                    time.sleep(random.randint(20, 200) / 100.0)"},{"line_number":1224,"context_line":"                attempts +\u003d 1"},{"line_number":1225,"context_line":""},{"line_number":1226,"context_line":"        root_disk \u003d self.image_backend.by_name(instance, \u0027disk\u0027)"}],"source_content_type":"text/x-python","patch_set":1,"id":"df7087c5_1d36f8e8","line":1223,"range":{"start_line":1221,"start_character":0,"end_line":1223,"end_character":63},"updated":"2018-03-21 11:58:30.000000000","message":"Is it possible to race here now? \u0027rm -rf\u0027 will not complain if it\u0027s told to remove a non-existent directory, but \u0027shutil.rmtree\u0027 will throw an OSError.","commit_id":"de59f9aa11547aa604f1dcd9bee1c1d24c76765a"},{"author":{"_account_id":2271,"name":"Michael Still","email":"mikal@stillhq.com","username":"mikalstill"},"change_message_id":"be88ca9117f12c65a3ffd370b71db03134ca4399","unresolved":false,"context_lines":[{"line_number":1218,"context_line":"            # for the second time."},{"line_number":1219,"context_line":"            attempts \u003d 0"},{"line_number":1220,"context_line":"            while(os.path.exists(target) and attempts \u003c 5):"},{"line_number":1221,"context_line":"                shutil.rmtree(target)"},{"line_number":1222,"context_line":"                if os.path.exists(target):"},{"line_number":1223,"context_line":"                    time.sleep(random.randint(20, 200) / 100.0)"},{"line_number":1224,"context_line":"                attempts +\u003d 1"},{"line_number":1225,"context_line":""},{"line_number":1226,"context_line":"        root_disk \u003d self.image_backend.by_name(instance, \u0027disk\u0027)"}],"source_content_type":"text/x-python","patch_set":1,"id":"df7087c5_ebd00ccc","line":1223,"range":{"start_line":1221,"start_character":0,"end_line":1223,"end_character":63},"in_reply_to":"df7087c5_1d36f8e8","updated":"2018-03-21 21:58:12.000000000","message":"It looks like I need to catch errno 2 here...\n\n\u003e\u003e\u003e import shutil\n\u003e\u003e\u003e import os\n\u003e\u003e\u003e os.makedirs(\u0027/tmp/foo\u0027)\n\u003e\u003e\u003e shutil.rmtree(\u0027/tmp/foo/bar\u0027)\nTraceback (most recent call last):\n  File \"\u003cstdin\u003e\", line 1, in \u003cmodule\u003e\n  File \"/usr/lib/python2.7/shutil.py\", line 239, in rmtree\n    onerror(os.listdir, path, sys.exc_info())\n  File \"/usr/lib/python2.7/shutil.py\", line 237, in rmtree\n    names \u003d os.listdir(path)\nOSError: [Errno 2] No such file or directory: \u0027/tmp/foo/bar\u0027","commit_id":"de59f9aa11547aa604f1dcd9bee1c1d24c76765a"},{"author":{"_account_id":6062,"name":"jichenjc","email":"jichenjc@cn.ibm.com","username":"jichenjc"},"change_message_id":"630a4b1d3c7f271643d6f58205dfb4a4e6cfec4b","unresolved":false,"context_lines":[{"line_number":1212,"context_line":"        inst_base \u003d libvirt_utils.get_instance_path(instance)"},{"line_number":1213,"context_line":"        target \u003d inst_base + \u0027_resize\u0027"},{"line_number":1214,"context_line":""},{"line_number":1215,"context_line":"        if os.path.exists(target):"},{"line_number":1216,"context_line":"            # Deletion can fail over NFS, so retry the deletion as required."},{"line_number":1217,"context_line":"            # Set maximum attempt as 5, most test can remove the directory"},{"line_number":1218,"context_line":"            # for the second time."}],"source_content_type":"text/x-python","patch_set":2,"id":"df7087c5_c0e95e80","line":1215,"range":{"start_line":1215,"start_character":8,"end_line":1215,"end_character":34},"updated":"2018-03-22 06:27:13.000000000","message":"I think don\u0027t need this \nbecause we have while condition below","commit_id":"0472bb8b4caa88a8237aaf42ed112e208c70b663"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"aebc33878414be1ff4d6eb1def954042dc6c3bce","unresolved":false,"context_lines":[{"line_number":1212,"context_line":"        inst_base \u003d libvirt_utils.get_instance_path(instance)"},{"line_number":1213,"context_line":"        target \u003d inst_base + \u0027_resize\u0027"},{"line_number":1214,"context_line":""},{"line_number":1215,"context_line":"        if os.path.exists(target):"},{"line_number":1216,"context_line":"            # Deletion can fail over NFS, so retry the deletion as required."},{"line_number":1217,"context_line":"            # Set maximum attempt as 5, most test can remove the directory"},{"line_number":1218,"context_line":"            # for the second time."}],"source_content_type":"text/x-python","patch_set":2,"id":"df7087c5_68f874c3","line":1215,"range":{"start_line":1215,"start_character":8,"end_line":1215,"end_character":34},"in_reply_to":"df7087c5_c0e95e80","updated":"2018-03-22 09:40:55.000000000","message":"+1","commit_id":"0472bb8b4caa88a8237aaf42ed112e208c70b663"},{"author":{"_account_id":6062,"name":"jichenjc","email":"jichenjc@cn.ibm.com","username":"jichenjc"},"change_message_id":"630a4b1d3c7f271643d6f58205dfb4a4e6cfec4b","unresolved":false,"context_lines":[{"line_number":1221,"context_line":"                try:"},{"line_number":1222,"context_line":"                    shutil.rmtree(target)"},{"line_number":1223,"context_line":"                except OSError as e:"},{"line_number":1224,"context_line":"                    if e.errno \u003d\u003d 2:"},{"line_number":1225,"context_line":"                        # Directory went away in a race"},{"line_number":1226,"context_line":"                        break"},{"line_number":1227,"context_line":""},{"line_number":1228,"context_line":"                if os.path.exists(target):"},{"line_number":1229,"context_line":"                    time.sleep(random.randint(20, 200) / 100.0)"}],"source_content_type":"text/x-python","patch_set":2,"id":"df7087c5_00f0b666","line":1226,"range":{"start_line":1224,"start_character":20,"end_line":1226,"end_character":29},"updated":"2018-03-22 06:27:13.000000000","message":"as Eric pointed out, this might need some test","commit_id":"0472bb8b4caa88a8237aaf42ed112e208c70b663"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"aebc33878414be1ff4d6eb1def954042dc6c3bce","unresolved":false,"context_lines":[{"line_number":1221,"context_line":"                try:"},{"line_number":1222,"context_line":"                    shutil.rmtree(target)"},{"line_number":1223,"context_line":"                except OSError as e:"},{"line_number":1224,"context_line":"                    if e.errno \u003d\u003d 2:"},{"line_number":1225,"context_line":"                        # Directory went away in a race"},{"line_number":1226,"context_line":"                        break"},{"line_number":1227,"context_line":""},{"line_number":1228,"context_line":"                if os.path.exists(target):"},{"line_number":1229,"context_line":"                    time.sleep(random.randint(20, 200) / 100.0)"}],"source_content_type":"text/x-python","patch_set":2,"id":"df7087c5_0831b8a2","line":1226,"range":{"start_line":1224,"start_character":20,"end_line":1226,"end_character":29},"in_reply_to":"df7087c5_00f0b666","updated":"2018-03-22 09:40:55.000000000","message":"Or, better yet, just use the \u0027ignore_errors\u0027 argument? No need for a unit test then","commit_id":"0472bb8b4caa88a8237aaf42ed112e208c70b663"},{"author":{"_account_id":6062,"name":"jichenjc","email":"jichenjc@cn.ibm.com","username":"jichenjc"},"change_message_id":"eb7f9f67be198dfcd412eef3c7a6bffe9b0d2799","unresolved":false,"context_lines":[{"line_number":1203,"context_line":"        inst_base \u003d libvirt_utils.get_instance_path(instance)"},{"line_number":1204,"context_line":"        target \u003d inst_base + \u0027_resize\u0027"},{"line_number":1205,"context_line":""},{"line_number":1206,"context_line":"        if os.path.exists(target):"},{"line_number":1207,"context_line":"            # Deletion can fail over NFS, so retry the deletion as required."},{"line_number":1208,"context_line":"            # Set maximum attempt as 5, most test can remove the directory"},{"line_number":1209,"context_line":"            # for the second time."}],"source_content_type":"text/x-python","patch_set":3,"id":"bf659307_1636d053","line":1206,"range":{"start_line":1206,"start_character":8,"end_line":1206,"end_character":34},"updated":"2018-03-28 02:36:26.000000000","message":"comment on last patch not addressed","commit_id":"6d8a7892b4c9966a0a1c428663385469d55fd57f"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"a5b055b7d2e61899edffc0f98b8e6292980e8f90","unresolved":false,"context_lines":[{"line_number":1203,"context_line":"        inst_base \u003d libvirt_utils.get_instance_path(instance)"},{"line_number":1204,"context_line":"        target \u003d inst_base + \u0027_resize\u0027"},{"line_number":1205,"context_line":""},{"line_number":1206,"context_line":"        if os.path.exists(target):"},{"line_number":1207,"context_line":"            # Deletion can fail over NFS, so retry the deletion as required."},{"line_number":1208,"context_line":"            # Set maximum attempt as 5, most test can remove the directory"},{"line_number":1209,"context_line":"            # for the second time."}],"source_content_type":"text/x-python","patch_set":3,"id":"bf659307_fd620d3e","line":1206,"range":{"start_line":1206,"start_character":8,"end_line":1206,"end_character":34},"in_reply_to":"bf659307_1636d053","updated":"2018-03-28 12:50:38.000000000","message":"Agree we don\u0027t need this condition anymore.","commit_id":"6d8a7892b4c9966a0a1c428663385469d55fd57f"}]}
