)]}'
{"nova/tests/unit/virt/libvirt/test_volume.py":[{"author":{"_account_id":6849,"name":"Roman Podoliaka","email":"roman.podoliaka@gmail.com","username":"rpodolyaka"},"change_message_id":"162f1767bfa48decdfd5d823a804f7fcebb3d66a","unresolved":false,"context_lines":[{"line_number":372,"context_line":"            self.assertEqual(\"/dev/mapper/mpath2\", map[\"/dev/sde\"])"},{"line_number":373,"context_line":"            self.assertEqual(4, len(map))"},{"line_number":374,"context_line":""},{"line_number":375,"context_line":"            mock_run_multipath.return_value \u003d (\"\",)"},{"line_number":376,"context_line":"            map \u003d libvirt_driver._get_multipath_device_map()"},{"line_number":377,"context_line":"            self.assertEqual(0, len(map))"},{"line_number":378,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"ba3cc151_589e93b9","line":375,"updated":"2015-07-10 09:54:59.000000000","message":"nit: this should be a separate test case","commit_id":"658aa1738e2df5a8c43fe48d7476a266bc89d4bf"},{"author":{"_account_id":6849,"name":"Roman Podoliaka","email":"roman.podoliaka@gmail.com","username":"rpodolyaka"},"change_message_id":"19e790261162c3ebcae741429c963d4b2f387b47","unresolved":false,"context_lines":[{"line_number":372,"context_line":"            self.assertEqual(\"/dev/mapper/mpath2\", map[\"/dev/sde\"])"},{"line_number":373,"context_line":"            self.assertEqual(4, len(map))"},{"line_number":374,"context_line":""},{"line_number":375,"context_line":"            mock_run_multipath.return_value \u003d (\"\",)"},{"line_number":376,"context_line":"            map \u003d libvirt_driver._get_multipath_device_map()"},{"line_number":377,"context_line":"            self.assertEqual(0, len(map))"},{"line_number":378,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"9a41bdd9_1c18db1c","line":375,"updated":"2015-07-13 16:29:14.000000000","message":"oops. you must have forgotten to remove this after splitting into a separate test case","commit_id":"0c2aaf05f7124588726c1388bc3f9a1ecd2dfc86"},{"author":{"_account_id":10618,"name":"Pavel Kholkin","email":"p.v.holkin@mail.ru","username":"pkholkin"},"change_message_id":"1d3aedcedb137c528ea2623ab77d424037686241","unresolved":false,"context_lines":[{"line_number":372,"context_line":"            self.assertEqual(\"/dev/mapper/mpath2\", map[\"/dev/sde\"])"},{"line_number":373,"context_line":"            self.assertEqual(4, len(map))"},{"line_number":374,"context_line":""},{"line_number":375,"context_line":"            mock_run_multipath.return_value \u003d (\"\",)"},{"line_number":376,"context_line":"            map \u003d libvirt_driver._get_multipath_device_map()"},{"line_number":377,"context_line":"            self.assertEqual(0, len(map))"},{"line_number":378,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"9a41bdd9_b07afdef","line":375,"in_reply_to":"9a41bdd9_1c18db1c","updated":"2015-07-14 06:35:02.000000000","message":"oops, yes of course, sorry) thanks!","commit_id":"0c2aaf05f7124588726c1388bc3f9a1ecd2dfc86"}],"nova/virt/libvirt/volume.py":[{"author":{"_account_id":6849,"name":"Roman Podoliaka","email":"roman.podoliaka@gmail.com","username":"rpodolyaka"},"change_message_id":"c5206faf9a6d608f2c202d644fa4165f2438f6f4","unresolved":false,"context_lines":[{"line_number":805,"context_line":"        return iqns"},{"line_number":806,"context_line":""},{"line_number":807,"context_line":"    def _get_multipath_device_map(self):"},{"line_number":808,"context_line":"        mpath_dev_check_re \u003d re.compile(\"\\s+dm-\\d+\\s+\")"},{"line_number":809,"context_line":"        path_check_re \u003d re.compile(\"\\s+\\d+:\\d+:\\d+:\\d+\\s+\")"},{"line_number":810,"context_line":"        mpath_cmd \u003d [\u0027-ll\u0027]"},{"line_number":811,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"9af37de9_6031890b","line":808,"updated":"2015-05-11 13:43:19.000000000","message":"not a big deal, but we could compile these REs just once rather than on every _get_multipath_device_map() call","commit_id":"2b3cb9a3f9bd96a21e18dc741784119a5b80149f"},{"author":{"_account_id":10618,"name":"Pavel Kholkin","email":"p.v.holkin@mail.ru","username":"pkholkin"},"change_message_id":"5351a168eb36dfb3e29c0b0f349f2b00c35380ac","unresolved":false,"context_lines":[{"line_number":805,"context_line":"        return iqns"},{"line_number":806,"context_line":""},{"line_number":807,"context_line":"    def _get_multipath_device_map(self):"},{"line_number":808,"context_line":"        mpath_dev_check_re \u003d re.compile(\"\\s+dm-\\d+\\s+\")"},{"line_number":809,"context_line":"        path_check_re \u003d re.compile(\"\\s+\\d+:\\d+:\\d+:\\d+\\s+\")"},{"line_number":810,"context_line":"        mpath_cmd \u003d [\u0027-ll\u0027]"},{"line_number":811,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"ba3cc151_3e0725cb","line":808,"in_reply_to":"9a0c5dc1_7f236a06","updated":"2015-07-09 14:44:12.000000000","message":"Done","commit_id":"2b3cb9a3f9bd96a21e18dc741784119a5b80149f"},{"author":{"_account_id":13847,"name":"Keiichi KII","email":"k-keiichi@bx.jp.nec.com","username":"kii"},"change_message_id":"81b4ac2cc825be49e49adae615f0630be482a716","unresolved":false,"context_lines":[{"line_number":805,"context_line":"        return iqns"},{"line_number":806,"context_line":""},{"line_number":807,"context_line":"    def _get_multipath_device_map(self):"},{"line_number":808,"context_line":"        mpath_dev_check_re \u003d re.compile(\"\\s+dm-\\d+\\s+\")"},{"line_number":809,"context_line":"        path_check_re \u003d re.compile(\"\\s+\\d+:\\d+:\\d+:\\d+\\s+\")"},{"line_number":810,"context_line":"        mpath_cmd \u003d [\u0027-ll\u0027]"},{"line_number":811,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"9a0c5dc1_7f236a06","line":808,"in_reply_to":"9af37de9_6031890b","updated":"2015-05-12 10:02:26.000000000","message":"Yes, I will fix it.","commit_id":"2b3cb9a3f9bd96a21e18dc741784119a5b80149f"},{"author":{"_account_id":6849,"name":"Roman Podoliaka","email":"roman.podoliaka@gmail.com","username":"rpodolyaka"},"change_message_id":"c5206faf9a6d608f2c202d644fa4165f2438f6f4","unresolved":false,"context_lines":[{"line_number":894,"context_line":"    def _get_transport(self):"},{"line_number":895,"context_line":"        return \u0027iser\u0027"},{"line_number":896,"context_line":""},{"line_number":897,"context_line":"    def _get_multipath_iqns(self, multipath_devices):"},{"line_number":898,"context_line":"        mpath_map \u003d self._get_multipath_device_map()"},{"line_number":899,"context_line":"        entries \u003d self._get_iscsi_devices()"},{"line_number":900,"context_line":"        iqns \u003d []"}],"source_content_type":"text/x-python","patch_set":1,"id":"9af37de9_404fa592","line":897,"updated":"2015-05-11 13:43:19.000000000","message":"can we reuse implementation from #794 here?","commit_id":"2b3cb9a3f9bd96a21e18dc741784119a5b80149f"},{"author":{"_account_id":10618,"name":"Pavel Kholkin","email":"p.v.holkin@mail.ru","username":"pkholkin"},"change_message_id":"5351a168eb36dfb3e29c0b0f349f2b00c35380ac","unresolved":false,"context_lines":[{"line_number":894,"context_line":"    def _get_transport(self):"},{"line_number":895,"context_line":"        return \u0027iser\u0027"},{"line_number":896,"context_line":""},{"line_number":897,"context_line":"    def _get_multipath_iqns(self, multipath_devices):"},{"line_number":898,"context_line":"        mpath_map \u003d self._get_multipath_device_map()"},{"line_number":899,"context_line":"        entries \u003d self._get_iscsi_devices()"},{"line_number":900,"context_line":"        iqns \u003d []"}],"source_content_type":"text/x-python","patch_set":1,"id":"ba3cc151_1e1021ff","line":897,"in_reply_to":"9a0c5dc1_7f5b6a55","updated":"2015-07-09 14:44:12.000000000","message":"Done","commit_id":"2b3cb9a3f9bd96a21e18dc741784119a5b80149f"},{"author":{"_account_id":13847,"name":"Keiichi KII","email":"k-keiichi@bx.jp.nec.com","username":"kii"},"change_message_id":"81b4ac2cc825be49e49adae615f0630be482a716","unresolved":false,"context_lines":[{"line_number":894,"context_line":"    def _get_transport(self):"},{"line_number":895,"context_line":"        return \u0027iser\u0027"},{"line_number":896,"context_line":""},{"line_number":897,"context_line":"    def _get_multipath_iqns(self, multipath_devices):"},{"line_number":898,"context_line":"        mpath_map \u003d self._get_multipath_device_map()"},{"line_number":899,"context_line":"        entries \u003d self._get_iscsi_devices()"},{"line_number":900,"context_line":"        iqns \u003d []"}],"source_content_type":"text/x-python","patch_set":1,"id":"9a0c5dc1_7f5b6a55","line":897,"in_reply_to":"9af37de9_404fa592","updated":"2015-05-12 10:02:26.000000000","message":"Yes, we can. I will change it.","commit_id":"2b3cb9a3f9bd96a21e18dc741784119a5b80149f"},{"author":{"_account_id":6849,"name":"Roman Podoliaka","email":"roman.podoliaka@gmail.com","username":"rpodolyaka"},"change_message_id":"162f1767bfa48decdfd5d823a804f7fcebb3d66a","unresolved":false,"context_lines":[{"line_number":822,"context_line":""},{"line_number":823,"context_line":"            m \u003d self.mpath_dev_check_re.split(line)"},{"line_number":824,"context_line":"            if len(m) \u003e\u003d 2:"},{"line_number":825,"context_line":"                mpath_dev \u003d \u0027/dev/mapper/\u0027 + m[0].split(\" \")[0]"},{"line_number":826,"context_line":"                continue"},{"line_number":827,"context_line":""},{"line_number":828,"context_line":"            m \u003d self.path_check_re.split(line)"}],"source_content_type":"text/x-python","patch_set":2,"id":"ba3cc151_185a4b2b","line":825,"updated":"2015-07-10 09:54:59.000000000","message":"nit: it\u0027s better to use os.path.join() here\n\nnit: we could add a group to the pattern, so that we can access it contents by name and don\u0027t have to split explicitly","commit_id":"658aa1738e2df5a8c43fe48d7476a266bc89d4bf"},{"author":{"_account_id":6849,"name":"Roman Podoliaka","email":"roman.podoliaka@gmail.com","username":"rpodolyaka"},"change_message_id":"162f1767bfa48decdfd5d823a804f7fcebb3d66a","unresolved":false,"context_lines":[{"line_number":827,"context_line":""},{"line_number":828,"context_line":"            m \u003d self.path_check_re.split(line)"},{"line_number":829,"context_line":"            if len(m) \u003e\u003d 2:"},{"line_number":830,"context_line":"                mpath_map[\u0027/dev/\u0027 + m[1].split(\" \")[0]] \u003d mpath_dev"},{"line_number":831,"context_line":"                continue"},{"line_number":832,"context_line":"        if len(out) and (mpath_dev is None or len(mpath_map) \u003d\u003d 0):"},{"line_number":833,"context_line":"            LOG.warn(_LW(\"Failed to parse the output of multipath -ll: \""}],"source_content_type":"text/x-python","patch_set":2,"id":"ba3cc151_b83f9fb4","line":830,"updated":"2015-07-10 09:54:59.000000000","message":"ditto","commit_id":"658aa1738e2df5a8c43fe48d7476a266bc89d4bf"}]}
