)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"28e988da365b1bc9a79f125eb26ea81f8cdb5c28","unresolved":false,"context_lines":[{"line_number":13,"context_line":"to fit the needs of QinQ segments."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"TODO:"},{"line_number":16,"context_line":" * need to fix unit tests"},{"line_number":17,"context_line":" * normalize segments table?"},{"line_number":18,"context_line":"     - create something like SegmentVlanMapping"},{"line_number":19,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"3a1ff146_5ab62cdd","line":16,"updated":"2017-03-15 16:33:19.000000000","message":"add alembic script","commit_id":"78b841a3b67bcee6a384ade100f484b11cd9e010"},{"author":{"_account_id":6854,"name":"YAMAMOTO Takashi","email":"yamamoto@midokura.com","username":"yamamoto"},"change_message_id":"166ebb9e550613d96eaff6e094ee2d08648a52a5","unresolved":false,"context_lines":[{"line_number":20,"context_line":"A user can confgiure the network with the following format:"},{"line_number":21,"context_line":"    \u003cphysical_network\u003e:\u003cs_tag\u003e:\u003cc_tag_min\u003e:\u003cc_tag_max\u003e"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"Partial-Bug: #1604222"},{"line_number":24,"context_line":"Change-Id: I46c74dcc0d18d9a6cde930c1f3e2408c0c699557"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":34,"id":"df140735_bb4885b2","line":23,"range":{"start_line":23,"start_character":0,"end_line":23,"end_character":21},"updated":"2017-06-06 09:51:42.000000000","message":"i don\u0027t understand why you need a separate type driver for vlan-transparent. can you explain?","commit_id":"a24d3d356b62e0553f1e29b36a6b664fc4720d5b"},{"author":{"_account_id":6558,"name":"Sukhdev Kapur","email":"sukhdevkapur@gmail.com","username":"sukhdev-8"},"change_message_id":"0c48d05d92a85452d18397603c3cfc93b4b8515a","unresolved":false,"context_lines":[{"line_number":20,"context_line":"A user can confgiure the network with the following format:"},{"line_number":21,"context_line":"    \u003cphysical_network\u003e:\u003cs_tag\u003e:\u003cc_tag_min\u003e:\u003cc_tag_max\u003e"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"Partial-Bug: #1604222"},{"line_number":24,"context_line":"Change-Id: I46c74dcc0d18d9a6cde930c1f3e2408c0c699557"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":34,"id":"7f231b9d_6023bebe","line":23,"range":{"start_line":23,"start_character":0,"end_line":23,"end_character":21},"in_reply_to":"df140735_47728c7e","updated":"2017-06-14 16:30:00.000000000","message":"Correct, depending upon the driver implementation, there may or may not be an issue. But, I think this is being solved in a more generic fashion so that the drivers do not have to implement some of this in the back-ends and will present the uniform approach, make sense?\nSo, basically, there are two ways to go by: \n1) Leave as-is and let the back-ends deal with it\n2) Solve it in a more generic way and make it available to everybody. \n\nI think this patch is attempting to do 2)","commit_id":"a24d3d356b62e0553f1e29b36a6b664fc4720d5b"},{"author":{"_account_id":6854,"name":"YAMAMOTO Takashi","email":"yamamoto@midokura.com","username":"yamamoto"},"change_message_id":"f570d45df6d2c3b1ddf98698820d4d4aba17ff22","unresolved":false,"context_lines":[{"line_number":20,"context_line":"A user can confgiure the network with the following format:"},{"line_number":21,"context_line":"    \u003cphysical_network\u003e:\u003cs_tag\u003e:\u003cc_tag_min\u003e:\u003cc_tag_max\u003e"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"Partial-Bug: #1604222"},{"line_number":24,"context_line":"Change-Id: I46c74dcc0d18d9a6cde930c1f3e2408c0c699557"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":34,"id":"df140735_47728c7e","line":23,"range":{"start_line":23,"start_character":0,"end_line":23,"end_character":21},"in_reply_to":"df140735_88d0bf55","updated":"2017-06-07 02:59:53.000000000","message":"i thought it was just about the conflict between ovs-agent\u0027s \"internal vlan\" vs VM-managed vlans.\ndifferent plugins might or might not have the issue, depending on how they implement tenant isolation.\nthe main point of vlan-transparent thing was to expose the behaviour difference via the api.\nmaybe i\u0027m missing something?","commit_id":"a24d3d356b62e0553f1e29b36a6b664fc4720d5b"},{"author":{"_account_id":20378,"name":"Trevor McCasland","email":"TM2086@att.com","username":"twm2016"},"change_message_id":"a7343f47b051ac88a8825e25048aae318c98a73d","unresolved":false,"context_lines":[{"line_number":20,"context_line":"A user can confgiure the network with the following format:"},{"line_number":21,"context_line":"    \u003cphysical_network\u003e:\u003cs_tag\u003e:\u003cc_tag_min\u003e:\u003cc_tag_max\u003e"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"Partial-Bug: #1604222"},{"line_number":24,"context_line":"Change-Id: I46c74dcc0d18d9a6cde930c1f3e2408c0c699557"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":34,"id":"df140735_88d0bf55","line":23,"range":{"start_line":23,"start_character":0,"end_line":23,"end_character":21},"in_reply_to":"df140735_bb4885b2","updated":"2017-06-06 19:16:44.000000000","message":"Sean Collins made this suggestion. I don\u0027t understand vlan-transparency that well. Perhaps the commit message was misleading for him.. see comment on patch set 2 https://review.openstack.org/#/c/342755/ \n\nAlthough, I do understand from the bug we can overwrite some existing properties to use the work the ovs community has been doing with respect to QinQ networks.\n\nIf you do not understand why this is needed... you must see a way without this driver, can you put your thoughts here for me? I think the type driver will help expand QinQ into other areas that are not working with OVS like SR-IOV and linuxbridge maybe?","commit_id":"a24d3d356b62e0553f1e29b36a6b664fc4720d5b"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"49b7f7cf5695ef8620a712bdc9d4d32e2d4d755d","unresolved":false,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"NOTE: This patch depends on a refactor so if you can\u0027t find"},{"line_number":10,"context_line":"a function definition, check the depends-on link here:"},{"line_number":11,"context_line":"    Ice309b12ce2693627d8c9d69265fddf195c51161"},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"This patch aims to add a QinQ network type driver by adding an"},{"line_number":14,"context_line":"allocation table for QinQ."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":51,"id":"bf3e73b7_45ae1ee8","line":11,"updated":"2017-08-06 18:22:34.000000000","message":"If it depends on other patch You should probably add it at the end of commit message as:\n\"Depends-On: Ice309b12ce2693627d8c9d69265fddf195c51161\"","commit_id":"08252615bf87769809e08843878edf1962d08b9b"}],"neutron/common/exceptions.py":[{"author":{"_account_id":6558,"name":"Sukhdev Kapur","email":"sukhdevkapur@gmail.com","username":"sukhdev-8"},"change_message_id":"14566cae07b7c98e68b53e3f30eb31b8eba39c09","unresolved":false,"context_lines":[{"line_number":340,"context_line":"                \"physical network %(physical_network)s for use.\")"},{"line_number":341,"context_line":""},{"line_number":342,"context_line":""},{"line_number":343,"context_line":"class QinqRangeError(e.NeutronException):"},{"line_number":344,"context_line":"    message \u003d _(\"Invalid network QinQ range: \u0027%(s_tag_range)s\u0027 - \u0027%(error)s\u0027.\")"},{"line_number":345,"context_line":""},{"line_number":346,"context_line":"    def __init__(self, **kwargs):"}],"source_content_type":"text/x-python","patch_set":12,"id":"dfeb2761_f202fb6e","line":343,"updated":"2017-04-05 04:15:17.000000000","message":"QinQRangeError","commit_id":"d971f972fb98cbb72bf81455ecd85bab5cd24b9b"},{"author":{"_account_id":6558,"name":"Sukhdev Kapur","email":"sukhdevkapur@gmail.com","username":"sukhdev-8"},"change_message_id":"14566cae07b7c98e68b53e3f30eb31b8eba39c09","unresolved":false,"context_lines":[{"line_number":347,"context_line":"        # Convert s_tag_range tuple to \u0027start:end\u0027 format for display"},{"line_number":348,"context_line":"        if isinstance(kwargs[\u0027s_tag_range\u0027], tuple):"},{"line_number":349,"context_line":"            kwargs[\u0027s_tag_range\u0027] \u003d \"%s:%d:%d:%d\" % kwargs[\u0027s_tag_range\u0027]"},{"line_number":350,"context_line":"        super(QinqRangeError, self).__init__(**kwargs)"}],"source_content_type":"text/x-python","patch_set":12,"id":"dfeb2761_522d27fc","line":350,"range":{"start_line":350,"start_character":14,"end_line":350,"end_character":19},"updated":"2017-04-05 04:15:17.000000000","message":"ditto","commit_id":"d971f972fb98cbb72bf81455ecd85bab5cd24b9b"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"622a4b240784632fcfb609953d404406ffd6c001","unresolved":false,"context_lines":[{"line_number":340,"context_line":""},{"line_number":341,"context_line":"class StagInUse(e.InUse):"},{"line_number":342,"context_line":"    message \u003d _(\"Unable to create the network. The \""},{"line_number":343,"context_line":"                \"s-tag %(s_tag)s has no c-tags availabe on \""},{"line_number":344,"context_line":"                \"physical network %(physical_network)s for use.\")"},{"line_number":345,"context_line":""},{"line_number":346,"context_line":""}],"source_content_type":"text/x-python","patch_set":20,"id":"5ff73747_0fef35e9","line":343,"range":{"start_line":343,"start_character":47,"end_line":343,"end_character":55},"updated":"2017-05-01 08:09:40.000000000","message":"typo - available","commit_id":"d8f55197538fb70e90a8c3386e14e542b91ebaa0"}],"neutron/conf/plugins/ml2/drivers/driver_type.py":[{"author":{"_account_id":7787,"name":"Kevin Benton","email":"kevin@benton.pub","username":"blak111"},"change_message_id":"48bd4c981b54ce8a216f1b53619738c4022f2184","unresolved":false,"context_lines":[{"line_number":80,"context_line":"qinq_opts \u003d ["},{"line_number":81,"context_line":"    cfg.ListOpt(\u0027network_qinq_ranges\u0027,"},{"line_number":82,"context_line":"                default\u003d[],"},{"line_number":83,"context_line":"                help\u003d_(\"List of \u003cphysical_network\u003e:\u003cs_tag\u003e:\u003cc_tag_min\u003e:\""},{"line_number":84,"context_line":"                       \"\u003cc_tag_max\u003e or \u003cphysical_network\u003e specifying \""},{"line_number":85,"context_line":"                       \"physical_network names usable for QinQ provider and \""},{"line_number":86,"context_line":"                       \"tenant networks, as well as ranges of tags on each \""}],"source_content_type":"text/x-python","patch_set":14,"id":"7ffa3b31_2bf06567","line":83,"updated":"2017-04-16 03:00:24.000000000","message":"users might not be familiar with which one \u0027s\u0027 is and which one \u0027c\u0027 is. Please define the difference between the two in the help here.","commit_id":"b9db76b5672c8db392c725bcf43878051ab00227"},{"author":{"_account_id":20378,"name":"Trevor McCasland","email":"TM2086@att.com","username":"twm2016"},"change_message_id":"468d83af982e39f5e3018690eacb9075aa38464f","unresolved":false,"context_lines":[{"line_number":80,"context_line":"qinq_opts \u003d ["},{"line_number":81,"context_line":"    cfg.ListOpt(\u0027network_qinq_ranges\u0027,"},{"line_number":82,"context_line":"                default\u003d[],"},{"line_number":83,"context_line":"                help\u003d_(\"List of \u003cphysical_network\u003e:\u003cs_tag\u003e:\u003cc_tag_min\u003e:\""},{"line_number":84,"context_line":"                       \"\u003cc_tag_max\u003e or \u003cphysical_network\u003e specifying \""},{"line_number":85,"context_line":"                       \"physical_network names usable for QinQ provider and \""},{"line_number":86,"context_line":"                       \"tenant networks, as well as ranges of tags on each \""}],"source_content_type":"text/x-python","patch_set":14,"id":"7ffa3b31_690635d1","line":83,"in_reply_to":"7ffa3b31_2bf06567","updated":"2017-04-19 16:16:34.000000000","message":"Done","commit_id":"b9db76b5672c8db392c725bcf43878051ab00227"}],"neutron/db/migration/alembic_migrations/versions/pike/expand/505fcaa6a8d1_add_qinqallocations_table_and_add_vlan_.py":[{"author":{"_account_id":7249,"name":"Ann Taraday","email":"akamyshnikova@mirantis.com","username":"AKamyshnikova"},"change_message_id":"aa4724a40708fdef1cfceb1e3512acaaf3f5a96f","unresolved":false,"context_lines":[{"line_number":38,"context_line":"    sa.Column(\u0027qinq_id\u0027, sa.Integer(), autoincrement\u003dFalse, nullable\u003dFalse),"},{"line_number":39,"context_line":"    sa.Column(\u0027allocated\u0027, sa.Boolean(), nullable\u003dFalse),"},{"line_number":40,"context_line":"    sa.PrimaryKeyConstraint(\u0027physical_network\u0027, \u0027vlan_id\u0027, \u0027qinq_id\u0027),"},{"line_number":41,"context_line":"    mysql_engine\u003d\u0027InnoDB\u0027"},{"line_number":42,"context_line":"    )"},{"line_number":43,"context_line":"    op.create_index(\u0027ix_ml2_qinq_allocations_physical_network_vlan_id_allocated\u0027, \u0027ml2_qinq_allocations\u0027, [\u0027physical_network\u0027, \u0027vlan_id\u0027, \u0027allocated\u0027], unique\u003dFalse)"},{"line_number":44,"context_line":"    op.add_column(\u0027networksegments\u0027, sa.Column(\u0027vlan_id\u0027, sa.Integer(), nullable\u003dTrue))"}],"source_content_type":"text/x-python","patch_set":6,"id":"1a1ced50_270752cb","line":41,"range":{"start_line":41,"start_character":4,"end_line":41,"end_character":25},"updated":"2017-03-21 08:46:31.000000000","message":"this is not needed","commit_id":"df22c51089308e0759e251be46cfb06938e023bb"},{"author":{"_account_id":7249,"name":"Ann Taraday","email":"akamyshnikova@mirantis.com","username":"AKamyshnikova"},"change_message_id":"aa4724a40708fdef1cfceb1e3512acaaf3f5a96f","unresolved":false,"context_lines":[{"line_number":41,"context_line":"    mysql_engine\u003d\u0027InnoDB\u0027"},{"line_number":42,"context_line":"    )"},{"line_number":43,"context_line":"    op.create_index(\u0027ix_ml2_qinq_allocations_physical_network_vlan_id_allocated\u0027, \u0027ml2_qinq_allocations\u0027, [\u0027physical_network\u0027, \u0027vlan_id\u0027, \u0027allocated\u0027], unique\u003dFalse)"},{"line_number":44,"context_line":"    op.add_column(\u0027networksegments\u0027, sa.Column(\u0027vlan_id\u0027, sa.Integer(), nullable\u003dTrue))"},{"line_number":45,"context_line":"    # ### end Alembic commands ###"}],"source_content_type":"text/x-python","patch_set":6,"id":"1a1ced50_47a8ce8d","line":44,"range":{"start_line":44,"start_character":4,"end_line":44,"end_character":87},"updated":"2017-03-21 08:46:31.000000000","message":"you need to add depends_on with number of revision that creates networksegments table, like it was done https://github.com/openstack/neutron/blob/49d614895f44c44f9e1735210498facf1886c404/neutron/db/migration/alembic_migrations/versions/newton/contract/97c25b0d2353_add_name_desc.py#L21","commit_id":"df22c51089308e0759e251be46cfb06938e023bb"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"f6096f9d10bc2b292d6b7b78669502a3e3aa63bc","unresolved":false,"context_lines":[{"line_number":33,"context_line":"def upgrade():"},{"line_number":34,"context_line":"    op.create_table(\u0027ml2_qinq_allocations\u0027,"},{"line_number":35,"context_line":"        sa.Column(\u0027physical_network\u0027, sa.String(length\u003d64), nullable\u003dFalse),"},{"line_number":36,"context_line":"        sa.Column(\u0027vlan_id\u0027, sa.Integer(), autoincrement\u003dFalse,"},{"line_number":37,"context_line":"                  nullable\u003dFalse),"},{"line_number":38,"context_line":"        sa.Column(\u0027qinq_id\u0027, sa.Integer(), autoincrement\u003dFalse,"},{"line_number":39,"context_line":"                  nullable\u003dFalse),"},{"line_number":40,"context_line":"        sa.Column(\u0027allocated\u0027, sa.Boolean(), nullable\u003dFalse),"},{"line_number":41,"context_line":"        sa.PrimaryKeyConstraint(\u0027physical_network\u0027, \u0027vlan_id\u0027, \u0027qinq_id\u0027)"},{"line_number":42,"context_line":"    )"}],"source_content_type":"text/x-python","patch_set":8,"id":"1a1ced50_e30fc936","line":39,"range":{"start_line":36,"start_character":6,"end_line":39,"end_character":34},"updated":"2017-03-21 23:01:38.000000000","message":"it would likely be better to use s_tag and c_tag insted of vlan_id and qinq_id for example which on is the inner or outer tag?","commit_id":"6bf88ad1c705fc939f31ddff28fee9322036f89e"},{"author":{"_account_id":20378,"name":"Trevor McCasland","email":"TM2086@att.com","username":"twm2016"},"change_message_id":"cdda1e3dcee4047dfee7f762ef0c5d7d2c99c6ec","unresolved":false,"context_lines":[{"line_number":33,"context_line":"def upgrade():"},{"line_number":34,"context_line":"    op.create_table(\u0027ml2_qinq_allocations\u0027,"},{"line_number":35,"context_line":"        sa.Column(\u0027physical_network\u0027, sa.String(length\u003d64), nullable\u003dFalse),"},{"line_number":36,"context_line":"        sa.Column(\u0027vlan_id\u0027, sa.Integer(), autoincrement\u003dFalse,"},{"line_number":37,"context_line":"                  nullable\u003dFalse),"},{"line_number":38,"context_line":"        sa.Column(\u0027qinq_id\u0027, sa.Integer(), autoincrement\u003dFalse,"},{"line_number":39,"context_line":"                  nullable\u003dFalse),"},{"line_number":40,"context_line":"        sa.Column(\u0027allocated\u0027, sa.Boolean(), nullable\u003dFalse),"},{"line_number":41,"context_line":"        sa.PrimaryKeyConstraint(\u0027physical_network\u0027, \u0027vlan_id\u0027, \u0027qinq_id\u0027)"},{"line_number":42,"context_line":"    )"}],"source_content_type":"text/x-python","patch_set":8,"id":"1a1ced50_d5ad049c","line":39,"range":{"start_line":36,"start_character":6,"end_line":39,"end_character":34},"in_reply_to":"1a1ced50_e30fc936","updated":"2017-03-22 15:16:20.000000000","message":"I think s_tag and c_tag would be better so I will change it to those.\n\nOh and which id is inside? I thought qinq_id would indicate it was inside a vlan.","commit_id":"6bf88ad1c705fc939f31ddff28fee9322036f89e"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"f6096f9d10bc2b292d6b7b78669502a3e3aa63bc","unresolved":false,"context_lines":[{"line_number":38,"context_line":"        sa.Column(\u0027qinq_id\u0027, sa.Integer(), autoincrement\u003dFalse,"},{"line_number":39,"context_line":"                  nullable\u003dFalse),"},{"line_number":40,"context_line":"        sa.Column(\u0027allocated\u0027, sa.Boolean(), nullable\u003dFalse),"},{"line_number":41,"context_line":"        sa.PrimaryKeyConstraint(\u0027physical_network\u0027, \u0027vlan_id\u0027, \u0027qinq_id\u0027)"},{"line_number":42,"context_line":"    )"},{"line_number":43,"context_line":"    op.create_index("},{"line_number":44,"context_line":"        \u0027ix_ml2_qinq_allocations_physical_network_vlan_id_allocated\u0027,"}],"source_content_type":"text/x-python","patch_set":8,"id":"1a1ced50_d63e098a","line":41,"range":{"start_line":41,"start_character":11,"end_line":41,"end_character":31},"updated":"2017-03-21 23:01:38.000000000","message":"should this not be http://docs.sqlalchemy.org/en/latest/core/constraints.html#unique-constraint\nwith an explicit autoincrement integer id field as a primary key. \n\ne.g.\nsa.Column(\u0027id\u0027, sa.Integer, nullable\u003dFalse, primary_key\u003dTrue,\n          autoincrement\u003dFalse)\nsa.UniqueConstraint(\u0027physical_network\u0027, \u0027vlan_id\u0027, \u0027qinq_id\u0027)\n\nwith the current scema i belive it will have to caluate the primary key/index on every index of the table.\nusing an expcit field to store the primary key will prevent this.","commit_id":"6bf88ad1c705fc939f31ddff28fee9322036f89e"},{"author":{"_account_id":20378,"name":"Trevor McCasland","email":"TM2086@att.com","username":"twm2016"},"change_message_id":"cdda1e3dcee4047dfee7f762ef0c5d7d2c99c6ec","unresolved":false,"context_lines":[{"line_number":38,"context_line":"        sa.Column(\u0027qinq_id\u0027, sa.Integer(), autoincrement\u003dFalse,"},{"line_number":39,"context_line":"                  nullable\u003dFalse),"},{"line_number":40,"context_line":"        sa.Column(\u0027allocated\u0027, sa.Boolean(), nullable\u003dFalse),"},{"line_number":41,"context_line":"        sa.PrimaryKeyConstraint(\u0027physical_network\u0027, \u0027vlan_id\u0027, \u0027qinq_id\u0027)"},{"line_number":42,"context_line":"    )"},{"line_number":43,"context_line":"    op.create_index("},{"line_number":44,"context_line":"        \u0027ix_ml2_qinq_allocations_physical_network_vlan_id_allocated\u0027,"}],"source_content_type":"text/x-python","patch_set":8,"id":"1a1ced50_9550ec33","line":41,"range":{"start_line":41,"start_character":11,"end_line":41,"end_character":31},"in_reply_to":"1a1ced50_d63e098a","updated":"2017-03-22 15:16:20.000000000","message":"that looks better, I\u0027ll try it out but the vlan allocation has the same constraint that\u0027s proposed here minus the qinq_id.","commit_id":"6bf88ad1c705fc939f31ddff28fee9322036f89e"}],"neutron/db/migration/alembic_migrations/versions/pike/expand/7a06f61450d3_add_qinqallocation_table.py":[{"author":{"_account_id":20378,"name":"Trevor McCasland","email":"TM2086@att.com","username":"twm2016"},"change_message_id":"22a24fee3df0905f8a4f6e74b8232531a3147408","unresolved":false,"context_lines":[{"line_number":29,"context_line":"import sqlalchemy as sa"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":""},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"def upgrade():"},{"line_number":34,"context_line":"    op.create_table(\u0027ml2_qinq_allocations\u0027,"},{"line_number":35,"context_line":"        sa.Column(\u0027id\u0027, sa.Integer(), nullable\u003dFalse),"}],"source_content_type":"text/x-python","patch_set":11,"id":"dfeb2761_0530929e","line":32,"updated":"2017-04-04 16:31:49.000000000","message":"fix pep8 error","commit_id":"22cb1228962833e65ab63257da310342d4eaa05c"}],"neutron/db/models/plugins/ml2/qinqallocation.py":[{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"f6096f9d10bc2b292d6b7b78669502a3e3aa63bc","unresolved":false,"context_lines":[{"line_number":37,"context_line":"                 \u0027physical_network\u0027, \u0027vlan_id\u0027, \u0027allocated\u0027),"},{"line_number":38,"context_line":"        model_base.BASEV2.__table_args__,)"},{"line_number":39,"context_line":"    physical_network \u003d sa.Column(sa.String(64), nullable\u003dFalse,"},{"line_number":40,"context_line":"                                 primary_key\u003dTrue)"},{"line_number":41,"context_line":"    vlan_id \u003d sa.Column(sa.Integer, nullable\u003dFalse, primary_key\u003dTrue,"},{"line_number":42,"context_line":"                        autoincrement\u003dFalse)"},{"line_number":43,"context_line":"    qinq_id \u003d sa.Column(sa.Integer, nullable\u003dFalse, primary_key\u003dTrue,"}],"source_content_type":"text/x-python","patch_set":8,"id":"1a1ced50_1697c148","line":40,"range":{"start_line":40,"start_character":33,"end_line":40,"end_character":49},"updated":"2017-03-21 23:01:38.000000000","message":"using a string as part of a primary key will be very slow in comparison to adding an integer field just\nso i would add \n\nid \u003d sa.Column(\u0027id\u0027, sa.Integer, nullable\u003dFalse, primary_key\u003dTrue,\n          autoincrement\u003dFalse).\nphysical_network \u003d sa.Column(sa.String(64), nullable\u003dFalse)\ninstead.\n\nprimary_key should also be removed from the vlan_id and qinq_id also.\n\non that point though i would also suggest changing these to c_tag and s_tag as they are more meaningful name as they also convey which is the inner and outer tag.","commit_id":"6bf88ad1c705fc939f31ddff28fee9322036f89e"},{"author":{"_account_id":20378,"name":"Trevor McCasland","email":"TM2086@att.com","username":"twm2016"},"change_message_id":"cdda1e3dcee4047dfee7f762ef0c5d7d2c99c6ec","unresolved":false,"context_lines":[{"line_number":37,"context_line":"                 \u0027physical_network\u0027, \u0027vlan_id\u0027, \u0027allocated\u0027),"},{"line_number":38,"context_line":"        model_base.BASEV2.__table_args__,)"},{"line_number":39,"context_line":"    physical_network \u003d sa.Column(sa.String(64), nullable\u003dFalse,"},{"line_number":40,"context_line":"                                 primary_key\u003dTrue)"},{"line_number":41,"context_line":"    vlan_id \u003d sa.Column(sa.Integer, nullable\u003dFalse, primary_key\u003dTrue,"},{"line_number":42,"context_line":"                        autoincrement\u003dFalse)"},{"line_number":43,"context_line":"    qinq_id \u003d sa.Column(sa.Integer, nullable\u003dFalse, primary_key\u003dTrue,"}],"source_content_type":"text/x-python","patch_set":8,"id":"1a1ced50_27f8edc2","line":40,"range":{"start_line":40,"start_character":33,"end_line":40,"end_character":49},"in_reply_to":"1a1ced50_1697c148","updated":"2017-03-22 15:16:20.000000000","message":"I was following the vlan allocations schema. I\u0027m going to make these changes but I cannot say if one is better than the other. I thought the index would help with the string as a primary key but I guess this would be better. Here is a post that says it varies. http://stackoverflow.com/questions/332300/is-there-a-real-performance-difference-between-int-and-varchar-primary-keys\n\nre: primary keys, only if the UniqueConstraint is used on the table.\n\nre: c_tag and s_tag, sounds good to me.","commit_id":"6bf88ad1c705fc939f31ddff28fee9322036f89e"},{"author":{"_account_id":7787,"name":"Kevin Benton","email":"kevin@benton.pub","username":"blak111"},"change_message_id":"48bd4c981b54ce8a216f1b53619738c4022f2184","unresolved":false,"context_lines":[{"line_number":22,"context_line":""},{"line_number":23,"context_line":"    If allocated is False, the c_tag on the s_tag is"},{"line_number":24,"context_line":"    available for allocation to a tenant network. If allocated is"},{"line_number":25,"context_line":"    True, the c_tag on the s_tag is in use, either as a"},{"line_number":26,"context_line":"    tenant or provider network."},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"    When an allocation is released, if the c_tag for the"}],"source_content_type":"text/x-python","patch_set":14,"id":"7ffa3b31_6be42dad","line":25,"updated":"2017-04-16 03:00:24.000000000","message":"remove \u0027either as a tenant or provider network\u0027. There isn\u0027t really a difference from an allocation perspective.","commit_id":"b9db76b5672c8db392c725bcf43878051ab00227"},{"author":{"_account_id":20378,"name":"Trevor McCasland","email":"TM2086@att.com","username":"twm2016"},"change_message_id":"468d83af982e39f5e3018690eacb9075aa38464f","unresolved":false,"context_lines":[{"line_number":22,"context_line":""},{"line_number":23,"context_line":"    If allocated is False, the c_tag on the s_tag is"},{"line_number":24,"context_line":"    available for allocation to a tenant network. If allocated is"},{"line_number":25,"context_line":"    True, the c_tag on the s_tag is in use, either as a"},{"line_number":26,"context_line":"    tenant or provider network."},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"    When an allocation is released, if the c_tag for the"}],"source_content_type":"text/x-python","patch_set":14,"id":"7ffa3b31_c96f8990","line":25,"in_reply_to":"7ffa3b31_6be42dad","updated":"2017-04-19 16:16:34.000000000","message":"Done","commit_id":"b9db76b5672c8db392c725bcf43878051ab00227"},{"author":{"_account_id":7787,"name":"Kevin Benton","email":"kevin@benton.pub","username":"blak111"},"change_message_id":"48bd4c981b54ce8a216f1b53619738c4022f2184","unresolved":false,"context_lines":[{"line_number":41,"context_line":"                   autoincrement\u003dTrue)"},{"line_number":42,"context_line":"    physical_network \u003d sa.Column(sa.String(64), nullable\u003dFalse)"},{"line_number":43,"context_line":"    s_tag \u003d sa.Column(sa.Integer, nullable\u003dFalse, autoincrement\u003dFalse)"},{"line_number":44,"context_line":"    c_tag \u003d sa.Column(sa.String(128))"},{"line_number":45,"context_line":"    allocated \u003d sa.Column(sa.Boolean, nullable\u003dFalse)"}],"source_content_type":"text/x-python","patch_set":14,"id":"7ffa3b31_4be1719a","line":44,"updated":"2017-04-16 03:00:24.000000000","message":"Why \u0027string\u0027 for the inner? Isn\u0027t the inner just an integer as well?","commit_id":"b9db76b5672c8db392c725bcf43878051ab00227"},{"author":{"_account_id":20378,"name":"Trevor McCasland","email":"TM2086@att.com","username":"twm2016"},"change_message_id":"468d83af982e39f5e3018690eacb9075aa38464f","unresolved":false,"context_lines":[{"line_number":41,"context_line":"                   autoincrement\u003dTrue)"},{"line_number":42,"context_line":"    physical_network \u003d sa.Column(sa.String(64), nullable\u003dFalse)"},{"line_number":43,"context_line":"    s_tag \u003d sa.Column(sa.Integer, nullable\u003dFalse, autoincrement\u003dFalse)"},{"line_number":44,"context_line":"    c_tag \u003d sa.Column(sa.String(128))"},{"line_number":45,"context_line":"    allocated \u003d sa.Column(sa.Boolean, nullable\u003dFalse)"}],"source_content_type":"text/x-python","patch_set":14,"id":"7ffa3b31_d7a2b19a","line":44,"in_reply_to":"7ffa3b31_4be1719a","updated":"2017-04-19 16:16:34.000000000","message":"We were hoping to put a single c_tag_range in here. \u003cc_tag_min\u003e:\u003cc_tag_max\u003e\n\nThat would be a max of 9 characters, ex 4000-4001. So we can change the string size to 9.","commit_id":"b9db76b5672c8db392c725bcf43878051ab00227"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"04ced8e3de9e554b68da7e9c1e550d7344645500","unresolved":false,"context_lines":[{"line_number":40,"context_line":"                   autoincrement\u003dTrue)"},{"line_number":41,"context_line":"    physical_network \u003d sa.Column(sa.String(64), nullable\u003dFalse)"},{"line_number":42,"context_line":"    s_tag \u003d sa.Column(sa.Integer, nullable\u003dFalse, autoincrement\u003dFalse)"},{"line_number":43,"context_line":"    c_tag \u003d sa.Column(sa.Integer)"},{"line_number":44,"context_line":"    allocated \u003d sa.Column(sa.Boolean, nullable\u003dFalse)"}],"source_content_type":"text/x-python","patch_set":22,"id":"5ff73747_d5176051","line":43,"updated":"2017-05-03 11:20:39.000000000","message":"Shouldn\u0027t be this parameter nullable\u003dFalse?\n\nThis is set in the migration script (https://review.openstack.org/#/c/446047/22/neutron/db/migration/alembic_migrations/versions/pike/expand/35c35f65dfe3_add_qinq_allocation.py)","commit_id":"5296e6799e6738085dd031cb76ae76604edaf5bb"},{"author":{"_account_id":20378,"name":"Trevor McCasland","email":"TM2086@att.com","username":"twm2016"},"change_message_id":"65f8a79308487a0461c54b2f864cf5d652f76343","unresolved":false,"context_lines":[{"line_number":40,"context_line":"                   autoincrement\u003dTrue)"},{"line_number":41,"context_line":"    physical_network \u003d sa.Column(sa.String(64), nullable\u003dFalse)"},{"line_number":42,"context_line":"    s_tag \u003d sa.Column(sa.Integer, nullable\u003dFalse, autoincrement\u003dFalse)"},{"line_number":43,"context_line":"    c_tag \u003d sa.Column(sa.Integer)"},{"line_number":44,"context_line":"    allocated \u003d sa.Column(sa.Boolean, nullable\u003dFalse)"}],"source_content_type":"text/x-python","patch_set":22,"id":"5ff73747_fe2b547f","line":43,"in_reply_to":"5ff73747_d5176051","updated":"2017-05-03 13:57:56.000000000","message":"migration script has nullable\u003dTrue, I can remove it from the script.","commit_id":"5296e6799e6738085dd031cb76ae76604edaf5bb"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"cef8c30af6dcea54f08e832c89e499d2c04598e4","unresolved":false,"context_lines":[{"line_number":40,"context_line":"                   autoincrement\u003dTrue)"},{"line_number":41,"context_line":"    physical_network \u003d sa.Column(sa.String(64), nullable\u003dFalse)"},{"line_number":42,"context_line":"    s_tag \u003d sa.Column(sa.Integer, nullable\u003dFalse, autoincrement\u003dFalse)"},{"line_number":43,"context_line":"    c_tag \u003d sa.Column(sa.Integer)"},{"line_number":44,"context_line":"    allocated \u003d sa.Column(sa.Boolean, nullable\u003dFalse)"}],"source_content_type":"text/x-python","patch_set":22,"id":"5ff73747_b981664d","line":43,"in_reply_to":"5ff73747_fe2b547f","updated":"2017-05-03 14:31:05.000000000","message":"Sorry, maybe I wasn\u0027t very explicit. This column should never be null, should it?\n\nThere should be always a c_tag, so should be nullable\u003dFalse here and in the migraiton script.","commit_id":"5296e6799e6738085dd031cb76ae76604edaf5bb"}],"neutron/db/models/segment.py":[{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"df225a898f00b39e074cc39716577bdd7b74dfef","unresolved":false,"context_lines":[{"line_number":51,"context_line":"                               backref\u003dorm.backref(\"segments\","},{"line_number":52,"context_line":"                                                   lazy\u003d\u0027subquery\u0027,"},{"line_number":53,"context_line":"                                                   cascade\u003d\u0027delete\u0027))"},{"line_number":54,"context_line":"    vlan_id \u003d sa.Column(sa.Integer, nullable\u003dTrue, autoincrement\u003dFalse)"},{"line_number":55,"context_line":"    api_collections \u003d [segment.SEGMENTS]"},{"line_number":56,"context_line":""},{"line_number":57,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"1a1ced50_c334364c","line":54,"range":{"start_line":54,"start_character":51,"end_line":54,"end_character":70},"updated":"2017-03-16 16:42:49.000000000","message":"By default if false, it\u0027s not a primary key","commit_id":"a0084fe550e764e27b1aff98b4d8505c2539c4ab"},{"author":{"_account_id":20378,"name":"Trevor McCasland","email":"TM2086@att.com","username":"twm2016"},"change_message_id":"3aededcfb367e666a5ea35e54ed08d28e580c8d6","unresolved":false,"context_lines":[{"line_number":51,"context_line":"                               backref\u003dorm.backref(\"segments\","},{"line_number":52,"context_line":"                                                   lazy\u003d\u0027subquery\u0027,"},{"line_number":53,"context_line":"                                                   cascade\u003d\u0027delete\u0027))"},{"line_number":54,"context_line":"    vlan_id \u003d sa.Column(sa.Integer, nullable\u003dTrue, autoincrement\u003dFalse)"},{"line_number":55,"context_line":"    api_collections \u003d [segment.SEGMENTS]"},{"line_number":56,"context_line":""},{"line_number":57,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"1a1ced50_a0e2c39d","line":54,"range":{"start_line":54,"start_character":51,"end_line":54,"end_character":70},"in_reply_to":"1a1ced50_c334364c","updated":"2017-03-16 22:09:26.000000000","message":"Done\nI believe vlan_id should not be a primary_key like segmentation_id.","commit_id":"a0084fe550e764e27b1aff98b4d8505c2539c4ab"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"f6096f9d10bc2b292d6b7b78669502a3e3aa63bc","unresolved":false,"context_lines":[{"line_number":51,"context_line":"                               backref\u003dorm.backref(\"segments\","},{"line_number":52,"context_line":"                                                   lazy\u003d\u0027subquery\u0027,"},{"line_number":53,"context_line":"                                                   cascade\u003d\u0027delete\u0027))"},{"line_number":54,"context_line":"    vlan_id \u003d sa.Column(sa.Integer, nullable\u003dTrue)"},{"line_number":55,"context_line":"    api_collections \u003d [segment.SEGMENTS]"},{"line_number":56,"context_line":""},{"line_number":57,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"1a1ced50_36d03df6","line":54,"range":{"start_line":54,"start_character":4,"end_line":54,"end_character":50},"updated":"2017-03-21 23:01:38.000000000","message":"im not sure why you would add this here?\n\ni dont see a clear reason to assocate a vlan id with a l2 segmnet. what is the usecase for having different vlan ids on the phyical wire for different segments in the same neutron network? if there is a use case for this i think it should be part of a different patch as it is not related to qinq it is equally applicable to vlan provider networks.","commit_id":"6bf88ad1c705fc939f31ddff28fee9322036f89e"},{"author":{"_account_id":20378,"name":"Trevor McCasland","email":"TM2086@att.com","username":"twm2016"},"change_message_id":"cdda1e3dcee4047dfee7f762ef0c5d7d2c99c6ec","unresolved":false,"context_lines":[{"line_number":51,"context_line":"                               backref\u003dorm.backref(\"segments\","},{"line_number":52,"context_line":"                                                   lazy\u003d\u0027subquery\u0027,"},{"line_number":53,"context_line":"                                                   cascade\u003d\u0027delete\u0027))"},{"line_number":54,"context_line":"    vlan_id \u003d sa.Column(sa.Integer, nullable\u003dTrue)"},{"line_number":55,"context_line":"    api_collections \u003d [segment.SEGMENTS]"},{"line_number":56,"context_line":""},{"line_number":57,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"1a1ced50_a7bcddbb","line":54,"range":{"start_line":54,"start_character":4,"end_line":54,"end_character":50},"in_reply_to":"1a1ced50_36d03df6","updated":"2017-03-22 15:16:20.000000000","message":"How do you know which network segment to release? https://review.openstack.org/#/c/446047/8/neutron/plugins/ml2/drivers/type_qinq.py@276","commit_id":"6bf88ad1c705fc939f31ddff28fee9322036f89e"}],"neutron/plugins/ml2/drivers/type_qinq.py":[{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"df225a898f00b39e074cc39716577bdd7b74dfef","unresolved":false,"context_lines":[{"line_number":180,"context_line":"                msg \u003d (_(\"physical_network \u0027%s\u0027 unknown \""},{"line_number":181,"context_line":"                         \"for QinQ provider network\") % physical_network)"},{"line_number":182,"context_line":"                raise exc.InvalidInput(error_message\u003dmsg)"},{"line_number":183,"context_line":""},{"line_number":184,"context_line":"        tags \u003d [vlan_id, segmentation_id]"},{"line_number":185,"context_line":"        for tag in tags:"},{"line_number":186,"context_line":"            if not plugin_utils.is_valid_vlan_tag(tag):"}],"source_content_type":"text/x-python","patch_set":3,"id":"1a1ced50_632c62ac","line":183,"updated":"2017-03-16 16:42:49.000000000","message":"What happend if there is no \"physical_network\"? There should be an error?","commit_id":"a0084fe550e764e27b1aff98b4d8505c2539c4ab"},{"author":{"_account_id":20378,"name":"Trevor McCasland","email":"TM2086@att.com","username":"twm2016"},"change_message_id":"3aededcfb367e666a5ea35e54ed08d28e580c8d6","unresolved":false,"context_lines":[{"line_number":180,"context_line":"                msg \u003d (_(\"physical_network \u0027%s\u0027 unknown \""},{"line_number":181,"context_line":"                         \"for QinQ provider network\") % physical_network)"},{"line_number":182,"context_line":"                raise exc.InvalidInput(error_message\u003dmsg)"},{"line_number":183,"context_line":""},{"line_number":184,"context_line":"        tags \u003d [vlan_id, segmentation_id]"},{"line_number":185,"context_line":"        for tag in tags:"},{"line_number":186,"context_line":"            if not plugin_utils.is_valid_vlan_tag(tag):"}],"source_content_type":"text/x-python","patch_set":3,"id":"1a1ced50_fb1f0a59","line":183,"in_reply_to":"1a1ced50_632c62ac","updated":"2017-03-16 22:09:26.000000000","message":"Physical network is not required. There is a test that checks this: test_validate_provider_segment_without_physical_network","commit_id":"a0084fe550e764e27b1aff98b4d8505c2539c4ab"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"df225a898f00b39e074cc39716577bdd7b74dfef","unresolved":false,"context_lines":[{"line_number":188,"context_line":"                         \"%(max)s)\") %"},{"line_number":189,"context_line":"                       {\u0027min\u0027: p_const.MIN_VLAN_TAG,"},{"line_number":190,"context_line":"                        \u0027max\u0027: p_const.MAX_VLAN_TAG,"},{"line_number":191,"context_line":"                        \u0027tag\u0027: tag})"},{"line_number":192,"context_line":"                raise exc.InvalidInput(error_message\u003dmsg)"},{"line_number":193,"context_line":""},{"line_number":194,"context_line":"        for key, value in segment.items():"}],"source_content_type":"text/x-python","patch_set":3,"id":"1a1ced50_a68ca836","line":191,"range":{"start_line":191,"start_character":25,"end_line":191,"end_character":34},"updated":"2017-03-16 16:42:49.000000000","message":"Should you inform which tag is wrong (vlan, segmentation)?","commit_id":"a0084fe550e764e27b1aff98b4d8505c2539c4ab"},{"author":{"_account_id":20378,"name":"Trevor McCasland","email":"TM2086@att.com","username":"twm2016"},"change_message_id":"3aededcfb367e666a5ea35e54ed08d28e580c8d6","unresolved":false,"context_lines":[{"line_number":188,"context_line":"                         \"%(max)s)\") %"},{"line_number":189,"context_line":"                       {\u0027min\u0027: p_const.MIN_VLAN_TAG,"},{"line_number":190,"context_line":"                        \u0027max\u0027: p_const.MAX_VLAN_TAG,"},{"line_number":191,"context_line":"                        \u0027tag\u0027: tag})"},{"line_number":192,"context_line":"                raise exc.InvalidInput(error_message\u003dmsg)"},{"line_number":193,"context_line":""},{"line_number":194,"context_line":"        for key, value in segment.items():"}],"source_content_type":"text/x-python","patch_set":3,"id":"1a1ced50_c0625f16","line":191,"range":{"start_line":191,"start_character":25,"end_line":191,"end_character":34},"in_reply_to":"1a1ced50_a68ca836","updated":"2017-03-16 22:09:26.000000000","message":"Done","commit_id":"a0084fe550e764e27b1aff98b4d8505c2539c4ab"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"df225a898f00b39e074cc39716577bdd7b74dfef","unresolved":false,"context_lines":[{"line_number":220,"context_line":"            alloc \u003d self.allocate_fully_specified_segment("},{"line_number":221,"context_line":"                context, **filters)"},{"line_number":222,"context_line":"            if not alloc:"},{"line_number":223,"context_line":"                raise exc.VlanIdInUse(**filters)"},{"line_number":224,"context_line":""},{"line_number":225,"context_line":"    def allocate_tenant_segment(self, context):"},{"line_number":226,"context_line":"        alloc \u003d self.allocate_partially_specified_segment(context)"}],"source_content_type":"text/x-python","patch_set":3,"id":"1a1ced50_e972f1ac","line":223,"range":{"start_line":223,"start_character":26,"end_line":223,"end_character":37},"updated":"2017-03-16 16:42:49.000000000","message":"Maybe you should create another exception type, this one is for VLAN type networks.","commit_id":"a0084fe550e764e27b1aff98b4d8505c2539c4ab"},{"author":{"_account_id":20378,"name":"Trevor McCasland","email":"TM2086@att.com","username":"twm2016"},"change_message_id":"3aededcfb367e666a5ea35e54ed08d28e580c8d6","unresolved":false,"context_lines":[{"line_number":220,"context_line":"            alloc \u003d self.allocate_fully_specified_segment("},{"line_number":221,"context_line":"                context, **filters)"},{"line_number":222,"context_line":"            if not alloc:"},{"line_number":223,"context_line":"                raise exc.VlanIdInUse(**filters)"},{"line_number":224,"context_line":""},{"line_number":225,"context_line":"    def allocate_tenant_segment(self, context):"},{"line_number":226,"context_line":"        alloc \u003d self.allocate_partially_specified_segment(context)"}],"source_content_type":"text/x-python","patch_set":3,"id":"1a1ced50_db516e10","line":223,"range":{"start_line":223,"start_character":26,"end_line":223,"end_character":37},"in_reply_to":"1a1ced50_e972f1ac","updated":"2017-03-16 22:09:26.000000000","message":"Yes, once I create configurable qinqs I can test this more simply.","commit_id":"a0084fe550e764e27b1aff98b4d8505c2539c4ab"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"df225a898f00b39e074cc39716577bdd7b74dfef","unresolved":false,"context_lines":[{"line_number":236,"context_line":"        physical_network \u003d segment[api.PHYSICAL_NETWORK]"},{"line_number":237,"context_line":"        vlan_id \u003d segment[api.SEGMENTATION_ID]"},{"line_number":238,"context_line":"        qinq_id \u003d segment[api.VLAN_ID]"},{"line_number":239,"context_line":"        ranges \u003d self.network_vlan_ranges.get(physical_network, [])"},{"line_number":240,"context_line":"        inside \u003d any(lo \u003c\u003d vlan_id \u003c\u003d hi and"},{"line_number":241,"context_line":"                     lo \u003c\u003d qinq_id \u003c\u003d hi for lo, hi in ranges)"},{"line_number":242,"context_line":"        with context.session.begin(subtransactions\u003dTrue):"}],"source_content_type":"text/x-python","patch_set":3,"id":"1a1ced50_2948892d","line":239,"range":{"start_line":239,"start_character":8,"end_line":239,"end_character":67},"updated":"2017-03-16 16:42:49.000000000","message":"Should be (maybe) a qinq vlan range config option? Just a question","commit_id":"a0084fe550e764e27b1aff98b4d8505c2539c4ab"},{"author":{"_account_id":20378,"name":"Trevor McCasland","email":"TM2086@att.com","username":"twm2016"},"change_message_id":"3aededcfb367e666a5ea35e54ed08d28e580c8d6","unresolved":false,"context_lines":[{"line_number":236,"context_line":"        physical_network \u003d segment[api.PHYSICAL_NETWORK]"},{"line_number":237,"context_line":"        vlan_id \u003d segment[api.SEGMENTATION_ID]"},{"line_number":238,"context_line":"        qinq_id \u003d segment[api.VLAN_ID]"},{"line_number":239,"context_line":"        ranges \u003d self.network_vlan_ranges.get(physical_network, [])"},{"line_number":240,"context_line":"        inside \u003d any(lo \u003c\u003d vlan_id \u003c\u003d hi and"},{"line_number":241,"context_line":"                     lo \u003c\u003d qinq_id \u003c\u003d hi for lo, hi in ranges)"},{"line_number":242,"context_line":"        with context.session.begin(subtransactions\u003dTrue):"}],"source_content_type":"text/x-python","patch_set":3,"id":"1a1ced50_7b4b1a5a","line":239,"range":{"start_line":239,"start_character":8,"end_line":239,"end_character":67},"in_reply_to":"1a1ced50_2948892d","updated":"2017-03-16 22:09:26.000000000","message":"I think so, I wanted to start simple. I\u0027ll be adding it soon. I put little comments about this in the code. I added it to the TODO","commit_id":"a0084fe550e764e27b1aff98b4d8505c2539c4ab"},{"author":{"_account_id":20378,"name":"Trevor McCasland","email":"TM2086@att.com","username":"twm2016"},"change_message_id":"22a24fee3df0905f8a4f6e74b8232531a3147408","unresolved":false,"context_lines":[{"line_number":233,"context_line":"        s_tag \u003d segment[api.SEGMENTATION_ID]"},{"line_number":234,"context_line":""},{"line_number":235,"context_line":"        qinq \u003d self.qinq_ranges.get(physical_network, {})"},{"line_number":236,"context_line":"        inside \u003d any(tag \u003d\u003d s_tag for tag in qinq)"},{"line_number":237,"context_line":""},{"line_number":238,"context_line":"        with context.session.begin(subtransactions\u003dTrue):"},{"line_number":239,"context_line":"            query \u003d (context.session.query(qinqallocation.QinqAllocation)."}],"source_content_type":"text/x-python","patch_set":11,"id":"dfeb2761_0d7fb067","line":236,"range":{"start_line":236,"start_character":8,"end_line":236,"end_character":50},"updated":"2017-04-04 16:31:49.000000000","message":"this can be replaced with ... inside \u003d (s_tag in qinq)","commit_id":"22cb1228962833e65ab63257da310342d4eaa05c"},{"author":{"_account_id":7787,"name":"Kevin Benton","email":"kevin@benton.pub","username":"blak111"},"change_message_id":"48bd4c981b54ce8a216f1b53619738c4022f2184","unresolved":false,"context_lines":[{"line_number":58,"context_line":"        LOG.info(_LI(\"Network QinQ ranges: %s\"), qinq_ranges)"},{"line_number":59,"context_line":"        return qinq_ranges"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"    def _parse_qinq_range(self, tag_ranges):"},{"line_number":62,"context_line":"        entry \u003d tag_ranges.strip()"},{"line_number":63,"context_line":"        if \u0027:\u0027 in entry:"},{"line_number":64,"context_line":"            if entry.count(\u0027:\u0027) !\u003d 3:"}],"source_content_type":"text/x-python","patch_set":14,"id":"7ffa3b31_abda35e6","line":61,"updated":"2017-04-16 03:00:24.000000000","message":"can you alter this to just return \u0027network, outertag, inner_min, inner_max\u0027 so we don\u0027t have to know index numbers in the \u0027vals\u0027 return?","commit_id":"b9db76b5672c8db392c725bcf43878051ab00227"},{"author":{"_account_id":7787,"name":"Kevin Benton","email":"kevin@benton.pub","username":"blak111"},"change_message_id":"48bd4c981b54ce8a216f1b53619738c4022f2184","unresolved":false,"context_lines":[{"line_number":90,"context_line":"        ctx \u003d context.get_admin_context()"},{"line_number":91,"context_line":"        with db_api.context_manager.writer.using(ctx):"},{"line_number":92,"context_line":"            # get existing allocations for all physical networks"},{"line_number":93,"context_line":"            allocations \u003d dict()"},{"line_number":94,"context_line":"            allocs \u003d ctx.session.query(qinqallocation.QinQAllocation)"},{"line_number":95,"context_line":"            for alloc in allocs:"},{"line_number":96,"context_line":"                if alloc.physical_network not in allocations:"}],"source_content_type":"text/x-python","patch_set":14,"id":"7ffa3b31_8bd779c0","line":93,"updated":"2017-04-16 03:00:24.000000000","message":"how much of this is a duplicate of the vlan sync logic. Is there a way to re-use that code rather than duping?","commit_id":"b9db76b5672c8db392c725bcf43878051ab00227"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"00d7df3659d8c0361c0f56027350a847b2ba4186","unresolved":false,"context_lines":[{"line_number":39,"context_line":""},{"line_number":40,"context_line":"    def __init__(self):"},{"line_number":41,"context_line":"        super(QinQTypeDriver, self).__init__(qinqallocation.QinQAllocation)"},{"line_number":42,"context_line":"        opts \u003d cfg.CONF.ml2_type_qinq.network_qinq_ranges"},{"line_number":43,"context_line":"        self.qinq_ranges \u003d self._parse_qinq_ranges(opts)"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"    def _parse_qinq_ranges(self, opts):"}],"source_content_type":"text/x-python","patch_set":18,"id":"7ffa3b31_f4164e49","line":42,"updated":"2017-04-20 21:01:08.000000000","message":"nit: is this variable \"opts\" really needed?","commit_id":"3fd8e5cab8afb7e37786a5b171ebbaf76d320cdc"},{"author":{"_account_id":20378,"name":"Trevor McCasland","email":"TM2086@att.com","username":"twm2016"},"change_message_id":"ccc6caf337a607fe193e7059e650e1a962da77af","unresolved":false,"context_lines":[{"line_number":39,"context_line":""},{"line_number":40,"context_line":"    def __init__(self):"},{"line_number":41,"context_line":"        super(QinQTypeDriver, self).__init__(qinqallocation.QinQAllocation)"},{"line_number":42,"context_line":"        opts \u003d cfg.CONF.ml2_type_qinq.network_qinq_ranges"},{"line_number":43,"context_line":"        self.qinq_ranges \u003d self._parse_qinq_ranges(opts)"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"    def _parse_qinq_ranges(self, opts):"}],"source_content_type":"text/x-python","patch_set":18,"id":"7ffa3b31_5ad86fed","line":42,"in_reply_to":"7ffa3b31_f4164e49","updated":"2017-04-21 20:37:13.000000000","message":"Done","commit_id":"3fd8e5cab8afb7e37786a5b171ebbaf76d320cdc"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"00d7df3659d8c0361c0f56027350a847b2ba4186","unresolved":false,"context_lines":[{"line_number":52,"context_line":"                    qinq_ranges[network] \u003d {}"},{"line_number":53,"context_line":"                if outertag:"},{"line_number":54,"context_line":"                    qinq_ranges[network][outertag] \u003d (inner_min, inner_max)"},{"line_number":55,"context_line":"        except Exception:"},{"line_number":56,"context_line":"            LOG.exception(_LE(\"Failed to parse network_qinq_ranges. \""},{"line_number":57,"context_line":"                              \"Service terminated!\"))"},{"line_number":58,"context_line":"            sys.exit(1)"}],"source_content_type":"text/x-python","patch_set":18,"id":"7ffa3b31_34add6e8","line":55,"updated":"2017-04-20 21:01:08.000000000","message":"in L68 You are raising exception with proper reason of failure but here You catch it and cover by another, very generic exception. Should it be like that?","commit_id":"3fd8e5cab8afb7e37786a5b171ebbaf76d320cdc"},{"author":{"_account_id":20378,"name":"Trevor McCasland","email":"TM2086@att.com","username":"twm2016"},"change_message_id":"ccc6caf337a607fe193e7059e650e1a962da77af","unresolved":false,"context_lines":[{"line_number":52,"context_line":"                    qinq_ranges[network] \u003d {}"},{"line_number":53,"context_line":"                if outertag:"},{"line_number":54,"context_line":"                    qinq_ranges[network][outertag] \u003d (inner_min, inner_max)"},{"line_number":55,"context_line":"        except Exception:"},{"line_number":56,"context_line":"            LOG.exception(_LE(\"Failed to parse network_qinq_ranges. \""},{"line_number":57,"context_line":"                              \"Service terminated!\"))"},{"line_number":58,"context_line":"            sys.exit(1)"}],"source_content_type":"text/x-python","patch_set":18,"id":"7ffa3b31_faf29b6f","line":55,"in_reply_to":"7ffa3b31_34add6e8","updated":"2017-04-21 20:37:13.000000000","message":"Done","commit_id":"3fd8e5cab8afb7e37786a5b171ebbaf76d320cdc"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"00d7df3659d8c0361c0f56027350a847b2ba4186","unresolved":false,"context_lines":[{"line_number":61,"context_line":""},{"line_number":62,"context_line":"    def _parse_qinq_range(self, tag_ranges):"},{"line_number":63,"context_line":"        entry \u003d tag_ranges.strip()"},{"line_number":64,"context_line":"        if \u0027:\u0027 in entry:"},{"line_number":65,"context_line":"            if entry.count(\u0027:\u0027) !\u003d 3:"},{"line_number":66,"context_line":"                raise exceptions.QinQRangeError("},{"line_number":67,"context_line":"                    s_tag_range\u003dentry,"}],"source_content_type":"text/x-python","patch_set":18,"id":"7ffa3b31_74723eaf","line":64,"updated":"2017-04-20 21:01:08.000000000","message":"can\u0027t it be something like:\n\nvals \u003d entry.split(\u0027:\u0027)\nif len(vals) !\u003d 4:\n   raise QinQRangeError()","commit_id":"3fd8e5cab8afb7e37786a5b171ebbaf76d320cdc"},{"author":{"_account_id":20378,"name":"Trevor McCasland","email":"TM2086@att.com","username":"twm2016"},"change_message_id":"ccc6caf337a607fe193e7059e650e1a962da77af","unresolved":false,"context_lines":[{"line_number":61,"context_line":""},{"line_number":62,"context_line":"    def _parse_qinq_range(self, tag_ranges):"},{"line_number":63,"context_line":"        entry \u003d tag_ranges.strip()"},{"line_number":64,"context_line":"        if \u0027:\u0027 in entry:"},{"line_number":65,"context_line":"            if entry.count(\u0027:\u0027) !\u003d 3:"},{"line_number":66,"context_line":"                raise exceptions.QinQRangeError("},{"line_number":67,"context_line":"                    s_tag_range\u003dentry,"}],"source_content_type":"text/x-python","patch_set":18,"id":"5ff73747_9d9a436c","line":64,"in_reply_to":"7ffa3b31_74723eaf","updated":"2017-04-21 20:37:13.000000000","message":"Done","commit_id":"3fd8e5cab8afb7e37786a5b171ebbaf76d320cdc"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"04ced8e3de9e554b68da7e9c1e550d7344645500","unresolved":false,"context_lines":[{"line_number":92,"context_line":"        ctx \u003d context.get_admin_context()"},{"line_number":93,"context_line":"        with db_api.context_manager.writer.using(ctx):"},{"line_number":94,"context_line":"            # get existing allocations for all physical networks"},{"line_number":95,"context_line":"            allocs, allocations \u003d self.get_allocations_from_db(ctx)"},{"line_number":96,"context_line":"            # process s_tag ranges for each configured physical network"},{"line_number":97,"context_line":"            for physical_network, tags in self.qinq_ranges.items():"},{"line_number":98,"context_line":"                # remove from table unallocated s_tags not currently"}],"source_content_type":"text/x-python","patch_set":22,"id":"5ff73747_7053fae3","line":95,"range":{"start_line":95,"start_character":39,"end_line":95,"end_character":62},"updated":"2017-05-03 11:20:39.000000000","message":"I can\u0027t find this function definition","commit_id":"5296e6799e6738085dd031cb76ae76604edaf5bb"},{"author":{"_account_id":20378,"name":"Trevor McCasland","email":"TM2086@att.com","username":"twm2016"},"change_message_id":"65f8a79308487a0461c54b2f864cf5d652f76343","unresolved":false,"context_lines":[{"line_number":92,"context_line":"        ctx \u003d context.get_admin_context()"},{"line_number":93,"context_line":"        with db_api.context_manager.writer.using(ctx):"},{"line_number":94,"context_line":"            # get existing allocations for all physical networks"},{"line_number":95,"context_line":"            allocs, allocations \u003d self.get_allocations_from_db(ctx)"},{"line_number":96,"context_line":"            # process s_tag ranges for each configured physical network"},{"line_number":97,"context_line":"            for physical_network, tags in self.qinq_ranges.items():"},{"line_number":98,"context_line":"                # remove from table unallocated s_tags not currently"}],"source_content_type":"text/x-python","patch_set":22,"id":"5ff73747_9e3a10cb","line":95,"range":{"start_line":95,"start_character":39,"end_line":95,"end_character":62},"in_reply_to":"5ff73747_7053fae3","updated":"2017-05-03 13:57:56.000000000","message":"There is a refactor patch, I will add the info to the commit message.","commit_id":"5296e6799e6738085dd031cb76ae76604edaf5bb"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"ab1a85b57efd0b966371623d6b6c1c563b4889a0","unresolved":false,"context_lines":[{"line_number":92,"context_line":"        ctx \u003d context.get_admin_context()"},{"line_number":93,"context_line":"        with db_api.context_manager.writer.using(ctx):"},{"line_number":94,"context_line":"            # get existing allocations for all physical networks"},{"line_number":95,"context_line":"            allocs, allocations \u003d self.get_allocations_from_db(ctx)"},{"line_number":96,"context_line":"            # process s_tag ranges for each configured physical network"},{"line_number":97,"context_line":"            for physical_network, tags in self.qinq_ranges.items():"},{"line_number":98,"context_line":"                # remove from table unallocated s_tags not currently"}],"source_content_type":"text/x-python","patch_set":22,"id":"5ff73747_d433d961","line":95,"range":{"start_line":95,"start_character":39,"end_line":95,"end_character":62},"in_reply_to":"5ff73747_9e3a10cb","updated":"2017-05-03 15:13:24.000000000","message":"Ok, now I see this in https://review.openstack.org/#/c/458531/\n\nIf this function depends on a patch in the same repo, don\u0027t mention it in the commit message, just rebase this patch to the other one. Doing that, you\u0027ll have the dependency on the git tree.","commit_id":"5296e6799e6738085dd031cb76ae76604edaf5bb"},{"author":{"_account_id":20378,"name":"Trevor McCasland","email":"TM2086@att.com","username":"twm2016"},"change_message_id":"02877ffa68b44bb66cb4a05cfbbbd759d1652e03","unresolved":false,"context_lines":[{"line_number":226,"context_line":"                        {\u0027s_tag\u0027: s_tag,"},{"line_number":227,"context_line":"                         \u0027physical_network\u0027: physical_network})"},{"line_number":228,"context_line":""},{"line_number":229,"context_line":"    def get_mtu(self, physical_network):"},{"line_number":230,"context_line":"        seg_mtu \u003d super(QinQTypeDriver, self).get_mtu()"},{"line_number":231,"context_line":"        mtu \u003d []"},{"line_number":232,"context_line":"        if seg_mtu \u003e 0:"},{"line_number":233,"context_line":"            mtu.append(seg_mtu)"},{"line_number":234,"context_line":"        if physical_network in self.physnet_mtus:"},{"line_number":235,"context_line":"            mtu.append(int(self.physnet_mtus[physical_network]))"},{"line_number":236,"context_line":"        return min(mtu) if mtu else 0"},{"line_number":237,"context_line":""},{"line_number":238,"context_line":"    def update_network_ranges(self, ctx, alloc, ranges, allocations,"},{"line_number":239,"context_line":"                              db_allocs, physical_network):"}],"source_content_type":"text/x-python","patch_set":34,"id":"df140735_9efd4bb3","line":236,"range":{"start_line":229,"start_character":4,"end_line":236,"end_character":37},"updated":"2017-05-31 14:28:46.000000000","message":"I just want to point out.. this is probably a problem. I just copied the vlan implementation. Is this still true for QinQ?","commit_id":"a24d3d356b62e0553f1e29b36a6b664fc4720d5b"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"e6ae30660f8f84170f4fd4084b46d978085c6e51","unresolved":false,"context_lines":[{"line_number":54,"context_line":"                if outertag:"},{"line_number":55,"context_line":"                    qinq_ranges[network][outertag] \u003d (inner_min, inner_max)"},{"line_number":56,"context_line":"        except exceptions.QinQRangeError as e:"},{"line_number":57,"context_line":"            LOG.exception(_LE(\"Failed to parse network_qinq_ranges. \""},{"line_number":58,"context_line":"                              \"Service terminated! Error: %s\"),"},{"line_number":59,"context_line":"                          e)"},{"line_number":60,"context_line":"            sys.exit(1)"}],"source_content_type":"text/x-python","patch_set":45,"id":"1f1a1f67_674a2328","line":57,"updated":"2017-07-12 20:39:57.000000000","message":"I\u0027m not sure but should You use translate functions for logs? isn\u0027t it changed to be not translated?","commit_id":"0cf112e5adcf5eeb12b97b316d6a2508d6b1e1fe"},{"author":{"_account_id":20378,"name":"Trevor McCasland","email":"TM2086@att.com","username":"twm2016"},"change_message_id":"f0bbbb9d128589caf2a96a4093e360408670c5ec","unresolved":false,"context_lines":[{"line_number":54,"context_line":"                if outertag:"},{"line_number":55,"context_line":"                    qinq_ranges[network][outertag] \u003d (inner_min, inner_max)"},{"line_number":56,"context_line":"        except exceptions.QinQRangeError as e:"},{"line_number":57,"context_line":"            LOG.exception(_LE(\"Failed to parse network_qinq_ranges. \""},{"line_number":58,"context_line":"                              \"Service terminated! Error: %s\"),"},{"line_number":59,"context_line":"                          e)"},{"line_number":60,"context_line":"            sys.exit(1)"}],"source_content_type":"text/x-python","patch_set":45,"id":"1f1a1f67_c218c5d4","line":57,"in_reply_to":"1f1a1f67_674a2328","updated":"2017-07-12 22:41:58.000000000","message":"Done. I just figured it would throw a pep8 error. Looks like it\u0027s ok to remove the log translations.","commit_id":"0cf112e5adcf5eeb12b97b316d6a2508d6b1e1fe"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"e6ae30660f8f84170f4fd4084b46d978085c6e51","unresolved":false,"context_lines":[{"line_number":56,"context_line":"        except exceptions.QinQRangeError as e:"},{"line_number":57,"context_line":"            LOG.exception(_LE(\"Failed to parse network_qinq_ranges. \""},{"line_number":58,"context_line":"                              \"Service terminated! Error: %s\"),"},{"line_number":59,"context_line":"                          e)"},{"line_number":60,"context_line":"            sys.exit(1)"},{"line_number":61,"context_line":"        LOG.info(_LI(\"Network QinQ ranges: %s\"), qinq_ranges)"},{"line_number":62,"context_line":"        return qinq_ranges"}],"source_content_type":"text/x-python","patch_set":45,"id":"1f1a1f67_6797c392","line":59,"updated":"2017-07-12 20:39:57.000000000","message":"nit: can\u0027t You move it to line above?","commit_id":"0cf112e5adcf5eeb12b97b316d6a2508d6b1e1fe"},{"author":{"_account_id":20378,"name":"Trevor McCasland","email":"TM2086@att.com","username":"twm2016"},"change_message_id":"f0bbbb9d128589caf2a96a4093e360408670c5ec","unresolved":false,"context_lines":[{"line_number":56,"context_line":"        except exceptions.QinQRangeError as e:"},{"line_number":57,"context_line":"            LOG.exception(_LE(\"Failed to parse network_qinq_ranges. \""},{"line_number":58,"context_line":"                              \"Service terminated! Error: %s\"),"},{"line_number":59,"context_line":"                          e)"},{"line_number":60,"context_line":"            sys.exit(1)"},{"line_number":61,"context_line":"        LOG.info(_LI(\"Network QinQ ranges: %s\"), qinq_ranges)"},{"line_number":62,"context_line":"        return qinq_ranges"}],"source_content_type":"text/x-python","patch_set":45,"id":"1f1a1f67_a20dc991","line":59,"in_reply_to":"1f1a1f67_6797c392","updated":"2017-07-12 22:41:58.000000000","message":"Done","commit_id":"0cf112e5adcf5eeb12b97b316d6a2508d6b1e1fe"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"e6ae30660f8f84170f4fd4084b46d978085c6e51","unresolved":false,"context_lines":[{"line_number":58,"context_line":"                              \"Service terminated! Error: %s\"),"},{"line_number":59,"context_line":"                          e)"},{"line_number":60,"context_line":"            sys.exit(1)"},{"line_number":61,"context_line":"        LOG.info(_LI(\"Network QinQ ranges: %s\"), qinq_ranges)"},{"line_number":62,"context_line":"        return qinq_ranges"},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"    def _parse_qinq_range(self, tag_ranges):"}],"source_content_type":"text/x-python","patch_set":45,"id":"1f1a1f67_07512fd9","line":61,"updated":"2017-07-12 20:39:57.000000000","message":"same here about translations","commit_id":"0cf112e5adcf5eeb12b97b316d6a2508d6b1e1fe"},{"author":{"_account_id":20378,"name":"Trevor McCasland","email":"TM2086@att.com","username":"twm2016"},"change_message_id":"f0bbbb9d128589caf2a96a4093e360408670c5ec","unresolved":false,"context_lines":[{"line_number":58,"context_line":"                              \"Service terminated! Error: %s\"),"},{"line_number":59,"context_line":"                          e)"},{"line_number":60,"context_line":"            sys.exit(1)"},{"line_number":61,"context_line":"        LOG.info(_LI(\"Network QinQ ranges: %s\"), qinq_ranges)"},{"line_number":62,"context_line":"        return qinq_ranges"},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"    def _parse_qinq_range(self, tag_ranges):"}],"source_content_type":"text/x-python","patch_set":45,"id":"1f1a1f67_8212cdb0","line":61,"in_reply_to":"1f1a1f67_07512fd9","updated":"2017-07-12 22:41:58.000000000","message":"Done","commit_id":"0cf112e5adcf5eeb12b97b316d6a2508d6b1e1fe"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"e6ae30660f8f84170f4fd4084b46d978085c6e51","unresolved":false,"context_lines":[{"line_number":73,"context_line":""},{"line_number":74,"context_line":"        network \u003d vals.pop(0)"},{"line_number":75,"context_line":"        if not network:"},{"line_number":76,"context_line":"            raise exceptions.PhysicalNetworkNameError()"},{"line_number":77,"context_line":""},{"line_number":78,"context_line":"        for i in range(len(vals)):"},{"line_number":79,"context_line":"            try:"}],"source_content_type":"text/x-python","patch_set":45,"id":"1f1a1f67_67734382","line":76,"updated":"2017-07-12 20:39:57.000000000","message":"this exception is not handled in _parse_qinq_ranges() - is it intentional?","commit_id":"0cf112e5adcf5eeb12b97b316d6a2508d6b1e1fe"},{"author":{"_account_id":20378,"name":"Trevor McCasland","email":"TM2086@att.com","username":"twm2016"},"change_message_id":"f0bbbb9d128589caf2a96a4093e360408670c5ec","unresolved":false,"context_lines":[{"line_number":73,"context_line":""},{"line_number":74,"context_line":"        network \u003d vals.pop(0)"},{"line_number":75,"context_line":"        if not network:"},{"line_number":76,"context_line":"            raise exceptions.PhysicalNetworkNameError()"},{"line_number":77,"context_line":""},{"line_number":78,"context_line":"        for i in range(len(vals)):"},{"line_number":79,"context_line":"            try:"}],"source_content_type":"text/x-python","patch_set":45,"id":"1f1a1f67_e2bd0169","line":76,"in_reply_to":"1f1a1f67_67734382","updated":"2017-07-12 22:41:58.000000000","message":"The exceptions are handled the same.. so I will change the except code to catch Exception.","commit_id":"0cf112e5adcf5eeb12b97b316d6a2508d6b1e1fe"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"e6ae30660f8f84170f4fd4084b46d978085c6e51","unresolved":false,"context_lines":[{"line_number":85,"context_line":"        if not plugin_utils.is_valid_vlan_tag(outertag):"},{"line_number":86,"context_line":"            plugin_utils.raise_invalid_tag(outertag, entry)"},{"line_number":87,"context_line":""},{"line_number":88,"context_line":"        plugin_utils.verify_vlan_range((inner_min, inner_max))"},{"line_number":89,"context_line":"        return network, outertag, inner_min, inner_max"},{"line_number":90,"context_line":""},{"line_number":91,"context_line":"    @db_api.retry_db_errors"}],"source_content_type":"text/x-python","patch_set":45,"id":"1f1a1f67_07180f1b","line":88,"updated":"2017-07-12 20:39:57.000000000","message":"why You pass tuple instead of two separate values here?","commit_id":"0cf112e5adcf5eeb12b97b316d6a2508d6b1e1fe"},{"author":{"_account_id":20378,"name":"Trevor McCasland","email":"TM2086@att.com","username":"twm2016"},"change_message_id":"f0bbbb9d128589caf2a96a4093e360408670c5ec","unresolved":false,"context_lines":[{"line_number":85,"context_line":"        if not plugin_utils.is_valid_vlan_tag(outertag):"},{"line_number":86,"context_line":"            plugin_utils.raise_invalid_tag(outertag, entry)"},{"line_number":87,"context_line":""},{"line_number":88,"context_line":"        plugin_utils.verify_vlan_range((inner_min, inner_max))"},{"line_number":89,"context_line":"        return network, outertag, inner_min, inner_max"},{"line_number":90,"context_line":""},{"line_number":91,"context_line":"    @db_api.retry_db_errors"}],"source_content_type":"text/x-python","patch_set":45,"id":"1f1a1f67_e27861f9","line":88,"in_reply_to":"1f1a1f67_07180f1b","updated":"2017-07-12 22:41:58.000000000","message":"The function definition only takes one argument.","commit_id":"0cf112e5adcf5eeb12b97b316d6a2508d6b1e1fe"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"e6ae30660f8f84170f4fd4084b46d978085c6e51","unresolved":false,"context_lines":[{"line_number":224,"context_line":"                               \u0027physical_network\u0027: physical_network})"},{"line_number":225,"context_line":""},{"line_number":226,"context_line":"        if not allocs:"},{"line_number":227,"context_line":"            LOG.warning(_LW(\"No s_tag %(s_tag)s found on physical \""},{"line_number":228,"context_line":"                            \"network %(physical_network)s\"),"},{"line_number":229,"context_line":"                        {\u0027s_tag\u0027: s_tag,"},{"line_number":230,"context_line":"                         \u0027physical_network\u0027: physical_network})"}],"source_content_type":"text/x-python","patch_set":45,"id":"1f1a1f67_27c54b3d","line":227,"updated":"2017-07-12 20:39:57.000000000","message":"same here about translations","commit_id":"0cf112e5adcf5eeb12b97b316d6a2508d6b1e1fe"},{"author":{"_account_id":20378,"name":"Trevor McCasland","email":"TM2086@att.com","username":"twm2016"},"change_message_id":"f0bbbb9d128589caf2a96a4093e360408670c5ec","unresolved":false,"context_lines":[{"line_number":224,"context_line":"                               \u0027physical_network\u0027: physical_network})"},{"line_number":225,"context_line":""},{"line_number":226,"context_line":"        if not allocs:"},{"line_number":227,"context_line":"            LOG.warning(_LW(\"No s_tag %(s_tag)s found on physical \""},{"line_number":228,"context_line":"                            \"network %(physical_network)s\"),"},{"line_number":229,"context_line":"                        {\u0027s_tag\u0027: s_tag,"},{"line_number":230,"context_line":"                         \u0027physical_network\u0027: physical_network})"}],"source_content_type":"text/x-python","patch_set":45,"id":"1f1a1f67_a28269c7","line":227,"in_reply_to":"1f1a1f67_27c54b3d","updated":"2017-07-12 22:41:58.000000000","message":"Done","commit_id":"0cf112e5adcf5eeb12b97b316d6a2508d6b1e1fe"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"bc1b75471d8088cb832a75d5f57df0de97231833","unresolved":false,"context_lines":[{"line_number":68,"context_line":"        if len(vals) !\u003d 4:"},{"line_number":69,"context_line":"            raise exceptions.QinQRangeError("},{"line_number":70,"context_line":"                s_tag_range\u003dentry,"},{"line_number":71,"context_line":"                error\u003d_(\"Need exactly four values for network QinQ range\"))"},{"line_number":72,"context_line":""},{"line_number":73,"context_line":"        network \u003d vals.pop(0)"},{"line_number":74,"context_line":"        if not network:"}],"source_content_type":"text/x-python","patch_set":54,"id":"7f515b1d_614d6671","line":71,"updated":"2017-09-24 15:09:02.000000000","message":"In fact it\u0027s not exactly correct because if there is only 1 value it will pass in line 67 :)","commit_id":"2d9fe27927a20ed8656e29c11969bbd54a493499"},{"author":{"_account_id":20378,"name":"Trevor McCasland","email":"TM2086@att.com","username":"twm2016"},"change_message_id":"99f6bdc93a1aa52d3f7276d465e6099d006fc65c","unresolved":false,"context_lines":[{"line_number":68,"context_line":"        if len(vals) !\u003d 4:"},{"line_number":69,"context_line":"            raise exceptions.QinQRangeError("},{"line_number":70,"context_line":"                s_tag_range\u003dentry,"},{"line_number":71,"context_line":"                error\u003d_(\"Need exactly four values for network QinQ range\"))"},{"line_number":72,"context_line":""},{"line_number":73,"context_line":"        network \u003d vals.pop(0)"},{"line_number":74,"context_line":"        if not network:"}],"source_content_type":"text/x-python","patch_set":54,"id":"7f515b1d_fd020bb4","line":71,"in_reply_to":"7f515b1d_614d6671","updated":"2017-09-25 15:02:15.000000000","message":"Done","commit_id":"2d9fe27927a20ed8656e29c11969bbd54a493499"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"bc1b75471d8088cb832a75d5f57df0de97231833","unresolved":false,"context_lines":[{"line_number":101,"context_line":"                                            tags)"},{"line_number":102,"context_line":"                # add missing allocatable s_tags to table"},{"line_number":103,"context_line":"                for s_tag, c_tag_range in tags.items():"},{"line_number":104,"context_line":"                    for c_tag in range(c_tag_range[0], c_tag_range[-1] + 1):"},{"line_number":105,"context_line":"                        alloc \u003d qinqallocation.QinQAllocation(ctx,"},{"line_number":106,"context_line":"                                    physical_network\u003dphysical_network,"},{"line_number":107,"context_line":"                                    s_tag\u003ds_tag,"}],"source_content_type":"text/x-python","patch_set":54,"id":"7f515b1d_a14a3e52","line":104,"updated":"2017-09-24 15:09:02.000000000","message":"I\u0027m not sure if it\u0027s possible but IMHO it would be nice if c_tag_range would be a dict with keys \u0027min\u0027 and \u0027max\u0027. Then here it would be IMHO easier to read \"c_tag_range[\u0027min\u0027]\" instead of \"c_tag_range[0]\".\nIf it\u0027s not possible should\u0027t it be c_tag_range[0] and c_tag_range[1] instead of \"-1\"? Is it possible that it will contain more than 2 values?","commit_id":"2d9fe27927a20ed8656e29c11969bbd54a493499"},{"author":{"_account_id":20378,"name":"Trevor McCasland","email":"TM2086@att.com","username":"twm2016"},"change_message_id":"99f6bdc93a1aa52d3f7276d465e6099d006fc65c","unresolved":false,"context_lines":[{"line_number":101,"context_line":"                                            tags)"},{"line_number":102,"context_line":"                # add missing allocatable s_tags to table"},{"line_number":103,"context_line":"                for s_tag, c_tag_range in tags.items():"},{"line_number":104,"context_line":"                    for c_tag in range(c_tag_range[0], c_tag_range[-1] + 1):"},{"line_number":105,"context_line":"                        alloc \u003d qinqallocation.QinQAllocation(ctx,"},{"line_number":106,"context_line":"                                    physical_network\u003dphysical_network,"},{"line_number":107,"context_line":"                                    s_tag\u003ds_tag,"}],"source_content_type":"text/x-python","patch_set":54,"id":"7f515b1d_bdbc93dc","line":104,"in_reply_to":"7f515b1d_a14a3e52","updated":"2017-09-25 15:02:15.000000000","message":"Done, and it\u0027s not possible to have more than 2 values in c_tag_range.","commit_id":"2d9fe27927a20ed8656e29c11969bbd54a493499"}],"neutron/plugins/ml2/drivers/type_vlan.py":[{"author":{"_account_id":7787,"name":"Kevin Benton","email":"kevin@benton.pub","username":"blak111"},"change_message_id":"6fc309a308136a7e5eae3025654e4df01615150a","unresolved":false,"context_lines":[{"line_number":103,"context_line":"                                # values to True while our transaction is"},{"line_number":104,"context_line":"                                # open so we don\u0027t accidentally delete"},{"line_number":105,"context_line":"                                # allocated segments. If someone has already"},{"line_number":106,"context_line":"                                # allocated, count will return 0 so we don\u0027t"},{"line_number":107,"context_line":"                                # delete."},{"line_number":108,"context_line":"                                count \u003d allocs.filter_by("},{"line_number":109,"context_line":"                                    allocated\u003dFalse, vlan_id\u003dalloc.vlan_id,"}],"source_content_type":"text/x-python","patch_set":15,"id":"7ffa3b31_ad02d03b","side":"PARENT","line":106,"updated":"2017-04-20 10:37:56.000000000","message":"Thanks for refactor. Now please separate the refactor into a patch this one depends on so we have the first patch that refactors this and alters the vlan driver that should result in no behavior changes.\n\nMuch easier for people to review since this one is is large already.","commit_id":"9d8e28f2ea70412569157258f75f4c2e5b38e88a"},{"author":{"_account_id":6854,"name":"YAMAMOTO Takashi","email":"yamamoto@midokura.com","username":"yamamoto"},"change_message_id":"166ebb9e550613d96eaff6e094ee2d08648a52a5","unresolved":false,"context_lines":[{"line_number":80,"context_line":"                self.process_network_ranges(ctx, allocations, allocs,"},{"line_number":81,"context_line":"                                            physical_network, vlan_ids)"},{"line_number":82,"context_line":""},{"line_number":83,"context_line":"                # add missing allocatable vlans to table"},{"line_number":84,"context_line":"                for vlan_id in sorted(vlan_ids):"},{"line_number":85,"context_line":"                    alloc \u003d vlan_alloc_model.VlanAllocation("},{"line_number":86,"context_line":"                                           physical_network\u003dphysical_network,"}],"source_content_type":"text/x-python","patch_set":34,"id":"df140735_5b26096a","side":"PARENT","line":83,"updated":"2017-06-06 09:51:42.000000000","message":"why did you remove this comment?","commit_id":"f0cea12fb94abef06cd8ed95d0f7b7e118e75737"},{"author":{"_account_id":20378,"name":"Trevor McCasland","email":"TM2086@att.com","username":"twm2016"},"change_message_id":"a7343f47b051ac88a8825e25048aae318c98a73d","unresolved":false,"context_lines":[{"line_number":80,"context_line":"                self.process_network_ranges(ctx, allocations, allocs,"},{"line_number":81,"context_line":"                                            physical_network, vlan_ids)"},{"line_number":82,"context_line":""},{"line_number":83,"context_line":"                # add missing allocatable vlans to table"},{"line_number":84,"context_line":"                for vlan_id in sorted(vlan_ids):"},{"line_number":85,"context_line":"                    alloc \u003d vlan_alloc_model.VlanAllocation("},{"line_number":86,"context_line":"                                           physical_network\u003dphysical_network,"}],"source_content_type":"text/x-python","patch_set":34,"id":"df140735_5ae27ad6","side":"PARENT","line":83,"in_reply_to":"df140735_5b26096a","updated":"2017-06-06 19:16:44.000000000","message":"My mistake. I really shouldn\u0027t be modifying this file at all. This is reserved for the other patch (refactor type_vlan for QinQ).","commit_id":"f0cea12fb94abef06cd8ed95d0f7b7e118e75737"}],"neutron/tests/unit/plugins/ml2/drivers/test_type_qinq.py":[{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"df225a898f00b39e074cc39716577bdd7b74dfef","unresolved":false,"context_lines":[{"line_number":90,"context_line":"    def test_validate_provider_segment_without_segmentation_id(self):"},{"line_number":91,"context_line":"        segment \u003d {api.NETWORK_TYPE: p_const.TYPE_VLAN,"},{"line_number":92,"context_line":"                   api.PHYSICAL_NETWORK: TENANT_NET}"},{"line_number":93,"context_line":"        self.driver.validate_provider_segment(segment)"},{"line_number":94,"context_line":""},{"line_number":95,"context_line":"    def test_validate_provider_segment_without_physical_network(self):"},{"line_number":96,"context_line":"        segment \u003d {api.NETWORK_TYPE: p_const.TYPE_VLAN}"}],"source_content_type":"text/x-python","patch_set":3,"id":"1a1ced50_06265c16","line":93,"updated":"2017-03-16 16:42:49.000000000","message":"Where are you making any test in this function?","commit_id":"a0084fe550e764e27b1aff98b4d8505c2539c4ab"},{"author":{"_account_id":20378,"name":"Trevor McCasland","email":"TM2086@att.com","username":"twm2016"},"change_message_id":"3aededcfb367e666a5ea35e54ed08d28e580c8d6","unresolved":false,"context_lines":[{"line_number":90,"context_line":"    def test_validate_provider_segment_without_segmentation_id(self):"},{"line_number":91,"context_line":"        segment \u003d {api.NETWORK_TYPE: p_const.TYPE_VLAN,"},{"line_number":92,"context_line":"                   api.PHYSICAL_NETWORK: TENANT_NET}"},{"line_number":93,"context_line":"        self.driver.validate_provider_segment(segment)"},{"line_number":94,"context_line":""},{"line_number":95,"context_line":"    def test_validate_provider_segment_without_physical_network(self):"},{"line_number":96,"context_line":"        segment \u003d {api.NETWORK_TYPE: p_const.TYPE_VLAN}"}],"source_content_type":"text/x-python","patch_set":3,"id":"1a1ced50_7bb95a2e","line":93,"in_reply_to":"1a1ced50_06265c16","updated":"2017-03-16 22:09:26.000000000","message":"This was a part of the TODO. I added the missing fields to the segments","commit_id":"a0084fe550e764e27b1aff98b4d8505c2539c4ab"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"df225a898f00b39e074cc39716577bdd7b74dfef","unresolved":false,"context_lines":[{"line_number":94,"context_line":""},{"line_number":95,"context_line":"    def test_validate_provider_segment_without_physical_network(self):"},{"line_number":96,"context_line":"        segment \u003d {api.NETWORK_TYPE: p_const.TYPE_VLAN}"},{"line_number":97,"context_line":"        self.driver.validate_provider_segment(segment)"},{"line_number":98,"context_line":""},{"line_number":99,"context_line":"    def test_validate_provider_segment_with_missing_physical_network(self):"},{"line_number":100,"context_line":"        segment \u003d {api.NETWORK_TYPE: p_const.TYPE_VLAN,"}],"source_content_type":"text/x-python","patch_set":3,"id":"1a1ced50_e68780d5","line":97,"updated":"2017-03-16 16:42:49.000000000","message":"ditto","commit_id":"a0084fe550e764e27b1aff98b4d8505c2539c4ab"}],"setup.cfg":[{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"04ced8e3de9e554b68da7e9c1e550d7344645500","unresolved":false,"context_lines":[{"line_number":89,"context_line":"    geneve \u003d neutron.plugins.ml2.drivers.type_geneve:GeneveTypeDriver"},{"line_number":90,"context_line":"    gre \u003d neutron.plugins.ml2.drivers.type_gre:GreTypeDriver"},{"line_number":91,"context_line":"    vxlan \u003d neutron.plugins.ml2.drivers.type_vxlan:VxlanTypeDriver"},{"line_number":92,"context_line":"    qinq \u003d neutron.plugins.ml2.drivers.type_qinq:QinqTypeDriver"},{"line_number":93,"context_line":"neutron.ml2.mechanism_drivers \u003d"},{"line_number":94,"context_line":"    logger \u003d neutron.tests.unit.plugins.ml2.drivers.mechanism_logger:LoggerMechanismDriver"},{"line_number":95,"context_line":"    test \u003d neutron.tests.unit.plugins.ml2.drivers.mechanism_test:TestMechanismDriver"}],"source_content_type":"text/x-ttcn-cfg","patch_set":22,"id":"5ff73747_701ada17","line":92,"range":{"start_line":92,"start_character":49,"end_line":92,"end_character":63},"updated":"2017-05-03 11:20:39.000000000","message":"The defined name of the class is QinQTypeDriver\n\nhttps://review.openstack.org/#/c/446047/22/neutron/plugins/ml2/drivers/type_qinq.py@38","commit_id":"5296e6799e6738085dd031cb76ae76604edaf5bb"}]}
