)]}'
{"os_brick/initiator/windows/fibre_channel.py":[{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"claudiu.belu@canonical.com","username":"claudiub"},"change_message_id":"ea23a8d57a998d1e0f2cdf4dfac30560f185b657","unresolved":false,"context_lines":[{"line_number":120,"context_line":""},{"line_number":121,"context_line":"        return volume_mappings"},{"line_number":122,"context_line":""},{"line_number":123,"context_line":"    def _get_fc_hba_mapping(self):"},{"line_number":124,"context_line":"        mapping \u003d collections.defaultdict(list)"},{"line_number":125,"context_line":"        fc_hba_ports \u003d self._fc_utils.get_fc_hba_ports()"},{"line_number":126,"context_line":"        for port in fc_hba_ports:"}],"source_content_type":"text/x-python","patch_set":2,"id":"9abb7d3a_77df093a","line":123,"updated":"2016-06-01 17:01:38.000000000","message":"micro-nit: since this can return more than one mapping... rename it to _get_fc_hba_mappings? the test name will have to be updated too. L113 will become hba_mappings too.","commit_id":"ec5c9e505d82adc5679859eec702e963a8f4a50d"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"87a09575a53eb486b8a3d9aa0462a9e35c56b345","unresolved":false,"context_lines":[{"line_number":52,"context_line":"        if not volume_paths:"},{"line_number":53,"context_line":"            raise exception.NoFibreChannelVolumeDeviceFound()"},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"        device_path \u003d volume_paths[0]"},{"line_number":56,"context_line":"        device_number \u003d self._diskutils.get_device_number_from_device_name("},{"line_number":57,"context_line":"            device_path)"},{"line_number":58,"context_line":"        scsi_wwn \u003d self._get_scsi_wwn(device_number)"}],"source_content_type":"text/x-python","patch_set":9,"id":"1aa78d24_66a94290","line":55,"updated":"2016-07-06 18:45:33.000000000","message":"what happens with Multipath is enabled?  Does Windows provide a specific Multipath IO device vs generic volume paths?\n\nIn linux when multipath is enabled, you get a multipath device to use for all IO.  This is what is returned instead of the raw device paths that show up.","commit_id":"765c76d22871473624cc3ae15c73569153ca67b1"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"616c779d2a25512c4320e5c42f0ca07135bc52eb","unresolved":false,"context_lines":[{"line_number":52,"context_line":"        if not volume_paths:"},{"line_number":53,"context_line":"            raise exception.NoFibreChannelVolumeDeviceFound()"},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"        device_path \u003d volume_paths[0]"},{"line_number":56,"context_line":"        device_number \u003d self._diskutils.get_device_number_from_device_name("},{"line_number":57,"context_line":"            device_path)"},{"line_number":58,"context_line":"        scsi_wwn \u003d self._get_scsi_wwn(device_number)"}],"source_content_type":"text/x-python","patch_set":9,"id":"1aa78d24_7ce4eaaa","line":55,"in_reply_to":"1aa78d24_41294be5","updated":"2016-07-07 20:15:54.000000000","message":"ok I\u0027ll take your word for it.  This just looks odd to me, but then again.....this is M$ Windows.","commit_id":"765c76d22871473624cc3ae15c73569153ca67b1"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"826e0e662519f188fa342ea583c2b924a16f2e49","unresolved":false,"context_lines":[{"line_number":52,"context_line":"        if not volume_paths:"},{"line_number":53,"context_line":"            raise exception.NoFibreChannelVolumeDeviceFound()"},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"        device_path \u003d volume_paths[0]"},{"line_number":56,"context_line":"        device_number \u003d self._diskutils.get_device_number_from_device_name("},{"line_number":57,"context_line":"            device_path)"},{"line_number":58,"context_line":"        scsi_wwn \u003d self._get_scsi_wwn(device_number)"}],"source_content_type":"text/x-python","patch_set":9,"id":"1aa78d24_abbbaec2","line":55,"in_reply_to":"1aa78d24_5d0a107a","updated":"2016-07-07 19:05:34.000000000","message":"how do you know that volume_paths[0] is the multipath device though?","commit_id":"765c76d22871473624cc3ae15c73569153ca67b1"},{"author":{"_account_id":8543,"name":"Lucian Petrut","email":"lpetrut@cloudbasesolutions.com","username":"plucian"},"change_message_id":"db3f37e0f7c9ce01ec730f78f66f0257a0634533","unresolved":false,"context_lines":[{"line_number":52,"context_line":"        if not volume_paths:"},{"line_number":53,"context_line":"            raise exception.NoFibreChannelVolumeDeviceFound()"},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"        device_path \u003d volume_paths[0]"},{"line_number":56,"context_line":"        device_number \u003d self._diskutils.get_device_number_from_device_name("},{"line_number":57,"context_line":"            device_path)"},{"line_number":58,"context_line":"        scsi_wwn \u003d self._get_scsi_wwn(device_number)"}],"source_content_type":"text/x-python","patch_set":9,"id":"1aa78d24_5d0a107a","line":55,"in_reply_to":"1aa78d24_66a94290","updated":"2016-07-06 19:31:08.000000000","message":"Yep, we\u0027ll get one multipath device, unless the MPIO service is not configured to claim the paths (we already have checks preventing this).\n\nBasically, each time a new path becomes available, a new device is presented by the PnP service. The MPIO service claims it, in the end a single device being exposed.\n\nFor consistency, the get_volume_paths method will always return a list.","commit_id":"765c76d22871473624cc3ae15c73569153ca67b1"},{"author":{"_account_id":8543,"name":"Lucian Petrut","email":"lpetrut@cloudbasesolutions.com","username":"plucian"},"change_message_id":"6ef6f95a3bd05f8cf584ed8013968d06f15ffd3b","unresolved":false,"context_lines":[{"line_number":52,"context_line":"        if not volume_paths:"},{"line_number":53,"context_line":"            raise exception.NoFibreChannelVolumeDeviceFound()"},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"        device_path \u003d volume_paths[0]"},{"line_number":56,"context_line":"        device_number \u003d self._diskutils.get_device_number_from_device_name("},{"line_number":57,"context_line":"            device_path)"},{"line_number":58,"context_line":"        scsi_wwn \u003d self._get_scsi_wwn(device_number)"}],"source_content_type":"text/x-python","patch_set":9,"id":"1aa78d24_9f070381","line":55,"in_reply_to":"1aa78d24_7ce4eaaa","updated":"2016-07-07 22:32:33.000000000","message":"I was thinking about placing some links to MS docs in commit messages or even inline, but those URLs change a lot for some reason.","commit_id":"765c76d22871473624cc3ae15c73569153ca67b1"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"a919c2808dca4af192eea290f87751ea43faac55","unresolved":false,"context_lines":[{"line_number":52,"context_line":"        if not volume_paths:"},{"line_number":53,"context_line":"            raise exception.NoFibreChannelVolumeDeviceFound()"},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"        device_path \u003d volume_paths[0]"},{"line_number":56,"context_line":"        device_number \u003d self._diskutils.get_device_number_from_device_name("},{"line_number":57,"context_line":"            device_path)"},{"line_number":58,"context_line":"        scsi_wwn \u003d self._get_scsi_wwn(device_number)"}],"source_content_type":"text/x-python","patch_set":9,"id":"1aa78d24_cecf9654","line":55,"in_reply_to":"1aa78d24_9f070381","updated":"2016-07-11 23:02:48.000000000","message":"ok, then can we add a comment about what volume_paths[0] means when multipath is on vs. off?","commit_id":"765c76d22871473624cc3ae15c73569153ca67b1"},{"author":{"_account_id":8543,"name":"Lucian Petrut","email":"lpetrut@cloudbasesolutions.com","username":"plucian"},"change_message_id":"80e165e7638dd8bbb5ebe3154800cb0a062d4f51","unresolved":false,"context_lines":[{"line_number":52,"context_line":"        if not volume_paths:"},{"line_number":53,"context_line":"            raise exception.NoFibreChannelVolumeDeviceFound()"},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"        device_path \u003d volume_paths[0]"},{"line_number":56,"context_line":"        device_number \u003d self._diskutils.get_device_number_from_device_name("},{"line_number":57,"context_line":"            device_path)"},{"line_number":58,"context_line":"        scsi_wwn \u003d self._get_scsi_wwn(device_number)"}],"source_content_type":"text/x-python","patch_set":9,"id":"1aa78d24_41294be5","line":55,"in_reply_to":"1aa78d24_abbbaec2","updated":"2016-07-07 19:50:20.000000000","message":"It\u0027s the only one exposed.","commit_id":"765c76d22871473624cc3ae15c73569153ca67b1"},{"author":{"_account_id":8543,"name":"Lucian Petrut","email":"lpetrut@cloudbasesolutions.com","username":"plucian"},"change_message_id":"121531c684b97b39723b5b9ea52f1e710cfe4107","unresolved":false,"context_lines":[{"line_number":52,"context_line":"        if not volume_paths:"},{"line_number":53,"context_line":"            raise exception.NoFibreChannelVolumeDeviceFound()"},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"        device_path \u003d volume_paths[0]"},{"line_number":56,"context_line":"        device_number \u003d self._diskutils.get_device_number_from_device_name("},{"line_number":57,"context_line":"            device_path)"},{"line_number":58,"context_line":"        scsi_wwn \u003d self._get_scsi_wwn(device_number)"}],"source_content_type":"text/x-python","patch_set":9,"id":"1aa78d24_6e148b43","line":55,"in_reply_to":"1aa78d24_cecf9654","updated":"2016-07-12 10:25:54.000000000","message":"Sure, done.","commit_id":"765c76d22871473624cc3ae15c73569153ca67b1"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"ebdd2ff51a0499155c6072781d4364b9d31fbee3","unresolved":false,"context_lines":[{"line_number":47,"context_line":"            props[\u0027wwnns\u0027] \u003d list(set(wwnns))"},{"line_number":48,"context_line":"        return props"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"    def connect_volume(self, connection_properties):"},{"line_number":51,"context_line":"        volume_paths \u003d self.get_volume_paths(connection_properties)"},{"line_number":52,"context_line":"        if not volume_paths:"},{"line_number":53,"context_line":"            raise exception.NoFibreChannelVolumeDeviceFound()"}],"source_content_type":"text/x-python","patch_set":13,"id":"bacf61ea_91d6494d","line":50,"updated":"2016-08-04 19:50:56.000000000","message":"should add the @utils.trace here and disconnect_volume","commit_id":"096fa08a3bf29e33333b8df2a369941248405bf1"},{"author":{"_account_id":8543,"name":"Lucian Petrut","email":"lpetrut@cloudbasesolutions.com","username":"plucian"},"change_message_id":"b4b3000835dccccac9f47766f940203e1d4328a7","unresolved":false,"context_lines":[{"line_number":47,"context_line":"            props[\u0027wwnns\u0027] \u003d list(set(wwnns))"},{"line_number":48,"context_line":"        return props"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"    def connect_volume(self, connection_properties):"},{"line_number":51,"context_line":"        volume_paths \u003d self.get_volume_paths(connection_properties)"},{"line_number":52,"context_line":"        if not volume_paths:"},{"line_number":53,"context_line":"            raise exception.NoFibreChannelVolumeDeviceFound()"}],"source_content_type":"text/x-python","patch_set":13,"id":"bacf61ea_b1d42d20","line":50,"in_reply_to":"bacf61ea_91d6494d","updated":"2016-08-04 19:56:16.000000000","message":"Makes sense, this will be useful.","commit_id":"096fa08a3bf29e33333b8df2a369941248405bf1"}],"os_brick/tests/windows/test_fibre_channel.py":[{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"claudiu.belu@canonical.com","username":"claudiub"},"change_message_id":"ea23a8d57a998d1e0f2cdf4dfac30560f185b657","unresolved":false,"context_lines":[{"line_number":80,"context_line":"        mock_get_scsi_wwn.assert_called_once_with(mock.sentinel.dev_num)"},{"line_number":81,"context_line":""},{"line_number":82,"context_line":"    @mock.patch.object(fc.WindowsFCConnector, \u0027get_volume_paths\u0027)"},{"line_number":83,"context_line":"    def test_ensure_volume_available_failed(self, mock_get_vol_paths):"},{"line_number":84,"context_line":"        mock_get_vol_paths.return_value \u003d []"},{"line_number":85,"context_line":""},{"line_number":86,"context_line":"        self.assertRaises(exception.NoFibreChannelVolumeDeviceFound,"}],"source_content_type":"text/x-python","patch_set":2,"id":"9abb7d3a_1ce502a7","line":83,"updated":"2016-06-01 17:01:38.000000000","message":"IMO, a positive test case would be nice too. A test where volume_paths[0] is returned.","commit_id":"ec5c9e505d82adc5679859eec702e963a8f4a50d"}]}
