)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"5089220dc61bd94bca13bd481400ba8f94779972","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Add description field to portforwarding NAT rules"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Problem Description"},{"line_number":10,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"As users create and update theirs floating ip rules, the reason"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"7faddb67_0baac117","line":9,"updated":"2019-07-18 16:58:09.000000000","message":"This should be in the bug description, see comment below.","commit_id":"accb4111bbe81ddba86103b58e63b25b09ba9db9"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"5089220dc61bd94bca13bd481400ba8f94779972","unresolved":false,"context_lines":[{"line_number":46,"context_line":"Neutron schema to persist the new field. Also, I used the"},{"line_number":47,"context_line":"`constants.LONG_DESCRIPTION_FIELD_SIZE` to limit the size of the"},{"line_number":48,"context_line":"new field."},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"Change-Id: Ibac91d24da2b82cdce72165d1295fa5d4475ffd3"},{"line_number":51,"context_line":"Signed-off-by: Pedro Martins \u003cphpm13@gmail.com\u003e"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"7faddb67_8bb6b189","line":49,"updated":"2019-07-18 16:58:09.000000000","message":"You should provide a launchpad bug, to track this issue.\nhttps://bugs.launchpad.net/neutron/+bugs\n\nE.g:\n\nCloses-Bug: #123456","commit_id":"accb4111bbe81ddba86103b58e63b25b09ba9db9"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"bb594248c4e7d555d26665f8bec7aa882db8ee9f","unresolved":false,"context_lines":[{"line_number":45,"context_line":"I create a column “description” in the `portforwardings` table on"},{"line_number":46,"context_line":"Neutron schema to persist the new field. Also, I used the"},{"line_number":47,"context_line":"`constants.LONG_DESCRIPTION_FIELD_SIZE` to limit the size of the"},{"line_number":48,"context_line":"new field."},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"Implements: blueprint portforwarding-description"},{"line_number":51,"context_line":"Change-Id: Ibac91d24da2b82cdce72165d1295fa5d4475ffd3"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"3fa7e38b_8df01e93","line":48,"updated":"2019-10-31 14:37:47.000000000","message":"This is good description but it should be usually in spec or RFE, not in commit message itself.\nAs this is proposal changes API, I think that You should propose RFE for that. Please check https://docs.openstack.org/neutron/latest/contributor/policies/blueprints.html for details.\nIf You would have any questions about this, please reach out to me (slaweq) on any other team member on #openstack-neutron irc channel @freenode","commit_id":"41566b8abf87581d96bb3f9c45274e4e8f23e073"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"f29f1b94059d343cd30db3e93260289c0f5665fa","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Add description field to portforwarding NAT rules"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Problem Description"},{"line_number":10,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"As users create and update theirs floating ip rules, the reason"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":7,"id":"3fa7e38b_93ab786f","line":9,"updated":"2019-12-09 17:48:39.000000000","message":"The commit message should describe the patch, not the bug. We have the link to it. You should add a brief description of what you have done here.","commit_id":"bfd3eae57394fb9640adb59108413e975a3260ce"}],"neutron/db/migration/alembic_migrations/versions/train/expand/Ibac91d24da2_port_forwarding_description.py":[{"author":{"_account_id":25564,"name":"yanpuqing","email":"yanpq@awcloud.com","username":"ycx"},"change_message_id":"1e77dee23715fb4c7b3e1e90f18fb5503ce3032e","unresolved":false,"context_lines":[{"line_number":32,"context_line":""},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"def upgrade():"},{"line_number":35,"context_line":"    op.add_column(\u0027portforwardings\u0027, sa.Column(\u0027description\u0027, sa.String(length\u003dconstants.LONG_DESCRIPTION_FIELD_SIZE), nullable\u003dTrue))"}],"source_content_type":"text/x-python","patch_set":2,"id":"7faddb67_52f64c65","line":35,"updated":"2019-07-17 07:15:56.000000000","message":"op.add_column(\u0027portforwardings\u0027, sa.Column(\u0027description\u0027,\n         sa.String(length\u003dconstants.LONG_DESCRIPTION_FIELD_SIZE),\n         nullable\u003dTrue))","commit_id":"0c0b1a9e3eccc4229a68773cb0ceedf4c6ab481a"}],"neutron/db/migration/alembic_migrations/versions/ussuri/expand/Ibac91d24da2_port_forwarding_description.py":[{"author":{"_account_id":15554,"name":"Bence Romsics","email":"bence.romsics@gmail.com","username":"ebenrom","status":"working for Ericsson, UTC+1 (+DST)"},"change_message_id":"3b7245733e64381a181399ccf9b40e731d1b4958","unresolved":false,"context_lines":[{"line_number":34,"context_line":"def upgrade():"},{"line_number":35,"context_line":"    op.add_column(\u0027portforwardings\u0027, sa.Column(\u0027description\u0027,"},{"line_number":36,"context_line":"             sa.String(length\u003dconstants.LONG_DESCRIPTION_FIELD_SIZE),"},{"line_number":37,"context_line":"             nullable\u003dTrue))"}],"source_content_type":"text/x-python","patch_set":6,"id":"3fa7e38b_b0bef1fd","line":37,"range":{"start_line":37,"start_character":13,"end_line":37,"end_character":26},"updated":"2019-11-14 11:21:40.000000000","message":"The same question applise here as in the neutron-lib patch: do we need to allow the null value? What do we use it for?","commit_id":"73c42e75094dd974ea45f1e3a2bb7b0a47abb6db"},{"author":{"_account_id":27654,"name":"Hongbin Lu","email":"kira034@163.com","username":"hongbin.lu"},"change_message_id":"7b312a09c0217983834e69b77479d952e90572f6","unresolved":false,"context_lines":[{"line_number":32,"context_line":""},{"line_number":33,"context_line":"def upgrade():"},{"line_number":34,"context_line":"    table \u003d \u0027portforwardings\u0027"},{"line_number":35,"context_line":"    op.add_column(table, sa.Column(\u0027standard_attr_id\u0027,"},{"line_number":36,"context_line":"                                   sa.BigInteger(),"},{"line_number":37,"context_line":"                                   nullable\u003dFalse))"},{"line_number":38,"context_line":"    op.create_foreign_key("}],"source_content_type":"text/x-python","patch_set":14,"id":"3fa7e38b_c58414b5","line":35,"range":{"start_line":35,"start_character":7,"end_line":35,"end_character":17},"updated":"2019-12-20 23:37:00.000000000","message":"I think it misses a migration step: we need to go through existing records in this table and fill up this column. Otherwise, I guess the upgrade will break.\n\nTake a look at the file below as a reference: https://opendev.org/openstack/neutron/src/branch/master/neutron/db/migration/alembic_migrations/versions/newton/contract/97c25b0d2353_add_name_desc.py","commit_id":"d43ecb59dd0eba81fba47edba4349f858a312bb1"},{"author":{"_account_id":30695,"name":"Pedro Henrique Pereira Martins","email":"phpm13@gmail.com","username":"pedrohpmartins"},"change_message_id":"1cee3913bc9e2da48395a0ed1b2e3422636bedf6","unresolved":false,"context_lines":[{"line_number":32,"context_line":""},{"line_number":33,"context_line":"def upgrade():"},{"line_number":34,"context_line":"    table \u003d \u0027portforwardings\u0027"},{"line_number":35,"context_line":"    op.add_column(table, sa.Column(\u0027standard_attr_id\u0027,"},{"line_number":36,"context_line":"                                   sa.BigInteger(),"},{"line_number":37,"context_line":"                                   nullable\u003dFalse))"},{"line_number":38,"context_line":"    op.create_foreign_key("}],"source_content_type":"text/x-python","patch_set":14,"id":"3fa7e38b_f1d8e424","line":35,"range":{"start_line":35,"start_character":7,"end_line":35,"end_character":17},"in_reply_to":"3fa7e38b_c58414b5","updated":"2019-12-23 19:23:38.000000000","message":"Hi Hongbin Lu, I think that there is no need to create a migration step, as I am adding a new field in the database and not changing an existing one; there is no data to be migrated into the new column (the data was not generated yet).\n\nI did some tests internally in an OpenStack environment that we have here and it worked fine, but now I do not remember if the portforwardings table was empty or not when I did the tests. I will check it and if the table was empty, I will retry the tests in a scenario with a populated portforwardings table.","commit_id":"d43ecb59dd0eba81fba47edba4349f858a312bb1"}],"neutron/db/models/port_forwarding.py":[{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"5089220dc61bd94bca13bd481400ba8f94779972","unresolved":false,"context_lines":[{"line_number":57,"context_line":"                            lazy\u003d\u0027subquery\u0027, uselist\u003dTrue,"},{"line_number":58,"context_line":"                            cascade\u003d\u0027delete\u0027)"},{"line_number":59,"context_line":"    )"},{"line_number":60,"context_line":"    description \u003d sa.Column(sa.VARCHAR, nullable\u003dTrue)"},{"line_number":61,"context_line":"    revises_on_change \u003d (\u0027floating_ip\u0027, \u0027port\u0027,)"}],"source_content_type":"text/x-python","patch_set":3,"id":"7faddb67_c564984c","line":60,"range":{"start_line":60,"start_character":40,"end_line":60,"end_character":53},"updated":"2019-07-18 16:58:09.000000000","message":"nit: \"nullable\u003dFalse\" is the default value, there is no need to specify this","commit_id":"accb4111bbe81ddba86103b58e63b25b09ba9db9"},{"author":{"_account_id":15554,"name":"Bence Romsics","email":"bence.romsics@gmail.com","username":"ebenrom","status":"working for Ericsson, UTC+1 (+DST)"},"change_message_id":"3b7245733e64381a181399ccf9b40e731d1b4958","unresolved":false,"context_lines":[{"line_number":56,"context_line":"        backref\u003dorm.backref(\"port_forwardings\","},{"line_number":57,"context_line":"                            lazy\u003d\u0027subquery\u0027, uselist\u003dTrue,"},{"line_number":58,"context_line":"                            cascade\u003d\u0027delete\u0027)"},{"line_number":59,"context_line":"    )"},{"line_number":60,"context_line":"    description \u003d sa.Column(sa.VARCHAR)"},{"line_number":61,"context_line":"    revises_on_change \u003d (\u0027floating_ip\u0027, \u0027port\u0027,)"}],"source_content_type":"text/x-python","patch_set":6,"id":"3fa7e38b_10882520","line":59,"updated":"2019-11-14 11:21:40.000000000","message":"The neutron-lib change adds a \u0027name\u0027 field too. I guess this change will have that too?","commit_id":"73c42e75094dd974ea45f1e3a2bb7b0a47abb6db"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"1372ea69c95ad7c0a78241961de81ae1b3ccecf8","unresolved":false,"context_lines":[{"line_number":56,"context_line":"        backref\u003dorm.backref(\"port_forwardings\","},{"line_number":57,"context_line":"                            lazy\u003d\u0027subquery\u0027, uselist\u003dTrue,"},{"line_number":58,"context_line":"                            cascade\u003d\u0027delete\u0027)"},{"line_number":59,"context_line":"    )"},{"line_number":60,"context_line":"    description \u003d sa.Column(sa.VARCHAR)"},{"line_number":61,"context_line":"    revises_on_change \u003d (\u0027floating_ip\u0027, \u0027port\u0027,)"}],"source_content_type":"text/x-python","patch_set":6,"id":"3fa7e38b_462c8498","line":59,"in_reply_to":"3fa7e38b_10882520","updated":"2019-11-18 10:15:33.000000000","message":"No, as we discussed during drivers meeting, lets go only with description field in this case. E.g. floating IP also don\u0027t have name field so we shouldn\u0027t add it to this one.","commit_id":"73c42e75094dd974ea45f1e3a2bb7b0a47abb6db"},{"author":{"_account_id":15554,"name":"Bence Romsics","email":"bence.romsics@gmail.com","username":"ebenrom","status":"working for Ericsson, UTC+1 (+DST)"},"change_message_id":"3b7245733e64381a181399ccf9b40e731d1b4958","unresolved":false,"context_lines":[{"line_number":57,"context_line":"                            lazy\u003d\u0027subquery\u0027, uselist\u003dTrue,"},{"line_number":58,"context_line":"                            cascade\u003d\u0027delete\u0027)"},{"line_number":59,"context_line":"    )"},{"line_number":60,"context_line":"    description \u003d sa.Column(sa.VARCHAR)"},{"line_number":61,"context_line":"    revises_on_change \u003d (\u0027floating_ip\u0027, \u0027port\u0027,)"}],"source_content_type":"text/x-python","patch_set":6,"id":"3fa7e38b_f0b6a9f9","line":60,"range":{"start_line":60,"start_character":31,"end_line":60,"end_character":38},"updated":"2019-11-14 11:21:40.000000000","message":"Not sure why, but all existing code seems to prefer sa.String type over sa.VARCHAR.","commit_id":"73c42e75094dd974ea45f1e3a2bb7b0a47abb6db"}],"neutron/extensions/floating_ip_port_forwarding.py":[{"author":{"_account_id":25564,"name":"yanpuqing","email":"yanpq@awcloud.com","username":"ycx"},"change_message_id":"1e77dee23715fb4c7b3e1e90f18fb5503ce3032e","unresolved":false,"context_lines":[{"line_number":16,"context_line":"import abc"},{"line_number":17,"context_line":"import itertools"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"from neutron.extensions import floating_ip_port_forwarding_extended_api as apidef"},{"line_number":20,"context_line":"from neutron_lib.api import extensions as api_extensions"},{"line_number":21,"context_line":"from neutron_lib.plugins import constants as plugin_consts"},{"line_number":22,"context_line":"from neutron_lib.plugins import directory"}],"source_content_type":"text/x-python","patch_set":2,"id":"7faddb67_928cc4d7","line":19,"updated":"2019-07-17 07:15:56.000000000","message":"from neutron.extensions import \\\n    floating_ip_port_forwarding_extended_api as apidef","commit_id":"0c0b1a9e3eccc4229a68773cb0ceedf4c6ab481a"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"5089220dc61bd94bca13bd481400ba8f94779972","unresolved":false,"context_lines":[{"line_number":79,"context_line":""},{"line_number":80,"context_line":"@six.add_metaclass(abc.ABCMeta)"},{"line_number":81,"context_line":"class PortForwardingPluginBase(service_base.ServicePluginBase):"},{"line_number":82,"context_line":""},{"line_number":83,"context_line":"    path_prefix \u003d apidef.API_PREFIX"},{"line_number":84,"context_line":""},{"line_number":85,"context_line":"    @classmethod"}],"source_content_type":"text/x-python","patch_set":3,"id":"7faddb67_f6a06cf6","side":"PARENT","line":82,"updated":"2019-07-18 16:58:09.000000000","message":"Unrelated change","commit_id":"64c8bfbbf0cf87942bccdde7efd73cf25187d362"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"5089220dc61bd94bca13bd481400ba8f94779972","unresolved":false,"context_lines":[{"line_number":16,"context_line":"import abc"},{"line_number":17,"context_line":"import itertools"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"from neutron.extensions import \\"},{"line_number":20,"context_line":"    floating_ip_port_forwarding_extended_api as apidef"},{"line_number":21,"context_line":"from neutron_lib.api import extensions as api_extensions"},{"line_number":22,"context_line":"from neutron_lib.plugins import constants as plugin_consts"}],"source_content_type":"text/x-python","patch_set":3,"id":"7faddb67_b6f434f2","line":19,"updated":"2019-07-18 16:58:09.000000000","message":"As commented, this should be in neutron-lib\n\nJust a reminder: there are usually three importing blocks (in order):\n- Python standard libraries\n- Other libraries. E.g.: neutron-lib, oslo, six, etc.\n- Neutron project imports\n\nYou must follow this division to avoid pep8 errors. Ah, and you must order the imports in each block alphabetically.","commit_id":"accb4111bbe81ddba86103b58e63b25b09ba9db9"}],"neutron/extensions/floating_ip_port_forwarding_extended_api.py":[{"author":{"_account_id":25564,"name":"yanpuqing","email":"yanpq@awcloud.com","username":"ycx"},"change_message_id":"1e77dee23715fb4c7b3e1e90f18fb5503ce3032e","unresolved":false,"context_lines":[{"line_number":13,"context_line":"#    License for the specific language governing permissions and limitations"},{"line_number":14,"context_line":"#    under the License."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"from neutron_lib.api.definitions.floating_ip_port_forwarding import *"},{"line_number":17,"context_line":"from neutron_lib.db import constants"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"UPDATED_TIMESTAMP \u003d \"2019-07-13T10:00:00-00:00\""}],"source_content_type":"text/x-python","patch_set":2,"id":"7faddb67_72d90820","line":16,"range":{"start_line":16,"start_character":0,"end_line":16,"end_character":69},"updated":"2019-07-17 07:15:56.000000000","message":"You\u0027re better off writing the all values again in your code, or referencing \"from neutron_lib.api.definitions import floating_ip_port_forwarding\" directly in your code.","commit_id":"0c0b1a9e3eccc4229a68773cb0ceedf4c6ab481a"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"5089220dc61bd94bca13bd481400ba8f94779972","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright (c) 2012 OpenStack Foundation."},{"line_number":2,"context_line":"# All rights reserved."},{"line_number":3,"context_line":"#"},{"line_number":4,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"}],"source_content_type":"text/x-python","patch_set":3,"id":"7faddb67_0b7f21ab","line":1,"range":{"start_line":1,"start_character":16,"end_line":1,"end_character":42},"updated":"2019-07-18 16:58:09.000000000","message":"Please, change this.","commit_id":"accb4111bbe81ddba86103b58e63b25b09ba9db9"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"5089220dc61bd94bca13bd481400ba8f94779972","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright (c) 2012 OpenStack Foundation."},{"line_number":2,"context_line":"# All rights reserved."},{"line_number":3,"context_line":"#"},{"line_number":4,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":5,"context_line":"#    not use this file except in compliance with the License. You may obtain"},{"line_number":6,"context_line":"#    a copy of the License at"}],"source_content_type":"text/x-python","patch_set":3,"id":"7faddb67_6b5d7545","line":3,"updated":"2019-07-18 16:58:09.000000000","message":"The API definitions are always in neutron-lib, to be imported by anyone else (if this API is needed).\n\nAs an example: the API definition for FIP port forwarding (related to this one)\n\nhttps://review.opendev.org/#/c/535638/, including:\n- The API definition\n- Unit tests\n- A release note","commit_id":"accb4111bbe81ddba86103b58e63b25b09ba9db9"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"5089220dc61bd94bca13bd481400ba8f94779972","unresolved":false,"context_lines":[{"line_number":49,"context_line":"UPDATED_TIMESTAMP \u003d \"2018-01-19T10:00:00-00:00\""},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"# The name of the resource."},{"line_number":52,"context_line":"RESOURCE_NAME \u003d \u0027port_forwarding\u0027"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"# The plural for the resource."},{"line_number":55,"context_line":"COLLECTION_NAME \u003d \u0027port_forwardings\u0027"},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"# parent"},{"line_number":58,"context_line":"PARENT_RESOURCE_NAME \u003d l3.FLOATINGIP"}],"source_content_type":"text/x-python","patch_set":3,"id":"7faddb67_7610fc4e","line":55,"range":{"start_line":52,"start_character":0,"end_line":55,"end_character":36},"updated":"2019-07-18 16:58:09.000000000","message":"Please, use neutron-lib.api.definitions.floating_ip_port_forwarding constants","commit_id":"accb4111bbe81ddba86103b58e63b25b09ba9db9"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"5089220dc61bd94bca13bd481400ba8f94779972","unresolved":false,"context_lines":[{"line_number":71,"context_line":"# The subresource attribute map for the extension. It adds child resources"},{"line_number":72,"context_line":"# to main extension\u0027s resource. The subresource map must have a parent and"},{"line_number":73,"context_line":"# a parameters entry. If an extension does not need such a map, None can"},{"line_number":74,"context_line":"# be specified (mandatory)."},{"line_number":75,"context_line":"SUB_RESOURCE_ATTRIBUTE_MAP \u003d {"},{"line_number":76,"context_line":"    COLLECTION_NAME: {"},{"line_number":77,"context_line":"        \u0027parent\u0027: {\u0027collection_name\u0027: PARENT_COLLECTION_NAME,"}],"source_content_type":"text/x-python","patch_set":3,"id":"7faddb67_d601b006","line":74,"updated":"2019-07-18 16:58:09.000000000","message":"\"description\" is not a sub resource, but part of the resource attribute map.","commit_id":"accb4111bbe81ddba86103b58e63b25b09ba9db9"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"5089220dc61bd94bca13bd481400ba8f94779972","unresolved":false,"context_lines":[{"line_number":72,"context_line":"# to main extension\u0027s resource. The subresource map must have a parent and"},{"line_number":73,"context_line":"# a parameters entry. If an extension does not need such a map, None can"},{"line_number":74,"context_line":"# be specified (mandatory)."},{"line_number":75,"context_line":"SUB_RESOURCE_ATTRIBUTE_MAP \u003d {"},{"line_number":76,"context_line":"    COLLECTION_NAME: {"},{"line_number":77,"context_line":"        \u0027parent\u0027: {\u0027collection_name\u0027: PARENT_COLLECTION_NAME,"},{"line_number":78,"context_line":"                   \u0027member_name\u0027: PARENT_RESOURCE_NAME},"}],"source_content_type":"text/x-python","patch_set":3,"id":"7faddb67_cb1ca979","line":75,"updated":"2019-07-18 16:58:09.000000000","message":"You are amending the \"port_forwardings\" API. This should be something like this:\n\nRESOURCE_ATTRIBUTE_MAP \u003d {\n  COLLECTION_NAME \u003d {\n            DESCRIPTION_FIELD: {\u0027allow_post\u0027: True,\n                                \u0027allow_put\u0027: True,\n                                \u0027validate\u0027: {\n                                    \u0027type:string_or_none\u0027:\n                                        db_const.LONG_DESCRIPTION_FIELD_SIZE},\n                                \u0027is_visible\u0027: True,\n                                \u0027is_sort_key\u0027: True,\n                                \u0027is_filter\u0027: True,\n                                \u0027default\u0027: None}\n  }\n}","commit_id":"accb4111bbe81ddba86103b58e63b25b09ba9db9"}],"neutron/objects/port_forwarding.py":[{"author":{"_account_id":25564,"name":"yanpuqing","email":"yanpq@awcloud.com","username":"ycx"},"change_message_id":"1e77dee23715fb4c7b3e1e90f18fb5503ce3032e","unresolved":false,"context_lines":[{"line_number":16,"context_line":""},{"line_number":17,"context_line":"import netaddr"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"import sqlalchemy as sa"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"from neutron.db.models import l3"},{"line_number":22,"context_line":"from neutron.db.models import port_forwarding as models"}],"source_content_type":"text/x-python","patch_set":2,"id":"7faddb67_72ab4874","line":19,"range":{"start_line":19,"start_character":0,"end_line":19,"end_character":23},"updated":"2019-07-17 07:15:56.000000000","message":"It\u0027s unused, you can delete it.","commit_id":"0c0b1a9e3eccc4229a68773cb0ceedf4c6ab481a"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"5089220dc61bd94bca13bd481400ba8f94779972","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":"7faddb67_f62dcc94","line":34,"updated":"2019-07-18 16:58:09.000000000","message":"You should increase the version and add a description:\n\n# Version 1.2: Add \"description\" field\nVERSION \u003d \u00271.2\u0027","commit_id":"accb4111bbe81ddba86103b58e63b25b09ba9db9"},{"author":{"_account_id":30695,"name":"Pedro Henrique Pereira Martins","email":"phpm13@gmail.com","username":"pedrohpmartins"},"change_message_id":"7745f29e1dfbb37d024c9ebb327468d0b4d220f3","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":"3fa7e38b_34e12e9c","line":34,"in_reply_to":"7faddb67_f62dcc94","updated":"2019-12-16 11:42:56.000000000","message":"Got it.","commit_id":"accb4111bbe81ddba86103b58e63b25b09ba9db9"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"5089220dc61bd94bca13bd481400ba8f94779972","unresolved":false,"context_lines":[{"line_number":62,"context_line":"        \u0027internal_port\u0027: common_types.PortRangeField(nullable\u003dFalse),"},{"line_number":63,"context_line":"        \u0027floating_ip_address\u0027: obj_fields.IPV4AddressField(),"},{"line_number":64,"context_line":"        \u0027router_id\u0027: common_types.UUIDField(),"},{"line_number":65,"context_line":"        \u0027description\u0027: obj_fields.StringField(nullable\u003dTrue)"},{"line_number":66,"context_line":"    }"},{"line_number":67,"context_line":""},{"line_number":68,"context_line":"    synthetic_fields \u003d [\u0027floating_ip_address\u0027, \u0027router_id\u0027]"}],"source_content_type":"text/x-python","patch_set":3,"id":"7faddb67_b623d4a6","line":65,"range":{"start_line":65,"start_character":46,"end_line":65,"end_character":59},"updated":"2019-07-18 16:58:09.000000000","message":"This is the default value, you don\u0027t need to specify it","commit_id":"accb4111bbe81ddba86103b58e63b25b09ba9db9"},{"author":{"_account_id":30695,"name":"Pedro Henrique Pereira Martins","email":"phpm13@gmail.com","username":"pedrohpmartins"},"change_message_id":"7745f29e1dfbb37d024c9ebb327468d0b4d220f3","unresolved":false,"context_lines":[{"line_number":62,"context_line":"        \u0027internal_port\u0027: common_types.PortRangeField(nullable\u003dFalse),"},{"line_number":63,"context_line":"        \u0027floating_ip_address\u0027: obj_fields.IPV4AddressField(),"},{"line_number":64,"context_line":"        \u0027router_id\u0027: common_types.UUIDField(),"},{"line_number":65,"context_line":"        \u0027description\u0027: obj_fields.StringField(nullable\u003dTrue)"},{"line_number":66,"context_line":"    }"},{"line_number":67,"context_line":""},{"line_number":68,"context_line":"    synthetic_fields \u003d [\u0027floating_ip_address\u0027, \u0027router_id\u0027]"}],"source_content_type":"text/x-python","patch_set":3,"id":"3fa7e38b_54a4eaa2","line":65,"range":{"start_line":65,"start_character":46,"end_line":65,"end_character":59},"in_reply_to":"7faddb67_b623d4a6","updated":"2019-12-16 11:42:56.000000000","message":"Hello Rodolfo.\n\nI checked the \u0027oslo_versionedobjects.fields.Field\u0027 class and seems that the default value in constructor is \u0027False\u0027 and not \u0027True\u0027","commit_id":"accb4111bbe81ddba86103b58e63b25b09ba9db9"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"5089220dc61bd94bca13bd481400ba8f94779972","unresolved":false,"context_lines":[{"line_number":69,"context_line":"    fields_no_update \u003d {"},{"line_number":70,"context_line":"        \u0027id\u0027, \u0027floatingip_id\u0027"},{"line_number":71,"context_line":"    }"},{"line_number":72,"context_line":""},{"line_number":73,"context_line":"    def __eq__(self, other):"},{"line_number":74,"context_line":"        for attr in self.fields:"},{"line_number":75,"context_line":"            if getattr(self, attr) !\u003d getattr(other, attr):"}],"source_content_type":"text/x-python","patch_set":3,"id":"7faddb67_d678d090","line":72,"updated":"2019-07-18 16:58:09.000000000","message":"You need (must) implement the OVO compatibility method, to avoid versioning problems:\n\n  from oslo_utils import versionutils\n  ...\n\n  def obj_make_compatible(self, primitive, target_version):\n      _target_version \u003d versionutils.convert_version_to_tuple(target_version)\n      if _target_version \u003c (1, 2):\n          primitive.pop(\u0027description\u0027, None)\n\n\nCheck https://github.com/openstack/neutron/blob/master/doc/source/contributor/internals/objects_usage.rst#defining-your-own-object","commit_id":"accb4111bbe81ddba86103b58e63b25b09ba9db9"},{"author":{"_account_id":30695,"name":"Pedro Henrique Pereira Martins","email":"phpm13@gmail.com","username":"pedrohpmartins"},"change_message_id":"7745f29e1dfbb37d024c9ebb327468d0b4d220f3","unresolved":false,"context_lines":[{"line_number":69,"context_line":"    fields_no_update \u003d {"},{"line_number":70,"context_line":"        \u0027id\u0027, \u0027floatingip_id\u0027"},{"line_number":71,"context_line":"    }"},{"line_number":72,"context_line":""},{"line_number":73,"context_line":"    def __eq__(self, other):"},{"line_number":74,"context_line":"        for attr in self.fields:"},{"line_number":75,"context_line":"            if getattr(self, attr) !\u003d getattr(other, attr):"}],"source_content_type":"text/x-python","patch_set":3,"id":"3fa7e38b_94d6e2c2","line":72,"in_reply_to":"7faddb67_d678d090","updated":"2019-12-16 11:42:56.000000000","message":"That is nice, thanks :)","commit_id":"accb4111bbe81ddba86103b58e63b25b09ba9db9"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"2b840610d2287958da3296bf411f87e769d7750a","unresolved":false,"context_lines":[{"line_number":35,"context_line":"    # Version 1.2: Add \"description\" field"},{"line_number":36,"context_line":"    VERSION \u003d \u00271.2\u0027"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"    db_model \u003d models.PortForwarding"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"    primary_keys \u003d [\u0027id\u0027]"},{"line_number":41,"context_line":"    foreign_keys \u003d {\u0027FloatingIP\u0027: {\u0027floatingip_id\u0027: \u0027id\u0027},"}],"source_content_type":"text/x-python","patch_set":6,"id":"3fa7e38b_e2694d8c","line":38,"range":{"start_line":38,"start_character":15,"end_line":38,"end_character":36},"updated":"2019-11-07 14:46:37.000000000","message":"How about use the standard attr?\n\nhttps://github.com/openstack/neutron/blob/master/neutron/db/standard_attr.py#L20","commit_id":"73c42e75094dd974ea45f1e3a2bb7b0a47abb6db"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"1372ea69c95ad7c0a78241961de81ae1b3ccecf8","unresolved":false,"context_lines":[{"line_number":35,"context_line":"    # Version 1.2: Add \"description\" field"},{"line_number":36,"context_line":"    VERSION \u003d \u00271.2\u0027"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"    db_model \u003d models.PortForwarding"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"    primary_keys \u003d [\u0027id\u0027]"},{"line_number":41,"context_line":"    foreign_keys \u003d {\u0027FloatingIP\u0027: {\u0027floatingip_id\u0027: \u0027id\u0027},"}],"source_content_type":"text/x-python","patch_set":6,"id":"3fa7e38b_26d14858","line":38,"range":{"start_line":38,"start_character":15,"end_line":38,"end_character":36},"in_reply_to":"3fa7e38b_e2694d8c","updated":"2019-11-18 10:15:33.000000000","message":"Looking at FloatingIP class: https://github.com/openstack/neutron/blob/418be00155a9fa93c8f63bd1d847d2fb3410228b/neutron/db/models/l3.py#L70 it inherits from HasStandardAttributes which provides also \"description\" field. So maybe it would be good idea to make PortForwarding model inherits from the same class. That way we will have same standard attributes in both resources: Floating IP and Port Forwarding.","commit_id":"73c42e75094dd974ea45f1e3a2bb7b0a47abb6db"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"f29f1b94059d343cd30db3e93260289c0f5665fa","unresolved":false,"context_lines":[{"line_number":64,"context_line":"        \u0027internal_port\u0027: common_types.PortRangeField(nullable\u003dFalse),"},{"line_number":65,"context_line":"        \u0027floating_ip_address\u0027: obj_fields.IPV4AddressField(),"},{"line_number":66,"context_line":"        \u0027router_id\u0027: common_types.UUIDField(),"},{"line_number":67,"context_line":"        \u0027description\u0027: obj_fields.StringField(default\u003d\u0027\u0027)"},{"line_number":68,"context_line":"    }"},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"    synthetic_fields \u003d [\u0027floating_ip_address\u0027, \u0027router_id\u0027]"}],"source_content_type":"text/x-python","patch_set":7,"id":"3fa7e38b_5392e059","line":67,"updated":"2019-12-09 17:48:39.000000000","message":"this should be StringField(), there is no default value for the description and the DB model allows this\n\nhttps://github.com/openstack/neutron-lib/blob/master/neutron_lib/objects/extensions/standardattributes.py#L18","commit_id":"bfd3eae57394fb9640adb59108413e975a3260ce"}],"neutron/tests/unit/agent/l3/extensions/test_port_forwarding.py":[{"author":{"_account_id":25564,"name":"yanpuqing","email":"yanpq@awcloud.com","username":"ycx"},"change_message_id":"1e77dee23715fb4c7b3e1e90f18fb5503ce3032e","unresolved":false,"context_lines":[{"line_number":14,"context_line":"#    under the License."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"import mock"},{"line_number":17,"context_line":"import string"},{"line_number":18,"context_line":"import random"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"from neutron_lib import constants as lib_const"},{"line_number":21,"context_line":"from neutron_lib import context"}],"source_content_type":"text/x-python","patch_set":2,"id":"7faddb67_720108af","line":18,"range":{"start_line":17,"start_character":0,"end_line":18,"end_character":13},"updated":"2019-07-17 07:15:56.000000000","message":"Maybe you should modify the import order, random needs to be in front of string.","commit_id":"0c0b1a9e3eccc4229a68773cb0ceedf4c6ab481a"},{"author":{"_account_id":25564,"name":"yanpuqing","email":"yanpq@awcloud.com","username":"ycx"},"change_message_id":"1e77dee23715fb4c7b3e1e90f18fb5503ce3032e","unresolved":false,"context_lines":[{"line_number":383,"context_line":""},{"line_number":384,"context_line":"    def test_update_port_forwarding(self):"},{"line_number":385,"context_line":"        self._set_pf()"},{"line_number":386,"context_line":"        description \u003d \u0027\u0027.join(random.choice(string.ascii_letters) for _ in range(1024))"},{"line_number":387,"context_line":"        new_pf1 \u003d pf_obj.PortForwarding("},{"line_number":388,"context_line":"            context\u003dNone, id\u003dself.portforwarding2.id,"},{"line_number":389,"context_line":"            floatingip_id\u003dself.floatingip1,"}],"source_content_type":"text/x-python","patch_set":2,"id":"7faddb67_52340c93","line":386,"range":{"start_line":386,"start_character":0,"end_line":386,"end_character":87},"updated":"2019-07-17 07:15:56.000000000","message":"description \u003d \u0027\u0027.join(random.choice(\n                      string.ascii_letters) for _ in range(1024))","commit_id":"0c0b1a9e3eccc4229a68773cb0ceedf4c6ab481a"},{"author":{"_account_id":15554,"name":"Bence Romsics","email":"bence.romsics@gmail.com","username":"ebenrom","status":"working for Ericsson, UTC+1 (+DST)"},"change_message_id":"3b7245733e64381a181399ccf9b40e731d1b4958","unresolved":false,"context_lines":[{"line_number":17,"context_line":"import string"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"import mock"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"from neutron_lib import constants as lib_const"},{"line_number":22,"context_line":"from neutron_lib import context"},{"line_number":23,"context_line":"from oslo_utils import uuidutils"}],"source_content_type":"text/x-python","patch_set":6,"id":"3fa7e38b_102905f1","line":20,"updated":"2019-11-14 11:21:40.000000000","message":"nit: It\u0027s better to avoid introducing unnecessary whitespace, it keeps version control history cleaner.","commit_id":"73c42e75094dd974ea45f1e3a2bb7b0a47abb6db"},{"author":{"_account_id":15554,"name":"Bence Romsics","email":"bence.romsics@gmail.com","username":"ebenrom","status":"working for Ericsson, UTC+1 (+DST)"},"change_message_id":"3b7245733e64381a181399ccf9b40e731d1b4958","unresolved":false,"context_lines":[{"line_number":384,"context_line":""},{"line_number":385,"context_line":"    def test_update_port_forwarding(self):"},{"line_number":386,"context_line":"        self._set_pf()"},{"line_number":387,"context_line":"        description \u003d \u0027\u0027.join(random.choice("},{"line_number":388,"context_line":"                              string.ascii_letters) for _ in range(1024))"},{"line_number":389,"context_line":"        new_pf1 \u003d pf_obj.PortForwarding("},{"line_number":390,"context_line":"            context\u003dNone, id\u003dself.portforwarding2.id,"}],"source_content_type":"text/x-python","patch_set":6,"id":"3fa7e38b_3090c142","line":387,"range":{"start_line":387,"start_character":30,"end_line":387,"end_character":36},"updated":"2019-11-14 11:21:40.000000000","message":"I usually find the use of arbitrary but hardcoded strings better in tests like \u0027an updated test description\u0027. My reason for this is that all use of random may inadvertantly introduce a level of non-reproducibility to tests which can occasionally be quite a pain.","commit_id":"73c42e75094dd974ea45f1e3a2bb7b0a47abb6db"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"f29f1b94059d343cd30db3e93260289c0f5665fa","unresolved":false,"context_lines":[{"line_number":334,"context_line":"            internal_ip_address\u003d\u00272.2.2.2\u0027, internal_port\u003d22222,"},{"line_number":335,"context_line":"            floating_ip_address\u003d\u0027222.222.222.222\u0027,"},{"line_number":336,"context_line":"            router_id\u003dself.router2,"},{"line_number":337,"context_line":"            description\u003d\u0027Some description\u0027)"},{"line_number":338,"context_line":"        self.portforwardings_dict \u003d {"},{"line_number":339,"context_line":"            self.portforwarding1.id: self.portforwarding1,"},{"line_number":340,"context_line":"            self.portforwarding2.id: self.portforwarding2,"}],"source_content_type":"text/x-python","patch_set":7,"id":"3fa7e38b_d387b011","line":337,"updated":"2019-12-09 17:48:39.000000000","message":"YOu should also test with None description and \"\" (empty string)","commit_id":"bfd3eae57394fb9640adb59108413e975a3260ce"}],"releasenotes/notes/add-description-field-in-port-forwarding-5db3b3f407c7eef4.yaml":[{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"1372ea69c95ad7c0a78241961de81ae1b3ccecf8","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Add a new field ``description`` in floating ip portforwardings that"},{"line_number":5,"context_line":"    can be used to describe the reason why the rule was created."}],"source_content_type":"text/x-yaml","patch_set":6,"id":"3fa7e38b_c6463422","line":4,"range":{"start_line":4,"start_character":36,"end_line":4,"end_character":66},"updated":"2019-11-18 10:15:33.000000000","message":"IMO better would be something like:\n\n    in ``Port Forwarding`` resource.","commit_id":"73c42e75094dd974ea45f1e3a2bb7b0a47abb6db"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"f29f1b94059d343cd30db3e93260289c0f5665fa","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Add a new field ``description`` in ``Port Forwarding`` resource."}],"source_content_type":"text/x-yaml","patch_set":7,"id":"3fa7e38b_73783c2a","line":4,"updated":"2019-12-09 17:48:39.000000000","message":"This should be the name of the class: ``PortForwarding``","commit_id":"bfd3eae57394fb9640adb59108413e975a3260ce"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"3769cbd46a466ada215090fbaa76da2632027f0c","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Add a new field ``description`` in ``PortForwarding`` resource."}],"source_content_type":"text/x-yaml","patch_set":9,"id":"3fa7e38b_e68bde1a","line":4,"range":{"start_line":4,"start_character":36,"end_line":4,"end_character":38},"updated":"2019-12-12 14:15:31.000000000","message":"I\u0027m not native english speaker but shouldn\u0027t be \"to the\"?","commit_id":"fb087ae2946e7e7e4697aceaabed474ba1157013"}],"requirements.txt":[{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"f29f1b94059d343cd30db3e93260289c0f5665fa","unresolved":false,"context_lines":[{"line_number":16,"context_line":"keystonemiddleware\u003e\u003d4.17.0 # Apache-2.0"},{"line_number":17,"context_line":"netaddr\u003e\u003d0.7.18 # BSD"},{"line_number":18,"context_line":"netifaces\u003e\u003d0.10.4 # MIT"},{"line_number":19,"context_line":"neutron-lib\u003e\u003d1.30.0 # Apache-2.0"},{"line_number":20,"context_line":"python-neutronclient\u003e\u003d6.7.0 # Apache-2.0"},{"line_number":21,"context_line":"tenacity\u003e\u003d4.4.0 # Apache-2.0"},{"line_number":22,"context_line":"SQLAlchemy\u003e\u003d1.2.0 # MIT"}],"source_content_type":"text/plain","patch_set":7,"id":"3fa7e38b_d3da501b","line":19,"updated":"2019-12-09 17:48:39.000000000","message":"nit: we still don\u0027t know if next version is going to be 1.29.2 or 1.30.0 (maybe last one, the one you are proposing here)","commit_id":"bfd3eae57394fb9640adb59108413e975a3260ce"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"4b62064ee9aab68de0404803e5450cea21960c4a","unresolved":false,"context_lines":[{"line_number":16,"context_line":"keystonemiddleware\u003e\u003d4.17.0 # Apache-2.0"},{"line_number":17,"context_line":"netaddr\u003e\u003d0.7.18 # BSD"},{"line_number":18,"context_line":"netifaces\u003e\u003d0.10.4 # MIT"},{"line_number":19,"context_line":"neutron-lib\u003e\u003d1.30.0 # Apache-2.0"},{"line_number":20,"context_line":"python-neutronclient\u003e\u003d6.7.0 # Apache-2.0"},{"line_number":21,"context_line":"tenacity\u003e\u003d4.4.0 # Apache-2.0"},{"line_number":22,"context_line":"SQLAlchemy\u003e\u003d1.2.0 # MIT"}],"source_content_type":"text/plain","patch_set":7,"id":"3fa7e38b_0afe6605","line":19,"in_reply_to":"3fa7e38b_d3da501b","updated":"2019-12-10 08:48:49.000000000","message":"Actually it will be 1.30: https://review.opendev.org/#/c/697956/ - we are just waiting for second +2 from release team now.","commit_id":"bfd3eae57394fb9640adb59108413e975a3260ce"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"3769cbd46a466ada215090fbaa76da2632027f0c","unresolved":false,"context_lines":[{"line_number":16,"context_line":"keystonemiddleware\u003e\u003d4.17.0 # Apache-2.0"},{"line_number":17,"context_line":"netaddr\u003e\u003d0.7.18 # BSD"},{"line_number":18,"context_line":"netifaces\u003e\u003d0.10.4 # MIT"},{"line_number":19,"context_line":"neutron-lib\u003e\u003d1.30.0 # Apache-2.0"},{"line_number":20,"context_line":"python-neutronclient\u003e\u003d6.7.0 # Apache-2.0"},{"line_number":21,"context_line":"tenacity\u003e\u003d4.4.0 # Apache-2.0"},{"line_number":22,"context_line":"SQLAlchemy\u003e\u003d1.2.0 # MIT"}],"source_content_type":"text/plain","patch_set":9,"id":"3fa7e38b_266336ad","line":19,"updated":"2019-12-12 14:15:31.000000000","message":"I did this in separate patch https://review.opendev.org/698662 so it shouldn\u0027t be needed here","commit_id":"fb087ae2946e7e7e4697aceaabed474ba1157013"},{"author":{"_account_id":30695,"name":"Pedro Henrique Pereira Martins","email":"phpm13@gmail.com","username":"pedrohpmartins"},"change_message_id":"7745f29e1dfbb37d024c9ebb327468d0b4d220f3","unresolved":false,"context_lines":[{"line_number":16,"context_line":"keystonemiddleware\u003e\u003d4.17.0 # Apache-2.0"},{"line_number":17,"context_line":"netaddr\u003e\u003d0.7.18 # BSD"},{"line_number":18,"context_line":"netifaces\u003e\u003d0.10.4 # MIT"},{"line_number":19,"context_line":"neutron-lib\u003e\u003d1.30.0 # Apache-2.0"},{"line_number":20,"context_line":"python-neutronclient\u003e\u003d6.7.0 # Apache-2.0"},{"line_number":21,"context_line":"tenacity\u003e\u003d4.4.0 # Apache-2.0"},{"line_number":22,"context_line":"SQLAlchemy\u003e\u003d1.2.0 # MIT"}],"source_content_type":"text/plain","patch_set":9,"id":"3fa7e38b_39ed8223","line":19,"in_reply_to":"3fa7e38b_266336ad","updated":"2019-12-16 11:42:56.000000000","message":"Nice!\n\nI will do the rebase as soon as it is merged.\n\nThanks.","commit_id":"fb087ae2946e7e7e4697aceaabed474ba1157013"}]}
