)]}'
{"lower-constraints.txt":[{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"2bc55779a63205bb5ef04c9ad0bfe734fd0ae372","unresolved":false,"context_lines":[{"line_number":49,"context_line":"oslo.utils\u003d\u003d3.36.0"},{"line_number":50,"context_line":"oslo.versionedobjects\u003d\u003d1.28.0"},{"line_number":51,"context_line":"oslotest\u003d\u003d1.10.0"},{"line_number":52,"context_line":"ovsdbapp\u003d\u003d0.12.1"},{"line_number":53,"context_line":"Paste\u003d\u003d2.0.3"},{"line_number":54,"context_line":"PasteDeploy\u003d\u003d1.5.2"},{"line_number":55,"context_line":"pbr\u003d\u003d2.0.0"}],"source_content_type":"text/plain","patch_set":36,"id":"3f79a3b5_ad400a08","line":52,"range":{"start_line":52,"start_character":0,"end_line":52,"end_character":16},"updated":"2018-09-26 15:11:18.000000000","message":"Why are we adding this here? Shouldn\u0027t this be in the following patch?\n\nLater: We use it for the API, that\u0027s why","commit_id":"9cffe2bdf4e88300cc45f46bb888a47775468833"}],"releasenotes/notes/add-abstract-ovsdb-api-8f04df58d4ed5b73.yaml":[{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"acd1be176d81a8761fc80ad60e5a3a8649341269","unresolved":false,"context_lines":[{"line_number":6,"context_line":"    The command line implementation using ``ovs-vsctl`` was refactored as a"},{"line_number":7,"context_line":"    backend for this abstract API."},{"line_number":8,"context_line":"    A new configuration variable, ``ovsdb_interface``, is added to select"},{"line_number":9,"context_line":"    the interface for interanting with the OVS database."}],"source_content_type":"text/x-yaml","patch_set":20,"id":"df87a7cf_27c1712f","line":9,"range":{"start_line":9,"start_character":22,"end_line":9,"end_character":33},"updated":"2018-09-21 14:13:51.000000000","message":"interacting","commit_id":"593952fff5459b3d8c99fab169183d5fa9cfecf3"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"2bc55779a63205bb5ef04c9ad0bfe734fd0ae372","unresolved":false,"context_lines":[{"line_number":6,"context_line":"    Command line implementation using ``ovs-vsctl`` was refactored as a"},{"line_number":7,"context_line":"    backend for this abstract API."},{"line_number":8,"context_line":"    A new configuration variable, ``ovsdb_interface``, is added to select"},{"line_number":9,"context_line":"    the interface for interanting with the OVS database."}],"source_content_type":"text/x-yaml","patch_set":34,"id":"3f79a3b5_e82bad78","line":9,"range":{"start_line":9,"start_character":22,"end_line":9,"end_character":33},"updated":"2018-09-26 15:11:18.000000000","message":"interacting?","commit_id":"be2a382d1afc914e6583cc850dcd8ff6d912f6f1"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"b7a7a371393f294334ab6ed346e5dc8d8f071594","unresolved":false,"context_lines":[{"line_number":6,"context_line":"    Command line implementation using ``ovs-vsctl`` was refactored as a"},{"line_number":7,"context_line":"    backend for this abstract API."},{"line_number":8,"context_line":"    A new configuration variable, ``ovsdb_interface``, is added to select"},{"line_number":9,"context_line":"    the interface for interanting with the OVS database."}],"source_content_type":"text/x-yaml","patch_set":34,"id":"3f79a3b5_28be9ed3","line":9,"range":{"start_line":9,"start_character":22,"end_line":9,"end_character":33},"in_reply_to":"3f79a3b5_e82bad78","updated":"2018-10-03 08:53:50.000000000","message":"Done","commit_id":"be2a382d1afc914e6583cc850dcd8ff6d912f6f1"}],"vif_plug_ovs/linux_net.py":[{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"2bc55779a63205bb5ef04c9ad0bfe734fd0ae372","unresolved":false,"context_lines":[{"line_number":85,"context_line":"            \u0027--\u0027, \u0027set\u0027, \u0027Bridge\u0027, bridge, \u0027datapath_type\u003d%s\u0027 % datapath_type]"},{"line_number":86,"context_line":""},{"line_number":87,"context_line":""},{"line_number":88,"context_line":"@privsep.vif_plug.entrypoint"},{"line_number":89,"context_line":"def create_ovs_vif_port(bridge, dev, iface_id, mac, instance_id,"},{"line_number":90,"context_line":"                        mtu\u003dNone, interface_type\u003dNone, timeout\u003dNone,"},{"line_number":91,"context_line":"                        vhost_server_path\u003dNone, ovsdb_connection\u003dNone):"},{"line_number":92,"context_line":"    _ovs_vsctl(_create_ovs_vif_cmd(bridge, dev, iface_id,"},{"line_number":93,"context_line":"                                   mac, instance_id, interface_type,"},{"line_number":94,"context_line":"                                   vhost_server_path), timeout\u003dtimeout,"},{"line_number":95,"context_line":"                                   ovsdb_connection\u003dovsdb_connection)"},{"line_number":96,"context_line":"    _update_device_mtu(dev, mtu, interface_type, timeout\u003dtimeout,"},{"line_number":97,"context_line":"                       ovsdb_connection\u003dovsdb_connection)"},{"line_number":98,"context_line":""},{"line_number":99,"context_line":""},{"line_number":100,"context_line":"@privsep.vif_plug.entrypoint"},{"line_number":101,"context_line":"def update_ovs_vif_port(dev, mtu\u003dNone, interface_type\u003dNone, timeout\u003dNone,"},{"line_number":102,"context_line":"                        ovsdb_connection\u003dNone):"},{"line_number":103,"context_line":"    _update_device_mtu(dev, mtu, interface_type, timeout\u003dtimeout,"},{"line_number":104,"context_line":"                       ovsdb_connection\u003dovsdb_connection)"},{"line_number":105,"context_line":""},{"line_number":106,"context_line":""},{"line_number":107,"context_line":"@privsep.vif_plug.entrypoint"},{"line_number":108,"context_line":"def delete_ovs_vif_port(bridge, dev, timeout\u003dNone,"},{"line_number":109,"context_line":"                        ovsdb_connection\u003dNone, delete_netdev\u003dTrue):"},{"line_number":110,"context_line":"    _ovs_vsctl([\u0027--\u0027, \u0027--if-exists\u0027, \u0027del-port\u0027, bridge, dev],"},{"line_number":111,"context_line":"               timeout\u003dtimeout, ovsdb_connection\u003dovsdb_connection)"},{"line_number":112,"context_line":"    if delete_netdev:"},{"line_number":113,"context_line":"        _delete_net_dev(dev)"},{"line_number":114,"context_line":""},{"line_number":115,"context_line":""},{"line_number":116,"context_line":"def device_exists(device):"}],"source_content_type":"text/x-python","patch_set":36,"id":"3f79a3b5_2d8ababb","side":"PARENT","line":113,"range":{"start_line":88,"start_character":0,"end_line":113,"end_character":28},"updated":"2018-09-26 15:11:18.000000000","message":"Note to self: These are the functions we\u0027ve moved to [1]. Everything above is just helping.\n\n[1] https://review.openstack.org/#/c/476612/36/vif_plug_ovs/ovsdb/ovsdb_lib.py","commit_id":"3eded6ba37321d9f09fea76ea323d52b419d9a3a"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"d0de1ac60af73f4e1d8a513c49e3a55adebc458c","unresolved":false,"context_lines":[{"line_number":49,"context_line":"_SRIOV_TOTALVFS \u003d \"sriov_totalvfs\""},{"line_number":50,"context_line":""},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"def _update_device_mtu(dev, mtu):"},{"line_number":53,"context_line":"    if not mtu:"},{"line_number":54,"context_line":"        return"},{"line_number":55,"context_line":"    if sys.platform !\u003d constants.PLATFORM_WIN32:"},{"line_number":56,"context_line":"        # Hyper-V with OVS does not support external programming of"},{"line_number":57,"context_line":"        # virtual interface MTUs via netsh or other Windows tools."},{"line_number":58,"context_line":"        # When plugging an interface on Windows, we therefore skip"},{"line_number":59,"context_line":"        # programming the MTU and fallback to DHCP advertisement."},{"line_number":60,"context_line":"        set_device_mtu(dev, mtu)"},{"line_number":61,"context_line":""},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"def interface_in_bridge(bridge, device):"}],"source_content_type":"text/x-python","patch_set":37,"id":"3f79a3b5_110e0d8c","line":60,"range":{"start_line":52,"start_character":1,"end_line":60,"end_character":32},"updated":"2018-10-08 11:02:54.000000000","message":"this is not equivalent.\n\nbut i see you hve moved the missing logic to ovsdb_lib.\n\nit would be nice to break the dependcy from ovsdb_lib to linux_net and just have it call ip_lib directly but this can be left for later.","commit_id":"3943a491542022f54945fa48afd34d4c1e7346e0"}],"vif_plug_ovs/ovs.py":[{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"495de95ef9a179e0a89fb87ce0bf1b1866212c40","unresolved":false,"context_lines":[{"line_number":28,"context_line":"from vif_plug_ovs import linux_net"},{"line_number":29,"context_line":"from vif_plug_ovs.ovsdb import api as ovsdb_api"},{"line_number":30,"context_line":"from vif_plug_ovs.ovsdb import ovsdb_lib"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"class OvsPlugin(plugin.PluginBase):"},{"line_number":34,"context_line":"    \"\"\"An OVS plugin that can setup VIFs in many ways"}],"source_content_type":"text/x-python","patch_set":13,"id":"bf57530f_c0ef9485","line":31,"updated":"2017-09-20 13:06:01.000000000","message":"That should be something like:\n\n  from vif_plug_ovs.ovsdb import api as ovsdb_lib\n\n  ...\n  self.ovsdb \u003d ovsdb_lib.get_instance(self.config)","commit_id":"f5333467576bb79682122ba3c2e34737fe832635"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"6846c402da7596812ead0c4bc0b8e3249074c5c0","unresolved":false,"context_lines":[{"line_number":28,"context_line":"from vif_plug_ovs import linux_net"},{"line_number":29,"context_line":"from vif_plug_ovs.ovsdb import api as ovsdb_api"},{"line_number":30,"context_line":"from vif_plug_ovs.ovsdb import ovsdb_lib"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"class OvsPlugin(plugin.PluginBase):"},{"line_number":34,"context_line":"    \"\"\"An OVS plugin that can setup VIFs in many ways"}],"source_content_type":"text/x-python","patch_set":13,"id":"7f515b1d_680d698f","line":31,"in_reply_to":"bf57530f_c0ef9485","updated":"2017-09-22 09:55:34.000000000","message":"This is done in ovsdb_lib.BaseOVS. This class calls the selected implementation factory method, by calling api.get_instance().","commit_id":"f5333467576bb79682122ba3c2e34737fe832635"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"2bc55779a63205bb5ef04c9ad0bfe734fd0ae372","unresolved":false,"context_lines":[{"line_number":64,"context_line":"                   \u0027tcp:IP:PORT parameter for communicating with OVSDB over \u0027"},{"line_number":65,"context_line":"                   \u0027a TCP socket.\u0027),"},{"line_number":66,"context_line":"        cfg.StrOpt(\u0027ovsdb_interface\u0027,"},{"line_number":67,"context_line":"                   choices\u003dovsdb_api.interface_map.keys(),"},{"line_number":68,"context_line":"                   default\u003d\u0027vsctl\u0027,"},{"line_number":69,"context_line":"                   help\u003d\u0027The interface for interacting with the OVSDB\u0027),"},{"line_number":70,"context_line":"    )"}],"source_content_type":"text/x-python","patch_set":34,"id":"3f79a3b5_286445e4","line":67,"range":{"start_line":67,"start_character":27,"end_line":67,"end_character":58},"updated":"2018-09-26 15:11:18.000000000","message":"This is an iterable (dict_keys) in Python 3. I assume this works OK there? If you\u0027re note sure, perhaps you could just do:\n\n  choices\u003dlist(ovsdb_api.interface_map),\n\n?","commit_id":"be2a382d1afc914e6583cc850dcd8ff6d912f6f1"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"b7a7a371393f294334ab6ed346e5dc8d8f071594","unresolved":false,"context_lines":[{"line_number":64,"context_line":"                   \u0027tcp:IP:PORT parameter for communicating with OVSDB over \u0027"},{"line_number":65,"context_line":"                   \u0027a TCP socket.\u0027),"},{"line_number":66,"context_line":"        cfg.StrOpt(\u0027ovsdb_interface\u0027,"},{"line_number":67,"context_line":"                   choices\u003dovsdb_api.interface_map.keys(),"},{"line_number":68,"context_line":"                   default\u003d\u0027vsctl\u0027,"},{"line_number":69,"context_line":"                   help\u003d\u0027The interface for interacting with the OVSDB\u0027),"},{"line_number":70,"context_line":"    )"}],"source_content_type":"text/x-python","patch_set":34,"id":"3f79a3b5_2891be46","line":67,"range":{"start_line":67,"start_character":27,"end_line":67,"end_character":58},"in_reply_to":"3f79a3b5_286445e4","updated":"2018-10-03 08:53:50.000000000","message":"Yes, you are right, sometimes I forget this.","commit_id":"be2a382d1afc914e6583cc850dcd8ff6d912f6f1"}],"vif_plug_ovs/ovsdb/api.py":[{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"495de95ef9a179e0a89fb87ce0bf1b1866212c40","unresolved":false,"context_lines":[{"line_number":19,"context_line":"    # \u0027native\u0027: \u0027vif_plug_ovs.ovsdb.impl_idl\u0027,"},{"line_number":20,"context_line":"}"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"def from_config(context, config, iface_name\u003dNone):"},{"line_number":24,"context_line":"    \"\"\"Return the configured OVSDB API implementation\"\"\""},{"line_number":25,"context_line":"    iface \u003d importutils.import_module("}],"source_content_type":"text/x-python","patch_set":13,"id":"bf57530f_60eb48b0","line":22,"updated":"2017-09-20 13:06:01.000000000","message":"Let try to have the same pattern [0]\n\n[0] https://review.openstack.org/#/c/484386/18/os_vif/command/ip/api.py","commit_id":"f5333467576bb79682122ba3c2e34737fe832635"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"6846c402da7596812ead0c4bc0b8e3249074c5c0","unresolved":false,"context_lines":[{"line_number":19,"context_line":"    # \u0027native\u0027: \u0027vif_plug_ovs.ovsdb.impl_idl\u0027,"},{"line_number":20,"context_line":"}"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"def from_config(context, config, iface_name\u003dNone):"},{"line_number":24,"context_line":"    \"\"\"Return the configured OVSDB API implementation\"\"\""},{"line_number":25,"context_line":"    iface \u003d importutils.import_module("}],"source_content_type":"text/x-python","patch_set":13,"id":"7f515b1d_283e5129","line":22,"in_reply_to":"bf57530f_60eb48b0","updated":"2017-09-22 09:55:34.000000000","message":"Done","commit_id":"f5333467576bb79682122ba3c2e34737fe832635"},{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"d753b0bbb7974d5199877ea04a64bbf93d26e0c9","unresolved":false,"context_lines":[{"line_number":20,"context_line":"}"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"def get_instace(context, iface_name\u003dNone):"},{"line_number":24,"context_line":"    \"\"\"Return the configured OVSDB API implementation\"\"\""},{"line_number":25,"context_line":"    iface \u003d importutils.import_module("},{"line_number":26,"context_line":"        interface_map[iface_name or context.interface])"}],"source_content_type":"text/x-python","patch_set":37,"id":"3f79a3b5_00f4a387","line":23,"range":{"start_line":23,"start_character":8,"end_line":23,"end_character":15},"updated":"2018-10-05 06:28:42.000000000","message":"nit: typo? instance?","commit_id":"3943a491542022f54945fa48afd34d4c1e7346e0"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"d0de1ac60af73f4e1d8a513c49e3a55adebc458c","unresolved":false,"context_lines":[{"line_number":20,"context_line":"}"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"def get_instace(context, iface_name\u003dNone):"},{"line_number":24,"context_line":"    \"\"\"Return the configured OVSDB API implementation\"\"\""},{"line_number":25,"context_line":"    iface \u003d importutils.import_module("},{"line_number":26,"context_line":"        interface_map[iface_name or context.interface])"}],"source_content_type":"text/x-python","patch_set":37,"id":"3f79a3b5_d1f17598","line":23,"range":{"start_line":23,"start_character":8,"end_line":23,"end_character":15},"in_reply_to":"3f79a3b5_00f4a387","updated":"2018-10-08 11:02:54.000000000","message":"yes this is a typo.\n\ni will fix this up\nthis is called exectly once by ovsdb_lib so its a trivial fix","commit_id":"3943a491542022f54945fa48afd34d4c1e7346e0"}],"vif_plug_ovs/ovsdb/impl_vsctl.py":[{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"495de95ef9a179e0a89fb87ce0bf1b1866212c40","unresolved":false,"context_lines":[{"line_number":53,"context_line":"        return getattr(pyval, \"record_id\", pyval)"},{"line_number":54,"context_line":""},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"def api_factory(context):"},{"line_number":57,"context_line":"    return OvsdbVsctl(context)"},{"line_number":58,"context_line":""},{"line_number":59,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"bf57530f_8034fc4b","line":56,"updated":"2017-09-20 13:06:01.000000000","message":"Why this? that does not seem to be necessary.\n\nThe method get_instance in ovsdb.api is going to construct that object.","commit_id":"f5333467576bb79682122ba3c2e34737fe832635"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"6846c402da7596812ead0c4bc0b8e3249074c5c0","unresolved":false,"context_lines":[{"line_number":53,"context_line":"        return getattr(pyval, \"record_id\", pyval)"},{"line_number":54,"context_line":""},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"def api_factory(context):"},{"line_number":57,"context_line":"    return OvsdbVsctl(context)"},{"line_number":58,"context_line":""},{"line_number":59,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"7f515b1d_a82a41e4","line":56,"in_reply_to":"bf57530f_8034fc4b","updated":"2017-09-22 09:55:34.000000000","message":"The way the object is built is different in both implementations (take a look to [1]). In \"get_instance\" we need to call to the same function and arguments, regardless of the factory method specific implementation.\n\nAlso you can take a look at Neutron implementation [2][3]. \"get_factory\" is called from \"api.from_config\". In os-vif, as you suggested, we are going to call this function \"get_instance\"\n\n[1] https://review.openstack.org/#/c/482226/8/vif_plug_ovs/ovsdb/impl_idl.py\n[2] https://github.com/openstack/neutron/blob/master/neutron/agent/ovsdb/impl_idl.py\n[3] https://github.com/openstack/neutron/blob/master/neutron/agent/ovsdb/impl_vsctl.py","commit_id":"f5333467576bb79682122ba3c2e34737fe832635"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"253f4686e47183e0fd3d903a74e86a4b78e8f01f","unresolved":false,"context_lines":[{"line_number":62,"context_line":"    # NOTE(ralonsoh): this function is defined outside the class Transaction"},{"line_number":63,"context_line":"    #                 to allow oslo_privsep.PrivContext.entrypoint to wrap"},{"line_number":64,"context_line":"    #                 the function correctly."},{"line_number":65,"context_line":"    return processutils.execute(*full_args).rstrip()"},{"line_number":66,"context_line":""},{"line_number":67,"context_line":""},{"line_number":68,"context_line":"class Transaction(ovsdb_api.Transaction):"}],"source_content_type":"text/x-python","patch_set":20,"id":"df87a7cf_75c0747c","line":65,"range":{"start_line":65,"start_character":11,"end_line":65,"end_character":52},"updated":"2017-12-06 01:29:19.000000000","message":"this throws an exeption when invoking del-port\nhttp://logs.openstack.org/12/476612/20/check/legacy-tempest-dsvm-nova-os-vif/884781c/logs/screen-n-cpu.txt.gz?#_Dec_02_11_20_45_522701\n\nprocessutils.execute retruns a tuple of stdout and stderror\nsee https://github.com/openstack/oslo.concurrency/blob/9584101c993747d28fd36ebbf93792c053eaaf54/oslo_concurrency/processutils.py#L265\n\nbased on how you are using run_vsctl on line 88 i think\nyou mean to retrun the rstripped stdout\ne.g.\nprocessutils.execute(*full_args)[0].rstrip()","commit_id":"593952fff5459b3d8c99fab169183d5fa9cfecf3"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"0b3d8da1f68815d8baf738d0c0d854c7e04df839","unresolved":false,"context_lines":[{"line_number":62,"context_line":"    # NOTE(ralonsoh): this function is defined outside the class Transaction"},{"line_number":63,"context_line":"    #                 to allow oslo_privsep.PrivContext.entrypoint to wrap"},{"line_number":64,"context_line":"    #                 the function correctly."},{"line_number":65,"context_line":"    return processutils.execute(*full_args).rstrip()"},{"line_number":66,"context_line":""},{"line_number":67,"context_line":""},{"line_number":68,"context_line":"class Transaction(ovsdb_api.Transaction):"}],"source_content_type":"text/x-python","patch_set":20,"id":"df87a7cf_2aeb5fb0","line":65,"range":{"start_line":65,"start_character":11,"end_line":65,"end_character":52},"in_reply_to":"df87a7cf_75c0747c","updated":"2017-12-06 08:54:54.000000000","message":"Very good catch! I\u0027ll change it now.","commit_id":"593952fff5459b3d8c99fab169183d5fa9cfecf3"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"805e43dd8cdaad7e037023802cd486d0190cc20c","unresolved":false,"context_lines":[{"line_number":179,"context_line":"class DbGetCommand(DbCommand):"},{"line_number":180,"context_line":"    @DbCommand.result.setter"},{"line_number":181,"context_line":"    def result(self, val):"},{"line_number":182,"context_line":"        # super()\u0027s never worked for setters http://bugs.python.org/issue14965"},{"line_number":183,"context_line":"        DbCommand.result.fset(self, val)"},{"line_number":184,"context_line":"        # DbCommand will return [{\u0027column\u0027: value}] and we just want value."},{"line_number":185,"context_line":"        if self._result:"}],"source_content_type":"text/x-python","patch_set":20,"id":"df87a7cf_35eaed74","line":182,"range":{"start_line":182,"start_character":45,"end_line":182,"end_character":78},"updated":"2017-12-06 01:02:26.000000000","message":"damb that must have been annoying to figure out.","commit_id":"593952fff5459b3d8c99fab169183d5fa9cfecf3"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"0b3d8da1f68815d8baf738d0c0d854c7e04df839","unresolved":false,"context_lines":[{"line_number":179,"context_line":"class DbGetCommand(DbCommand):"},{"line_number":180,"context_line":"    @DbCommand.result.setter"},{"line_number":181,"context_line":"    def result(self, val):"},{"line_number":182,"context_line":"        # super()\u0027s never worked for setters http://bugs.python.org/issue14965"},{"line_number":183,"context_line":"        DbCommand.result.fset(self, val)"},{"line_number":184,"context_line":"        # DbCommand will return [{\u0027column\u0027: value}] and we just want value."},{"line_number":185,"context_line":"        if self._result:"}],"source_content_type":"text/x-python","patch_set":20,"id":"df87a7cf_8a770b03","line":182,"range":{"start_line":182,"start_character":45,"end_line":182,"end_character":78},"in_reply_to":"df87a7cf_35eaed74","updated":"2017-12-06 08:54:54.000000000","message":"The issue is still there.\n\nAs I wrote, this file is derived from neutron/agent/ovsdb/impl_vsctl.py","commit_id":"593952fff5459b3d8c99fab169183d5fa9cfecf3"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"2bc55779a63205bb5ef04c9ad0bfe734fd0ae372","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":36,"id":"3f79a3b5_e85fd0e1","updated":"2018-09-26 15:11:18.000000000","message":"As an aside, while this is lovely, I can\u0027t wait for the day we can kill it :) I know you don\u0027t want to switch over at once but maintaining two of these seems like overkill","commit_id":"9cffe2bdf4e88300cc45f46bb888a47775468833"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"b7a7a371393f294334ab6ed346e5dc8d8f071594","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":36,"id":"3f79a3b5_28169ea8","in_reply_to":"3f79a3b5_e85fd0e1","updated":"2018-10-03 08:53:50.000000000","message":"For sure, like IPTools (https://review.openstack.org/#/c/605422/)","commit_id":"9cffe2bdf4e88300cc45f46bb888a47775468833"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"d698696a63efe64ed6fcf25be8ad4c39ab0b1ea0","unresolved":false,"context_lines":[{"line_number":1,"context_line":"#    Derived from neutron/agent/ovsdb/impl_vsctl.py"},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":4,"context_line":"#    not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":38,"id":"3f79a3b5_608d0628","line":1,"range":{"start_line":1,"start_character":18,"end_line":1,"end_character":51},"updated":"2018-10-22 12:59:27.000000000","message":"there is no such file...\n\nhttps://github.com/openstack/neutron/tree/master/neutron/agent/ovsdb","commit_id":"7bfb01bcb151087d70df115ba01f789a8a7f161f"}],"vif_plug_ovs/ovsdb/ovsdb_lib.py":[{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"495de95ef9a179e0a89fb87ce0bf1b1866212c40","unresolved":false,"context_lines":[{"line_number":22,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"class BaseOVS(object):"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"    def __init__(self, config):"},{"line_number":28,"context_line":"        self.vsctl_timeout \u003d config.ovs_vsctl_timeout"}],"source_content_type":"text/x-python","patch_set":13,"id":"bf57530f_601228b4","line":25,"updated":"2017-09-20 13:06:01.000000000","message":"If we want to stay coherent all of this should be in api.py","commit_id":"f5333467576bb79682122ba3c2e34737fe832635"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"6846c402da7596812ead0c4bc0b8e3249074c5c0","unresolved":false,"context_lines":[{"line_number":22,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"class BaseOVS(object):"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"    def __init__(self, config):"},{"line_number":28,"context_line":"        self.vsctl_timeout \u003d config.ovs_vsctl_timeout"}],"source_content_type":"text/x-python","patch_set":13,"id":"7f515b1d_dd4421ba","line":25,"in_reply_to":"bf57530f_601228b4","updated":"2017-09-22 09:55:34.000000000","message":"Hmmm I disagree. We are not exposing to the developer the OVSDB interface, but an specific implementation with the needed methods: create_ovs_vif_port, update_ovs_vif_port, delete_ovs_vif_port and ensure_ovs_bridge.\n\nThat\u0027s why I created this library instead of calling directly to the OVSDB api.","commit_id":"f5333467576bb79682122ba3c2e34737fe832635"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"2bc55779a63205bb5ef04c9ad0bfe734fd0ae372","unresolved":false,"context_lines":[{"line_number":32,"context_line":""},{"line_number":33,"context_line":"    def _ovs_supports_mtu_requests(self):"},{"line_number":34,"context_line":"        return bool(self.ovsdb.db_list("},{"line_number":35,"context_line":"            \u0027Interface\u0027, columns\u003d[\u0027mtu_request\u0027]).execute(check_error\u003dTrue,"},{"line_number":36,"context_line":"                                                          log_errors\u003dTrue))"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"    def _set_mtu_request(self, dev, mtu):"}],"source_content_type":"text/x-python","patch_set":36,"id":"3f79a3b5_e8e83016","line":35,"range":{"start_line":35,"start_character":58,"end_line":35,"end_character":69},"updated":"2018-09-26 15:11:18.000000000","message":"Is the conversion here lossy? Previously we were having to check an exact string to ensure the error message was what we expected. What\u0027s changed? We\u0027re still ultimately calling the command with \u0027processutils.execute\u0027 (compare https://review.openstack.org/#/c/476612/36/vif_plug_ovs/ovsdb/impl_vsctl.py@65 with line 70 of base in https://review.openstack.org/#/c/476612/36/vif_plug_ovs/linux_net.py)","commit_id":"9cffe2bdf4e88300cc45f46bb888a47775468833"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"b7a7a371393f294334ab6ed346e5dc8d8f071594","unresolved":false,"context_lines":[{"line_number":32,"context_line":""},{"line_number":33,"context_line":"    def _ovs_supports_mtu_requests(self):"},{"line_number":34,"context_line":"        return bool(self.ovsdb.db_list("},{"line_number":35,"context_line":"            \u0027Interface\u0027, columns\u003d[\u0027mtu_request\u0027]).execute(check_error\u003dTrue,"},{"line_number":36,"context_line":"                                                          log_errors\u003dTrue))"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"    def _set_mtu_request(self, dev, mtu):"}],"source_content_type":"text/x-python","patch_set":36,"id":"3f79a3b5_5bae42e4","line":35,"range":{"start_line":35,"start_character":58,"end_line":35,"end_character":69},"in_reply_to":"3f79a3b5_e8e83016","updated":"2018-10-03 08:53:50.000000000","message":"Hmmm maybe I\u0027m not understanding you correctly.\n\nWhen we execute \"execute\", we are running BaseCommand.execute, which executes Transaction.run_vsctl (https://review.openstack.org/#/c/476612/36/vif_plug_ovs/ovsdb/impl_vsctl.py@98). This function is the translation of https://review.openstack.org/#/c/476612/36/vif_plug_ovs/linux_net.py@52\n\nWe don\u0027t check any string. When an exception occurs and check_error\u003dTrue, we reraise the exception.","commit_id":"9cffe2bdf4e88300cc45f46bb888a47775468833"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"2bc55779a63205bb5ef04c9ad0bfe734fd0ae372","unresolved":false,"context_lines":[{"line_number":73,"context_line":"                               {\u0027vhost-server-path\u0027: vhost_server_path}))"},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"        with self.ovsdb.transaction() as txn:"},{"line_number":76,"context_line":"            txn.add(self.ovsdb.del_port(dev, bridge\u003dbridge, if_exists\u003dTrue))"},{"line_number":77,"context_line":"            txn.add(self.ovsdb.add_port(bridge, dev))"},{"line_number":78,"context_line":"            txn.add(self.ovsdb.db_set(\u0027Interface\u0027, dev, *col_values))"},{"line_number":79,"context_line":"        self.update_device_mtu(dev, mtu, interface_type\u003dinterface_type)"},{"line_number":80,"context_line":""}],"source_content_type":"text/x-python","patch_set":36,"id":"3f79a3b5_ed7842f8","line":77,"range":{"start_line":76,"start_character":0,"end_line":77,"end_character":53},"updated":"2018-09-26 15:11:18.000000000","message":"This isn\u0027t the same thing we were doing previously [1]. As this stands, this would be regression for [2]. Could we instead add a \u0027may_exist\u0027 parameter to the \u0027add_port\u0027 call?\n\n[1] https://review.openstack.org/#/c/476612/36/vif_plug_ovs/linux_net.py (line 70 of the base patch)\n[2] https://bugzilla.redhat.com/show_bug.cgi?id\u003d1552115","commit_id":"9cffe2bdf4e88300cc45f46bb888a47775468833"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"b7a7a371393f294334ab6ed346e5dc8d8f071594","unresolved":false,"context_lines":[{"line_number":73,"context_line":"                               {\u0027vhost-server-path\u0027: vhost_server_path}))"},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"        with self.ovsdb.transaction() as txn:"},{"line_number":76,"context_line":"            txn.add(self.ovsdb.del_port(dev, bridge\u003dbridge, if_exists\u003dTrue))"},{"line_number":77,"context_line":"            txn.add(self.ovsdb.add_port(bridge, dev))"},{"line_number":78,"context_line":"            txn.add(self.ovsdb.db_set(\u0027Interface\u0027, dev, *col_values))"},{"line_number":79,"context_line":"        self.update_device_mtu(dev, mtu, interface_type\u003dinterface_type)"},{"line_number":80,"context_line":""}],"source_content_type":"text/x-python","patch_set":36,"id":"3f79a3b5_7b49be2f","line":77,"range":{"start_line":76,"start_character":0,"end_line":77,"end_character":53},"in_reply_to":"3f79a3b5_ed7842f8","updated":"2018-10-03 08:53:50.000000000","message":"Very good catch Hawkeye!\n\nLook at the implementation:\n  def add_port(self, bridge, port, may_exist\u003dTrue):\n\nBy default, may_exist is always True","commit_id":"9cffe2bdf4e88300cc45f46bb888a47775468833"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"2bc55779a63205bb5ef04c9ad0bfe734fd0ae372","unresolved":false,"context_lines":[{"line_number":77,"context_line":"            txn.add(self.ovsdb.add_port(bridge, dev))"},{"line_number":78,"context_line":"            txn.add(self.ovsdb.db_set(\u0027Interface\u0027, dev, *col_values))"},{"line_number":79,"context_line":"        self.update_device_mtu(dev, mtu, interface_type\u003dinterface_type)"},{"line_number":80,"context_line":""},{"line_number":81,"context_line":"    def ensure_ovs_bridge(self, bridge, datapath_type):"},{"line_number":82,"context_line":"        return self.ovsdb.add_br(bridge, may_exist\u003dTrue,"},{"line_number":83,"context_line":"                                 datapath_type\u003ddatapath_type).execute()"},{"line_number":84,"context_line":""},{"line_number":85,"context_line":"    def update_ovs_vif_port(self, dev, mtu\u003dNone, interface_type\u003dNone):"},{"line_number":86,"context_line":"        self.update_device_mtu(dev, mtu, interface_type\u003dinterface_type)"}],"source_content_type":"text/x-python","patch_set":36,"id":"3f79a3b5_0d8fbecd","line":83,"range":{"start_line":80,"start_character":0,"end_line":83,"end_character":71},"updated":"2018-09-26 15:11:18.000000000","message":"supernit: I\u0027d rather we grouped all the \u0027ovs_vif_port\u0027 functions together (as we did previously) to make the diff easier to grasp","commit_id":"9cffe2bdf4e88300cc45f46bb888a47775468833"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"b7a7a371393f294334ab6ed346e5dc8d8f071594","unresolved":false,"context_lines":[{"line_number":77,"context_line":"            txn.add(self.ovsdb.add_port(bridge, dev))"},{"line_number":78,"context_line":"            txn.add(self.ovsdb.db_set(\u0027Interface\u0027, dev, *col_values))"},{"line_number":79,"context_line":"        self.update_device_mtu(dev, mtu, interface_type\u003dinterface_type)"},{"line_number":80,"context_line":""},{"line_number":81,"context_line":"    def ensure_ovs_bridge(self, bridge, datapath_type):"},{"line_number":82,"context_line":"        return self.ovsdb.add_br(bridge, may_exist\u003dTrue,"},{"line_number":83,"context_line":"                                 datapath_type\u003ddatapath_type).execute()"},{"line_number":84,"context_line":""},{"line_number":85,"context_line":"    def update_ovs_vif_port(self, dev, mtu\u003dNone, interface_type\u003dNone):"},{"line_number":86,"context_line":"        self.update_device_mtu(dev, mtu, interface_type\u003dinterface_type)"}],"source_content_type":"text/x-python","patch_set":36,"id":"3f79a3b5_3b72664b","line":83,"range":{"start_line":80,"start_character":0,"end_line":83,"end_character":71},"in_reply_to":"3f79a3b5_0d8fbecd","updated":"2018-10-03 08:53:50.000000000","message":"To move this function up? Is that what you mean?","commit_id":"9cffe2bdf4e88300cc45f46bb888a47775468833"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"d698696a63efe64ed6fcf25be8ad4c39ab0b1ea0","unresolved":false,"context_lines":[{"line_number":44,"context_line":"        if interface_type not in ["},{"line_number":45,"context_line":"            constants.OVS_VHOSTUSER_INTERFACE_TYPE,"},{"line_number":46,"context_line":"            constants.OVS_VHOSTUSER_CLIENT_INTERFACE_TYPE]:"},{"line_number":47,"context_line":"            if sys.platform !\u003d constants.PLATFORM_WIN32:"},{"line_number":48,"context_line":"                # Hyper-V with OVS does not support external programming of"},{"line_number":49,"context_line":"                # virtual interface MTUs via netsh or other Windows tools."},{"line_number":50,"context_line":"                # When plugging an interface on Windows, we therefore skip"},{"line_number":51,"context_line":"                # programming the MTU and fallback to DHCP advertisement."},{"line_number":52,"context_line":"                linux_net.set_device_mtu(dev, mtu)"},{"line_number":53,"context_line":"        elif self._ovs_supports_mtu_requests():"},{"line_number":54,"context_line":"            self._set_mtu_request(dev, mtu)"}],"source_content_type":"text/x-python","patch_set":38,"id":"3f79a3b5_609f4664","line":51,"range":{"start_line":47,"start_character":0,"end_line":51,"end_character":73},"updated":"2018-10-22 12:59:27.000000000","message":"This is already taken care of in linux_net.set_device_mtu():\n\nhttps://review.openstack.org/#/c/476612/38/vif_plug_ovs/linux_net.py@55","commit_id":"7bfb01bcb151087d70df115ba01f789a8a7f161f"}]}
