)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"fcd5709fb7260618ffafeeaf50a92e77b918175c","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":16,"id":"f50c7fc8_898a9bb5","updated":"2021-12-02 13:35:04.000000000","message":"-1 just for keeping the unused columns in the table. There are supported and used methods to drop columns during a migration. I\u0027m not in favor of keeping unused columns in the DB definitions.","commit_id":"d5fc876fc032eaaa3aeee84fea337f4e2661293d"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"23d41c93ec420d07a30490b540e74181f4fd6d89","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":21,"id":"f8943db5_a780f31c","updated":"2022-01-04 08:24:07.000000000","message":"We should probably have release note for that new feature also.","commit_id":"9940d3b6ed7f4f8724dcd01a7fc0c65359f8ab23"},{"author":{"_account_id":30695,"name":"Pedro Henrique Pereira Martins","email":"phpm13@gmail.com","username":"pedrohpmartins"},"change_message_id":"1cabfe5607d10f2a6135832b16051fbf7ae8d1b3","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":21,"id":"55674784_0bcf9922","in_reply_to":"f8943db5_a780f31c","updated":"2022-01-04 15:37:17.000000000","message":"Yes, I missed that, thanks for remembering me 😊","commit_id":"9940d3b6ed7f4f8724dcd01a7fc0c65359f8ab23"},{"author":{"_account_id":30695,"name":"Pedro Henrique Pereira Martins","email":"phpm13@gmail.com","username":"pedrohpmartins"},"change_message_id":"1278b7913d8a37c92dd3421c465fa83c7ebfbe72","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":23,"id":"ce7332c0_c46eb700","updated":"2022-01-04 20:39:41.000000000","message":"recheck","commit_id":"0a4e96acae678853afdfe38d997d9b765db5026a"},{"author":{"_account_id":30695,"name":"Pedro Henrique Pereira Martins","email":"phpm13@gmail.com","username":"pedrohpmartins"},"change_message_id":"66c6b1ede08b47121a6a0345705d7709a717c179","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":27,"id":"196d15c8_30be63bd","updated":"2022-02-26 18:35:20.000000000","message":"recheck","commit_id":"53481bd2915296499e783390122b02bedace1636"},{"author":{"_account_id":30695,"name":"Pedro Henrique Pereira Martins","email":"phpm13@gmail.com","username":"pedrohpmartins"},"change_message_id":"c503ce1ce6a30586ad9f67219acadc9f9c455ae2","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":27,"id":"7f12abf1_7f173aeb","updated":"2022-02-27 11:38:46.000000000","message":"recheck","commit_id":"53481bd2915296499e783390122b02bedace1636"},{"author":{"_account_id":30695,"name":"Pedro Henrique Pereira Martins","email":"phpm13@gmail.com","username":"pedrohpmartins"},"change_message_id":"b1593e880990c8ad19bcb917f0057db1b57a269b","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":27,"id":"abeef5fc_1089878a","updated":"2022-02-26 10:52:19.000000000","message":"recheck","commit_id":"53481bd2915296499e783390122b02bedace1636"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"c8da817f852715052462ab250df30d0e5ee0daa6","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":28,"id":"d5056f86_702e289e","updated":"2022-03-02 07:47:22.000000000","message":"Generally code looks good for me but we are after FF deadline for Yoga now, so we need to wait with this until master will be opened for Zed release.","commit_id":"6d34619a9105eb5dcd5923a03efa9f1ae582b65d"},{"author":{"_account_id":28356,"name":"Rafael Weingartner","email":"rafael@apache.org","username":"rafaelweingartner"},"change_message_id":"f63032f9c35588c8766bb1c839b61f0550cc8f88","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":28,"id":"34cc73a5_606f4b25","updated":"2022-03-02 09:57:24.000000000","message":"Thank you guys for the support and help here 😊.\n\nAfter the merge, we can then proceed with the patches for other components such as Horizon and CLI.","commit_id":"6d34619a9105eb5dcd5923a03efa9f1ae582b65d"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"2599f9f60e85d7a690a46715403079b6f99c76fe","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":28,"id":"41091984_564e627b","in_reply_to":"d5056f86_702e289e","updated":"2022-03-02 08:50:41.000000000","message":"Agree, code looks ok and will be merged asap in Z.","commit_id":"6d34619a9105eb5dcd5923a03efa9f1ae582b65d"},{"author":{"_account_id":30380,"name":"ZhouHeng","email":"zhouhenglc@inspur.com","username":"zhouhenglc"},"change_message_id":"80d4fe470eb0c0d79df2e8900f72e01325333768","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":29,"id":"7eb72c99_4a7e1249","updated":"2022-03-07 01:31:52.000000000","message":"sorry, ask a question: I didn\u0027t see the implementation of ovn. How is it planned?","commit_id":"10083b2fcd0ad0301c760ae5cb458708560b9e12"},{"author":{"_account_id":30695,"name":"Pedro Henrique Pereira Martins","email":"phpm13@gmail.com","username":"pedrohpmartins"},"change_message_id":"625acd39b0c397151ff3104cbb39d6ec72579d97","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":29,"id":"bd39b690_1962e277","in_reply_to":"7eb72c99_4a7e1249","updated":"2022-03-07 21:19:39.000000000","message":"This implementation was applied only in iptables. We did not plan it to ovn.","commit_id":"10083b2fcd0ad0301c760ae5cb458708560b9e12"},{"author":{"_account_id":30380,"name":"ZhouHeng","email":"zhouhenglc@inspur.com","username":"zhouhenglc"},"change_message_id":"2393ccf254bb3fae168b11778253e58d39abfe1b","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":30,"id":"794e1961_6ee84847","updated":"2022-03-09 10:33:53.000000000","message":"Code looks good, but there may be some work to do here[1].\n\n[1] https://github.com/openstack/neutron/blob/master/neutron/plugins/ml2/drivers/ovn/mech_driver/ovsdb/ovn_db_sync.py#L553","commit_id":"ce7857c51e01df03c7ac852ed9fc1dc60fc56db3"},{"author":{"_account_id":30695,"name":"Pedro Henrique Pereira Martins","email":"phpm13@gmail.com","username":"pedrohpmartins"},"change_message_id":"8da1549642270e6aa1e0da20a218245694387424","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":30,"id":"51b2efbb_51f68d3c","in_reply_to":"794e1961_6ee84847","updated":"2022-03-10 18:49:47.000000000","message":"I see, I did some changes in this ovn db sync flow to check the vips using port ranges.\n\nThanks again for your revision 😊","commit_id":"ce7857c51e01df03c7ac852ed9fc1dc60fc56db3"},{"author":{"_account_id":30695,"name":"Pedro Henrique Pereira Martins","email":"phpm13@gmail.com","username":"pedrohpmartins"},"change_message_id":"4de4c78cdc035d792d134782534b54f6524bbefa","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":32,"id":"15201acb_75e1d150","updated":"2022-03-10 14:26:57.000000000","message":"recheck","commit_id":"8e2bf989591e098c02350b6dec8b7d7db79b7961"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"dbdc4391fb739aea1fde50462897c4885ae3b0a1","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":34,"id":"ad69361a_2b08438d","updated":"2022-03-15 09:54:36.000000000","message":"Please, rebase on top of https://review.opendev.org/c/openstack/neutron/+/833377","commit_id":"d51eefd7e5dfd51751a2bfbbc95d848079a11828"},{"author":{"_account_id":8064,"name":"Jake Yip","email":"jake.yip@ardc.edu.au","username":"jake"},"change_message_id":"8dfe24ca0147cea2ae2e657afc2f45e759639597","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":35,"id":"229a98cf_48065ffc","updated":"2024-07-08 02:29:29.000000000","message":"FYI we ran into an issue with this upgrading from yoga to zed\nI know zed is EOL, this is just a note for future","commit_id":"b271c82d10b588d94c3278640a8f144fa55ac65a"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"c407d82c61de71df9d53d72b354e9df4c9ff8323","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":35,"id":"d357d574_ca0b08ef","updated":"2022-03-15 14:44:14.000000000","message":"Let\u0027s go for it! Thanks for the efforts.","commit_id":"b271c82d10b588d94c3278640a8f144fa55ac65a"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"961e76016f1e9103b4c03d13938a4dd654e37328","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":35,"id":"cf7199f7_895ec019","updated":"2022-03-16 09:19:40.000000000","message":"Nice work!","commit_id":"b271c82d10b588d94c3278640a8f144fa55ac65a"},{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"123d9eb34921e8427970f837cfdde191a8a0c3aa","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":35,"id":"09f6278e_43d9226a","updated":"2022-03-16 13:40:37.000000000","message":"Thanks, great work, could you please add/update documentation in a follow-up patch?","commit_id":"b271c82d10b588d94c3278640a8f144fa55ac65a"},{"author":{"_account_id":28356,"name":"Rafael Weingartner","email":"rafael@apache.org","username":"rafaelweingartner"},"change_message_id":"68510ae70b06cbe5a9ee1aa3a37b22772b250d2f","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":35,"id":"90f70f35_97eb53db","updated":"2022-03-16 12:21:31.000000000","message":"recheck","commit_id":"b271c82d10b588d94c3278640a8f144fa55ac65a"},{"author":{"_account_id":30695,"name":"Pedro Henrique Pereira Martins","email":"phpm13@gmail.com","username":"pedrohpmartins"},"change_message_id":"e1d24783d856dd3d25ebcc4e0af4c06eca1471dc","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":35,"id":"a968e11e_8b18dd7e","updated":"2022-03-16 14:18:49.000000000","message":"recheck","commit_id":"b271c82d10b588d94c3278640a8f144fa55ac65a"},{"author":{"_account_id":30695,"name":"Pedro Henrique Pereira Martins","email":"phpm13@gmail.com","username":"pedrohpmartins"},"change_message_id":"bd7639c94fe3ba8cc0686945269ada3b36f05027","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":35,"id":"ee9aa66d_2a535c45","in_reply_to":"09f6278e_43d9226a","updated":"2022-03-16 13:50:41.000000000","message":"I did some changes here https://review.opendev.org/c/openstack/neutron-lib/+/782318\nIs there any other place I have to update as well? \n\nThanks 😊","commit_id":"b271c82d10b588d94c3278640a8f144fa55ac65a"},{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"d2aff1c63f2ce9d7127fe0fa50b18aba0ea41aa0","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":35,"id":"074d4f8e_46f5873a","in_reply_to":"ee9aa66d_2a535c45","updated":"2022-03-17 13:37:32.000000000","message":"Perhaps here you can mention that ranges are available now:\nhttps://docs.openstack.org/neutron/latest/admin/config-fip-port-forwardings.html","commit_id":"b271c82d10b588d94c3278640a8f144fa55ac65a"}],"neutron/agent/l3/extensions/port_forwarding.py":[{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"23d41c93ec420d07a30490b540e74181f4fd6d89","unresolved":true,"context_lines":[{"line_number":167,"context_line":""},{"line_number":168,"context_line":"    @staticmethod"},{"line_number":169,"context_line":"    def extract_ports(port_forward):"},{"line_number":170,"context_line":"        internal_port \u003d port_forward.internal_port_range.replace(\u0027:\u0027, \u0027-\u0027)"},{"line_number":171,"context_line":"        external_port \u003d port_forward.external_port_range"},{"line_number":172,"context_line":"        internal_start, internal_end \u003d internal_port.split(\u0027-\u0027)"},{"line_number":173,"context_line":"        external_start, external_end \u003d external_port.split(\u0027:\u0027)"}],"source_content_type":"text/x-python","patch_set":21,"id":"0e6fcc4a_b7eb4605","line":170,"updated":"2022-01-04 08:24:07.000000000","message":"I don\u0027t understand why this is needed? Can\u0027t You simply split on \":\" in L172? As You do for external_port?","commit_id":"9940d3b6ed7f4f8724dcd01a7fc0c65359f8ab23"},{"author":{"_account_id":30695,"name":"Pedro Henrique Pereira Martins","email":"phpm13@gmail.com","username":"pedrohpmartins"},"change_message_id":"1cabfe5607d10f2a6135832b16051fbf7ae8d1b3","unresolved":true,"context_lines":[{"line_number":167,"context_line":""},{"line_number":168,"context_line":"    @staticmethod"},{"line_number":169,"context_line":"    def extract_ports(port_forward):"},{"line_number":170,"context_line":"        internal_port \u003d port_forward.internal_port_range.replace(\u0027:\u0027, \u0027-\u0027)"},{"line_number":171,"context_line":"        external_port \u003d port_forward.external_port_range"},{"line_number":172,"context_line":"        internal_start, internal_end \u003d internal_port.split(\u0027-\u0027)"},{"line_number":173,"context_line":"        external_start, external_end \u003d external_port.split(\u0027:\u0027)"}],"source_content_type":"text/x-python","patch_set":21,"id":"da85c0e7_a7cda88e","line":170,"in_reply_to":"0e6fcc4a_b7eb4605","updated":"2022-01-04 15:37:17.000000000","message":"The IP table rules handle internal port ranges with \"-\" while the external ports ranges it handles using \":\", so I did this replace to then just put the range in the rules, or if you think that it will be better, I can split it by \":\" and replace the \":\" by \"-\" when I return it to apply in the IP table rules.\n\nThe rule creation parameters for fip 8.8.8.8, external 2:4, internal 5:7 and local ip 9.9.9.9 seems like that:\n\n-d 8.8.8.8/32 --dport 2:4 -j DNAT --to-destination 9.9.9.9:5-7\u0027\n\nto avoid repeating the \":\" in the --to-destination parameter, the IP table command handle the parameter with IP and port split by \":\" and the port range split by \"-\".","commit_id":"9940d3b6ed7f4f8724dcd01a7fc0c65359f8ab23"},{"author":{"_account_id":30695,"name":"Pedro Henrique Pereira Martins","email":"phpm13@gmail.com","username":"pedrohpmartins"},"change_message_id":"235b78ef73adfffed031b80b253283a619c1b6fb","unresolved":true,"context_lines":[{"line_number":167,"context_line":""},{"line_number":168,"context_line":"    @staticmethod"},{"line_number":169,"context_line":"    def extract_ports(port_forward):"},{"line_number":170,"context_line":"        internal_port \u003d port_forward.internal_port_range.replace(\u0027:\u0027, \u0027-\u0027)"},{"line_number":171,"context_line":"        external_port \u003d port_forward.external_port_range"},{"line_number":172,"context_line":"        internal_start, internal_end \u003d internal_port.split(\u0027-\u0027)"},{"line_number":173,"context_line":"        external_start, external_end \u003d external_port.split(\u0027:\u0027)"}],"source_content_type":"text/x-python","patch_set":21,"id":"f880eda5_91ab9f2a","line":170,"in_reply_to":"11a0cd00_5e74d2c1","updated":"2022-01-05 18:26:56.000000000","message":"yes, sure, I will do that ;)","commit_id":"9940d3b6ed7f4f8724dcd01a7fc0c65359f8ab23"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"a4c1dcf98936cfc84f580ddd0307bb87e13db832","unresolved":true,"context_lines":[{"line_number":167,"context_line":""},{"line_number":168,"context_line":"    @staticmethod"},{"line_number":169,"context_line":"    def extract_ports(port_forward):"},{"line_number":170,"context_line":"        internal_port \u003d port_forward.internal_port_range.replace(\u0027:\u0027, \u0027-\u0027)"},{"line_number":171,"context_line":"        external_port \u003d port_forward.external_port_range"},{"line_number":172,"context_line":"        internal_start, internal_end \u003d internal_port.split(\u0027-\u0027)"},{"line_number":173,"context_line":"        external_start, external_end \u003d external_port.split(\u0027:\u0027)"}],"source_content_type":"text/x-python","patch_set":21,"id":"11a0cd00_5e74d2c1","line":170,"in_reply_to":"da85c0e7_a7cda88e","updated":"2022-01-05 15:40:54.000000000","message":"ok, thx for explanation. It can be like that. Maybe if You would respin it, You could add such NOTE with explanation in the code to make it clear for others who will read that code in the future :)","commit_id":"9940d3b6ed7f4f8724dcd01a7fc0c65359f8ab23"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"23d41c93ec420d07a30490b540e74181f4fd6d89","unresolved":true,"context_lines":[{"line_number":179,"context_line":"            # like 40:50 -\u003e 60:70, the port 40 will be mapped to 60,"},{"line_number":180,"context_line":"            # the 41 to 61, 42 to 62...50 to 70."},{"line_number":181,"context_line":"            # In the case of 40:60 -\u003e 70:80, the ports will be rounded"},{"line_number":182,"context_line":"            # so the port 41 and 51, will be mapped to 71."},{"line_number":183,"context_line":"            internal_port_one_to_one_mask \u003d \u0027/\u0027 + external_start"},{"line_number":184,"context_line":"        if internal_start \u003d\u003d internal_end:"},{"line_number":185,"context_line":"            internal_port \u003d internal_start"}],"source_content_type":"text/x-python","patch_set":21,"id":"a410051a_bf9dc783","line":182,"updated":"2022-01-04 08:24:07.000000000","message":"shouldn\u0027t we have any warning or something if internal port range !\u003d external port range? Like e.g. 40:50 and 100:1000","commit_id":"9940d3b6ed7f4f8724dcd01a7fc0c65359f8ab23"},{"author":{"_account_id":30695,"name":"Pedro Henrique Pereira Martins","email":"phpm13@gmail.com","username":"pedrohpmartins"},"change_message_id":"1cabfe5607d10f2a6135832b16051fbf7ae8d1b3","unresolved":true,"context_lines":[{"line_number":179,"context_line":"            # like 40:50 -\u003e 60:70, the port 40 will be mapped to 60,"},{"line_number":180,"context_line":"            # the 41 to 61, 42 to 62...50 to 70."},{"line_number":181,"context_line":"            # In the case of 40:60 -\u003e 70:80, the ports will be rounded"},{"line_number":182,"context_line":"            # so the port 41 and 51, will be mapped to 71."},{"line_number":183,"context_line":"            internal_port_one_to_one_mask \u003d \u0027/\u0027 + external_start"},{"line_number":184,"context_line":"        if internal_start \u003d\u003d internal_end:"},{"line_number":185,"context_line":"            internal_port \u003d internal_start"}],"source_content_type":"text/x-python","patch_set":21,"id":"123d6dc9_9b9fdcef","line":182,"in_reply_to":"a410051a_bf9dc783","updated":"2022-01-04 15:37:17.000000000","message":"Do you mean a LOG warn? I will log that.","commit_id":"9940d3b6ed7f4f8724dcd01a7fc0c65359f8ab23"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"23d41c93ec420d07a30490b540e74181f4fd6d89","unresolved":true,"context_lines":[{"line_number":185,"context_line":"            internal_port \u003d internal_start"},{"line_number":186,"context_line":"        else:"},{"line_number":187,"context_line":"            internal_port \u003d internal_port + internal_port_one_to_one_mask"},{"line_number":188,"context_line":"        return external_port, internal_port"},{"line_number":189,"context_line":""},{"line_number":190,"context_line":"    def _rule_apply(self, iptables_manager, port_forwarding, rule_tag):"},{"line_number":191,"context_line":"        iptables_manager.ipv4[\u0027nat\u0027].clear_rules_by_tag(rule_tag)"}],"source_content_type":"text/x-python","patch_set":21,"id":"ab664661_190e276e","line":188,"updated":"2022-01-04 08:24:07.000000000","message":"I think that would be good if this function would have some unit tests to cover some use cases","commit_id":"9940d3b6ed7f4f8724dcd01a7fc0c65359f8ab23"},{"author":{"_account_id":30695,"name":"Pedro Henrique Pereira Martins","email":"phpm13@gmail.com","username":"pedrohpmartins"},"change_message_id":"1cabfe5607d10f2a6135832b16051fbf7ae8d1b3","unresolved":true,"context_lines":[{"line_number":185,"context_line":"            internal_port \u003d internal_start"},{"line_number":186,"context_line":"        else:"},{"line_number":187,"context_line":"            internal_port \u003d internal_port + internal_port_one_to_one_mask"},{"line_number":188,"context_line":"        return external_port, internal_port"},{"line_number":189,"context_line":""},{"line_number":190,"context_line":"    def _rule_apply(self, iptables_manager, port_forwarding, rule_tag):"},{"line_number":191,"context_line":"        iptables_manager.ipv4[\u0027nat\u0027].clear_rules_by_tag(rule_tag)"}],"source_content_type":"text/x-python","patch_set":21,"id":"14753893_84d29493","line":188,"in_reply_to":"ab664661_190e276e","updated":"2022-01-04 15:37:17.000000000","message":"Yes, sure!","commit_id":"9940d3b6ed7f4f8724dcd01a7fc0c65359f8ab23"}],"neutron/common/ovn/extensions.py":[{"author":{"_account_id":30380,"name":"ZhouHeng","email":"zhouhenglc@inspur.com","username":"zhouhenglc"},"change_message_id":"b5c02f3a92d183edd6a9fd164790f6f0e2f96e9e","unresolved":true,"context_lines":[{"line_number":147,"context_line":"    seg_def.ALIAS,"},{"line_number":148,"context_line":"    expose_port_forwarding_in_fip.ALIAS,"},{"line_number":149,"context_line":"    fip_pf_description.ALIAS,"},{"line_number":150,"context_line":"    fip_pf_port_range.ALIAS,"},{"line_number":151,"context_line":"    floating_ip_port_forwarding.ALIAS,"},{"line_number":152,"context_line":"    vlantransparent.ALIAS,"},{"line_number":153,"context_line":"    logging.ALIAS,"}],"source_content_type":"text/x-python","patch_set":29,"id":"6e40aeb2_ac299190","line":150,"range":{"start_line":150,"start_character":4,"end_line":150,"end_character":27},"updated":"2022-03-08 01:13:11.000000000","message":"if not support ovn, what is the purpose of this update？","commit_id":"10083b2fcd0ad0301c760ae5cb458708560b9e12"},{"author":{"_account_id":30695,"name":"Pedro Henrique Pereira Martins","email":"phpm13@gmail.com","username":"pedrohpmartins"},"change_message_id":"e45285c7fa33603af15ed11d1c2344fdbba701c2","unresolved":true,"context_lines":[{"line_number":147,"context_line":"    seg_def.ALIAS,"},{"line_number":148,"context_line":"    expose_port_forwarding_in_fip.ALIAS,"},{"line_number":149,"context_line":"    fip_pf_description.ALIAS,"},{"line_number":150,"context_line":"    fip_pf_port_range.ALIAS,"},{"line_number":151,"context_line":"    floating_ip_port_forwarding.ALIAS,"},{"line_number":152,"context_line":"    vlantransparent.ALIAS,"},{"line_number":153,"context_line":"    logging.ALIAS,"}],"source_content_type":"text/x-python","patch_set":29,"id":"582398be_3f83b6de","line":150,"range":{"start_line":150,"start_character":4,"end_line":150,"end_character":27},"in_reply_to":"6e40aeb2_ac299190","updated":"2022-03-08 21:22:12.000000000","message":"You are right, sry for that, so I added OVN support for this feature, could you check it as well? Thanks again 😊","commit_id":"10083b2fcd0ad0301c760ae5cb458708560b9e12"}],"neutron/db/migration/alembic_migrations/versions/xena/expand/I43e0b669096_port_forwarding_port_ranges.py":[{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"4c83e4e40e59dc87b266ddc3ce067760f70ae4c7","unresolved":true,"context_lines":[{"line_number":1,"context_line":"# Copyright 2019 OpenStack Foundation"},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":4,"context_line":"#    not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":4,"id":"1beef401_73513b9a","line":1,"updated":"2021-07-05 06:06:12.000000000","message":"nit: please change year here","commit_id":"783cbca2efe01c8ca30abbcfbb5ce562ca586a9b"},{"author":{"_account_id":30695,"name":"Pedro Henrique Pereira Martins","email":"phpm13@gmail.com","username":"pedrohpmartins"},"change_message_id":"7d0e19472d91ff2f4a2efdb1bc81797493e89f21","unresolved":true,"context_lines":[{"line_number":1,"context_line":"# Copyright 2019 OpenStack Foundation"},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":4,"context_line":"#    not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":4,"id":"5bf26dc8_a5ee6057","line":1,"in_reply_to":"1beef401_73513b9a","updated":"2021-07-05 14:53:12.000000000","message":"Oh, I didnt see that, thanks 😊","commit_id":"783cbca2efe01c8ca30abbcfbb5ce562ca586a9b"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"4c83e4e40e59dc87b266ddc3ce067760f70ae4c7","unresolved":true,"context_lines":[{"line_number":48,"context_line":"def upgrade():"},{"line_number":49,"context_line":"    foreign_keys \u003d clear_constraints_and_foreign()"},{"line_number":50,"context_line":"    op.add_column(floating_ip_port_forwarding_table_name,"},{"line_number":51,"context_line":"                  sa.Column(\u0027internal_ip_address\u0027, sa.String(length\u003d31),"},{"line_number":52,"context_line":"                            nullable\u003dFalse))"},{"line_number":53,"context_line":"    op.add_column(floating_ip_port_forwarding_table_name,"},{"line_number":54,"context_line":"                  sa.Column(\u0027internal_port_start\u0027, sa.Integer(),"}],"source_content_type":"text/x-python","patch_set":4,"id":"53b9de19_b4d6f48d","line":51,"range":{"start_line":51,"start_character":68,"end_line":51,"end_character":70},"updated":"2021-07-05 06:06:12.000000000","message":"why such length?","commit_id":"783cbca2efe01c8ca30abbcfbb5ce562ca586a9b"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"b2b4ab45298bccb7c26194883c23bfdfc14307d6","unresolved":true,"context_lines":[{"line_number":48,"context_line":"def upgrade():"},{"line_number":49,"context_line":"    foreign_keys \u003d clear_constraints_and_foreign()"},{"line_number":50,"context_line":"    op.add_column(floating_ip_port_forwarding_table_name,"},{"line_number":51,"context_line":"                  sa.Column(\u0027internal_ip_address\u0027, sa.String(length\u003d31),"},{"line_number":52,"context_line":"                            nullable\u003dFalse))"},{"line_number":53,"context_line":"    op.add_column(floating_ip_port_forwarding_table_name,"},{"line_number":54,"context_line":"                  sa.Column(\u0027internal_port_start\u0027, sa.Integer(),"}],"source_content_type":"text/x-python","patch_set":4,"id":"f1ab2b63_b9eddb16","line":51,"range":{"start_line":51,"start_character":68,"end_line":51,"end_character":70},"in_reply_to":"08ae23f3_13fef34c","updated":"2021-07-08 09:17:07.000000000","message":"TBH I think it should be 64 in case if we want support IPv6 some day or 15 for IPv4 should be enough, no?","commit_id":"783cbca2efe01c8ca30abbcfbb5ce562ca586a9b"},{"author":{"_account_id":30695,"name":"Pedro Henrique Pereira Martins","email":"phpm13@gmail.com","username":"pedrohpmartins"},"change_message_id":"7d0e19472d91ff2f4a2efdb1bc81797493e89f21","unresolved":true,"context_lines":[{"line_number":48,"context_line":"def upgrade():"},{"line_number":49,"context_line":"    foreign_keys \u003d clear_constraints_and_foreign()"},{"line_number":50,"context_line":"    op.add_column(floating_ip_port_forwarding_table_name,"},{"line_number":51,"context_line":"                  sa.Column(\u0027internal_ip_address\u0027, sa.String(length\u003d31),"},{"line_number":52,"context_line":"                            nullable\u003dFalse))"},{"line_number":53,"context_line":"    op.add_column(floating_ip_port_forwarding_table_name,"},{"line_number":54,"context_line":"                  sa.Column(\u0027internal_port_start\u0027, sa.Integer(),"}],"source_content_type":"text/x-python","patch_set":4,"id":"08ae23f3_13fef34c","line":51,"range":{"start_line":51,"start_character":68,"end_line":51,"end_character":70},"in_reply_to":"53b9de19_b4d6f48d","updated":"2021-07-05 14:53:12.000000000","message":"I used the same as the \"socket\" column minus the size of the maximum port number that is 65535 (len 5) as the \"socket\" column is supposed to be the internal IP plus the internal port.","commit_id":"783cbca2efe01c8ca30abbcfbb5ce562ca586a9b"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"f067d9616f2c2cf89d0bb37555938891e746459d","unresolved":true,"context_lines":[{"line_number":26,"context_line":"Create Date: 2021-07-02 10:00:00.000000"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"\"\"\""},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"# revision identifiers, used by Alembic."},{"line_number":31,"context_line":"revision \u003d \u0027I43e0b669096\u0027"},{"line_number":32,"context_line":"down_revision \u003d \u00278df53b0d2c0e\u0027"}],"source_content_type":"text/x-python","patch_set":5,"id":"3706cce3_29b214c4","line":29,"updated":"2021-07-08 09:20:17.000000000","message":"nit: now we are doing \"house cleaning\" portforwardings, this is a good moment to move DB model \"internal_neutron_port_id\u0027 to \"internal_port_id\". In the OVO (and many other places) this is referred as \"internal_port_id\". The \"neutron\" prefix is unnecessary.\n\nOf course, this is up to you if you want to do this.","commit_id":"74ebbb78b9a0bbde868d0b0bb7a8dad242842a26"},{"author":{"_account_id":30695,"name":"Pedro Henrique Pereira Martins","email":"phpm13@gmail.com","username":"pedrohpmartins"},"change_message_id":"c5c5fa4687d166d03da0bb46512d27e560b83490","unresolved":true,"context_lines":[{"line_number":26,"context_line":"Create Date: 2021-07-02 10:00:00.000000"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"\"\"\""},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"# revision identifiers, used by Alembic."},{"line_number":31,"context_line":"revision \u003d \u0027I43e0b669096\u0027"},{"line_number":32,"context_line":"down_revision \u003d \u00278df53b0d2c0e\u0027"}],"source_content_type":"text/x-python","patch_set":5,"id":"915e723d_eb1be02b","line":29,"in_reply_to":"3706cce3_29b214c4","updated":"2021-07-19 18:27:36.000000000","message":"Yes, I agree, columns with \"neutron\" in the name in the neutron database is redundant.","commit_id":"74ebbb78b9a0bbde868d0b0bb7a8dad242842a26"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"f067d9616f2c2cf89d0bb37555938891e746459d","unresolved":true,"context_lines":[{"line_number":35,"context_line":"    floating_ip_port_forwarding_table_name, sa.MetaData(),"},{"line_number":36,"context_line":"    sa.Column(\u0027id\u0027, sa.String(length\u003dconstants.UUID_FIELD_SIZE),"},{"line_number":37,"context_line":"              nullable\u003dFalse),"},{"line_number":38,"context_line":"    sa.Column(\u0027socket\u0027, sa.String(length\u003d36), nullable\u003dFalse),"},{"line_number":39,"context_line":"    sa.Column(\u0027external_port\u0027, sa.Integer(), nullable\u003dFalse),"},{"line_number":40,"context_line":"    sa.Column(\u0027internal_ip_address\u0027, sa.String(length\u003d31), nullable\u003dFalse),"},{"line_number":41,"context_line":"    sa.Column(\u0027internal_port_start\u0027, sa.Integer(), nullable\u003dFalse),"}],"source_content_type":"text/x-python","patch_set":5,"id":"68d78552_e0cb93e8","line":38,"range":{"start_line":38,"start_character":15,"end_line":38,"end_character":21},"updated":"2021-07-08 09:20:17.000000000","message":"I\u0027m ok with using \"internal_ip_adress\" and \"internal_port_*\" as a replacement of socket.\n\nBut I don\u0027t understand why are you keeping it in the DB. I see that \"socket\" is used only in the DB model, not the OVO. This parameter is used in a few places only. This is the best moment to get rid of this field and move any existing \"portforwardings.socket\" to the corresponding \"portforwardings.internal_ip_address\", \"portforwardings.internal_port_start\" and \"portforwardings.internal_port_end\".","commit_id":"74ebbb78b9a0bbde868d0b0bb7a8dad242842a26"},{"author":{"_account_id":30695,"name":"Pedro Henrique Pereira Martins","email":"phpm13@gmail.com","username":"pedrohpmartins"},"change_message_id":"c5c5fa4687d166d03da0bb46512d27e560b83490","unresolved":true,"context_lines":[{"line_number":35,"context_line":"    floating_ip_port_forwarding_table_name, sa.MetaData(),"},{"line_number":36,"context_line":"    sa.Column(\u0027id\u0027, sa.String(length\u003dconstants.UUID_FIELD_SIZE),"},{"line_number":37,"context_line":"              nullable\u003dFalse),"},{"line_number":38,"context_line":"    sa.Column(\u0027socket\u0027, sa.String(length\u003d36), nullable\u003dFalse),"},{"line_number":39,"context_line":"    sa.Column(\u0027external_port\u0027, sa.Integer(), nullable\u003dFalse),"},{"line_number":40,"context_line":"    sa.Column(\u0027internal_ip_address\u0027, sa.String(length\u003d31), nullable\u003dFalse),"},{"line_number":41,"context_line":"    sa.Column(\u0027internal_port_start\u0027, sa.Integer(), nullable\u003dFalse),"}],"source_content_type":"text/x-python","patch_set":5,"id":"77e4ed4e_20710020","line":38,"range":{"start_line":38,"start_character":15,"end_line":38,"end_character":21},"in_reply_to":"68d78552_e0cb93e8","updated":"2021-07-19 18:27:36.000000000","message":"the same as the external_port, the socket column will be removed in a future release","commit_id":"74ebbb78b9a0bbde868d0b0bb7a8dad242842a26"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"f067d9616f2c2cf89d0bb37555938891e746459d","unresolved":true,"context_lines":[{"line_number":37,"context_line":"              nullable\u003dFalse),"},{"line_number":38,"context_line":"    sa.Column(\u0027socket\u0027, sa.String(length\u003d36), nullable\u003dFalse),"},{"line_number":39,"context_line":"    sa.Column(\u0027external_port\u0027, sa.Integer(), nullable\u003dFalse),"},{"line_number":40,"context_line":"    sa.Column(\u0027internal_ip_address\u0027, sa.String(length\u003d31), nullable\u003dFalse),"},{"line_number":41,"context_line":"    sa.Column(\u0027internal_port_start\u0027, sa.Integer(), nullable\u003dFalse),"},{"line_number":42,"context_line":"    sa.Column(\u0027external_port_start\u0027, sa.Integer(), nullable\u003dFalse),"},{"line_number":43,"context_line":"    sa.Column(\u0027internal_port_end\u0027, sa.Integer(), nullable\u003dFalse),"}],"source_content_type":"text/x-python","patch_set":5,"id":"37bc831d_6309772a","line":40,"range":{"start_line":40,"start_character":37,"end_line":40,"end_character":57},"updated":"2021-07-08 09:20:17.000000000","message":"For IP addresses, we use sa.String(64)","commit_id":"74ebbb78b9a0bbde868d0b0bb7a8dad242842a26"},{"author":{"_account_id":30695,"name":"Pedro Henrique Pereira Martins","email":"phpm13@gmail.com","username":"pedrohpmartins"},"change_message_id":"c5c5fa4687d166d03da0bb46512d27e560b83490","unresolved":true,"context_lines":[{"line_number":37,"context_line":"              nullable\u003dFalse),"},{"line_number":38,"context_line":"    sa.Column(\u0027socket\u0027, sa.String(length\u003d36), nullable\u003dFalse),"},{"line_number":39,"context_line":"    sa.Column(\u0027external_port\u0027, sa.Integer(), nullable\u003dFalse),"},{"line_number":40,"context_line":"    sa.Column(\u0027internal_ip_address\u0027, sa.String(length\u003d31), nullable\u003dFalse),"},{"line_number":41,"context_line":"    sa.Column(\u0027internal_port_start\u0027, sa.Integer(), nullable\u003dFalse),"},{"line_number":42,"context_line":"    sa.Column(\u0027external_port_start\u0027, sa.Integer(), nullable\u003dFalse),"},{"line_number":43,"context_line":"    sa.Column(\u0027internal_port_end\u0027, sa.Integer(), nullable\u003dFalse),"}],"source_content_type":"text/x-python","patch_set":5,"id":"4cc14130_40f0faea","line":40,"range":{"start_line":40,"start_character":37,"end_line":40,"end_character":57},"in_reply_to":"37bc831d_6309772a","updated":"2021-07-19 18:27:36.000000000","message":"Got it, thanks","commit_id":"74ebbb78b9a0bbde868d0b0bb7a8dad242842a26"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"f067d9616f2c2cf89d0bb37555938891e746459d","unresolved":true,"context_lines":[{"line_number":42,"context_line":"    sa.Column(\u0027external_port_start\u0027, sa.Integer(), nullable\u003dFalse),"},{"line_number":43,"context_line":"    sa.Column(\u0027internal_port_end\u0027, sa.Integer(), nullable\u003dFalse),"},{"line_number":44,"context_line":"    sa.Column(\u0027external_port_end\u0027, sa.Integer(), nullable\u003dFalse)"},{"line_number":45,"context_line":")"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"def upgrade():"}],"source_content_type":"text/x-python","patch_set":5,"id":"44a0d9fc_bcde16f5","line":45,"range":{"start_line":45,"start_character":0,"end_line":45,"end_character":1},"updated":"2021-07-08 09:20:17.000000000","message":"Same comment for \"external_port\". Now we have \"external_port_start\" and \"external_port_end\", that are mandatory (nullable\u003dFalse). In case of having a single value, both fields will have the same value (as you do in \"migrate_values()\").\n\nI would recommend to drop this value as is unnecessary and redundant (a sacrilege in a DB!!)","commit_id":"74ebbb78b9a0bbde868d0b0bb7a8dad242842a26"},{"author":{"_account_id":30695,"name":"Pedro Henrique Pereira Martins","email":"phpm13@gmail.com","username":"pedrohpmartins"},"change_message_id":"c5c5fa4687d166d03da0bb46512d27e560b83490","unresolved":true,"context_lines":[{"line_number":42,"context_line":"    sa.Column(\u0027external_port_start\u0027, sa.Integer(), nullable\u003dFalse),"},{"line_number":43,"context_line":"    sa.Column(\u0027internal_port_end\u0027, sa.Integer(), nullable\u003dFalse),"},{"line_number":44,"context_line":"    sa.Column(\u0027external_port_end\u0027, sa.Integer(), nullable\u003dFalse)"},{"line_number":45,"context_line":")"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"def upgrade():"}],"source_content_type":"text/x-python","patch_set":5,"id":"e9c10fe3_9e952ec9","line":45,"range":{"start_line":45,"start_character":0,"end_line":45,"end_character":1},"in_reply_to":"44a0d9fc_bcde16f5","updated":"2021-07-19 18:27:36.000000000","message":"Yes, I agree, but these old columns will be removed in a future upgrade, so we can keep the possibility of using two sequential OpenStack versions using the same db as discussed in this revision https://review.opendev.org/c/openstack/neutron-specs/+/739549/2#message-70fb83d15a5e140823287f2c4aab4e228c1e16f1","commit_id":"74ebbb78b9a0bbde868d0b0bb7a8dad242842a26"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"f067d9616f2c2cf89d0bb37555938891e746459d","unresolved":true,"context_lines":[{"line_number":73,"context_line":"    op.create_unique_constraint("},{"line_number":74,"context_line":"        columns\u003d[\u0027internal_neutron_port_id\u0027, \u0027internal_ip_address\u0027,"},{"line_number":75,"context_line":"                 \u0027internal_port_start\u0027, \u0027protocol\u0027, \u0027internal_port_end\u0027],"},{"line_number":76,"context_line":"        constraint_name\u003d\u0027uniq_port_forwardings0\u0027"},{"line_number":77,"context_line":"                        \u0027internal_neutron_port_id0ports0protocol\u0027,"},{"line_number":78,"context_line":"        table_name\u003dfloating_ip_port_forwarding_table_name)"},{"line_number":79,"context_line":""},{"line_number":80,"context_line":"    op.alter_column(floating_ip_port_forwarding_table_name, \u0027socket\u0027,"}],"source_content_type":"text/x-python","patch_set":5,"id":"24c1b888_c6ba49b1","line":77,"range":{"start_line":76,"start_character":25,"end_line":77,"end_character":64},"updated":"2021-07-08 09:20:17.000000000","message":"We usually add all columns to the constraint name, but this is not mandatory. But I would add \"internal_ip_address\" here.","commit_id":"74ebbb78b9a0bbde868d0b0bb7a8dad242842a26"},{"author":{"_account_id":30695,"name":"Pedro Henrique Pereira Martins","email":"phpm13@gmail.com","username":"pedrohpmartins"},"change_message_id":"c5c5fa4687d166d03da0bb46512d27e560b83490","unresolved":true,"context_lines":[{"line_number":73,"context_line":"    op.create_unique_constraint("},{"line_number":74,"context_line":"        columns\u003d[\u0027internal_neutron_port_id\u0027, \u0027internal_ip_address\u0027,"},{"line_number":75,"context_line":"                 \u0027internal_port_start\u0027, \u0027protocol\u0027, \u0027internal_port_end\u0027],"},{"line_number":76,"context_line":"        constraint_name\u003d\u0027uniq_port_forwardings0\u0027"},{"line_number":77,"context_line":"                        \u0027internal_neutron_port_id0ports0protocol\u0027,"},{"line_number":78,"context_line":"        table_name\u003dfloating_ip_port_forwarding_table_name)"},{"line_number":79,"context_line":""},{"line_number":80,"context_line":"    op.alter_column(floating_ip_port_forwarding_table_name, \u0027socket\u0027,"}],"source_content_type":"text/x-python","patch_set":5,"id":"307e5cef_c9e94a87","line":77,"range":{"start_line":76,"start_character":25,"end_line":77,"end_character":64},"in_reply_to":"24c1b888_c6ba49b1","updated":"2021-07-19 18:27:36.000000000","message":"Psql has a limit of 64 characters in constraints\u0027 name","commit_id":"74ebbb78b9a0bbde868d0b0bb7a8dad242842a26"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"5350870bc9bdae4140ccf4a54eb0a2d517697976","unresolved":true,"context_lines":[{"line_number":29,"context_line":""},{"line_number":30,"context_line":"# revision identifiers, used by Alembic."},{"line_number":31,"context_line":"revision \u003d \u0027I43e0b669096\u0027"},{"line_number":32,"context_line":"down_revision \u003d \u00278df53b0d2c0e\u0027"},{"line_number":33,"context_line":"floating_ip_port_forwarding_table_name \u003d \u0027portforwardings\u0027"},{"line_number":34,"context_line":"portforwardings \u003d sa.Table("},{"line_number":35,"context_line":"    floating_ip_port_forwarding_table_name, sa.MetaData(),"}],"source_content_type":"text/x-python","patch_set":6,"id":"bed06123_b0ae76d5","line":32,"updated":"2021-07-20 11:00:23.000000000","message":"usually separated with empty lines","commit_id":"282c79fb54df10f1c6935e27bb6295ebb0e26c41"},{"author":{"_account_id":30695,"name":"Pedro Henrique Pereira Martins","email":"phpm13@gmail.com","username":"pedrohpmartins"},"change_message_id":"f9da0e6caa9145664c9b8d0cd304227953ff7f19","unresolved":false,"context_lines":[{"line_number":29,"context_line":""},{"line_number":30,"context_line":"# revision identifiers, used by Alembic."},{"line_number":31,"context_line":"revision \u003d \u0027I43e0b669096\u0027"},{"line_number":32,"context_line":"down_revision \u003d \u00278df53b0d2c0e\u0027"},{"line_number":33,"context_line":"floating_ip_port_forwarding_table_name \u003d \u0027portforwardings\u0027"},{"line_number":34,"context_line":"portforwardings \u003d sa.Table("},{"line_number":35,"context_line":"    floating_ip_port_forwarding_table_name, sa.MetaData(),"}],"source_content_type":"text/x-python","patch_set":6,"id":"e388976d_3dff1dc9","line":32,"in_reply_to":"bed06123_b0ae76d5","updated":"2021-07-30 16:52:31.000000000","message":"Done","commit_id":"282c79fb54df10f1c6935e27bb6295ebb0e26c41"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"5350870bc9bdae4140ccf4a54eb0a2d517697976","unresolved":true,"context_lines":[{"line_number":30,"context_line":"# revision identifiers, used by Alembic."},{"line_number":31,"context_line":"revision \u003d \u0027I43e0b669096\u0027"},{"line_number":32,"context_line":"down_revision \u003d \u00278df53b0d2c0e\u0027"},{"line_number":33,"context_line":"floating_ip_port_forwarding_table_name \u003d \u0027portforwardings\u0027"},{"line_number":34,"context_line":"portforwardings \u003d sa.Table("},{"line_number":35,"context_line":"    floating_ip_port_forwarding_table_name, sa.MetaData(),"},{"line_number":36,"context_line":"    sa.Column(\u0027id\u0027, sa.String(length\u003dconstants.UUID_FIELD_SIZE),"}],"source_content_type":"text/x-python","patch_set":6,"id":"00743985_a4331082","line":33,"range":{"start_line":33,"start_character":0,"end_line":33,"end_character":38},"updated":"2021-07-20 11:00:23.000000000","message":"nit: why such a long name, consider just PF_TABLE_NAME (upper case for a const)","commit_id":"282c79fb54df10f1c6935e27bb6295ebb0e26c41"},{"author":{"_account_id":30695,"name":"Pedro Henrique Pereira Martins","email":"phpm13@gmail.com","username":"pedrohpmartins"},"change_message_id":"f9da0e6caa9145664c9b8d0cd304227953ff7f19","unresolved":false,"context_lines":[{"line_number":30,"context_line":"# revision identifiers, used by Alembic."},{"line_number":31,"context_line":"revision \u003d \u0027I43e0b669096\u0027"},{"line_number":32,"context_line":"down_revision \u003d \u00278df53b0d2c0e\u0027"},{"line_number":33,"context_line":"floating_ip_port_forwarding_table_name \u003d \u0027portforwardings\u0027"},{"line_number":34,"context_line":"portforwardings \u003d sa.Table("},{"line_number":35,"context_line":"    floating_ip_port_forwarding_table_name, sa.MetaData(),"},{"line_number":36,"context_line":"    sa.Column(\u0027id\u0027, sa.String(length\u003dconstants.UUID_FIELD_SIZE),"}],"source_content_type":"text/x-python","patch_set":6,"id":"01d8700a_8d1d2e1e","line":33,"range":{"start_line":33,"start_character":0,"end_line":33,"end_character":38},"in_reply_to":"00743985_a4331082","updated":"2021-07-30 16:52:31.000000000","message":"Done","commit_id":"282c79fb54df10f1c6935e27bb6295ebb0e26c41"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"5350870bc9bdae4140ccf4a54eb0a2d517697976","unresolved":true,"context_lines":[{"line_number":31,"context_line":"revision \u003d \u0027I43e0b669096\u0027"},{"line_number":32,"context_line":"down_revision \u003d \u00278df53b0d2c0e\u0027"},{"line_number":33,"context_line":"floating_ip_port_forwarding_table_name \u003d \u0027portforwardings\u0027"},{"line_number":34,"context_line":"portforwardings \u003d sa.Table("},{"line_number":35,"context_line":"    floating_ip_port_forwarding_table_name, sa.MetaData(),"},{"line_number":36,"context_line":"    sa.Column(\u0027id\u0027, sa.String(length\u003dconstants.UUID_FIELD_SIZE),"},{"line_number":37,"context_line":"              nullable\u003dFalse),"}],"source_content_type":"text/x-python","patch_set":6,"id":"e5fbdec6_3894c499","line":34,"range":{"start_line":34,"start_character":0,"end_line":34,"end_character":15},"updated":"2021-07-20 11:00:23.000000000","message":"consider pf_table for clarity","commit_id":"282c79fb54df10f1c6935e27bb6295ebb0e26c41"},{"author":{"_account_id":30695,"name":"Pedro Henrique Pereira Martins","email":"phpm13@gmail.com","username":"pedrohpmartins"},"change_message_id":"f9da0e6caa9145664c9b8d0cd304227953ff7f19","unresolved":false,"context_lines":[{"line_number":31,"context_line":"revision \u003d \u0027I43e0b669096\u0027"},{"line_number":32,"context_line":"down_revision \u003d \u00278df53b0d2c0e\u0027"},{"line_number":33,"context_line":"floating_ip_port_forwarding_table_name \u003d \u0027portforwardings\u0027"},{"line_number":34,"context_line":"portforwardings \u003d sa.Table("},{"line_number":35,"context_line":"    floating_ip_port_forwarding_table_name, sa.MetaData(),"},{"line_number":36,"context_line":"    sa.Column(\u0027id\u0027, sa.String(length\u003dconstants.UUID_FIELD_SIZE),"},{"line_number":37,"context_line":"              nullable\u003dFalse),"}],"source_content_type":"text/x-python","patch_set":6,"id":"f06c2430_4fe0ec7b","line":34,"range":{"start_line":34,"start_character":0,"end_line":34,"end_character":15},"in_reply_to":"e5fbdec6_3894c499","updated":"2021-07-30 16:52:31.000000000","message":"Done","commit_id":"282c79fb54df10f1c6935e27bb6295ebb0e26c41"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"5350870bc9bdae4140ccf4a54eb0a2d517697976","unresolved":true,"context_lines":[{"line_number":44,"context_line":"    sa.Column(\u0027external_port_end\u0027, sa.Integer(), nullable\u003dFalse),"},{"line_number":45,"context_line":"    sa.Column(\u0027internal_neutron_port_id\u0027, sa.String(constants.UUID_FIELD_SIZE),"},{"line_number":46,"context_line":"              nullable\u003dFalse),"},{"line_number":47,"context_line":"    sa.Column(\u0027internal_port_id\u0027, sa.String(constants.UUID_FIELD_SIZE),"},{"line_number":48,"context_line":"              nullable\u003dFalse)"},{"line_number":49,"context_line":")"},{"line_number":50,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"4fcd006b_8aab8d5b","line":47,"range":{"start_line":47,"start_character":15,"end_line":47,"end_character":31},"updated":"2021-07-20 11:00:23.000000000","message":"what\u0027s the difference from above? Also can\u0027t see this in the spec","commit_id":"282c79fb54df10f1c6935e27bb6295ebb0e26c41"},{"author":{"_account_id":30695,"name":"Pedro Henrique Pereira Martins","email":"phpm13@gmail.com","username":"pedrohpmartins"},"change_message_id":"f9da0e6caa9145664c9b8d0cd304227953ff7f19","unresolved":true,"context_lines":[{"line_number":44,"context_line":"    sa.Column(\u0027external_port_end\u0027, sa.Integer(), nullable\u003dFalse),"},{"line_number":45,"context_line":"    sa.Column(\u0027internal_neutron_port_id\u0027, sa.String(constants.UUID_FIELD_SIZE),"},{"line_number":46,"context_line":"              nullable\u003dFalse),"},{"line_number":47,"context_line":"    sa.Column(\u0027internal_port_id\u0027, sa.String(constants.UUID_FIELD_SIZE),"},{"line_number":48,"context_line":"              nullable\u003dFalse)"},{"line_number":49,"context_line":")"},{"line_number":50,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"6e5f81e1_4e218158","line":47,"range":{"start_line":47,"start_character":15,"end_line":47,"end_character":31},"in_reply_to":"4fcd006b_8aab8d5b","updated":"2021-07-30 16:52:31.000000000","message":"I added this one for this suggestion https://review.opendev.org/c/openstack/neutron/+/798961/5/neutron/db/migration/alembic_migrations/versions/xena/expand/I43e0b669096_port_forwarding_port_ranges.py#29, so to maintain the possibility of using two sequential versions of openstack using the same database, I will first create a new column and in another patch, I will remove the old internal_neutron_port_id column to finish the column renaming","commit_id":"282c79fb54df10f1c6935e27bb6295ebb0e26c41"}],"neutron/db/migration/alembic_migrations/versions/yoga/expand/I43e0b669096_port_forwarding_port_ranges.py":[{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"fcd5709fb7260618ffafeeaf50a92e77b918175c","unresolved":true,"context_lines":[{"line_number":36,"context_line":"    PF_TABLE_NAME, sa.MetaData(),"},{"line_number":37,"context_line":"    sa.Column(\u0027id\u0027, sa.String(length\u003dconstants.UUID_FIELD_SIZE),"},{"line_number":38,"context_line":"              nullable\u003dFalse),"},{"line_number":39,"context_line":"    sa.Column(\u0027socket\u0027, sa.String(length\u003d36), nullable\u003dFalse),"},{"line_number":40,"context_line":"    sa.Column(\u0027external_port\u0027, sa.Integer(), nullable\u003dFalse),"},{"line_number":41,"context_line":"    sa.Column(\u0027internal_ip_address\u0027, sa.String(length\u003d64), nullable\u003dFalse),"},{"line_number":42,"context_line":"    sa.Column(\u0027internal_port_start\u0027, sa.Integer(), nullable\u003dFalse),"}],"source_content_type":"text/x-python","patch_set":16,"id":"03fdbbf7_27dbba85","line":39,"range":{"start_line":39,"start_character":15,"end_line":39,"end_character":21},"updated":"2021-12-02 13:35:04.000000000","message":"OK, now I see the discussion here [1]. This is partially correct: in DB expands we should not drop columns but we actually do it. To allow this you need to add a drop exception [2].\n\nThus again here, I agree with dropping \"socket\" and \"external_port\" now and moving the existing column values to the new ones created.\n\n\n[1]https://review.opendev.org/c/openstack/neutron-specs/+/739549/2#message-70fb83d15a5e140823287f2c4aab4e228c1e16f1\n[2]https://review.opendev.org/c/openstack/neutron/+/815855/14/neutron/db/migration/alembic_migrations/versions/yoga/expand/1ffef8d6f371_rbac_target_tenant_to_target_project.py","commit_id":"d5fc876fc032eaaa3aeee84fea337f4e2661293d"},{"author":{"_account_id":30695,"name":"Pedro Henrique Pereira Martins","email":"phpm13@gmail.com","username":"pedrohpmartins"},"change_message_id":"9072189f8263c226e0b1ec9984e59733f75b5800","unresolved":true,"context_lines":[{"line_number":36,"context_line":"    PF_TABLE_NAME, sa.MetaData(),"},{"line_number":37,"context_line":"    sa.Column(\u0027id\u0027, sa.String(length\u003dconstants.UUID_FIELD_SIZE),"},{"line_number":38,"context_line":"              nullable\u003dFalse),"},{"line_number":39,"context_line":"    sa.Column(\u0027socket\u0027, sa.String(length\u003d36), nullable\u003dFalse),"},{"line_number":40,"context_line":"    sa.Column(\u0027external_port\u0027, sa.Integer(), nullable\u003dFalse),"},{"line_number":41,"context_line":"    sa.Column(\u0027internal_ip_address\u0027, sa.String(length\u003d64), nullable\u003dFalse),"},{"line_number":42,"context_line":"    sa.Column(\u0027internal_port_start\u0027, sa.Integer(), nullable\u003dFalse),"}],"source_content_type":"text/x-python","patch_set":16,"id":"e729dd8e_1dd27c2f","line":39,"range":{"start_line":39,"start_character":15,"end_line":39,"end_character":21},"in_reply_to":"03fdbbf7_27dbba85","updated":"2021-12-02 15:26:34.000000000","message":"Sure, I agree to not keep dead columns in the database and as we are already dropping columns on expand, then I will remove these unused columns. Thanks.","commit_id":"d5fc876fc032eaaa3aeee84fea337f4e2661293d"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"23d41c93ec420d07a30490b540e74181f4fd6d89","unresolved":true,"context_lines":[{"line_number":88,"context_line":""},{"line_number":89,"context_line":"    op.drop_column(PF_TABLE_NAME, \u0027external_port\u0027)"},{"line_number":90,"context_line":""},{"line_number":91,"context_line":"    op.drop_column(PF_TABLE_NAME, \u0027internal_neutron_port_id\u0027)"},{"line_number":92,"context_line":""},{"line_number":93,"context_line":"    migration.create_foreign_keys(PF_TABLE_NAME, foreign_keys)"},{"line_number":94,"context_line":""}],"source_content_type":"text/x-python","patch_set":21,"id":"4da50a90_23f1d389","line":91,"updated":"2022-01-04 08:24:07.000000000","message":"why You are replacing this column with \"internal_port_id\" in that patch?","commit_id":"9940d3b6ed7f4f8724dcd01a7fc0c65359f8ab23"},{"author":{"_account_id":30695,"name":"Pedro Henrique Pereira Martins","email":"phpm13@gmail.com","username":"pedrohpmartins"},"change_message_id":"1cabfe5607d10f2a6135832b16051fbf7ae8d1b3","unresolved":true,"context_lines":[{"line_number":88,"context_line":""},{"line_number":89,"context_line":"    op.drop_column(PF_TABLE_NAME, \u0027external_port\u0027)"},{"line_number":90,"context_line":""},{"line_number":91,"context_line":"    op.drop_column(PF_TABLE_NAME, \u0027internal_neutron_port_id\u0027)"},{"line_number":92,"context_line":""},{"line_number":93,"context_line":"    migration.create_foreign_keys(PF_TABLE_NAME, foreign_keys)"},{"line_number":94,"context_line":""}],"source_content_type":"text/x-python","patch_set":21,"id":"a4ac6160_03a092c5","line":91,"in_reply_to":"4da50a90_23f1d389","updated":"2022-01-04 15:37:17.000000000","message":"https://review.opendev.org/c/openstack/neutron/+/798961/comment/3706cce3_29b214c4/\n\nI renamed this column as suggested by Rodolfo Alonso. I know that this change is not related with this patch but I agree with him that this prefix \"neutron\" does not make sense in the \"neutron\" database, its redundant, so even that this change is not related with this patch, I thought that as I was doing some changes in this table, one more change to clean a column name would not be a problem :). But if you think that we should open a new patch to clean this column name, then I could remove this from this patch and create a new one to clean this ;)","commit_id":"9940d3b6ed7f4f8724dcd01a7fc0c65359f8ab23"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"a4c1dcf98936cfc84f580ddd0307bb87e13db832","unresolved":true,"context_lines":[{"line_number":88,"context_line":""},{"line_number":89,"context_line":"    op.drop_column(PF_TABLE_NAME, \u0027external_port\u0027)"},{"line_number":90,"context_line":""},{"line_number":91,"context_line":"    op.drop_column(PF_TABLE_NAME, \u0027internal_neutron_port_id\u0027)"},{"line_number":92,"context_line":""},{"line_number":93,"context_line":"    migration.create_foreign_keys(PF_TABLE_NAME, foreign_keys)"},{"line_number":94,"context_line":""}],"source_content_type":"text/x-python","patch_set":21,"id":"c39bd0f7_763a5397","line":91,"in_reply_to":"a4ac6160_03a092c5","updated":"2022-01-05 15:40:54.000000000","message":"I know I\u0027m nit picker (sorry for that) but IMO db changes should be done in separate commits. Otherwise in few months someone will try to understand why that rename of the column was needed for this port forwarding ranges and it will for sure not be clear for people :)","commit_id":"9940d3b6ed7f4f8724dcd01a7fc0c65359f8ab23"},{"author":{"_account_id":30695,"name":"Pedro Henrique Pereira Martins","email":"phpm13@gmail.com","username":"pedrohpmartins"},"change_message_id":"235b78ef73adfffed031b80b253283a619c1b6fb","unresolved":true,"context_lines":[{"line_number":88,"context_line":""},{"line_number":89,"context_line":"    op.drop_column(PF_TABLE_NAME, \u0027external_port\u0027)"},{"line_number":90,"context_line":""},{"line_number":91,"context_line":"    op.drop_column(PF_TABLE_NAME, \u0027internal_neutron_port_id\u0027)"},{"line_number":92,"context_line":""},{"line_number":93,"context_line":"    migration.create_foreign_keys(PF_TABLE_NAME, foreign_keys)"},{"line_number":94,"context_line":""}],"source_content_type":"text/x-python","patch_set":21,"id":"15c35440_5467337a","line":91,"in_reply_to":"c39bd0f7_763a5397","updated":"2022-01-05 18:26:56.000000000","message":"Not a problem, I will remove the column rename from this patch :)","commit_id":"9940d3b6ed7f4f8724dcd01a7fc0c65359f8ab23"}],"neutron/db/migration/alembic_migrations/versions/zed/expand/I43e0b669096_port_forwarding_port_ranges.py":[{"author":{"_account_id":8064,"name":"Jake Yip","email":"jake.yip@ardc.edu.au","username":"jake"},"change_message_id":"8dfe24ca0147cea2ae2e657afc2f45e759639597","unresolved":true,"context_lines":[{"line_number":76,"context_line":"        constraint_name\u003d\u0027uniq_port_forwardings0ptcl0in_prt_id0in_ip_addr0\u0027"},{"line_number":77,"context_line":"                        \u0027in_prts\u0027,"},{"line_number":78,"context_line":"        table_name\u003dPF_TABLE_NAME)"},{"line_number":79,"context_line":""},{"line_number":80,"context_line":"    op.drop_column(PF_TABLE_NAME, \u0027socket\u0027)"},{"line_number":81,"context_line":""},{"line_number":82,"context_line":"    op.drop_column(PF_TABLE_NAME, \u0027external_port\u0027)"},{"line_number":83,"context_line":""},{"line_number":84,"context_line":"    migration.create_foreign_keys(PF_TABLE_NAME, foreign_keys)"},{"line_number":85,"context_line":""}],"source_content_type":"text/x-python","patch_set":35,"id":"35df8883_f48ff5fa","line":82,"range":{"start_line":79,"start_character":0,"end_line":82,"end_character":50},"updated":"2024-07-08 02:29:29.000000000","message":"should this have been dropped in an expand migration?","commit_id":"b271c82d10b588d94c3278640a8f144fa55ac65a"}],"neutron/db/models/port_forwarding.py":[{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"f067d9616f2c2cf89d0bb37555938891e746459d","unresolved":true,"context_lines":[{"line_number":32,"context_line":"                            \u0027external_port_start\u0027, \u0027external_port_end\u0027,"},{"line_number":33,"context_line":"                            name\u003d\u0027uniq_port_forwardings0floatingip_id0\u0027"},{"line_number":34,"context_line":"                                 \u0027external_port0protocol\u0027),"},{"line_number":35,"context_line":"        sa.UniqueConstraint(\u0027internal_neutron_port_id\u0027, \u0027internal_ip_address\u0027,"},{"line_number":36,"context_line":"                            \u0027internal_port_start\u0027, \u0027internal_port_end\u0027,"},{"line_number":37,"context_line":"                            \u0027protocol\u0027,"},{"line_number":38,"context_line":"                            name\u003d\u0027uniq_port_forwardings0\u0027"},{"line_number":39,"context_line":"                                 \u0027internal_neutron_port_id0ports0protocol\u0027)"},{"line_number":40,"context_line":"    )"}],"source_content_type":"text/x-python","patch_set":5,"id":"72f9e7d6_aee9d332","line":37,"range":{"start_line":35,"start_character":28,"end_line":37,"end_character":39},"updated":"2021-07-08 09:20:17.000000000","message":"This constraint does not have the same order as in the DB upgrade (actually I prefer this one, with both ports in order):\n\n    op.create_unique_constraint(\n        columns\u003d[\u0027internal_neutron_port_id\u0027, \u0027internal_ip_address\u0027,\n                 \u0027internal_port_start\u0027, \u0027protocol\u0027, \u0027internal_port_end\u0027],\n        constraint_name\u003d\u0027uniq_port_forwardings0\u0027\n                        \u0027internal_neutron_port_id0ports0protocol\u0027,","commit_id":"74ebbb78b9a0bbde868d0b0bb7a8dad242842a26"},{"author":{"_account_id":30695,"name":"Pedro Henrique Pereira Martins","email":"phpm13@gmail.com","username":"pedrohpmartins"},"change_message_id":"c5c5fa4687d166d03da0bb46512d27e560b83490","unresolved":true,"context_lines":[{"line_number":32,"context_line":"                            \u0027external_port_start\u0027, \u0027external_port_end\u0027,"},{"line_number":33,"context_line":"                            name\u003d\u0027uniq_port_forwardings0floatingip_id0\u0027"},{"line_number":34,"context_line":"                                 \u0027external_port0protocol\u0027),"},{"line_number":35,"context_line":"        sa.UniqueConstraint(\u0027internal_neutron_port_id\u0027, \u0027internal_ip_address\u0027,"},{"line_number":36,"context_line":"                            \u0027internal_port_start\u0027, \u0027internal_port_end\u0027,"},{"line_number":37,"context_line":"                            \u0027protocol\u0027,"},{"line_number":38,"context_line":"                            name\u003d\u0027uniq_port_forwardings0\u0027"},{"line_number":39,"context_line":"                                 \u0027internal_neutron_port_id0ports0protocol\u0027)"},{"line_number":40,"context_line":"    )"}],"source_content_type":"text/x-python","patch_set":5,"id":"c733d48f_fcf1a0f1","line":37,"range":{"start_line":35,"start_character":28,"end_line":37,"end_character":39},"in_reply_to":"72f9e7d6_aee9d332","updated":"2021-07-19 18:27:36.000000000","message":"I changed the db columns order.","commit_id":"74ebbb78b9a0bbde868d0b0bb7a8dad242842a26"}],"neutron/objects/port_forwarding.py":[{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"68372b8f6b43219a19dc1991996e586594dbb62f","unresolved":true,"context_lines":[{"line_number":63,"context_line":"        \u0027internal_port\u0027: common_types.PortRangeField(nullable\u003dFalse),"},{"line_number":64,"context_line":"        \u0027floating_ip_address\u0027: obj_fields.IPV4AddressField(),"},{"line_number":65,"context_line":"        \u0027router_id\u0027: common_types.UUIDField(),"},{"line_number":66,"context_line":"        \u0027description\u0027: obj_fields.StringField()"},{"line_number":67,"context_line":"    }"},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"    comparision_ignored_fields \u003d [\u0027revision_number\u0027, \u0027updated_at\u0027,"}],"source_content_type":"text/x-python","patch_set":8,"id":"db766ead_7d8cb035","line":66,"updated":"2021-08-26 10:56:41.000000000","message":"shouldn\u0027t You add those new fields here also?","commit_id":"2e29f0c8a6988fd6e05d2a94557e9a49d7939241"},{"author":{"_account_id":30695,"name":"Pedro Henrique Pereira Martins","email":"phpm13@gmail.com","username":"pedrohpmartins"},"change_message_id":"e153cc363c0c66d9853a0b4dce5da473e69bab62","unresolved":true,"context_lines":[{"line_number":63,"context_line":"        \u0027internal_port\u0027: common_types.PortRangeField(nullable\u003dFalse),"},{"line_number":64,"context_line":"        \u0027floating_ip_address\u0027: obj_fields.IPV4AddressField(),"},{"line_number":65,"context_line":"        \u0027router_id\u0027: common_types.UUIDField(),"},{"line_number":66,"context_line":"        \u0027description\u0027: obj_fields.StringField()"},{"line_number":67,"context_line":"    }"},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"    comparision_ignored_fields \u003d [\u0027revision_number\u0027, \u0027updated_at\u0027,"}],"source_content_type":"text/x-python","patch_set":8,"id":"16a6c3ca_9094cdcc","line":66,"in_reply_to":"db766ead_7d8cb035","updated":"2021-08-26 12:31:21.000000000","message":"this is the portforwarding object, I will work on it on the next patch, to add the implementation in the workflow, this patch will only introduce the new fields in the database model, like defined in the neutron specs work itens:\n\nhttps://github.com/openstack/neutron-specs/blob/master/specs/wallaby/port-forwarding-port-ranges.rst#work-items","commit_id":"2e29f0c8a6988fd6e05d2a94557e9a49d7939241"}],"neutron/plugins/ml2/drivers/ovn/mech_driver/ovsdb/ovn_db_sync.py":[{"author":{"_account_id":30380,"name":"ZhouHeng","email":"zhouhenglc@inspur.com","username":"zhouhenglc"},"change_message_id":"0ec1e332b0b15910ccbc912d83990bf40be3af7a","unresolved":true,"context_lines":[{"line_number":373,"context_line":"    def _unroll_port_forwarding(self, db_pf):"},{"line_number":374,"context_line":"        pf \u003d PortForwarding(**db_pf)"},{"line_number":375,"context_line":"        pfs \u003d pf.unroll_port_ranges()"},{"line_number":376,"context_line":"        return [{f: getattr(p, f)"},{"line_number":377,"context_line":"                 for f in p.fields if hasattr(p, f)}"},{"line_number":378,"context_line":"                for p in pfs]"},{"line_number":379,"context_line":""},{"line_number":380,"context_line":"    def _calculate_fip_pfs_differences(self, ovn_rtr_lb_pfs, db_pfs):"},{"line_number":381,"context_line":"        to_add_or_update \u003d set()"}],"source_content_type":"text/x-python","patch_set":33,"id":"d545a061_eb56b339","line":378,"range":{"start_line":376,"start_character":15,"end_line":378,"end_character":29},"updated":"2022-03-15 00:54:41.000000000","message":"why not use p.to_dict()?","commit_id":"a944da312c601db90cf5d6e0d8b39348c3e3bf7e"},{"author":{"_account_id":30695,"name":"Pedro Henrique Pereira Martins","email":"phpm13@gmail.com","username":"pedrohpmartins"},"change_message_id":"b77f166ee944914aa0aeb27de4f9acb8eecaf8b4","unresolved":true,"context_lines":[{"line_number":373,"context_line":"    def _unroll_port_forwarding(self, db_pf):"},{"line_number":374,"context_line":"        pf \u003d PortForwarding(**db_pf)"},{"line_number":375,"context_line":"        pfs \u003d pf.unroll_port_ranges()"},{"line_number":376,"context_line":"        return [{f: getattr(p, f)"},{"line_number":377,"context_line":"                 for f in p.fields if hasattr(p, f)}"},{"line_number":378,"context_line":"                for p in pfs]"},{"line_number":379,"context_line":""},{"line_number":380,"context_line":"    def _calculate_fip_pfs_differences(self, ovn_rtr_lb_pfs, db_pfs):"},{"line_number":381,"context_line":"        to_add_or_update \u003d set()"}],"source_content_type":"text/x-python","patch_set":33,"id":"b235960e_c468feaa","line":378,"range":{"start_line":376,"start_character":15,"end_line":378,"end_character":29},"in_reply_to":"d545a061_eb56b339","updated":"2022-03-15 01:05:51.000000000","message":"I didnt know this method from NeutronObject superclass, I will use it. \nThanks again.","commit_id":"a944da312c601db90cf5d6e0d8b39348c3e3bf7e"}],"neutron/services/portforwarding/pf_plugin.py":[{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"23d41c93ec420d07a30490b540e74181f4fd6d89","unresolved":true,"context_lines":[{"line_number":461,"context_line":"                        \"are %s\") % conflict_params"},{"line_number":462,"context_line":"            raise lib_exc.BadRequest(resource\u003dapidef.RESOURCE_NAME,"},{"line_number":463,"context_line":"                                     msg\u003dmessage)"},{"line_number":464,"context_line":""},{"line_number":465,"context_line":"        if self._rpc_notifications_required:"},{"line_number":466,"context_line":"            self.push_api.push(context, [pf_obj], rpc_events.UPDATED)"},{"line_number":467,"context_line":"        registry.publish(pf_consts.PORT_FORWARDING, events.AFTER_UPDATE,"}],"source_content_type":"text/x-python","patch_set":21,"id":"4e5426ba_f6554959","line":464,"updated":"2022-01-04 08:24:07.000000000","message":"nitty nit: not related","commit_id":"9940d3b6ed7f4f8724dcd01a7fc0c65359f8ab23"},{"author":{"_account_id":30695,"name":"Pedro Henrique Pereira Martins","email":"phpm13@gmail.com","username":"pedrohpmartins"},"change_message_id":"1cabfe5607d10f2a6135832b16051fbf7ae8d1b3","unresolved":true,"context_lines":[{"line_number":461,"context_line":"                        \"are %s\") % conflict_params"},{"line_number":462,"context_line":"            raise lib_exc.BadRequest(resource\u003dapidef.RESOURCE_NAME,"},{"line_number":463,"context_line":"                                     msg\u003dmessage)"},{"line_number":464,"context_line":""},{"line_number":465,"context_line":"        if self._rpc_notifications_required:"},{"line_number":466,"context_line":"            self.push_api.push(context, [pf_obj], rpc_events.UPDATED)"},{"line_number":467,"context_line":"        registry.publish(pf_consts.PORT_FORWARDING, events.AFTER_UPDATE,"}],"source_content_type":"text/x-python","patch_set":21,"id":"d922ad8c_b6bd0514","line":464,"in_reply_to":"4e5426ba_f6554959","updated":"2022-01-04 15:37:17.000000000","message":"done","commit_id":"9940d3b6ed7f4f8724dcd01a7fc0c65359f8ab23"},{"author":{"_account_id":30380,"name":"ZhouHeng","email":"zhouhenglc@inspur.com","username":"zhouhenglc"},"change_message_id":"922fe533532461ca0b74b5c8a806ebda438844ce","unresolved":true,"context_lines":[{"line_number":503,"context_line":"        protocol \u003d pf_dict.get(\u0027protocol\u0027) or protocol"},{"line_number":504,"context_line":"        internal_ip_address \u003d pf_dict.get("},{"line_number":505,"context_line":"            \u0027internal_ip_address\u0027) or internal_ip_address"},{"line_number":506,"context_line":"        self._validate_ranges("},{"line_number":507,"context_line":"            internal_port_range\u003dinternal_range_pf_dict,"},{"line_number":508,"context_line":"            external_port_range\u003dexternal_range_pf_dict)"},{"line_number":509,"context_line":""},{"line_number":510,"context_line":"        if internal_range_pf_dict:"},{"line_number":511,"context_line":"            pf_same_internal_port \u003d pf.PortForwarding.get_objects("}],"source_content_type":"text/x-python","patch_set":28,"id":"87e349c5_345fa2ff","line":508,"range":{"start_line":506,"start_character":8,"end_line":508,"end_character":55},"updated":"2022-03-04 01:14:31.000000000","message":"Does the work here overlap with the validate in the API definition? validator \"type:port_range\" has ensure port range format is right. Here, only need to verify that the length of the port range is consistent","commit_id":"6d34619a9105eb5dcd5923a03efa9f1ae582b65d"},{"author":{"_account_id":30380,"name":"ZhouHeng","email":"zhouhenglc@inspur.com","username":"zhouhenglc"},"change_message_id":"4bb393040579e57798c87565c0f6892ee9da137b","unresolved":true,"context_lines":[{"line_number":503,"context_line":"        protocol \u003d pf_dict.get(\u0027protocol\u0027) or protocol"},{"line_number":504,"context_line":"        internal_ip_address \u003d pf_dict.get("},{"line_number":505,"context_line":"            \u0027internal_ip_address\u0027) or internal_ip_address"},{"line_number":506,"context_line":"        self._validate_ranges("},{"line_number":507,"context_line":"            internal_port_range\u003dinternal_range_pf_dict,"},{"line_number":508,"context_line":"            external_port_range\u003dexternal_range_pf_dict)"},{"line_number":509,"context_line":""},{"line_number":510,"context_line":"        if internal_range_pf_dict:"},{"line_number":511,"context_line":"            pf_same_internal_port \u003d pf.PortForwarding.get_objects("}],"source_content_type":"text/x-python","patch_set":28,"id":"a5146229_184d6eea","line":508,"range":{"start_line":506,"start_character":8,"end_line":508,"end_character":55},"in_reply_to":"25938e08_18e156a3","updated":"2022-03-07 01:07:27.000000000","message":"i have a question in https://review.opendev.org/c/openstack/neutron-lib/+/782318","commit_id":"6d34619a9105eb5dcd5923a03efa9f1ae582b65d"},{"author":{"_account_id":30695,"name":"Pedro Henrique Pereira Martins","email":"phpm13@gmail.com","username":"pedrohpmartins"},"change_message_id":"55c02d7a48642b5d95299277e0c5bfe53ba82e53","unresolved":true,"context_lines":[{"line_number":503,"context_line":"        protocol \u003d pf_dict.get(\u0027protocol\u0027) or protocol"},{"line_number":504,"context_line":"        internal_ip_address \u003d pf_dict.get("},{"line_number":505,"context_line":"            \u0027internal_ip_address\u0027) or internal_ip_address"},{"line_number":506,"context_line":"        self._validate_ranges("},{"line_number":507,"context_line":"            internal_port_range\u003dinternal_range_pf_dict,"},{"line_number":508,"context_line":"            external_port_range\u003dexternal_range_pf_dict)"},{"line_number":509,"context_line":""},{"line_number":510,"context_line":"        if internal_range_pf_dict:"},{"line_number":511,"context_line":"            pf_same_internal_port \u003d pf.PortForwarding.get_objects("}],"source_content_type":"text/x-python","patch_set":28,"id":"25938e08_18e156a3","line":508,"range":{"start_line":506,"start_character":8,"end_line":508,"end_character":55},"in_reply_to":"87e349c5_345fa2ff","updated":"2022-03-04 11:44:22.000000000","message":"Yes, indeed, the neutron_lib is already doing this kind of validation, but we still need to validate the relation between external and internal ports, so I will keep the method and remove only the first validation inside the method.\n\nThanks 😊","commit_id":"6d34619a9105eb5dcd5923a03efa9f1ae582b65d"},{"author":{"_account_id":30380,"name":"ZhouHeng","email":"zhouhenglc@inspur.com","username":"zhouhenglc"},"change_message_id":"4bb393040579e57798c87565c0f6892ee9da137b","unresolved":true,"context_lines":[{"line_number":554,"context_line":"        range_a \u003d list(map(int, str(range_a).split(\u0027:\u0027)))"},{"line_number":555,"context_line":"        range_b \u003d list(map(int, str(range_b).split(\u0027:\u0027)))"},{"line_number":556,"context_line":""},{"line_number":557,"context_line":"        invalid_port \u003d next((port for port in (range_a + range_b)"},{"line_number":558,"context_line":"                             if 65535 \u003c port or port \u003c 1), None)"},{"line_number":559,"context_line":""},{"line_number":560,"context_line":"        if invalid_port:"},{"line_number":561,"context_line":"            raise lib_exc.BadRequest(resource\u003dapidef.RESOURCE_NAME,"},{"line_number":562,"context_line":"                                     msg\u003d\"Invalid port value, the \""},{"line_number":563,"context_line":"                                         \"port value must be \""},{"line_number":564,"context_line":"                                         \"a value between 1 and 65535.\")"},{"line_number":565,"context_line":""},{"line_number":566,"context_line":"        initial_intersection \u003d max(range_a[0], range_b[0])"},{"line_number":567,"context_line":"        final_intersection \u003d min(range_a[-1], range_b[-1])"}],"source_content_type":"text/x-python","patch_set":29,"id":"a3edb03e_963d22d0","line":564,"range":{"start_line":557,"start_character":8,"end_line":564,"end_character":72},"updated":"2022-03-07 01:07:27.000000000","message":"When will it be triggered？","commit_id":"10083b2fcd0ad0301c760ae5cb458708560b9e12"}]}
