)]}'
{"nova/db/api.py":[{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"613a88e7af2f68d822e8719e8b562406701c7644","unresolved":false,"context_lines":[{"line_number":641,"context_line":""},{"line_number":642,"context_line":""},{"line_number":643,"context_line":"def virtual_interface_update(context, address, values):"},{"line_number":644,"context_line":"    \"\"\"Create a virtual interface record in the database.\"\"\""},{"line_number":645,"context_line":"    return IMPL.virtual_interface_update(context, address, values)"},{"line_number":646,"context_line":""},{"line_number":647,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"dab17558_3c63af43","line":644,"updated":"2016-05-11 13:41:14.000000000","message":"s/Create/Update","commit_id":"541ac385b768aed1462021f5d12b58dbe1c7265b"}],"nova/db/sqlalchemy/api.py":[{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"2fe9e6039e34d2b591bee9a252837f674775e832","unresolved":false,"context_lines":[{"line_number":1710,"context_line":""},{"line_number":1711,"context_line":""},{"line_number":1712,"context_line":"@require_context"},{"line_number":1713,"context_line":"@pick_context_manager_writer"},{"line_number":1714,"context_line":"def virtual_interface_update(context, address, values):"},{"line_number":1715,"context_line":"    virtual_interface_get_by_address(context, address).update(values)"},{"line_number":1716,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"bab6814e_2365a4b4","line":1713,"updated":"2016-05-19 23:04:43.000000000","message":"Hmm I don\u0027t know what this pick_ variant is... I see it on the thing below, so it Must Be Right(tm).","commit_id":"538060957a32bd4d37413c2f052ba2ce83528795"}],"nova/db/sqlalchemy/models.py":[{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"3d5945bdfe2080dc498bd1f382b4658bce9ce262","unresolved":false,"context_lines":[{"line_number":371,"context_line":"    id \u003d Column(Integer, primary_key\u003dTrue, autoincrement\u003dTrue)"},{"line_number":372,"context_line":"    instance_uuid \u003d Column(String(36), ForeignKey(\u0027instances.uuid\u0027),"},{"line_number":373,"context_line":"                           nullable\u003dFalse)"},{"line_number":374,"context_line":"    devices_metadata \u003d orm.deferred(Column(Text))"},{"line_number":375,"context_line":"    numa_topology \u003d orm.deferred(Column(Text))"},{"line_number":376,"context_line":"    pci_requests \u003d orm.deferred(Column(Text))"},{"line_number":377,"context_line":"    flavor \u003d orm.deferred(Column(Text))"}],"source_content_type":"text/x-python","patch_set":16,"id":"3aaa91ec_87efb5af","line":374,"updated":"2016-06-21 19:33:31.000000000","message":"The above field isn\u0027t used anywhere in this patch. Is that intended?","commit_id":"57e658a6d432a8d51cdcc081c523032d0f5b1047"}],"nova/objects/virtual_interface.py":[{"author":{"_account_id":17973,"name":"Ludovic Beliveau","email":"lbeliveau@gmail.com","username":"lbeliveau"},"change_message_id":"a50d95d40ad64e7b9cf2c351478442427368a7cb","unresolved":false,"context_lines":[{"line_number":93,"context_line":"    @base.remotable"},{"line_number":94,"context_line":"    def save(self):"},{"line_number":95,"context_line":"        updates \u003d self.obj_get_changes()"},{"line_number":96,"context_line":"        if \u0027address\u0027 in updates:"},{"line_number":97,"context_line":"            raise exception.ObjectActionError(action\u003d\u0027save\u0027,"},{"line_number":98,"context_line":"                                              reason\u003d\u0027address is not mutable\u0027)"},{"line_number":99,"context_line":"        db.virtual_interface_update(self._context, self.address, updates)"}],"source_content_type":"text/x-python","patch_set":5,"id":"dab17558_52612004","line":96,"updated":"2016-05-11 23:08:45.000000000","message":"I read the bp a while a go.  Now trying to understand the code and some of the concepts in more details ...\n\nWhy address is not mutable but bus and bus_address are ?","commit_id":"541ac385b768aed1462021f5d12b58dbe1c7265b"},{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"1e49094df70de3588c4a736a496d2f438bee26d4","unresolved":false,"context_lines":[{"line_number":93,"context_line":"    @base.remotable"},{"line_number":94,"context_line":"    def save(self):"},{"line_number":95,"context_line":"        updates \u003d self.obj_get_changes()"},{"line_number":96,"context_line":"        if \u0027address\u0027 in updates:"},{"line_number":97,"context_line":"            raise exception.ObjectActionError(action\u003d\u0027save\u0027,"},{"line_number":98,"context_line":"                                              reason\u003d\u0027address is not mutable\u0027)"},{"line_number":99,"context_line":"        db.virtual_interface_update(self._context, self.address, updates)"}],"source_content_type":"text/x-python","patch_set":5,"id":"dab17558_124c8f75","line":96,"in_reply_to":"dab17558_52612004","updated":"2016-05-12 15:24:17.000000000","message":"\u0027address\u0027 is what the guest is discovery we want it to never change, whereas bus_address and bus are related to the host, they might change when migrate instance.","commit_id":"541ac385b768aed1462021f5d12b58dbe1c7265b"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"2fe9e6039e34d2b591bee9a252837f674775e832","unresolved":false,"context_lines":[{"line_number":40,"context_line":"    def obj_make_compatible(self, primitive, target_version):"},{"line_number":41,"context_line":"        target_version \u003d versionutils.convert_version_to_tuple(target_version)"},{"line_number":42,"context_line":"        if target_version \u003c (1, 1) and \u0027tag\u0027 in primitive:"},{"line_number":43,"context_line":"            del primitive[\u0027tag\u0027]"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"    @staticmethod"},{"line_number":46,"context_line":"    def _from_db_object(context, vif, db_vif):"}],"source_content_type":"text/x-python","patch_set":6,"id":"bab6814e_03b86029","line":43,"updated":"2016-05-19 23:04:43.000000000","message":"You need an obj_make_compatible() rule for this, and it has to *fail* if network_id is null, else you\u0027ll break sending these to older clients.","commit_id":"538060957a32bd4d37413c2f052ba2ce83528795"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"2fe9e6039e34d2b591bee9a252837f674775e832","unresolved":false,"context_lines":[{"line_number":87,"context_line":"    @base.remotable"},{"line_number":88,"context_line":"    def save(self):"},{"line_number":89,"context_line":"        updates \u003d self.obj_get_changes()"},{"line_number":90,"context_line":"        if \u0027address\u0027 in updates:"},{"line_number":91,"context_line":"            raise exception.ObjectActionError(action\u003d\u0027save\u0027,"},{"line_number":92,"context_line":"                                              reason\u003d\u0027address is not mutable\u0027)"},{"line_number":93,"context_line":"        db.virtual_interface_update(self._context, self.address, updates)"}],"source_content_type":"text/x-python","patch_set":6,"id":"bab6814e_e38b9c66","line":90,"updated":"2016-05-19 23:04:43.000000000","message":"This tells me that anything but address is mutable. That means you need to refresh this object from the database after the update in case anything else has changed.","commit_id":"538060957a32bd4d37413c2f052ba2ce83528795"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"85cee098549c66a66d992333db61c83523ae8b5c","unresolved":false,"context_lines":[{"line_number":31,"context_line":"    fields \u003d {"},{"line_number":32,"context_line":"        \u0027id\u0027: fields.IntegerField(),"},{"line_number":33,"context_line":"        \u0027address\u0027: fields.StringField(nullable\u003dTrue),"},{"line_number":34,"context_line":"        \u0027network_id\u0027: fields.IntegerField(nullable\u003dTrue),"},{"line_number":35,"context_line":"        \u0027instance_uuid\u0027: fields.UUIDField(),"},{"line_number":36,"context_line":"        \u0027uuid\u0027: fields.UUIDField(),"},{"line_number":37,"context_line":"        \u0027tag\u0027: fields.StringField(nullable\u003dTrue),"}],"source_content_type":"text/x-python","patch_set":10,"id":"7aa08908_5acb0672","line":34,"updated":"2016-06-14 19:17:59.000000000","message":"Remind me why this needs to be nullable? Just to be clear, nullable means \"can be none\" not \"is not required\". Any field can be unset. I\u0027ll look at the patches above this and hopefully discover why this is necessary, but just wanted to leave a note here.","commit_id":"9fdc65e81d0f889c2fac31f8355c74f738d539cc"},{"author":{"_account_id":8802,"name":"Vladik Romanovsky","email":"vromanso@redhat.com","username":"vladikr"},"change_message_id":"9238b619030b757d6fcaca7fbbbb4f700070ed8c","unresolved":false,"context_lines":[{"line_number":31,"context_line":"    fields \u003d {"},{"line_number":32,"context_line":"        \u0027id\u0027: fields.IntegerField(),"},{"line_number":33,"context_line":"        \u0027address\u0027: fields.StringField(nullable\u003dTrue),"},{"line_number":34,"context_line":"        \u0027network_id\u0027: fields.IntegerField(nullable\u003dTrue),"},{"line_number":35,"context_line":"        \u0027instance_uuid\u0027: fields.UUIDField(),"},{"line_number":36,"context_line":"        \u0027uuid\u0027: fields.UUIDField(),"},{"line_number":37,"context_line":"        \u0027tag\u0027: fields.StringField(nullable\u003dTrue),"}],"source_content_type":"text/x-python","patch_set":10,"id":"7aa08908_86607302","line":34,"in_reply_to":"7aa08908_5acb0672","updated":"2016-06-14 21:24:38.000000000","message":"Yea. You are right, it\u0027s here because of my confusion.\nTesting this previously led to an exception, and I\u0027ve set this value to be nullable. However, testing this now w/o it being nullable just works..","commit_id":"9fdc65e81d0f889c2fac31f8355c74f738d539cc"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"85cee098549c66a66d992333db61c83523ae8b5c","unresolved":false,"context_lines":[{"line_number":42,"context_line":"        if target_version \u003c (1, 1) and \u0027tag\u0027 in primitive:"},{"line_number":43,"context_line":"            del primitive[\u0027tag\u0027]"},{"line_number":44,"context_line":"        elif target_version \u003c (1, 2) and \u0027network_id\u0027 not in primitive:"},{"line_number":45,"context_line":"            if not self.obj_attr_is_set(\u0027network_id\u0027) or not self.network_id:"},{"line_number":46,"context_line":"                # NOTE(vladikr): setting a fake value to allow for older"},{"line_number":47,"context_line":"                # versions that demand a value to work."},{"line_number":48,"context_line":"                # Setting to -1 should be safe, as in case this value will be"}],"source_content_type":"text/x-python","patch_set":10,"id":"7aa08908_fa13d2b5","line":45,"updated":"2016-06-14 19:17:59.000000000","message":"This is really different from nullability and shouldn\u0027t be conflated. If you want to bump the version to signal \"this property is no longer used\" and fill it with a default on backport, then that\u0027s cool. However, I\u0027m concerned that you\u0027re confusing nullability and un-set-ness per above.","commit_id":"9fdc65e81d0f889c2fac31f8355c74f738d539cc"},{"author":{"_account_id":8802,"name":"Vladik Romanovsky","email":"vromanso@redhat.com","username":"vladikr"},"change_message_id":"9238b619030b757d6fcaca7fbbbb4f700070ed8c","unresolved":false,"context_lines":[{"line_number":42,"context_line":"        if target_version \u003c (1, 1) and \u0027tag\u0027 in primitive:"},{"line_number":43,"context_line":"            del primitive[\u0027tag\u0027]"},{"line_number":44,"context_line":"        elif target_version \u003c (1, 2) and \u0027network_id\u0027 not in primitive:"},{"line_number":45,"context_line":"            if not self.obj_attr_is_set(\u0027network_id\u0027) or not self.network_id:"},{"line_number":46,"context_line":"                # NOTE(vladikr): setting a fake value to allow for older"},{"line_number":47,"context_line":"                # versions that demand a value to work."},{"line_number":48,"context_line":"                # Setting to -1 should be safe, as in case this value will be"}],"source_content_type":"text/x-python","patch_set":10,"id":"7aa08908_061ac37c","line":45,"in_reply_to":"7aa08908_fa13d2b5","updated":"2016-06-14 21:24:38.000000000","message":"I prefer to keep this and handle weird cases by setting a fake value.","commit_id":"9fdc65e81d0f889c2fac31f8355c74f738d539cc"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"85cee098549c66a66d992333db61c83523ae8b5c","unresolved":false,"context_lines":[{"line_number":99,"context_line":"        if \u0027address\u0027 in updates:"},{"line_number":100,"context_line":"            raise exception.ObjectActionError(action\u003d\u0027save\u0027,"},{"line_number":101,"context_line":"                                              reason\u003d\u0027address is not mutable\u0027)"},{"line_number":102,"context_line":"        db.virtual_interface_update(self._context, self.address, updates)"},{"line_number":103,"context_line":"        self.obj_reset_changes()"},{"line_number":104,"context_line":""},{"line_number":105,"context_line":"    @base.remotable_classmethod"}],"source_content_type":"text/x-python","patch_set":10,"id":"7aa08908_7a224253","line":102,"updated":"2016-06-14 19:17:59.000000000","message":"Since you\u0027re not returning the current values from this db method, our object won\u0027t be refreshed for fields that we have\u0027t changed. You should return the new model from that call and then use _from_db_object() to freshen this object. All the other objects work this way so it\u0027d be good to be consistent.","commit_id":"9fdc65e81d0f889c2fac31f8355c74f738d539cc"},{"author":{"_account_id":8802,"name":"Vladik Romanovsky","email":"vromanso@redhat.com","username":"vladikr"},"change_message_id":"9238b619030b757d6fcaca7fbbbb4f700070ed8c","unresolved":false,"context_lines":[{"line_number":99,"context_line":"        if \u0027address\u0027 in updates:"},{"line_number":100,"context_line":"            raise exception.ObjectActionError(action\u003d\u0027save\u0027,"},{"line_number":101,"context_line":"                                              reason\u003d\u0027address is not mutable\u0027)"},{"line_number":102,"context_line":"        db.virtual_interface_update(self._context, self.address, updates)"},{"line_number":103,"context_line":"        self.obj_reset_changes()"},{"line_number":104,"context_line":""},{"line_number":105,"context_line":"    @base.remotable_classmethod"}],"source_content_type":"text/x-python","patch_set":10,"id":"7aa08908_e61cd778","line":102,"in_reply_to":"7aa08908_7a224253","updated":"2016-06-14 21:24:38.000000000","message":"Done","commit_id":"9fdc65e81d0f889c2fac31f8355c74f738d539cc"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"b29c8d8e1996ed2636d77abf1feb63c71d3199fe","unresolved":false,"context_lines":[{"line_number":25,"context_line":"class VirtualInterface(base.NovaPersistentObject, base.NovaObject):"},{"line_number":26,"context_line":"    # Version 1.0: Initial version"},{"line_number":27,"context_line":"    # Version 1.1: Add tag field"},{"line_number":28,"context_line":"    # Version 1.2: Make network_id nullable"},{"line_number":29,"context_line":"    VERSION \u003d \u00271.2\u0027"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"    fields \u003d {"}],"source_content_type":"text/x-python","patch_set":11,"id":"7aa08908_cd49cc62","line":28,"range":{"start_line":28,"start_character":19,"end_line":28,"end_character":43},"updated":"2016-06-15 16:01:03.000000000","message":"This is no longer accurate :)\n\nSo is the plan to keep the version bump purely to signal that we now have a situation where this can be unset (presumably not possible before?)?\n\nAre we sure that the paths in which we\u0027ll use this would choke on that? If so, then that seems like a reasonable thing to do. Not sure we have had that situation arise before, but...","commit_id":"8c7aec6ef3008effa99ddf3f928e9b1c76984bfe"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"545b5e3b2d514301923bcb4ec9b890dd1f935973","unresolved":false,"context_lines":[{"line_number":25,"context_line":"class VirtualInterface(base.NovaPersistentObject, base.NovaObject):"},{"line_number":26,"context_line":"    # Version 1.0: Initial version"},{"line_number":27,"context_line":"    # Version 1.1: Add tag field"},{"line_number":28,"context_line":"    # Version 1.2: Make network_id nullable"},{"line_number":29,"context_line":"    VERSION \u003d \u00271.2\u0027"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"    fields \u003d {"}],"source_content_type":"text/x-python","patch_set":11,"id":"7aa08908_c1f3509e","line":28,"range":{"start_line":28,"start_character":19,"end_line":28,"end_character":43},"in_reply_to":"7aa08908_cd49cc62","updated":"2016-06-15 18:42:15.000000000","message":"I think we can remove the version bump alltogether. If nova-network is in use, network_id will never be null/missing. If nova-network is not in use, nothing reads network_id.","commit_id":"8c7aec6ef3008effa99ddf3f928e9b1c76984bfe"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"b29c8d8e1996ed2636d77abf1feb63c71d3199fe","unresolved":false,"context_lines":[{"line_number":42,"context_line":"        if target_version \u003c (1, 1) and \u0027tag\u0027 in primitive:"},{"line_number":43,"context_line":"            del primitive[\u0027tag\u0027]"},{"line_number":44,"context_line":"        elif target_version \u003c (1, 2) and \u0027network_id\u0027 not in primitive:"},{"line_number":45,"context_line":"            if not self.obj_attr_is_set(\u0027network_id\u0027) or not self.network_id:"},{"line_number":46,"context_line":"                # NOTE(vladikr): setting a fake value to allow for older"},{"line_number":47,"context_line":"                # versions that demand a value to work."},{"line_number":48,"context_line":"                # Setting to -1 should be safe, as in case this value will be"}],"source_content_type":"text/x-python","patch_set":11,"id":"7aa08908_cdb70c39","line":45,"range":{"start_line":45,"start_character":12,"end_line":45,"end_character":77},"updated":"2016-06-15 16:01:03.000000000","message":"I think you can remove this extra conditional. If we\u0027re \u003c1.2 and network_id is not set, we don\u0027t need to check if it\u0027s set (again) and/or test the value of it.","commit_id":"8c7aec6ef3008effa99ddf3f928e9b1c76984bfe"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"545b5e3b2d514301923bcb4ec9b890dd1f935973","unresolved":false,"context_lines":[{"line_number":42,"context_line":"        if target_version \u003c (1, 1) and \u0027tag\u0027 in primitive:"},{"line_number":43,"context_line":"            del primitive[\u0027tag\u0027]"},{"line_number":44,"context_line":"        elif target_version \u003c (1, 2) and \u0027network_id\u0027 not in primitive:"},{"line_number":45,"context_line":"            if not self.obj_attr_is_set(\u0027network_id\u0027) or not self.network_id:"},{"line_number":46,"context_line":"                # NOTE(vladikr): setting a fake value to allow for older"},{"line_number":47,"context_line":"                # versions that demand a value to work."},{"line_number":48,"context_line":"                # Setting to -1 should be safe, as in case this value will be"}],"source_content_type":"text/x-python","patch_set":11,"id":"7aa08908_e1f64c8f","line":45,"range":{"start_line":45,"start_character":12,"end_line":45,"end_character":77},"in_reply_to":"7aa08908_cdb70c39","updated":"2016-06-15 18:42:15.000000000","message":"Done","commit_id":"8c7aec6ef3008effa99ddf3f928e9b1c76984bfe"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"b29c8d8e1996ed2636d77abf1feb63c71d3199fe","unresolved":false,"context_lines":[{"line_number":101,"context_line":"                                              reason\u003d\u0027address is not mutable\u0027)"},{"line_number":102,"context_line":"        db_vif \u003d db.virtual_interface_update(self._context, self.address,"},{"line_number":103,"context_line":"                                             updates)"},{"line_number":104,"context_line":"        if db_vif:"},{"line_number":105,"context_line":"            return self._from_db_object(self._context, self, db_vif)"},{"line_number":106,"context_line":""},{"line_number":107,"context_line":"    @base.remotable_classmethod"}],"source_content_type":"text/x-python","patch_set":11,"id":"7aa08908_cd8eec78","line":104,"updated":"2016-06-15 16:01:03.000000000","message":"When would this happen? If we expect to update something and it\u0027s gone that\u0027s something we should signal to our caller, right?","commit_id":"8c7aec6ef3008effa99ddf3f928e9b1c76984bfe"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"545b5e3b2d514301923bcb4ec9b890dd1f935973","unresolved":false,"context_lines":[{"line_number":101,"context_line":"                                              reason\u003d\u0027address is not mutable\u0027)"},{"line_number":102,"context_line":"        db_vif \u003d db.virtual_interface_update(self._context, self.address,"},{"line_number":103,"context_line":"                                             updates)"},{"line_number":104,"context_line":"        if db_vif:"},{"line_number":105,"context_line":"            return self._from_db_object(self._context, self, db_vif)"},{"line_number":106,"context_line":""},{"line_number":107,"context_line":"    @base.remotable_classmethod"}],"source_content_type":"text/x-python","patch_set":11,"id":"7aa08908_211fb4b8","line":104,"in_reply_to":"7aa08908_cd8eec78","updated":"2016-06-15 18:42:15.000000000","message":"Done","commit_id":"8c7aec6ef3008effa99ddf3f928e9b1c76984bfe"}],"nova/tests/unit/db/test_db_api.py":[{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"9101bb43f60464ef7271d69f396b1f8a9e22cf64","unresolved":false,"context_lines":[{"line_number":6543,"context_line":"                   \u0027uuid\u0027: uuidsentinel.vif_uuid,"},{"line_number":6544,"context_line":"                   \u0027tag\u0027: \u0027bar\u0027,"},{"line_number":6545,"context_line":"                   \u0027bus\u0027: None,"},{"line_number":6546,"context_line":"                   \u0027bus_address\u0027: None,"},{"line_number":6547,"context_line":"                   \u0027deleted\u0027: 0}"},{"line_number":6548,"context_line":"        ignored_keys \u003d [\u0027created_at\u0027, \u0027id\u0027, \u0027deleted_at\u0027, \u0027updated_at\u0027]"},{"line_number":6549,"context_line":"        vif_addr \u003d db.virtual_interface_create(self.ctxt, create)[\u0027address\u0027]"}],"source_content_type":"text/x-python","patch_set":6,"id":"bab6814e_10905294","line":6546,"updated":"2016-05-23 05:00:34.000000000","message":"See note below about bus and bus_address not appearing anywhere in the list of fields in VirtualInterface. I have no idea where these fields are coming from...","commit_id":"538060957a32bd4d37413c2f052ba2ce83528795"}],"nova/tests/unit/db/test_migrations.py":[{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"3d5945bdfe2080dc498bd1f382b4658bce9ce262","unresolved":false,"context_lines":[{"line_number":915,"context_line":"        self.assertColumnExists(engine, \u0027instance_extra\u0027, \u0027devices_metadata\u0027)"},{"line_number":916,"context_line":"        self.assertColumnExists(engine, \u0027shadow_instance_extra\u0027,"},{"line_number":917,"context_line":"                                        \u0027devices_metadata\u0027)"},{"line_number":918,"context_line":"\u003e\u003e\u003e\u003e\u003e\u003e\u003e 3164e31... db: add a device_metadata column to instance_extra"},{"line_number":919,"context_line":""},{"line_number":920,"context_line":""},{"line_number":921,"context_line":"class TestNovaMigrationsSQLite(NovaMigrationsCheckers,"}],"source_content_type":"text/x-python","patch_set":16,"id":"3aaa91ec_a7f2b198","line":918,"updated":"2016-06-21 19:33:31.000000000","message":"Ooops. Leftover conflict marker above.","commit_id":"57e658a6d432a8d51cdcc081c523032d0f5b1047"}],"nova/tests/unit/objects/test_objects.py":[{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"8296defb62122c6aa312e0230576567b52e4bd74","unresolved":false,"context_lines":[{"line_number":1195,"context_line":"    \u0027VirtCPUFeature\u0027: \u00271.0-3310718d8c72309259a6e39bdefe83ee\u0027,"},{"line_number":1196,"context_line":"    \u0027VirtCPUModel\u0027: \u00271.0-6a5cc9f322729fc70ddc6733bacd57d3\u0027,"},{"line_number":1197,"context_line":"    \u0027VirtCPUTopology\u0027: \u00271.0-fc694de72e20298f7c6bab1083fd4563\u0027,"},{"line_number":1198,"context_line":"    \u0027VirtualInterface\u0027: \u00271.1-25730967393678bd4da092b98694f971\u0027,"},{"line_number":1199,"context_line":"    \u0027VirtualInterfaceList\u0027: \u00271.0-9750e2074437b3077e46359102779fc6\u0027,"},{"line_number":1200,"context_line":"    \u0027VolumeUsage\u0027: \u00271.0-6c8190c46ce1469bb3286a1f21c2e475\u0027,"},{"line_number":1201,"context_line":"    \u0027XenapiLiveMigrateData\u0027: \u00271.0-5f982bec68f066e194cd9ce53a24ac4c\u0027,"}],"source_content_type":"text/x-python","patch_set":20,"id":"3aaa91ec_319cc20e","line":1198,"updated":"2016-06-23 16:05:03.000000000","message":"You added a new remotable method. You have to bump the version for something like that.","commit_id":"51d18e1ea3199d47c77b2ae0f341ad72ef577759"},{"author":{"_account_id":8802,"name":"Vladik Romanovsky","email":"vromanso@redhat.com","username":"vladikr"},"change_message_id":"af64b397f4ad0066b657ce95c555239eff0b59a4","unresolved":false,"context_lines":[{"line_number":1195,"context_line":"    \u0027VirtCPUFeature\u0027: \u00271.0-3310718d8c72309259a6e39bdefe83ee\u0027,"},{"line_number":1196,"context_line":"    \u0027VirtCPUModel\u0027: \u00271.0-6a5cc9f322729fc70ddc6733bacd57d3\u0027,"},{"line_number":1197,"context_line":"    \u0027VirtCPUTopology\u0027: \u00271.0-fc694de72e20298f7c6bab1083fd4563\u0027,"},{"line_number":1198,"context_line":"    \u0027VirtualInterface\u0027: \u00271.1-25730967393678bd4da092b98694f971\u0027,"},{"line_number":1199,"context_line":"    \u0027VirtualInterfaceList\u0027: \u00271.0-9750e2074437b3077e46359102779fc6\u0027,"},{"line_number":1200,"context_line":"    \u0027VolumeUsage\u0027: \u00271.0-6c8190c46ce1469bb3286a1f21c2e475\u0027,"},{"line_number":1201,"context_line":"    \u0027XenapiLiveMigrateData\u0027: \u00271.0-5f982bec68f066e194cd9ce53a24ac4c\u0027,"}],"source_content_type":"text/x-python","patch_set":20,"id":"3aaa91ec_999ddc0c","line":1198,"in_reply_to":"3aaa91ec_319cc20e","updated":"2016-06-23 18:25:05.000000000","message":"Done","commit_id":"51d18e1ea3199d47c77b2ae0f341ad72ef577759"}],"nova/tests/unit/objects/test_virtual_interface.py":[{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"9101bb43f60464ef7271d69f396b1f8a9e22cf64","unresolved":false,"context_lines":[{"line_number":131,"context_line":""},{"line_number":132,"context_line":"        primitive \u003d vif.obj_to_primitive(target_version\u003d\u00271.1\u0027)"},{"line_number":133,"context_line":"        self.assertNotIn(\u0027bus\u0027, primitive)"},{"line_number":134,"context_line":"        self.assertNotIn(\u0027bus_address\u0027, primitive)"},{"line_number":135,"context_line":""},{"line_number":136,"context_line":""},{"line_number":137,"context_line":"class TestVirtualInterfaceObject(test_objects._LocalTest,"}],"source_content_type":"text/x-python","patch_set":6,"id":"bab6814e_b094e68a","line":134,"updated":"2016-05-23 05:00:34.000000000","message":"What do the bus and bus_address keys have to do with the object definition changes in this patch? I only see a change to the nullability setting of network_id, but this patch contains a whole bunch of changes that reference a bus and bus_address property, neither of which exist in the list of fields in VirtualInterface()...","commit_id":"538060957a32bd4d37413c2f052ba2ce83528795"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"85cee098549c66a66d992333db61c83523ae8b5c","unresolved":false,"context_lines":[{"line_number":122,"context_line":"        vif.address \u003d \u002700:00:00:00:00:00\u0027"},{"line_number":123,"context_line":"        vif.instance_uuid \u003d uuids.instance"},{"line_number":124,"context_line":"        vif.uuid \u003d uuids.uuid"},{"line_number":125,"context_line":"        vif.tag \u003d \u0027fake-tag\u0027"},{"line_number":126,"context_line":""},{"line_number":127,"context_line":"        primitive \u003d vif.obj_to_primitive(target_version\u003d\u00271.1\u0027)"},{"line_number":128,"context_line":"        obj \u003d vif_obj.VirtualInterface.obj_from_primitive(primitive)"}],"source_content_type":"text/x-python","patch_set":10,"id":"7aa08908_7a7ec219","line":125,"updated":"2016-06-14 19:17:59.000000000","message":"You haven\u0027t set network_id to None here, this you\u0027re not testing the nullability.","commit_id":"9fdc65e81d0f889c2fac31f8355c74f738d539cc"}]}
