)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"4483c79d871fe2cd93bb47476f4e3d03e2395504","unresolved":true,"context_lines":[{"line_number":4,"context_line":"Commit:     Miro Tomaska \u003cmtomaska@redhat.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2024-01-11 13:23:03 -0500"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Make get_ports RPC method conmon for the DHCP and Metadata agent"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This patch is the initial implementation on the suggestion"},{"line_number":10,"context_line":"from this patch[1]."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"29a08119_b3996aab","line":7,"range":{"start_line":7,"start_character":26,"end_line":7,"end_character":32},"updated":"2024-01-11 18:57:44.000000000","message":"nit: common","commit_id":"289b947ca9fbb3131c0d1d61ae9570b593358546"},{"author":{"_account_id":34271,"name":"Miro Tomaska","display_name":"Miro Tomaska","email":"mtomaska@redhat.com","username":"mtomaska"},"change_message_id":"75bf44402efecc839bcfa778488924d90d5485f5","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Miro Tomaska \u003cmtomaska@redhat.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2024-01-11 13:23:03 -0500"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Make get_ports RPC method conmon for the DHCP and Metadata agent"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This patch is the initial implementation on the suggestion"},{"line_number":10,"context_line":"from this patch[1]."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"ea9be151_72761b3e","line":7,"range":{"start_line":7,"start_character":26,"end_line":7,"end_character":32},"in_reply_to":"29a08119_b3996aab","updated":"2024-01-15 02:28:46.000000000","message":"Done","commit_id":"289b947ca9fbb3131c0d1d61ae9570b593358546"}],"/PATCHSET_LEVEL":[{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"2b8407c96331ad3e1c39577f7787ec637cd0fca6","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"efb9a9e1_66badce4","updated":"2024-01-15 10:39:35.000000000","message":"Some nits, code looks OK.","commit_id":"0239cfdeca85c437b7b8cae78693e9ecc8cb0f59"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"5a0dbbdbb262f70faf76824fdb570539396d878e","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"84370020_89b5528c","updated":"2024-01-16 14:22:52.000000000","message":"Should this be \"Related-Bug: #1982569\"?","commit_id":"1d42872a149ea1b518c739dac404f0df6afdb84d"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"f585c3038b2638f282f73e7940b3abfd48952172","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"fc6d8a58_63ba8d8e","updated":"2024-01-16 14:49:29.000000000","message":"Thanks Miro! Good work","commit_id":"1d42872a149ea1b518c739dac404f0df6afdb84d"}],"neutron/agent/common/base_agent_rpc.py":[{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"7991e1da52d7acbd6c27dae21274e94ed10e520d","unresolved":true,"context_lines":[{"line_number":20,"context_line":"class BasePluginApi(object):"},{"line_number":21,"context_line":"    \"\"\"Base agent side of the rpc API\"\"\""},{"line_number":22,"context_line":"    def __init__(self, topic, namespace\u003dNone):"},{"line_number":23,"context_line":"        target \u003d Target("},{"line_number":24,"context_line":"            topic\u003dtopic,"},{"line_number":25,"context_line":"            namespace\u003dnamespace,"},{"line_number":26,"context_line":"            version\u003d\u00271.0\u0027)"},{"line_number":27,"context_line":"        self.client \u003d n_rpc.get_client(target)"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"    def get_ports(self, context, port_filters):"}],"source_content_type":"text/x-python","patch_set":1,"id":"69096d87_6cb0d7cd","line":26,"range":{"start_line":23,"start_character":8,"end_line":26,"end_character":26},"updated":"2024-01-08 19:16:16.000000000","message":"The idea is good but if we are going to enable the RPC namespaces, all these parameters (topic, namespace and version) should be mandatory (as is topic now)","commit_id":"88cd8152ccb04c03d3e7e702734a76ee4cca7f2a"},{"author":{"_account_id":34271,"name":"Miro Tomaska","display_name":"Miro Tomaska","email":"mtomaska@redhat.com","username":"mtomaska"},"change_message_id":"885cf2a5b9b38c8f77c41959f713efbe90ed7051","unresolved":true,"context_lines":[{"line_number":20,"context_line":"class BasePluginApi(object):"},{"line_number":21,"context_line":"    \"\"\"Base agent side of the rpc API\"\"\""},{"line_number":22,"context_line":"    def __init__(self, topic, namespace\u003dNone):"},{"line_number":23,"context_line":"        target \u003d Target("},{"line_number":24,"context_line":"            topic\u003dtopic,"},{"line_number":25,"context_line":"            namespace\u003dnamespace,"},{"line_number":26,"context_line":"            version\u003d\u00271.0\u0027)"},{"line_number":27,"context_line":"        self.client \u003d n_rpc.get_client(target)"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"    def get_ports(self, context, port_filters):"}],"source_content_type":"text/x-python","patch_set":1,"id":"785c4a98_9825813b","line":26,"range":{"start_line":23,"start_character":8,"end_line":26,"end_character":26},"in_reply_to":"69096d87_6cb0d7cd","updated":"2024-01-10 18:54:22.000000000","message":"Are you saying you will be ok with this implementation as long as the base class is changed to require namespace and version? Thanks","commit_id":"88cd8152ccb04c03d3e7e702734a76ee4cca7f2a"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"63b4d5ec9ffb0e67435a8bff5f3de0f7526dff77","unresolved":false,"context_lines":[{"line_number":20,"context_line":"class BasePluginApi(object):"},{"line_number":21,"context_line":"    \"\"\"Base agent side of the rpc API\"\"\""},{"line_number":22,"context_line":"    def __init__(self, topic, namespace\u003dNone):"},{"line_number":23,"context_line":"        target \u003d Target("},{"line_number":24,"context_line":"            topic\u003dtopic,"},{"line_number":25,"context_line":"            namespace\u003dnamespace,"},{"line_number":26,"context_line":"            version\u003d\u00271.0\u0027)"},{"line_number":27,"context_line":"        self.client \u003d n_rpc.get_client(target)"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"    def get_ports(self, context, port_filters):"}],"source_content_type":"text/x-python","patch_set":1,"id":"aec2c6e3_07e56a6b","line":26,"range":{"start_line":23,"start_character":8,"end_line":26,"end_character":26},"in_reply_to":"785c4a98_9825813b","updated":"2024-01-11 13:53:15.000000000","message":"Exactly, we should always request namespace and version.","commit_id":"88cd8152ccb04c03d3e7e702734a76ee4cca7f2a"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"2b8407c96331ad3e1c39577f7787ec637cd0fca6","unresolved":true,"context_lines":[{"line_number":27,"context_line":"        self.client \u003d n_rpc.get_client(target)"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"    def get_ports(self, context, port_filters):"},{"line_number":30,"context_line":"        # NOTE: The MetadataRpcCallback (server side) API version 1.0 exposes"},{"line_number":31,"context_line":"        # get_ports, under the PLUGIN topic and None namespace"},{"line_number":32,"context_line":"        cctxt \u003d self.client.prepare(version\u003d\u00271.0\u0027)"},{"line_number":33,"context_line":"        return cctxt.call(context, \u0027get_ports\u0027, filters\u003dport_filters)"}],"source_content_type":"text/x-python","patch_set":3,"id":"b49f7773_2dac10a7","line":30,"range":{"start_line":30,"start_character":10,"end_line":30,"end_character":14},"updated":"2024-01-15 10:39:35.000000000","message":"super nit: notes are usually signed. E.g.:\n```\n    NOTE(mtomaska): ......\n```","commit_id":"0239cfdeca85c437b7b8cae78693e9ecc8cb0f59"},{"author":{"_account_id":34271,"name":"Miro Tomaska","display_name":"Miro Tomaska","email":"mtomaska@redhat.com","username":"mtomaska"},"change_message_id":"2407b0d7ba55889a3cc19df92d4d29fdb12794df","unresolved":false,"context_lines":[{"line_number":27,"context_line":"        self.client \u003d n_rpc.get_client(target)"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"    def get_ports(self, context, port_filters):"},{"line_number":30,"context_line":"        # NOTE: The MetadataRpcCallback (server side) API version 1.0 exposes"},{"line_number":31,"context_line":"        # get_ports, under the PLUGIN topic and None namespace"},{"line_number":32,"context_line":"        cctxt \u003d self.client.prepare(version\u003d\u00271.0\u0027)"},{"line_number":33,"context_line":"        return cctxt.call(context, \u0027get_ports\u0027, filters\u003dport_filters)"}],"source_content_type":"text/x-python","patch_set":3,"id":"c3329b77_a249950e","line":30,"range":{"start_line":30,"start_character":10,"end_line":30,"end_character":14},"in_reply_to":"b49f7773_2dac10a7","updated":"2024-01-15 21:29:16.000000000","message":"Done","commit_id":"0239cfdeca85c437b7b8cae78693e9ecc8cb0f59"}],"neutron/agent/dhcp/agent.py":[{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"4483c79d871fe2cd93bb47476f4e3d03e2395504","unresolved":true,"context_lines":[{"line_number":864,"context_line":""},{"line_number":865,"context_line":"    def __init__(self, topic, host):"},{"line_number":866,"context_line":"        self.host \u003d host"},{"line_number":867,"context_line":"        super(DhcpPluginApi, self).__init__("},{"line_number":868,"context_line":"            topic\u003dtopic,"},{"line_number":869,"context_line":"            namespace\u003dconstants.RPC_NAMESPACE_DHCP_PLUGIN,"},{"line_number":870,"context_line":"            version\u003d\u00271.0\u0027)"}],"source_content_type":"text/x-python","patch_set":2,"id":"e87a7332_01f96a84","line":867,"updated":"2024-01-11 18:57:44.000000000","message":"nit: could use super().__init__(..) here","commit_id":"289b947ca9fbb3131c0d1d61ae9570b593358546"},{"author":{"_account_id":34271,"name":"Miro Tomaska","display_name":"Miro Tomaska","email":"mtomaska@redhat.com","username":"mtomaska"},"change_message_id":"75bf44402efecc839bcfa778488924d90d5485f5","unresolved":false,"context_lines":[{"line_number":864,"context_line":""},{"line_number":865,"context_line":"    def __init__(self, topic, host):"},{"line_number":866,"context_line":"        self.host \u003d host"},{"line_number":867,"context_line":"        super(DhcpPluginApi, self).__init__("},{"line_number":868,"context_line":"            topic\u003dtopic,"},{"line_number":869,"context_line":"            namespace\u003dconstants.RPC_NAMESPACE_DHCP_PLUGIN,"},{"line_number":870,"context_line":"            version\u003d\u00271.0\u0027)"}],"source_content_type":"text/x-python","patch_set":2,"id":"2b87ec8e_3d6632ab","line":867,"in_reply_to":"e87a7332_01f96a84","updated":"2024-01-15 02:28:46.000000000","message":"Done","commit_id":"289b947ca9fbb3131c0d1d61ae9570b593358546"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"4483c79d871fe2cd93bb47476f4e3d03e2395504","unresolved":true,"context_lines":[{"line_number":870,"context_line":"            version\u003d\u00271.0\u0027)"},{"line_number":871,"context_line":""},{"line_number":872,"context_line":"    @property"},{"line_number":873,"context_line":"    def context(self):"},{"line_number":874,"context_line":"        # TODO(kevinbenton): the context should really be passed in to each of"},{"line_number":875,"context_line":"        # these methods so a call can be tracked all of the way through the"},{"line_number":876,"context_line":"        # system but that will require a larger refactor to pass the context"}],"source_content_type":"text/x-python","patch_set":2,"id":"0b63460a_76368375","line":873,"updated":"2024-01-11 18:57:44.000000000","message":"I wonder if this method should move as well, but would need a small tweak to the OVN metadata agent code, which uses a single \"context\" for it\u0027s lifetime and doesn\u0027t generate one per call.","commit_id":"289b947ca9fbb3131c0d1d61ae9570b593358546"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"4483c79d871fe2cd93bb47476f4e3d03e2395504","unresolved":true,"context_lines":[{"line_number":924,"context_line":"            return dhcp.DictModel(port)"},{"line_number":925,"context_line":""},{"line_number":926,"context_line":"    def get_ports(self, port_filters):"},{"line_number":927,"context_line":"        ports \u003d super(DhcpPluginApi, self).get_ports("},{"line_number":928,"context_line":"            self.context, port_filters)"},{"line_number":929,"context_line":"        if ports:"},{"line_number":930,"context_line":"            return [dhcp.DictModel(port) for port in ports]"}],"source_content_type":"text/x-python","patch_set":2,"id":"7446d40a_f11e89ab","line":927,"updated":"2024-01-11 18:57:44.000000000","message":"Same super() comment","commit_id":"289b947ca9fbb3131c0d1d61ae9570b593358546"},{"author":{"_account_id":34271,"name":"Miro Tomaska","display_name":"Miro Tomaska","email":"mtomaska@redhat.com","username":"mtomaska"},"change_message_id":"75bf44402efecc839bcfa778488924d90d5485f5","unresolved":false,"context_lines":[{"line_number":924,"context_line":"            return dhcp.DictModel(port)"},{"line_number":925,"context_line":""},{"line_number":926,"context_line":"    def get_ports(self, port_filters):"},{"line_number":927,"context_line":"        ports \u003d super(DhcpPluginApi, self).get_ports("},{"line_number":928,"context_line":"            self.context, port_filters)"},{"line_number":929,"context_line":"        if ports:"},{"line_number":930,"context_line":"            return [dhcp.DictModel(port) for port in ports]"}],"source_content_type":"text/x-python","patch_set":2,"id":"92bccaed_67f30073","line":927,"in_reply_to":"7446d40a_f11e89ab","updated":"2024-01-15 02:28:46.000000000","message":"Done","commit_id":"289b947ca9fbb3131c0d1d61ae9570b593358546"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"2b8407c96331ad3e1c39577f7787ec637cd0fca6","unresolved":true,"context_lines":[{"line_number":37,"context_line":"from oslo_utils import timeutils"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"from neutron._i18n import _"},{"line_number":40,"context_line":"from neutron.agent.common.base_agent_rpc import BasePluginApi"},{"line_number":41,"context_line":"from neutron.agent.common import resource_processing_queue as queue"},{"line_number":42,"context_line":"from neutron.agent.linux import dhcp"},{"line_number":43,"context_line":"from neutron.agent.linux import external_process"}],"source_content_type":"text/x-python","patch_set":3,"id":"65c3f146_c038476c","line":40,"range":{"start_line":40,"start_character":26,"end_line":40,"end_character":61},"updated":"2024-01-15 10:39:35.000000000","message":"We usually import the whole module, not a single class.","commit_id":"0239cfdeca85c437b7b8cae78693e9ecc8cb0f59"},{"author":{"_account_id":34271,"name":"Miro Tomaska","display_name":"Miro Tomaska","email":"mtomaska@redhat.com","username":"mtomaska"},"change_message_id":"2407b0d7ba55889a3cc19df92d4d29fdb12794df","unresolved":false,"context_lines":[{"line_number":37,"context_line":"from oslo_utils import timeutils"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"from neutron._i18n import _"},{"line_number":40,"context_line":"from neutron.agent.common.base_agent_rpc import BasePluginApi"},{"line_number":41,"context_line":"from neutron.agent.common import resource_processing_queue as queue"},{"line_number":42,"context_line":"from neutron.agent.linux import dhcp"},{"line_number":43,"context_line":"from neutron.agent.linux import external_process"}],"source_content_type":"text/x-python","patch_set":3,"id":"b4188705_e30a1e70","line":40,"range":{"start_line":40,"start_character":26,"end_line":40,"end_character":61},"in_reply_to":"65c3f146_c038476c","updated":"2024-01-15 21:29:16.000000000","message":"Done","commit_id":"0239cfdeca85c437b7b8cae78693e9ecc8cb0f59"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"f585c3038b2638f282f73e7940b3abfd48952172","unresolved":true,"context_lines":[{"line_number":916,"context_line":"                          network_id\u003dnetwork_id, device_id\u003ddevice_id,"},{"line_number":917,"context_line":"                          host\u003dself.host)"},{"line_number":918,"context_line":""},{"line_number":919,"context_line":"    def get_dhcp_port(self, port_id):"},{"line_number":920,"context_line":"        \"\"\"Make a remote process call to retrieve the dhcp port.\"\"\""},{"line_number":921,"context_line":"        cctxt \u003d self.client.prepare(version\u003d\u00271.8\u0027)"},{"line_number":922,"context_line":"        port \u003d cctxt.call(self.context, \u0027get_dhcp_port\u0027, port_id\u003dport_id)"},{"line_number":923,"context_line":"        if port:"},{"line_number":924,"context_line":"            return dhcp.DictModel(port)"},{"line_number":925,"context_line":""},{"line_number":926,"context_line":"    def get_ports(self, port_filters):"},{"line_number":927,"context_line":"        ports \u003d super().get_ports(self.context, port_filters)"}],"source_content_type":"text/x-python","patch_set":4,"id":"3fd0fc46_0660c809","line":924,"range":{"start_line":919,"start_character":0,"end_line":924,"end_character":39},"updated":"2024-01-16 14:49:29.000000000","message":"Just thinking out loud, no action required: do we need still need this? Maybe not in this patch but now we could remove specific get_\u003cwhatever\u003e_ports rpc calls with the generic one since it provides generic port_filters parameter?","commit_id":"1d42872a149ea1b518c739dac404f0df6afdb84d"},{"author":{"_account_id":34271,"name":"Miro Tomaska","display_name":"Miro Tomaska","email":"mtomaska@redhat.com","username":"mtomaska"},"change_message_id":"38df4a47b9db7a2f4cec90df737faa8398722f9f","unresolved":true,"context_lines":[{"line_number":916,"context_line":"                          network_id\u003dnetwork_id, device_id\u003ddevice_id,"},{"line_number":917,"context_line":"                          host\u003dself.host)"},{"line_number":918,"context_line":""},{"line_number":919,"context_line":"    def get_dhcp_port(self, port_id):"},{"line_number":920,"context_line":"        \"\"\"Make a remote process call to retrieve the dhcp port.\"\"\""},{"line_number":921,"context_line":"        cctxt \u003d self.client.prepare(version\u003d\u00271.8\u0027)"},{"line_number":922,"context_line":"        port \u003d cctxt.call(self.context, \u0027get_dhcp_port\u0027, port_id\u003dport_id)"},{"line_number":923,"context_line":"        if port:"},{"line_number":924,"context_line":"            return dhcp.DictModel(port)"},{"line_number":925,"context_line":""},{"line_number":926,"context_line":"    def get_ports(self, port_filters):"},{"line_number":927,"context_line":"        ports \u003d super().get_ports(self.context, port_filters)"}],"source_content_type":"text/x-python","patch_set":4,"id":"6a2d6a3f_1d09f46a","line":924,"range":{"start_line":919,"start_character":0,"end_line":924,"end_character":39},"in_reply_to":"3fd0fc46_0660c809","updated":"2024-01-16 20:18:46.000000000","message":"Yep that should work... the `get_dhcp_port` can be depricated but that would require API change. At this point it is a slipery slope of continous improvement :)","commit_id":"1d42872a149ea1b518c739dac404f0df6afdb84d"},{"author":{"_account_id":34271,"name":"Miro Tomaska","display_name":"Miro Tomaska","email":"mtomaska@redhat.com","username":"mtomaska"},"change_message_id":"22743454e53c82fbf36def4087fdc855486390ec","unresolved":false,"context_lines":[{"line_number":916,"context_line":"                          network_id\u003dnetwork_id, device_id\u003ddevice_id,"},{"line_number":917,"context_line":"                          host\u003dself.host)"},{"line_number":918,"context_line":""},{"line_number":919,"context_line":"    def get_dhcp_port(self, port_id):"},{"line_number":920,"context_line":"        \"\"\"Make a remote process call to retrieve the dhcp port.\"\"\""},{"line_number":921,"context_line":"        cctxt \u003d self.client.prepare(version\u003d\u00271.8\u0027)"},{"line_number":922,"context_line":"        port \u003d cctxt.call(self.context, \u0027get_dhcp_port\u0027, port_id\u003dport_id)"},{"line_number":923,"context_line":"        if port:"},{"line_number":924,"context_line":"            return dhcp.DictModel(port)"},{"line_number":925,"context_line":""},{"line_number":926,"context_line":"    def get_ports(self, port_filters):"},{"line_number":927,"context_line":"        ports \u003d super().get_ports(self.context, port_filters)"}],"source_content_type":"text/x-python","patch_set":4,"id":"527d6ab8_ec79fcc0","line":924,"range":{"start_line":919,"start_character":0,"end_line":924,"end_character":39},"in_reply_to":"6a2d6a3f_1d09f46a","updated":"2024-01-16 20:31:16.000000000","message":"Acknowledged","commit_id":"1d42872a149ea1b518c739dac404f0df6afdb84d"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"5a0dbbdbb262f70faf76824fdb570539396d878e","unresolved":true,"context_lines":[{"line_number":923,"context_line":"        if port:"},{"line_number":924,"context_line":"            return dhcp.DictModel(port)"},{"line_number":925,"context_line":""},{"line_number":926,"context_line":"    def get_ports(self, port_filters):"},{"line_number":927,"context_line":"        ports \u003d super().get_ports(self.context, port_filters)"},{"line_number":928,"context_line":"        if ports:"},{"line_number":929,"context_line":"            return [dhcp.DictModel(port) for port in ports]"}],"source_content_type":"text/x-python","patch_set":4,"id":"ba730e08_56a6f815","line":926,"range":{"start_line":926,"start_character":4,"end_line":926,"end_character":35},"updated":"2024-01-16 14:22:52.000000000","message":"Bump the RPC version, please.","commit_id":"1d42872a149ea1b518c739dac404f0df6afdb84d"},{"author":{"_account_id":34271,"name":"Miro Tomaska","display_name":"Miro Tomaska","email":"mtomaska@redhat.com","username":"mtomaska"},"change_message_id":"38df4a47b9db7a2f4cec90df737faa8398722f9f","unresolved":true,"context_lines":[{"line_number":923,"context_line":"        if port:"},{"line_number":924,"context_line":"            return dhcp.DictModel(port)"},{"line_number":925,"context_line":""},{"line_number":926,"context_line":"    def get_ports(self, port_filters):"},{"line_number":927,"context_line":"        ports \u003d super().get_ports(self.context, port_filters)"},{"line_number":928,"context_line":"        if ports:"},{"line_number":929,"context_line":"            return [dhcp.DictModel(port) for port in ports]"}],"source_content_type":"text/x-python","patch_set":4,"id":"558d035b_521654c6","line":926,"range":{"start_line":926,"start_character":4,"end_line":926,"end_character":35},"in_reply_to":"1d145e2f_5a657602","updated":"2024-01-16 20:18:46.000000000","message":"Correct, nothing on the server side changed so I dont think that requires RPC version bump. This `get_ports` is simply a wrapper on the agent side for the actual RPC `get_ports` to return port objects as `DictModel`","commit_id":"1d42872a149ea1b518c739dac404f0df6afdb84d"},{"author":{"_account_id":34271,"name":"Miro Tomaska","display_name":"Miro Tomaska","email":"mtomaska@redhat.com","username":"mtomaska"},"change_message_id":"22743454e53c82fbf36def4087fdc855486390ec","unresolved":false,"context_lines":[{"line_number":923,"context_line":"        if port:"},{"line_number":924,"context_line":"            return dhcp.DictModel(port)"},{"line_number":925,"context_line":""},{"line_number":926,"context_line":"    def get_ports(self, port_filters):"},{"line_number":927,"context_line":"        ports \u003d super().get_ports(self.context, port_filters)"},{"line_number":928,"context_line":"        if ports:"},{"line_number":929,"context_line":"            return [dhcp.DictModel(port) for port in ports]"}],"source_content_type":"text/x-python","patch_set":4,"id":"850ee9f3_6055f367","line":926,"range":{"start_line":926,"start_character":4,"end_line":926,"end_character":35},"in_reply_to":"558d035b_521654c6","updated":"2024-01-16 20:31:16.000000000","message":"Acknowledged","commit_id":"1d42872a149ea1b518c739dac404f0df6afdb84d"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"1a34983832d9e81592d6155eebf34864173348a7","unresolved":true,"context_lines":[{"line_number":923,"context_line":"        if port:"},{"line_number":924,"context_line":"            return dhcp.DictModel(port)"},{"line_number":925,"context_line":""},{"line_number":926,"context_line":"    def get_ports(self, port_filters):"},{"line_number":927,"context_line":"        ports \u003d super().get_ports(self.context, port_filters)"},{"line_number":928,"context_line":"        if ports:"},{"line_number":929,"context_line":"            return [dhcp.DictModel(port) for port in ports]"}],"source_content_type":"text/x-python","patch_set":4,"id":"1d145e2f_5a657602","line":926,"range":{"start_line":926,"start_character":4,"end_line":926,"end_character":35},"in_reply_to":"ba730e08_56a6f815","updated":"2024-01-16 14:51:12.000000000","message":"Do we need it? There was no change to rpc technically, was there?","commit_id":"1d42872a149ea1b518c739dac404f0df6afdb84d"}],"neutron/agent/metadata/agent.py":[{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"4483c79d871fe2cd93bb47476f4e3d03e2395504","unresolved":true,"context_lines":[{"line_number":60,"context_line":"    \"\"\""},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"    def __init__(self, topic):"},{"line_number":63,"context_line":"        super(MetadataPluginAPI, self).__init__("},{"line_number":64,"context_line":"            topic\u003dtopic,"},{"line_number":65,"context_line":"            namespace\u003dconstants.RPC_NAMESPACE_METADATA,"},{"line_number":66,"context_line":"            version\u003d\u00271.0\u0027)"}],"source_content_type":"text/x-python","patch_set":2,"id":"3251c394_bf240572","line":63,"updated":"2024-01-11 18:57:44.000000000","message":"Same super() comment","commit_id":"289b947ca9fbb3131c0d1d61ae9570b593358546"},{"author":{"_account_id":34271,"name":"Miro Tomaska","display_name":"Miro Tomaska","email":"mtomaska@redhat.com","username":"mtomaska"},"change_message_id":"75bf44402efecc839bcfa778488924d90d5485f5","unresolved":false,"context_lines":[{"line_number":60,"context_line":"    \"\"\""},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"    def __init__(self, topic):"},{"line_number":63,"context_line":"        super(MetadataPluginAPI, self).__init__("},{"line_number":64,"context_line":"            topic\u003dtopic,"},{"line_number":65,"context_line":"            namespace\u003dconstants.RPC_NAMESPACE_METADATA,"},{"line_number":66,"context_line":"            version\u003d\u00271.0\u0027)"}],"source_content_type":"text/x-python","patch_set":2,"id":"64cfae49_e6f4f895","line":63,"in_reply_to":"3251c394_bf240572","updated":"2024-01-15 02:28:46.000000000","message":"Done","commit_id":"289b947ca9fbb3131c0d1d61ae9570b593358546"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"2b8407c96331ad3e1c39577f7787ec637cd0fca6","unresolved":true,"context_lines":[{"line_number":28,"context_line":"import webob"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"from neutron._i18n import _"},{"line_number":31,"context_line":"from neutron.agent.common.base_agent_rpc import BasePluginApi"},{"line_number":32,"context_line":"from neutron.agent.linux import utils as agent_utils"},{"line_number":33,"context_line":"from neutron.agent import rpc as agent_rpc"},{"line_number":34,"context_line":"from neutron.common import cache_utils as cache"}],"source_content_type":"text/x-python","patch_set":3,"id":"b9992a6c_20dbe69c","line":31,"range":{"start_line":31,"start_character":0,"end_line":31,"end_character":2},"updated":"2024-01-15 10:39:35.000000000","message":"same here, import the module, not the class","commit_id":"0239cfdeca85c437b7b8cae78693e9ecc8cb0f59"},{"author":{"_account_id":34271,"name":"Miro Tomaska","display_name":"Miro Tomaska","email":"mtomaska@redhat.com","username":"mtomaska"},"change_message_id":"2407b0d7ba55889a3cc19df92d4d29fdb12794df","unresolved":false,"context_lines":[{"line_number":28,"context_line":"import webob"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"from neutron._i18n import _"},{"line_number":31,"context_line":"from neutron.agent.common.base_agent_rpc import BasePluginApi"},{"line_number":32,"context_line":"from neutron.agent.linux import utils as agent_utils"},{"line_number":33,"context_line":"from neutron.agent import rpc as agent_rpc"},{"line_number":34,"context_line":"from neutron.common import cache_utils as cache"}],"source_content_type":"text/x-python","patch_set":3,"id":"7da7e4ea_284c30f4","line":31,"range":{"start_line":31,"start_character":0,"end_line":31,"end_character":2},"in_reply_to":"b9992a6c_20dbe69c","updated":"2024-01-15 21:29:16.000000000","message":"Done","commit_id":"0239cfdeca85c437b7b8cae78693e9ecc8cb0f59"}],"neutron/tests/unit/agent/linux/test_dhcp.py":[{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"2b8407c96331ad3e1c39577f7787ec637cd0fca6","unresolved":true,"context_lines":[{"line_number":77,"context_line":"    def __getitem__(self, k, default_value\u003dNone):"},{"line_number":78,"context_line":"        return self.__dict__.get(k, default_value)"},{"line_number":79,"context_line":""},{"line_number":80,"context_line":"    def get(self, k, default_value\u003dNone):"},{"line_number":81,"context_line":"        return self.__getitem__(k, default_value)"},{"line_number":82,"context_line":""},{"line_number":83,"context_line":""},{"line_number":84,"context_line":"class FakeDhcpPort(Dictable):"}],"source_content_type":"text/x-python","patch_set":3,"id":"93be8919_83e538a6","line":81,"range":{"start_line":80,"start_character":5,"end_line":81,"end_character":49},"updated":"2024-01-15 10:39:35.000000000","message":"Where do we need this? Instead of that, we should define all needed parameters in the \"Fake*\" classes.","commit_id":"0239cfdeca85c437b7b8cae78693e9ecc8cb0f59"},{"author":{"_account_id":34271,"name":"Miro Tomaska","display_name":"Miro Tomaska","email":"mtomaska@redhat.com","username":"mtomaska"},"change_message_id":"38df4a47b9db7a2f4cec90df737faa8398722f9f","unresolved":true,"context_lines":[{"line_number":77,"context_line":"    def __getitem__(self, k, default_value\u003dNone):"},{"line_number":78,"context_line":"        return self.__dict__.get(k, default_value)"},{"line_number":79,"context_line":""},{"line_number":80,"context_line":"    def get(self, k, default_value\u003dNone):"},{"line_number":81,"context_line":"        return self.__getitem__(k, default_value)"},{"line_number":82,"context_line":""},{"line_number":83,"context_line":""},{"line_number":84,"context_line":"class FakeDhcpPort(Dictable):"}],"source_content_type":"text/x-python","patch_set":3,"id":"66e27bad_8cc024df","line":81,"range":{"start_line":80,"start_character":5,"end_line":81,"end_character":49},"in_reply_to":"012531b7_aa4f8b53","updated":"2024-01-16 20:18:46.000000000","message":"Thanks Kuba, that is precisely why I added `get()` method to this Dictable class. Sorry for the misunderstanding of the original question Rodolfo","commit_id":"0239cfdeca85c437b7b8cae78693e9ecc8cb0f59"},{"author":{"_account_id":34271,"name":"Miro Tomaska","display_name":"Miro Tomaska","email":"mtomaska@redhat.com","username":"mtomaska"},"change_message_id":"22743454e53c82fbf36def4087fdc855486390ec","unresolved":false,"context_lines":[{"line_number":77,"context_line":"    def __getitem__(self, k, default_value\u003dNone):"},{"line_number":78,"context_line":"        return self.__dict__.get(k, default_value)"},{"line_number":79,"context_line":""},{"line_number":80,"context_line":"    def get(self, k, default_value\u003dNone):"},{"line_number":81,"context_line":"        return self.__getitem__(k, default_value)"},{"line_number":82,"context_line":""},{"line_number":83,"context_line":""},{"line_number":84,"context_line":"class FakeDhcpPort(Dictable):"}],"source_content_type":"text/x-python","patch_set":3,"id":"5eb1f665_6a775ab0","line":81,"range":{"start_line":80,"start_character":5,"end_line":81,"end_character":49},"in_reply_to":"66e27bad_8cc024df","updated":"2024-01-16 20:31:16.000000000","message":"Acknowledged","commit_id":"0239cfdeca85c437b7b8cae78693e9ecc8cb0f59"},{"author":{"_account_id":34271,"name":"Miro Tomaska","display_name":"Miro Tomaska","email":"mtomaska@redhat.com","username":"mtomaska"},"change_message_id":"2407b0d7ba55889a3cc19df92d4d29fdb12794df","unresolved":true,"context_lines":[{"line_number":77,"context_line":"    def __getitem__(self, k, default_value\u003dNone):"},{"line_number":78,"context_line":"        return self.__dict__.get(k, default_value)"},{"line_number":79,"context_line":""},{"line_number":80,"context_line":"    def get(self, k, default_value\u003dNone):"},{"line_number":81,"context_line":"        return self.__getitem__(k, default_value)"},{"line_number":82,"context_line":""},{"line_number":83,"context_line":""},{"line_number":84,"context_line":"class FakeDhcpPort(Dictable):"}],"source_content_type":"text/x-python","patch_set":3,"id":"bb86d184_b9f95172","line":81,"range":{"start_line":80,"start_character":5,"end_line":81,"end_character":49},"in_reply_to":"93be8919_83e538a6","updated":"2024-01-15 21:29:16.000000000","message":"Sure I can define this in the `FakeOvnMetadaPort` class where it is currently needed, but this class gives other classes \"dictionary like\" functionality. So I feel like it belongs here. If you still like it should be moved, let me know.","commit_id":"0239cfdeca85c437b7b8cae78693e9ecc8cb0f59"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"f585c3038b2638f282f73e7940b3abfd48952172","unresolved":true,"context_lines":[{"line_number":77,"context_line":"    def __getitem__(self, k, default_value\u003dNone):"},{"line_number":78,"context_line":"        return self.__dict__.get(k, default_value)"},{"line_number":79,"context_line":""},{"line_number":80,"context_line":"    def get(self, k, default_value\u003dNone):"},{"line_number":81,"context_line":"        return self.__getitem__(k, default_value)"},{"line_number":82,"context_line":""},{"line_number":83,"context_line":""},{"line_number":84,"context_line":"class FakeDhcpPort(Dictable):"}],"source_content_type":"text/x-python","patch_set":3,"id":"012531b7_aa4f8b53","line":81,"range":{"start_line":80,"start_character":5,"end_line":81,"end_character":49},"in_reply_to":"bb86d184_b9f95172","updated":"2024-01-16 14:49:29.000000000","message":"I guess Rodolfo\u0027s question was where the `get()` gets called, as it\u0027s not used int he test anywhere. The answer is that the FakeOvnMetadataPort is returned from a mock call and the `get()` is called upon it at https://review.opendev.org/c/openstack/neutron/+/904872/4/neutron/agent/linux/dhcp.py#1223\n\nIf it was not the question then feel free to ignore me, I agree with Miro the `get()` makes sense in the superclass.","commit_id":"0239cfdeca85c437b7b8cae78693e9ecc8cb0f59"}]}
