)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":15554,"name":"Bence Romsics","email":"bence.romsics@gmail.com","username":"ebenrom","status":"working for Ericsson, UTC+1 (+DST)"},"change_message_id":"5b6adae4f55c623acc4941ca533aa5371a4850ee","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Balazs Gibizer \u003cbalazs.gibizer@est.tech\u003e"},{"line_number":5,"context_line":"CommitDate: 2019-06-17 17:48:47 +0200"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Insert osprofiler trace info as external_ids to the bridge table"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"The communication channel between nova and neutron for vif creation"},{"line_number":10,"context_line":"is the ovsdb. So if we want to use osprofiler to profile this"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"9fb8cfa7_5bd7d524","line":7,"range":{"start_line":7,"start_character":0,"end_line":7,"end_character":64},"updated":"2019-06-19 08:33:55.000000000","message":"These are technical details the goal is to \"Propagate osprofiler trace info through vif plug so we can trace whatver happens after vif plug\"\n\nWe may want to collect the limitations like this only works with ovs, no-hybrid-plug.","commit_id":"3ce696b0b4297ec6c1cc521a1f5c2af703d453c6"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"fe41a966fc097854b8ec81d5233d185e7460e06d","unresolved":false,"context_lines":[{"line_number":5,"context_line":"CommitDate: 2019-06-17 17:48:47 +0200"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Insert osprofiler trace info as external_ids to the bridge table"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"The communication channel between nova and neutron for vif creation"},{"line_number":10,"context_line":"is the ovsdb. So if we want to use osprofiler to profile this"},{"line_number":11,"context_line":"interaction nova has to pass the profiler info to neutorn via this"},{"line_number":12,"context_line":"channel as well. The obvious place would be the external_ids of the"},{"line_number":13,"context_line":"vif table but in some cases not nova but libvirt creates the vif"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"9fb8cfa7_fc4343ae","line":10,"range":{"start_line":8,"start_character":0,"end_line":10,"end_character":13},"updated":"2019-06-17 19:36:21.000000000","message":"this is kind of confusing. os-vif never comunicates with neuron.\n\nthe data flow is 1 directional from neutron -\u003e nova -\u003e os-vif -\u003eovs\n\nneutron later reads info form the ovs db but other then setting the neutron port uuid in the interface external-id filed in the ovs db we do not use os-vif today to comuicate any info to neutron.","commit_id":"3ce696b0b4297ec6c1cc521a1f5c2af703d453c6"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"fe41a966fc097854b8ec81d5233d185e7460e06d","unresolved":false,"context_lines":[{"line_number":7,"context_line":"Insert osprofiler trace info as external_ids to the bridge table"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"The communication channel between nova and neutron for vif creation"},{"line_number":10,"context_line":"is the ovsdb. So if we want to use osprofiler to profile this"},{"line_number":11,"context_line":"interaction nova has to pass the profiler info to neutorn via this"},{"line_number":12,"context_line":"channel as well. The obvious place would be the external_ids of the"},{"line_number":13,"context_line":"vif table but in some cases not nova but libvirt creates the vif"},{"line_number":14,"context_line":"there. So as a hack, before such vif creation insert the profiler"},{"line_number":15,"context_line":"info into the external_ids of the bridge table with a key that unique"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"9fb8cfa7_9c29e7f3","line":12,"range":{"start_line":10,"start_character":14,"end_line":12,"end_character":16},"updated":"2019-06-17 19:36:21.000000000","message":"what are you trying to profile.\n\nwe take diffenrent paths though os-vif depending on the neutron backend and config.\n\nwhen hybrid plug is false which is the case when the ip tables fire was driver is not used libvirt  currently plugs the vif not os-vif\n\nas such in the default ovs firewall driver the\nvif will not actully be pluged until teh vm is started by libvirt.\n\ni plan to change this so os-vif always handels plugging with\nhttps://review.opendev.org/#/c/602432/ to address 2 bugs.\n\nbut it would be good to understand what your are trying to do so i can review this in context.","commit_id":"3ce696b0b4297ec6c1cc521a1f5c2af703d453c6"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"fe41a966fc097854b8ec81d5233d185e7460e06d","unresolved":false,"context_lines":[{"line_number":11,"context_line":"interaction nova has to pass the profiler info to neutorn via this"},{"line_number":12,"context_line":"channel as well. The obvious place would be the external_ids of the"},{"line_number":13,"context_line":"vif table but in some cases not nova but libvirt creates the vif"},{"line_number":14,"context_line":"there. So as a hack, before such vif creation insert the profiler"},{"line_number":15,"context_line":"info into the external_ids of the bridge table with a key that unique"},{"line_number":16,"context_line":"for the vif."},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"Change-Id: Icd9e5e22b4be9921fe10270634e4c43a2da41bf7"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"9fb8cfa7_1ccad74e","line":16,"range":{"start_line":14,"start_character":7,"end_line":16,"end_character":12},"updated":"2019-06-17 19:36:21.000000000","message":"i assume you are adding this to the bridge and not the interface external id to work around the one case where libvirt plugs the vif not os-vif.\n\nthe interface would generally make much more sense.","commit_id":"3ce696b0b4297ec6c1cc521a1f5c2af703d453c6"}],"vif_plug_ovs/ovs.py":[{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"fe41a966fc097854b8ec81d5233d185e7460e06d","unresolved":false,"context_lines":[{"line_number":83,"context_line":"                    help\u003d\u0027Controls if VIF should be isolated when plugged \u0027"},{"line_number":84,"context_line":"                    \u0027to the ovs bridge. This should only be set to True \u0027"},{"line_number":85,"context_line":"                    \u0027when using the neutron ovs ml2 agent.\u0027)"},{"line_number":86,"context_line":"    )"},{"line_number":87,"context_line":""},{"line_number":88,"context_line":"    def __init__(self, config):"},{"line_number":89,"context_line":"        super(OvsPlugin, self).__init__(config)"}],"source_content_type":"text/x-python","patch_set":1,"id":"9fb8cfa7_3c847bb1","line":86,"updated":"2019-06-17 19:36:21.000000000","message":"can you add an osprofiler option here which defaults to false.","commit_id":"3ce696b0b4297ec6c1cc521a1f5c2af703d453c6"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"fe41a966fc097854b8ec81d5233d185e7460e06d","unresolved":false,"context_lines":[{"line_number":230,"context_line":"        \"\"\"Create a per-VIF OVS port.\"\"\""},{"line_number":231,"context_line":"        self.ovsdb.ensure_ovs_bridge(vif.network.bridge,"},{"line_number":232,"context_line":"                                     self._get_vif_datapath_type(vif))"},{"line_number":233,"context_line":"        from oslo_utils import importutils"},{"line_number":234,"context_line":""},{"line_number":235,"context_line":"        profiler \u003d importutils.try_import(\"osprofiler.profiler\")"},{"line_number":236,"context_line":"        prof \u003d profiler.get()"},{"line_number":237,"context_line":"        if prof:"},{"line_number":238,"context_line":"            self.ovsdb.insert_profiler_info_to_bridge_externals("}],"source_content_type":"text/x-python","patch_set":1,"id":"9fb8cfa7_7c5f5372","line":235,"range":{"start_line":233,"start_character":7,"end_line":235,"end_character":64},"updated":"2019-06-17 19:36:21.000000000","message":"we should do this a module scope not here.\nbut see below","commit_id":"3ce696b0b4297ec6c1cc521a1f5c2af703d453c6"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"fd00d5e39c66e5aa3675f87c271f8094cc5cf419","unresolved":false,"context_lines":[{"line_number":233,"context_line":"        from oslo_utils import importutils"},{"line_number":234,"context_line":""},{"line_number":235,"context_line":"        profiler \u003d importutils.try_import(\"osprofiler.profiler\")"},{"line_number":236,"context_line":"        prof \u003d profiler.get()"},{"line_number":237,"context_line":"        if prof:"},{"line_number":238,"context_line":"            self.ovsdb.insert_profiler_info_to_bridge_externals("},{"line_number":239,"context_line":"                prof, vif.network.bridge, vif.vif_name)"}],"source_content_type":"text/x-python","patch_set":1,"id":"9fb8cfa7_7f774a0a","line":236,"updated":"2019-06-17 15:52:29.000000000","message":"Need to check if profiler was imported successfully (not None)","commit_id":"3ce696b0b4297ec6c1cc521a1f5c2af703d453c6"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"fe41a966fc097854b8ec81d5233d185e7460e06d","unresolved":false,"context_lines":[{"line_number":235,"context_line":"        profiler \u003d importutils.try_import(\"osprofiler.profiler\")"},{"line_number":236,"context_line":"        prof \u003d profiler.get()"},{"line_number":237,"context_line":"        if prof:"},{"line_number":238,"context_line":"            self.ovsdb.insert_profiler_info_to_bridge_externals("},{"line_number":239,"context_line":"                prof, vif.network.bridge, vif.vif_name)"},{"line_number":240,"context_line":""},{"line_number":241,"context_line":"        # NOTE(sean-k-mooney): as part of a partial revert of"},{"line_number":242,"context_line":"        # change Iaf15fa7a678ec2624f7c12f634269c465fbad930"}],"source_content_type":"text/x-python","patch_set":1,"id":"9fb8cfa7_fc4a63aa","line":239,"range":{"start_line":238,"start_character":10,"end_line":239,"end_character":55},"updated":"2019-06-17 19:36:21.000000000","message":"if we were going to add this as a feature we either need to add it to all code paths or you could add it to\nensure_ovs_bridge","commit_id":"3ce696b0b4297ec6c1cc521a1f5c2af703d453c6"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"8ba949be1e09f5f658326a18bbc0c31033d32b6f","unresolved":false,"context_lines":[{"line_number":230,"context_line":"        \"\"\"Create a per-VIF OVS port.\"\"\""},{"line_number":231,"context_line":"        self.ovsdb.ensure_ovs_bridge(vif.network.bridge,"},{"line_number":232,"context_line":"                                     self._get_vif_datapath_type(vif))"},{"line_number":233,"context_line":"        from oslo_utils import importutils"},{"line_number":234,"context_line":""},{"line_number":235,"context_line":"        profiler \u003d importutils.try_import(\"osprofiler.profiler\")"},{"line_number":236,"context_line":"        prof \u003d profiler.get()"},{"line_number":237,"context_line":"        if prof:"},{"line_number":238,"context_line":"            self.ovsdb.insert_profiler_info_to_bridge_externals("}],"source_content_type":"text/x-python","patch_set":2,"id":"7faddb67_b294ee45","line":235,"range":{"start_line":233,"start_character":8,"end_line":235,"end_character":64},"updated":"2019-07-08 12:37:59.000000000","message":"i would prefer if we did this at the top of the file.\n\ni get the motivation for scoping it to where its needed but\nim not a fan of burying  conditional imports in function calls\n\nif we are going to add this i would prefer if we added it for all plug types ...","commit_id":"74e062ecb623a0608740c3ee737c5c4cab817c15"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"8ba949be1e09f5f658326a18bbc0c31033d32b6f","unresolved":false,"context_lines":[{"line_number":305,"context_line":"            self._plug_vhostuser(vif, instance_info)"},{"line_number":306,"context_line":"        elif isinstance(vif, objects.vif.VIFHostDevice):"},{"line_number":307,"context_line":"            self._plug_vf(vif, instance_info)"},{"line_number":308,"context_line":""},{"line_number":309,"context_line":"    def _unplug_vhostuser(self, vif, instance_info):"},{"line_number":310,"context_line":"        self.ovsdb.delete_ovs_vif_port(vif.network.bridge,"},{"line_number":311,"context_line":"            OvsPlugin.gen_port_name("}],"source_content_type":"text/x-python","patch_set":2,"id":"7faddb67_328f9e24","line":308,"updated":"2019-07-08 12:37:59.000000000","message":"... as such it would be better to add it here","commit_id":"74e062ecb623a0608740c3ee737c5c4cab817c15"}],"vif_plug_ovs/ovsdb/ovsdb_lib.py":[{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"fe41a966fc097854b8ec81d5233d185e7460e06d","unresolved":false,"context_lines":[{"line_number":114,"context_line":"        if delete_netdev:"},{"line_number":115,"context_line":"            linux_net.delete_net_dev(dev)"},{"line_number":116,"context_line":""},{"line_number":117,"context_line":"    def insert_profiler_info_to_bridge_externals(self, profiler, bridge, dev):"},{"line_number":118,"context_line":"        \"\"\"Insert osprofiler trace info as external_ids to the bridge table"},{"line_number":119,"context_line":""},{"line_number":120,"context_line":"        The communication channel between nova and neutron for vif creation"}],"source_content_type":"text/x-python","patch_set":1,"id":"9fb8cfa7_dcfbdf44","line":117,"range":{"start_line":117,"start_character":8,"end_line":117,"end_character":48},"updated":"2019-06-17 19:36:21.000000000","message":"this should be controlled by a config option","commit_id":"3ce696b0b4297ec6c1cc521a1f5c2af703d453c6"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"fe41a966fc097854b8ec81d5233d185e7460e06d","unresolved":false,"context_lines":[{"line_number":120,"context_line":"        The communication channel between nova and neutron for vif creation"},{"line_number":121,"context_line":"        is the ovsdb. So if we want to use osprofiler to profile this"},{"line_number":122,"context_line":"        interaction nova has to pass the profiler info to neutorn via this"},{"line_number":123,"context_line":"        channel as well. The obvious place would be the external_ids of the"},{"line_number":124,"context_line":"        vif table but in some cases not nova but libvirt creates the vif"},{"line_number":125,"context_line":"        there. So as a hack, before such vif creation insert the profiler"},{"line_number":126,"context_line":"        info into the external_ids of the bridge table with a key that unique"},{"line_number":127,"context_line":"        for the vif."},{"line_number":128,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":1,"id":"9fb8cfa7_1c02d73f","line":125,"range":{"start_line":123,"start_character":25,"end_line":125,"end_character":14},"updated":"2019-06-17 19:36:21.000000000","message":"right well i want to remove the final case were libvirt does this in train \nhttps://review.opendev.org/#/c/602432/","commit_id":"3ce696b0b4297ec6c1cc521a1f5c2af703d453c6"},{"author":{"_account_id":15554,"name":"Bence Romsics","email":"bence.romsics@gmail.com","username":"ebenrom","status":"working for Ericsson, UTC+1 (+DST)"},"change_message_id":"5b6adae4f55c623acc4941ca533aa5371a4850ee","unresolved":false,"context_lines":[{"line_number":128,"context_line":"        \"\"\""},{"line_number":129,"context_line":""},{"line_number":130,"context_line":"        key \u003d \u0027osprofiler_\u0027 + dev"},{"line_number":131,"context_line":"        value \u003d (\u0027{\"hmac_key\": \"%s\", \"base_id\": \"%s\", \"parent_id\": \"%s\"}\u0027 %"},{"line_number":132,"context_line":"                 (profiler.hmac_key, profiler.get_base_id(),"},{"line_number":133,"context_line":"                  profiler.get_id()))"},{"line_number":134,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"9fb8cfa7_3b89c125","line":131,"range":{"start_line":131,"start_character":17,"end_line":131,"end_character":73},"updated":"2019-06-19 08:33:55.000000000","message":"IIRC ovsdb is supposed to be a native JSON DB. Have you tried passing the data structure to ovsdb, leaving the serialization to it? Maybe it can do actually do that for us.","commit_id":"3ce696b0b4297ec6c1cc521a1f5c2af703d453c6"},{"author":{"_account_id":15554,"name":"Bence Romsics","email":"bence.romsics@gmail.com","username":"ebenrom","status":"working for Ericsson, UTC+1 (+DST)"},"change_message_id":"34a308f98fbc5b0f877485c17848b51f5d209ccf","unresolved":false,"context_lines":[{"line_number":128,"context_line":"        \"\"\""},{"line_number":129,"context_line":""},{"line_number":130,"context_line":"        key \u003d \u0027osprofiler_\u0027 + dev"},{"line_number":131,"context_line":"        value \u003d (\u0027{\"hmac_key\": \"%s\", \"base_id\": \"%s\", \"parent_id\": \"%s\"}\u0027 %"},{"line_number":132,"context_line":"                 (profiler.hmac_key, profiler.get_base_id(),"},{"line_number":133,"context_line":"                  profiler.get_id()))"},{"line_number":134,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"9fb8cfa7_6113f0b9","line":131,"range":{"start_line":131,"start_character":17,"end_line":131,"end_character":73},"in_reply_to":"9fb8cfa7_3b89c125","updated":"2019-06-20 15:03:21.000000000","message":"While writing the ovs-agent side of this I played around with ovsdbapp and I found that we probably cannot pass the data structure itself. We have to serialize it here.","commit_id":"3ce696b0b4297ec6c1cc521a1f5c2af703d453c6"},{"author":{"_account_id":15554,"name":"Bence Romsics","email":"bence.romsics@gmail.com","username":"ebenrom","status":"working for Ericsson, UTC+1 (+DST)"},"change_message_id":"5b6adae4f55c623acc4941ca533aa5371a4850ee","unresolved":false,"context_lines":[{"line_number":132,"context_line":"                 (profiler.hmac_key, profiler.get_base_id(),"},{"line_number":133,"context_line":"                  profiler.get_id()))"},{"line_number":134,"context_line":""},{"line_number":135,"context_line":"        # TODO(gibi): should we do get-set in a single transaction?"},{"line_number":136,"context_line":"        external_ids \u003d self.ovsdb.db_get("},{"line_number":137,"context_line":"            \u0027Bridge\u0027, bridge, \u0027external_ids\u0027).execute()"},{"line_number":138,"context_line":"        external_ids[key] \u003d value"}],"source_content_type":"text/x-python","patch_set":1,"id":"9fb8cfa7_9ba8ed77","line":135,"range":{"start_line":135,"start_character":8,"end_line":135,"end_character":67},"updated":"2019-06-19 08:33:55.000000000","message":"Transactionality is hard in ovsdb. You don\u0027t have BEGIN-COMMIT type transactions, but pre-defined command-chain type transactions. With that you can do compare-and-swap I think, but I\u0027m not sure if it\u0027s worth it.","commit_id":"3ce696b0b4297ec6c1cc521a1f5c2af703d453c6"},{"author":{"_account_id":15554,"name":"Bence Romsics","email":"bence.romsics@gmail.com","username":"ebenrom","status":"working for Ericsson, UTC+1 (+DST)"},"change_message_id":"34a308f98fbc5b0f877485c17848b51f5d209ccf","unresolved":false,"context_lines":[{"line_number":136,"context_line":"        external_ids \u003d self.ovsdb.db_get("},{"line_number":137,"context_line":"            \u0027Bridge\u0027, bridge, \u0027external_ids\u0027).execute()"},{"line_number":138,"context_line":"        external_ids[key] \u003d value"},{"line_number":139,"context_line":"        self.ovsdb.db_set("},{"line_number":140,"context_line":"            \u0027Bridge\u0027, bridge, (\u0027external_ids\u0027, external_ids)).execute()"}],"source_content_type":"text/x-python","patch_set":1,"id":"9fb8cfa7_6178d0f7","line":139,"range":{"start_line":139,"start_character":13,"end_line":139,"end_character":25},"updated":"2019-06-20 15:03:21.000000000","message":"I also realized that db_set() has different semantics than I (and likely you too) expected. When you set map values it merges the map passed with the pre-existing map. Therefore you have atomic update in a single db_set().\n\nSo instead of get(), add(k, v), set() we can just call set(k, v).","commit_id":"3ce696b0b4297ec6c1cc521a1f5c2af703d453c6"},{"author":{"_account_id":5950,"name":"Ilya Shakhat","email":"shakhat@gmail.com","username":"shakhat"},"change_message_id":"d4ee8d32f013d033024fef4a5e649c7626375233","unresolved":false,"context_lines":[{"line_number":128,"context_line":"        \"\"\""},{"line_number":129,"context_line":""},{"line_number":130,"context_line":"        key \u003d \u0027osprofiler_\u0027 + dev"},{"line_number":131,"context_line":"        value \u003d (\u0027{\"hmac_key\": \"%s\", \"base_id\": \"%s\", \"parent_id\": \"%s\"}\u0027 %"},{"line_number":132,"context_line":"                 (profiler.hmac_key, profiler.get_base_id(),"},{"line_number":133,"context_line":"                  profiler.get_id()))"},{"line_number":134,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"9fb8cfa7_7212b85a","line":131,"updated":"2019-06-24 07:50:43.000000000","message":"it\u0027s better to have a function in osprofiler to store a context into dict (so avoid knowing details here); the similar to serialization into HTTP headers https://opendev.org/openstack/osprofiler/src/branch/master/osprofiler/web.py#L35","commit_id":"74e062ecb623a0608740c3ee737c5c4cab817c15"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"8ba949be1e09f5f658326a18bbc0c31033d32b6f","unresolved":false,"context_lines":[{"line_number":128,"context_line":"        \"\"\""},{"line_number":129,"context_line":""},{"line_number":130,"context_line":"        key \u003d \u0027osprofiler_\u0027 + dev"},{"line_number":131,"context_line":"        value \u003d (\u0027{\"hmac_key\": \"%s\", \"base_id\": \"%s\", \"parent_id\": \"%s\"}\u0027 %"},{"line_number":132,"context_line":"                 (profiler.hmac_key, profiler.get_base_id(),"},{"line_number":133,"context_line":"                  profiler.get_id()))"},{"line_number":134,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"7faddb67_d2f64a90","line":131,"in_reply_to":"9fb8cfa7_7212b85a","updated":"2019-07-08 12:37:59.000000000","message":"if we do that we need to at least add osprofiler to the test requirements. we technically should do that in in anway case. ideally we would add a functional test to validate that this is infact added to ovs in addtion to a basic unit test to assert that db_get/db_set were called","commit_id":"74e062ecb623a0608740c3ee737c5c4cab817c15"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"09c67f89d9805d373a8eb2d425fd637a1bea3ff4","unresolved":false,"context_lines":[{"line_number":121,"context_line":"        is the ovsdb. So if we want to use osprofiler to profile this"},{"line_number":122,"context_line":"        interaction nova has to pass the profiler info to neutorn via this"},{"line_number":123,"context_line":"        channel as well. The obvious place would be the external_ids of the"},{"line_number":124,"context_line":"        vif table but in some cases not nova but libvirt creates the vif"},{"line_number":125,"context_line":"        there. So as a hack, before such vif creation insert the profiler"},{"line_number":126,"context_line":"        info into the external_ids of the bridge table with a key that unique"},{"line_number":127,"context_line":"        for the vif."}],"source_content_type":"text/x-python","patch_set":3,"id":"7faddb67_b76ba783","line":124,"range":{"start_line":124,"start_character":40,"end_line":124,"end_character":64},"updated":"2019-07-22 16:40:25.000000000","message":"When this is happening?\n\nAll OVS vif plug operations (generic, windows, vhost, vf) create a VIF port in the OVS DB. IMO, this should be the place to store this osprofiler information. The OVS agent can retrieve (and delete) this information.\n\nIMO, this should be in external_ids of port Interface [1]\n\nAm I missing something here?\n\n[1] https://github.com/openstack/os-vif/blob/master/vif_plug_ovs/ovsdb/ovsdb_lib.py#L86-L90","commit_id":"da86312d4150c2caaf5ec7e168efbf2177fc77d8"},{"author":{"_account_id":15554,"name":"Bence Romsics","email":"bence.romsics@gmail.com","username":"ebenrom","status":"working for Ericsson, UTC+1 (+DST)"},"change_message_id":"ad77c5f53a5281114ca9a6a5b0959b0161ca93f1","unresolved":false,"context_lines":[{"line_number":121,"context_line":"        is the ovsdb. So if we want to use osprofiler to profile this"},{"line_number":122,"context_line":"        interaction nova has to pass the profiler info to neutorn via this"},{"line_number":123,"context_line":"        channel as well. The obvious place would be the external_ids of the"},{"line_number":124,"context_line":"        vif table but in some cases not nova but libvirt creates the vif"},{"line_number":125,"context_line":"        there. So as a hack, before such vif creation insert the profiler"},{"line_number":126,"context_line":"        info into the external_ids of the bridge table with a key that unique"},{"line_number":127,"context_line":"        for the vif."}],"source_content_type":"text/x-python","patch_set":3,"id":"7faddb67_5b2056b1","line":124,"range":{"start_line":124,"start_character":40,"end_line":124,"end_character":64},"in_reply_to":"7faddb67_171ddb0e","updated":"2019-07-23 08:20:55.000000000","message":"Gibi is on vacation till early August, but we are working on this together so let me answer.\n\nI think we fully agree it would be better to store the trace info as an external_id of the port, not the bridge. However the way we currently use libvirt (i.e. when the interface_type is bridge in the libvirt domain definition) it always deletes and re-creates the ovs port. IIRC this is the relevant piece of code:\n\nhttps://github.com/libvirt/libvirt/blob/3f7cba3f5ea1731b9028b89b671cbd7e7d5e0421/src/util/virnetdevopenvswitch.c#L170\n\nSo no matter what external-id we add from os-vif, it is going to be lost when libvirt deletes the ovs port. Only those external-ids will survive that libvirt re-adds.\n\nI see two possible ways:\n\n1) Make this patch depend on Sean\u0027s https://review.opendev.org/602432. Because when the interface_type is ethernet, libvirt no longer deletes/re-adds the ovs port.\n\n2) Or what this patch does: do not depend on Sean\u0027s patch, but add the trace info to some other place in ovsdb. Then of course when Sean\u0027s patch merges adapt and move the external-id to the port.\n\nPlease also have a look at the ovs-agent side: https://review.opendev.org/666610. Maybe some of the description there would be better placed here.","commit_id":"da86312d4150c2caaf5ec7e168efbf2177fc77d8"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"e80d2e69098b1caf27f201d72e2c2fe962744631","unresolved":false,"context_lines":[{"line_number":121,"context_line":"        is the ovsdb. So if we want to use osprofiler to profile this"},{"line_number":122,"context_line":"        interaction nova has to pass the profiler info to neutorn via this"},{"line_number":123,"context_line":"        channel as well. The obvious place would be the external_ids of the"},{"line_number":124,"context_line":"        vif table but in some cases not nova but libvirt creates the vif"},{"line_number":125,"context_line":"        there. So as a hack, before such vif creation insert the profiler"},{"line_number":126,"context_line":"        info into the external_ids of the bridge table with a key that unique"},{"line_number":127,"context_line":"        for the vif."}],"source_content_type":"text/x-python","patch_set":3,"id":"7faddb67_aa932e00","line":124,"range":{"start_line":124,"start_character":40,"end_line":124,"end_character":64},"in_reply_to":"7faddb67_5b2056b1","updated":"2019-07-23 13:13:15.000000000","message":"I\u0027ll comment on 666610","commit_id":"da86312d4150c2caaf5ec7e168efbf2177fc77d8"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"d59f415c6069467c884c3bdf83e5a7f98aecbbda","unresolved":false,"context_lines":[{"line_number":121,"context_line":"        is the ovsdb. So if we want to use osprofiler to profile this"},{"line_number":122,"context_line":"        interaction nova has to pass the profiler info to neutorn via this"},{"line_number":123,"context_line":"        channel as well. The obvious place would be the external_ids of the"},{"line_number":124,"context_line":"        vif table but in some cases not nova but libvirt creates the vif"},{"line_number":125,"context_line":"        there. So as a hack, before such vif creation insert the profiler"},{"line_number":126,"context_line":"        info into the external_ids of the bridge table with a key that unique"},{"line_number":127,"context_line":"        for the vif."}],"source_content_type":"text/x-python","patch_set":3,"id":"7faddb67_171ddb0e","line":124,"range":{"start_line":124,"start_character":40,"end_line":124,"end_character":64},"in_reply_to":"7faddb67_b76ba783","updated":"2019-07-22 16:42:51.000000000","message":"ok, it\u0027s (was) happening here: https://review.opendev.org/#/c/602432/\n\nBut apart from this case, I keep my idea of storing this info in the interface.","commit_id":"da86312d4150c2caaf5ec7e168efbf2177fc77d8"}]}
