)]}'
{"neutron/db/migration/alembic_migrations/versions/CONTRACT_HEAD":[{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"3f5f370245331375738113b0f2eef009a70b7c06","unresolved":false,"context_lines":[{"line_number":1,"context_line":"d78282f85225"}],"source_content_type":"application/octet-stream","patch_set":2,"id":"3f79a3b5_0bae232e","line":1,"updated":"2018-10-29 19:52:55.000000000","message":"This file should not change as there is no contraction allowed any more","commit_id":"b8aae9ccc7594572a1f15c448c61937e57e8797a"}],"neutron/db/migration/alembic_migrations/versions/stein/contract/d78282f85225_drop_portforwarding_uniq.py":[{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"3f5f370245331375738113b0f2eef009a70b7c06","unresolved":false,"context_lines":[{"line_number":11,"context_line":"#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the"},{"line_number":12,"context_line":"#    License for the specific language governing permissions and limitations"},{"line_number":13,"context_line":"#    under the License."},{"line_number":14,"context_line":"#"},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"\"\"\"drop portforwarding uniq"},{"line_number":17,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"3f79a3b5_eb73a7e3","line":14,"updated":"2018-10-29 19:52:55.000000000","message":"Regarding by other comment, if contraction not allowed this file isn\u0027t required","commit_id":"b8aae9ccc7594572a1f15c448c61937e57e8797a"}],"neutron/db/migration/alembic_migrations/versions/stein/expand/d72db3e25539_modify_uniq_port_forwarding.py":[{"author":{"_account_id":7249,"name":"Ann Taraday","email":"akamyshnikova@mirantis.com","username":"AKamyshnikova"},"change_message_id":"9ca20f701c2cca9e7774428d864d46466cec28f5","unresolved":false,"context_lines":[{"line_number":29,"context_line":""},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"def upgrade():"},{"line_number":32,"context_line":"    op.drop_constraint("},{"line_number":33,"context_line":"        constraint_name\u003d\u0027portforwardings_ibfk_1\u0027,"},{"line_number":34,"context_line":"        table_name\u003d\u0027portforwardings\u0027,"},{"line_number":35,"context_line":"        type_\u003d\"foreignkey\""}],"source_content_type":"text/x-python","patch_set":1,"id":"3f79a3b5_a924020f","line":32,"range":{"start_line":32,"start_character":7,"end_line":32,"end_character":22},"updated":"2018-10-26 10:05:48.000000000","message":"Drop is not safe for expand, I think you need to split this migration in two - one which drop constatins and is contract and one whicth creates and is expand.","commit_id":"4cb8c4c49fe22e041aada3f4195ebf9261711704"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"bf5aaad1d406bec3c4b1ccc3b294403d344e5ccb","unresolved":false,"context_lines":[{"line_number":29,"context_line":""},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"def upgrade():"},{"line_number":32,"context_line":"    op.drop_constraint("},{"line_number":33,"context_line":"        constraint_name\u003d\u0027portforwardings_ibfk_1\u0027,"},{"line_number":34,"context_line":"        table_name\u003d\u0027portforwardings\u0027,"},{"line_number":35,"context_line":"        type_\u003d\"foreignkey\""}],"source_content_type":"text/x-python","patch_set":1,"id":"3f79a3b5_4203c376","line":32,"range":{"start_line":32,"start_character":7,"end_line":32,"end_character":22},"in_reply_to":"3f79a3b5_09589686","updated":"2018-10-26 13:02:53.000000000","message":"Hello Ann, I have a question about the DB upgrade.\nShould this two steps (drop and re-create) be performed in a transaction? If we split this migration, then there will be a little gap without any constraint, right? How to prevent such issue?","commit_id":"4cb8c4c49fe22e041aada3f4195ebf9261711704"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"89a579919781c8620a377199be1021977bf0411d","unresolved":false,"context_lines":[{"line_number":29,"context_line":""},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"def upgrade():"},{"line_number":32,"context_line":"    op.drop_constraint("},{"line_number":33,"context_line":"        constraint_name\u003d\u0027portforwardings_ibfk_1\u0027,"},{"line_number":34,"context_line":"        table_name\u003d\u0027portforwardings\u0027,"},{"line_number":35,"context_line":"        type_\u003d\"foreignkey\""}],"source_content_type":"text/x-python","patch_set":1,"id":"3f79a3b5_09589686","line":32,"range":{"start_line":32,"start_character":7,"end_line":32,"end_character":22},"in_reply_to":"3f79a3b5_a924020f","updated":"2018-10-26 10:34:35.000000000","message":"Thanks for quick review, I\u0027ll do it next patch set. : )","commit_id":"4cb8c4c49fe22e041aada3f4195ebf9261711704"},{"author":{"_account_id":7249,"name":"Ann Taraday","email":"akamyshnikova@mirantis.com","username":"AKamyshnikova"},"change_message_id":"12159a20caca23d538612ab15af0f39c523316e2","unresolved":false,"context_lines":[{"line_number":26,"context_line":"# revision identifiers, used by Alembic."},{"line_number":27,"context_line":"revision \u003d \u0027d72db3e25539\u0027"},{"line_number":28,"context_line":"down_revision \u003d \u0027867d39095bf4\u0027"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"def upgrade():"},{"line_number":32,"context_line":"    op.create_unique_constraint("}],"source_content_type":"text/x-python","patch_set":2,"id":"3f79a3b5_25855853","line":29,"updated":"2018-10-29 07:45:17.000000000","message":"You need to add depends_on \u003d (d78282f85225,), so that this migrations will be run only constraints are dropped.\nFor reference, https://github.com/openstack/neutron/blob/a388701ddfe628e9a5bd16a78422164799b11ef8/neutron/db/migration/alembic_migrations/versions/pike/expand/7d32f979895f_add_mtu_for_networks.py#L32","commit_id":"b8aae9ccc7594572a1f15c448c61937e57e8797a"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"4456e1c1c00482df351cd4d661ff8b84155d0053","unresolved":false,"context_lines":[{"line_number":26,"context_line":"# revision identifiers, used by Alembic."},{"line_number":27,"context_line":"revision \u003d \u0027d72db3e25539\u0027"},{"line_number":28,"context_line":"down_revision \u003d \u0027867d39095bf4\u0027"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"def upgrade():"},{"line_number":32,"context_line":"    op.create_unique_constraint("}],"source_content_type":"text/x-python","patch_set":2,"id":"3f79a3b5_1a5c364a","line":29,"in_reply_to":"3f79a3b5_25855853","updated":"2018-10-29 11:10:35.000000000","message":"I\u0027m woring on the functional test. Yes, the contract (or drop) now is not acceptable.","commit_id":"b8aae9ccc7594572a1f15c448c61937e57e8797a"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"293f51461baae5b039d960229f229f200acb3508","unresolved":false,"context_lines":[{"line_number":63,"context_line":"    migration.create_foreign_keys(TABLE_NAME, foreign_keys)"},{"line_number":64,"context_line":""},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"def expand_drop_exceptions():"},{"line_number":67,"context_line":"    \"\"\"Drop and replace the unique constraint for table portforwardings"},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"    Drop the existing portforwardings foreign key uniq constraint and then"}],"source_content_type":"text/x-python","patch_set":4,"id":"3f79a3b5_1ad7d924","line":66,"updated":"2018-11-04 11:49:08.000000000","message":"where this function is used?","commit_id":"0aa993c4ebdfb8bbafd2de6cebf801d202054754"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"b7a85d8bb50876c845b4d1920097ebff1939d3b2","unresolved":false,"context_lines":[{"line_number":63,"context_line":"    migration.create_foreign_keys(TABLE_NAME, foreign_keys)"},{"line_number":64,"context_line":""},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"def expand_drop_exceptions():"},{"line_number":67,"context_line":"    \"\"\"Drop and replace the unique constraint for table portforwardings"},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"    Drop the existing portforwardings foreign key uniq constraint and then"}],"source_content_type":"text/x-python","patch_set":4,"id":"3f79a3b5_1d959094","line":66,"in_reply_to":"3f79a3b5_1ad7d924","updated":"2018-11-05 04:20:36.000000000","message":"https://github.com/openstack/neutron/blob/master/neutron/tests/functional/db/test_migrations.py#L217\n\nAnd we have a comment here:\n\"This is needed to use drop in expand migration to pass test_branches.\"","commit_id":"0aa993c4ebdfb8bbafd2de6cebf801d202054754"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"5879da90cc0d5b94fbade883be9095da30bedd3f","unresolved":false,"context_lines":[{"line_number":63,"context_line":"    migration.create_foreign_keys(TABLE_NAME, foreign_keys)"},{"line_number":64,"context_line":""},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"def expand_drop_exceptions():"},{"line_number":67,"context_line":"    \"\"\"Drop and replace the unique constraint for table portforwardings"},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"    Drop the existing portforwardings foreign key uniq constraint and then"}],"source_content_type":"text/x-python","patch_set":4,"id":"3f79a3b5_35c41c0d","line":66,"in_reply_to":"3f79a3b5_1d959094","updated":"2018-11-05 12:26:38.000000000","message":"ahh, ok. Now I remember :) Sorry.","commit_id":"0aa993c4ebdfb8bbafd2de6cebf801d202054754"},{"author":{"_account_id":27654,"name":"Hongbin Lu","email":"kira034@163.com","username":"hongbin.lu"},"change_message_id":"1095f1ed423104017bde77232150f31dce02ecad","unresolved":false,"context_lines":[{"line_number":66,"context_line":"def expand_drop_exceptions():"},{"line_number":67,"context_line":"    \"\"\"Drop and replace the unique constraint for table portforwardings"},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"    Drop the existing portforwardings foreign key uniq constraint and then"},{"line_number":70,"context_line":"    replace it with new unique constraint with column ``protocol``."},{"line_number":71,"context_line":"    This is needed to use drop in expand migration to pass test_branches."},{"line_number":72,"context_line":"    \"\"\""}],"source_content_type":"text/x-python","patch_set":5,"id":"3f79a3b5_a853eadd","line":69,"range":{"start_line":69,"start_character":55,"end_line":69,"end_character":65},"updated":"2018-11-05 20:35:57.000000000","message":"nit: constraints","commit_id":"7b08558528e435b5abceca2a562c22c2fb4e34c8"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"20ff54da16d743fb679973112906b30d697bb116","unresolved":false,"context_lines":[{"line_number":66,"context_line":"def expand_drop_exceptions():"},{"line_number":67,"context_line":"    \"\"\"Drop and replace the unique constraint for table portforwardings"},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"    Drop the existing portforwardings foreign key uniq constraint and then"},{"line_number":70,"context_line":"    replace it with new unique constraint with column ``protocol``."},{"line_number":71,"context_line":"    This is needed to use drop in expand migration to pass test_branches."},{"line_number":72,"context_line":"    \"\"\""}],"source_content_type":"text/x-python","patch_set":5,"id":"3f79a3b5_62c06d4c","line":69,"range":{"start_line":69,"start_character":55,"end_line":69,"end_character":65},"in_reply_to":"3f79a3b5_a853eadd","updated":"2018-11-07 02:25:54.000000000","message":"Done","commit_id":"7b08558528e435b5abceca2a562c22c2fb4e34c8"},{"author":{"_account_id":27654,"name":"Hongbin Lu","email":"kira034@163.com","username":"hongbin.lu"},"change_message_id":"1095f1ed423104017bde77232150f31dce02ecad","unresolved":false,"context_lines":[{"line_number":67,"context_line":"    \"\"\"Drop and replace the unique constraint for table portforwardings"},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"    Drop the existing portforwardings foreign key uniq constraint and then"},{"line_number":70,"context_line":"    replace it with new unique constraint with column ``protocol``."},{"line_number":71,"context_line":"    This is needed to use drop in expand migration to pass test_branches."},{"line_number":72,"context_line":"    \"\"\""},{"line_number":73,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"3f79a3b5_88686e89","line":70,"range":{"start_line":70,"start_character":31,"end_line":70,"end_character":41},"updated":"2018-11-05 20:35:57.000000000","message":"constraints","commit_id":"7b08558528e435b5abceca2a562c22c2fb4e34c8"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"20ff54da16d743fb679973112906b30d697bb116","unresolved":false,"context_lines":[{"line_number":67,"context_line":"    \"\"\"Drop and replace the unique constraint for table portforwardings"},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"    Drop the existing portforwardings foreign key uniq constraint and then"},{"line_number":70,"context_line":"    replace it with new unique constraint with column ``protocol``."},{"line_number":71,"context_line":"    This is needed to use drop in expand migration to pass test_branches."},{"line_number":72,"context_line":"    \"\"\""},{"line_number":73,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"3f79a3b5_82bd89d2","line":70,"range":{"start_line":70,"start_character":31,"end_line":70,"end_character":41},"in_reply_to":"3f79a3b5_88686e89","updated":"2018-11-07 02:25:54.000000000","message":"Done","commit_id":"7b08558528e435b5abceca2a562c22c2fb4e34c8"}],"neutron/objects/port_forwarding.py":[{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"ae4bf6f7e2ae44ca5eb2eabea6090fa9ae2a19f1","unresolved":false,"context_lines":[{"line_number":31,"context_line":"class PortForwarding(base.NeutronDbObject):"},{"line_number":32,"context_line":"    # Version 1.0: Initial version"},{"line_number":33,"context_line":"    # Version 1.1: Change unique constraint"},{"line_number":34,"context_line":"    VERSION \u003d \u00271.1\u0027"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"    db_model \u003d models.PortForwarding"},{"line_number":37,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"3f79a3b5_26f3ed6f","line":34,"range":{"start_line":34,"start_character":15,"end_line":34,"end_character":18},"updated":"2018-10-31 12:52:04.000000000","message":"ditto: if OVO doesn\u0027t change, there is no need to bump the version.","commit_id":"15240b08d219871385a7f21298df2d70fbd342f9"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"93279aa87e89c70387372633c54c57bf96e4c973","unresolved":false,"context_lines":[{"line_number":31,"context_line":"class PortForwarding(base.NeutronDbObject):"},{"line_number":32,"context_line":"    # Version 1.0: Initial version"},{"line_number":33,"context_line":"    # Version 1.1: Change unique constraint"},{"line_number":34,"context_line":"    VERSION \u003d \u00271.1\u0027"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"    db_model \u003d models.PortForwarding"},{"line_number":37,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"3f79a3b5_174ff98c","line":34,"range":{"start_line":34,"start_character":15,"end_line":34,"end_character":18},"in_reply_to":"3f79a3b5_1c6c0032","updated":"2018-10-31 14:26:34.000000000","message":"Only the attribute change will influence the hash. This is more like a behavior change: \"people should not do such action, we do not allow that now.\"","commit_id":"15240b08d219871385a7f21298df2d70fbd342f9"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"7703b4b2825994f2a173e24232d72fe4e3777581","unresolved":false,"context_lines":[{"line_number":31,"context_line":"class PortForwarding(base.NeutronDbObject):"},{"line_number":32,"context_line":"    # Version 1.0: Initial version"},{"line_number":33,"context_line":"    # Version 1.1: Change unique constraint"},{"line_number":34,"context_line":"    VERSION \u003d \u00271.1\u0027"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"    db_model \u003d models.PortForwarding"},{"line_number":37,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"3f79a3b5_418133a1","line":34,"range":{"start_line":34,"start_character":15,"end_line":34,"end_character":18},"in_reply_to":"3f79a3b5_26f3ed6f","updated":"2018-10-31 13:27:13.000000000","message":"IMO, this is an implicit change for the OVO object, because some attribute combination settings are different. So we explicitly notify user that we changed it.","commit_id":"15240b08d219871385a7f21298df2d70fbd342f9"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"e69b1819727b8b0ec978e35f655eca6dfeff2a82","unresolved":false,"context_lines":[{"line_number":31,"context_line":"class PortForwarding(base.NeutronDbObject):"},{"line_number":32,"context_line":"    # Version 1.0: Initial version"},{"line_number":33,"context_line":"    # Version 1.1: Change unique constraint"},{"line_number":34,"context_line":"    VERSION \u003d \u00271.1\u0027"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"    db_model \u003d models.PortForwarding"},{"line_number":37,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"3f79a3b5_1c6c0032","line":34,"range":{"start_line":34,"start_character":15,"end_line":34,"end_character":18},"in_reply_to":"3f79a3b5_418133a1","updated":"2018-10-31 13:56:31.000000000","message":"The implicit rule is if the hash doesn\u0027t change, that means the OVO is the same so we don\u0027t need to bump the version.","commit_id":"15240b08d219871385a7f21298df2d70fbd342f9"}],"neutron/tests/unit/extensions/test_expose_port_forwarding_in_fip.py":[{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"293f51461baae5b039d960229f229f200acb3508","unresolved":false,"context_lines":[{"line_number":71,"context_line":"                {apidef.EXTERNAL_PORT: 2225,"},{"line_number":72,"context_line":"                 apidef.INTERNAL_PORT: 25,"},{"line_number":73,"context_line":"                 apidef.INTERNAL_PORT_ID: None,"},{"line_number":74,"context_line":"                 apidef.PROTOCOL: \"tcp\","},{"line_number":75,"context_line":"                 apidef.INTERNAL_IP_ADDRESS: None}}"},{"line_number":76,"context_line":"        ctx \u003d context.get_admin_context()"},{"line_number":77,"context_line":"        kwargs \u003d {\u0027arg_list\u0027: (extnet_apidef.EXTERNAL,),"}],"source_content_type":"text/x-python","patch_set":4,"id":"3f79a3b5_ba1025f6","line":74,"updated":"2018-11-04 11:49:08.000000000","message":"nit: please maybe use constants from https://github.com/openstack/neutron-lib/blob/56033ba643812a30577f6ab17648806c2ee494ba/neutron_lib/constants.py","commit_id":"0aa993c4ebdfb8bbafd2de6cebf801d202054754"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"b7a85d8bb50876c845b4d1920097ebff1939d3b2","unresolved":false,"context_lines":[{"line_number":71,"context_line":"                {apidef.EXTERNAL_PORT: 2225,"},{"line_number":72,"context_line":"                 apidef.INTERNAL_PORT: 25,"},{"line_number":73,"context_line":"                 apidef.INTERNAL_PORT_ID: None,"},{"line_number":74,"context_line":"                 apidef.PROTOCOL: \"tcp\","},{"line_number":75,"context_line":"                 apidef.INTERNAL_IP_ADDRESS: None}}"},{"line_number":76,"context_line":"        ctx \u003d context.get_admin_context()"},{"line_number":77,"context_line":"        kwargs \u003d {\u0027arg_list\u0027: (extnet_apidef.EXTERNAL,),"}],"source_content_type":"text/x-python","patch_set":4,"id":"3f79a3b5_7d93645a","line":74,"in_reply_to":"3f79a3b5_ba1025f6","updated":"2018-11-05 04:20:36.000000000","message":"Done","commit_id":"0aa993c4ebdfb8bbafd2de6cebf801d202054754"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"293f51461baae5b039d960229f229f200acb3508","unresolved":false,"context_lines":[{"line_number":95,"context_line":"                        ctx, fip[\u0027floatingip\u0027][\u0027id\u0027], port_forwarding)"},{"line_number":96,"context_line":""},{"line_number":97,"context_line":"                    update_dict2 \u003d {"},{"line_number":98,"context_line":"                        apidef.PROTOCOL: \"udp\""},{"line_number":99,"context_line":"                    }"},{"line_number":100,"context_line":"                    port_forwarding[apidef.RESOURCE_NAME].update(update_dict2)"},{"line_number":101,"context_line":"                    self.pf_plugin.create_floatingip_port_forwarding("}],"source_content_type":"text/x-python","patch_set":4,"id":"3f79a3b5_5acd5190","line":98,"updated":"2018-11-04 11:49:08.000000000","message":"same nit here :)","commit_id":"0aa993c4ebdfb8bbafd2de6cebf801d202054754"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"b7a85d8bb50876c845b4d1920097ebff1939d3b2","unresolved":false,"context_lines":[{"line_number":95,"context_line":"                        ctx, fip[\u0027floatingip\u0027][\u0027id\u0027], port_forwarding)"},{"line_number":96,"context_line":""},{"line_number":97,"context_line":"                    update_dict2 \u003d {"},{"line_number":98,"context_line":"                        apidef.PROTOCOL: \"udp\""},{"line_number":99,"context_line":"                    }"},{"line_number":100,"context_line":"                    port_forwarding[apidef.RESOURCE_NAME].update(update_dict2)"},{"line_number":101,"context_line":"                    self.pf_plugin.create_floatingip_port_forwarding("}],"source_content_type":"text/x-python","patch_set":4,"id":"3f79a3b5_1d84b00d","line":98,"in_reply_to":"3f79a3b5_5acd5190","updated":"2018-11-05 04:20:36.000000000","message":"Done","commit_id":"0aa993c4ebdfb8bbafd2de6cebf801d202054754"}],"neutron/tests/unit/objects/test_objects.py":[{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"ae4bf6f7e2ae44ca5eb2eabea6090fa9ae2a19f1","unresolved":false,"context_lines":[{"line_number":67,"context_line":"    \u0027PortBindingLevel\u0027: \u00271.1-50d47f63218f87581b6cd9a62db574e5\u0027,"},{"line_number":68,"context_line":"    \u0027PortDataPlaneStatus\u0027: \u00271.0-25be74bda46c749653a10357676c0ab2\u0027,"},{"line_number":69,"context_line":"    \u0027PortDNS\u0027: \u00271.1-c5ca2dc172bdd5fafee3fc986d1d7023\u0027,"},{"line_number":70,"context_line":"    \u0027PortForwarding\u0027: \u00271.1-db61273978c497239be5389a8aeb1c61\u0027,"},{"line_number":71,"context_line":"    \u0027PortSecurity\u0027: \u00271.0-b30802391a87945ee9c07582b4ff95e3\u0027,"},{"line_number":72,"context_line":"    \u0027ProviderResourceAssociation\u0027: \u00271.0-05ab2d5a3017e5ce9dd381328f285f34\u0027,"},{"line_number":73,"context_line":"    \u0027ProvisioningBlock\u0027: \u00271.0-c19d6d05bfa8143533471c1296066125\u0027,"}],"source_content_type":"text/x-python","patch_set":3,"id":"3f79a3b5_46fce93f","line":70,"range":{"start_line":70,"start_character":25,"end_line":70,"end_character":26},"updated":"2018-10-31 12:52:04.000000000","message":"If the OVO doesn\u0027t change, there is no need to upgrade the object version.","commit_id":"15240b08d219871385a7f21298df2d70fbd342f9"}],"releasenotes/notes/change-port-forwarding-uniq-constraint-78ba3db20bce5fd2.yaml":[{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"293f51461baae5b039d960229f229f200acb3508","unresolved":false,"context_lines":[{"line_number":7,"context_line":"    then create the new uniq constraint with column ``protocol``."},{"line_number":8,"context_line":"fixes:"},{"line_number":9,"context_line":"  - |"},{"line_number":10,"context_line":"    Floating IP port forwardings with different protocols can not have the"},{"line_number":11,"context_line":"    same internal or external port number to the same VM port. After this"},{"line_number":12,"context_line":"    fix we will allow creating port forwardings with same internal or"},{"line_number":13,"context_line":"    external port number in different protocols."}],"source_content_type":"text/x-yaml","patch_set":4,"id":"3f79a3b5_7ad04d2b","line":10,"updated":"2018-11-04 11:49:08.000000000","message":"I think it should be something like \"could not have\" because now they can :)","commit_id":"0aa993c4ebdfb8bbafd2de6cebf801d202054754"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"b7a85d8bb50876c845b4d1920097ebff1939d3b2","unresolved":false,"context_lines":[{"line_number":7,"context_line":"    then create the new uniq constraint with column ``protocol``."},{"line_number":8,"context_line":"fixes:"},{"line_number":9,"context_line":"  - |"},{"line_number":10,"context_line":"    Floating IP port forwardings with different protocols can not have the"},{"line_number":11,"context_line":"    same internal or external port number to the same VM port. After this"},{"line_number":12,"context_line":"    fix we will allow creating port forwardings with same internal or"},{"line_number":13,"context_line":"    external port number in different protocols."}],"source_content_type":"text/x-yaml","patch_set":4,"id":"3f79a3b5_3d872c14","line":10,"in_reply_to":"3f79a3b5_7ad04d2b","updated":"2018-11-05 04:20:36.000000000","message":"Done","commit_id":"0aa993c4ebdfb8bbafd2de6cebf801d202054754"},{"author":{"_account_id":27654,"name":"Hongbin Lu","email":"kira034@163.com","username":"hongbin.lu"},"change_message_id":"1095f1ed423104017bde77232150f31dce02ecad","unresolved":false,"context_lines":[{"line_number":2,"context_line":"upgrade:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Adds Floating IP port forwarding DB ``protocol`` column to the uniq"},{"line_number":5,"context_line":"    constraint. In order to achive it, the DB migration has two changes."},{"line_number":6,"context_line":"    In one expand script, we drop the original uniq constraint first,"},{"line_number":7,"context_line":"    then create the new uniq constraint with column ``protocol``."},{"line_number":8,"context_line":"fixes:"}],"source_content_type":"text/x-yaml","patch_set":5,"id":"3f79a3b5_838ccf81","line":5,"range":{"start_line":5,"start_character":60,"end_line":5,"end_character":71},"updated":"2018-11-05 20:35:57.000000000","message":"IMO, it is not clear what are the exact two changes.","commit_id":"7b08558528e435b5abceca2a562c22c2fb4e34c8"},{"author":{"_account_id":27654,"name":"Hongbin Lu","email":"kira034@163.com","username":"hongbin.lu"},"change_message_id":"1095f1ed423104017bde77232150f31dce02ecad","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"upgrade:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Adds Floating IP port forwarding DB ``protocol`` column to the uniq"},{"line_number":5,"context_line":"    constraint. In order to achive it, the DB migration has two changes."},{"line_number":6,"context_line":"    In one expand script, we drop the original uniq constraint first,"},{"line_number":7,"context_line":"    then create the new uniq constraint with column ``protocol``."},{"line_number":8,"context_line":"fixes:"}],"source_content_type":"text/x-yaml","patch_set":5,"id":"3f79a3b5_43ad57e5","line":5,"range":{"start_line":4,"start_character":4,"end_line":5,"end_character":15},"updated":"2018-11-05 20:35:57.000000000","message":"If I am writing it, I would rephrase it as below:\n\n  In the portforwardings DB table, add ``protocol`` column to the uniq constraints.","commit_id":"7b08558528e435b5abceca2a562c22c2fb4e34c8"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"20ff54da16d743fb679973112906b30d697bb116","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"upgrade:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Adds Floating IP port forwarding DB ``protocol`` column to the uniq"},{"line_number":5,"context_line":"    constraint. In order to achive it, the DB migration has two changes."},{"line_number":6,"context_line":"    In one expand script, we drop the original uniq constraint first,"},{"line_number":7,"context_line":"    then create the new uniq constraint with column ``protocol``."},{"line_number":8,"context_line":"fixes:"}],"source_content_type":"text/x-yaml","patch_set":5,"id":"3f79a3b5_02a739bd","line":5,"range":{"start_line":4,"start_character":4,"end_line":5,"end_character":15},"in_reply_to":"3f79a3b5_43ad57e5","updated":"2018-11-07 02:25:54.000000000","message":"rephrased","commit_id":"7b08558528e435b5abceca2a562c22c2fb4e34c8"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"20ff54da16d743fb679973112906b30d697bb116","unresolved":false,"context_lines":[{"line_number":2,"context_line":"upgrade:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Adds Floating IP port forwarding DB ``protocol`` column to the uniq"},{"line_number":5,"context_line":"    constraint. In order to achive it, the DB migration has two changes."},{"line_number":6,"context_line":"    In one expand script, we drop the original uniq constraint first,"},{"line_number":7,"context_line":"    then create the new uniq constraint with column ``protocol``."},{"line_number":8,"context_line":"fixes:"}],"source_content_type":"text/x-yaml","patch_set":5,"id":"3f79a3b5_42a1b1a7","line":5,"range":{"start_line":5,"start_character":60,"end_line":5,"end_character":71},"in_reply_to":"3f79a3b5_838ccf81","updated":"2018-11-07 02:25:54.000000000","message":"rephrased","commit_id":"7b08558528e435b5abceca2a562c22c2fb4e34c8"},{"author":{"_account_id":27654,"name":"Hongbin Lu","email":"kira034@163.com","username":"hongbin.lu"},"change_message_id":"1095f1ed423104017bde77232150f31dce02ecad","unresolved":false,"context_lines":[{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Adds Floating IP port forwarding DB ``protocol`` column to the uniq"},{"line_number":5,"context_line":"    constraint. In order to achive it, the DB migration has two changes."},{"line_number":6,"context_line":"    In one expand script, we drop the original uniq constraint first,"},{"line_number":7,"context_line":"    then create the new uniq constraint with column ``protocol``."},{"line_number":8,"context_line":"fixes:"},{"line_number":9,"context_line":"  - |"}],"source_content_type":"text/x-yaml","patch_set":5,"id":"3f79a3b5_28a59a48","line":6,"range":{"start_line":6,"start_character":7,"end_line":6,"end_character":10},"updated":"2018-11-05 20:35:57.000000000","message":"There is another expand script?","commit_id":"7b08558528e435b5abceca2a562c22c2fb4e34c8"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"20ff54da16d743fb679973112906b30d697bb116","unresolved":false,"context_lines":[{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Adds Floating IP port forwarding DB ``protocol`` column to the uniq"},{"line_number":5,"context_line":"    constraint. In order to achive it, the DB migration has two changes."},{"line_number":6,"context_line":"    In one expand script, we drop the original uniq constraint first,"},{"line_number":7,"context_line":"    then create the new uniq constraint with column ``protocol``."},{"line_number":8,"context_line":"fixes:"},{"line_number":9,"context_line":"  - |"}],"source_content_type":"text/x-yaml","patch_set":5,"id":"3f79a3b5_0205f90e","line":6,"range":{"start_line":6,"start_character":7,"end_line":6,"end_character":10},"in_reply_to":"3f79a3b5_28a59a48","updated":"2018-11-07 02:25:54.000000000","message":"Remove that \"two changes\", so it is still one expand script.","commit_id":"7b08558528e435b5abceca2a562c22c2fb4e34c8"},{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"9faaac3d3036568b0dbaafc269a64c77211a3eb6","unresolved":false,"context_lines":[{"line_number":4,"context_line":"    Adds Floating IP port forwarding DB ``protocol`` column to the uniq"},{"line_number":5,"context_line":"    constraint. In order to achive it, the DB migration has two changes."},{"line_number":6,"context_line":"    In one expand script, we drop the original uniq constraint first,"},{"line_number":7,"context_line":"    then create the new uniq constraint with column ``protocol``."},{"line_number":8,"context_line":"fixes:"},{"line_number":9,"context_line":"  - |"},{"line_number":10,"context_line":"    Floating IP port forwardings with different protocols could not have the"}],"source_content_type":"text/x-yaml","patch_set":5,"id":"3f79a3b5_6733bcf8","line":7,"updated":"2018-11-05 22:55:40.000000000","message":"Yes, I agree that this release notes need to be re-worked. It is confusing. The phrasing suggests there is more than one upgrade script and that will confuse the deployers","commit_id":"7b08558528e435b5abceca2a562c22c2fb4e34c8"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"20ff54da16d743fb679973112906b30d697bb116","unresolved":false,"context_lines":[{"line_number":4,"context_line":"    Adds Floating IP port forwarding DB ``protocol`` column to the uniq"},{"line_number":5,"context_line":"    constraint. In order to achive it, the DB migration has two changes."},{"line_number":6,"context_line":"    In one expand script, we drop the original uniq constraint first,"},{"line_number":7,"context_line":"    then create the new uniq constraint with column ``protocol``."},{"line_number":8,"context_line":"fixes:"},{"line_number":9,"context_line":"  - |"},{"line_number":10,"context_line":"    Floating IP port forwardings with different protocols could not have the"}],"source_content_type":"text/x-yaml","patch_set":5,"id":"3f79a3b5_c28ce13a","line":7,"in_reply_to":"3f79a3b5_6733bcf8","updated":"2018-11-07 02:25:54.000000000","message":"rephrased","commit_id":"7b08558528e435b5abceca2a562c22c2fb4e34c8"}]}
