)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"2c7db4be0cd0f3ded0f738a9144afc7510274300","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Conntrack Helper -  OVO and db script"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Implements the conntrack heler OVO and db layer code."},{"line_number":10,"context_line":"- New object \u0027ConntrackHelper\u0027"},{"line_number":11,"context_line":"- New db model"},{"line_number":12,"context_line":"- migration db script"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":12,"id":"bfb3d3c7_f8e81d17","line":9,"range":{"start_line":9,"start_character":25,"end_line":9,"end_character":30},"updated":"2019-05-20 09:11:54.000000000","message":"nitty nit (please don\u0027t respin only for that): s/heler/helper","commit_id":"1b6dc8b0a730991da9a74b3e7ba56a8a05cec856"},{"author":{"_account_id":24245,"name":"Harald Jensås","email":"hjensas@redhat.com","username":"harald.jensas"},"change_message_id":"b1fe9cf732c740ae6ebf5ebd61266c4fb6f2942c","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Conntrack Helper -  OVO and db script"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Implements the conntrack heler OVO and db layer code."},{"line_number":10,"context_line":"- New object \u0027ConntrackHelper\u0027"},{"line_number":11,"context_line":"- New db model"},{"line_number":12,"context_line":"- migration db script"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":12,"id":"bfb3d3c7_0180198b","line":9,"range":{"start_line":9,"start_character":25,"end_line":9,"end_character":30},"in_reply_to":"bfb3d3c7_f8e81d17","updated":"2019-05-20 16:03:51.000000000","message":"Done","commit_id":"1b6dc8b0a730991da9a74b3e7ba56a8a05cec856"}],"neutron/db/migration/alembic_migrations/versions/stein/expand/63fd95af7dcd_conntrack_helper.py":[{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"1f1ab39b2fc05b420c4311959e188dd6f2bf59fc","unresolved":false,"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":1,"id":"5fc1f717_3db87f0f","line":1,"range":{"start_line":1,"start_character":2,"end_line":1,"end_character":11},"updated":"2019-04-05 13:57:51.000000000","message":"nit: Copyright (c)\n\njust different from the others, don\u0027t know why i notice these things\n\nAnd technically should it be:\n\nCopyright (c) 2019 Red Hat Inc.","commit_id":"db80d5501867cfeb7675b752da48d691eb75de58"},{"author":{"_account_id":24245,"name":"Harald Jensås","email":"hjensas@redhat.com","username":"harald.jensas"},"change_message_id":"32d2975ca5dcd39692b46d363d7e73021b9eab13","unresolved":false,"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":1,"id":"5fc1f717_975ff90d","line":1,"range":{"start_line":1,"start_character":2,"end_line":1,"end_character":11},"in_reply_to":"5fc1f717_3db87f0f","updated":"2019-04-08 10:40:10.000000000","message":"Done","commit_id":"db80d5501867cfeb7675b752da48d691eb75de58"},{"author":{"_account_id":7249,"name":"Ann Taraday","email":"akamyshnikova@mirantis.com","username":"AKamyshnikova"},"change_message_id":"2acd9f8743b4ae04ac926dcb62523626b3075af7","unresolved":false,"context_lines":[{"line_number":42,"context_line":"                                ondelete\u003d\u0027CASCADE\u0027),"},{"line_number":43,"context_line":"        sa.PrimaryKeyConstraint(\u0027id\u0027),"},{"line_number":44,"context_line":"        sa.UniqueConstraint(\u0027protocol\u0027, \u0027port\u0027, \u0027helper\u0027, \u0027router_id\u0027,"},{"line_number":45,"context_line":"                            name\u003d\u0027uniq_conntrack_helper\u0027)"},{"line_number":46,"context_line":"    )"}],"source_content_type":"text/x-python","patch_set":1,"id":"5fc1f717_d47d7f1c","line":45,"range":{"start_line":45,"start_character":34,"end_line":45,"end_character":55},"updated":"2019-04-08 07:14:41.000000000","message":"Name should be like \u0027uniq_\u003ctable_name\u003e0\u003ccolumn_name\u003e\u0027\nexample https://github.com/openstack/neutron/blob/587bbe171ee6e2164d15ddc73cb1b21b91ac5f43/neutron/db/migration/alembic_migrations/versions/rocky/expand/867d39095bf4_port_forwarding.py#L54","commit_id":"db80d5501867cfeb7675b752da48d691eb75de58"},{"author":{"_account_id":24245,"name":"Harald Jensås","email":"hjensas@redhat.com","username":"harald.jensas"},"change_message_id":"32d2975ca5dcd39692b46d363d7e73021b9eab13","unresolved":false,"context_lines":[{"line_number":42,"context_line":"                                ondelete\u003d\u0027CASCADE\u0027),"},{"line_number":43,"context_line":"        sa.PrimaryKeyConstraint(\u0027id\u0027),"},{"line_number":44,"context_line":"        sa.UniqueConstraint(\u0027protocol\u0027, \u0027port\u0027, \u0027helper\u0027, \u0027router_id\u0027,"},{"line_number":45,"context_line":"                            name\u003d\u0027uniq_conntrack_helper\u0027)"},{"line_number":46,"context_line":"    )"}],"source_content_type":"text/x-python","patch_set":1,"id":"5fc1f717_f7667ded","line":45,"range":{"start_line":45,"start_character":34,"end_line":45,"end_character":55},"in_reply_to":"5fc1f717_d47d7f1c","updated":"2019-04-08 10:40:10.000000000","message":"Done","commit_id":"db80d5501867cfeb7675b752da48d691eb75de58"},{"author":{"_account_id":24245,"name":"Harald Jensås","email":"hjensas@redhat.com","username":"harald.jensas"},"change_message_id":"32d2975ca5dcd39692b46d363d7e73021b9eab13","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"5fc1f717_63940b38","updated":"2019-04-08 10:40:10.000000000","message":"Should this be moved under neutron/db/migration/alembic_migrations/versions/train ?","commit_id":"59d9ae811211cdcd837c4c8227ca7da7887552a5"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"b648f1ac3924086c1fc4b1061bb9c10ca96b87af","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright (c) 2019 Red Hat, Inc."},{"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":3,"id":"3fce034c_3f80cf8b","line":1,"updated":"2019-04-12 13:56:30.000000000","message":"I think you asked in a previous review, but this should be in the train directory.","commit_id":"a2f72d58323747a66e01abbe948de112e56dd4e8"},{"author":{"_account_id":24245,"name":"Harald Jensås","email":"hjensas@redhat.com","username":"harald.jensas"},"change_message_id":"faf384d9fcb397afb7208d306cf5c6d46f8270ef","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright (c) 2019 Red Hat, Inc."},{"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":3,"id":"3fce034c_6b977692","line":1,"in_reply_to":"3fce034c_3f80cf8b","updated":"2019-04-12 19:25:00.000000000","message":"Done","commit_id":"a2f72d58323747a66e01abbe948de112e56dd4e8"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"e6712bccbb88649f5827efbefd76cbd75d48b224","unresolved":false,"context_lines":[{"line_number":32,"context_line":""},{"line_number":33,"context_line":"def upgrade():"},{"line_number":34,"context_line":"    op.create_table("},{"line_number":35,"context_line":"        \u0027conntrackhelpers\u0027,"},{"line_number":36,"context_line":"        sa.Column(\u0027id\u0027, sa.String(length\u003d36), nullable\u003dFalse),"},{"line_number":37,"context_line":"        sa.Column(\u0027router_id\u0027, sa.String(length\u003d36), nullable\u003dFalse),"},{"line_number":38,"context_line":"        sa.Column(\u0027protocol\u0027, sa.String(length\u003d64), nullable\u003dFalse),"}],"source_content_type":"text/x-python","patch_set":3,"id":"3fce034c_d0ee6087","line":35,"range":{"start_line":35,"start_character":9,"end_line":35,"end_character":25},"updated":"2019-04-12 09:23:30.000000000","message":"This should be \"conntrack_helpers\", this is the adopted naming convention.","commit_id":"a2f72d58323747a66e01abbe948de112e56dd4e8"},{"author":{"_account_id":24245,"name":"Harald Jensås","email":"hjensas@redhat.com","username":"harald.jensas"},"change_message_id":"faf384d9fcb397afb7208d306cf5c6d46f8270ef","unresolved":false,"context_lines":[{"line_number":32,"context_line":""},{"line_number":33,"context_line":"def upgrade():"},{"line_number":34,"context_line":"    op.create_table("},{"line_number":35,"context_line":"        \u0027conntrackhelpers\u0027,"},{"line_number":36,"context_line":"        sa.Column(\u0027id\u0027, sa.String(length\u003d36), nullable\u003dFalse),"},{"line_number":37,"context_line":"        sa.Column(\u0027router_id\u0027, sa.String(length\u003d36), nullable\u003dFalse),"},{"line_number":38,"context_line":"        sa.Column(\u0027protocol\u0027, sa.String(length\u003d64), nullable\u003dFalse),"}],"source_content_type":"text/x-python","patch_set":3,"id":"3fce034c_5374ba35","line":35,"range":{"start_line":35,"start_character":9,"end_line":35,"end_character":25},"in_reply_to":"3fce034c_d0ee6087","updated":"2019-04-12 19:25:00.000000000","message":"Done","commit_id":"a2f72d58323747a66e01abbe948de112e56dd4e8"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"e6712bccbb88649f5827efbefd76cbd75d48b224","unresolved":false,"context_lines":[{"line_number":33,"context_line":"def upgrade():"},{"line_number":34,"context_line":"    op.create_table("},{"line_number":35,"context_line":"        \u0027conntrackhelpers\u0027,"},{"line_number":36,"context_line":"        sa.Column(\u0027id\u0027, sa.String(length\u003d36), nullable\u003dFalse),"},{"line_number":37,"context_line":"        sa.Column(\u0027router_id\u0027, sa.String(length\u003d36), nullable\u003dFalse),"},{"line_number":38,"context_line":"        sa.Column(\u0027protocol\u0027, sa.String(length\u003d64), nullable\u003dFalse),"},{"line_number":39,"context_line":"        sa.Column(\u0027port\u0027, sa.Integer(), nullable\u003dFalse),"}],"source_content_type":"text/x-python","patch_set":3,"id":"3fce034c_7312165b","line":36,"range":{"start_line":36,"start_character":34,"end_line":36,"end_character":43},"updated":"2019-04-12 09:23:30.000000000","message":"Just in case, because in [1] you are using db_const.UUID_FIELD_SIZE, use the same parameter here.\n\n[1] https://review.openstack.org/#/c/650269/3/neutron/db/models/conntrack_helper.py@31","commit_id":"a2f72d58323747a66e01abbe948de112e56dd4e8"},{"author":{"_account_id":24245,"name":"Harald Jensås","email":"hjensas@redhat.com","username":"harald.jensas"},"change_message_id":"faf384d9fcb397afb7208d306cf5c6d46f8270ef","unresolved":false,"context_lines":[{"line_number":33,"context_line":"def upgrade():"},{"line_number":34,"context_line":"    op.create_table("},{"line_number":35,"context_line":"        \u0027conntrackhelpers\u0027,"},{"line_number":36,"context_line":"        sa.Column(\u0027id\u0027, sa.String(length\u003d36), nullable\u003dFalse),"},{"line_number":37,"context_line":"        sa.Column(\u0027router_id\u0027, sa.String(length\u003d36), nullable\u003dFalse),"},{"line_number":38,"context_line":"        sa.Column(\u0027protocol\u0027, sa.String(length\u003d64), nullable\u003dFalse),"},{"line_number":39,"context_line":"        sa.Column(\u0027port\u0027, sa.Integer(), nullable\u003dFalse),"}],"source_content_type":"text/x-python","patch_set":3,"id":"3fce034c_3377ae3d","line":36,"range":{"start_line":36,"start_character":34,"end_line":36,"end_character":43},"in_reply_to":"3fce034c_7312165b","updated":"2019-04-12 19:25:00.000000000","message":"Done","commit_id":"a2f72d58323747a66e01abbe948de112e56dd4e8"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"e6712bccbb88649f5827efbefd76cbd75d48b224","unresolved":false,"context_lines":[{"line_number":40,"context_line":"        sa.Column(\u0027helper\u0027, sa.String(length\u003d64), nullable\u003dFalse),"},{"line_number":41,"context_line":"        sa.ForeignKeyConstraint([\u0027router_id\u0027], [\u0027routers.id\u0027],"},{"line_number":42,"context_line":"                                ondelete\u003d\u0027CASCADE\u0027),"},{"line_number":43,"context_line":"        sa.PrimaryKeyConstraint(\u0027id\u0027),"},{"line_number":44,"context_line":"        sa.UniqueConstraint("},{"line_number":45,"context_line":"            \u0027protocol\u0027, \u0027port\u0027, \u0027helper\u0027, \u0027router_id\u0027,"},{"line_number":46,"context_line":"            name\u003d\u0027uniq_conntrack_helpers0_protocol0_port0_helper0_router_id\u0027)"}],"source_content_type":"text/x-python","patch_set":3,"id":"3fce034c_d0d500bb","line":43,"updated":"2019-04-12 09:23:30.000000000","message":"nit: you can avoid this writing\n\n  sa.Column(\u0027id\u0027, sa.String(length\u003d36), nullable\u003dFalse,\n            primary_key\u003dTrue),","commit_id":"a2f72d58323747a66e01abbe948de112e56dd4e8"},{"author":{"_account_id":24245,"name":"Harald Jensås","email":"hjensas@redhat.com","username":"harald.jensas"},"change_message_id":"faf384d9fcb397afb7208d306cf5c6d46f8270ef","unresolved":false,"context_lines":[{"line_number":40,"context_line":"        sa.Column(\u0027helper\u0027, sa.String(length\u003d64), nullable\u003dFalse),"},{"line_number":41,"context_line":"        sa.ForeignKeyConstraint([\u0027router_id\u0027], [\u0027routers.id\u0027],"},{"line_number":42,"context_line":"                                ondelete\u003d\u0027CASCADE\u0027),"},{"line_number":43,"context_line":"        sa.PrimaryKeyConstraint(\u0027id\u0027),"},{"line_number":44,"context_line":"        sa.UniqueConstraint("},{"line_number":45,"context_line":"            \u0027protocol\u0027, \u0027port\u0027, \u0027helper\u0027, \u0027router_id\u0027,"},{"line_number":46,"context_line":"            name\u003d\u0027uniq_conntrack_helpers0_protocol0_port0_helper0_router_id\u0027)"}],"source_content_type":"text/x-python","patch_set":3,"id":"3fce034c_939f824f","line":43,"in_reply_to":"3fce034c_d0d500bb","updated":"2019-04-12 19:25:00.000000000","message":"Done","commit_id":"a2f72d58323747a66e01abbe948de112e56dd4e8"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"e6712bccbb88649f5827efbefd76cbd75d48b224","unresolved":false,"context_lines":[{"line_number":43,"context_line":"        sa.PrimaryKeyConstraint(\u0027id\u0027),"},{"line_number":44,"context_line":"        sa.UniqueConstraint("},{"line_number":45,"context_line":"            \u0027protocol\u0027, \u0027port\u0027, \u0027helper\u0027, \u0027router_id\u0027,"},{"line_number":46,"context_line":"            name\u003d\u0027uniq_conntrack_helpers0_protocol0_port0_helper0_router_id\u0027)"},{"line_number":47,"context_line":"    )"}],"source_content_type":"text/x-python","patch_set":3,"id":"3fce034c_7003ec43","line":46,"range":{"start_line":46,"start_character":18,"end_line":46,"end_character":75},"updated":"2019-04-12 09:23:30.000000000","message":"This should be (without underscores, same as other examples in the code)\n\nuniq_conntrack_helpers0protocol0port0helper0router_id","commit_id":"a2f72d58323747a66e01abbe948de112e56dd4e8"},{"author":{"_account_id":24245,"name":"Harald Jensås","email":"hjensas@redhat.com","username":"harald.jensas"},"change_message_id":"faf384d9fcb397afb7208d306cf5c6d46f8270ef","unresolved":false,"context_lines":[{"line_number":43,"context_line":"        sa.PrimaryKeyConstraint(\u0027id\u0027),"},{"line_number":44,"context_line":"        sa.UniqueConstraint("},{"line_number":45,"context_line":"            \u0027protocol\u0027, \u0027port\u0027, \u0027helper\u0027, \u0027router_id\u0027,"},{"line_number":46,"context_line":"            name\u003d\u0027uniq_conntrack_helpers0_protocol0_port0_helper0_router_id\u0027)"},{"line_number":47,"context_line":"    )"}],"source_content_type":"text/x-python","patch_set":3,"id":"3fce034c_33ac8e8b","line":46,"range":{"start_line":46,"start_character":18,"end_line":46,"end_character":75},"in_reply_to":"3fce034c_7003ec43","updated":"2019-04-12 19:25:00.000000000","message":"Done","commit_id":"a2f72d58323747a66e01abbe948de112e56dd4e8"}],"neutron/db/migration/alembic_migrations/versions/train/expand/63fd95af7dcd_conntrack_helper.py":[{"author":{"_account_id":27654,"name":"Hongbin Lu","email":"kira034@163.com","username":"hongbin.lu"},"change_message_id":"cdb4420f8a8561f8bfbd9f38c588e854b1d04611","unresolved":false,"context_lines":[{"line_number":35,"context_line":"    op.create_table("},{"line_number":36,"context_line":"        \u0027conntrack_helpers\u0027,"},{"line_number":37,"context_line":"        sa.Column(\u0027id\u0027, sa.String(length\u003ddb_const.UUID_FIELD_SIZE),"},{"line_number":38,"context_line":"                  nullable\u003dFalse, primary_key\u003dTrue),"},{"line_number":39,"context_line":"        sa.Column(\u0027router_id\u0027, sa.String(length\u003d36), nullable\u003dFalse),"},{"line_number":40,"context_line":"        sa.Column(\u0027protocol\u0027, sa.String(length\u003d64), nullable\u003dFalse),"},{"line_number":41,"context_line":"        sa.Column(\u0027port\u0027, sa.Integer(), nullable\u003dFalse),"}],"source_content_type":"text/x-python","patch_set":11,"id":"dfbec78f_2b462a23","line":38,"range":{"start_line":38,"start_character":18,"end_line":38,"end_character":26},"updated":"2019-05-08 18:25:19.000000000","message":"nit: I think primary_key is not nullable so this is unnecessary.","commit_id":"0ad89994f61095565d06dba46dee137f8f735f51"},{"author":{"_account_id":24245,"name":"Harald Jensås","email":"hjensas@redhat.com","username":"harald.jensas"},"change_message_id":"e90aca0088a5672839771905dbd88b58307a9ab8","unresolved":false,"context_lines":[{"line_number":35,"context_line":"    op.create_table("},{"line_number":36,"context_line":"        \u0027conntrack_helpers\u0027,"},{"line_number":37,"context_line":"        sa.Column(\u0027id\u0027, sa.String(length\u003ddb_const.UUID_FIELD_SIZE),"},{"line_number":38,"context_line":"                  nullable\u003dFalse, primary_key\u003dTrue),"},{"line_number":39,"context_line":"        sa.Column(\u0027router_id\u0027, sa.String(length\u003d36), nullable\u003dFalse),"},{"line_number":40,"context_line":"        sa.Column(\u0027protocol\u0027, sa.String(length\u003d64), nullable\u003dFalse),"},{"line_number":41,"context_line":"        sa.Column(\u0027port\u0027, sa.Integer(), nullable\u003dFalse),"}],"source_content_type":"text/x-python","patch_set":11,"id":"dfbec78f_c475bd65","line":38,"range":{"start_line":38,"start_character":18,"end_line":38,"end_character":26},"in_reply_to":"dfbec78f_2b462a23","updated":"2019-05-13 11:38:38.000000000","message":"It is possible you are right, but I see the use of both \"nullable\u003dFalse, primary_key\u003dTrue\" is common in existing neutron code.","commit_id":"0ad89994f61095565d06dba46dee137f8f735f51"},{"author":{"_account_id":27654,"name":"Hongbin Lu","email":"kira034@163.com","username":"hongbin.lu"},"change_message_id":"cdb4420f8a8561f8bfbd9f38c588e854b1d04611","unresolved":false,"context_lines":[{"line_number":36,"context_line":"        \u0027conntrack_helpers\u0027,"},{"line_number":37,"context_line":"        sa.Column(\u0027id\u0027, sa.String(length\u003ddb_const.UUID_FIELD_SIZE),"},{"line_number":38,"context_line":"                  nullable\u003dFalse, primary_key\u003dTrue),"},{"line_number":39,"context_line":"        sa.Column(\u0027router_id\u0027, sa.String(length\u003d36), nullable\u003dFalse),"},{"line_number":40,"context_line":"        sa.Column(\u0027protocol\u0027, sa.String(length\u003d64), nullable\u003dFalse),"},{"line_number":41,"context_line":"        sa.Column(\u0027port\u0027, sa.Integer(), nullable\u003dFalse),"},{"line_number":42,"context_line":"        sa.Column(\u0027helper\u0027, sa.String(length\u003d64), nullable\u003dFalse),"}],"source_content_type":"text/x-python","patch_set":11,"id":"dfbec78f_6b5d02e8","line":39,"range":{"start_line":39,"start_character":48,"end_line":39,"end_character":50},"updated":"2019-05-08 18:25:19.000000000","message":"You can use UUID_FIELD_SIZE in here as well.","commit_id":"0ad89994f61095565d06dba46dee137f8f735f51"},{"author":{"_account_id":24245,"name":"Harald Jensås","email":"hjensas@redhat.com","username":"harald.jensas"},"change_message_id":"e90aca0088a5672839771905dbd88b58307a9ab8","unresolved":false,"context_lines":[{"line_number":36,"context_line":"        \u0027conntrack_helpers\u0027,"},{"line_number":37,"context_line":"        sa.Column(\u0027id\u0027, sa.String(length\u003ddb_const.UUID_FIELD_SIZE),"},{"line_number":38,"context_line":"                  nullable\u003dFalse, primary_key\u003dTrue),"},{"line_number":39,"context_line":"        sa.Column(\u0027router_id\u0027, sa.String(length\u003d36), nullable\u003dFalse),"},{"line_number":40,"context_line":"        sa.Column(\u0027protocol\u0027, sa.String(length\u003d64), nullable\u003dFalse),"},{"line_number":41,"context_line":"        sa.Column(\u0027port\u0027, sa.Integer(), nullable\u003dFalse),"},{"line_number":42,"context_line":"        sa.Column(\u0027helper\u0027, sa.String(length\u003d64), nullable\u003dFalse),"}],"source_content_type":"text/x-python","patch_set":11,"id":"dfbec78f_e472417b","line":39,"range":{"start_line":39,"start_character":48,"end_line":39,"end_character":50},"in_reply_to":"dfbec78f_6b5d02e8","updated":"2019-05-13 11:38:38.000000000","message":"Done","commit_id":"0ad89994f61095565d06dba46dee137f8f735f51"}],"neutron/db/models/conntrack_helper.py":[{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"e6712bccbb88649f5827efbefd76cbd75d48b224","unresolved":false,"context_lines":[{"line_number":21,"context_line":""},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"class ConntrackHelper(model_base.BASEV2, model_base.HasId):"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"    __table_args__ \u003d ("},{"line_number":26,"context_line":"        sa.UniqueConstraint("},{"line_number":27,"context_line":"            \u0027protocol\u0027, \u0027port\u0027, \u0027helper\u0027, \u0027router_id\u0027,"}],"source_content_type":"text/x-python","patch_set":3,"id":"3fce034c_9073f8e7","line":24,"updated":"2019-04-12 09:23:30.000000000","message":"According to my suggestion in [1], you should add the table name:\n\n__tablename__ \u003d \u0027conntrack_helpers\u0027\n\n[1] https://review.openstack.org/#/c/650269/3/neutron/db/migration/alembic_migrations/versions/stein/expand/63fd95af7dcd_conntrack_helper.py@35","commit_id":"a2f72d58323747a66e01abbe948de112e56dd4e8"},{"author":{"_account_id":24245,"name":"Harald Jensås","email":"hjensas@redhat.com","username":"harald.jensas"},"change_message_id":"faf384d9fcb397afb7208d306cf5c6d46f8270ef","unresolved":false,"context_lines":[{"line_number":21,"context_line":""},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"class ConntrackHelper(model_base.BASEV2, model_base.HasId):"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"    __table_args__ \u003d ("},{"line_number":26,"context_line":"        sa.UniqueConstraint("},{"line_number":27,"context_line":"            \u0027protocol\u0027, \u0027port\u0027, \u0027helper\u0027, \u0027router_id\u0027,"}],"source_content_type":"text/x-python","patch_set":3,"id":"3fce034c_13bdd2b6","line":24,"in_reply_to":"3fce034c_9073f8e7","updated":"2019-04-12 19:25:00.000000000","message":"Done","commit_id":"a2f72d58323747a66e01abbe948de112e56dd4e8"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"e6712bccbb88649f5827efbefd76cbd75d48b224","unresolved":false,"context_lines":[{"line_number":24,"context_line":""},{"line_number":25,"context_line":"    __table_args__ \u003d ("},{"line_number":26,"context_line":"        sa.UniqueConstraint("},{"line_number":27,"context_line":"            \u0027protocol\u0027, \u0027port\u0027, \u0027helper\u0027, \u0027router_id\u0027,"},{"line_number":28,"context_line":"            name\u003d\u0027uniq_conntrack_helpers0_protocol0_port0_helper0_router_id\u0027),"},{"line_number":29,"context_line":"    )"},{"line_number":30,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"3fce034c_d018a082","line":27,"range":{"start_line":27,"start_character":12,"end_line":27,"end_character":54},"updated":"2019-04-12 09:23:30.000000000","message":"Those should be class variables; that means you first need to define those variables and then define this constrain:\n\n# After defining protocol, port, helper and router_id\n__table_args__ \u003d (\n        sa.UniqueConstraint(\n            protocol, port, helper, router_id,\n            name\u003d\u0027uniq_conntrack_helpers0protocol0port0helper0router_id\u0027),","commit_id":"a2f72d58323747a66e01abbe948de112e56dd4e8"},{"author":{"_account_id":24245,"name":"Harald Jensås","email":"hjensas@redhat.com","username":"harald.jensas"},"change_message_id":"faf384d9fcb397afb7208d306cf5c6d46f8270ef","unresolved":false,"context_lines":[{"line_number":24,"context_line":""},{"line_number":25,"context_line":"    __table_args__ \u003d ("},{"line_number":26,"context_line":"        sa.UniqueConstraint("},{"line_number":27,"context_line":"            \u0027protocol\u0027, \u0027port\u0027, \u0027helper\u0027, \u0027router_id\u0027,"},{"line_number":28,"context_line":"            name\u003d\u0027uniq_conntrack_helpers0_protocol0_port0_helper0_router_id\u0027),"},{"line_number":29,"context_line":"    )"},{"line_number":30,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"3fce034c_9324620f","line":27,"range":{"start_line":27,"start_character":12,"end_line":27,"end_character":54},"in_reply_to":"3fce034c_d018a082","updated":"2019-04-12 19:25:00.000000000","message":"Done","commit_id":"a2f72d58323747a66e01abbe948de112e56dd4e8"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"e6712bccbb88649f5827efbefd76cbd75d48b224","unresolved":false,"context_lines":[{"line_number":25,"context_line":"    __table_args__ \u003d ("},{"line_number":26,"context_line":"        sa.UniqueConstraint("},{"line_number":27,"context_line":"            \u0027protocol\u0027, \u0027port\u0027, \u0027helper\u0027, \u0027router_id\u0027,"},{"line_number":28,"context_line":"            name\u003d\u0027uniq_conntrack_helpers0_protocol0_port0_helper0_router_id\u0027),"},{"line_number":29,"context_line":"    )"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"    router_id \u003d sa.Column(sa.String(db_const.UUID_FIELD_SIZE),"}],"source_content_type":"text/x-python","patch_set":3,"id":"3fce034c_309244f8","line":28,"range":{"start_line":28,"start_character":19,"end_line":28,"end_character":75},"updated":"2019-04-12 09:23:30.000000000","message":"ditto","commit_id":"a2f72d58323747a66e01abbe948de112e56dd4e8"},{"author":{"_account_id":24245,"name":"Harald Jensås","email":"hjensas@redhat.com","username":"harald.jensas"},"change_message_id":"faf384d9fcb397afb7208d306cf5c6d46f8270ef","unresolved":false,"context_lines":[{"line_number":25,"context_line":"    __table_args__ \u003d ("},{"line_number":26,"context_line":"        sa.UniqueConstraint("},{"line_number":27,"context_line":"            \u0027protocol\u0027, \u0027port\u0027, \u0027helper\u0027, \u0027router_id\u0027,"},{"line_number":28,"context_line":"            name\u003d\u0027uniq_conntrack_helpers0_protocol0_port0_helper0_router_id\u0027),"},{"line_number":29,"context_line":"    )"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"    router_id \u003d sa.Column(sa.String(db_const.UUID_FIELD_SIZE),"}],"source_content_type":"text/x-python","patch_set":3,"id":"3fce034c_531efaba","line":28,"range":{"start_line":28,"start_character":19,"end_line":28,"end_character":75},"in_reply_to":"3fce034c_309244f8","updated":"2019-04-12 19:25:00.000000000","message":"Done","commit_id":"a2f72d58323747a66e01abbe948de112e56dd4e8"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"e6712bccbb88649f5827efbefd76cbd75d48b224","unresolved":false,"context_lines":[{"line_number":31,"context_line":"    router_id \u003d sa.Column(sa.String(db_const.UUID_FIELD_SIZE),"},{"line_number":32,"context_line":"                          sa.ForeignKey(\u0027routers.id\u0027, ondelete\u003d\"CASCADE\"),"},{"line_number":33,"context_line":"                          nullable\u003dFalse)"},{"line_number":34,"context_line":"    protocol \u003d sa.Column(sa.String(64), nullable\u003dFalse, primary_key\u003dTrue)"},{"line_number":35,"context_line":"    port \u003d sa.Column(sa.Integer, nullable\u003dFalse, primary_key\u003dTrue)"},{"line_number":36,"context_line":"    helper \u003d sa.Column(sa.String(64), nullable\u003dFalse, primary_key\u003dTrue)"},{"line_number":37,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"3fce034c_b3215ea2","line":34,"range":{"start_line":34,"start_character":56,"end_line":34,"end_character":67},"updated":"2019-04-12 09:23:30.000000000","message":"this is not a primary_key","commit_id":"a2f72d58323747a66e01abbe948de112e56dd4e8"},{"author":{"_account_id":24245,"name":"Harald Jensås","email":"hjensas@redhat.com","username":"harald.jensas"},"change_message_id":"faf384d9fcb397afb7208d306cf5c6d46f8270ef","unresolved":false,"context_lines":[{"line_number":31,"context_line":"    router_id \u003d sa.Column(sa.String(db_const.UUID_FIELD_SIZE),"},{"line_number":32,"context_line":"                          sa.ForeignKey(\u0027routers.id\u0027, ondelete\u003d\"CASCADE\"),"},{"line_number":33,"context_line":"                          nullable\u003dFalse)"},{"line_number":34,"context_line":"    protocol \u003d sa.Column(sa.String(64), nullable\u003dFalse, primary_key\u003dTrue)"},{"line_number":35,"context_line":"    port \u003d sa.Column(sa.Integer, nullable\u003dFalse, primary_key\u003dTrue)"},{"line_number":36,"context_line":"    helper \u003d sa.Column(sa.String(64), nullable\u003dFalse, primary_key\u003dTrue)"},{"line_number":37,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"3fce034c_f37846f9","line":34,"range":{"start_line":34,"start_character":56,"end_line":34,"end_character":67},"in_reply_to":"3fce034c_b3215ea2","updated":"2019-04-12 19:25:00.000000000","message":"Done","commit_id":"a2f72d58323747a66e01abbe948de112e56dd4e8"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"e6712bccbb88649f5827efbefd76cbd75d48b224","unresolved":false,"context_lines":[{"line_number":32,"context_line":"                          sa.ForeignKey(\u0027routers.id\u0027, ondelete\u003d\"CASCADE\"),"},{"line_number":33,"context_line":"                          nullable\u003dFalse)"},{"line_number":34,"context_line":"    protocol \u003d sa.Column(sa.String(64), nullable\u003dFalse, primary_key\u003dTrue)"},{"line_number":35,"context_line":"    port \u003d sa.Column(sa.Integer, nullable\u003dFalse, primary_key\u003dTrue)"},{"line_number":36,"context_line":"    helper \u003d sa.Column(sa.String(64), nullable\u003dFalse, primary_key\u003dTrue)"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"    router \u003d orm.relationship(l3.Router, load_on_pending\u003dTrue,"}],"source_content_type":"text/x-python","patch_set":3,"id":"3fce034c_d3266ab8","line":35,"range":{"start_line":35,"start_character":49,"end_line":35,"end_character":60},"updated":"2019-04-12 09:23:30.000000000","message":"this is not a primary_key","commit_id":"a2f72d58323747a66e01abbe948de112e56dd4e8"},{"author":{"_account_id":24245,"name":"Harald Jensås","email":"hjensas@redhat.com","username":"harald.jensas"},"change_message_id":"faf384d9fcb397afb7208d306cf5c6d46f8270ef","unresolved":false,"context_lines":[{"line_number":32,"context_line":"                          sa.ForeignKey(\u0027routers.id\u0027, ondelete\u003d\"CASCADE\"),"},{"line_number":33,"context_line":"                          nullable\u003dFalse)"},{"line_number":34,"context_line":"    protocol \u003d sa.Column(sa.String(64), nullable\u003dFalse, primary_key\u003dTrue)"},{"line_number":35,"context_line":"    port \u003d sa.Column(sa.Integer, nullable\u003dFalse, primary_key\u003dTrue)"},{"line_number":36,"context_line":"    helper \u003d sa.Column(sa.String(64), nullable\u003dFalse, primary_key\u003dTrue)"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"    router \u003d orm.relationship(l3.Router, load_on_pending\u003dTrue,"}],"source_content_type":"text/x-python","patch_set":3,"id":"3fce034c_137e32e4","line":35,"range":{"start_line":35,"start_character":49,"end_line":35,"end_character":60},"in_reply_to":"3fce034c_d3266ab8","updated":"2019-04-12 19:25:00.000000000","message":"Done","commit_id":"a2f72d58323747a66e01abbe948de112e56dd4e8"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"e6712bccbb88649f5827efbefd76cbd75d48b224","unresolved":false,"context_lines":[{"line_number":33,"context_line":"                          nullable\u003dFalse)"},{"line_number":34,"context_line":"    protocol \u003d sa.Column(sa.String(64), nullable\u003dFalse, primary_key\u003dTrue)"},{"line_number":35,"context_line":"    port \u003d sa.Column(sa.Integer, nullable\u003dFalse, primary_key\u003dTrue)"},{"line_number":36,"context_line":"    helper \u003d sa.Column(sa.String(64), nullable\u003dFalse, primary_key\u003dTrue)"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"    router \u003d orm.relationship(l3.Router, load_on_pending\u003dTrue,"},{"line_number":39,"context_line":"                              backref\u003dorm.backref(\"conntrack_helpers\","}],"source_content_type":"text/x-python","patch_set":3,"id":"3fce034c_733bf6d0","line":36,"range":{"start_line":36,"start_character":54,"end_line":36,"end_character":65},"updated":"2019-04-12 09:23:30.000000000","message":"this is not a primary_key","commit_id":"a2f72d58323747a66e01abbe948de112e56dd4e8"},{"author":{"_account_id":24245,"name":"Harald Jensås","email":"hjensas@redhat.com","username":"harald.jensas"},"change_message_id":"faf384d9fcb397afb7208d306cf5c6d46f8270ef","unresolved":false,"context_lines":[{"line_number":33,"context_line":"                          nullable\u003dFalse)"},{"line_number":34,"context_line":"    protocol \u003d sa.Column(sa.String(64), nullable\u003dFalse, primary_key\u003dTrue)"},{"line_number":35,"context_line":"    port \u003d sa.Column(sa.Integer, nullable\u003dFalse, primary_key\u003dTrue)"},{"line_number":36,"context_line":"    helper \u003d sa.Column(sa.String(64), nullable\u003dFalse, primary_key\u003dTrue)"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"    router \u003d orm.relationship(l3.Router, load_on_pending\u003dTrue,"},{"line_number":39,"context_line":"                              backref\u003dorm.backref(\"conntrack_helpers\","}],"source_content_type":"text/x-python","patch_set":3,"id":"3fce034c_b382bec7","line":36,"range":{"start_line":36,"start_character":54,"end_line":36,"end_character":65},"in_reply_to":"3fce034c_733bf6d0","updated":"2019-04-12 19:25:00.000000000","message":"Done","commit_id":"a2f72d58323747a66e01abbe948de112e56dd4e8"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"d44e99e1a6e0572f8cde36d4440a68e2cd5d8a59","unresolved":false,"context_lines":[{"line_number":27,"context_line":"    router_id \u003d sa.Column(sa.String(db_const.UUID_FIELD_SIZE),"},{"line_number":28,"context_line":"                          sa.ForeignKey(\u0027routers.id\u0027, ondelete\u003d\"CASCADE\"),"},{"line_number":29,"context_line":"                          nullable\u003dFalse)"},{"line_number":30,"context_line":"    protocol \u003d sa.Column(sa.String(64), nullable\u003dFalse, primary_key\u003dFalse)"},{"line_number":31,"context_line":"    port \u003d sa.Column(sa.Integer, nullable\u003dFalse, primary_key\u003dFalse)"},{"line_number":32,"context_line":"    helper \u003d sa.Column(sa.String(64), nullable\u003dFalse, primary_key\u003dFalse)"},{"line_number":33,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"ffb9cba7_b6b82676","line":30,"updated":"2019-04-26 13:07:03.000000000","message":"small nit: primary_key is False by default and it\u0027s not needed.\n\nOnly change this if you need to respin this patch.","commit_id":"e8770da025bd05cc5a3cbedc0647a06cf8ea6a8e"},{"author":{"_account_id":24245,"name":"Harald Jensås","email":"hjensas@redhat.com","username":"harald.jensas"},"change_message_id":"7e498d919e5899806519109805a5199649cd31d1","unresolved":false,"context_lines":[{"line_number":27,"context_line":"    router_id \u003d sa.Column(sa.String(db_const.UUID_FIELD_SIZE),"},{"line_number":28,"context_line":"                          sa.ForeignKey(\u0027routers.id\u0027, ondelete\u003d\"CASCADE\"),"},{"line_number":29,"context_line":"                          nullable\u003dFalse)"},{"line_number":30,"context_line":"    protocol \u003d sa.Column(sa.String(64), nullable\u003dFalse, primary_key\u003dFalse)"},{"line_number":31,"context_line":"    port \u003d sa.Column(sa.Integer, nullable\u003dFalse, primary_key\u003dFalse)"},{"line_number":32,"context_line":"    helper \u003d sa.Column(sa.String(64), nullable\u003dFalse, primary_key\u003dFalse)"},{"line_number":33,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"ffb9cba7_83ad9f32","line":30,"in_reply_to":"ffb9cba7_b6b82676","updated":"2019-04-26 17:23:33.000000000","message":"Done","commit_id":"e8770da025bd05cc5a3cbedc0647a06cf8ea6a8e"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"2c7db4be0cd0f3ded0f738a9144afc7510274300","unresolved":false,"context_lines":[{"line_number":27,"context_line":"    router_id \u003d sa.Column(sa.String(db_const.UUID_FIELD_SIZE),"},{"line_number":28,"context_line":"                          sa.ForeignKey(\u0027routers.id\u0027, ondelete\u003d\"CASCADE\"),"},{"line_number":29,"context_line":"                          nullable\u003dFalse)"},{"line_number":30,"context_line":"    protocol \u003d sa.Column(sa.String(64), nullable\u003dFalse)"},{"line_number":31,"context_line":"    port \u003d sa.Column(sa.Integer, nullable\u003dFalse)"},{"line_number":32,"context_line":"    helper \u003d sa.Column(sa.String(64), nullable\u003dFalse)"},{"line_number":33,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"bfb3d3c7_f8049dc8","line":30,"range":{"start_line":30,"start_character":35,"end_line":30,"end_character":37},"updated":"2019-05-20 09:11:54.000000000","message":"why e.g. protocol column in SG rule has length 40 and here You use 64?","commit_id":"1b6dc8b0a730991da9a74b3e7ba56a8a05cec856"},{"author":{"_account_id":24245,"name":"Harald Jensås","email":"hjensas@redhat.com","username":"harald.jensas"},"change_message_id":"b1fe9cf732c740ae6ebf5ebd61266c4fb6f2942c","unresolved":false,"context_lines":[{"line_number":27,"context_line":"    router_id \u003d sa.Column(sa.String(db_const.UUID_FIELD_SIZE),"},{"line_number":28,"context_line":"                          sa.ForeignKey(\u0027routers.id\u0027, ondelete\u003d\"CASCADE\"),"},{"line_number":29,"context_line":"                          nullable\u003dFalse)"},{"line_number":30,"context_line":"    protocol \u003d sa.Column(sa.String(64), nullable\u003dFalse)"},{"line_number":31,"context_line":"    port \u003d sa.Column(sa.Integer, nullable\u003dFalse)"},{"line_number":32,"context_line":"    helper \u003d sa.Column(sa.String(64), nullable\u003dFalse)"},{"line_number":33,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"bfb3d3c7_8145e972","line":30,"range":{"start_line":30,"start_character":35,"end_line":30,"end_character":37},"in_reply_to":"bfb3d3c7_9991e355","updated":"2019-05-20 16:03:51.000000000","message":"Thanks, we should use length 40 here as it is in SG rule and port forwarding.\n\nDone.","commit_id":"1b6dc8b0a730991da9a74b3e7ba56a8a05cec856"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"2ebb9614e9845b9665dd89a4241164a9fa3781dd","unresolved":false,"context_lines":[{"line_number":27,"context_line":"    router_id \u003d sa.Column(sa.String(db_const.UUID_FIELD_SIZE),"},{"line_number":28,"context_line":"                          sa.ForeignKey(\u0027routers.id\u0027, ondelete\u003d\"CASCADE\"),"},{"line_number":29,"context_line":"                          nullable\u003dFalse)"},{"line_number":30,"context_line":"    protocol \u003d sa.Column(sa.String(64), nullable\u003dFalse)"},{"line_number":31,"context_line":"    port \u003d sa.Column(sa.Integer, nullable\u003dFalse)"},{"line_number":32,"context_line":"    helper \u003d sa.Column(sa.String(64), nullable\u003dFalse)"},{"line_number":33,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"bfb3d3c7_9991e355","line":30,"range":{"start_line":30,"start_character":35,"end_line":30,"end_character":37},"in_reply_to":"bfb3d3c7_f8049dc8","updated":"2019-05-20 11:47:50.000000000","message":"I would like to know the reason too :)","commit_id":"1b6dc8b0a730991da9a74b3e7ba56a8a05cec856"}],"neutron/objects/conntrack_helper.py":[{"author":{"_account_id":27654,"name":"Hongbin Lu","email":"kira034@163.com","username":"hongbin.lu"},"change_message_id":"cdb4420f8a8561f8bfbd9f38c588e854b1d04611","unresolved":false,"context_lines":[{"line_number":30,"context_line":"        \u0027id\u0027: common_types.UUIDField(),"},{"line_number":31,"context_line":"        \u0027router_id\u0027: common_types.UUIDField(),"},{"line_number":32,"context_line":"        \u0027protocol\u0027: common_types.IpProtocolEnumField(),"},{"line_number":33,"context_line":"        \u0027port\u0027: common_types.PortRangeField(),"},{"line_number":34,"context_line":"        \u0027helper\u0027: obj_fields.StringField(),"},{"line_number":35,"context_line":"    }"},{"line_number":36,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"dfbec78f_4bab5e88","line":33,"range":{"start_line":33,"start_character":29,"end_line":33,"end_character":43},"updated":"2019-05-08 18:25:19.000000000","message":"The will start from 1 to 65535. If you want to support port 0, use PortRangeWith0Field instead. Just want to point it out.","commit_id":"0ad89994f61095565d06dba46dee137f8f735f51"},{"author":{"_account_id":24245,"name":"Harald Jensås","email":"hjensas@redhat.com","username":"harald.jensas"},"change_message_id":"e90aca0088a5672839771905dbd88b58307a9ab8","unresolved":false,"context_lines":[{"line_number":30,"context_line":"        \u0027id\u0027: common_types.UUIDField(),"},{"line_number":31,"context_line":"        \u0027router_id\u0027: common_types.UUIDField(),"},{"line_number":32,"context_line":"        \u0027protocol\u0027: common_types.IpProtocolEnumField(),"},{"line_number":33,"context_line":"        \u0027port\u0027: common_types.PortRangeField(),"},{"line_number":34,"context_line":"        \u0027helper\u0027: obj_fields.StringField(),"},{"line_number":35,"context_line":"    }"},{"line_number":36,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"dfbec78f_640c11ed","line":33,"range":{"start_line":33,"start_character":29,"end_line":33,"end_character":43},"in_reply_to":"dfbec78f_4bab5e88","updated":"2019-05-13 11:38:38.000000000","message":"I don\u0027t think we want to include port 0 here.","commit_id":"0ad89994f61095565d06dba46dee137f8f735f51"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"2ebb9614e9845b9665dd89a4241164a9fa3781dd","unresolved":false,"context_lines":[{"line_number":16,"context_line":"from neutron.objects import base"},{"line_number":17,"context_line":"from neutron.objects import common_types"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"from oslo_versionedobjects import fields as obj_fields"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"@base.NeutronObjectRegistry.register"}],"source_content_type":"text/x-python","patch_set":12,"id":"bfb3d3c7_99f563ce","line":19,"updated":"2019-05-20 11:47:50.000000000","message":"third-party import should be placed before local imports (i.e. imports from \u0027neutron\u0027)","commit_id":"1b6dc8b0a730991da9a74b3e7ba56a8a05cec856"},{"author":{"_account_id":24245,"name":"Harald Jensås","email":"hjensas@redhat.com","username":"harald.jensas"},"change_message_id":"b1fe9cf732c740ae6ebf5ebd61266c4fb6f2942c","unresolved":false,"context_lines":[{"line_number":16,"context_line":"from neutron.objects import base"},{"line_number":17,"context_line":"from neutron.objects import common_types"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"from oslo_versionedobjects import fields as obj_fields"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"@base.NeutronObjectRegistry.register"}],"source_content_type":"text/x-python","patch_set":12,"id":"bfb3d3c7_e135c5f8","line":19,"in_reply_to":"bfb3d3c7_99f563ce","updated":"2019-05-20 16:03:51.000000000","message":"Done","commit_id":"1b6dc8b0a730991da9a74b3e7ba56a8a05cec856"}]}
