)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"d328155fd1e9c252956d023c1d829f9ea0885fbb","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":11,"id":"c23ad9ea_cc8c1bf5","updated":"2021-10-14 09:02:35.000000000","message":"Hi folks, can you review the patch? Thanks in advance.","commit_id":"2feb54f7baebf3cc4248c1b1b255ef7cfa5eaf89"},{"author":{"_account_id":32586,"name":"Elvira García Ruiz","display_name":"Elvira","email":"egarciar@redhat.com","username":"elvira"},"change_message_id":"f274b5c731877880a6d08025412e202b5b88dd0f","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":13,"id":"42576315_980d9856","updated":"2021-10-27 10:17:30.000000000","message":"Thanks Rodolfo. I went through the code and did not spot anything that needs to be changed, LGTM!","commit_id":"e274240ef754ef84179f92359d7cac137a9fa88f"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"62e9a85c986d6844d44fb15074584cb05a9c5888","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":13,"id":"3fbeee1b_2109da59","updated":"2021-10-27 14:46:08.000000000","message":"This must ","commit_id":"e274240ef754ef84179f92359d7cac137a9fa88f"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"56d1031b47388fb1e9810a971ece116e192f0224","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":14,"id":"68f39141_c6deca5e","updated":"2021-10-27 16:14:34.000000000","message":"Thanks Rodolfo!","commit_id":"a6f975ac035ca7c67d0d126b76eb280e1b9d1829"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"a00596d7366faeed53ca53d3659e81599832998c","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":14,"id":"83d8d1d6_9fc4d544","updated":"2021-11-08 08:55:10.000000000","message":"recheck","commit_id":"a6f975ac035ca7c67d0d126b76eb280e1b9d1829"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"12a76e97e6e2dc67abd17995d39595ceff569d0f","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":14,"id":"5390a03a_e0d2da35","updated":"2021-11-03 14:17:18.000000000","message":"recheck\n","commit_id":"a6f975ac035ca7c67d0d126b76eb280e1b9d1829"}],"neutron/common/ovn/constants.py":[{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"12cedd8c521d5b1be67cee0fc327c1e533124996","unresolved":true,"context_lines":[{"line_number":302,"context_line":""},{"line_number":303,"context_line":"# OVN Placement API; used for minimum bandwidth scheduling allocation."},{"line_number":304,"context_line":"RP_BANDWIDTHS \u003d \u0027resource_provider_bandwidths\u0027"},{"line_number":305,"context_line":"RP_INVENTORY_DEFAULTS \u003d \u0027resource_provider_inventory_defaults\u0027"},{"line_number":306,"context_line":"RP_HYPERVISORS \u003d \u0027resource_provider_hypervisors\u0027"},{"line_number":307,"context_line":""},{"line_number":308,"context_line":"# OVN mechanism driver constants."}],"source_content_type":"text/x-python","patch_set":8,"id":"b4bf1302_65cbfeb6","line":305,"updated":"2021-09-24 12:51:00.000000000","message":"those constants are defined in https://opendev.org/openstack/neutron-lib/src/branch/master/neutron_lib/constants.py#L666 - can\u0027t You reuse them?","commit_id":"e0e494482c7b64aef4221af4bb7c9a3cc9e647b5"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"14a9f64e57fbe3c1ddfa7bef189f9f882126a32e","unresolved":false,"context_lines":[{"line_number":302,"context_line":""},{"line_number":303,"context_line":"# OVN Placement API; used for minimum bandwidth scheduling allocation."},{"line_number":304,"context_line":"RP_BANDWIDTHS \u003d \u0027resource_provider_bandwidths\u0027"},{"line_number":305,"context_line":"RP_INVENTORY_DEFAULTS \u003d \u0027resource_provider_inventory_defaults\u0027"},{"line_number":306,"context_line":"RP_HYPERVISORS \u003d \u0027resource_provider_hypervisors\u0027"},{"line_number":307,"context_line":""},{"line_number":308,"context_line":"# OVN mechanism driver constants."}],"source_content_type":"text/x-python","patch_set":8,"id":"310efcf8_0e6059cf","line":305,"in_reply_to":"254d3135_da837df8","updated":"2021-10-20 14:17:45.000000000","message":"Done","commit_id":"e0e494482c7b64aef4221af4bb7c9a3cc9e647b5"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"433263360eea43f46a5993756cc82cafc72212b0","unresolved":true,"context_lines":[{"line_number":302,"context_line":""},{"line_number":303,"context_line":"# OVN Placement API; used for minimum bandwidth scheduling allocation."},{"line_number":304,"context_line":"RP_BANDWIDTHS \u003d \u0027resource_provider_bandwidths\u0027"},{"line_number":305,"context_line":"RP_INVENTORY_DEFAULTS \u003d \u0027resource_provider_inventory_defaults\u0027"},{"line_number":306,"context_line":"RP_HYPERVISORS \u003d \u0027resource_provider_hypervisors\u0027"},{"line_number":307,"context_line":""},{"line_number":308,"context_line":"# OVN mechanism driver constants."}],"source_content_type":"text/x-python","patch_set":8,"id":"254d3135_da837df8","line":305,"in_reply_to":"b4bf1302_65cbfeb6","updated":"2021-09-24 17:05:19.000000000","message":"Of course, I didn\u0027t realize that.","commit_id":"e0e494482c7b64aef4221af4bb7c9a3cc9e647b5"}],"neutron/plugins/ml2/drivers/ovn/mech_driver/ovsdb/extensions/placement.py":[{"author":{"_account_id":5756,"name":"Terry Wilson","email":"twilson@redhat.com","username":"otherwiseguy"},"change_message_id":"15c660194f1c6df1369f4ede1b0e2cdccdaf9d75","unresolved":true,"context_lines":[{"line_number":154,"context_line":"        self._chassis \u003d {}  # Initial config read could take some time."},{"line_number":155,"context_line":"        if not self._enabled:"},{"line_number":156,"context_line":"            return"},{"line_number":157,"context_line":"        try:"},{"line_number":158,"context_line":"            # NOTE(ralonsoh): ``RowEventHandler`` should expose a method to"},{"line_number":159,"context_line":"            # list the current watched events."},{"line_number":160,"context_line":"            _idl \u003d self._driver._sb_idl.idl"},{"line_number":161,"context_line":"            for watched_event in _idl.notify_handler._watched_events:"},{"line_number":162,"context_line":"                if isinstance(watched_event, ChassisBandwidthConfigEvent):"},{"line_number":163,"context_line":"                    break"},{"line_number":164,"context_line":"            else:"},{"line_number":165,"context_line":"                _idl.notify_handler.watch_events("},{"line_number":166,"context_line":"                    [ChassisBandwidthConfigEvent(self)])"},{"line_number":167,"context_line":"        except AttributeError:"},{"line_number":168,"context_line":"            self._enabled \u003d False"},{"line_number":169,"context_line":"        if not self._enabled:"},{"line_number":170,"context_line":"            return"},{"line_number":171,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"1b781eef_09b67d7f","line":168,"range":{"start_line":157,"start_character":0,"end_line":168,"end_character":33},"updated":"2021-09-23 21:37:00.000000000","message":"I don\u0027t think code should be accessing _watched_events, it\u0027s private. If you want to watch/unwatch an event, you store the event you create and use the public methods. It seems like you could just do:\n\n def __init__(self, driver):\n     self.config_event \u003d None\n\n def _reset(self, driver):\n     ...\n     if self.config_event is None:\n         self.config_event \u003d ChassisBandwidthConfigEvent(self)\n         _idl.notify_handler.watch_event(self.config_event)\n\nand accomplish the same thing (if I\u0027m reading things correctly and this is the only place adding this event).","commit_id":"e0e494482c7b64aef4221af4bb7c9a3cc9e647b5"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"433263360eea43f46a5993756cc82cafc72212b0","unresolved":true,"context_lines":[{"line_number":154,"context_line":"        self._chassis \u003d {}  # Initial config read could take some time."},{"line_number":155,"context_line":"        if not self._enabled:"},{"line_number":156,"context_line":"            return"},{"line_number":157,"context_line":"        try:"},{"line_number":158,"context_line":"            # NOTE(ralonsoh): ``RowEventHandler`` should expose a method to"},{"line_number":159,"context_line":"            # list the current watched events."},{"line_number":160,"context_line":"            _idl \u003d self._driver._sb_idl.idl"},{"line_number":161,"context_line":"            for watched_event in _idl.notify_handler._watched_events:"},{"line_number":162,"context_line":"                if isinstance(watched_event, ChassisBandwidthConfigEvent):"},{"line_number":163,"context_line":"                    break"},{"line_number":164,"context_line":"            else:"},{"line_number":165,"context_line":"                _idl.notify_handler.watch_events("},{"line_number":166,"context_line":"                    [ChassisBandwidthConfigEvent(self)])"},{"line_number":167,"context_line":"        except AttributeError:"},{"line_number":168,"context_line":"            self._enabled \u003d False"},{"line_number":169,"context_line":"        if not self._enabled:"},{"line_number":170,"context_line":"            return"},{"line_number":171,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"ffa3fd24_918d93c5","line":168,"range":{"start_line":157,"start_character":0,"end_line":168,"end_character":33},"in_reply_to":"1b781eef_09b67d7f","updated":"2021-09-24 17:05:19.000000000","message":"Every time I access to a private method, I remember Monty Pyhton\u0027s quote \"he\u0027s a very naughty boy\".\n\nYou are right, I\u0027ll use a class variable for this.","commit_id":"e0e494482c7b64aef4221af4bb7c9a3cc9e647b5"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"14a9f64e57fbe3c1ddfa7bef189f9f882126a32e","unresolved":false,"context_lines":[{"line_number":154,"context_line":"        self._chassis \u003d {}  # Initial config read could take some time."},{"line_number":155,"context_line":"        if not self._enabled:"},{"line_number":156,"context_line":"            return"},{"line_number":157,"context_line":"        try:"},{"line_number":158,"context_line":"            # NOTE(ralonsoh): ``RowEventHandler`` should expose a method to"},{"line_number":159,"context_line":"            # list the current watched events."},{"line_number":160,"context_line":"            _idl \u003d self._driver._sb_idl.idl"},{"line_number":161,"context_line":"            for watched_event in _idl.notify_handler._watched_events:"},{"line_number":162,"context_line":"                if isinstance(watched_event, ChassisBandwidthConfigEvent):"},{"line_number":163,"context_line":"                    break"},{"line_number":164,"context_line":"            else:"},{"line_number":165,"context_line":"                _idl.notify_handler.watch_events("},{"line_number":166,"context_line":"                    [ChassisBandwidthConfigEvent(self)])"},{"line_number":167,"context_line":"        except AttributeError:"},{"line_number":168,"context_line":"            self._enabled \u003d False"},{"line_number":169,"context_line":"        if not self._enabled:"},{"line_number":170,"context_line":"            return"},{"line_number":171,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"d2799c32_d050a54f","line":168,"range":{"start_line":157,"start_character":0,"end_line":168,"end_character":33},"in_reply_to":"ffa3fd24_918d93c5","updated":"2021-10-20 14:17:45.000000000","message":"Done","commit_id":"e0e494482c7b64aef4221af4bb7c9a3cc9e647b5"},{"author":{"_account_id":5756,"name":"Terry Wilson","email":"twilson@redhat.com","username":"otherwiseguy"},"change_message_id":"15c660194f1c6df1369f4ede1b0e2cdccdaf9d75","unresolved":true,"context_lines":[{"line_number":260,"context_line":"            client\u003dself.placement_plugin._placement_client)"},{"line_number":261,"context_line":""},{"line_number":262,"context_line":"    def get_chassis_config(self, chassis_name):"},{"line_number":263,"context_line":"        try:"},{"line_number":264,"context_line":"            return self._chassis[chassis_name]"},{"line_number":265,"context_line":"        except KeyError:"},{"line_number":266,"context_line":"            return"}],"source_content_type":"text/x-python","patch_set":8,"id":"cb3246b7_742a1c17","line":263,"updated":"2021-09-23 21:37:00.000000000","message":"nit: can just be:\n\n return self._chassis.get(chassis_name)","commit_id":"e0e494482c7b64aef4221af4bb7c9a3cc9e647b5"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"14a9f64e57fbe3c1ddfa7bef189f9f882126a32e","unresolved":false,"context_lines":[{"line_number":260,"context_line":"            client\u003dself.placement_plugin._placement_client)"},{"line_number":261,"context_line":""},{"line_number":262,"context_line":"    def get_chassis_config(self, chassis_name):"},{"line_number":263,"context_line":"        try:"},{"line_number":264,"context_line":"            return self._chassis[chassis_name]"},{"line_number":265,"context_line":"        except KeyError:"},{"line_number":266,"context_line":"            return"}],"source_content_type":"text/x-python","patch_set":8,"id":"97f658d0_856157c5","line":263,"in_reply_to":"6339afed_09d7ca73","updated":"2021-10-20 14:17:45.000000000","message":"Done","commit_id":"e0e494482c7b64aef4221af4bb7c9a3cc9e647b5"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"433263360eea43f46a5993756cc82cafc72212b0","unresolved":true,"context_lines":[{"line_number":260,"context_line":"            client\u003dself.placement_plugin._placement_client)"},{"line_number":261,"context_line":""},{"line_number":262,"context_line":"    def get_chassis_config(self, chassis_name):"},{"line_number":263,"context_line":"        try:"},{"line_number":264,"context_line":"            return self._chassis[chassis_name]"},{"line_number":265,"context_line":"        except KeyError:"},{"line_number":266,"context_line":"            return"}],"source_content_type":"text/x-python","patch_set":8,"id":"6339afed_09d7ca73","line":263,"in_reply_to":"cb3246b7_742a1c17","updated":"2021-09-24 17:05:19.000000000","message":"ufff this is a childish error","commit_id":"e0e494482c7b64aef4221af4bb7c9a3cc9e647b5"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"45186d6786e9c17264775170987661d7d3fece7e","unresolved":true,"context_lines":[{"line_number":220,"context_line":""},{"line_number":221,"context_line":"        _name2uuid \u003d {rp[\u0027name\u0027]: rp[\u0027uuid\u0027] for rp in rps}"},{"line_number":222,"context_line":"        LOG.info(\u0027Placement information about resource providers \u0027"},{"line_number":223,"context_line":"                 \u0027(name:uuid): \u0027, _name2uuid)"},{"line_number":224,"context_line":"        return _name2uuid"},{"line_number":225,"context_line":""},{"line_number":226,"context_line":"    def build_placement_state(self, chassis, name2uuid):"}],"source_content_type":"text/x-python","patch_set":12,"id":"621529f5_aa1e4ec8","line":223,"range":{"start_line":223,"start_character":18,"end_line":223,"end_character":29},"updated":"2021-10-27 09:03:04.000000000","message":"qq: Don\u0027t this need to be %(name)s:%(uuid)s ?\n\nOr maybe it\u0027s missing the mask \"%s\" after the \":\"\n\nNot super familiar with this syntax here","commit_id":"7ad132e9c33f053fbf6f2ec89b345d494b3abd78"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"478c7ec45b7460aa85a40b23b6840cb5b55b4c13","unresolved":true,"context_lines":[{"line_number":220,"context_line":""},{"line_number":221,"context_line":"        _name2uuid \u003d {rp[\u0027name\u0027]: rp[\u0027uuid\u0027] for rp in rps}"},{"line_number":222,"context_line":"        LOG.info(\u0027Placement information about resource providers \u0027"},{"line_number":223,"context_line":"                 \u0027(name:uuid): \u0027, _name2uuid)"},{"line_number":224,"context_line":"        return _name2uuid"},{"line_number":225,"context_line":""},{"line_number":226,"context_line":"    def build_placement_state(self, chassis, name2uuid):"}],"source_content_type":"text/x-python","patch_set":12,"id":"b32c15d0_fe632c7e","line":223,"range":{"start_line":223,"start_character":18,"end_line":223,"end_character":29},"in_reply_to":"621529f5_aa1e4ec8","updated":"2021-10-27 09:36:03.000000000","message":"Right, I missed the %s","commit_id":"7ad132e9c33f053fbf6f2ec89b345d494b3abd78"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"62e9a85c986d6844d44fb15074584cb05a9c5888","unresolved":true,"context_lines":[{"line_number":247,"context_line":"                device: bw for device, bw in rp_bw.items() if"},{"line_number":248,"context_line":"                device in hypervisor_rps and device in bridges}"},{"line_number":249,"context_line":""},{"line_number":250,"context_line":"        return placement_report.PlacementState("},{"line_number":251,"context_line":"            rp_bandwidths\u003dcms_options[n_const.RP_BANDWIDTHS],"},{"line_number":252,"context_line":"            rp_inventory_defaults\u003dcms_options[n_const.RP_INVENTORY_DEFAULTS],"},{"line_number":253,"context_line":"            driver_uuid_namespace\u003dself.uuid_ns,"}],"source_content_type":"text/x-python","patch_set":13,"id":"0c5fd4a3_bcddb12f","line":250,"in_reply_to":"2a69a902_00a07e5c","updated":"2021-10-27 14:46:08.000000000","message":"\u003e pep8: E1120: No value for argument \u0027rp_pkt_processing_inventory_defaults\u0027 in constructor call (no-value-for-parameter)\n\nThis must be a joke...","commit_id":"e274240ef754ef84179f92359d7cac137a9fa88f"}],"neutron/plugins/ml2/drivers/ovn/mech_driver/ovsdb/ovsdb_monitor.py":[{"author":{"_account_id":5756,"name":"Terry Wilson","email":"twilson@redhat.com","username":"otherwiseguy"},"change_message_id":"15c660194f1c6df1369f4ede1b0e2cdccdaf9d75","unresolved":true,"context_lines":[{"line_number":558,"context_line":""},{"line_number":559,"context_line":"class BaseOvnSbIdl(Ml2OvnIdlBase):"},{"line_number":560,"context_line":""},{"line_number":561,"context_line":"    def __init__(self, remote, schema):"},{"line_number":562,"context_line":"        self.notify_handler \u003d row_event.RowEventHandler()"},{"line_number":563,"context_line":"        super().__init__(remote, schema)"},{"line_number":564,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"fd842b76_a339e1f8","line":561,"updated":"2021-09-23 21:37:00.000000000","message":"I think the only place BaseOvnSbIdl is used is for the Maintenance worker (nothing inherits from it either). Do we need this/does any of this code actually use it? OvnSbIdl inherits from the OvnDistributedLock, which has its own notify_handler.","commit_id":"e0e494482c7b64aef4221af4bb7c9a3cc9e647b5"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"14a9f64e57fbe3c1ddfa7bef189f9f882126a32e","unresolved":false,"context_lines":[{"line_number":558,"context_line":""},{"line_number":559,"context_line":"class BaseOvnSbIdl(Ml2OvnIdlBase):"},{"line_number":560,"context_line":""},{"line_number":561,"context_line":"    def __init__(self, remote, schema):"},{"line_number":562,"context_line":"        self.notify_handler \u003d row_event.RowEventHandler()"},{"line_number":563,"context_line":"        super().__init__(remote, schema)"},{"line_number":564,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"3df8d979_552cb35f","line":561,"in_reply_to":"3e98f67a_b0dc19b9","updated":"2021-10-20 14:17:45.000000000","message":"Done","commit_id":"e0e494482c7b64aef4221af4bb7c9a3cc9e647b5"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"433263360eea43f46a5993756cc82cafc72212b0","unresolved":true,"context_lines":[{"line_number":558,"context_line":""},{"line_number":559,"context_line":"class BaseOvnSbIdl(Ml2OvnIdlBase):"},{"line_number":560,"context_line":""},{"line_number":561,"context_line":"    def __init__(self, remote, schema):"},{"line_number":562,"context_line":"        self.notify_handler \u003d row_event.RowEventHandler()"},{"line_number":563,"context_line":"        super().__init__(remote, schema)"},{"line_number":564,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"3e98f67a_b0dc19b9","line":561,"in_reply_to":"fd842b76_a339e1f8","updated":"2021-09-24 17:05:19.000000000","message":"You are right, we need that in API workers, not maintenance ones. I\u0027ll remove it.","commit_id":"e0e494482c7b64aef4221af4bb7c9a3cc9e647b5"}]}
