)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"79b6c52522b34b6cd783741cec9305a469b14ec5","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Vladik Romanovsky \u003cvromanso@redhat.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2016-12-10 00:17:29 -0500"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"objects: adding vlans filed to virtual_interface"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Adding a vlans field to the virtual_interface object to store"},{"line_number":10,"context_line":"vlans associated with the virtual interface."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"1a6eadb0_eccaeb6d","line":7,"range":{"start_line":7,"start_character":22,"end_line":7,"end_character":27},"updated":"2016-12-19 14:12:04.000000000","message":"field","commit_id":"52a1794670310378f779dbdfae293b921c99ea44"},{"author":{"_account_id":8802,"name":"Vladik Romanovsky","email":"vromanso@redhat.com","username":"vladikr"},"change_message_id":"4ed8c2cc2a9ddc639cf70ab2a653f68cb13969c5","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Vladik Romanovsky \u003cvromanso@redhat.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2016-12-10 00:17:29 -0500"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"objects: adding vlans filed to virtual_interface"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Adding a vlans field to the virtual_interface object to store"},{"line_number":10,"context_line":"vlans associated with the virtual interface."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"1a6eadb0_13038843","line":7,"range":{"start_line":7,"start_character":22,"end_line":7,"end_character":27},"in_reply_to":"1a6eadb0_eccaeb6d","updated":"2016-12-20 14:43:06.000000000","message":"Done","commit_id":"52a1794670310378f779dbdfae293b921c99ea44"}],"nova/objects/virtual_interface.py":[{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"79b6c52522b34b6cd783741cec9305a469b14ec5","unresolved":false,"context_lines":[{"line_number":58,"context_line":"            if not db_vif[field] and field in VIF_OPTIONAL_FIELDS:"},{"line_number":59,"context_line":"                continue"},{"line_number":60,"context_line":"            elif field \u003d\u003d \u0027vlans\u0027:"},{"line_number":61,"context_line":"                vlans \u003d db_vif.get(\u0027vlans\u0027) or \u0027[]\u0027"},{"line_number":62,"context_line":"                vif.vlans \u003d jsonutils.loads(vlans)"},{"line_number":63,"context_line":"            else:"},{"line_number":64,"context_line":"                setattr(vif, field, db_vif[field])"}],"source_content_type":"text/x-python","patch_set":2,"id":"1a6eadb0_8c98976c","line":61,"range":{"start_line":61,"start_character":24,"end_line":61,"end_character":51},"updated":"2016-12-19 14:12:04.000000000","message":"supernit: perhaps\n\n  db_vif.get(\u0027vlans\u0027, \u0027[]\u0027)\n\n?","commit_id":"52a1794670310378f779dbdfae293b921c99ea44"},{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"cb76272ddde0f77a3e6083c267b1a9ac05a7603d","unresolved":false,"context_lines":[{"line_number":58,"context_line":"            if not db_vif[field] and field in VIF_OPTIONAL_FIELDS:"},{"line_number":59,"context_line":"                continue"},{"line_number":60,"context_line":"            elif field \u003d\u003d \u0027vlans\u0027:"},{"line_number":61,"context_line":"                vlans \u003d db_vif.get(\u0027vlans\u0027) or \u0027[]\u0027"},{"line_number":62,"context_line":"                vif.vlans \u003d jsonutils.loads(vlans)"},{"line_number":63,"context_line":"            else:"},{"line_number":64,"context_line":"                setattr(vif, field, db_vif[field])"}],"source_content_type":"text/x-python","patch_set":2,"id":"1a6eadb0_6f69fff8","line":61,"in_reply_to":"1a6eadb0_11b43733","updated":"2016-12-21 13:19:11.000000000","message":"What you are doing is not working on my envs: py 2.7.12 and py 3.4.3 and at least I think the Vladik\u0027s way is avoiding any confusions.","commit_id":"52a1794670310378f779dbdfae293b921c99ea44"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"6b8a2f2a228f02980c98a3a3ad032c9415db79db","unresolved":false,"context_lines":[{"line_number":58,"context_line":"            if not db_vif[field] and field in VIF_OPTIONAL_FIELDS:"},{"line_number":59,"context_line":"                continue"},{"line_number":60,"context_line":"            elif field \u003d\u003d \u0027vlans\u0027:"},{"line_number":61,"context_line":"                vlans \u003d db_vif.get(\u0027vlans\u0027) or \u0027[]\u0027"},{"line_number":62,"context_line":"                vif.vlans \u003d jsonutils.loads(vlans)"},{"line_number":63,"context_line":"            else:"},{"line_number":64,"context_line":"                setattr(vif, field, db_vif[field])"}],"source_content_type":"text/x-python","patch_set":2,"id":"1a6eadb0_11b43733","line":61,"range":{"start_line":61,"start_character":24,"end_line":61,"end_character":51},"in_reply_to":"1a6eadb0_68a92b7b","updated":"2016-12-21 10:38:45.000000000","message":"It\u0027s a nit, but are you sure?\n\n  \u003e\u003e\u003e x \u003d {\u0027y\u0027: None}\n  \u003e\u003e\u003e x.get(\u0027y\u0027, [])\n  []\n  \u003e\u003e\u003e","commit_id":"52a1794670310378f779dbdfae293b921c99ea44"},{"author":{"_account_id":8802,"name":"Vladik Romanovsky","email":"vromanso@redhat.com","username":"vladikr"},"change_message_id":"343cb929826d62780de1e13bef7d2771370f2eba","unresolved":false,"context_lines":[{"line_number":58,"context_line":"            if not db_vif[field] and field in VIF_OPTIONAL_FIELDS:"},{"line_number":59,"context_line":"                continue"},{"line_number":60,"context_line":"            elif field \u003d\u003d \u0027vlans\u0027:"},{"line_number":61,"context_line":"                vlans \u003d db_vif.get(\u0027vlans\u0027) or \u0027[]\u0027"},{"line_number":62,"context_line":"                vif.vlans \u003d jsonutils.loads(vlans)"},{"line_number":63,"context_line":"            else:"},{"line_number":64,"context_line":"                setattr(vif, field, db_vif[field])"}],"source_content_type":"text/x-python","patch_set":2,"id":"1a6eadb0_7719d187","line":61,"in_reply_to":"1a6eadb0_6f69fff8","updated":"2016-12-21 14:32:12.000000000","message":"Dunno, just double checked that:\n\nPython 2.7.12 (default, Sep 29 2016, 12:52:02) \n[GCC 6.2.1 20160916 (Red Hat 6.2.1-2)] on linux2\nType \"help\", \"copyright\", \"credits\" or \"license\" for more information.\n\u003e\u003e\u003e x \u003d {\u0027y\u0027: None}\n\u003e\u003e\u003e x.get(\u0027y\u0027, [])\n\u003e\u003e\u003e y \u003d x.get(\u0027y\u0027, [])\n\u003e\u003e\u003e y\n\u003e\u003e\u003e type(y)\n\u003ctype \u0027NoneType\u0027\u003e\n\u003e\u003e\u003e","commit_id":"52a1794670310378f779dbdfae293b921c99ea44"},{"author":{"_account_id":8802,"name":"Vladik Romanovsky","email":"vromanso@redhat.com","username":"vladikr"},"change_message_id":"4ed8c2cc2a9ddc639cf70ab2a653f68cb13969c5","unresolved":false,"context_lines":[{"line_number":58,"context_line":"            if not db_vif[field] and field in VIF_OPTIONAL_FIELDS:"},{"line_number":59,"context_line":"                continue"},{"line_number":60,"context_line":"            elif field \u003d\u003d \u0027vlans\u0027:"},{"line_number":61,"context_line":"                vlans \u003d db_vif.get(\u0027vlans\u0027) or \u0027[]\u0027"},{"line_number":62,"context_line":"                vif.vlans \u003d jsonutils.loads(vlans)"},{"line_number":63,"context_line":"            else:"},{"line_number":64,"context_line":"                setattr(vif, field, db_vif[field])"}],"source_content_type":"text/x-python","patch_set":2,"id":"1a6eadb0_68a92b7b","line":61,"range":{"start_line":61,"start_character":24,"end_line":61,"end_character":51},"in_reply_to":"1a6eadb0_8c98976c","updated":"2016-12-20 14:43:06.000000000","message":"That won\u0027t help if vlans in the db is None..","commit_id":"52a1794670310378f779dbdfae293b921c99ea44"},{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"015f11fa058a5aec96963fb2a9301d02b2702c26","unresolved":false,"context_lines":[{"line_number":57,"context_line":"        for field in vif.fields:"},{"line_number":58,"context_line":"            if not db_vif[field] and field in VIF_OPTIONAL_FIELDS:"},{"line_number":59,"context_line":"                continue"},{"line_number":60,"context_line":"            elif field \u003d\u003d \u0027vlans\u0027:"},{"line_number":61,"context_line":"                vlans \u003d db_vif.get(\u0027vlans\u0027) or \u0027[]\u0027"},{"line_number":62,"context_line":"                vif.vlans \u003d jsonutils.loads(vlans)"},{"line_number":63,"context_line":"            else:"}],"source_content_type":"text/x-python","patch_set":3,"id":"1a6eadb0_3ec65668","line":60,"updated":"2016-12-21 13:22:43.000000000","message":"You might add a comment to explain why you want to return a \u0027[]\u0027 which is because we are expecting a JSON-Array to store the list of vlans. Also you can have a constant of that module to represent this default value.\n\n  DEFAULT_VLANS_ATTR \u003d \u0027[]\u0027\n\nBoth of them are just suggestions.\n\n\nAn other question related to my comment [1] - You are defining this field even if we will never use it. So in the database we will have a lot of \u0027[]\u0027 which are going to take place for nothing and that attribute in database can be NULL. So what about to handle the field only if we need it during the process ?\n\n[1] https://review.openstack.org/#/c/405949/2/nova/tests/unit/objects/test_virtual_interface.py","commit_id":"ca73aad2d5862fd2d2cc232c81d8fb05103c4655"},{"author":{"_account_id":8802,"name":"Vladik Romanovsky","email":"vromanso@redhat.com","username":"vladikr"},"change_message_id":"a89778d93f97f91fe789cf11253eb6fec7b82f8b","unresolved":false,"context_lines":[{"line_number":57,"context_line":"        for field in vif.fields:"},{"line_number":58,"context_line":"            if not db_vif[field] and field in VIF_OPTIONAL_FIELDS:"},{"line_number":59,"context_line":"                continue"},{"line_number":60,"context_line":"            elif field \u003d\u003d \u0027vlans\u0027:"},{"line_number":61,"context_line":"                vlans \u003d db_vif.get(\u0027vlans\u0027) or \u0027[]\u0027"},{"line_number":62,"context_line":"                vif.vlans \u003d jsonutils.loads(vlans)"},{"line_number":63,"context_line":"            else:"}],"source_content_type":"text/x-python","patch_set":3,"id":"1a6eadb0_edcb5251","line":60,"in_reply_to":"1a6eadb0_3ec65668","updated":"2016-12-21 15:01:14.000000000","message":"Thanks. Will add a comment here.\n\nPlease see the test for the reply on the second question.","commit_id":"ca73aad2d5862fd2d2cc232c81d8fb05103c4655"},{"author":{"_account_id":8802,"name":"Vladik Romanovsky","email":"vromanso@redhat.com","username":"vladikr"},"change_message_id":"4e70bb123097b89485663433439ad6b893b4f760","unresolved":false,"context_lines":[{"line_number":57,"context_line":"        for field in vif.fields:"},{"line_number":58,"context_line":"            if not db_vif[field] and field in VIF_OPTIONAL_FIELDS:"},{"line_number":59,"context_line":"                continue"},{"line_number":60,"context_line":"            elif field \u003d\u003d \u0027vlans\u0027:"},{"line_number":61,"context_line":"                vlans \u003d db_vif.get(\u0027vlans\u0027) or \u0027[]\u0027"},{"line_number":62,"context_line":"                vif.vlans \u003d jsonutils.loads(vlans)"},{"line_number":63,"context_line":"            else:"}],"source_content_type":"text/x-python","patch_set":3,"id":"da4df55a_ccf27e9a","line":60,"in_reply_to":"1a6eadb0_3ec65668","updated":"2016-12-22 15:15:31.000000000","message":"Yep, you are right. This is not needed and actually sets the vlans field when it\u0027s not needed. Thanks!","commit_id":"ca73aad2d5862fd2d2cc232c81d8fb05103c4655"},{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"e7fb5981e898251f8838e5c30bc2da2d1a38187c","unresolved":false,"context_lines":[{"line_number":103,"context_line":"            raise exception.ObjectActionError(action\u003d\u0027create\u0027,"},{"line_number":104,"context_line":"                                              reason\u003d\u0027already created\u0027)"},{"line_number":105,"context_line":"        updates \u003d self.obj_get_changes()"},{"line_number":106,"context_line":"        if \u0027vlans\u0027 in updates and updates[\u0027vlans\u0027]:"},{"line_number":107,"context_line":"            updates[\u0027vlans\u0027] \u003d jsonutils.dumps(updates[\u0027vlans\u0027])"},{"line_number":108,"context_line":"        db_vif \u003d db.virtual_interface_create(self._context, updates)"},{"line_number":109,"context_line":"        self._from_db_object(self._context, self, db_vif)"}],"source_content_type":"text/x-python","patch_set":4,"id":"da4df55a_40e2cfd6","line":106,"updated":"2016-12-22 16:34:20.000000000","message":"Sorry Vladik I saw that in the previous change but did not add a comment. It would be nice if you can add this logic in a method so you can reuse it line 117.\n\nI would say it could be nice to also have a method to handle the logic to serialize the vlans fields.\n\n- def _vlans_extract()\n- def _vlans_store()\n\nOr something else.\n\nI -1 because really I think we should not duplicate such logic, in case of a bug we can forgot to update one of them.","commit_id":"f7a3b8cce6e55e0714e8b68a38234b9cc441643e"},{"author":{"_account_id":8802,"name":"Vladik Romanovsky","email":"vromanso@redhat.com","username":"vladikr"},"change_message_id":"df047034c68f73c26f7f2f8c29f8e164a5eea9e1","unresolved":false,"context_lines":[{"line_number":103,"context_line":"            raise exception.ObjectActionError(action\u003d\u0027create\u0027,"},{"line_number":104,"context_line":"                                              reason\u003d\u0027already created\u0027)"},{"line_number":105,"context_line":"        updates \u003d self.obj_get_changes()"},{"line_number":106,"context_line":"        if \u0027vlans\u0027 in updates and updates[\u0027vlans\u0027]:"},{"line_number":107,"context_line":"            updates[\u0027vlans\u0027] \u003d jsonutils.dumps(updates[\u0027vlans\u0027])"},{"line_number":108,"context_line":"        db_vif \u003d db.virtual_interface_create(self._context, updates)"},{"line_number":109,"context_line":"        self._from_db_object(self._context, self, db_vif)"}],"source_content_type":"text/x-python","patch_set":4,"id":"da4df55a_908de033","line":106,"in_reply_to":"da4df55a_40e2cfd6","updated":"2016-12-22 20:10:36.000000000","message":"These are just two lines.. but OK\nI don\u0027t think there is a need for _vlans_extract(). I think that code is in context in the _from_db_object method.","commit_id":"f7a3b8cce6e55e0714e8b68a38234b9cc441643e"},{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"d21bede1a4f46866a2135460f6bf0d292f05ec5b","unresolved":false,"context_lines":[{"line_number":103,"context_line":"            raise exception.ObjectActionError(action\u003d\u0027create\u0027,"},{"line_number":104,"context_line":"                                              reason\u003d\u0027already created\u0027)"},{"line_number":105,"context_line":"        updates \u003d self.obj_get_changes()"},{"line_number":106,"context_line":"        if \u0027vlans\u0027 in updates and updates[\u0027vlans\u0027]:"},{"line_number":107,"context_line":"            updates[\u0027vlans\u0027] \u003d jsonutils.dumps(updates[\u0027vlans\u0027])"},{"line_number":108,"context_line":"        db_vif \u003d db.virtual_interface_create(self._context, updates)"},{"line_number":109,"context_line":"        self._from_db_object(self._context, self, db_vif)"}],"source_content_type":"text/x-python","patch_set":4,"id":"da4df55a_e151e9d9","line":106,"in_reply_to":"da4df55a_908de033","updated":"2016-12-23 09:47:48.000000000","message":"Hum... yes probably too much to have added minus 1 on this :/\n\nThanks to have addressed it anyway.","commit_id":"f7a3b8cce6e55e0714e8b68a38234b9cc441643e"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"8648a331b464c26794c8574d8bc681fb770ab3d8","unresolved":false,"context_lines":[{"line_number":42,"context_line":"        \u0027instance_uuid\u0027: fields.UUIDField(),"},{"line_number":43,"context_line":"        \u0027uuid\u0027: fields.UUIDField(),"},{"line_number":44,"context_line":"        \u0027tag\u0027: fields.StringField(nullable\u003dTrue),"},{"line_number":45,"context_line":"        \u0027vlans\u0027: fields.ListOfIntegersField(nullable\u003dTrue),"},{"line_number":46,"context_line":"    }"},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"    def obj_make_compatible(self, primitive, target_version):"}],"source_content_type":"text/x-python","patch_set":5,"id":"da4df55a_8d7a9986","line":45,"range":{"start_line":45,"start_character":24,"end_line":45,"end_character":43},"updated":"2016-12-29 00:40:50.000000000","message":"Why is this a list when neutron is returning a single value, and it\u0027s a string, not an integer:\n\nhttps://github.com/openstack/neutron/blob/63f27ec5c4e8a81860db617e2dc20a553514fcc6/neutron/plugins/ml2/drivers/mech_sriov/mech_driver/mech_driver.py#L164","commit_id":"5c97e3d7a7fc532c87dc5ddc9a111ec753123682"},{"author":{"_account_id":8802,"name":"Vladik Romanovsky","email":"vromanso@redhat.com","username":"vladikr"},"change_message_id":"aaafdabdf04e2f784f7ebff75ca7fc824d821d40","unresolved":false,"context_lines":[{"line_number":42,"context_line":"        \u0027instance_uuid\u0027: fields.UUIDField(),"},{"line_number":43,"context_line":"        \u0027uuid\u0027: fields.UUIDField(),"},{"line_number":44,"context_line":"        \u0027tag\u0027: fields.StringField(nullable\u003dTrue),"},{"line_number":45,"context_line":"        \u0027vlans\u0027: fields.ListOfIntegersField(nullable\u003dTrue),"},{"line_number":46,"context_line":"    }"},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"    def obj_make_compatible(self, primitive, target_version):"}],"source_content_type":"text/x-python","patch_set":5,"id":"ba5201f7_ea9221f5","line":45,"range":{"start_line":45,"start_character":24,"end_line":45,"end_character":43},"in_reply_to":"da4df55a_8d7a9986","updated":"2017-01-06 15:14:41.000000000","message":"This was one of the arguments on the spec. People insisted that we should present it as a list, since in the future we will support trunk ports, which will be a list of ports.\n\nhttps://review.openstack.org/#/c/381370/","commit_id":"5c97e3d7a7fc532c87dc5ddc9a111ec753123682"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"ec99bf90243325834986e95c6c18e2946352aa7a","unresolved":false,"context_lines":[{"line_number":59,"context_line":"                continue"},{"line_number":60,"context_line":"            elif field \u003d\u003d \u0027vlans\u0027:"},{"line_number":61,"context_line":"                vlans \u003d db_vif.get(\u0027vlans\u0027)"},{"line_number":62,"context_line":"                if vlans:"},{"line_number":63,"context_line":"                    vif.vlans \u003d jsonutils.loads(vlans)"},{"line_number":64,"context_line":"            else:"},{"line_number":65,"context_line":"                setattr(vif, field, db_vif[field])"}],"source_content_type":"text/x-python","patch_set":5,"id":"da4df55a_a26ccc08","line":62,"updated":"2016-12-29 00:25:01.000000000","message":"If not vlans, should we set vif.vlans \u003d None so we don\u0027t try to lazy-load it later? It is nullable\u003dTrue so that seems safe to just set to None.","commit_id":"5c97e3d7a7fc532c87dc5ddc9a111ec753123682"}],"nova/tests/unit/fake_network.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"ec99bf90243325834986e95c6c18e2946352aa7a","unresolved":false,"context_lines":[{"line_number":84,"context_line":"                 \u0027uuid\u0027: uuids.vifs_3,"},{"line_number":85,"context_line":"                 \u0027address\u0027: \u0027DC:AD:BE:FF:EF:03\u0027,"},{"line_number":86,"context_line":"                 \u0027tag\u0027: None,"},{"line_number":87,"context_line":"                 \u0027vlans\u0027: \u0027[]\u0027}]"},{"line_number":88,"context_line":""},{"line_number":89,"context_line":"        floating_ips \u003d [dict(address\u003d\u0027172.16.1.1\u0027,"},{"line_number":90,"context_line":"                             fixed_ip_id\u003d100),"}],"source_content_type":"text/x-python","patch_set":5,"id":"da4df55a_42a5e044","line":87,"updated":"2016-12-29 00:25:01.000000000","message":"Adding some color to the testing by using real values rather than just an empty list would be nice.","commit_id":"5c97e3d7a7fc532c87dc5ddc9a111ec753123682"}],"nova/tests/unit/network/test_manager.py":[{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"015f11fa058a5aec96963fb2a9301d02b2702c26","unresolved":false,"context_lines":[{"line_number":160,"context_line":"         \u0027network_id\u0027: 0,"},{"line_number":161,"context_line":"         \u0027instance_uuid\u0027: uuids.instance,"},{"line_number":162,"context_line":"         \u0027tag\u0027: \u0027fake-tag1\u0027,"},{"line_number":163,"context_line":"         \u0027vlans\u0027: []},"},{"line_number":164,"context_line":"        {\u0027id\u0027: 1,"},{"line_number":165,"context_line":"         \u0027created_at\u0027: None,"},{"line_number":166,"context_line":"         \u0027updated_at\u0027: None,"}],"source_content_type":"text/x-python","patch_set":3,"id":"1a6eadb0_fe7dbe1c","line":163,"updated":"2016-12-21 13:22:43.000000000","message":"Why do you need this ? I don\u0027t think your code you define that field in the database if nothing use it / and you code should handle that field even if it is not defined","commit_id":"ca73aad2d5862fd2d2cc232c81d8fb05103c4655"}],"nova/tests/unit/objects/test_virtual_interface.py":[{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"015f11fa058a5aec96963fb2a9301d02b2702c26","unresolved":false,"context_lines":[{"line_number":72,"context_line":"                    self.context, \u0027fake-uuid\u0027, 123)"},{"line_number":73,"context_line":"            self._compare(self, fake_vif, vif)"},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"    def test_vif_create(self):"},{"line_number":76,"context_line":"        vif \u003d vif_obj.VirtualInterface(context\u003dself.context)"},{"line_number":77,"context_line":"        vif.address \u003d \u002700:00:00:00:00:00\u0027"},{"line_number":78,"context_line":"        vif.network_id \u003d 123"}],"source_content_type":"text/x-python","patch_set":3,"id":"1a6eadb0_9e95aa34","line":75,"updated":"2016-12-21 13:22:43.000000000","message":"Ok so in that test you are asserting that, even if VirtualInterface is created from the database without a field \u0027vlans\u0027 defined, your code is going to create one even if not used.\n\nWhat about to keep that field not defined ? and set it only if we define it.","commit_id":"ca73aad2d5862fd2d2cc232c81d8fb05103c4655"},{"author":{"_account_id":8802,"name":"Vladik Romanovsky","email":"vromanso@redhat.com","username":"vladikr"},"change_message_id":"a89778d93f97f91fe789cf11253eb6fec7b82f8b","unresolved":false,"context_lines":[{"line_number":72,"context_line":"                    self.context, \u0027fake-uuid\u0027, 123)"},{"line_number":73,"context_line":"            self._compare(self, fake_vif, vif)"},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"    def test_vif_create(self):"},{"line_number":76,"context_line":"        vif \u003d vif_obj.VirtualInterface(context\u003dself.context)"},{"line_number":77,"context_line":"        vif.address \u003d \u002700:00:00:00:00:00\u0027"},{"line_number":78,"context_line":"        vif.network_id \u003d 123"}],"source_content_type":"text/x-python","patch_set":3,"id":"1a6eadb0_4d9a866f","line":75,"in_reply_to":"1a6eadb0_9e95aa34","updated":"2016-12-21 15:01:14.000000000","message":"Exactly. I\u0027m trying to avoid updating it if the content is empty: I\u0027m updating only if \u0027vlans\u0027 in updates and updates[\u0027vlans\u0027] [1]\n\nI thought that this is just the nature of fields.ListOfIntegersField\n\n[1] https://review.openstack.org/#/c/405949/3/nova/objects/virtual_interface.py@105","commit_id":"ca73aad2d5862fd2d2cc232c81d8fb05103c4655"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"ec99bf90243325834986e95c6c18e2946352aa7a","unresolved":false,"context_lines":[{"line_number":74,"context_line":"                    self.context, \u0027fake-uuid\u0027, 123)"},{"line_number":75,"context_line":"            self._compare(self, fake_vif, vif)"},{"line_number":76,"context_line":""},{"line_number":77,"context_line":"    def test_vif_create(self):"},{"line_number":78,"context_line":"        vif \u003d vif_obj.VirtualInterface(context\u003dself.context)"},{"line_number":79,"context_line":"        vif.address \u003d \u002700:00:00:00:00:00\u0027"},{"line_number":80,"context_line":"        vif.network_id \u003d 123"}],"source_content_type":"text/x-python","patch_set":5,"id":"da4df55a_6266642b","line":77,"updated":"2016-12-29 00:25:01.000000000","message":"nit: didn\u0027t need to rename this","commit_id":"5c97e3d7a7fc532c87dc5ddc9a111ec753123682"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"ec99bf90243325834986e95c6c18e2946352aa7a","unresolved":false,"context_lines":[{"line_number":123,"context_line":"            vif.tag \u003d \u0027bar\u0027"},{"line_number":124,"context_line":"            vif.save()"},{"line_number":125,"context_line":"            update.assert_called_with(self.context, \u002700:00:00:00:00:00\u0027,"},{"line_number":126,"context_line":"                                          {\u0027tag\u0027: \u0027bar\u0027})"},{"line_number":127,"context_line":"            vif.vlans \u003d [300]"},{"line_number":128,"context_line":"            vif.save()"},{"line_number":129,"context_line":"            update.assert_called_with(self.context, \u002700:00:00:00:00:00\u0027,"}],"source_content_type":"text/x-python","patch_set":5,"id":"da4df55a_2281bc8f","line":126,"updated":"2016-12-29 00:25:01.000000000","message":"nit: align this with self.context above.","commit_id":"5c97e3d7a7fc532c87dc5ddc9a111ec753123682"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"ec99bf90243325834986e95c6c18e2946352aa7a","unresolved":false,"context_lines":[{"line_number":127,"context_line":"            vif.vlans \u003d [300]"},{"line_number":128,"context_line":"            vif.save()"},{"line_number":129,"context_line":"            update.assert_called_with(self.context, \u002700:00:00:00:00:00\u0027,"},{"line_number":130,"context_line":"                                          {\u0027vlans\u0027: \u0027[300]\u0027})"},{"line_number":131,"context_line":""},{"line_number":132,"context_line":"    def test_delete_by_instance_uuid(self):"},{"line_number":133,"context_line":"        with mock.patch.object(db,"}],"source_content_type":"text/x-python","patch_set":5,"id":"da4df55a_427c00b5","line":130,"updated":"2016-12-29 00:25:01.000000000","message":"same","commit_id":"5c97e3d7a7fc532c87dc5ddc9a111ec753123682"}]}
