)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":6735,"name":"Bob Ball","email":"bob.ball@citrix.com","username":"bob-ball"},"change_message_id":"b7cad834d1c527d904836cd8d23126ac2a62ac0d","unresolved":false,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"XenAPI implementation of device tagging"},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"Partially-Implements: blueprint virt-device-role-tagging"},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Change-Id: I565617e05acf33e6254ea091b88d975270ffde05"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":28,"id":"7a8ec9b2_04d94f22","line":11,"updated":"2016-09-21 13:09:11.000000000","message":"Wrong BP reference?\nNeeds a spec-less BP in Ocata for the XenAPI part as the original BP should have been closed in Newton.","commit_id":"7df900537765f40e7adc6bc3167e9c5b68f21f3c"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"efd5033eac7955606cc6ee96b39ef3bda3e31568","unresolved":false,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"XenAPI implementation of device tagging"},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"Partially-Implements: blueprint virt-device-role-tagging"},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Change-Id: I565617e05acf33e6254ea091b88d975270ffde05"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":28,"id":"7a8ec9b2_0723f858","line":11,"in_reply_to":"7a8ec9b2_04d94f22","updated":"2016-09-21 19:15:49.000000000","message":"Yeah, we just need a specless blueprint for this feature parity work for the xen driver in ocata. Call it virt-device-role-tagging-xen or something if you like.","commit_id":"7df900537765f40e7adc6bc3167e9c5b68f21f3c"}],"nova/api/metadata/base.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"03eb4a3c8508fb6ccf7a7fc18cf9aec5bcdc3afd","unresolved":false,"context_lines":[{"line_number":403,"context_line":"                        bus \u003d \u0027scsi\u0027"},{"line_number":404,"context_line":"                    elif isinstance(device.bus, metadata_obj.IDEDeviceBus):"},{"line_number":405,"context_line":"                        bus \u003d \u0027ide\u0027"},{"line_number":406,"context_line":"                    elif isinstance(device.bus, metadata_obj.XenDeviceBus):"},{"line_number":407,"context_line":"                        bus \u003d \u0027xen\u0027"},{"line_number":408,"context_line":"                    else:"},{"line_number":409,"context_line":"                        LOG.debug(\u0027Metadata for device with unknown bus %s \u0027"},{"line_number":410,"context_line":"                                  \u0027has not been included in the \u0027"}],"source_content_type":"text/x-python","patch_set":37,"id":"3f1d235d_ef040817","line":407,"range":{"start_line":406,"start_character":20,"end_line":407,"end_character":35},"updated":"2017-07-06 15:53:11.000000000","message":"Hmm, I wonder if we should have done a metadata API version bump for this?","commit_id":"0c0361e8bf1ab85812b9b84a3d00ce6eca1b57c1"}],"nova/objects/fields.py":[{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"01e9399fc77c25301c5a14b8442c68460d2c6215","unresolved":false,"context_lines":[{"line_number":851,"context_line":""},{"line_number":852,"context_line":""},{"line_number":853,"context_line":"class XenAddress(AddressBase):"},{"line_number":854,"context_line":"    PATTERN \u003d \u0027[0-9]+\u0027"},{"line_number":855,"context_line":""},{"line_number":856,"context_line":"    @staticmethod"},{"line_number":857,"context_line":"    def coerce(obj, attr, value):"}],"source_content_type":"text/x-python","patch_set":20,"id":"1aa78d24_b5912455","line":854,"updated":"2016-07-08 13:07:02.000000000","message":"Please update PATTERN to reflect [1] and [2]\n\n[1] https://review.openstack.org/#/c/333781/20/nova/tests/unit/objects/test_fields.py@615\n[2] https://review.openstack.org/#/c/333781/20/nova/virt/xenapi/vmops.py@821","commit_id":"d37c67286fcfc23bfa9deaffcdb597d9c7c1ce84"},{"author":{"_account_id":17169,"name":"John Hua","email":"ihuazhihao@gmail.com","username":"johnhua"},"change_message_id":"4fb5ec0a387ae454df83c2ca10b80a3b764ad976","unresolved":false,"context_lines":[{"line_number":851,"context_line":""},{"line_number":852,"context_line":""},{"line_number":853,"context_line":"class XenAddress(AddressBase):"},{"line_number":854,"context_line":"    PATTERN \u003d \u0027[0-9]+\u0027"},{"line_number":855,"context_line":""},{"line_number":856,"context_line":"    @staticmethod"},{"line_number":857,"context_line":"    def coerce(obj, attr, value):"}],"source_content_type":"text/x-python","patch_set":20,"id":"1aa78d24_725dd714","line":854,"in_reply_to":"1aa78d24_b5912455","updated":"2016-07-11 06:40:18.000000000","message":"There are two possible formats, the raw address like \"00dd00\" or a regular number.","commit_id":"d37c67286fcfc23bfa9deaffcdb597d9c7c1ce84"}],"nova/tests/unit/objects/test_fields.py":[{"author":{"_account_id":6735,"name":"Bob Ball","email":"bob.ball@citrix.com","username":"bob-ball"},"change_message_id":"523cf2241a4bf236c6937c0b43c75df091f0c4d1","unresolved":false,"context_lines":[{"line_number":612,"context_line":"        self.coerce_good_values \u003d [(\u00270\u0027, \u0027000100\u0027)]"},{"line_number":613,"context_line":"        self.coerce_bad_values \u003d ["},{"line_number":614,"context_line":"            \u00270:2\u0027,"},{"line_number":615,"context_line":"            \u00270000100\u0027,"},{"line_number":616,"context_line":"            \u0027-1\u0027,"},{"line_number":617,"context_line":"        ]"},{"line_number":618,"context_line":"        self.to_primitive_values \u003d self.coerce_good_values"}],"source_content_type":"text/x-python","patch_set":19,"id":"1aa78d24_f41c9c6b","line":615,"updated":"2016-07-07 09:02:38.000000000","message":"Why is this a \u0027bad\u0027 value?  It seems to match the regexp?","commit_id":"eca3ecf2b02ec962bb96d45088dd1392ed16edcf"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"01e9399fc77c25301c5a14b8442c68460d2c6215","unresolved":false,"context_lines":[{"line_number":609,"context_line":"    def setUp(self):"},{"line_number":610,"context_line":"        super(TestXenAddress, self).setUp()"},{"line_number":611,"context_line":"        self.field \u003d fields.Field(fields.XenAddressField())"},{"line_number":612,"context_line":"        self.coerce_good_values \u003d [(\u00270\u0027, \u0027000100\u0027)]"},{"line_number":613,"context_line":"        self.coerce_bad_values \u003d ["},{"line_number":614,"context_line":"            \u00270:2\u0027,"},{"line_number":615,"context_line":"            \u00270000100\u0027,"}],"source_content_type":"text/x-python","patch_set":20,"id":"1aa78d24_b59f644f","line":612,"updated":"2016-07-08 13:07:02.000000000","message":"coerce_good_values should be a list of 2-tuples, each tuple being (in_val, out_val), such that the object\u0027s coerce method applied to in_val gives out_val, see [1]\n\n[1] https://github.com/openstack/oslo.versionedobjects/blob/master/oslo_versionedobjects/tests/test_fields.py#L111-L118","commit_id":"d37c67286fcfc23bfa9deaffcdb597d9c7c1ce84"},{"author":{"_account_id":17169,"name":"John Hua","email":"ihuazhihao@gmail.com","username":"johnhua"},"change_message_id":"4fb5ec0a387ae454df83c2ca10b80a3b764ad976","unresolved":false,"context_lines":[{"line_number":609,"context_line":"    def setUp(self):"},{"line_number":610,"context_line":"        super(TestXenAddress, self).setUp()"},{"line_number":611,"context_line":"        self.field \u003d fields.Field(fields.XenAddressField())"},{"line_number":612,"context_line":"        self.coerce_good_values \u003d [(\u00270\u0027, \u0027000100\u0027)]"},{"line_number":613,"context_line":"        self.coerce_bad_values \u003d ["},{"line_number":614,"context_line":"            \u00270:2\u0027,"},{"line_number":615,"context_line":"            \u00270000100\u0027,"}],"source_content_type":"text/x-python","patch_set":20,"id":"1aa78d24_f75c197f","line":612,"in_reply_to":"1aa78d24_b59f644f","updated":"2016-07-11 06:40:18.000000000","message":"Done","commit_id":"d37c67286fcfc23bfa9deaffcdb597d9c7c1ce84"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"01e9399fc77c25301c5a14b8442c68460d2c6215","unresolved":false,"context_lines":[{"line_number":612,"context_line":"        self.coerce_good_values \u003d [(\u00270\u0027, \u0027000100\u0027)]"},{"line_number":613,"context_line":"        self.coerce_bad_values \u003d ["},{"line_number":614,"context_line":"            \u00270:2\u0027,"},{"line_number":615,"context_line":"            \u00270000100\u0027,"},{"line_number":616,"context_line":"            \u0027-1\u0027,"},{"line_number":617,"context_line":"        ]"},{"line_number":618,"context_line":"        self.to_primitive_values \u003d self.coerce_good_values"}],"source_content_type":"text/x-python","patch_set":20,"id":"1aa78d24_75397c41","line":615,"updated":"2016-07-08 13:07:02.000000000","message":"Based on [1] I\u0027m deducing that this is a bad value because it\u0027s two zeros, then *3* (and not 2) digits (with leading zeros) then two zeros.\n\n[1] https://review.openstack.org/#/c/333781/20/nova/virt/xenapi/vmops.py@821","commit_id":"d37c67286fcfc23bfa9deaffcdb597d9c7c1ce84"},{"author":{"_account_id":17169,"name":"John Hua","email":"ihuazhihao@gmail.com","username":"johnhua"},"change_message_id":"4fb5ec0a387ae454df83c2ca10b80a3b764ad976","unresolved":false,"context_lines":[{"line_number":612,"context_line":"        self.coerce_good_values \u003d [(\u00270\u0027, \u0027000100\u0027)]"},{"line_number":613,"context_line":"        self.coerce_bad_values \u003d ["},{"line_number":614,"context_line":"            \u00270:2\u0027,"},{"line_number":615,"context_line":"            \u00270000100\u0027,"},{"line_number":616,"context_line":"            \u0027-1\u0027,"},{"line_number":617,"context_line":"        ]"},{"line_number":618,"context_line":"        self.to_primitive_values \u003d self.coerce_good_values"}],"source_content_type":"text/x-python","patch_set":20,"id":"1aa78d24_57540d53","line":615,"in_reply_to":"1aa78d24_75397c41","updated":"2016-07-11 06:40:18.000000000","message":"Done","commit_id":"d37c67286fcfc23bfa9deaffcdb597d9c7c1ce84"}],"nova/tests/unit/objects/test_objects.py":[{"author":{"_account_id":17920,"name":"Jianghua Wang","email":"jianghua.wang@citrix.com","username":"wjhfresh"},"change_message_id":"8a81e2dda317d11058837d4da812ed9bc8cf9f45","unresolved":false,"context_lines":[{"line_number":1131,"context_line":"    \u0027HyperVLiveMigrateData\u0027: \u00271.0-0b868dd6228a09c3f3e47016dddf6a1c\u0027,"},{"line_number":1132,"context_line":"    \u0027HVSpec\u0027: \u00271.2-db672e73304da86139086d003f3977e7\u0027,"},{"line_number":1133,"context_line":"    \u0027IDEDeviceBus\u0027: \u00271.0-29d4c9f27ac44197f01b6ac1b7e16502\u0027,"},{"line_number":1134,"context_line":"    \u0027XenDeviceBus\u0027: \u00271.0-272a4f899b24e31e42b2b9a7ed7e9194\u0027,"},{"line_number":1135,"context_line":"    \u0027ImageMeta\u0027: \u00271.8-642d1b2eb3e880a367f37d72dd76162d\u0027,"},{"line_number":1136,"context_line":"    \u0027ImageMetaProps\u0027: \u00271.15-d45133ec8d2d4a6456338fb0ffd0e5c2\u0027,"},{"line_number":1137,"context_line":"    \u0027Instance\u0027: \u00272.3-4f98ab23f4b0a25fabb1040c8f5edecc\u0027,"}],"source_content_type":"text/x-python","patch_set":27,"id":"dada55a8_fc456817","line":1134,"updated":"2016-07-18 08:46:58.000000000","message":"should be sorted with the letters.","commit_id":"904328e1b72f758f052829729507877fff93f7e3"},{"author":{"_account_id":17169,"name":"John Hua","email":"ihuazhihao@gmail.com","username":"johnhua"},"change_message_id":"918a99d21fec60af0dadd0677fd24c5157bd3e71","unresolved":false,"context_lines":[{"line_number":1131,"context_line":"    \u0027HyperVLiveMigrateData\u0027: \u00271.0-0b868dd6228a09c3f3e47016dddf6a1c\u0027,"},{"line_number":1132,"context_line":"    \u0027HVSpec\u0027: \u00271.2-db672e73304da86139086d003f3977e7\u0027,"},{"line_number":1133,"context_line":"    \u0027IDEDeviceBus\u0027: \u00271.0-29d4c9f27ac44197f01b6ac1b7e16502\u0027,"},{"line_number":1134,"context_line":"    \u0027XenDeviceBus\u0027: \u00271.0-272a4f899b24e31e42b2b9a7ed7e9194\u0027,"},{"line_number":1135,"context_line":"    \u0027ImageMeta\u0027: \u00271.8-642d1b2eb3e880a367f37d72dd76162d\u0027,"},{"line_number":1136,"context_line":"    \u0027ImageMetaProps\u0027: \u00271.15-d45133ec8d2d4a6456338fb0ffd0e5c2\u0027,"},{"line_number":1137,"context_line":"    \u0027Instance\u0027: \u00272.3-4f98ab23f4b0a25fabb1040c8f5edecc\u0027,"}],"source_content_type":"text/x-python","patch_set":27,"id":"dada55a8_4bdae379","line":1134,"in_reply_to":"dada55a8_fc456817","updated":"2016-07-18 10:05:44.000000000","message":"Done","commit_id":"904328e1b72f758f052829729507877fff93f7e3"}],"nova/tests/unit/virt/xenapi/test_vmops.py":[{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"da74df5d7619655acc5e32edad27a168fd863dd0","unresolved":false,"context_lines":[{"line_number":542,"context_line":"            lambda **kw: \\"},{"line_number":543,"context_line":"                self._dev_mock({\"address\": kw.get(\"address\"), \"bus\": \"xen\"})"},{"line_number":544,"context_line":"        mock_DiskMetadata.side_effect \u003d \\"},{"line_number":545,"context_line":"            lambda **kw: self._dev_mock(dict(**kw))"},{"line_number":546,"context_line":""},{"line_number":547,"context_line":"        bdm \u003d self._dev_mock({\"device_name\": \"/dev/xvda\", \"tag\": \"disk_a\"})"},{"line_number":548,"context_line":"        disk_metadata \u003d self.vmops._prepare_disk_metadata(bdm)"}],"source_content_type":"text/x-python","patch_set":33,"id":"ba2be162_9cba43e0","line":545,"updated":"2017-03-02 03:32:58.000000000","message":"guh. :)","commit_id":"c7ac1a65d91979d761c5eb128368a5f79d5e0835"}],"nova/virt/xenapi/driver.py":[{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"01e9399fc77c25301c5a14b8442c68460d2c6215","unresolved":false,"context_lines":[{"line_number":67,"context_line":"class XenAPIDriver(driver.ComputeDriver):"},{"line_number":68,"context_line":"    \"\"\"A connection to XenServer or Xen Cloud Platform.\"\"\""},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"    capabilities \u003d {"},{"line_number":71,"context_line":"        \"supports_device_tagging\": True,"},{"line_number":72,"context_line":"    }"},{"line_number":73,"context_line":""}],"source_content_type":"text/x-python","patch_set":20,"id":"1aa78d24_781051a9","line":70,"updated":"2016-07-08 13:07:02.000000000","message":"You need to include all the other capabilities as well (ex: supports_attach_interface). The compute manager assumes every virt driver defines every capability key in its capabilities dict. For example, in [1] it doesn\u0027t check for the presence of \u0027supports_recreate\u0027, it just assumes it\u0027s there and set to something. With your current capacilities dict, [1] would fail with a KeyError.\n\nFor the full list of capabilities see [2].\n\n[1] https://github.com/openstack/nova/blob/master/nova/compute/manager.py#L2728\n[2] https://github.com/openstack/nova/blob/master/nova/virt/driver.py#L135","commit_id":"d37c67286fcfc23bfa9deaffcdb597d9c7c1ce84"},{"author":{"_account_id":17169,"name":"John Hua","email":"ihuazhihao@gmail.com","username":"johnhua"},"change_message_id":"4fb5ec0a387ae454df83c2ca10b80a3b764ad976","unresolved":false,"context_lines":[{"line_number":67,"context_line":"class XenAPIDriver(driver.ComputeDriver):"},{"line_number":68,"context_line":"    \"\"\"A connection to XenServer or Xen Cloud Platform.\"\"\""},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"    capabilities \u003d {"},{"line_number":71,"context_line":"        \"supports_device_tagging\": True,"},{"line_number":72,"context_line":"    }"},{"line_number":73,"context_line":""}],"source_content_type":"text/x-python","patch_set":20,"id":"1aa78d24_b74c519e","line":70,"in_reply_to":"1aa78d24_781051a9","updated":"2016-07-11 06:40:18.000000000","message":"Done","commit_id":"d37c67286fcfc23bfa9deaffcdb597d9c7c1ce84"},{"author":{"_account_id":17920,"name":"Jianghua Wang","email":"jianghua.wang@citrix.com","username":"wjhfresh"},"change_message_id":"8a81e2dda317d11058837d4da812ed9bc8cf9f45","unresolved":false,"context_lines":[{"line_number":71,"context_line":"        \"has_imagecache\": True,"},{"line_number":72,"context_line":"        \"supports_recreate\": False,"},{"line_number":73,"context_line":"        \"supports_migrate_to_same_host\": True,"},{"line_number":74,"context_line":"        \"supports_attach_interface\": True,"},{"line_number":75,"context_line":"        \"supports_device_tagging\": True,"},{"line_number":76,"context_line":"    }"},{"line_number":77,"context_line":""}],"source_content_type":"text/x-python","patch_set":27,"id":"dada55a8_fcaf2892","line":74,"updated":"2016-07-18 08:46:58.000000000","message":"Does it mean hot-plugin? hot-plugin is not supported.","commit_id":"904328e1b72f758f052829729507877fff93f7e3"},{"author":{"_account_id":17169,"name":"John Hua","email":"ihuazhihao@gmail.com","username":"johnhua"},"change_message_id":"918a99d21fec60af0dadd0677fd24c5157bd3e71","unresolved":false,"context_lines":[{"line_number":71,"context_line":"        \"has_imagecache\": True,"},{"line_number":72,"context_line":"        \"supports_recreate\": False,"},{"line_number":73,"context_line":"        \"supports_migrate_to_same_host\": True,"},{"line_number":74,"context_line":"        \"supports_attach_interface\": True,"},{"line_number":75,"context_line":"        \"supports_device_tagging\": True,"},{"line_number":76,"context_line":"    }"},{"line_number":77,"context_line":""}],"source_content_type":"text/x-python","patch_set":27,"id":"dada55a8_4ba02391","line":74,"in_reply_to":"dada55a8_fcaf2892","updated":"2016-07-18 10:05:44.000000000","message":"Done","commit_id":"904328e1b72f758f052829729507877fff93f7e3"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"da74df5d7619655acc5e32edad27a168fd863dd0","unresolved":false,"context_lines":[{"line_number":80,"context_line":"        \"supports_migrate_to_same_host\": True,"},{"line_number":81,"context_line":"        \"supports_attach_interface\": False,"},{"line_number":82,"context_line":"        \"supports_device_tagging\": True,"},{"line_number":83,"context_line":"    }"},{"line_number":84,"context_line":""},{"line_number":85,"context_line":"    def __init__(self, virtapi, read_only\u003dFalse):"},{"line_number":86,"context_line":"        super(XenAPIDriver, self).__init__(virtapi)"}],"source_content_type":"text/x-python","patch_set":33,"id":"ba2be162_bcf1c76c","line":83,"updated":"2017-03-02 03:32:58.000000000","message":"err.. I think you need to just change line 74 to be True. The above looks to be a copy/paste error perhaps? :)","commit_id":"c7ac1a65d91979d761c5eb128368a5f79d5e0835"},{"author":{"_account_id":17920,"name":"Jianghua Wang","email":"jianghua.wang@citrix.com","username":"wjhfresh"},"change_message_id":"bc5545d17f149d81f460de741ae2703e64405a05","unresolved":false,"context_lines":[{"line_number":80,"context_line":"        \"supports_migrate_to_same_host\": True,"},{"line_number":81,"context_line":"        \"supports_attach_interface\": False,"},{"line_number":82,"context_line":"        \"supports_device_tagging\": True,"},{"line_number":83,"context_line":"    }"},{"line_number":84,"context_line":""},{"line_number":85,"context_line":"    def __init__(self, virtapi, read_only\u003dFalse):"},{"line_number":86,"context_line":"        super(XenAPIDriver, self).__init__(virtapi)"}],"source_content_type":"text/x-python","patch_set":33,"id":"3a1ff146_2f3bd0d2","line":83,"in_reply_to":"ba2be162_bcf1c76c","updated":"2017-03-16 11:29:47.000000000","message":"Thanks for catching this. Definitely wrong.\nIn the original several patches, this matrix had not existed. It was added by another commit which added \"supports_attach_interface\"; but it\u0027s curious that this conflict was not corrected when rebasing.","commit_id":"c7ac1a65d91979d761c5eb128368a5f79d5e0835"}],"nova/virt/xenapi/vmops.py":[{"author":{"_account_id":6735,"name":"Bob Ball","email":"bob.ball@citrix.com","username":"bob-ball"},"change_message_id":"b4d12641f4bb170dac33cd3b9d981f2288d9df67","unresolved":false,"context_lines":[{"line_number":818,"context_line":"        \"\"\""},{"line_number":819,"context_line":"        if bdm.disk_bus \u003d\u003d \u0027ide\u0027:"},{"line_number":820,"context_line":"            bus \u003d objects.IDEDeviceBus()"},{"line_number":821,"context_line":"            match \u003d re.match(r\"/dev/xvd(\\w)(\\d)?\", bdm.device_name)"},{"line_number":822,"context_line":"            if match:"},{"line_number":823,"context_line":"                (disk_addr, drive_addr) \u003d match.groups()"},{"line_number":824,"context_line":"                disk_addr \u003d ord(disk_addr) - 97"}],"source_content_type":"text/x-python","patch_set":7,"id":"3aaa91ec_d58a6063","line":821,"updated":"2016-06-30 08:31:29.000000000","message":"I think we\u0027ll only have xvda, xvdb, xvdc, xvdd, xvde and so on.\nI *believe* that xvda is 0:0, xvdb is 0:1 xvdc is 1:0 and xvdd is 1:1\nxvde and greater would not have a reference on the IDE bus.","commit_id":"659c7261582d33f773b98a7a8c0a7a96bf337a3e"},{"author":{"_account_id":6735,"name":"Bob Ball","email":"bob.ball@citrix.com","username":"bob-ball"},"change_message_id":"3d8384632167635d1186ce3f5eb5ae629222b704","unresolved":false,"context_lines":[{"line_number":812,"context_line":"                                          files\u003dfiles)"},{"line_number":813,"context_line":""},{"line_number":814,"context_line":"    @staticmethod"},{"line_number":815,"context_line":"    def _prepare_disk_bus(bdm):"},{"line_number":816,"context_line":"        \"\"\"Determines the device bus type"},{"line_number":817,"context_line":"        \"\"\""},{"line_number":818,"context_line":"        if bdm.disk_bus \u003d\u003d \u0027ide\u0027:"}],"source_content_type":"text/x-python","patch_set":8,"id":"3aaa91ec_195ffee5","line":815,"updated":"2016-06-30 12:11:01.000000000","message":"Why is this a static method?","commit_id":"8173dec8ef26357d37ff64927f9e07df610964d4"},{"author":{"_account_id":6735,"name":"Bob Ball","email":"bob.ball@citrix.com","username":"bob-ball"},"change_message_id":"3d8384632167635d1186ce3f5eb5ae629222b704","unresolved":false,"context_lines":[{"line_number":815,"context_line":"    def _prepare_disk_bus(bdm):"},{"line_number":816,"context_line":"        \"\"\"Determines the device bus type"},{"line_number":817,"context_line":"        \"\"\""},{"line_number":818,"context_line":"        if bdm.disk_bus \u003d\u003d \u0027ide\u0027:"},{"line_number":819,"context_line":"            bus \u003d objects.IDEDeviceBus()"},{"line_number":820,"context_line":"            disk_num \u003d volume_utils.get_device_number(bdm.device_name)"},{"line_number":821,"context_line":"            if disk_num \u003e\u003d 0:"}],"source_content_type":"text/x-python","patch_set":8,"id":"3aaa91ec_99cf6e7e","line":818,"updated":"2016-06-30 12:11:01.000000000","message":"We should always have both an IDE bus address and a Xen address in the metadata as we can\u0027t determine in advance if the guest will be loading the PV drivers or not.","commit_id":"8173dec8ef26357d37ff64927f9e07df610964d4"},{"author":{"_account_id":6735,"name":"Bob Ball","email":"bob.ball@citrix.com","username":"bob-ball"},"change_message_id":"3d8384632167635d1186ce3f5eb5ae629222b704","unresolved":false,"context_lines":[{"line_number":823,"context_line":"                bus.address \u003d \"%s:%s\" % (disk_num, drive_num)"},{"line_number":824,"context_line":"        else:"},{"line_number":825,"context_line":"            bus \u003d objects.XenDeviceBus()"},{"line_number":826,"context_line":"            bus.address \u003d str(bdm.id)"},{"line_number":827,"context_line":"        return bus"},{"line_number":828,"context_line":""},{"line_number":829,"context_line":"    def _save_device_metadata(self, context, instance, block_device_info):"}],"source_content_type":"text/x-python","patch_set":8,"id":"3aaa91ec_d2c54b5c","line":826,"updated":"2016-06-30 12:11:01.000000000","message":"http://xenbits.xen.org/gitweb/?p\u003dxen.git;a\u003dblob;f\u003ddocs/misc/vbd-interface.txt;h\u003d1c996bf64d55874f4549f2880654a54405b375b2;hb\u003dHEAD\n\nSee \"Concrete encoding in the VBD interface (in xenstore)\"\n\nAll guests:\nIDE bus vbd.userdevice number 0,1,2,3 map to 0:0, 0:1, 1:0, 1:1\nXen bus, vbd.userdevice number 0-3 show HD numbering according \nXen bus, vbd.userdevice number 0+ show xvd numbering\n\nThis means that each disk with userdevice\u003c4 will have 3 entries in the metadata mapping, and each disk with userdevice\u003e\u003d4 will have 1 entry.\n\nDevice 0 will therefore have IDE 0:0, Xen 768 and Xen 51712 as the references.  Pseudo-code which I think matches the above URL:\n\nif dev\u003c4: ide.address \u003d \"%d:%d\"(dev/2, dev%2)\nif dev\u003c16: xen1.address \u003d \"%d\"(202 \u003c\u003c 8 | dev \u003c\u003c 4)\nif dev\u003e\u003d16: xen1.address \u003d \"%d\"(1 \u003c\u003c 28 | dev \u003c\u003c 8)\nif dev\u003c2: xen2.address \u003d \"%d\"(3\u003c\u003c 8 | dev \u003c\u003c 6)\nif dev\u003e\u003d2 and dev\u003c4: xen2.address \u003d \"%d\"(22\u003c\u003c 8 | (dev -2)\u003c\u003c 6)\n\nPlease check the IDE address format","commit_id":"8173dec8ef26357d37ff64927f9e07df610964d4"},{"author":{"_account_id":6735,"name":"Bob Ball","email":"bob.ball@citrix.com","username":"bob-ball"},"change_message_id":"86d9f8f422011dd74ea00f567e1d4bc492895b27","unresolved":false,"context_lines":[{"line_number":816,"context_line":"        \"\"\""},{"line_number":817,"context_line":"        path \u003d bdm.device_name"},{"line_number":818,"context_line":"        disk_num \u003d volume_utils.get_device_number(path)"},{"line_number":819,"context_line":""},{"line_number":820,"context_line":"        if disk_num \u003c 4:"},{"line_number":821,"context_line":"            ide \u003d objects.XenDeviceBus()"},{"line_number":822,"context_line":"            xen1 \u003d objects.XenDeviceBus()"}],"source_content_type":"text/x-python","patch_set":10,"id":"3aaa91ec_e4bdec68","line":819,"updated":"2016-07-01 10:22:31.000000000","message":"We should also probably include just the raw device number as well.\nWindows PV drivers will reverse the below transformations and include the disk under HKLM\\SYSTEM\\ControlSet001\\Enum\\SCSI\\Disk\u0026Ven_XENSRC\u0026Prod_PVDISK\\ in the registry.\nEach key is CCTTLL (for Controller, Target, Lun) where controller and lun are 0, but target is the device number.\n\nAs such, if we have disk_num being 3, this will show in the windows registry as disk 000300","commit_id":"0fa8b3443478829eb69e33e9252f1ee5164899c6"},{"author":{"_account_id":6735,"name":"Bob Ball","email":"bob.ball@citrix.com","username":"bob-ball"},"change_message_id":"523cf2241a4bf236c6937c0b43c75df091f0c4d1","unresolved":false,"context_lines":[{"line_number":814,"context_line":"        \"\"\"Returns the disk metadata with dual disk buses. More details about"},{"line_number":815,"context_line":"           Xen device number can be found in http://xenbits.xen.org/gitweb/?"},{"line_number":816,"context_line":"           p\u003dxen.git;a\u003dblob;f\u003ddocs/misc/vbd-interface.txt;h\u003d1c996bf64d55874f45"},{"line_number":817,"context_line":"           49f2880654a54405b375b2;hb\u003dHEAD"},{"line_number":818,"context_line":"        \"\"\""},{"line_number":819,"context_line":"        path \u003d bdm.device_name"},{"line_number":820,"context_line":"        disk_num \u003d volume_utils.get_device_number(path)"}],"source_content_type":"text/x-python","patch_set":19,"id":"1aa78d24_197fe1e0","line":817,"updated":"2016-07-07 09:02:38.000000000","message":"http://xenbits.xen.org/gitweb/?p\u003dxen.git;a\u003dblob;f\u003ddocs/misc/vbd-interface.txt;hb\u003dHEAD\n\nSimplify the URL","commit_id":"eca3ecf2b02ec962bb96d45088dd1392ed16edcf"},{"author":{"_account_id":6735,"name":"Bob Ball","email":"bob.ball@citrix.com","username":"bob-ball"},"change_message_id":"523cf2241a4bf236c6937c0b43c75df091f0c4d1","unresolved":false,"context_lines":[{"line_number":852,"context_line":"            else:"},{"line_number":853,"context_line":"                xen1.address \u003d \"%d\" % (1 \u003c\u003c 28 | disk_num \u003c\u003c 8)"},{"line_number":854,"context_line":""},{"line_number":855,"context_line":"            return [objects.DiskMetadata(path\u003dregistry + xen0.address,"},{"line_number":856,"context_line":"                                         bus\u003dxen0, tags\u003d[bdm.tag]),"},{"line_number":857,"context_line":"                    objects.DiskMetadata(path\u003dvbd_prefix + xen1.address,"},{"line_number":858,"context_line":"                                         bus\u003dxen1, tags\u003d[bdm.tag])]"}],"source_content_type":"text/x-python","patch_set":19,"id":"1aa78d24_3963bd43","line":855,"updated":"2016-07-07 09:02:38.000000000","message":"vbd_prefix","commit_id":"eca3ecf2b02ec962bb96d45088dd1392ed16edcf"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"01e9399fc77c25301c5a14b8442c68460d2c6215","unresolved":false,"context_lines":[{"line_number":818,"context_line":"        path \u003d bdm.device_name"},{"line_number":819,"context_line":"        disk_num \u003d volume_utils.get_device_number(path)"},{"line_number":820,"context_line":""},{"line_number":821,"context_line":"        xen0 \u003d objects.XenDeviceBus(address\u003d(\"00%02d00\" % disk_num))"},{"line_number":822,"context_line":""},{"line_number":823,"context_line":"        registry \u003d (\u0027HKLM\\\\SYSTEM\\\\ControlSet001\\\\Enum\\\\SCSI\\\\\u0027"},{"line_number":824,"context_line":"                    \u0027Disk\u0026Ven_XENSRC\u0026Prod_PVDISK\\\\\u0027)"}],"source_content_type":"text/x-python","patch_set":20,"id":"1aa78d24_f830c1ea","line":821,"updated":"2016-07-08 13:07:02.000000000","message":"Ah, so the address is actually two zeros, then 2 digits, possibly with leading zeros, then two more zeros? The regex in [1] should reflect this.\n\n[1] https://review.openstack.org/#/c/333781/20/nova/tests/unit/objects/test_fields.py@615","commit_id":"d37c67286fcfc23bfa9deaffcdb597d9c7c1ce84"},{"author":{"_account_id":17169,"name":"John Hua","email":"ihuazhihao@gmail.com","username":"johnhua"},"change_message_id":"4fb5ec0a387ae454df83c2ca10b80a3b764ad976","unresolved":false,"context_lines":[{"line_number":818,"context_line":"        path \u003d bdm.device_name"},{"line_number":819,"context_line":"        disk_num \u003d volume_utils.get_device_number(path)"},{"line_number":820,"context_line":""},{"line_number":821,"context_line":"        xen0 \u003d objects.XenDeviceBus(address\u003d(\"00%02d00\" % disk_num))"},{"line_number":822,"context_line":""},{"line_number":823,"context_line":"        registry \u003d (\u0027HKLM\\\\SYSTEM\\\\ControlSet001\\\\Enum\\\\SCSI\\\\\u0027"},{"line_number":824,"context_line":"                    \u0027Disk\u0026Ven_XENSRC\u0026Prod_PVDISK\\\\\u0027)"}],"source_content_type":"text/x-python","patch_set":20,"id":"1aa78d24_1720c59a","line":821,"in_reply_to":"1aa78d24_f830c1ea","updated":"2016-07-11 06:40:18.000000000","message":"There are at most 3 xenbus addresses, the first one could be formatted like 00dd00, the other two are just like regular numbers. So there isn\u0027t a strict uniform pattern for validation.","commit_id":"d37c67286fcfc23bfa9deaffcdb597d9c7c1ce84"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"01e9399fc77c25301c5a14b8442c68460d2c6215","unresolved":false,"context_lines":[{"line_number":867,"context_line":""},{"line_number":868,"context_line":"        metadata \u003d []"},{"line_number":869,"context_line":"        for vif in vifs:"},{"line_number":870,"context_line":"            if vif.tag:"},{"line_number":871,"context_line":"                device \u003d objects.NetworkInterfaceMetadata("},{"line_number":872,"context_line":"                    mac\u003dvif.address,"},{"line_number":873,"context_line":"                    bus\u003dobjects.PCIDeviceBus(),"}],"source_content_type":"text/x-python","patch_set":20,"id":"1aa78d24_7587bcd7","line":870,"updated":"2016-07-08 13:07:02.000000000","message":"You should check for the presence of \u0027tag\u0027 first, like so:\n\nif \u0027tag\u0027 in vif and vif.tag:","commit_id":"d37c67286fcfc23bfa9deaffcdb597d9c7c1ce84"},{"author":{"_account_id":17169,"name":"John Hua","email":"ihuazhihao@gmail.com","username":"johnhua"},"change_message_id":"4fb5ec0a387ae454df83c2ca10b80a3b764ad976","unresolved":false,"context_lines":[{"line_number":867,"context_line":""},{"line_number":868,"context_line":"        metadata \u003d []"},{"line_number":869,"context_line":"        for vif in vifs:"},{"line_number":870,"context_line":"            if vif.tag:"},{"line_number":871,"context_line":"                device \u003d objects.NetworkInterfaceMetadata("},{"line_number":872,"context_line":"                    mac\u003dvif.address,"},{"line_number":873,"context_line":"                    bus\u003dobjects.PCIDeviceBus(),"}],"source_content_type":"text/x-python","patch_set":20,"id":"1aa78d24_d4ed9b8f","line":870,"in_reply_to":"1aa78d24_7587bcd7","updated":"2016-07-11 06:40:18.000000000","message":"Done","commit_id":"d37c67286fcfc23bfa9deaffcdb597d9c7c1ce84"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"01e9399fc77c25301c5a14b8442c68460d2c6215","unresolved":false,"context_lines":[{"line_number":870,"context_line":"            if vif.tag:"},{"line_number":871,"context_line":"                device \u003d objects.NetworkInterfaceMetadata("},{"line_number":872,"context_line":"                    mac\u003dvif.address,"},{"line_number":873,"context_line":"                    bus\u003dobjects.PCIDeviceBus(),"},{"line_number":874,"context_line":"                    tags\u003d[vif.tag])"},{"line_number":875,"context_line":"                metadata.append(device)"},{"line_number":876,"context_line":""}],"source_content_type":"text/x-python","patch_set":20,"id":"1aa78d24_75d5fcb7","line":873,"updated":"2016-07-08 13:07:02.000000000","message":"Again, question from a Xen newbie: is this actually presented to the guest as a virtual PCI bus?","commit_id":"d37c67286fcfc23bfa9deaffcdb597d9c7c1ce84"},{"author":{"_account_id":17169,"name":"John Hua","email":"ihuazhihao@gmail.com","username":"johnhua"},"change_message_id":"e846b728fc1fcccc358a1ff8d5ad55ad50dba2fc","unresolved":false,"context_lines":[{"line_number":870,"context_line":"            if vif.tag:"},{"line_number":871,"context_line":"                device \u003d objects.NetworkInterfaceMetadata("},{"line_number":872,"context_line":"                    mac\u003dvif.address,"},{"line_number":873,"context_line":"                    bus\u003dobjects.PCIDeviceBus(),"},{"line_number":874,"context_line":"                    tags\u003d[vif.tag])"},{"line_number":875,"context_line":"                metadata.append(device)"},{"line_number":876,"context_line":""}],"source_content_type":"text/x-python","patch_set":20,"id":"1aa78d24_639a2b70","line":873,"in_reply_to":"1aa78d24_75d5fcb7","updated":"2016-07-11 07:15:19.000000000","message":"Yes it is","commit_id":"d37c67286fcfc23bfa9deaffcdb597d9c7c1ce84"},{"author":{"_account_id":17920,"name":"Jianghua Wang","email":"jianghua.wang@citrix.com","username":"wjhfresh"},"change_message_id":"8a81e2dda317d11058837d4da812ed9bc8cf9f45","unresolved":false,"context_lines":[{"line_number":846,"context_line":"        else:"},{"line_number":847,"context_line":"            xen1 \u003d objects.XenDeviceBus()"},{"line_number":848,"context_line":""},{"line_number":849,"context_line":"            if disk_num \u003c 16:"},{"line_number":850,"context_line":"                xen1.address \u003d \"%d\" % (202 \u003c\u003c 8 | disk_num \u003c\u003c 4)"},{"line_number":851,"context_line":"            else:"},{"line_number":852,"context_line":"                xen1.address \u003d \"%d\" % (1 \u003c\u003c 28 | disk_num \u003c\u003c 8)"}],"source_content_type":"text/x-python","patch_set":27,"id":"dada55a8_774b522c","line":849,"updated":"2016-07-18 08:46:58.000000000","message":"how to cover: http://xenbits.xen.org/gitweb/?p\u003dxen.git;a\u003dblob;f\u003ddocs/misc/vbd-interface.txt#l78\n\n      8 \u003c\u003c 8 | disk \u003c\u003c 4 | partition      sd, disks and partitions up to 15","commit_id":"904328e1b72f758f052829729507877fff93f7e3"},{"author":{"_account_id":17169,"name":"John Hua","email":"ihuazhihao@gmail.com","username":"johnhua"},"change_message_id":"918a99d21fec60af0dadd0677fd24c5157bd3e71","unresolved":false,"context_lines":[{"line_number":846,"context_line":"        else:"},{"line_number":847,"context_line":"            xen1 \u003d objects.XenDeviceBus()"},{"line_number":848,"context_line":""},{"line_number":849,"context_line":"            if disk_num \u003c 16:"},{"line_number":850,"context_line":"                xen1.address \u003d \"%d\" % (202 \u003c\u003c 8 | disk_num \u003c\u003c 4)"},{"line_number":851,"context_line":"            else:"},{"line_number":852,"context_line":"                xen1.address \u003d \"%d\" % (1 \u003c\u003c 28 | disk_num \u003c\u003c 8)"}],"source_content_type":"text/x-python","patch_set":27,"id":"dada55a8_6b77e7d4","line":849,"in_reply_to":"dada55a8_774b522c","updated":"2016-07-18 10:05:44.000000000","message":"SCSI is not the case here. But still thanks for pointing it out. It is worth a comment here.","commit_id":"904328e1b72f758f052829729507877fff93f7e3"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"da74df5d7619655acc5e32edad27a168fd863dd0","unresolved":false,"context_lines":[{"line_number":841,"context_line":"            if disk_num \u003c 2:"},{"line_number":842,"context_line":"                xen2.address \u003d \"%d\" % (3 \u003c\u003c 8 | disk_num \u003c\u003c 6)"},{"line_number":843,"context_line":"            else:"},{"line_number":844,"context_line":"                xen2.address \u003d \"%d\" % (22 \u003c\u003c 8 | (disk_num - 2) \u003c\u003c 6)"},{"line_number":845,"context_line":""},{"line_number":846,"context_line":"            return [objects.DiskMetadata(path\u003dpath, bus\u003dide, tags\u003d[bdm.tag]),"},{"line_number":847,"context_line":"                    objects.DiskMetadata(path\u003dregistry + xen0.address,"}],"source_content_type":"text/x-python","patch_set":33,"id":"ba2be162_1c7d731c","line":844,"updated":"2017-03-02 03:32:58.000000000","message":"hmm, yes, that\u0027s totally clear ;)","commit_id":"c7ac1a65d91979d761c5eb128368a5f79d5e0835"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"da74df5d7619655acc5e32edad27a168fd863dd0","unresolved":false,"context_lines":[{"line_number":888,"context_line":""},{"line_number":889,"context_line":"        if metadata:"},{"line_number":890,"context_line":"            dev_meta \u003d objects.InstanceDeviceMetadata(devices\u003dmetadata)"},{"line_number":891,"context_line":"            return dev_meta"},{"line_number":892,"context_line":""},{"line_number":893,"context_line":"    def _wait_for_instance_to_start(self, instance, vm_ref):"},{"line_number":894,"context_line":"        LOG.debug(\u0027Waiting for instance state to become running\u0027,"}],"source_content_type":"text/x-python","patch_set":33,"id":"ba2be162_1c5f3342","line":891,"updated":"2017-03-02 03:32:58.000000000","message":"femto-nit: could just do:\n\n return objects.InstanceDeviceMetadata(devices\u003dmetadata)","commit_id":"c7ac1a65d91979d761c5eb128368a5f79d5e0835"},{"author":{"_account_id":17920,"name":"Jianghua Wang","email":"jianghua.wang@citrix.com","username":"wjhfresh"},"change_message_id":"bc5545d17f149d81f460de741ae2703e64405a05","unresolved":false,"context_lines":[{"line_number":888,"context_line":""},{"line_number":889,"context_line":"        if metadata:"},{"line_number":890,"context_line":"            dev_meta \u003d objects.InstanceDeviceMetadata(devices\u003dmetadata)"},{"line_number":891,"context_line":"            return dev_meta"},{"line_number":892,"context_line":""},{"line_number":893,"context_line":"    def _wait_for_instance_to_start(self, instance, vm_ref):"},{"line_number":894,"context_line":"        LOG.debug(\u0027Waiting for instance state to become running\u0027,"}],"source_content_type":"text/x-python","patch_set":33,"id":"3a1ff146_94f8574b","line":891,"in_reply_to":"ba2be162_1c5f3342","updated":"2017-03-16 11:29:47.000000000","message":"Done","commit_id":"c7ac1a65d91979d761c5eb128368a5f79d5e0835"},{"author":{"_account_id":17922,"name":"Huan Xie","email":"huan.xie@citrix.com","username":"huan"},"change_message_id":"9a6ed976c005bb856b16c8eaeed67950ecf21ed1","unresolved":false,"context_lines":[{"line_number":819,"context_line":"    def _prepare_disk_metadata(bdm):"},{"line_number":820,"context_line":"        \"\"\"Returns the disk metadata with dual disk buses - ide and xen. More"},{"line_number":821,"context_line":"           details about Xen device number can be found in"},{"line_number":822,"context_line":"           http://xenbits.xen.org/gitweb/?p\u003dxen.git;a\u003dblob;f\u003ddocs/misc/"},{"line_number":823,"context_line":"           vbd-interface.txt"},{"line_number":824,"context_line":"        \"\"\""},{"line_number":825,"context_line":"        path \u003d bdm.device_name"},{"line_number":826,"context_line":"        disk_num \u003d volume_utils.get_device_number(path)"}],"source_content_type":"text/x-python","patch_set":35,"id":"7f231b9d_6152016a","line":823,"range":{"start_line":822,"start_character":11,"end_line":823,"end_character":28},"updated":"2017-06-12 10:49:02.000000000","message":"FYI: It seems we have removed the vbd-interface document to https://xenbits.xen.org/gitweb/?p\u003dxen.git;a\u003dblob;f\u003ddocs/man/xen-vbd-interface.markdown.7;h\u003d1c996bf64d55874f4549f2880654a54405b375b2;hb\u003df54f5342b63feba17d2e8e5d2444f409734275d2","commit_id":"3cc6991a920323764de411dc0583f8dcbe165bfc"},{"author":{"_account_id":25638,"name":"Naichuan Sun","email":"naichuan.sun@citrix.com","username":"naichuans"},"change_message_id":"cc694ea5212c7506cf830f120bf3d8d025b0d274","unresolved":false,"context_lines":[{"line_number":819,"context_line":"    def _prepare_disk_metadata(bdm):"},{"line_number":820,"context_line":"        \"\"\"Returns the disk metadata with dual disk buses - ide and xen. More"},{"line_number":821,"context_line":"           details about Xen device number can be found in"},{"line_number":822,"context_line":"           http://xenbits.xen.org/gitweb/?p\u003dxen.git;a\u003dblob;f\u003ddocs/misc/"},{"line_number":823,"context_line":"           vbd-interface.txt"},{"line_number":824,"context_line":"        \"\"\""},{"line_number":825,"context_line":"        path \u003d bdm.device_name"},{"line_number":826,"context_line":"        disk_num \u003d volume_utils.get_device_number(path)"}],"source_content_type":"text/x-python","patch_set":35,"id":"7f231b9d_6421efb4","line":823,"range":{"start_line":822,"start_character":11,"end_line":823,"end_character":28},"in_reply_to":"7f231b9d_6152016a","updated":"2017-06-13 01:14:00.000000000","message":"Will check that~","commit_id":"3cc6991a920323764de411dc0583f8dcbe165bfc"},{"author":{"_account_id":17922,"name":"Huan Xie","email":"huan.xie@citrix.com","username":"huan"},"change_message_id":"e60c59a11b27b88f3768294eea1597b11dd1de78","unresolved":false,"context_lines":[{"line_number":822,"context_line":"    def _prepare_disk_metadata(bdm):"},{"line_number":823,"context_line":"        \"\"\"Returns the disk metadata with dual disk buses - ide and xen. More"},{"line_number":824,"context_line":"           details about Xen device number can be found in"},{"line_number":825,"context_line":"           http://xenbits.xen.org/docs/4.2-testing/misc/vbd-interface.txt"},{"line_number":826,"context_line":"        \"\"\""},{"line_number":827,"context_line":"        path \u003d bdm.device_name"},{"line_number":828,"context_line":"        disk_num \u003d volume_utils.get_device_number(path)"}],"source_content_type":"text/x-python","patch_set":36,"id":"7f231b9d_af0fbedf","line":825,"range":{"start_line":825,"start_character":11,"end_line":825,"end_character":73},"updated":"2017-06-13 08:36:10.000000000","message":"Thanks for updating to a valid URL","commit_id":"9227e0e5be8fa95a7b04cbe59164d1d05a2daac7"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"03eb4a3c8508fb6ccf7a7fc18cf9aec5bcdc3afd","unresolved":false,"context_lines":[{"line_number":871,"context_line":"        \"\"\""},{"line_number":872,"context_line":"        vifs \u003d objects.VirtualInterfaceList.get_by_instance_uuid("},{"line_number":873,"context_line":"            context, instance[\"uuid\"])"},{"line_number":874,"context_line":"        bdms \u003d objects.BlockDeviceMappingList.get_by_instance_uuid("},{"line_number":875,"context_line":"            context, instance[\"uuid\"])"},{"line_number":876,"context_line":""},{"line_number":877,"context_line":"        metadata \u003d []"},{"line_number":878,"context_line":"        for vif in vifs:"}],"source_content_type":"text/x-python","patch_set":37,"id":"3f1d235d_0f9e24b8","line":875,"range":{"start_line":874,"start_character":8,"end_line":875,"end_character":38},"updated":"2017-07-06 15:53:11.000000000","message":"Aren\u0027t the BDMs already in the block_device_info[\u0027block_device_mapping\u0027] field? See how it\u0027s used in _attach_mapped_block_devices. Maybe that doesn\u0027t work because I think those are actually a list of DriverVolumeBlockDevice objects and those don\u0027t proxy the \u0027tag\u0027 field.\n\nAlso, if block_device_info isn\u0027t provided, we don\u0027t even use these bdms - so there was no point in fetching them out of the database.","commit_id":"0c0361e8bf1ab85812b9b84a3d00ce6eca1b57c1"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"e2f13c62e4b484c3e26992b4d4e85e751c5f08c8","unresolved":false,"context_lines":[{"line_number":871,"context_line":"        \"\"\""},{"line_number":872,"context_line":"        vifs \u003d objects.VirtualInterfaceList.get_by_instance_uuid("},{"line_number":873,"context_line":"            context, instance[\"uuid\"])"},{"line_number":874,"context_line":"        bdms \u003d objects.BlockDeviceMappingList.get_by_instance_uuid("},{"line_number":875,"context_line":"            context, instance[\"uuid\"])"},{"line_number":876,"context_line":""},{"line_number":877,"context_line":"        metadata \u003d []"},{"line_number":878,"context_line":"        for vif in vifs:"}],"source_content_type":"text/x-python","patch_set":37,"id":"3f1d235d_563ef0c0","line":875,"range":{"start_line":874,"start_character":8,"end_line":875,"end_character":38},"in_reply_to":"3f1d235d_0f9e24b8","updated":"2017-07-06 17:36:00.000000000","message":"https://review.openstack.org/#/c/481162/","commit_id":"0c0361e8bf1ab85812b9b84a3d00ce6eca1b57c1"}]}
