)]}'
{"doc/source/admin/ovn/features.rst":[{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"450a760493e18880b8118c8ebdb1e6ded5ed3227","unresolved":false,"context_lines":[{"line_number":46,"context_line":""},{"line_number":47,"context_line":"* Port Forwarding"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"  The ovn driver supports port forwarding as an extension of floating"},{"line_number":50,"context_line":"  ips. Enable the \u0027port_forwarding\u0027 service plugin in neutron configuration"},{"line_number":51,"context_line":"  files to use this feature."},{"line_number":52,"context_line":""}],"source_content_type":"text/x-rst","patch_set":26,"id":"ff570b3c_22a6f654","line":49,"range":{"start_line":49,"start_character":6,"end_line":49,"end_character":9},"updated":"2020-05-26 20:39:03.000000000","message":"s/OVN","commit_id":"07321830ebd119f44fe1674d9fde38da6e131379"},{"author":{"_account_id":11952,"name":"Flavio Fernandes","email":"flavio@flaviof.com","username":"ffernand"},"change_message_id":"9149745bd2ea8bd7099c00315f228b6de91463ba","unresolved":false,"context_lines":[{"line_number":46,"context_line":""},{"line_number":47,"context_line":"* Port Forwarding"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"  The ovn driver supports port forwarding as an extension of floating"},{"line_number":50,"context_line":"  ips. Enable the \u0027port_forwarding\u0027 service plugin in neutron configuration"},{"line_number":51,"context_line":"  files to use this feature."},{"line_number":52,"context_line":""}],"source_content_type":"text/x-rst","patch_set":26,"id":"ff570b3c_d138d8ef","line":49,"range":{"start_line":49,"start_character":6,"end_line":49,"end_character":9},"in_reply_to":"ff570b3c_22a6f654","updated":"2020-06-09 01:59:47.000000000","message":"Done","commit_id":"07321830ebd119f44fe1674d9fde38da6e131379"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"450a760493e18880b8118c8ebdb1e6ded5ed3227","unresolved":false,"context_lines":[{"line_number":47,"context_line":"* Port Forwarding"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"  The ovn driver supports port forwarding as an extension of floating"},{"line_number":50,"context_line":"  ips. Enable the \u0027port_forwarding\u0027 service plugin in neutron configuration"},{"line_number":51,"context_line":"  files to use this feature."},{"line_number":52,"context_line":""},{"line_number":53,"context_line":""}],"source_content_type":"text/x-rst","patch_set":26,"id":"ff570b3c_a26fa6fa","line":50,"range":{"start_line":50,"start_character":2,"end_line":50,"end_character":5},"updated":"2020-05-26 20:39:03.000000000","message":"s/IPs","commit_id":"07321830ebd119f44fe1674d9fde38da6e131379"},{"author":{"_account_id":11952,"name":"Flavio Fernandes","email":"flavio@flaviof.com","username":"ffernand"},"change_message_id":"9149745bd2ea8bd7099c00315f228b6de91463ba","unresolved":false,"context_lines":[{"line_number":47,"context_line":"* Port Forwarding"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"  The ovn driver supports port forwarding as an extension of floating"},{"line_number":50,"context_line":"  ips. Enable the \u0027port_forwarding\u0027 service plugin in neutron configuration"},{"line_number":51,"context_line":"  files to use this feature."},{"line_number":52,"context_line":""},{"line_number":53,"context_line":""}],"source_content_type":"text/x-rst","patch_set":26,"id":"ff570b3c_b13d64df","line":50,"range":{"start_line":50,"start_character":2,"end_line":50,"end_character":5},"in_reply_to":"ff570b3c_a26fa6fa","updated":"2020-06-09 01:59:47.000000000","message":"Done","commit_id":"07321830ebd119f44fe1674d9fde38da6e131379"}],"doc/source/ovn/gaps.rst":[{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"0855f2a0382c59452945af034bfc4630f36b8af7","unresolved":false,"context_lines":[{"line_number":45,"context_line":"----------"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":".. [1] https://github.com/ovn-org/ovn/blob/master/TODO.rst"},{"line_number":48,"context_line":".. [2] https://github.com/ovn-org/ovn/blob/master/ovn-nb.ovsschema#L160"},{"line_number":49,"context_line":".. [3] https://review.opendev.org/#/c/539826/"},{"line_number":50,"context_line":".. [4] https://github.com/openvswitch/ovs/commit/66d89287269ca7e2f7593af0920e910d7f9bcc38"},{"line_number":51,"context_line":".. [5] https://github.com/torvalds/linux/blob/master/net/openvswitch/meter.h"}],"source_content_type":"text/x-rst","patch_set":23,"id":"ff570b3c_0e16d449","line":48,"updated":"2020-05-20 23:25:01.000000000","message":"docs: Footnote [2] is not referenced.","commit_id":"a611b6443031a2d859f31c970cbb4fcc2674b56f"}],"doc/source/ovn/port_forwarding.rst":[{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"450a760493e18880b8118c8ebdb1e6ded5ed3227","unresolved":false,"context_lines":[{"line_number":71,"context_line":""},{"line_number":72,"context_line":""},{"line_number":73,"context_line":"OVN load balancer instances must have a unique name. Since we are using the"},{"line_number":74,"context_line":"Neutron’s floating ip as the name and there can be udp and tcp mappings for same FIP,"},{"line_number":75,"context_line":"the protocol is part of the name to ensure the uniqueness. The naming format is:"},{"line_number":76,"context_line":""},{"line_number":77,"context_line":"  .. code-block:: ini"}],"source_content_type":"text/x-rst","patch_set":26,"id":"ff570b3c_82c6e215","line":74,"range":{"start_line":74,"start_character":19,"end_line":74,"end_character":21},"updated":"2020-05-26 20:39:03.000000000","message":"s/IP","commit_id":"07321830ebd119f44fe1674d9fde38da6e131379"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"450a760493e18880b8118c8ebdb1e6ded5ed3227","unresolved":false,"context_lines":[{"line_number":71,"context_line":""},{"line_number":72,"context_line":""},{"line_number":73,"context_line":"OVN load balancer instances must have a unique name. Since we are using the"},{"line_number":74,"context_line":"Neutron’s floating ip as the name and there can be udp and tcp mappings for same FIP,"},{"line_number":75,"context_line":"the protocol is part of the name to ensure the uniqueness. The naming format is:"},{"line_number":76,"context_line":""},{"line_number":77,"context_line":"  .. code-block:: ini"}],"source_content_type":"text/x-rst","patch_set":26,"id":"ff570b3c_02dad2e7","line":74,"range":{"start_line":74,"start_character":51,"end_line":74,"end_character":62},"updated":"2020-05-26 20:39:03.000000000","message":"s/UDP and TCP","commit_id":"07321830ebd119f44fe1674d9fde38da6e131379"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"450a760493e18880b8118c8ebdb1e6ded5ed3227","unresolved":false,"context_lines":[{"line_number":71,"context_line":""},{"line_number":72,"context_line":""},{"line_number":73,"context_line":"OVN load balancer instances must have a unique name. Since we are using the"},{"line_number":74,"context_line":"Neutron’s floating ip as the name and there can be udp and tcp mappings for same FIP,"},{"line_number":75,"context_line":"the protocol is part of the name to ensure the uniqueness. The naming format is:"},{"line_number":76,"context_line":""},{"line_number":77,"context_line":"  .. code-block:: ini"}],"source_content_type":"text/x-rst","patch_set":26,"id":"ff570b3c_a2ecc68f","line":74,"range":{"start_line":74,"start_character":81,"end_line":74,"end_character":84},"updated":"2020-05-26 20:39:03.000000000","message":"s/floating IP\n\nSince FIP is only used in a couple of places","commit_id":"07321830ebd119f44fe1674d9fde38da6e131379"},{"author":{"_account_id":11952,"name":"Flavio Fernandes","email":"flavio@flaviof.com","username":"ffernand"},"change_message_id":"9149745bd2ea8bd7099c00315f228b6de91463ba","unresolved":false,"context_lines":[{"line_number":71,"context_line":""},{"line_number":72,"context_line":""},{"line_number":73,"context_line":"OVN load balancer instances must have a unique name. Since we are using the"},{"line_number":74,"context_line":"Neutron’s floating ip as the name and there can be udp and tcp mappings for same FIP,"},{"line_number":75,"context_line":"the protocol is part of the name to ensure the uniqueness. The naming format is:"},{"line_number":76,"context_line":""},{"line_number":77,"context_line":"  .. code-block:: ini"}],"source_content_type":"text/x-rst","patch_set":26,"id":"ff570b3c_dc358fdd","line":74,"range":{"start_line":74,"start_character":51,"end_line":74,"end_character":62},"in_reply_to":"ff570b3c_02dad2e7","updated":"2020-06-09 01:59:47.000000000","message":"Done","commit_id":"07321830ebd119f44fe1674d9fde38da6e131379"},{"author":{"_account_id":11952,"name":"Flavio Fernandes","email":"flavio@flaviof.com","username":"ffernand"},"change_message_id":"9149745bd2ea8bd7099c00315f228b6de91463ba","unresolved":false,"context_lines":[{"line_number":71,"context_line":""},{"line_number":72,"context_line":""},{"line_number":73,"context_line":"OVN load balancer instances must have a unique name. Since we are using the"},{"line_number":74,"context_line":"Neutron’s floating ip as the name and there can be udp and tcp mappings for same FIP,"},{"line_number":75,"context_line":"the protocol is part of the name to ensure the uniqueness. The naming format is:"},{"line_number":76,"context_line":""},{"line_number":77,"context_line":"  .. code-block:: ini"}],"source_content_type":"text/x-rst","patch_set":26,"id":"ff570b3c_3c33ebf8","line":74,"range":{"start_line":74,"start_character":19,"end_line":74,"end_character":21},"in_reply_to":"ff570b3c_82c6e215","updated":"2020-06-09 01:59:47.000000000","message":"Done","commit_id":"07321830ebd119f44fe1674d9fde38da6e131379"},{"author":{"_account_id":11952,"name":"Flavio Fernandes","email":"flavio@flaviof.com","username":"ffernand"},"change_message_id":"9149745bd2ea8bd7099c00315f228b6de91463ba","unresolved":false,"context_lines":[{"line_number":71,"context_line":""},{"line_number":72,"context_line":""},{"line_number":73,"context_line":"OVN load balancer instances must have a unique name. Since we are using the"},{"line_number":74,"context_line":"Neutron’s floating ip as the name and there can be udp and tcp mappings for same FIP,"},{"line_number":75,"context_line":"the protocol is part of the name to ensure the uniqueness. The naming format is:"},{"line_number":76,"context_line":""},{"line_number":77,"context_line":"  .. code-block:: ini"}],"source_content_type":"text/x-rst","patch_set":26,"id":"ff570b3c_5c4fbf69","line":74,"range":{"start_line":74,"start_character":81,"end_line":74,"end_character":84},"in_reply_to":"ff570b3c_a2ecc68f","updated":"2020-06-09 01:59:47.000000000","message":"Done","commit_id":"07321830ebd119f44fe1674d9fde38da6e131379"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"450a760493e18880b8118c8ebdb1e6ded5ed3227","unresolved":false,"context_lines":[{"line_number":80,"context_line":""},{"line_number":81,"context_line":"External ids of the load balancer entries will be leveraged for mapping between Neutron and OVN,"},{"line_number":82,"context_line":"including the neutron:revision_number. This revision number will be synchronized after the revision"},{"line_number":83,"context_line":"number of the corresponding floating ip (NOT the port forwarding!) in the Neutron database."},{"line_number":84,"context_line":"Maintenance task will be aware of the mapping that exists between FIP and LB. In order to"},{"line_number":85,"context_line":"differentiate a load balancer entry hat was created by port forwarding vs load balancer entries"},{"line_number":86,"context_line":"created by ovn-octavia-provider, the external_ids will also contain an owner field:"}],"source_content_type":"text/x-rst","patch_set":26,"id":"ff570b3c_829422ea","line":83,"range":{"start_line":83,"start_character":37,"end_line":83,"end_character":39},"updated":"2020-05-26 20:39:03.000000000","message":"s/IP","commit_id":"07321830ebd119f44fe1674d9fde38da6e131379"},{"author":{"_account_id":11952,"name":"Flavio Fernandes","email":"flavio@flaviof.com","username":"ffernand"},"change_message_id":"9149745bd2ea8bd7099c00315f228b6de91463ba","unresolved":false,"context_lines":[{"line_number":80,"context_line":""},{"line_number":81,"context_line":"External ids of the load balancer entries will be leveraged for mapping between Neutron and OVN,"},{"line_number":82,"context_line":"including the neutron:revision_number. This revision number will be synchronized after the revision"},{"line_number":83,"context_line":"number of the corresponding floating ip (NOT the port forwarding!) in the Neutron database."},{"line_number":84,"context_line":"Maintenance task will be aware of the mapping that exists between FIP and LB. In order to"},{"line_number":85,"context_line":"differentiate a load balancer entry hat was created by port forwarding vs load balancer entries"},{"line_number":86,"context_line":"created by ovn-octavia-provider, the external_ids will also contain an owner field:"}],"source_content_type":"text/x-rst","patch_set":26,"id":"ff570b3c_bc541b00","line":83,"range":{"start_line":83,"start_character":37,"end_line":83,"end_character":39},"in_reply_to":"ff570b3c_829422ea","updated":"2020-06-09 01:59:47.000000000","message":"Done","commit_id":"07321830ebd119f44fe1674d9fde38da6e131379"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"450a760493e18880b8118c8ebdb1e6ded5ed3227","unresolved":false,"context_lines":[{"line_number":81,"context_line":"External ids of the load balancer entries will be leveraged for mapping between Neutron and OVN,"},{"line_number":82,"context_line":"including the neutron:revision_number. This revision number will be synchronized after the revision"},{"line_number":83,"context_line":"number of the corresponding floating ip (NOT the port forwarding!) in the Neutron database."},{"line_number":84,"context_line":"Maintenance task will be aware of the mapping that exists between FIP and LB. In order to"},{"line_number":85,"context_line":"differentiate a load balancer entry hat was created by port forwarding vs load balancer entries"},{"line_number":86,"context_line":"created by ovn-octavia-provider, the external_ids will also contain an owner field:"},{"line_number":87,"context_line":""}],"source_content_type":"text/x-rst","patch_set":26,"id":"ff570b3c_c2b73a86","line":84,"range":{"start_line":84,"start_character":66,"end_line":84,"end_character":76},"updated":"2020-05-26 20:39:03.000000000","message":"s/Floating IP and load balancer\n\n(or whatever capitalization you used elsewhere for LB)","commit_id":"07321830ebd119f44fe1674d9fde38da6e131379"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"450a760493e18880b8118c8ebdb1e6ded5ed3227","unresolved":false,"context_lines":[{"line_number":81,"context_line":"External ids of the load balancer entries will be leveraged for mapping between Neutron and OVN,"},{"line_number":82,"context_line":"including the neutron:revision_number. This revision number will be synchronized after the revision"},{"line_number":83,"context_line":"number of the corresponding floating ip (NOT the port forwarding!) in the Neutron database."},{"line_number":84,"context_line":"Maintenance task will be aware of the mapping that exists between FIP and LB. In order to"},{"line_number":85,"context_line":"differentiate a load balancer entry hat was created by port forwarding vs load balancer entries"},{"line_number":86,"context_line":"created by ovn-octavia-provider, the external_ids will also contain an owner field:"},{"line_number":87,"context_line":""}],"source_content_type":"text/x-rst","patch_set":26,"id":"ff570b3c_a2a16649","line":84,"range":{"start_line":84,"start_character":0,"end_line":84,"end_character":11},"updated":"2020-05-26 20:39:03.000000000","message":"s/The maintenance","commit_id":"07321830ebd119f44fe1674d9fde38da6e131379"},{"author":{"_account_id":11952,"name":"Flavio Fernandes","email":"flavio@flaviof.com","username":"ffernand"},"change_message_id":"9149745bd2ea8bd7099c00315f228b6de91463ba","unresolved":false,"context_lines":[{"line_number":81,"context_line":"External ids of the load balancer entries will be leveraged for mapping between Neutron and OVN,"},{"line_number":82,"context_line":"including the neutron:revision_number. This revision number will be synchronized after the revision"},{"line_number":83,"context_line":"number of the corresponding floating ip (NOT the port forwarding!) in the Neutron database."},{"line_number":84,"context_line":"Maintenance task will be aware of the mapping that exists between FIP and LB. In order to"},{"line_number":85,"context_line":"differentiate a load balancer entry hat was created by port forwarding vs load balancer entries"},{"line_number":86,"context_line":"created by ovn-octavia-provider, the external_ids will also contain an owner field:"},{"line_number":87,"context_line":""}],"source_content_type":"text/x-rst","patch_set":26,"id":"ff570b3c_fc3df3bc","line":84,"range":{"start_line":84,"start_character":0,"end_line":84,"end_character":11},"in_reply_to":"ff570b3c_a2a16649","updated":"2020-06-09 01:59:47.000000000","message":"Done","commit_id":"07321830ebd119f44fe1674d9fde38da6e131379"},{"author":{"_account_id":11952,"name":"Flavio Fernandes","email":"flavio@flaviof.com","username":"ffernand"},"change_message_id":"9149745bd2ea8bd7099c00315f228b6de91463ba","unresolved":false,"context_lines":[{"line_number":81,"context_line":"External ids of the load balancer entries will be leveraged for mapping between Neutron and OVN,"},{"line_number":82,"context_line":"including the neutron:revision_number. This revision number will be synchronized after the revision"},{"line_number":83,"context_line":"number of the corresponding floating ip (NOT the port forwarding!) in the Neutron database."},{"line_number":84,"context_line":"Maintenance task will be aware of the mapping that exists between FIP and LB. In order to"},{"line_number":85,"context_line":"differentiate a load balancer entry hat was created by port forwarding vs load balancer entries"},{"line_number":86,"context_line":"created by ovn-octavia-provider, the external_ids will also contain an owner field:"},{"line_number":87,"context_line":""}],"source_content_type":"text/x-rst","patch_set":26,"id":"ff570b3c_dc3aafc2","line":84,"range":{"start_line":84,"start_character":66,"end_line":84,"end_character":76},"in_reply_to":"ff570b3c_c2b73a86","updated":"2020-06-09 01:59:47.000000000","message":"Done","commit_id":"07321830ebd119f44fe1674d9fde38da6e131379"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"450a760493e18880b8118c8ebdb1e6ded5ed3227","unresolved":false,"context_lines":[{"line_number":82,"context_line":"including the neutron:revision_number. This revision number will be synchronized after the revision"},{"line_number":83,"context_line":"number of the corresponding floating ip (NOT the port forwarding!) in the Neutron database."},{"line_number":84,"context_line":"Maintenance task will be aware of the mapping that exists between FIP and LB. In order to"},{"line_number":85,"context_line":"differentiate a load balancer entry hat was created by port forwarding vs load balancer entries"},{"line_number":86,"context_line":"created by ovn-octavia-provider, the external_ids will also contain an owner field:"},{"line_number":87,"context_line":""},{"line_number":88,"context_line":"  .. code-block:: python"}],"source_content_type":"text/x-rst","patch_set":26,"id":"ff570b3c_02b13290","line":85,"range":{"start_line":85,"start_character":36,"end_line":85,"end_character":39},"updated":"2020-05-26 20:39:03.000000000","message":"s/that","commit_id":"07321830ebd119f44fe1674d9fde38da6e131379"},{"author":{"_account_id":11952,"name":"Flavio Fernandes","email":"flavio@flaviof.com","username":"ffernand"},"change_message_id":"9149745bd2ea8bd7099c00315f228b6de91463ba","unresolved":false,"context_lines":[{"line_number":82,"context_line":"including the neutron:revision_number. This revision number will be synchronized after the revision"},{"line_number":83,"context_line":"number of the corresponding floating ip (NOT the port forwarding!) in the Neutron database."},{"line_number":84,"context_line":"Maintenance task will be aware of the mapping that exists between FIP and LB. In order to"},{"line_number":85,"context_line":"differentiate a load balancer entry hat was created by port forwarding vs load balancer entries"},{"line_number":86,"context_line":"created by ovn-octavia-provider, the external_ids will also contain an owner field:"},{"line_number":87,"context_line":""},{"line_number":88,"context_line":"  .. code-block:: python"}],"source_content_type":"text/x-rst","patch_set":26,"id":"ff570b3c_1c454744","line":85,"range":{"start_line":85,"start_character":36,"end_line":85,"end_character":39},"in_reply_to":"ff570b3c_02b13290","updated":"2020-06-09 01:59:47.000000000","message":"Done","commit_id":"07321830ebd119f44fe1674d9fde38da6e131379"}],"neutron/common/ovn/extensions.py":[{"author":{"_account_id":11952,"name":"Flavio Fernandes","email":"flavio@flaviof.com","username":"ffernand"},"change_message_id":"1097337a9c589ac234ba2147ef2e2f21560bb361","unresolved":false,"context_lines":[{"line_number":54,"context_line":"    \u0027standard-attr-timestamp\u0027,"},{"line_number":55,"context_line":"    \u0027trunk\u0027,"},{"line_number":56,"context_line":"    \u0027quota_details\u0027,"},{"line_number":57,"context_line":"    \u0027port_forwarding\u0027,"},{"line_number":58,"context_line":"]"}],"source_content_type":"text/x-python","patch_set":3,"id":"1f493fa4_42c8eb20","line":57,"range":{"start_line":57,"start_character":5,"end_line":57,"end_character":20},"updated":"2020-04-28 16:16:26.000000000","message":"Maybe this should be part of: ML2_SUPPORTED_API_EXTENSIONS_OVN_L3  ?","commit_id":"cb647f246f7ab0afa0a215bbd99439591f45cd6d"},{"author":{"_account_id":24791,"name":"Maciej Jozefczyk","email":"jeicam.pl@gmail.com","username":"maciej.jozefczyk"},"change_message_id":"33ba3e23040c9bbd36dd3bed88ae3be45c0331e1","unresolved":false,"context_lines":[{"line_number":54,"context_line":"    \u0027standard-attr-timestamp\u0027,"},{"line_number":55,"context_line":"    \u0027trunk\u0027,"},{"line_number":56,"context_line":"    \u0027quota_details\u0027,"},{"line_number":57,"context_line":"    \u0027port_forwarding\u0027,"},{"line_number":58,"context_line":"]"}],"source_content_type":"text/x-python","patch_set":3,"id":"1f493fa4_72fb1ec0","line":57,"range":{"start_line":57,"start_character":5,"end_line":57,"end_character":20},"in_reply_to":"1f493fa4_26a4c007","updated":"2020-04-29 12:04:45.000000000","message":"We\u0027re still using it (ML2_SUPPORTED_API_EXTENSIONS_OVN_L3) from here:\n\nhttps://github.com/openstack/neutron/blob/master/neutron/services/ovn_l3/plugin.py#L62\n\nSo I think it should stay. I think also that port-forwarding is L3 feature so it should go to the ML2_SUPPORTED_API_EXTENSIONS_OVN_L3, no?","commit_id":"cb647f246f7ab0afa0a215bbd99439591f45cd6d"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"ba3b046b78d703ce9e8c68d890b0d1a960d854b0","unresolved":false,"context_lines":[{"line_number":54,"context_line":"    \u0027standard-attr-timestamp\u0027,"},{"line_number":55,"context_line":"    \u0027trunk\u0027,"},{"line_number":56,"context_line":"    \u0027quota_details\u0027,"},{"line_number":57,"context_line":"    \u0027port_forwarding\u0027,"},{"line_number":58,"context_line":"]"}],"source_content_type":"text/x-python","patch_set":3,"id":"1f493fa4_26a4c007","line":57,"range":{"start_line":57,"start_character":5,"end_line":57,"end_character":20},"in_reply_to":"1f493fa4_42c8eb20","updated":"2020-04-29 08:50:13.000000000","message":"Should be fine, honestly we should merge these two lists","commit_id":"cb647f246f7ab0afa0a215bbd99439591f45cd6d"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"450a760493e18880b8118c8ebdb1e6ded5ed3227","unresolved":false,"context_lines":[{"line_number":54,"context_line":"    \u0027standard-attr-timestamp\u0027,"},{"line_number":55,"context_line":"    \u0027trunk\u0027,"},{"line_number":56,"context_line":"    \u0027quota_details\u0027,"},{"line_number":57,"context_line":"    \u0027port_forwarding\u0027,"},{"line_number":58,"context_line":"]"}],"source_content_type":"text/x-python","patch_set":26,"id":"ff570b3c_424faabc","line":57,"updated":"2020-05-26 20:39:03.000000000","message":"Super nit: strange this and above are *almost* alphabetical :)","commit_id":"07321830ebd119f44fe1674d9fde38da6e131379"},{"author":{"_account_id":11952,"name":"Flavio Fernandes","email":"flavio@flaviof.com","username":"ffernand"},"change_message_id":"9149745bd2ea8bd7099c00315f228b6de91463ba","unresolved":false,"context_lines":[{"line_number":54,"context_line":"    \u0027standard-attr-timestamp\u0027,"},{"line_number":55,"context_line":"    \u0027trunk\u0027,"},{"line_number":56,"context_line":"    \u0027quota_details\u0027,"},{"line_number":57,"context_line":"    \u0027port_forwarding\u0027,"},{"line_number":58,"context_line":"]"}],"source_content_type":"text/x-python","patch_set":26,"id":"ff570b3c_02c31c8c","line":57,"in_reply_to":"ff570b3c_424faabc","updated":"2020-06-09 01:59:47.000000000","message":"ha! I swear I just appended to the list! ;^)","commit_id":"07321830ebd119f44fe1674d9fde38da6e131379"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"1485411ed3ac489383d68bff509cb1ea8030b6a8","unresolved":false,"context_lines":[{"line_number":25,"context_line":"    \u0027pagination\u0027,"},{"line_number":26,"context_line":"    \u0027sorting\u0027,"},{"line_number":27,"context_line":"    \u0027project-id\u0027,"},{"line_number":28,"context_line":"    \u0027dns-integration\u0027,"},{"line_number":29,"context_line":"]"},{"line_number":30,"context_line":"ML2_SUPPORTED_API_EXTENSIONS \u003d ["},{"line_number":31,"context_line":"    \u0027address-scope\u0027,"}],"source_content_type":"text/x-python","patch_set":35,"id":"bf51134e_ccda5676","line":28,"updated":"2020-06-24 14:50:16.000000000","message":"I think this extension should be here","commit_id":"c12d0198abf407ffea97ef55b30f6910c5fc5be8"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"ea5d00675b53b7983485ff6c2bf574c38b30c877","unresolved":false,"context_lines":[{"line_number":54,"context_line":"    \u0027standard-attr-timestamp\u0027,"},{"line_number":55,"context_line":"    \u0027trunk\u0027,"},{"line_number":56,"context_line":"    \u0027quota_details\u0027,"},{"line_number":57,"context_line":"    \u0027port_forwarding\u0027,"},{"line_number":58,"context_line":"]"}],"source_content_type":"text/x-python","patch_set":35,"id":"bf51134e_2c6b1285","line":57,"updated":"2020-06-24 14:54:13.000000000","message":"Also, I think it would be a good practice to start using the constant alias for the extensions instead of copying the name here, e.g: https://github.com/openstack/neutron-lib/blob/8dc31ec5f2db6e6ff5b2b4d4a27c239de5e12cfb/neutron_lib/api/definitions/floating_ip_port_forwarding.py#L24\n\nI am doing this in another patch of mine, for reference: https://review.opendev.org/#/c/727791/12/neutron/common/ovn/extensions.py","commit_id":"c12d0198abf407ffea97ef55b30f6910c5fc5be8"}],"neutron/plugins/ml2/drivers/ovn/mech_driver/mech_driver.py":[{"author":{"_account_id":11952,"name":"Flavio Fernandes","email":"flavio@flaviof.com","username":"ffernand"},"change_message_id":"1097337a9c589ac234ba2147ef2e2f21560bb361","unresolved":false,"context_lines":[{"line_number":117,"context_line":"        self.subscribe()"},{"line_number":118,"context_line":"        self.qos_driver \u003d qos_driver.OVNQosDriver.create(self)"},{"line_number":119,"context_line":"        self.trunk_driver \u003d trunk_driver.OVNTrunkDriver.create(self)"},{"line_number":120,"context_line":"        self.port_forwarding \u003d port_forwarding.OVNPortForwarding.create(self)"},{"line_number":121,"context_line":""},{"line_number":122,"context_line":"    @property"},{"line_number":123,"context_line":"    def _plugin(self):"}],"source_content_type":"text/x-python","patch_set":3,"id":"1f493fa4_c204fb4c","line":120,"range":{"start_line":120,"start_character":13,"end_line":120,"end_character":28},"updated":"2020-04-28 16:16:26.000000000","message":"is this the right place for allocating OVNPortForwarding ?","commit_id":"cb647f246f7ab0afa0a215bbd99439591f45cd6d"},{"author":{"_account_id":24791,"name":"Maciej Jozefczyk","email":"jeicam.pl@gmail.com","username":"maciej.jozefczyk"},"change_message_id":"33ba3e23040c9bbd36dd3bed88ae3be45c0331e1","unresolved":false,"context_lines":[{"line_number":117,"context_line":"        self.subscribe()"},{"line_number":118,"context_line":"        self.qos_driver \u003d qos_driver.OVNQosDriver.create(self)"},{"line_number":119,"context_line":"        self.trunk_driver \u003d trunk_driver.OVNTrunkDriver.create(self)"},{"line_number":120,"context_line":"        self.port_forwarding \u003d port_forwarding.OVNPortForwarding.create(self)"},{"line_number":121,"context_line":""},{"line_number":122,"context_line":"    @property"},{"line_number":123,"context_line":"    def _plugin(self):"}],"source_content_type":"text/x-python","patch_set":3,"id":"1f493fa4_12861a14","line":120,"range":{"start_line":120,"start_character":13,"end_line":120,"end_character":28},"in_reply_to":"1f493fa4_c204fb4c","updated":"2020-04-29 12:04:45.000000000","message":"I may be wrong, but I think we need to initialize it in\n \n./neutron/services/ovn_l3/plugin.py","commit_id":"cb647f246f7ab0afa0a215bbd99439591f45cd6d"}],"neutron/plugins/ml2/drivers/ovn/mech_driver/ovsdb/api.py":[{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"450a760493e18880b8118c8ebdb1e6ded5ed3227","unresolved":false,"context_lines":[{"line_number":625,"context_line":"        \"\"\""},{"line_number":626,"context_line":""},{"line_number":627,"context_line":"    @abc.abstractmethod"},{"line_number":628,"context_line":"    def update_pf_external_ids(self, lb_name, values, if_exists\u003dTrue):"},{"line_number":629,"context_line":"        \"\"\"Set the external_ids field of a given Load Balancer."},{"line_number":630,"context_line":""},{"line_number":631,"context_line":"        :param lb_name:         The name of the load_balancer"}],"source_content_type":"text/x-python","patch_set":26,"id":"ff570b3c_a25e8673","line":628,"updated":"2020-05-26 20:39:03.000000000","message":"Should this method name have an \u0027lb\u0027 somewhere in it to specify it\u0027s for load balancers?","commit_id":"07321830ebd119f44fe1674d9fde38da6e131379"},{"author":{"_account_id":11952,"name":"Flavio Fernandes","email":"flavio@flaviof.com","username":"ffernand"},"change_message_id":"9149745bd2ea8bd7099c00315f228b6de91463ba","unresolved":false,"context_lines":[{"line_number":625,"context_line":"        \"\"\""},{"line_number":626,"context_line":""},{"line_number":627,"context_line":"    @abc.abstractmethod"},{"line_number":628,"context_line":"    def update_pf_external_ids(self, lb_name, values, if_exists\u003dTrue):"},{"line_number":629,"context_line":"        \"\"\"Set the external_ids field of a given Load Balancer."},{"line_number":630,"context_line":""},{"line_number":631,"context_line":"        :param lb_name:         The name of the load_balancer"}],"source_content_type":"text/x-python","patch_set":26,"id":"ff570b3c_8cdf09d5","line":628,"in_reply_to":"ff570b3c_a25e8673","updated":"2020-06-09 01:59:47.000000000","message":"indeed. I think it is generic enough to be for any lb too. So, I\u0027m going to add the lb and drop the pf. ;)\nDone.","commit_id":"07321830ebd119f44fe1674d9fde38da6e131379"}],"neutron/plugins/ml2/drivers/ovn/mech_driver/ovsdb/impl_idl_ovn.py":[{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"450a760493e18880b8118c8ebdb1e6ded5ed3227","unresolved":false,"context_lines":[{"line_number":645,"context_line":"            \u0027external_ids\u0027, \u0027\u003d\u0027, {ovn_const.OVN_FIP_EXT_ID_KEY: fip_id}))"},{"line_number":646,"context_line":"        result \u003d fip.execute(check_error\u003dTrue)"},{"line_number":647,"context_line":"        if not result:"},{"line_number":648,"context_line":"            return"},{"line_number":649,"context_line":"        # Check revision numbers of entries found. If they are not"},{"line_number":650,"context_line":"        # the same, then an update is needed."},{"line_number":651,"context_line":"        prev_ovn_revision \u003d None"}],"source_content_type":"text/x-python","patch_set":26,"id":"ff570b3c_821382b8","line":648,"updated":"2020-05-26 20:39:03.000000000","message":"So does a zero/[] return value signify there wasn\u0027t an entry?  It doesn\u0027t raise with check_error\u003dTrue?","commit_id":"07321830ebd119f44fe1674d9fde38da6e131379"},{"author":{"_account_id":11952,"name":"Flavio Fernandes","email":"flavio@flaviof.com","username":"ffernand"},"change_message_id":"9149745bd2ea8bd7099c00315f228b6de91463ba","unresolved":false,"context_lines":[{"line_number":645,"context_line":"            \u0027external_ids\u0027, \u0027\u003d\u0027, {ovn_const.OVN_FIP_EXT_ID_KEY: fip_id}))"},{"line_number":646,"context_line":"        result \u003d fip.execute(check_error\u003dTrue)"},{"line_number":647,"context_line":"        if not result:"},{"line_number":648,"context_line":"            return"},{"line_number":649,"context_line":"        # Check revision numbers of entries found. If they are not"},{"line_number":650,"context_line":"        # the same, then an update is needed."},{"line_number":651,"context_line":"        prev_ovn_revision \u003d None"}],"source_content_type":"text/x-python","patch_set":26,"id":"ff570b3c_cc9741eb","line":648,"in_reply_to":"ff570b3c_821382b8","updated":"2020-06-09 01:59:47.000000000","message":"Yeah, it is possible to not find anything and None is a valid return value. This is pretty much modeled after what get_floatingip() below -- line 660 -- does.","commit_id":"07321830ebd119f44fe1674d9fde38da6e131379"},{"author":{"_account_id":11952,"name":"Flavio Fernandes","email":"flavio@flaviof.com","username":"ffernand"},"change_message_id":"db479954726895d37a3a91558dfdd29a49845b15","unresolved":false,"context_lines":[{"line_number":776,"context_line":"        return cmd.UnsetLSwitchPortToVirtualTypeCommand("},{"line_number":777,"context_line":"            self, lport_name, virtual_parent, if_exists)"},{"line_number":778,"context_line":""},{"line_number":779,"context_line":"    def update_lb_external_ids(self, lb_name, values, if_exists\u003dTrue):"},{"line_number":780,"context_line":"        return cmd.UpdateLbExternalIds(self, lb_name, values, if_exists)"},{"line_number":781,"context_line":""},{"line_number":782,"context_line":""},{"line_number":783,"context_line":"class OvsdbSbOvnIdl(sb_impl_idl.OvnSbApiIdlImpl, Backend):"}],"source_content_type":"text/x-python","patch_set":30,"id":"ff570b3c_2271000e","line":780,"range":{"start_line":779,"start_character":4,"end_line":780,"end_character":72},"updated":"2020-06-09 02:03:40.000000000","message":"let\u0027s move this up to be together with the other new functions.","commit_id":"a79d2c57046b077c4ec4def9544a9710f93e8bcd"}],"neutron/plugins/ml2/drivers/ovn/mech_driver/ovsdb/ovn_client.py":[{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"450a760493e18880b8118c8ebdb1e6ded5ed3227","unresolved":false,"context_lines":[{"line_number":740,"context_line":"        # to do here."},{"line_number":741,"context_line":"        if floatingip[\u0027fixed_ip_address\u0027] is None:"},{"line_number":742,"context_line":"            LOG.debug(\"Skipping NAT for floating ip %(id)s, external ip\""},{"line_number":743,"context_line":"                      \" %(fip_ip)s on router %(rtr_id)s: no logical_ip\","},{"line_number":744,"context_line":"                      {\u0027id\u0027: floatingip[\u0027id\u0027],"},{"line_number":745,"context_line":"                       \u0027fip_ip\u0027: floatingip[\u0027floating_ip_address\u0027],"},{"line_number":746,"context_line":"                       \u0027rtr_id\u0027: router_id})"}],"source_content_type":"text/x-python","patch_set":26,"id":"ff570b3c_6208ee90","line":743,"range":{"start_line":743,"start_character":23,"end_line":743,"end_character":24},"updated":"2020-05-26 20:39:03.000000000","message":"nit: other places in this file have the trailing space on the previous line","commit_id":"07321830ebd119f44fe1674d9fde38da6e131379"},{"author":{"_account_id":11952,"name":"Flavio Fernandes","email":"flavio@flaviof.com","username":"ffernand"},"change_message_id":"9149745bd2ea8bd7099c00315f228b6de91463ba","unresolved":false,"context_lines":[{"line_number":740,"context_line":"        # to do here."},{"line_number":741,"context_line":"        if floatingip[\u0027fixed_ip_address\u0027] is None:"},{"line_number":742,"context_line":"            LOG.debug(\"Skipping NAT for floating ip %(id)s, external ip\""},{"line_number":743,"context_line":"                      \" %(fip_ip)s on router %(rtr_id)s: no logical_ip\","},{"line_number":744,"context_line":"                      {\u0027id\u0027: floatingip[\u0027id\u0027],"},{"line_number":745,"context_line":"                       \u0027fip_ip\u0027: floatingip[\u0027floating_ip_address\u0027],"},{"line_number":746,"context_line":"                       \u0027rtr_id\u0027: router_id})"}],"source_content_type":"text/x-python","patch_set":26,"id":"ff570b3c_42bd1401","line":743,"range":{"start_line":743,"start_character":23,"end_line":743,"end_character":24},"in_reply_to":"ff570b3c_6208ee90","updated":"2020-06-09 01:59:47.000000000","message":"Done","commit_id":"07321830ebd119f44fe1674d9fde38da6e131379"}],"neutron/services/ovn_l3/plugin.py":[{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"450a760493e18880b8118c8ebdb1e6ded5ed3227","unresolved":false,"context_lines":[{"line_number":72,"context_line":"        self._mech \u003d None"},{"line_number":73,"context_line":"        self._ovn_client_inst \u003d None"},{"line_number":74,"context_line":"        self.scheduler \u003d l3_ovn_scheduler.get_scheduler()"},{"line_number":75,"context_line":"        self.port_forwarding \u003d port_forwarding.OVNPortForwarding.create(self)"},{"line_number":76,"context_line":"        self._register_precommit_callbacks()"},{"line_number":77,"context_line":""},{"line_number":78,"context_line":"    def _register_precommit_callbacks(self):"}],"source_content_type":"text/x-python","patch_set":26,"id":"ff570b3c_22c0b62a","line":75,"range":{"start_line":75,"start_character":64,"end_line":75,"end_character":71},"updated":"2020-05-26 20:39:03.000000000","message":"This should be just the class and not \u0027create\u0027","commit_id":"07321830ebd119f44fe1674d9fde38da6e131379"},{"author":{"_account_id":11952,"name":"Flavio Fernandes","email":"flavio@flaviof.com","username":"ffernand"},"change_message_id":"9149745bd2ea8bd7099c00315f228b6de91463ba","unresolved":false,"context_lines":[{"line_number":72,"context_line":"        self._mech \u003d None"},{"line_number":73,"context_line":"        self._ovn_client_inst \u003d None"},{"line_number":74,"context_line":"        self.scheduler \u003d l3_ovn_scheduler.get_scheduler()"},{"line_number":75,"context_line":"        self.port_forwarding \u003d port_forwarding.OVNPortForwarding.create(self)"},{"line_number":76,"context_line":"        self._register_precommit_callbacks()"},{"line_number":77,"context_line":""},{"line_number":78,"context_line":"    def _register_precommit_callbacks(self):"}],"source_content_type":"text/x-python","patch_set":26,"id":"ff570b3c_acabed1a","line":75,"range":{"start_line":75,"start_character":64,"end_line":75,"end_character":71},"in_reply_to":"ff570b3c_22c0b62a","updated":"2020-06-09 01:59:47.000000000","message":"ack. Will change that.","commit_id":"07321830ebd119f44fe1674d9fde38da6e131379"}],"neutron/services/portforwarding/ovn/__init__.py":[{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"95fc7a19497af32c7b7190c8dc81e9080278f817","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":13,"id":"ff570b3c_50f5d0ca","line":1,"updated":"2020-05-12 01:45:27.000000000","message":"This location makes sense to me. All port forwarding main stuffs can be found in same parent path.","commit_id":"dd8deadcefc10d9e9a58710f03cd796364a17053"},{"author":{"_account_id":11952,"name":"Flavio Fernandes","email":"flavio@flaviof.com","username":"ffernand"},"change_message_id":"061e6c11cb95bd88a2619c157a181463365ad767","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":13,"id":"ff570b3c_d1bb9fe2","line":1,"in_reply_to":"ff570b3c_50f5d0ca","updated":"2020-05-12 09:00:26.000000000","message":"Great. Thanks LIU! I will make sure to include you on updates as I progress with this implementation.","commit_id":"dd8deadcefc10d9e9a58710f03cd796364a17053"}],"neutron/services/portforwarding/ovn/port_forwarding.py":[{"author":{"_account_id":24791,"name":"Maciej Jozefczyk","email":"jeicam.pl@gmail.com","username":"maciej.jozefczyk"},"change_message_id":"33ba3e23040c9bbd36dd3bed88ae3be45c0331e1","unresolved":false,"context_lines":[{"line_number":1,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":2,"context_line":"#    not use this file except in compliance with the License. You may obtain"},{"line_number":3,"context_line":"#    a copy of the License at"},{"line_number":4,"context_line":"#"}],"source_content_type":"text/x-python","patch_set":3,"id":"1f493fa4_d2bdd2b7","line":1,"updated":"2020-04-29 12:04:45.000000000","message":"I don\u0027t know if this should be there, or go somewhere to ovn_l3? like ./neutron/services/ovn_l3/extensions ?","commit_id":"cb647f246f7ab0afa0a215bbd99439591f45cd6d"},{"author":{"_account_id":11952,"name":"Flavio Fernandes","email":"flavio@flaviof.com","username":"ffernand"},"change_message_id":"1097337a9c589ac234ba2147ef2e2f21560bb361","unresolved":false,"context_lines":[{"line_number":34,"context_line":"                 router_id, port_forwarding)"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"class OVNPortForwarding(object):"},{"line_number":38,"context_line":"    SUPPORTED_RESOURCE_TYPES \u003d [resources.PORTFORWARDING]"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"    def __init__(self, plugin_driver):"}],"source_content_type":"text/x-python","patch_set":3,"id":"1f493fa4_0290a3ec","line":37,"range":{"start_line":37,"start_character":6,"end_line":37,"end_character":23},"updated":"2020-04-28 16:16:26.000000000","message":"is there a driver base or something better than object?\nis this a good name?","commit_id":"cb647f246f7ab0afa0a215bbd99439591f45cd6d"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"ba3b046b78d703ce9e8c68d890b0d1a960d854b0","unresolved":false,"context_lines":[{"line_number":34,"context_line":"                 router_id, port_forwarding)"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"class OVNPortForwarding(object):"},{"line_number":38,"context_line":"    SUPPORTED_RESOURCE_TYPES \u003d [resources.PORTFORWARDING]"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"    def __init__(self, plugin_driver):"}],"source_content_type":"text/x-python","patch_set":3,"id":"1f493fa4_6624085f","line":37,"range":{"start_line":37,"start_character":6,"end_line":37,"end_character":23},"in_reply_to":"1f493fa4_0290a3ec","updated":"2020-04-29 08:50:13.000000000","message":"Sounds like a good name :D","commit_id":"cb647f246f7ab0afa0a215bbd99439591f45cd6d"},{"author":{"_account_id":24791,"name":"Maciej Jozefczyk","email":"jeicam.pl@gmail.com","username":"maciej.jozefczyk"},"change_message_id":"33ba3e23040c9bbd36dd3bed88ae3be45c0331e1","unresolved":false,"context_lines":[{"line_number":34,"context_line":"                 router_id, port_forwarding)"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"class OVNPortForwarding(object):"},{"line_number":38,"context_line":"    SUPPORTED_RESOURCE_TYPES \u003d [resources.PORTFORWARDING]"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"    def __init__(self, plugin_driver):"}],"source_content_type":"text/x-python","patch_set":3,"id":"1f493fa4_b2abe672","line":37,"range":{"start_line":37,"start_character":6,"end_line":37,"end_character":23},"in_reply_to":"1f493fa4_6624085f","updated":"2020-04-29 12:04:45.000000000","message":"what about this one? PortForwardingPlugin\n./neutron/services/portforwarding/pf_plugin.py","commit_id":"cb647f246f7ab0afa0a215bbd99439591f45cd6d"},{"author":{"_account_id":11952,"name":"Flavio Fernandes","email":"flavio@flaviof.com","username":"ffernand"},"change_message_id":"1097337a9c589ac234ba2147ef2e2f21560bb361","unresolved":false,"context_lines":[{"line_number":46,"context_line":"        endpoints \u003d [resources_rpc.ResourcesPushRpcCallback()]"},{"line_number":47,"context_line":"        topic \u003d resources_rpc.resource_type_versioned_topic("},{"line_number":48,"context_line":"            resources.PORTFORWARDING)"},{"line_number":49,"context_line":"        self._connection.create_consumer(topic, endpoints, fanout\u003dTrue)"},{"line_number":50,"context_line":"        self._connection.consume_in_threads()"},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"    def _handle_notification(self, context, _resource_type, forwardings,"}],"source_content_type":"text/x-python","patch_set":3,"id":"1f493fa4_02e263a0","line":49,"range":{"start_line":49,"start_character":59,"end_line":49,"end_character":65},"updated":"2020-04-28 16:16:26.000000000","message":"should fanout be false?","commit_id":"cb647f246f7ab0afa0a215bbd99439591f45cd6d"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"ba3b046b78d703ce9e8c68d890b0d1a960d854b0","unresolved":false,"context_lines":[{"line_number":46,"context_line":"        endpoints \u003d [resources_rpc.ResourcesPushRpcCallback()]"},{"line_number":47,"context_line":"        topic \u003d resources_rpc.resource_type_versioned_topic("},{"line_number":48,"context_line":"            resources.PORTFORWARDING)"},{"line_number":49,"context_line":"        self._connection.create_consumer(topic, endpoints, fanout\u003dTrue)"},{"line_number":50,"context_line":"        self._connection.consume_in_threads()"},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"    def _handle_notification(self, context, _resource_type, forwardings,"}],"source_content_type":"text/x-python","patch_set":3,"id":"1f493fa4_8615d4e7","line":49,"range":{"start_line":49,"start_character":59,"end_line":49,"end_character":65},"in_reply_to":"1f493fa4_02e263a0","updated":"2020-04-29 08:50:13.000000000","message":"No idea, see comment below","commit_id":"cb647f246f7ab0afa0a215bbd99439591f45cd6d"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"ba3b046b78d703ce9e8c68d890b0d1a960d854b0","unresolved":false,"context_lines":[{"line_number":47,"context_line":"        topic \u003d resources_rpc.resource_type_versioned_topic("},{"line_number":48,"context_line":"            resources.PORTFORWARDING)"},{"line_number":49,"context_line":"        self._connection.create_consumer(topic, endpoints, fanout\u003dTrue)"},{"line_number":50,"context_line":"        self._connection.consume_in_threads()"},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"    def _handle_notification(self, context, _resource_type, forwardings,"},{"line_number":53,"context_line":"                             event_type):"}],"source_content_type":"text/x-python","patch_set":3,"id":"1f493fa4_2627a066","line":50,"updated":"2020-04-29 08:50:13.000000000","message":"Hmm what\u0027s the RPC for ? I\u0027m asking coz at the moment none of the OVN services/agents requires RPC. It\u0027s a big dependency that we are adding.","commit_id":"cb647f246f7ab0afa0a215bbd99439591f45cd6d"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"f49d2a4e4a3f6a58044ce82179e56f69c1ba314e","unresolved":false,"context_lines":[{"line_number":42,"context_line":"        self._handler \u003d OVNPortForwardingHandler(plugin_driver)"},{"line_number":43,"context_line":"        if False:"},{"line_number":44,"context_line":"            self.resource_rpc \u003d resources_rpc.ResourcesPullRpcApi()"},{"line_number":45,"context_line":"            registry.register(self._handle_notification, resources.PORTFORWARDING)"},{"line_number":46,"context_line":"            self._connection \u003d n_rpc.Connection()"},{"line_number":47,"context_line":"            endpoints \u003d [resources_rpc.ResourcesPushRpcCallback()]"},{"line_number":48,"context_line":"            topic \u003d resources_rpc.resource_type_versioned_topic("}],"source_content_type":"text/x-python","patch_set":5,"id":"1f493fa4_893c9ce1","line":45,"updated":"2020-04-30 19:31:59.000000000","message":"pep8: E501 line too long (82 \u003e 79 characters)","commit_id":"9d0c647e1f078cef1b1751d85d48f8c60eddca8d"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"450a760493e18880b8118c8ebdb1e6ded5ed3227","unresolved":false,"context_lines":[{"line_number":24,"context_line":"from ovsdbapp import constants as const"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"LOG \u003d log.getLogger(__name__)"},{"line_number":27,"context_line":"PORT_FORWARDING_PREFIX \u003d \u0027pf-floatingip\u0027"},{"line_number":28,"context_line":"LB_PROTOCOL_MAP \u003d {\u0027udp\u0027: const.PROTO_UDP, \u0027tcp\u0027: const.PROTO_TCP}"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":""}],"source_content_type":"text/x-python","patch_set":26,"id":"ff570b3c_a2b4c6d2","line":27,"updated":"2020-05-26 20:39:03.000000000","message":"Is this in a constants file?","commit_id":"07321830ebd119f44fe1674d9fde38da6e131379"},{"author":{"_account_id":11952,"name":"Flavio Fernandes","email":"flavio@flaviof.com","username":"ffernand"},"change_message_id":"9149745bd2ea8bd7099c00315f228b6de91463ba","unresolved":false,"context_lines":[{"line_number":24,"context_line":"from ovsdbapp import constants as const"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"LOG \u003d log.getLogger(__name__)"},{"line_number":27,"context_line":"PORT_FORWARDING_PREFIX \u003d \u0027pf-floatingip\u0027"},{"line_number":28,"context_line":"LB_PROTOCOL_MAP \u003d {\u0027udp\u0027: const.PROTO_UDP, \u0027tcp\u0027: const.PROTO_TCP}"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":""}],"source_content_type":"text/x-python","patch_set":26,"id":"ff570b3c_e2c9c879","line":27,"in_reply_to":"ff570b3c_a2b4c6d2","updated":"2020-06-09 01:59:47.000000000","message":"Done","commit_id":"07321830ebd119f44fe1674d9fde38da6e131379"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"450a760493e18880b8118c8ebdb1e6ded5ed3227","unresolved":false,"context_lines":[{"line_number":25,"context_line":""},{"line_number":26,"context_line":"LOG \u003d log.getLogger(__name__)"},{"line_number":27,"context_line":"PORT_FORWARDING_PREFIX \u003d \u0027pf-floatingip\u0027"},{"line_number":28,"context_line":"LB_PROTOCOL_MAP \u003d {\u0027udp\u0027: const.PROTO_UDP, \u0027tcp\u0027: const.PROTO_TCP}"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"class OVNPortForwardingHandler(object):"}],"source_content_type":"text/x-python","patch_set":26,"id":"ff570b3c_02cbf252","line":28,"updated":"2020-05-26 20:39:03.000000000","message":"Same","commit_id":"07321830ebd119f44fe1674d9fde38da6e131379"},{"author":{"_account_id":11952,"name":"Flavio Fernandes","email":"flavio@flaviof.com","username":"ffernand"},"change_message_id":"9149745bd2ea8bd7099c00315f228b6de91463ba","unresolved":false,"context_lines":[{"line_number":25,"context_line":""},{"line_number":26,"context_line":"LOG \u003d log.getLogger(__name__)"},{"line_number":27,"context_line":"PORT_FORWARDING_PREFIX \u003d \u0027pf-floatingip\u0027"},{"line_number":28,"context_line":"LB_PROTOCOL_MAP \u003d {\u0027udp\u0027: const.PROTO_UDP, \u0027tcp\u0027: const.PROTO_TCP}"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"class OVNPortForwardingHandler(object):"}],"source_content_type":"text/x-python","patch_set":26,"id":"ff570b3c_42c7d465","line":28,"in_reply_to":"ff570b3c_02cbf252","updated":"2020-06-09 01:59:47.000000000","message":"Done","commit_id":"07321830ebd119f44fe1674d9fde38da6e131379"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"450a760493e18880b8118c8ebdb1e6ded5ed3227","unresolved":false,"context_lines":[{"line_number":33,"context_line":"    def _get_lb_protocol(pf_obj):"},{"line_number":34,"context_line":"        if pf_obj.protocol not in LB_PROTOCOL_MAP:"},{"line_number":35,"context_line":"            LOG.warning(\"Unexpected protocol in port forwarding object: %s\","},{"line_number":36,"context_line":"                      pf_obj.protocol)"},{"line_number":37,"context_line":"        return LB_PROTOCOL_MAP.get(pf_obj.protocol, const.PROTO_TCP)"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"    @staticmethod"}],"source_content_type":"text/x-python","patch_set":26,"id":"ff570b3c_a2ade69c","line":36,"updated":"2020-05-26 20:39:03.000000000","message":"nit: indentation looks off by one","commit_id":"07321830ebd119f44fe1674d9fde38da6e131379"},{"author":{"_account_id":11952,"name":"Flavio Fernandes","email":"flavio@flaviof.com","username":"ffernand"},"change_message_id":"9149745bd2ea8bd7099c00315f228b6de91463ba","unresolved":false,"context_lines":[{"line_number":33,"context_line":"    def _get_lb_protocol(pf_obj):"},{"line_number":34,"context_line":"        if pf_obj.protocol not in LB_PROTOCOL_MAP:"},{"line_number":35,"context_line":"            LOG.warning(\"Unexpected protocol in port forwarding object: %s\","},{"line_number":36,"context_line":"                      pf_obj.protocol)"},{"line_number":37,"context_line":"        return LB_PROTOCOL_MAP.get(pf_obj.protocol, const.PROTO_TCP)"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"    @staticmethod"}],"source_content_type":"text/x-python","patch_set":26,"id":"ff570b3c_22c4605f","line":36,"in_reply_to":"ff570b3c_a2ade69c","updated":"2020-06-09 01:59:47.000000000","message":"Done","commit_id":"07321830ebd119f44fe1674d9fde38da6e131379"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"450a760493e18880b8118c8ebdb1e6ded5ed3227","unresolved":false,"context_lines":[{"line_number":34,"context_line":"        if pf_obj.protocol not in LB_PROTOCOL_MAP:"},{"line_number":35,"context_line":"            LOG.warning(\"Unexpected protocol in port forwarding object: %s\","},{"line_number":36,"context_line":"                      pf_obj.protocol)"},{"line_number":37,"context_line":"        return LB_PROTOCOL_MAP.get(pf_obj.protocol, const.PROTO_TCP)"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"    @staticmethod"},{"line_number":40,"context_line":"    def lb_name(fip_id, proto):"}],"source_content_type":"text/x-python","patch_set":26,"id":"ff570b3c_8289c227","line":37,"updated":"2020-05-26 20:39:03.000000000","message":"Should it default to TCP?  I would think we\u0027d raise an error so the caller gets it.","commit_id":"07321830ebd119f44fe1674d9fde38da6e131379"},{"author":{"_account_id":11952,"name":"Flavio Fernandes","email":"flavio@flaviof.com","username":"ffernand"},"change_message_id":"9149745bd2ea8bd7099c00315f228b6de91463ba","unresolved":false,"context_lines":[{"line_number":34,"context_line":"        if pf_obj.protocol not in LB_PROTOCOL_MAP:"},{"line_number":35,"context_line":"            LOG.warning(\"Unexpected protocol in port forwarding object: %s\","},{"line_number":36,"context_line":"                      pf_obj.protocol)"},{"line_number":37,"context_line":"        return LB_PROTOCOL_MAP.get(pf_obj.protocol, const.PROTO_TCP)"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"    @staticmethod"},{"line_number":40,"context_line":"    def lb_name(fip_id, proto):"}],"source_content_type":"text/x-python","patch_set":26,"id":"ff570b3c_8c542923","line":37,"in_reply_to":"ff570b3c_8289c227","updated":"2020-06-09 01:59:47.000000000","message":"yeah. let me make it a little more strict.\nDone.","commit_id":"07321830ebd119f44fe1674d9fde38da6e131379"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"450a760493e18880b8118c8ebdb1e6ded5ed3227","unresolved":false,"context_lines":[{"line_number":163,"context_line":"                for pf_payload in payload:"},{"line_number":164,"context_line":"                    self._handler.port_forwarding_created(ovn_txn, ovn_nb,"},{"line_number":165,"context_line":"                        pf_payload.current_pf)"},{"line_number":166,"context_line":"            if event_type \u003d\u003d events.AFTER_UPDATE:"},{"line_number":167,"context_line":"                for pf_payload in payload:"},{"line_number":168,"context_line":"                    self._handler.port_forwarding_updated(ovn_txn, ovn_nb,"},{"line_number":169,"context_line":"                        pf_payload.current_pf, pf_payload.original_pf)"}],"source_content_type":"text/x-python","patch_set":26,"id":"ff570b3c_02a2d29a","line":166,"range":{"start_line":166,"start_character":12,"end_line":166,"end_character":14},"updated":"2020-05-26 20:39:03.000000000","message":"nit: elif","commit_id":"07321830ebd119f44fe1674d9fde38da6e131379"},{"author":{"_account_id":11952,"name":"Flavio Fernandes","email":"flavio@flaviof.com","username":"ffernand"},"change_message_id":"9149745bd2ea8bd7099c00315f228b6de91463ba","unresolved":false,"context_lines":[{"line_number":163,"context_line":"                for pf_payload in payload:"},{"line_number":164,"context_line":"                    self._handler.port_forwarding_created(ovn_txn, ovn_nb,"},{"line_number":165,"context_line":"                        pf_payload.current_pf)"},{"line_number":166,"context_line":"            if event_type \u003d\u003d events.AFTER_UPDATE:"},{"line_number":167,"context_line":"                for pf_payload in payload:"},{"line_number":168,"context_line":"                    self._handler.port_forwarding_updated(ovn_txn, ovn_nb,"},{"line_number":169,"context_line":"                        pf_payload.current_pf, pf_payload.original_pf)"}],"source_content_type":"text/x-python","patch_set":26,"id":"ff570b3c_e28ee830","line":166,"range":{"start_line":166,"start_character":12,"end_line":166,"end_character":14},"in_reply_to":"ff570b3c_02a2d29a","updated":"2020-06-09 01:59:47.000000000","message":"Done","commit_id":"07321830ebd119f44fe1674d9fde38da6e131379"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"450a760493e18880b8118c8ebdb1e6ded5ed3227","unresolved":false,"context_lines":[{"line_number":167,"context_line":"                for pf_payload in payload:"},{"line_number":168,"context_line":"                    self._handler.port_forwarding_updated(ovn_txn, ovn_nb,"},{"line_number":169,"context_line":"                        pf_payload.current_pf, pf_payload.original_pf)"},{"line_number":170,"context_line":"            if event_type \u003d\u003d events.AFTER_DELETE:"},{"line_number":171,"context_line":"                for pf_payload in payload:"},{"line_number":172,"context_line":"                    self._handler.port_forwarding_deleted(ovn_txn, ovn_nb,"},{"line_number":173,"context_line":"                        pf_payload.original_pf)"}],"source_content_type":"text/x-python","patch_set":26,"id":"ff570b3c_e29cfe5c","line":170,"range":{"start_line":170,"start_character":12,"end_line":170,"end_character":14},"updated":"2020-05-26 20:39:03.000000000","message":"nit: elif","commit_id":"07321830ebd119f44fe1674d9fde38da6e131379"},{"author":{"_account_id":11952,"name":"Flavio Fernandes","email":"flavio@flaviof.com","username":"ffernand"},"change_message_id":"9149745bd2ea8bd7099c00315f228b6de91463ba","unresolved":false,"context_lines":[{"line_number":167,"context_line":"                for pf_payload in payload:"},{"line_number":168,"context_line":"                    self._handler.port_forwarding_updated(ovn_txn, ovn_nb,"},{"line_number":169,"context_line":"                        pf_payload.current_pf, pf_payload.original_pf)"},{"line_number":170,"context_line":"            if event_type \u003d\u003d events.AFTER_DELETE:"},{"line_number":171,"context_line":"                for pf_payload in payload:"},{"line_number":172,"context_line":"                    self._handler.port_forwarding_deleted(ovn_txn, ovn_nb,"},{"line_number":173,"context_line":"                        pf_payload.original_pf)"}],"source_content_type":"text/x-python","patch_set":26,"id":"ff570b3c_22990079","line":170,"range":{"start_line":170,"start_character":12,"end_line":170,"end_character":14},"in_reply_to":"ff570b3c_e29cfe5c","updated":"2020-06-09 01:59:47.000000000","message":"Done","commit_id":"07321830ebd119f44fe1674d9fde38da6e131379"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"450a760493e18880b8118c8ebdb1e6ded5ed3227","unresolved":false,"context_lines":[{"line_number":170,"context_line":"            if event_type \u003d\u003d events.AFTER_DELETE:"},{"line_number":171,"context_line":"                for pf_payload in payload:"},{"line_number":172,"context_line":"                    self._handler.port_forwarding_deleted(ovn_txn, ovn_nb,"},{"line_number":173,"context_line":"                        pf_payload.original_pf)"},{"line_number":174,"context_line":""},{"line_number":175,"context_line":"            # Collect the revision numbers of all floating ips visited and"},{"line_number":176,"context_line":"            # update the corresponding load balancer entries affected."}],"source_content_type":"text/x-python","patch_set":26,"id":"ff570b3c_82b702d9","line":173,"updated":"2020-05-26 20:39:03.000000000","message":"Should there be an else: here to handle an unknown event type?","commit_id":"07321830ebd119f44fe1674d9fde38da6e131379"},{"author":{"_account_id":11952,"name":"Flavio Fernandes","email":"flavio@flaviof.com","username":"ffernand"},"change_message_id":"9149745bd2ea8bd7099c00315f228b6de91463ba","unresolved":false,"context_lines":[{"line_number":170,"context_line":"            if event_type \u003d\u003d events.AFTER_DELETE:"},{"line_number":171,"context_line":"                for pf_payload in payload:"},{"line_number":172,"context_line":"                    self._handler.port_forwarding_deleted(ovn_txn, ovn_nb,"},{"line_number":173,"context_line":"                        pf_payload.original_pf)"},{"line_number":174,"context_line":""},{"line_number":175,"context_line":"            # Collect the revision numbers of all floating ips visited and"},{"line_number":176,"context_line":"            # update the corresponding load balancer entries affected."}],"source_content_type":"text/x-python","patch_set":26,"id":"ff570b3c_4c1fb16f","line":173,"in_reply_to":"ff570b3c_82b702d9","updated":"2020-06-09 01:59:47.000000000","message":"hm... not sure what to do in that case, other than logging it. Will add.","commit_id":"07321830ebd119f44fe1674d9fde38da6e131379"}],"neutron/tests/unit/services/portforwarding/ovn/test_port_forwarding.py":[{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"3b42c49aa6aa28a9e26025aa0f668016d126d56e","unresolved":false,"context_lines":[{"line_number":15,"context_line":"from unittest import mock"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"from neutron_lib.plugins import constants as plugin_constants"},{"line_number":18,"context_line":"from neutron.services.portforwarding.ovn import port_forwarding"},{"line_number":19,"context_line":"from neutron.tests import base"},{"line_number":20,"context_line":"from neutron.tests.unit import fake_resources"},{"line_number":21,"context_line":""}],"source_content_type":"text/x-python","patch_set":34,"id":"bf51134e_3a7364b3","line":18,"updated":"2020-06-23 00:22:35.000000000","message":"pep8: H306: imports not in alphabetical order (neutron_lib.plugins.constants, neutron.services.portforwarding.ovn.port_forwarding)","commit_id":"b897467d6ffdbf859c4b6c26352615c2e14a2437"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"3b42c49aa6aa28a9e26025aa0f668016d126d56e","unresolved":false,"context_lines":[{"line_number":53,"context_line":"            \"neutron_lib.plugins.directory.get_plugin\").start()"},{"line_number":54,"context_line":"        self.get_dir_object.side_effect \u003d lambda alias: \\"},{"line_number":55,"context_line":"            self.pf_plugin if alias \u003d\u003d plugin_constants.PORTFORWARDING \\"},{"line_number":56,"context_line":"                else None"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"        self.fake_handler_object \u003d mock.patch("},{"line_number":59,"context_line":"            \"neutron.services.portforwarding.ovn.port_forwarding.\""}],"source_content_type":"text/x-python","patch_set":34,"id":"bf51134e_9a6b90b5","line":56,"updated":"2020-06-23 00:22:35.000000000","message":"pep8: E127 continuation line over-indented for visual indent","commit_id":"b897467d6ffdbf859c4b6c26352615c2e14a2437"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"3b42c49aa6aa28a9e26025aa0f668016d126d56e","unresolved":false,"context_lines":[{"line_number":61,"context_line":"        self.fake_handler_object.return_value \u003d self.handler"},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"    def test_init(self):"},{"line_number":64,"context_line":"        fwd \u003d port_forwarding.OVNPortForwarding(self.l3_plugin)"},{"line_number":65,"context_line":"        pass"}],"source_content_type":"text/x-python","patch_set":34,"id":"bf51134e_7a683cb8","line":64,"updated":"2020-06-23 00:22:35.000000000","message":"pep8: F841 local variable \u0027fwd\u0027 is assigned to but never used","commit_id":"b897467d6ffdbf859c4b6c26352615c2e14a2437"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"0fa79bd21fe1ba40d4d64425fd66a4e8f95dd5df","unresolved":false,"context_lines":[{"line_number":15,"context_line":"from unittest import mock"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"from neutron_lib.plugins import constants as plugin_constants"},{"line_number":18,"context_line":"from neutron.services.portforwarding.ovn import port_forwarding"},{"line_number":19,"context_line":"from neutron.tests import base"},{"line_number":20,"context_line":"from neutron.tests.unit import fake_resources"},{"line_number":21,"context_line":""}],"source_content_type":"text/x-python","patch_set":35,"id":"bf51134e_739a02b9","line":18,"updated":"2020-06-24 17:52:10.000000000","message":"pep8: H306: imports not in alphabetical order (neutron_lib.plugins.constants, neutron.services.portforwarding.ovn.port_forwarding)","commit_id":"c12d0198abf407ffea97ef55b30f6910c5fc5be8"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"0fa79bd21fe1ba40d4d64425fd66a4e8f95dd5df","unresolved":false,"context_lines":[{"line_number":53,"context_line":"            \"neutron_lib.plugins.directory.get_plugin\").start()"},{"line_number":54,"context_line":"        self.get_dir_object.side_effect \u003d lambda alias: \\"},{"line_number":55,"context_line":"            self.pf_plugin if alias \u003d\u003d plugin_constants.PORTFORWARDING \\"},{"line_number":56,"context_line":"                else None"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"        self.fake_handler_object \u003d mock.patch("},{"line_number":59,"context_line":"            \"neutron.services.portforwarding.ovn.port_forwarding.\""}],"source_content_type":"text/x-python","patch_set":35,"id":"bf51134e_53953e86","line":56,"updated":"2020-06-24 17:52:10.000000000","message":"pep8: E127 continuation line over-indented for visual indent","commit_id":"c12d0198abf407ffea97ef55b30f6910c5fc5be8"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"0fa79bd21fe1ba40d4d64425fd66a4e8f95dd5df","unresolved":false,"context_lines":[{"line_number":61,"context_line":"        self.fake_handler_object.return_value \u003d self.handler"},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"    def test_init(self):"},{"line_number":64,"context_line":"        fwd \u003d port_forwarding.OVNPortForwarding(self.l3_plugin)"},{"line_number":65,"context_line":"        pass"}],"source_content_type":"text/x-python","patch_set":35,"id":"bf51134e_b3901a97","line":64,"updated":"2020-06-24 17:52:10.000000000","message":"pep8: F841 local variable \u0027fwd\u0027 is assigned to but never used","commit_id":"c12d0198abf407ffea97ef55b30f6910c5fc5be8"}]}
