)]}'
{"nova/objects/migrate_data.py":[{"author":{"_account_id":1779,"name":"Daniel Berrange","email":"berrange@redhat.com","username":"berrange"},"change_message_id":"68a868e749f9ce9ff02a487a4d94dcbd0f0c798b","unresolved":false,"context_lines":[{"line_number":91,"context_line":"        \u0027is_shared_instance_path\u0027: fields.BooleanField(),"},{"line_number":92,"context_line":"        \u0027is_shared_block_storage\u0027: fields.BooleanField(),"},{"line_number":93,"context_line":"        \u0027instance_relative_path\u0027: fields.StringField(),"},{"line_number":94,"context_line":"        \u0027graphics_listen_addrs\u0027: fields.DictOfStringsField(),"},{"line_number":95,"context_line":"        \u0027serial_listen_addr\u0027: fields.StringField(),"},{"line_number":96,"context_line":"        \u0027bdms\u0027: fields.ListOfObjectsField(\u0027LibvirtLiveMigrateBDMInfo\u0027),"},{"line_number":97,"context_line":"    }"}],"source_content_type":"text/x-python","patch_set":9,"id":"7a740942_155dc814","line":94,"updated":"2015-12-11 16:00:19.000000000","message":"I kind of think we should create a LibvirtLiveMigrationGraphicsInfo for this, rather than continuing to use a nested dict, as I fear people will just stuff more random junk related to graphics into the dict over time.","commit_id":"c0ed527b0c2432301bea8a3c48fb58759f324640"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"5a5da6009b0419d5eb38100ddb555f0dbe8dc4af","unresolved":false,"context_lines":[{"line_number":91,"context_line":"        \u0027is_shared_instance_path\u0027: fields.BooleanField(),"},{"line_number":92,"context_line":"        \u0027is_shared_block_storage\u0027: fields.BooleanField(),"},{"line_number":93,"context_line":"        \u0027instance_relative_path\u0027: fields.StringField(),"},{"line_number":94,"context_line":"        \u0027graphics_listen_addrs\u0027: fields.DictOfStringsField(),"},{"line_number":95,"context_line":"        \u0027serial_listen_addr\u0027: fields.StringField(),"},{"line_number":96,"context_line":"        \u0027bdms\u0027: fields.ListOfObjectsField(\u0027LibvirtLiveMigrateBDMInfo\u0027),"},{"line_number":97,"context_line":"    }"}],"source_content_type":"text/x-python","patch_set":9,"id":"7a740942_f6d6ff4d","line":94,"in_reply_to":"7a740942_155dc814","updated":"2015-12-11 17:49:14.000000000","message":"We can make that a follow up patch though, I quite like keep the scope minimal for change in this bit of code.","commit_id":"c0ed527b0c2432301bea8a3c48fb58759f324640"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"2b51f455ed254b9afb3c6c7604e0d50535454f07","unresolved":false,"context_lines":[{"line_number":143,"context_line":"        graphics_vnc \u003d legacy.pop(\u0027graphics_listen_addr_vnc\u0027, None)"},{"line_number":144,"context_line":"        graphics_spice \u003d legacy.pop(\u0027graphics_listen_addr_spice\u0027, None)"},{"line_number":145,"context_line":"        live_result \u003d {"},{"line_number":146,"context_line":"            \u0027graphics_listen_addrs\u0027: {"},{"line_number":147,"context_line":"                \u0027vnc\u0027: graphics_vnc and str(graphics_vnc),"},{"line_number":148,"context_line":"                \u0027spice\u0027: graphics_spice and str(graphics_spice),"},{"line_number":149,"context_line":"                },"}],"source_content_type":"text/x-python","patch_set":10,"id":"7a740942_b60e378a","line":146,"updated":"2015-12-11 17:56:35.000000000","message":"ah, cool.","commit_id":"26b7f4f6eb965c8bbeecc2402c7d2548d41da752"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"9799a3d6a21c7636409309b42b48af504982392e","unresolved":false,"context_lines":[{"line_number":49,"context_line":""},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"@obj_base.NovaObjectRegistry.register"},{"line_number":52,"context_line":"class LibvirtLiveMigrateBDMInfo(obj_base.NovaObject):"},{"line_number":53,"context_line":"    VERSION \u003d \u00271.0\u0027"},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"    fields \u003d {"}],"source_content_type":"text/x-python","patch_set":11,"id":"5a710552_361610f2","line":52,"updated":"2015-12-15 22:23:56.000000000","message":"I kind of feel like these should be in a nova.virt.libvirt.migrate_data module, just so they are isolated to the libvirt sub-directory, but maybe there is good reason to keeping these global.","commit_id":"f5ee325187ca9e039b9f006c11a8e726641409bb"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"9799a3d6a21c7636409309b42b48af504982392e","unresolved":false,"context_lines":[{"line_number":55,"context_line":"    fields \u003d {"},{"line_number":56,"context_line":"        # FIXME(danms): some of these can be enums?"},{"line_number":57,"context_line":"        \u0027serial\u0027: fields.StringField(),"},{"line_number":58,"context_line":"        \u0027bus\u0027: fields.StringField(),"},{"line_number":59,"context_line":"        \u0027dev\u0027: fields.StringField(),"},{"line_number":60,"context_line":"        \u0027type\u0027: fields.StringField(),"},{"line_number":61,"context_line":"        \u0027format\u0027: fields.StringField(nullable\u003dTrue),"}],"source_content_type":"text/x-python","patch_set":11,"id":"5a710552_b6ea00ab","line":58,"updated":"2015-12-15 22:23:56.000000000","message":"Most of these come from:\n\nhttps://github.com/openstack/nova/blob/master/nova/virt/libvirt/blockinfo.py#L52\n\nWhich I kind of wanted to objectify at one point too rather than pass that disk_info dict around, but that\u0027s just more layers to the onion.\n\n--\n\nLooks like the bus enum is here:\n\nhttps://github.com/openstack/nova/blob/master/nova/objects/fields.py#L183","commit_id":"f5ee325187ca9e039b9f006c11a8e726641409bb"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"9799a3d6a21c7636409309b42b48af504982392e","unresolved":false,"context_lines":[{"line_number":57,"context_line":"        \u0027serial\u0027: fields.StringField(),"},{"line_number":58,"context_line":"        \u0027bus\u0027: fields.StringField(),"},{"line_number":59,"context_line":"        \u0027dev\u0027: fields.StringField(),"},{"line_number":60,"context_line":"        \u0027type\u0027: fields.StringField(),"},{"line_number":61,"context_line":"        \u0027format\u0027: fields.StringField(nullable\u003dTrue),"},{"line_number":62,"context_line":"        \u0027boot_index\u0027: fields.IntegerField(nullable\u003dTrue),"},{"line_number":63,"context_line":"        \u0027connection_info_json\u0027: fields.StringField(),"}],"source_content_type":"text/x-python","patch_set":11,"id":"5a710552_b601a06c","line":60,"updated":"2015-12-15 22:23:56.000000000","message":"I think this would be the enum for type:\n\nhttps://github.com/openstack/nova/blob/master/nova/objects/fields.py#L120","commit_id":"f5ee325187ca9e039b9f006c11a8e726641409bb"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"9799a3d6a21c7636409309b42b48af504982392e","unresolved":false,"context_lines":[{"line_number":97,"context_line":"        \u0027bdms\u0027: fields.ListOfObjectsField(\u0027LibvirtLiveMigrateBDMInfo\u0027),"},{"line_number":98,"context_line":"    }"},{"line_number":99,"context_line":""},{"line_number":100,"context_line":"    _live_result_keys \u003d {\u0027graphics_listen_addrs\u0027, \u0027serial_listen_addr\u0027}"},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"    def _bdms_to_legacy(self, legacy):"},{"line_number":103,"context_line":"        if not self.obj_attr_is_set(\u0027bdms\u0027):"}],"source_content_type":"text/x-python","patch_set":11,"id":"5a710552_796489e4","line":100,"updated":"2015-12-15 22:23:56.000000000","message":"I don\u0027t see these used anywhere.","commit_id":"f5ee325187ca9e039b9f006c11a8e726641409bb"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"9799a3d6a21c7636409309b42b48af504982392e","unresolved":false,"context_lines":[{"line_number":129,"context_line":"            if \u0027format\u0027 in vol:"},{"line_number":130,"context_line":"                bdmi.format \u003d vol[\u0027format\u0027]"},{"line_number":131,"context_line":"            if \u0027boot_index\u0027 in vol:"},{"line_number":132,"context_line":"                bdmi.boot_index \u003d int(vol[\u0027boot_index\u0027])"},{"line_number":133,"context_line":"            self.bdms.append(bdmi)"},{"line_number":134,"context_line":""},{"line_number":135,"context_line":"    def to_legacy_dict(self, pre_migration_result\u003dFalse):"}],"source_content_type":"text/x-python","patch_set":11,"id":"5a710552_f929598a","line":132,"updated":"2015-12-15 22:23:56.000000000","message":"Looks like blockinfo at least guards against this being None:\n\nhttps://github.com/openstack/nova/blob/master/nova/virt/libvirt/blockinfo.py#L340\n\nhttps://github.com/openstack/nova/blob/master/nova/virt/libvirt/blockinfo.py#L408","commit_id":"f5ee325187ca9e039b9f006c11a8e726641409bb"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"9799a3d6a21c7636409309b42b48af504982392e","unresolved":false,"context_lines":[{"line_number":133,"context_line":"            self.bdms.append(bdmi)"},{"line_number":134,"context_line":""},{"line_number":135,"context_line":"    def to_legacy_dict(self, pre_migration_result\u003dFalse):"},{"line_number":136,"context_line":"        LOG.debug(\u0027Converting to legacy: %s\u0027 % self)"},{"line_number":137,"context_line":"        legacy \u003d super(LibvirtLiveMigrateData, self).to_legacy_dict()"},{"line_number":138,"context_line":"        keys \u003d (set(self.fields.keys()) -"},{"line_number":139,"context_line":"                set(LiveMigrateData.fields.keys()) - {\u0027bdms\u0027})"}],"source_content_type":"text/x-python","patch_set":11,"id":"5a710552_393041e8","line":136,"updated":"2015-12-15 22:23:56.000000000","message":"I\u0027m thinking we probably don\u0027t want to debug log things in the conversion methods.","commit_id":"f5ee325187ca9e039b9f006c11a8e726641409bb"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"9799a3d6a21c7636409309b42b48af504982392e","unresolved":false,"context_lines":[{"line_number":154,"context_line":"            legacy[\u0027pre_live_migration_result\u0027] \u003d live_result"},{"line_number":155,"context_line":"            self._bdms_to_legacy(live_result)"},{"line_number":156,"context_line":""},{"line_number":157,"context_line":"        LOG.debug(\u0027Legacy result: %s\u0027 % legacy)"},{"line_number":158,"context_line":"        return legacy"},{"line_number":159,"context_line":""},{"line_number":160,"context_line":"    def from_legacy_dict(self, legacy):"}],"source_content_type":"text/x-python","patch_set":11,"id":"5a710552_56039c42","line":157,"updated":"2015-12-15 22:23:56.000000000","message":"ditto","commit_id":"f5ee325187ca9e039b9f006c11a8e726641409bb"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"9799a3d6a21c7636409309b42b48af504982392e","unresolved":false,"context_lines":[{"line_number":158,"context_line":"        return legacy"},{"line_number":159,"context_line":""},{"line_number":160,"context_line":"    def from_legacy_dict(self, legacy):"},{"line_number":161,"context_line":"        LOG.debug(\u0027Converting legacy dict to obj: %s\u0027 % legacy)"},{"line_number":162,"context_line":"        super(LibvirtLiveMigrateData, self).from_legacy_dict(legacy)"},{"line_number":163,"context_line":"        keys \u003d set(self.fields.keys()) - set(LiveMigrateData.fields.keys())"},{"line_number":164,"context_line":"        for k in keys - {\u0027bdms\u0027}:"}],"source_content_type":"text/x-python","patch_set":11,"id":"5a710552_d94d7d73","line":161,"updated":"2015-12-15 22:23:56.000000000","message":"ditto","commit_id":"f5ee325187ca9e039b9f006c11a8e726641409bb"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"9799a3d6a21c7636409309b42b48af504982392e","unresolved":false,"context_lines":[{"line_number":173,"context_line":"            if \u0027serial_listen_addr\u0027 in pre_result:"},{"line_number":174,"context_line":"                self.serial_listen_addr \u003d pre_result[\u0027serial_listen_addr\u0027]"},{"line_number":175,"context_line":"            self._bdms_from_legacy(pre_result)"},{"line_number":176,"context_line":"        LOG.debug(\u0027Converted object: %s\u0027 % self)"}],"source_content_type":"text/x-python","patch_set":11,"id":"5a710552_16fd143a","line":176,"updated":"2015-12-15 22:23:56.000000000","message":"Same here.","commit_id":"f5ee325187ca9e039b9f006c11a8e726641409bb"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"1cebb48eea51a03601629a833d742af9d71ec8f5","unresolved":false,"context_lines":[{"line_number":53,"context_line":"    VERSION \u003d \u00271.0\u0027"},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"    fields \u003d {"},{"line_number":56,"context_line":"        # FIXME(danms): some of these can be enums?"},{"line_number":57,"context_line":"        \u0027serial\u0027: fields.StringField(),"},{"line_number":58,"context_line":"        \u0027bus\u0027: fields.StringField(),"},{"line_number":59,"context_line":"        \u0027dev\u0027: fields.StringField(),"}],"source_content_type":"text/x-python","patch_set":12,"id":"3a7e1126_c4911b54","line":56,"updated":"2015-12-17 15:43:40.000000000","message":"I pointed out in PS11 a few of these that have enum types defined, you don\u0027t want to use those for the known ones?","commit_id":"723b86f4ae96f773cc0468d59e229ff739bffb50"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"0104a957e8c5388305f12394d83c2bc529799b62","unresolved":false,"context_lines":[{"line_number":53,"context_line":"    VERSION \u003d \u00271.0\u0027"},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"    fields \u003d {"},{"line_number":56,"context_line":"        # FIXME(danms): some of these can be enums?"},{"line_number":57,"context_line":"        \u0027serial\u0027: fields.StringField(),"},{"line_number":58,"context_line":"        \u0027bus\u0027: fields.StringField(),"},{"line_number":59,"context_line":"        \u0027dev\u0027: fields.StringField(),"}],"source_content_type":"text/x-python","patch_set":12,"id":"3a7e1126_df36c4e6","line":56,"in_reply_to":"3a7e1126_c4911b54","updated":"2015-12-17 15:50:25.000000000","message":"I do, I just forgot to do it for this round. I\u0027ll take a look and see if making that change will require further test changes and if so, I\u0027ll stack it on top to avoid confusing this set further.","commit_id":"723b86f4ae96f773cc0468d59e229ff739bffb50"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"1cebb48eea51a03601629a833d742af9d71ec8f5","unresolved":false,"context_lines":[{"line_number":54,"context_line":""},{"line_number":55,"context_line":"    fields \u003d {"},{"line_number":56,"context_line":"        # FIXME(danms): some of these can be enums?"},{"line_number":57,"context_line":"        \u0027serial\u0027: fields.StringField(),"},{"line_number":58,"context_line":"        \u0027bus\u0027: fields.StringField(),"},{"line_number":59,"context_line":"        \u0027dev\u0027: fields.StringField(),"},{"line_number":60,"context_line":"        \u0027type\u0027: fields.StringField(),"}],"source_content_type":"text/x-python","patch_set":12,"id":"3a7e1126_4499ab1e","line":57,"updated":"2015-12-17 15:43:40.000000000","message":"As noted in the driver code, I\u0027m pretty sure \u0027serial\u0027 is the volume uuid, so this could be a uuid field, but that would probably require updating a bunch of tests, so maybe we just leave a TODO here for that cleanup later.","commit_id":"723b86f4ae96f773cc0468d59e229ff739bffb50"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"0104a957e8c5388305f12394d83c2bc529799b62","unresolved":false,"context_lines":[{"line_number":54,"context_line":""},{"line_number":55,"context_line":"    fields \u003d {"},{"line_number":56,"context_line":"        # FIXME(danms): some of these can be enums?"},{"line_number":57,"context_line":"        \u0027serial\u0027: fields.StringField(),"},{"line_number":58,"context_line":"        \u0027bus\u0027: fields.StringField(),"},{"line_number":59,"context_line":"        \u0027dev\u0027: fields.StringField(),"},{"line_number":60,"context_line":"        \u0027type\u0027: fields.StringField(),"}],"source_content_type":"text/x-python","patch_set":12,"id":"3a7e1126_8402330a","line":57,"in_reply_to":"3a7e1126_4499ab1e","updated":"2015-12-17 15:50:25.000000000","message":"Yeah, I\u0027m not sure about that. I\u0027m pretty sure that vishy confirmed that the serial field on most disk drivers is not long enough to hold a uuid and so it\u0027s truncated. It might be stored that way, but I think assuming that it is going forward is probably a mistake.","commit_id":"723b86f4ae96f773cc0468d59e229ff739bffb50"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"1cebb48eea51a03601629a833d742af9d71ec8f5","unresolved":false,"context_lines":[{"line_number":85,"context_line":"        \u0027filename\u0027: fields.StringField(),"},{"line_number":86,"context_line":"        # FIXME: image_type should be enum?"},{"line_number":87,"context_line":"        \u0027image_type\u0027: fields.StringField(),"},{"line_number":88,"context_line":"        \u0027block_migration\u0027: fields.BooleanField(),"},{"line_number":89,"context_line":"        \u0027disk_over_commit\u0027: fields.BooleanField(),"},{"line_number":90,"context_line":"        \u0027disk_available_mb\u0027: fields.IntegerField(nullable\u003dTrue),"},{"line_number":91,"context_line":"        \u0027is_shared_instance_path\u0027: fields.BooleanField(),"}],"source_content_type":"text/x-python","patch_set":12,"id":"3a7e1126_24c81f22","line":88,"updated":"2015-12-17 15:43:40.000000000","message":"The pre_live_migration method in the libvirt driver defaults this to True, so maybe we should do that here too.","commit_id":"723b86f4ae96f773cc0468d59e229ff739bffb50"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"0104a957e8c5388305f12394d83c2bc529799b62","unresolved":false,"context_lines":[{"line_number":85,"context_line":"        \u0027filename\u0027: fields.StringField(),"},{"line_number":86,"context_line":"        # FIXME: image_type should be enum?"},{"line_number":87,"context_line":"        \u0027image_type\u0027: fields.StringField(),"},{"line_number":88,"context_line":"        \u0027block_migration\u0027: fields.BooleanField(),"},{"line_number":89,"context_line":"        \u0027disk_over_commit\u0027: fields.BooleanField(),"},{"line_number":90,"context_line":"        \u0027disk_available_mb\u0027: fields.IntegerField(nullable\u003dTrue),"},{"line_number":91,"context_line":"        \u0027is_shared_instance_path\u0027: fields.BooleanField(),"}],"source_content_type":"text/x-python","patch_set":12,"id":"3a7e1126_ffa5c003","line":88,"in_reply_to":"3a7e1126_24c81f22","updated":"2015-12-17 15:50:25.000000000","message":"I dunno, it seems safest to not default this in the data model. You\u0027ll notice that lots of the libvirt driver depends on whether or not some of these fields are specified or not (regardless of their value). I guess I\u0027m not too keen on changing much of that for fear of breaking something (not sure if this one is one of those fields).\n\nIn general, we default things rather infrequently on the objects...","commit_id":"723b86f4ae96f773cc0468d59e229ff739bffb50"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"1cebb48eea51a03601629a833d742af9d71ec8f5","unresolved":false,"context_lines":[{"line_number":88,"context_line":"        \u0027block_migration\u0027: fields.BooleanField(),"},{"line_number":89,"context_line":"        \u0027disk_over_commit\u0027: fields.BooleanField(),"},{"line_number":90,"context_line":"        \u0027disk_available_mb\u0027: fields.IntegerField(nullable\u003dTrue),"},{"line_number":91,"context_line":"        \u0027is_shared_instance_path\u0027: fields.BooleanField(),"},{"line_number":92,"context_line":"        \u0027is_shared_block_storage\u0027: fields.BooleanField(),"},{"line_number":93,"context_line":"        \u0027instance_relative_path\u0027: fields.StringField(),"},{"line_number":94,"context_line":"        \u0027graphics_listen_addr_vnc\u0027: fields.IPAddressField(nullable\u003dTrue),"}],"source_content_type":"text/x-python","patch_set":12,"id":"3a7e1126_e4d1b7ce","line":91,"updated":"2015-12-17 15:43:40.000000000","message":"The pre_live_migration method in the libvirt driver defaults this to True, so maybe we should do that here too.","commit_id":"723b86f4ae96f773cc0468d59e229ff739bffb50"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"1cebb48eea51a03601629a833d742af9d71ec8f5","unresolved":false,"context_lines":[{"line_number":89,"context_line":"        \u0027disk_over_commit\u0027: fields.BooleanField(),"},{"line_number":90,"context_line":"        \u0027disk_available_mb\u0027: fields.IntegerField(nullable\u003dTrue),"},{"line_number":91,"context_line":"        \u0027is_shared_instance_path\u0027: fields.BooleanField(),"},{"line_number":92,"context_line":"        \u0027is_shared_block_storage\u0027: fields.BooleanField(),"},{"line_number":93,"context_line":"        \u0027instance_relative_path\u0027: fields.StringField(),"},{"line_number":94,"context_line":"        \u0027graphics_listen_addr_vnc\u0027: fields.IPAddressField(nullable\u003dTrue),"},{"line_number":95,"context_line":"        \u0027graphics_listen_addr_spice\u0027: fields.IPAddressField(nullable\u003dTrue),"}],"source_content_type":"text/x-python","patch_set":12,"id":"3a7e1126_04d5e3b7","line":92,"updated":"2015-12-17 15:43:40.000000000","message":"The pre_live_migration method in the libvirt driver defaults this to True, so maybe we should do that here too.","commit_id":"723b86f4ae96f773cc0468d59e229ff739bffb50"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"1cebb48eea51a03601629a833d742af9d71ec8f5","unresolved":false,"context_lines":[{"line_number":90,"context_line":"        \u0027disk_available_mb\u0027: fields.IntegerField(nullable\u003dTrue),"},{"line_number":91,"context_line":"        \u0027is_shared_instance_path\u0027: fields.BooleanField(),"},{"line_number":92,"context_line":"        \u0027is_shared_block_storage\u0027: fields.BooleanField(),"},{"line_number":93,"context_line":"        \u0027instance_relative_path\u0027: fields.StringField(),"},{"line_number":94,"context_line":"        \u0027graphics_listen_addr_vnc\u0027: fields.IPAddressField(nullable\u003dTrue),"},{"line_number":95,"context_line":"        \u0027graphics_listen_addr_spice\u0027: fields.IPAddressField(nullable\u003dTrue),"},{"line_number":96,"context_line":"        \u0027serial_listen_addr\u0027: fields.StringField(),"}],"source_content_type":"text/x-python","patch_set":12,"id":"3a7e1126_c4ca7b6e","line":93,"updated":"2015-12-17 15:43:40.000000000","message":"The libvirt driver code treats this like a boolean, at least that\u0027s what you\u0027re defaulting to in the rollback method in the libvirt driver, so seems like this should be a boolean? So either this is wrong or that code is defaulting to \u0027True\u0027 but it should default to None since it should be a path, like how it\u0027s used here:\n\nhttps://github.com/openstack/nova/blob/master/nova/virt/libvirt/utils.py#L452\n\nWhich would make this a nullable field.","commit_id":"723b86f4ae96f773cc0468d59e229ff739bffb50"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"0104a957e8c5388305f12394d83c2bc529799b62","unresolved":false,"context_lines":[{"line_number":90,"context_line":"        \u0027disk_available_mb\u0027: fields.IntegerField(nullable\u003dTrue),"},{"line_number":91,"context_line":"        \u0027is_shared_instance_path\u0027: fields.BooleanField(),"},{"line_number":92,"context_line":"        \u0027is_shared_block_storage\u0027: fields.BooleanField(),"},{"line_number":93,"context_line":"        \u0027instance_relative_path\u0027: fields.StringField(),"},{"line_number":94,"context_line":"        \u0027graphics_listen_addr_vnc\u0027: fields.IPAddressField(nullable\u003dTrue),"},{"line_number":95,"context_line":"        \u0027graphics_listen_addr_spice\u0027: fields.IPAddressField(nullable\u003dTrue),"},{"line_number":96,"context_line":"        \u0027serial_listen_addr\u0027: fields.StringField(),"}],"source_content_type":"text/x-python","patch_set":12,"id":"3a7e1126_dfd9e484","line":93,"in_reply_to":"3a7e1126_c4ca7b6e","updated":"2015-12-17 15:50:25.000000000","message":"Hmm, yeah.","commit_id":"723b86f4ae96f773cc0468d59e229ff739bffb50"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"a0b15c224aafa2a2516cc2cdf4e91e2c4cb4402a","unresolved":false,"context_lines":[{"line_number":90,"context_line":"        \u0027disk_available_mb\u0027: fields.IntegerField(nullable\u003dTrue),"},{"line_number":91,"context_line":"        \u0027is_shared_instance_path\u0027: fields.BooleanField(),"},{"line_number":92,"context_line":"        \u0027is_shared_block_storage\u0027: fields.BooleanField(),"},{"line_number":93,"context_line":"        \u0027instance_relative_path\u0027: fields.StringField(),"},{"line_number":94,"context_line":"        \u0027graphics_listen_addr_vnc\u0027: fields.IPAddressField(nullable\u003dTrue),"},{"line_number":95,"context_line":"        \u0027graphics_listen_addr_spice\u0027: fields.IPAddressField(nullable\u003dTrue),"},{"line_number":96,"context_line":"        \u0027serial_listen_addr\u0027: fields.StringField(),"}],"source_content_type":"text/x-python","patch_set":12,"id":"3a7e1126_5fcbb41e","line":93,"in_reply_to":"3a7e1126_dfd9e484","updated":"2015-12-17 15:55:43.000000000","message":"Actually, I think I\u0027m doing this right. I don\u0027t think it should be nullable because we don\u0027t need to store it on the object as None. The libvirt driver treats it as something that can be unset, for compatibility reasons, which we need to support. However, I don\u0027t think it\u0027s ever actually none, it can just be none in some local scope variables because we pull it out of a dict with get().","commit_id":"723b86f4ae96f773cc0468d59e229ff739bffb50"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"ab42ee49db9e51be9e9bc4a8e133c642593617a7","unresolved":false,"context_lines":[{"line_number":84,"context_line":"        }"},{"line_number":85,"context_line":"        if self.obj_attr_is_set(\u0027format\u0027) and self.format:"},{"line_number":86,"context_line":"            info_dict[\u0027format\u0027] \u003d self.format"},{"line_number":87,"context_line":"        if self.obj_attr_is_set(\u0027boot_index\u0027) and self.format is not None:"},{"line_number":88,"context_line":"            info_dict[\u0027boot_index\u0027] \u003d str(self.boot_index)"},{"line_number":89,"context_line":"        return info_dict"},{"line_number":90,"context_line":""}],"source_content_type":"text/x-python","patch_set":15,"id":"3a7e1126_cef57557","line":87,"updated":"2015-12-18 16:51:24.000000000","message":"This needs to check that self.boot_index is not None, not format (copy/paste error).","commit_id":"002add3e9d1d9b66a484b363c3d8df2d279b40d1"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"ab42ee49db9e51be9e9bc4a8e133c642593617a7","unresolved":false,"context_lines":[{"line_number":109,"context_line":"        \u0027bdms\u0027: fields.ListOfObjectsField(\u0027LibvirtLiveMigrateBDMInfo\u0027),"},{"line_number":110,"context_line":"    }"},{"line_number":111,"context_line":""},{"line_number":112,"context_line":"    _live_result_keys \u003d {\u0027graphics_listen_addrs\u0027, \u0027serial_listen_addr\u0027}"},{"line_number":113,"context_line":""},{"line_number":114,"context_line":"    def _bdms_to_legacy(self, legacy):"},{"line_number":115,"context_line":"        if not self.obj_attr_is_set(\u0027bdms\u0027):"}],"source_content_type":"text/x-python","patch_set":15,"id":"3a7e1126_0e8ffdcc","line":112,"updated":"2015-12-18 16:51:24.000000000","message":"This variable isn\u0027t used.","commit_id":"002add3e9d1d9b66a484b363c3d8df2d279b40d1"}],"nova/tests/unit/objects/test_migrate_data.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"ab42ee49db9e51be9e9bc4a8e133c642593617a7","unresolved":false,"context_lines":[{"line_number":144,"context_line":"            bus\u003d\u0027scsi\u0027,"},{"line_number":145,"context_line":"            dev\u003d\u0027/dev/sda\u0027,"},{"line_number":146,"context_line":"            type\u003d\u0027disk\u0027,"},{"line_number":147,"context_line":"            format\u003d\u0027qcow2\u0027,"},{"line_number":148,"context_line":"            boot_index\u003d1,"},{"line_number":149,"context_line":"            connection_info\u003d\u0027myinfo\u0027)"},{"line_number":150,"context_line":"        obj \u003d migrate_data.LibvirtLiveMigrateData("}],"source_content_type":"text/x-python","patch_set":15,"id":"3a7e1126_8e476d76","line":147,"updated":"2015-12-18 16:51:24.000000000","message":"Since format and boot_index are optional, we should probably test some logic that they aren\u0027t set.","commit_id":"002add3e9d1d9b66a484b363c3d8df2d279b40d1"}],"nova/virt/libvirt/driver.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"9799a3d6a21c7636409309b42b48af504982392e","unresolved":false,"context_lines":[{"line_number":6211,"context_line":"            if migrate_data:"},{"line_number":6212,"context_line":"                is_shared_instance_path \u003d migrate_data.get("},{"line_number":6213,"context_line":"                        \u0027is_shared_instance_path\u0027, True)"},{"line_number":6214,"context_line":"            if not is_shared_instance_path:"},{"line_number":6215,"context_line":"                instance_dir \u003d libvirt_utils.get_instance_path_at_destination("},{"line_number":6216,"context_line":"                                instance, migrate_data)"},{"line_number":6217,"context_line":"                if os.path.exists(instance_dir):"}],"source_content_type":"text/x-python","patch_set":11,"id":"5a710552_b9cd11b9","line":6214,"updated":"2015-12-15 22:23:56.000000000","message":"This method now expects migrate_data to be an object right?  But the compute manager isn\u0027t passing an object in the rollback case yet.","commit_id":"f5ee325187ca9e039b9f006c11a8e726641409bb"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"1cebb48eea51a03601629a833d742af9d71ec8f5","unresolved":false,"context_lines":[{"line_number":6219,"context_line":"                is_shared_instance_path \u003d migrate_data.get("},{"line_number":6220,"context_line":"                        \u0027is_shared_instance_path\u0027, True)"},{"line_number":6221,"context_line":"                instance_relative_path \u003d migrate_data.get("},{"line_number":6222,"context_line":"                        \u0027instance_relative_path\u0027, \u0027True\u0027)"},{"line_number":6223,"context_line":"            if not is_shared_instance_path:"},{"line_number":6224,"context_line":"                instance_dir \u003d libvirt_utils.get_instance_path_at_destination("},{"line_number":6225,"context_line":"                    instance,"}],"source_content_type":"text/x-python","patch_set":12,"id":"3a7e1126_c447db1b","line":6222,"updated":"2015-12-17 15:43:40.000000000","message":"Why are we defaulting to True here? The libvirt utils code wasn\u0027t doing that:\n\nhttps://github.com/openstack/nova/blob/master/nova/virt/libvirt/utils.py#L452","commit_id":"723b86f4ae96f773cc0468d59e229ff739bffb50"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"a0b15c224aafa2a2516cc2cdf4e91e2c4cb4402a","unresolved":false,"context_lines":[{"line_number":6219,"context_line":"                is_shared_instance_path \u003d migrate_data.get("},{"line_number":6220,"context_line":"                        \u0027is_shared_instance_path\u0027, True)"},{"line_number":6221,"context_line":"                instance_relative_path \u003d migrate_data.get("},{"line_number":6222,"context_line":"                        \u0027instance_relative_path\u0027, \u0027True\u0027)"},{"line_number":6223,"context_line":"            if not is_shared_instance_path:"},{"line_number":6224,"context_line":"                instance_dir \u003d libvirt_utils.get_instance_path_at_destination("},{"line_number":6225,"context_line":"                    instance,"}],"source_content_type":"text/x-python","patch_set":12,"id":"3a7e1126_bf03b841","line":6222,"in_reply_to":"3a7e1126_c447db1b","updated":"2015-12-17 15:55:43.000000000","message":"Agree, this is wrong, not sure why I did that.","commit_id":"723b86f4ae96f773cc0468d59e229ff739bffb50"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"1cebb48eea51a03601629a833d742af9d71ec8f5","unresolved":false,"context_lines":[{"line_number":6353,"context_line":"                    instance, CONF.libvirt.virt_type, image_meta, vol)"},{"line_number":6354,"context_line":""},{"line_number":6355,"context_line":"                bdmi \u003d objects.LibvirtLiveMigrateBDMInfo()"},{"line_number":6356,"context_line":"                bdmi.serial \u003d connection_info[\u0027serial\u0027]"},{"line_number":6357,"context_line":"                bdmi.connection_info \u003d connection_info"},{"line_number":6358,"context_line":"                bdmi.bus \u003d disk_info[\u0027bus\u0027]"},{"line_number":6359,"context_line":"                bdmi.dev \u003d disk_info[\u0027dev\u0027]"}],"source_content_type":"text/x-python","patch_set":12,"id":"3a7e1126_64f3879f","line":6356,"updated":"2015-12-17 15:43:40.000000000","message":"I *think* serial is actually the volume uuid, it\u0027s set in the nova.virt.block_device code, so we could make the field type a uuid field - but that would probably also require updating a bunch of tests that aren\u0027t setting a uuid field value. We could put a TODO in the field object code to convert it to a uuid field though at some point.","commit_id":"723b86f4ae96f773cc0468d59e229ff739bffb50"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"ab42ee49db9e51be9e9bc4a8e133c642593617a7","unresolved":false,"context_lines":[{"line_number":6177,"context_line":"                        \u0027instance_relative_path\u0027)"},{"line_number":6178,"context_line":"            mdo \u003d objects.LibvirtLiveMigrateData()"},{"line_number":6179,"context_line":"            if instance_relative_path:"},{"line_number":6180,"context_line":"                mdo[\u0027instance_relative_path\u0027] \u003d instance_relative_path"},{"line_number":6181,"context_line":"            if not is_shared_instance_path:"},{"line_number":6182,"context_line":"                instance_dir \u003d libvirt_utils.get_instance_path_at_destination("},{"line_number":6183,"context_line":"                    instance, mdo)"}],"source_content_type":"text/x-python","patch_set":15,"id":"3a7e1126_31449848","line":6180,"updated":"2015-12-18 16:51:24.000000000","message":"I didn\u0027t think there was dict compat on these objects?","commit_id":"002add3e9d1d9b66a484b363c3d8df2d279b40d1"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"8d447ac6eac760303bca255206b738d376f4a527","unresolved":false,"context_lines":[{"line_number":6177,"context_line":"                        \u0027instance_relative_path\u0027)"},{"line_number":6178,"context_line":"            mdo \u003d objects.LibvirtLiveMigrateData()"},{"line_number":6179,"context_line":"            if instance_relative_path:"},{"line_number":6180,"context_line":"                mdo[\u0027instance_relative_path\u0027] \u003d instance_relative_path"},{"line_number":6181,"context_line":"            if not is_shared_instance_path:"},{"line_number":6182,"context_line":"                instance_dir \u003d libvirt_utils.get_instance_path_at_destination("},{"line_number":6183,"context_line":"                    instance, mdo)"}],"source_content_type":"text/x-python","patch_set":15,"id":"3a7e1126_717a2079","line":6180,"in_reply_to":"3a7e1126_31449848","updated":"2015-12-18 16:52:46.000000000","message":"Yeah this fails:\n\nhttp://logs.openstack.org/20/247720/15/check/gate-tempest-dsvm-multinode-full/497e483/logs/subnode-2/screen-n-cpu.txt.gz#_2015-12-18_15_26_37_364\n\nWe must be missing unit test coverage for this condition.","commit_id":"002add3e9d1d9b66a484b363c3d8df2d279b40d1"}],"nova/virt/libvirt/utils.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"9799a3d6a21c7636409309b42b48af504982392e","unresolved":false,"context_lines":[{"line_number":449,"context_line":"    \"\"\""},{"line_number":450,"context_line":"    instance_relative_path \u003d None"},{"line_number":451,"context_line":"    if migrate_data:"},{"line_number":452,"context_line":"        instance_relative_path \u003d migrate_data.instance_relative_path"},{"line_number":453,"context_line":"    # NOTE(mikal): this doesn\u0027t use libvirt_utils.get_instance_path"},{"line_number":454,"context_line":"    # because we are ensuring that the same instance directory name"},{"line_number":455,"context_line":"    # is used as was at the source"}],"source_content_type":"text/x-python","patch_set":11,"id":"5a710552_d937bdae","line":452,"updated":"2015-12-15 22:23:56.000000000","message":"I think this will fail in the case of rollback_live_migration_at_destination.","commit_id":"f5ee325187ca9e039b9f006c11a8e726641409bb"}]}
