)]}'
{"nova/network/model.py":[{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"45c1c6eb3edbde2cddb66356fe4cafc57eca2152","unresolved":false,"context_lines":[{"line_number":307,"context_line":"# The current obstacles for incremental refactoring are:"},{"line_number":308,"context_line":"#"},{"line_number":309,"context_line":"# 1. Refactoring in place isn\u0027t possible because of a circular import"},{"line_number":310,"context_line":"#    from nova.objects.fields."},{"line_number":311,"context_line":"#"},{"line_number":312,"context_line":"# 2. Moving to nova.objects is problematic for the same reason."},{"line_number":313,"context_line":"#    NetworkInfo aggregates instance of the VIF object so it will have"}],"source_content_type":"text/x-python","patch_set":2,"id":"1a6ced46_27db3b51","line":310,"updated":"2015-03-25 20:58:08.000000000","message":"Refactoring this as an object makes that field (and import) unnecessary. I\u0027m sure we could come up with some loopholes to make that work and avoid the circular nature.","commit_id":"cdad99ea4a14c9d34efed917628fd4e68634c8b9"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"45c1c6eb3edbde2cddb66356fe4cafc57eca2152","unresolved":false,"context_lines":[{"line_number":311,"context_line":"#"},{"line_number":312,"context_line":"# 2. Moving to nova.objects is problematic for the same reason."},{"line_number":313,"context_line":"#    NetworkInfo aggregates instance of the VIF object so it will have"},{"line_number":314,"context_line":"#    to be moved as well."},{"line_number":315,"context_line":"#"},{"line_number":316,"context_line":"# It seems likely that everything in this module would have to be"},{"line_number":317,"context_line":"# converted to a NovaObject and moved."}],"source_content_type":"text/x-python","patch_set":2,"id":"1a6ced46_27a97b91","line":314,"updated":"2015-03-25 20:58:08.000000000","message":"The way we store NetworkInfo in the InstanceInfoCache object is really wrong anyway. We should split things out and start building a NetworkInfo object beside this old one, and then drop this after suitable deprecation intervals have passed.","commit_id":"cdad99ea4a14c9d34efed917628fd4e68634c8b9"},{"author":{"_account_id":13869,"name":"Maxime Leroy","email":"maxime.leroy@6wind.com","username":"mleroy"},"change_message_id":"0f969524a515f643c5ead1c7437a16524b5ca22b","unresolved":false,"context_lines":[{"line_number":339,"context_line":"        self[\u0027profile\u0027] \u003d profile"},{"line_number":340,"context_line":"        self[\u0027preserve_on_delete\u0027] \u003d preserve_on_delete"},{"line_number":341,"context_line":""},{"line_number":342,"context_line":"        self[\u0027ovs_interfaceid\u0027] \u003d ovs_interfaceid"},{"line_number":343,"context_line":"        self.hybrid_plug \u003d self[\u0027details\u0027].get(VIF_DETAILS_OVS_HYBRID_PLUG,"},{"line_number":344,"context_line":"                                               False)"},{"line_number":345,"context_line":"        self._set_meta(kwargs)"}],"source_content_type":"text/x-python","patch_set":2,"id":"baa041b7_b644231b","line":342,"updated":"2015-04-03 17:21:38.000000000","message":"ovs_interfaceid is always set to port id value. \nAre there any good reasons to have this attribute ?\nIf not, we should remove it.","commit_id":"cdad99ea4a14c9d34efed917628fd4e68634c8b9"},{"author":{"_account_id":13869,"name":"Maxime Leroy","email":"maxime.leroy@6wind.com","username":"mleroy"},"change_message_id":"0f969524a515f643c5ead1c7437a16524b5ca22b","unresolved":false,"context_lines":[{"line_number":355,"context_line":"    # TODO(beagles): it isn\u0027t clear if the following methods are OVS"},{"line_number":356,"context_line":"    # specific or not."},{"line_number":357,"context_line":"    def is_neutron_filtering_enabled(self):"},{"line_number":358,"context_line":"        return self[\u0027details\u0027].get(VIF_DETAILS_PORT_FILTER, False)"},{"line_number":359,"context_line":""},{"line_number":360,"context_line":"    def is_hybrid_plug_enabled(self):"},{"line_number":361,"context_line":"        return self.hybrid_plug"}],"source_content_type":"text/x-python","patch_set":2,"id":"baa041b7_165f4fe6","line":358,"updated":"2015-04-03 17:21:38.000000000","message":"This method is not OVS specific. For example, it used by OVS, IVS,\nbridge in libvirt/vif.py.\n\nAll the ML2/L2 plugin mechanisms set a value to CAP_PORT_FILTER in the\nportbindings.","commit_id":"cdad99ea4a14c9d34efed917628fd4e68634c8b9"},{"author":{"_account_id":13869,"name":"Maxime Leroy","email":"maxime.leroy@6wind.com","username":"mleroy"},"change_message_id":"0f969524a515f643c5ead1c7437a16524b5ca22b","unresolved":false,"context_lines":[{"line_number":358,"context_line":"        return self[\u0027details\u0027].get(VIF_DETAILS_PORT_FILTER, False)"},{"line_number":359,"context_line":""},{"line_number":360,"context_line":"    def is_hybrid_plug_enabled(self):"},{"line_number":361,"context_line":"        return self.hybrid_plug"},{"line_number":362,"context_line":""},{"line_number":363,"context_line":""},{"line_number":364,"context_line":"class QbgVIF(BaseVIF):"}],"source_content_type":"text/x-python","patch_set":2,"id":"baa041b7_b65b03f6","line":361,"updated":"2015-04-03 17:21:38.000000000","message":"This method seems to be only used only by ivs/ovs in libvirt/vif.py.\n\nBut for example, it could be potentially useful for vhost-user with\novs dpdk or any vhost-user ml2 plugging supporting linux bridge and\novs.","commit_id":"cdad99ea4a14c9d34efed917628fd4e68634c8b9"},{"author":{"_account_id":13734,"name":"Nell Jerram","email":"nell@tigera.io","username":"neiljerram"},"change_message_id":"9c24197ec3ce930986df94ce893a4a39e0a28865","unresolved":false,"context_lines":[{"line_number":361,"context_line":"        return self.hybrid_plug"},{"line_number":362,"context_line":""},{"line_number":363,"context_line":""},{"line_number":364,"context_line":"class QbgVIF(BaseVIF):"},{"line_number":365,"context_line":""},{"line_number":366,"context_line":"    def __init__(self, **kwargs):"},{"line_number":367,"context_line":"        self[\u0027qbg_params\u0027] \u003d kwargs.pop(\u0027qbg_params\u0027, None)"}],"source_content_type":"text/x-python","patch_set":2,"id":"3ab451fb_5852f014","line":364,"updated":"2015-04-17 11:54:16.000000000","message":"Comment what \"Qbg\" means?  I\u0027ve been following Nova/Neutron for a little while now, but have no idea what this is.","commit_id":"cdad99ea4a14c9d34efed917628fd4e68634c8b9"},{"author":{"_account_id":6681,"name":"Brent Eagles","email":"beagles@redhat.com","username":"beagles"},"change_message_id":"c054ae19cee0a7071c18df05e7f566d520bae91d","unresolved":false,"context_lines":[{"line_number":361,"context_line":"        return self.hybrid_plug"},{"line_number":362,"context_line":""},{"line_number":363,"context_line":""},{"line_number":364,"context_line":"class QbgVIF(BaseVIF):"},{"line_number":365,"context_line":""},{"line_number":366,"context_line":"    def __init__(self, **kwargs):"},{"line_number":367,"context_line":"        self[\u0027qbg_params\u0027] \u003d kwargs.pop(\u0027qbg_params\u0027, None)"}],"source_content_type":"text/x-python","patch_set":2,"id":"dac4157f_849c956a","line":364,"in_reply_to":"3ab451fb_5852f014","updated":"2015-04-21 12:18:34.000000000","message":"qbg and qbh refer to the 802.1qbg and 802.1gbh specifications. Data types related to these specs have been around for awhile and there are related plug methods in the libvirt vif driver.","commit_id":"cdad99ea4a14c9d34efed917628fd4e68634c8b9"},{"author":{"_account_id":13734,"name":"Nell Jerram","email":"nell@tigera.io","username":"neiljerram"},"change_message_id":"9c24197ec3ce930986df94ce893a4a39e0a28865","unresolved":false,"context_lines":[{"line_number":368,"context_line":"        super(QbgVIF, self).__init__(**kwargs)"},{"line_number":369,"context_line":""},{"line_number":370,"context_line":""},{"line_number":371,"context_line":"class QbhVIF(BaseVIF):"},{"line_number":372,"context_line":""},{"line_number":373,"context_line":"    def __init__(self, **kwargs):"},{"line_number":374,"context_line":"        self[\u0027qph_params\u0027] \u003d kwargs.pop(\u0027qbh_params\u0027, None)"}],"source_content_type":"text/x-python","patch_set":2,"id":"3ab451fb_185c6824","line":371,"updated":"2015-04-17 11:54:16.000000000","message":"Ditto for Qbh.","commit_id":"cdad99ea4a14c9d34efed917628fd4e68634c8b9"},{"author":{"_account_id":13734,"name":"Nell Jerram","email":"nell@tigera.io","username":"neiljerram"},"change_message_id":"9c24197ec3ce930986df94ce893a4a39e0a28865","unresolved":false,"context_lines":[{"line_number":371,"context_line":"class QbhVIF(BaseVIF):"},{"line_number":372,"context_line":""},{"line_number":373,"context_line":"    def __init__(self, **kwargs):"},{"line_number":374,"context_line":"        self[\u0027qph_params\u0027] \u003d kwargs.pop(\u0027qbh_params\u0027, None)"},{"line_number":375,"context_line":"        super(QbhVIF, self).__init__(**kwargs)"},{"line_number":376,"context_line":""},{"line_number":377,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"3ab451fb_58a0b0f4","line":374,"updated":"2015-04-17 11:54:16.000000000","message":"Typo here: qph should be qbh.","commit_id":"cdad99ea4a14c9d34efed917628fd4e68634c8b9"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"45c1c6eb3edbde2cddb66356fe4cafc57eca2152","unresolved":false,"context_lines":[{"line_number":404,"context_line":"    }"},{"line_number":405,"context_line":"    # Instantiate using the VIF class, or use the BaseVIF class if there"},{"line_number":406,"context_line":"    # isn\u0027t a specific mapping."},{"line_number":407,"context_line":"    return factory_map.get(kwargs.get(\u0027type\u0027), BaseVIF)(**kwargs)"},{"line_number":408,"context_line":""},{"line_number":409,"context_line":""},{"line_number":410,"context_line":"def hydrate_vif(vif):"}],"source_content_type":"text/x-python","patch_set":2,"id":"1a6ced46_a7c9eb5a","line":407,"updated":"2015-03-25 20:58:08.000000000","message":"NovaObjects will eliminate the need to do this, and also eliminate the failure case you kinda paper over here by defaulting to returning BaseVIF. Doing that is really not legit I don\u0027t think. If we have an older compute node that doesn\u0027t know about WhizBangVIF and it just ignores and uses BaseVIF instead, bad things happen, right?","commit_id":"cdad99ea4a14c9d34efed917628fd4e68634c8b9"},{"author":{"_account_id":1779,"name":"Daniel Berrange","email":"berrange@redhat.com","username":"berrange"},"change_message_id":"1f46ee9bd1964b78fe3da0cf88575ab9329db14e","unresolved":false,"context_lines":[{"line_number":77,"context_line":"# XXX WHY ARE THESE HERE? Isn\u0027t this only used by virtualization drivers"},{"line_number":78,"context_line":"# - virtio is libvirt centric and the other interface types probably are"},{"line_number":79,"context_line":"# as well. At the very least, these should be constants in the virt"},{"line_number":80,"context_line":"# subdirectory - not here."},{"line_number":81,"context_line":""},{"line_number":82,"context_line":"# Constants for the \u0027vif_model\u0027 values"},{"line_number":83,"context_line":"VIF_MODEL_VIRTIO \u003d \u0027virtio\u0027"}],"source_content_type":"text/x-python","patch_set":4,"id":"7a016987_82539916","line":80,"updated":"2015-05-22 16:50:53.000000000","message":"These constants will soon all be able to move into the VIFModel field I\u0027m adding in\n\nhttps://review.openstack.org/#/c/76234/35/nova/objects/fields.py","commit_id":"141481ac508e5b65614820efca3ccc9fd47abb26"},{"author":{"_account_id":1779,"name":"Daniel Berrange","email":"berrange@redhat.com","username":"berrange"},"change_message_id":"1f46ee9bd1964b78fe3da0cf88575ab9329db14e","unresolved":false,"context_lines":[{"line_number":314,"context_line":"#    to be moved as well."},{"line_number":315,"context_line":"#"},{"line_number":316,"context_line":"# It seems likely that everything in this module would have to be"},{"line_number":317,"context_line":"# converted to a NovaObject and moved."},{"line_number":318,"context_line":"#"},{"line_number":319,"context_line":"class BaseVIF(Model):"},{"line_number":320,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"7a016987_2729979e","line":317,"updated":"2015-05-22 16:50:53.000000000","message":"The NetworkModel field in fields.py only really exists because this VIF model stuff is not a Nova object. If all of these classes got turned into Nova objects, then I think that field class would probably go away as you could then just use    fields.ObjectField(\u0027VIFModel\u0027) instead of NetworkModel. This would break the circular import.\n\nI think in the long term it is clear we want this all to be Nova object based. Personally I\u0027m fine with that being a 2 step process though, where we first refactor the current classes as you\u0027ve done here, and then move them into Nova objects as a later bit of work. You\u0027re not adding new functionality here, so although its sub-optimal to use Python objects, you\u0027re not making things any worse than they already are.\n\nIOW, I\u0027m fine with how this is done and leaving the TODO item","commit_id":"141481ac508e5b65614820efca3ccc9fd47abb26"},{"author":{"_account_id":1779,"name":"Daniel Berrange","email":"berrange@redhat.com","username":"berrange"},"change_message_id":"1f46ee9bd1964b78fe3da0cf88575ab9329db14e","unresolved":false,"context_lines":[{"line_number":321,"context_line":"    def __init__(self, id\u003dNone, address\u003dNone, network\u003dNone, type\u003dNone,"},{"line_number":322,"context_line":"                 details\u003dNone, devname\u003dNone, active\u003dFalse,"},{"line_number":323,"context_line":"                 vnic_type\u003dVNIC_TYPE_NORMAL, profile\u003dNone,"},{"line_number":324,"context_line":"                 ovs_interfaceid\u003dNone, preserve_on_delete\u003dFalse,"},{"line_number":325,"context_line":"                 **kwargs):"},{"line_number":326,"context_line":"        super(BaseVIF, self).__init__()"},{"line_number":327,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"7a016987_a277b59e","line":324,"updated":"2015-05-22 16:50:53.000000000","message":"I think ovs_intefaceid can be removed","commit_id":"141481ac508e5b65614820efca3ccc9fd47abb26"}],"nova/objects/instance_info_cache.py":[{"author":{"_account_id":13734,"name":"Nell Jerram","email":"nell@tigera.io","username":"neiljerram"},"change_message_id":"210df629143c6df98d56d14a1ebc8a35ed5b42ac","unresolved":false,"context_lines":[{"line_number":79,"context_line":"        self.active \u003d active"},{"line_number":80,"context_line":"        self.vnic_type \u003d vnic_type or model.VNIC_TYPE_NORMAL"},{"line_number":81,"context_line":"        self.profile \u003d profile"},{"line_number":82,"context_line":"        self.preserve_on_delete \u003d preserve_on_delete"},{"line_number":83,"context_line":"        self.meta \u003d kwargs.pop(\u0027meta\u0027, {})"},{"line_number":84,"context_line":"        self.meta.update(kwargs)"},{"line_number":85,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"9a0c5dc1_2ce25b04","line":82,"updated":"2015-05-12 17:04:08.000000000","message":"Could the lines above be derived automatically using fields? I\u0027m thinking of something like:\n\ndef _initialize_from_args(self, **kwargs):\n    for k in fields.keys():\n        setattr(self, k, kwargs.get(k))","commit_id":"141481ac508e5b65614820efca3ccc9fd47abb26"},{"author":{"_account_id":13734,"name":"Nell Jerram","email":"nell@tigera.io","username":"neiljerram"},"change_message_id":"210df629143c6df98d56d14a1ebc8a35ed5b42ac","unresolved":false,"context_lines":[{"line_number":81,"context_line":"        self.profile \u003d profile"},{"line_number":82,"context_line":"        self.preserve_on_delete \u003d preserve_on_delete"},{"line_number":83,"context_line":"        self.meta \u003d kwargs.pop(\u0027meta\u0027, {})"},{"line_number":84,"context_line":"        self.meta.update(kwargs)"},{"line_number":85,"context_line":""},{"line_number":86,"context_line":"    @base.remotable_classmethod"},{"line_number":87,"context_line":"    def create_from_args(cls, context, **kwargs):"}],"source_content_type":"text/x-python","patch_set":4,"id":"9a0c5dc1_acaacb6e","line":84,"updated":"2015-05-12 17:04:08.000000000","message":"This seems to allow two levels of metadata in kwargs.  E.g. if kwargs is\n\n {\u0027meta\u0027: {\u0027a1\u0027: 1}, \u0027a2\u0027: 2}\n\nthen self.meta ends up being {\u0027a1\u0027: 1, \u0027a2\u0027: 2}.  Is that what you intended, and is it necessary?  It seems like a strange data model!","commit_id":"141481ac508e5b65614820efca3ccc9fd47abb26"},{"author":{"_account_id":13734,"name":"Nell Jerram","email":"nell@tigera.io","username":"neiljerram"},"change_message_id":"210df629143c6df98d56d14a1ebc8a35ed5b42ac","unresolved":false,"context_lines":[{"line_number":109,"context_line":""},{"line_number":110,"context_line":"    fields \u003d {"},{"line_number":111,"context_line":"        \u0027physical_network\u0027: fields.StringField(nullable\u003dTrue),"},{"line_number":112,"context_line":"        }"},{"line_number":113,"context_line":""},{"line_number":114,"context_line":"    @base.remotable_classmethod"},{"line_number":115,"context_line":"    def create_from_args(cls, context, physical_network\u003dNone, **kwargs):"}],"source_content_type":"text/x-python","patch_set":4,"id":"9a0c5dc1_6c097395","line":112,"updated":"2015-05-12 17:04:08.000000000","message":"I\u0027m surprised to see the superclass\u0027s fields being overwritten here, instead of being appended to.  Is that what you intended?","commit_id":"141481ac508e5b65614820efca3ccc9fd47abb26"},{"author":{"_account_id":13734,"name":"Nell Jerram","email":"nell@tigera.io","username":"neiljerram"},"change_message_id":"210df629143c6df98d56d14a1ebc8a35ed5b42ac","unresolved":false,"context_lines":[{"line_number":116,"context_line":"        vif \u003d cls()"},{"line_number":117,"context_line":"        vif.physical_network \u003d physical_network"},{"line_number":118,"context_line":"        vif._initialize_from_args(**kwargs)"},{"line_number":119,"context_line":"        return vif"},{"line_number":120,"context_line":""},{"line_number":121,"context_line":""},{"line_number":122,"context_line":"# TODO(beagles): We don\u0027t know for sure who this belongs to at the moment so it"}],"source_content_type":"text/x-python","patch_set":4,"id":"9a0c5dc1_ec232304","line":119,"updated":"2015-05-12 17:04:08.000000000","message":"If my points above are correct, about (1) initializing based on fields, and (2) extending fields rather than overwriting it, I think the subclass implementations of create_from_args all become unnecessary.","commit_id":"141481ac508e5b65614820efca3ccc9fd47abb26"},{"author":{"_account_id":13734,"name":"Nell Jerram","email":"nell@tigera.io","username":"neiljerram"},"change_message_id":"210df629143c6df98d56d14a1ebc8a35ed5b42ac","unresolved":false,"context_lines":[{"line_number":119,"context_line":"        return vif"},{"line_number":120,"context_line":""},{"line_number":121,"context_line":""},{"line_number":122,"context_line":"# TODO(beagles): We don\u0027t know for sure who this belongs to at the moment so it"},{"line_number":123,"context_line":"class QbgVIF(VIF):"},{"line_number":124,"context_line":"    #Version 1.0: Inital version"},{"line_number":125,"context_line":"    VERSION \u003d \u00271.0\u0027"}],"source_content_type":"text/x-python","patch_set":4,"id":"9a0c5dc1_c9e5f1a8","line":122,"updated":"2015-05-12 17:04:08.000000000","message":"Unfinished sentence.","commit_id":"141481ac508e5b65614820efca3ccc9fd47abb26"},{"author":{"_account_id":13734,"name":"Nell Jerram","email":"nell@tigera.io","username":"neiljerram"},"change_message_id":"210df629143c6df98d56d14a1ebc8a35ed5b42ac","unresolved":false,"context_lines":[{"line_number":227,"context_line":"    # Version 1.4: String attributes updated to support unicode"},{"line_number":228,"context_line":"    # Version 1.5: Actually set the deleted, created_at, updated_at, and"},{"line_number":229,"context_line":"    #              deleted_at attributes"},{"line_number":230,"context_line":"    # Version 1.6: Conversion of network info to neutron objects"},{"line_number":231,"context_line":"    VERSION \u003d \u00271.6\u0027"},{"line_number":232,"context_line":""},{"line_number":233,"context_line":"    fields \u003d {"}],"source_content_type":"text/x-python","patch_set":4,"id":"9a0c5dc1_092669ce","line":230,"updated":"2015-05-12 17:04:08.000000000","message":"Should that be Nova objects?","commit_id":"141481ac508e5b65614820efca3ccc9fd47abb26"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"57cd1300f9751def027d9334d27219261e1019fd","unresolved":false,"context_lines":[{"line_number":45,"context_line":""},{"line_number":46,"context_line":"    fields \u003d {"},{"line_number":47,"context_line":"        \u0027instance_uuid\u0027: fields.UUIDField(),"},{"line_number":48,"context_line":"        \u0027network_info\u0027: fields.ObjectField(\u0027NetworkInfo\u0027),"},{"line_number":49,"context_line":"        }"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"    obj_relationships \u003d {"}],"source_content_type":"text/x-python","patch_set":12,"id":"7a016987_bd173044","line":48,"updated":"2015-05-28 18:58:24.000000000","message":"You can\u0027t change the type of this field. When an older node passes us an older info_cache, the field contents will be in the old format and thus it will fail to deserialize. I think you should change this to network_info_obj or something and live-migrate the data on lazy-load if we have an older-format object.\n\nSimilarly, you could lazy-load convert the older object attribute to compatibility format so that you can change less existing code atomically and then do those conversions step by step (like we did for flavors).","commit_id":"dba057227753f6a824220af5364930e4aa589694"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"57cd1300f9751def027d9334d27219261e1019fd","unresolved":false,"context_lines":[{"line_number":61,"context_line":"                info_cache[field] \u003d db_obj[field]"},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"        net_info \u003d db_obj.get(\u0027network_info\u0027) or \u0027[]\u0027"},{"line_number":64,"context_line":"        if isinstance(net_info, six.string_types):"},{"line_number":65,"context_line":"            try:"},{"line_number":66,"context_line":"                net_info \u003d jsonutils.loads(net_info)"},{"line_number":67,"context_line":"            except (ValueError, TypeError):"}],"source_content_type":"text/x-python","patch_set":12,"id":"7a016987_fd3808d5","line":64,"updated":"2015-05-28 18:58:24.000000000","message":"The field is a string in the database, right? When would this not be true? Did you mean to check if it\u0027s None?","commit_id":"dba057227753f6a824220af5364930e4aa589694"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"57cd1300f9751def027d9334d27219261e1019fd","unresolved":false,"context_lines":[{"line_number":77,"context_line":"                        nw_info.NetworkInfo.obj_from_primitive(net_info)"},{"line_number":78,"context_line":"            elif isinstance(net_info, list):"},{"line_number":79,"context_line":"                vifs \u003d [nw_info.create_vif(**m) for m in net_info]"},{"line_number":80,"context_line":"                info_cache.network_info \u003d nw_info.NetworkInfo(vifs)"},{"line_number":81,"context_line":"            else:"},{"line_number":82,"context_line":"                LOG.error(_LE(\u0027Cached network data not a list!\u0027),"},{"line_number":83,"context_line":"                          instance\u003dinfo_cache.instance_uuid)"}],"source_content_type":"text/x-python","patch_set":12,"id":"7a016987_7d53f817","line":80,"updated":"2015-05-28 18:58:24.000000000","message":"You need to convert this to an object, right? You can\u0027t store the old format in the field with the new type.","commit_id":"dba057227753f6a824220af5364930e4aa589694"}],"nova/objects/network_info.py":[{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"57cd1300f9751def027d9334d27219261e1019fd","unresolved":false,"context_lines":[{"line_number":30,"context_line":"class IP(base.NovaObject,"},{"line_number":31,"context_line":"         base.NovaObjectDictCompat):"},{"line_number":32,"context_line":"    # Initial version"},{"line_number":33,"context_line":"    VERSION \u003d \u00271.0\u0027"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"    fields \u003d {"},{"line_number":36,"context_line":"        \u0027address\u0027: fields.StringField(nullable\u003dTrue),"}],"source_content_type":"text/x-python","patch_set":12,"id":"7a016987_1d6ac4b3","line":33,"updated":"2015-05-28 18:58:24.000000000","message":"There is a ton of stuff in this file, much of which overlaps with other models we have in Nova (IP, network, VIF, etc). I think you should share as much with those as possible.\n\nFor the things we don\u0027t have (route, etc) that we need to keep, you probably just want to tie all their versions together for simplicity.","commit_id":"dba057227753f6a824220af5364930e4aa589694"}]}
