)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"087843c622f97f5a2367b70d0f0385776c4b99ce","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"0f174eb1_3c251080","updated":"2024-05-22 00:13:26.000000000","message":"Still WIP","commit_id":"61ee264cae2b81dd83dd6f6da8bf215f93112800"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"25aa75ad24fc2e918df07c673a02d501a605f91f","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"f24c2554_ee5cf0ec","updated":"2024-05-22 15:54:46.000000000","message":"recheck\nzuul queue fix","commit_id":"61ee264cae2b81dd83dd6f6da8bf215f93112800"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"a3707446bb2b24bd7dbfd4c860911ff8aa5c3f7e","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"85820ce4_4b79d128","updated":"2025-01-15 04:06:14.000000000","message":"Yep, thank you Greg for catching that. It\u0027s due to the change in how member ports are created. This is WIP.","commit_id":"025ef591004f0c3f36a88bd3531bedf44d50702a"},{"author":{"_account_id":29244,"name":"Gregory Thiemonge","email":"gthiemon@redhat.com","username":"gthiemonge"},"change_message_id":"0c699c3d49c7cbaaf0076120aaf39462bc8df274","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":6,"id":"d9cbde11_dfd15e88","updated":"2024-08-26 12:40:10.000000000","message":"https://1a679a15ede886d68369-dfb11b8e45238c790fb951827c502144.ssl.cf1.rackcdn.com/920156/6/check/octavia-v2-dsvm-noop-api/c924ff5/controller/logs/screen-o-cw.txt\n\n```\nAug 22 22:52:52.986971 np0038256687 octavia-worker[76650]: ERROR octavia.controller.worker.v2.tasks.network_tasks [-] Error plugging amphora (compute_id: 09129f73-1efd-4edb-9324-deaa6bcc3175) into network d22a5bd8-2862-4770-9409-503142bf1aa8.: KeyError: \u0027d22a5bd8-2862-4770-9409-503142bf1aa8\u0027\nAug 22 22:52:52.986971 np0038256687 octavia-worker[76650]: ERROR octavia.controller.worker.v2.tasks.network_tasks Traceback (most recent call last):\nAug 22 22:52:52.986971 np0038256687 octavia-worker[76650]: ERROR octavia.controller.worker.v2.tasks.network_tasks   File \"/opt/stack/octavia/octavia/controller/worker/v2/tasks/network_tasks.py\", line 300, in execute\nAug 22 22:52:52.986971 np0038256687 octavia-worker[76650]: ERROR octavia.controller.worker.v2.tasks.network_tasks     vnic_type\u003dnic[constants.NET_VNIC_TYPE_MAP][network_id])\nAug 22 22:52:52.986971 np0038256687 octavia-worker[76650]: ERROR octavia.controller.worker.v2.tasks.network_tasks KeyError: \u0027d22a5bd8-2862-4770-9409-503142bf1aa8\u0027\nAug 22 22:52:52.986971 np0038256687 octavia-worker[76650]: ERROR octavia.controller.worker.v2.tasks.network_tasks \n```\n\nit seems that net_vnic_type_map is empty in noop:\n\n```\nAug 22 22:52:52.947035 np0038256687 octavia-worker[76650]: DEBUG octavia.controller.worker.v2.controller_worker [-] Task \u0027octavia-failover-loadbalancer-flow-calculate-amphora-delta\u0027 (39fab007-3867-471b-9b8b-2aab281a7fbb) transitioned into state \u0027SUCCESS\u0027 from state \u0027RUNNING\u0027 with result \u0027{\u0027compute_id\u0027: \u002709129f73-1efd-4edb-9324-deaa6bcc3175\u0027, \u0027amphora_id\u0027: \u0027e3d20a11-838d-442b-a4f0-6b520601513f\u0027, \u0027add_nics\u0027: [{\u0027id\u0027: None, \u0027compute_id\u0027: None, \u0027network_id\u0027: \u0027d22a5bd8-2862-4770-9409-503142bf1aa8\u0027, \u0027port_id\u0027: None, \u0027fixed_ips\u0027: [{\u0027subnet_id\u0027: \u0027b6423fd8-60f8-419f-a24f-efd36e409bc1\u0027, \u0027ip_address\u0027: None, \u0027subnet\u0027: None}], \u0027net_vnic_type_map\u0027: {}}], \u0027delete_nics\u0027: [], \u0027add_subnets\u0027: [{\u0027subnet_id\u0027: \u0027b6423fd8-60f8-419f-a24f-efd36e409bc1\u0027, \u0027network_id\u0027: \u0027d22a5bd8-2862-4770-9409-503142bf1aa8\u0027, \u0027port_id\u0027: None}], \u0027delete_subnets\u0027: []}\u0027 {{(pid\u003d76650) _task_receiver /opt/stack/data/venv/lib/python3.10/site-packages/taskflow/listeners/logging.py:178}}\n\n```","commit_id":"025ef591004f0c3f36a88bd3531bedf44d50702a"},{"author":{"_account_id":29244,"name":"Gregory Thiemonge","email":"gthiemon@redhat.com","username":"gthiemonge"},"change_message_id":"796b026eefeb0561fb47804b34fc2cec5ef644c7","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":10,"id":"a453ff6d_a7207b49","updated":"2025-02-06 10:40:20.000000000","message":"2 questions.\nTests in progress","commit_id":"151e3d51f9ef43fe8293fa3630ecf8afd6db9d8b"}],"doc/source/contributor/guides/providers.rst":[{"author":{"_account_id":34429,"name":"Tom Weininger","email":"dienste@weinimo.de","username":"tweining"},"change_message_id":"d340207696e058e65449c22f3bb33ce8e8b21c66","unresolved":true,"context_lines":[{"line_number":979,"context_line":"|                       |        | value is from 0 to 256. Default is 1.    |"},{"line_number":980,"context_line":"+-----------------------+--------+------------------------------------------+"},{"line_number":981,"context_line":"| vnic_type             | string | The member vNIC type used for the member |"},{"line_number":982,"context_line":"|                       |        | port. One of normal or direct.           |"},{"line_number":983,"context_line":"+-----------------------+--------+------------------------------------------+"},{"line_number":984,"context_line":""},{"line_number":985,"context_line":"Delete"}],"source_content_type":"text/x-rst","patch_set":4,"id":"2c490456_6c308a7e","line":982,"range":{"start_line":982,"start_character":41,"end_line":982,"end_character":65},"updated":"2024-08-14 12:04:16.000000000","message":"I miss a description of what each of these values means and a reference to where it comes from (neutron). My understanding is that only \u0027direct\u0027 enables SRIOV on the port.","commit_id":"1ab809e0364c7f426fe9f622536d3d2532126406"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"94e40f106dcc74ea7c492f217e2694306e334e85","unresolved":false,"context_lines":[{"line_number":979,"context_line":"|                       |        | value is from 0 to 256. Default is 1.    |"},{"line_number":980,"context_line":"+-----------------------+--------+------------------------------------------+"},{"line_number":981,"context_line":"| vnic_type             | string | The member vNIC type used for the member |"},{"line_number":982,"context_line":"|                       |        | port. One of normal or direct.           |"},{"line_number":983,"context_line":"+-----------------------+--------+------------------------------------------+"},{"line_number":984,"context_line":""},{"line_number":985,"context_line":"Delete"}],"source_content_type":"text/x-rst","patch_set":4,"id":"e4b50922_33d6d4b6","line":982,"range":{"start_line":982,"start_character":41,"end_line":982,"end_character":65},"in_reply_to":"2c490456_6c308a7e","updated":"2024-08-14 22:43:36.000000000","message":"Done","commit_id":"1ab809e0364c7f426fe9f622536d3d2532126406"}],"octavia/api/v2/controllers/member.py":[{"author":{"_account_id":29244,"name":"Gregory Thiemonge","email":"gthiemon@redhat.com","username":"gthiemonge"},"change_message_id":"796b026eefeb0561fb47804b34fc2cec5ef644c7","unresolved":true,"context_lines":[{"line_number":489,"context_line":"                db_member_dict \u003d m.to_dict(render_unsets\u003dFalse)"},{"line_number":490,"context_line":"                db_member_dict.pop(\u0027id\u0027)"},{"line_number":491,"context_line":"                # We don\u0027t allow updating the vnic_type"},{"line_number":492,"context_line":"                db_member_dict.pop(constants.REQUEST_SRIOV)"},{"line_number":493,"context_line":"                self.repositories.member.update("},{"line_number":494,"context_line":"                    context.session, m.id, **db_member_dict)"},{"line_number":495,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"40606432_75053a7d","line":492,"range":{"start_line":492,"start_character":16,"end_line":492,"end_character":59},"updated":"2025-02-06 10:40:20.000000000","message":"should we return an error when it\u0027s set?","commit_id":"151e3d51f9ef43fe8293fa3630ecf8afd6db9d8b"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"c1c88caae2ad45b9486b10c0df620b1b1cf92b79","unresolved":false,"context_lines":[{"line_number":489,"context_line":"                db_member_dict \u003d m.to_dict(render_unsets\u003dFalse)"},{"line_number":490,"context_line":"                db_member_dict.pop(\u0027id\u0027)"},{"line_number":491,"context_line":"                # We don\u0027t allow updating the vnic_type"},{"line_number":492,"context_line":"                db_member_dict.pop(constants.REQUEST_SRIOV)"},{"line_number":493,"context_line":"                self.repositories.member.update("},{"line_number":494,"context_line":"                    context.session, m.id, **db_member_dict)"},{"line_number":495,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"c71ada84_fc54b33c","line":492,"range":{"start_line":492,"start_character":16,"end_line":492,"end_character":59},"in_reply_to":"40606432_75053a7d","updated":"2025-02-11 01:24:22.000000000","message":"Done","commit_id":"151e3d51f9ef43fe8293fa3630ecf8afd6db9d8b"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"c1c88caae2ad45b9486b10c0df620b1b1cf92b79","unresolved":true,"context_lines":[{"line_number":489,"context_line":"                db_member_dict \u003d m.to_dict(render_unsets\u003dFalse)"},{"line_number":490,"context_line":"                db_member_dict.pop(\u0027id\u0027)"},{"line_number":491,"context_line":"                # We don\u0027t allow updating the vnic_type"},{"line_number":492,"context_line":"                db_member_dict.pop(constants.REQUEST_SRIOV)"},{"line_number":493,"context_line":"                self.repositories.member.update("},{"line_number":494,"context_line":"                    context.session, m.id, **db_member_dict)"},{"line_number":495,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"77158c65_33c2f0f0","line":492,"range":{"start_line":492,"start_character":16,"end_line":492,"end_character":59},"in_reply_to":"40606432_75053a7d","updated":"2025-02-11 01:24:22.000000000","message":"If you look at the wsme types, there is no way for an end user to","commit_id":"151e3d51f9ef43fe8293fa3630ecf8afd6db9d8b"}],"octavia/common/data_models.py":[{"author":{"_account_id":29244,"name":"Gregory Thiemonge","email":"gthiemon@redhat.com","username":"gthiemonge"},"change_message_id":"5e413d23d5899b08371e5a8135d9d6881c7f9a13","unresolved":true,"context_lines":[{"line_number":891,"context_line":""},{"line_number":892,"context_line":"class AmphoraMemberPort(BaseDataModel):"},{"line_number":893,"context_line":""},{"line_number":894,"context_line":"    def __init__(self, port_id\u003dNone, amphora_id\u003dNone, member_id\u003dNone,"},{"line_number":895,"context_line":"                 network_id\u003dNone, created_at\u003dNone, updated_at\u003dNone):"},{"line_number":896,"context_line":"        self.port_id \u003d port_id"},{"line_number":897,"context_line":"        self.amphora_id \u003d amphora_id"}],"source_content_type":"text/x-python","patch_set":11,"id":"aebacaea_b971d876","line":894,"range":{"start_line":894,"start_character":54,"end_line":894,"end_character":63},"updated":"2025-02-06 12:25:20.000000000","message":"member_id is not used","commit_id":"d49b399cdfaaeef219ab3d1520f29cec7c5a4d8f"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"c1c88caae2ad45b9486b10c0df620b1b1cf92b79","unresolved":false,"context_lines":[{"line_number":891,"context_line":""},{"line_number":892,"context_line":"class AmphoraMemberPort(BaseDataModel):"},{"line_number":893,"context_line":""},{"line_number":894,"context_line":"    def __init__(self, port_id\u003dNone, amphora_id\u003dNone, member_id\u003dNone,"},{"line_number":895,"context_line":"                 network_id\u003dNone, created_at\u003dNone, updated_at\u003dNone):"},{"line_number":896,"context_line":"        self.port_id \u003d port_id"},{"line_number":897,"context_line":"        self.amphora_id \u003d amphora_id"}],"source_content_type":"text/x-python","patch_set":11,"id":"46ac96c4_b5e5d52c","line":894,"range":{"start_line":894,"start_character":54,"end_line":894,"end_character":63},"in_reply_to":"aebacaea_b971d876","updated":"2025-02-11 01:24:22.000000000","message":"Done","commit_id":"d49b399cdfaaeef219ab3d1520f29cec7c5a4d8f"}],"octavia/controller/worker/v2/tasks/network_tasks.py":[{"author":{"_account_id":29244,"name":"Gregory Thiemonge","email":"gthiemon@redhat.com","username":"gthiemonge"},"change_message_id":"cee27c8cf9aa0d844604777b59fd6de799e6eed8","unresolved":true,"context_lines":[{"line_number":294,"context_line":"            network_id \u003d nic[constants.NETWORK_ID]"},{"line_number":295,"context_line":"            subnet_id \u003d nic[constants.FIXED_IPS][0][constants.SUBNET_ID]"},{"line_number":296,"context_line":"            try:"},{"line_number":297,"context_line":"                port \u003d self.network_driver.create_port("},{"line_number":298,"context_line":"                    network_id,"},{"line_number":299,"context_line":"                    name\u003df\u0027octavia-lb-member-{amphora.get(constants.ID)}\u0027,"},{"line_number":300,"context_line":"                    vnic_type\u003dnic[constants.NET_VNIC_TYPE_MAP][network_id])"}],"source_content_type":"text/x-python","patch_set":6,"id":"14495ff2_265f4346","line":297,"range":{"start_line":297,"start_character":43,"end_line":297,"end_character":54},"updated":"2024-08-26 13:14:16.000000000","message":"I don\u0027t see the deletion of these ports, they still exist after the LB is deleted","commit_id":"025ef591004f0c3f36a88bd3531bedf44d50702a"},{"author":{"_account_id":29244,"name":"Gregory Thiemonge","email":"gthiemon@redhat.com","username":"gthiemonge"},"change_message_id":"796b026eefeb0561fb47804b34fc2cec5ef644c7","unresolved":false,"context_lines":[{"line_number":294,"context_line":"            network_id \u003d nic[constants.NETWORK_ID]"},{"line_number":295,"context_line":"            subnet_id \u003d nic[constants.FIXED_IPS][0][constants.SUBNET_ID]"},{"line_number":296,"context_line":"            try:"},{"line_number":297,"context_line":"                port \u003d self.network_driver.create_port("},{"line_number":298,"context_line":"                    network_id,"},{"line_number":299,"context_line":"                    name\u003df\u0027octavia-lb-member-{amphora.get(constants.ID)}\u0027,"},{"line_number":300,"context_line":"                    vnic_type\u003dnic[constants.NET_VNIC_TYPE_MAP][network_id])"}],"source_content_type":"text/x-python","patch_set":6,"id":"1e784dd3_c393e151","line":297,"range":{"start_line":297,"start_character":43,"end_line":297,"end_character":54},"in_reply_to":"14495ff2_265f4346","updated":"2025-02-06 10:40:20.000000000","message":"Done","commit_id":"025ef591004f0c3f36a88bd3531bedf44d50702a"},{"author":{"_account_id":29244,"name":"Gregory Thiemonge","email":"gthiemon@redhat.com","username":"gthiemonge"},"change_message_id":"796b026eefeb0561fb47804b34fc2cec5ef644c7","unresolved":true,"context_lines":[{"line_number":300,"context_line":"                    network_id,"},{"line_number":301,"context_line":"                    name\u003df\u0027octavia-lb-member-{amphora.get(constants.ID)}\u0027,"},{"line_number":302,"context_line":"                    vnic_type\u003dnic[constants.NET_VNIC_TYPE_MAP][network_id])"},{"line_number":303,"context_line":"                self.network_driver.plug_port(db_amp, port)"},{"line_number":304,"context_line":"            except exceptions.NotFound as e:"},{"line_number":305,"context_line":"                if \u0027Instance\u0027 in str(e):"},{"line_number":306,"context_line":"                    raise base.AmphoraNotFound(str(e))"}],"source_content_type":"text/x-python","patch_set":10,"id":"7a1dd29f_5ec351fa","line":303,"range":{"start_line":303,"start_character":16,"end_line":303,"end_character":45},"updated":"2025-02-06 10:40:20.000000000","message":"question here: shouldn\u0027t we split the try/except block into 2 try/except blocks (1 for create_port, 1 for plug_port)? here, if plug_port fails and throws an exception, the port is not deleted (and not in the DB).","commit_id":"151e3d51f9ef43fe8293fa3630ecf8afd6db9d8b"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"d823d7e6232e00373af0f1dad06f5e9973a04a80","unresolved":false,"context_lines":[{"line_number":300,"context_line":"                    network_id,"},{"line_number":301,"context_line":"                    name\u003df\u0027octavia-lb-member-{amphora.get(constants.ID)}\u0027,"},{"line_number":302,"context_line":"                    vnic_type\u003dnic[constants.NET_VNIC_TYPE_MAP][network_id])"},{"line_number":303,"context_line":"                self.network_driver.plug_port(db_amp, port)"},{"line_number":304,"context_line":"            except exceptions.NotFound as e:"},{"line_number":305,"context_line":"                if \u0027Instance\u0027 in str(e):"},{"line_number":306,"context_line":"                    raise base.AmphoraNotFound(str(e))"}],"source_content_type":"text/x-python","patch_set":10,"id":"92a45623_001d72e9","line":303,"range":{"start_line":303,"start_character":16,"end_line":303,"end_character":45},"in_reply_to":"3b45fed9_4cf1d770","updated":"2025-02-11 01:24:45.000000000","message":"Done","commit_id":"151e3d51f9ef43fe8293fa3630ecf8afd6db9d8b"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"c1c88caae2ad45b9486b10c0df620b1b1cf92b79","unresolved":true,"context_lines":[{"line_number":300,"context_line":"                    network_id,"},{"line_number":301,"context_line":"                    name\u003df\u0027octavia-lb-member-{amphora.get(constants.ID)}\u0027,"},{"line_number":302,"context_line":"                    vnic_type\u003dnic[constants.NET_VNIC_TYPE_MAP][network_id])"},{"line_number":303,"context_line":"                self.network_driver.plug_port(db_amp, port)"},{"line_number":304,"context_line":"            except exceptions.NotFound as e:"},{"line_number":305,"context_line":"                if \u0027Instance\u0027 in str(e):"},{"line_number":306,"context_line":"                    raise base.AmphoraNotFound(str(e))"}],"source_content_type":"text/x-python","patch_set":10,"id":"3b45fed9_4cf1d770","line":303,"range":{"start_line":303,"start_character":16,"end_line":303,"end_character":45},"in_reply_to":"7a1dd29f_5ec351fa","updated":"2025-02-11 01:24:22.000000000","message":"This is an interesting point, I was thinking that the revert would handle that, but looking at that revert code, it\u0027s bad (i.e. the port ID will never be there) and will not.\nI have made changes to this.","commit_id":"151e3d51f9ef43fe8293fa3630ecf8afd6db9d8b"},{"author":{"_account_id":34429,"name":"Tom Weininger","email":"dienste@weinimo.de","username":"tweining"},"change_message_id":"6f0040eeb4166c34699c850f89770ce2b806d306","unresolved":true,"context_lines":[{"line_number":291,"context_line":"        except Exception:"},{"line_number":292,"context_line":"            LOG.error(f\u0027Unable to delete port {port_id} after failing to plug \u0027"},{"line_number":293,"context_line":"                      f\u0027the port into compute {compute_id}. This port \u0027"},{"line_number":294,"context_line":"                      f\u0027may now be abandonned in neutron.\u0027)"},{"line_number":295,"context_line":""},{"line_number":296,"context_line":"    def execute(self, amphora, delta):"},{"line_number":297,"context_line":"        \"\"\"Handle network plugging based off deltas.\"\"\""}],"source_content_type":"text/x-python","patch_set":20,"id":"b82013c0_efc9bed0","line":294,"range":{"start_line":294,"start_character":35,"end_line":294,"end_character":45},"updated":"2025-02-26 13:10:37.000000000","message":"typo","commit_id":"d650ab7722f379aabd5a8cedd300c3c7d843d7e0"}],"octavia/db/models.py":[{"author":{"_account_id":34429,"name":"Tom Weininger","email":"dienste@weinimo.de","username":"tweining"},"change_message_id":"d340207696e058e65449c22f3bb33ce8e8b21c66","unresolved":true,"context_lines":[{"line_number":229,"context_line":"        nullable\u003dFalse)"},{"line_number":230,"context_line":"    enabled \u003d sa.Column(sa.Boolean(), nullable\u003dFalse)"},{"line_number":231,"context_line":"    pool \u003d orm.relationship(\"Pool\", back_populates\u003d\"members\")"},{"line_number":232,"context_line":"    vnic_type \u003d sa.Column(sa.String(64), nullable\u003dTrue)"},{"line_number":233,"context_line":""},{"line_number":234,"context_line":"    _tags \u003d orm.relationship("},{"line_number":235,"context_line":"        \u0027Tags\u0027,"}],"source_content_type":"text/x-python","patch_set":4,"id":"34aebe8b_d2de73aa","line":232,"range":{"start_line":232,"start_character":26,"end_line":232,"end_character":39},"updated":"2024-08-14 12:04:16.000000000","message":"It seems this could be an enum.","commit_id":"1ab809e0364c7f426fe9f622536d3d2532126406"},{"author":{"_account_id":34429,"name":"Tom Weininger","email":"dienste@weinimo.de","username":"tweining"},"change_message_id":"c3e0af66b03b395325f5be31a47bf762f567d89d","unresolved":true,"context_lines":[{"line_number":229,"context_line":"        nullable\u003dFalse)"},{"line_number":230,"context_line":"    enabled \u003d sa.Column(sa.Boolean(), nullable\u003dFalse)"},{"line_number":231,"context_line":"    pool \u003d orm.relationship(\"Pool\", back_populates\u003d\"members\")"},{"line_number":232,"context_line":"    vnic_type \u003d sa.Column(sa.String(64), nullable\u003dTrue)"},{"line_number":233,"context_line":""},{"line_number":234,"context_line":"    _tags \u003d orm.relationship("},{"line_number":235,"context_line":"        \u0027Tags\u0027,"}],"source_content_type":"text/x-python","patch_set":4,"id":"367d431a_80faa66f","line":232,"range":{"start_line":232,"start_character":26,"end_line":232,"end_character":39},"in_reply_to":"2cd26c0d_940d944a","updated":"2024-08-19 16:40:40.000000000","message":"You suggested in https://review.opendev.org/c/openstack/octavia/+/923318/comment/3fc9f4ec_7722b9af/ to use an enum in the data model as well.\n\nWhat about using a standard Python enum and using an integer type in the model?","commit_id":"1ab809e0364c7f426fe9f622536d3d2532126406"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"33e01e2376289de164ada91e91414221c63a98bf","unresolved":true,"context_lines":[{"line_number":229,"context_line":"        nullable\u003dFalse)"},{"line_number":230,"context_line":"    enabled \u003d sa.Column(sa.Boolean(), nullable\u003dFalse)"},{"line_number":231,"context_line":"    pool \u003d orm.relationship(\"Pool\", back_populates\u003d\"members\")"},{"line_number":232,"context_line":"    vnic_type \u003d sa.Column(sa.String(64), nullable\u003dTrue)"},{"line_number":233,"context_line":""},{"line_number":234,"context_line":"    _tags \u003d orm.relationship("},{"line_number":235,"context_line":"        \u0027Tags\u0027,"}],"source_content_type":"text/x-python","patch_set":4,"id":"2cd26c0d_940d944a","line":232,"range":{"start_line":232,"start_character":26,"end_line":232,"end_character":39},"in_reply_to":"34aebe8b_d2de73aa","updated":"2024-08-14 22:43:25.000000000","message":"Hmm, originally I thought you were talking about the API types, but these strings are not accepted via the API.\n\nWe have not used the Enum feature in the Octavia data models or migrations to date, but it could save DB storage space and provide relational integrity.\n\nOne reason for this is sqlalchemy/alembic have open issues with handling enum types that some databases require. See https://github.com/sqlalchemy/alembic/issues/278 for example.\n\nI would prefer to leave this as a string column, like all of the other data models and investigate using the Enum type in a future revision.","commit_id":"1ab809e0364c7f426fe9f622536d3d2532126406"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"cb4a2676625181bd3bda1a51bb680b8d77952b23","unresolved":true,"context_lines":[{"line_number":229,"context_line":"        nullable\u003dFalse)"},{"line_number":230,"context_line":"    enabled \u003d sa.Column(sa.Boolean(), nullable\u003dFalse)"},{"line_number":231,"context_line":"    pool \u003d orm.relationship(\"Pool\", back_populates\u003d\"members\")"},{"line_number":232,"context_line":"    vnic_type \u003d sa.Column(sa.String(64), nullable\u003dTrue)"},{"line_number":233,"context_line":""},{"line_number":234,"context_line":"    _tags \u003d orm.relationship("},{"line_number":235,"context_line":"        \u0027Tags\u0027,"}],"source_content_type":"text/x-python","patch_set":4,"id":"b0903b8a_b1cba034","line":232,"range":{"start_line":232,"start_character":26,"end_line":232,"end_character":39},"in_reply_to":"367d431a_80faa66f","updated":"2024-08-21 23:50:36.000000000","message":"Yeah, and there I was also thinking about the API validation enums.","commit_id":"1ab809e0364c7f426fe9f622536d3d2532126406"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"d823d7e6232e00373af0f1dad06f5e9973a04a80","unresolved":false,"context_lines":[{"line_number":229,"context_line":"        nullable\u003dFalse)"},{"line_number":230,"context_line":"    enabled \u003d sa.Column(sa.Boolean(), nullable\u003dFalse)"},{"line_number":231,"context_line":"    pool \u003d orm.relationship(\"Pool\", back_populates\u003d\"members\")"},{"line_number":232,"context_line":"    vnic_type \u003d sa.Column(sa.String(64), nullable\u003dTrue)"},{"line_number":233,"context_line":""},{"line_number":234,"context_line":"    _tags \u003d orm.relationship("},{"line_number":235,"context_line":"        \u0027Tags\u0027,"}],"source_content_type":"text/x-python","patch_set":4,"id":"a41e6c26_38b1e864","line":232,"range":{"start_line":232,"start_character":26,"end_line":232,"end_character":39},"in_reply_to":"8d677caf_8d765677","updated":"2025-02-11 01:24:45.000000000","message":"Acknowledged","commit_id":"1ab809e0364c7f426fe9f622536d3d2532126406"},{"author":{"_account_id":29244,"name":"Gregory Thiemonge","email":"gthiemon@redhat.com","username":"gthiemonge"},"change_message_id":"83cafd5cbe51a9b4d0f45409add24ac8bf22ffb3","unresolved":true,"context_lines":[{"line_number":229,"context_line":"        nullable\u003dFalse)"},{"line_number":230,"context_line":"    enabled \u003d sa.Column(sa.Boolean(), nullable\u003dFalse)"},{"line_number":231,"context_line":"    pool \u003d orm.relationship(\"Pool\", back_populates\u003d\"members\")"},{"line_number":232,"context_line":"    vnic_type \u003d sa.Column(sa.String(64), nullable\u003dTrue)"},{"line_number":233,"context_line":""},{"line_number":234,"context_line":"    _tags \u003d orm.relationship("},{"line_number":235,"context_line":"        \u0027Tags\u0027,"}],"source_content_type":"text/x-python","patch_set":4,"id":"8d677caf_8d765677","line":232,"range":{"start_line":232,"start_character":26,"end_line":232,"end_character":39},"in_reply_to":"b0903b8a_b1cba034","updated":"2024-08-22 06:20:25.000000000","message":"Nit: i\u0027m in favor of using DB enums to validate internal parameters in the Octavia DB model (like protocols, provisioning status, etc..) but IMHO it should not be required when the parameter is external (like in this case, it\u0027s a Neutron parameter)\n+1 for API validation","commit_id":"1ab809e0364c7f426fe9f622536d3d2532126406"}],"releasenotes/notes/Add-SR-IOV-support-for-member-ports-b78d55469303f258.yaml":[{"author":{"_account_id":34429,"name":"Tom Weininger","email":"dienste@weinimo.de","username":"tweining"},"change_message_id":"6f0040eeb4166c34699c850f89770ce2b806d306","unresolved":true,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Octavia Amphroa based load balancers now support using SR-IOV virtual"},{"line_number":5,"context_line":"    functions (VF) on the member ports."},{"line_number":6,"context_line":"upgrade:"},{"line_number":7,"context_line":"  - |"}],"source_content_type":"text/x-yaml","patch_set":20,"id":"846da0fc_56d72178","line":4,"range":{"start_line":4,"start_character":12,"end_line":4,"end_character":19},"updated":"2025-02-26 13:10:37.000000000","message":"typo","commit_id":"d650ab7722f379aabd5a8cedd300c3c7d843d7e0"}]}
