)]}'
{"nova/tests/unit/virt/libvirt/test_utils.py":[{"author":{"_account_id":9555,"name":"Matthew Booth","email":"mbooth@redhat.com","username":"MatthewBooth"},"change_message_id":"8576012c22309f6ed0e4e48f304afcb8cd13e038","unresolved":false,"context_lines":[{"line_number":776,"context_line":""},{"line_number":777,"context_line":"            proc_umnt \u003d mock.mock_open(read_data\u003dproc_without_mnt)"},{"line_number":778,"context_line":"            with mock.patch.object(six.moves.builtins, \"open\", proc_umnt):"},{"line_number":779,"context_line":"                self.assertFalse(libvirt_utils.is_mounted(mount_path, source))"}],"source_content_type":"text/x-python","patch_set":4,"id":"7a3c09a3_531d1abc","line":779,"updated":"2017-01-16 10:44:11.000000000","message":"You\u0027re missing a critical test case here: it should return false if we specified a source which doesn\u0027t match what\u0027s present.","commit_id":"8697c1cb31300ab59ba5d406bbefaa22d4c56d70"}],"nova/tests/unit/virt/libvirt/volume/test_quobyte.py":[{"author":{"_account_id":9555,"name":"Matthew Booth","email":"mbooth@redhat.com","username":"MatthewBooth"},"change_message_id":"8576012c22309f6ed0e4e48f304afcb8cd13e038","unresolved":false,"context_lines":[{"line_number":319,"context_line":"        libvirt_driver.disconnect_volume(connection_info, \"vde\")"},{"line_number":320,"context_line":""},{"line_number":321,"context_line":"    @mock.patch.object(libvirt_utils, \u0027is_mounted\u0027, return_value\u003dTrue)"},{"line_number":322,"context_line":"    @mock.patch.object(os, \u0027stat\u0027)"},{"line_number":323,"context_line":"    def test_libvirt_quobyte_driver_mount_non_quobyte_volume(self,"},{"line_number":324,"context_line":"            mock_os_stat, mock_is_mounted):"},{"line_number":325,"context_line":"        mnt_base \u003d \u0027/mnt\u0027"}],"source_content_type":"text/x-python","patch_set":4,"id":"7a3c09a3_73ef7687","line":322,"updated":"2017-01-16 10:44:11.000000000","message":"Why?","commit_id":"8697c1cb31300ab59ba5d406bbefaa22d4c56d70"},{"author":{"_account_id":10135,"name":"Lee Yarwood","display_name":"Lee Yarwood","email":"lyarwood@redhat.com","username":"lyarwood"},"change_message_id":"f07dd72542233ee2a5013c945976093970a2fe17","unresolved":false,"context_lines":[{"line_number":319,"context_line":"        libvirt_driver.disconnect_volume(connection_info, \"vde\")"},{"line_number":320,"context_line":""},{"line_number":321,"context_line":"    @mock.patch.object(libvirt_utils, \u0027is_mounted\u0027, return_value\u003dTrue)"},{"line_number":322,"context_line":"    @mock.patch.object(os, \u0027stat\u0027)"},{"line_number":323,"context_line":"    def test_libvirt_quobyte_driver_mount_non_quobyte_volume(self,"},{"line_number":324,"context_line":"            mock_os_stat, mock_is_mounted):"},{"line_number":325,"context_line":"        mnt_base \u003d \u0027/mnt\u0027"}],"source_content_type":"text/x-python","patch_set":4,"id":"7a3c09a3_9e3b099c","line":322,"in_reply_to":"7a3c09a3_73ef7687","updated":"2017-01-16 10:49:41.000000000","message":"LibvirtQuobyteVolumeDriver.connect_volume will try to stat  mount_path if is_mounted returns True [1].\n\n[1] https://github.com/openstack/nova/blob/ad1c7ac2b102112280a25927d731edb168f80998/nova/virt/libvirt/volume/quobyte.py#L120","commit_id":"8697c1cb31300ab59ba5d406bbefaa22d4c56d70"}],"nova/virt/libvirt/utils.py":[{"author":{"_account_id":9555,"name":"Matthew Booth","email":"mbooth@redhat.com","username":"MatthewBooth"},"change_message_id":"8576012c22309f6ed0e4e48f304afcb8cd13e038","unresolved":false,"context_lines":[{"line_number":511,"context_line":""},{"line_number":512,"context_line":"    with open(\u0027/proc/mounts\u0027, \u0027r\u0027) as proc_mounts:"},{"line_number":513,"context_line":"        mounts \u003d [mount.split() for mount in proc_mounts.readlines()]"},{"line_number":514,"context_line":"        return any(mnt[0] \u003d\u003d source and mnt[1] \u003d\u003d mount_path for mnt in mounts)"},{"line_number":515,"context_line":""},{"line_number":516,"context_line":""},{"line_number":517,"context_line":"def is_valid_hostname(hostname):"}],"source_content_type":"text/x-python","patch_set":4,"id":"7a3c09a3_33788e2a","line":514,"updated":"2017-01-16 10:44:11.000000000","message":"Nice. I suspect os.path.ismount() also iterates over /proc/mounts, but this is better than optimising that imho.","commit_id":"8697c1cb31300ab59ba5d406bbefaa22d4c56d70"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"5926b90295604b53d57430c4ad133e9fb62602d3","unresolved":false,"context_lines":[{"line_number":511,"context_line":""},{"line_number":512,"context_line":"    with open(\u0027/proc/mounts\u0027, \u0027r\u0027) as proc_mounts:"},{"line_number":513,"context_line":"        mounts \u003d [mount.split() for mount in proc_mounts.readlines()]"},{"line_number":514,"context_line":"        return any(mnt[0] \u003d\u003d source and mnt[1] \u003d\u003d mount_path for mnt in mounts)"},{"line_number":515,"context_line":""},{"line_number":516,"context_line":""},{"line_number":517,"context_line":"def is_valid_hostname(hostname):"}],"source_content_type":"text/x-python","patch_set":5,"id":"1a430d35_e37848fb","line":514,"range":{"start_line":514,"start_character":19,"end_line":514,"end_character":35},"updated":"2017-02-03 11:18:35.000000000","message":"I am wondering if these are always in the same format. Like nfs vs nfs3.\n\nIt almost seems safer to do mnt[0].contains(source), but that might lead to false positives, in extreme cases.","commit_id":"86b361d9166200db2174be87214190a29e77f98f"}]}
