)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":17120,"name":"Manjeet Singh Bhatia","email":"manjeet.s.bhatia@intel.com","username":"manjeets"},"change_message_id":"02ff1838bb56ea38ffe701fd24e4872c98e312c0","unresolved":false,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"WIP, many missing pieces, like policy bits, testing, etc."},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"Implements: blueprint vlan-aware-vms"},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Signed-off-by: SongmingYan \u003cneutron@zte.com.cn\u003e"},{"line_number":14,"context_line":"Change-Id: I22fe24c72169b6a401519637aab81dba36921d9a"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":8,"id":"dab17558_fc0f7d34","line":11,"range":{"start_line":11,"start_character":0,"end_line":11,"end_character":36},"updated":"2016-05-11 05:08:33.000000000","message":"Partial-Implements would be more appropriate","commit_id":"0a11a1e5eb3278b1d50b5dced7fa48c08607e5ba"}],"etc/policy.json":[{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"9b9cd447bbd5ac22e04887b1915f9f2ca90740ea","unresolved":false,"context_lines":[{"line_number":228,"context_line":"    \"create_trunk\": \"rule:regular_user\","},{"line_number":229,"context_line":"    \"get_trunk\": \"rule:admin_or_owner\","},{"line_number":230,"context_line":"    \"delete_trunk\": \"rule:admin_or_owner\","},{"line_number":231,"context_line":"    \"add_subports\": \"rule:admin_or_owner\","},{"line_number":232,"context_line":"    \"remove_subports\": \"rule:admin_or_owner\""},{"line_number":233,"context_line":"}"}],"source_content_type":"application/json","patch_set":16,"id":"bab6814e_3640ae07","line":231,"updated":"2016-05-24 07:10:37.000000000","message":"Why we have made these cmds as plural? They can\u0027t support a singular operation?","commit_id":"56b15308cdaae1afa2e42f62f544f505bf7b6010"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"031e7592af794eb5659dff9f844c8bc07db77fcd","unresolved":false,"context_lines":[{"line_number":228,"context_line":"    \"create_trunk\": \"rule:regular_user\","},{"line_number":229,"context_line":"    \"get_trunk\": \"rule:admin_or_owner\","},{"line_number":230,"context_line":"    \"delete_trunk\": \"rule:admin_or_owner\","},{"line_number":231,"context_line":"    \"add_subports\": \"rule:admin_or_owner\","},{"line_number":232,"context_line":"    \"remove_subports\": \"rule:admin_or_owner\""},{"line_number":233,"context_line":"}"}],"source_content_type":"application/json","patch_set":16,"id":"bab6814e_58c8df74","line":231,"in_reply_to":"bab6814e_3640ae07","updated":"2016-05-24 16:05:37.000000000","message":"you pass a collection of ports here and a collection can be made of a single item.","commit_id":"56b15308cdaae1afa2e42f62f544f505bf7b6010"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"9b9cd447bbd5ac22e04887b1915f9f2ca90740ea","unresolved":false,"context_lines":[{"line_number":229,"context_line":"    \"get_trunk\": \"rule:admin_or_owner\","},{"line_number":230,"context_line":"    \"delete_trunk\": \"rule:admin_or_owner\","},{"line_number":231,"context_line":"    \"add_subports\": \"rule:admin_or_owner\","},{"line_number":232,"context_line":"    \"remove_subports\": \"rule:admin_or_owner\""},{"line_number":233,"context_line":"}"}],"source_content_type":"application/json","patch_set":16,"id":"bab6814e_1645aa16","line":232,"updated":"2016-05-24 07:10:37.000000000","message":"ditto","commit_id":"56b15308cdaae1afa2e42f62f544f505bf7b6010"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"aa4b129b2fa00bef99643dbe21869247b766c7e0","unresolved":false,"context_lines":[{"line_number":224,"context_line":"    \"get_trunk\": \"rule:admin_or_owner\","},{"line_number":225,"context_line":"    \"delete_trunk\": \"rule:admin_or_owner\","},{"line_number":226,"context_line":"    \"add_subports\": \"rule:admin_or_owner\","},{"line_number":227,"context_line":"    \"remove_subports\": \"rule:admin_or_owner\""},{"line_number":228,"context_line":"}"}],"source_content_type":"application/json","patch_set":20,"id":"bab6814e_cd002c69","line":227,"updated":"2016-05-26 10:17:20.000000000","message":"API for \u0027get_subports\u0027 registered @ https://review.openstack.org/#/c/281723/20/neutron/extensions/trunk.py (L131) but cannot find here?","commit_id":"2b1d6978e2003f90fc4b993420bd8907602412a3"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"91be0274302b093421a8d810b27f60de62431213","unresolved":false,"context_lines":[{"line_number":224,"context_line":"    \"get_trunk\": \"rule:admin_or_owner\","},{"line_number":225,"context_line":"    \"delete_trunk\": \"rule:admin_or_owner\","},{"line_number":226,"context_line":"    \"add_subports\": \"rule:admin_or_owner\","},{"line_number":227,"context_line":"    \"remove_subports\": \"rule:admin_or_owner\""},{"line_number":228,"context_line":"}"}],"source_content_type":"application/json","patch_set":20,"id":"9abb7d3a_4eff8f01","line":227,"in_reply_to":"9abb7d3a_34cfffb1","updated":"2016-05-27 17:03:05.000000000","message":"regular actions don\u0027t need to be specified, but that\u0027s fine, I\u0027ll add it.","commit_id":"2b1d6978e2003f90fc4b993420bd8907602412a3"},{"author":{"_account_id":4187,"name":"Ryan Tidwell","email":"rtidwell@suse.com","username":"ryan-tidwell"},"change_message_id":"a76428a8c0083902951f77dd2c0b0372cd560924","unresolved":false,"context_lines":[{"line_number":224,"context_line":"    \"get_trunk\": \"rule:admin_or_owner\","},{"line_number":225,"context_line":"    \"delete_trunk\": \"rule:admin_or_owner\","},{"line_number":226,"context_line":"    \"add_subports\": \"rule:admin_or_owner\","},{"line_number":227,"context_line":"    \"remove_subports\": \"rule:admin_or_owner\""},{"line_number":228,"context_line":"}"}],"source_content_type":"application/json","patch_set":20,"id":"9abb7d3a_34cfffb1","line":227,"in_reply_to":"bab6814e_cd002c69","updated":"2016-05-27 16:06:25.000000000","message":"Good catch, it does look like an oversight.","commit_id":"2b1d6978e2003f90fc4b993420bd8907602412a3"}],"neutron/db/migration/alembic_migrations/versions/EXPAND_HEAD":[{"author":{"_account_id":7018,"name":"Abhishek Raut","email":"rauta@vmware.com","username":"abhiraut"},"change_message_id":"5d37738a3b755d32d05601dbf62f464203002dc0","unresolved":false,"context_lines":[{"line_number":1,"context_line":"87cd194e787f"}],"source_content_type":"application/octet-stream","patch_set":3,"id":"9aed3d3a_1d8db431","line":1,"range":{"start_line":1,"start_character":0,"end_line":1,"end_character":12},"updated":"2016-02-26 01:26:40.000000000","message":"This file needs to go. Addressed by https://review.openstack.org/#/c/279251/","commit_id":"7b224f635794cf660795f80679bf1286ef1bf323"}],"neutron/db/migration/alembic_migrations/versions/mitaka/expand/87cd194e787f_trunk_api.py":[{"author":{"_account_id":7249,"name":"Ann Taraday","email":"akamyshnikova@mirantis.com","username":"AKamyshnikova"},"change_message_id":"5d774bfea95cc814a75b1634340ceb2288b8d9cb","unresolved":false,"context_lines":[{"line_number":64,"context_line":"    )"},{"line_number":65,"context_line":""},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"def downgrade():"},{"line_number":68,"context_line":"    op.drop_table(\u0027trunks\u0027)"},{"line_number":69,"context_line":"    op.drop_table(\u0027subports\u0027)"}],"source_content_type":"text/x-python","patch_set":1,"id":"dae33548_cc700143","line":67,"updated":"2016-02-18 10:39:53.000000000","message":"We do not support downgrade","commit_id":"db33ac706d64a7586fb98fd58411de6ab3357d9f"},{"author":{"_account_id":20000,"name":"Songming Yan","email":"yan.songming@zte.com.cn","username":"SonmingYan.zte"},"change_message_id":"a83925cde7037cf9d3e241363ebecb844f16003c","unresolved":false,"context_lines":[{"line_number":64,"context_line":"    )"},{"line_number":65,"context_line":""},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"def downgrade():"},{"line_number":68,"context_line":"    op.drop_table(\u0027trunks\u0027)"},{"line_number":69,"context_line":"    op.drop_table(\u0027subports\u0027)"}],"source_content_type":"text/x-python","patch_set":1,"id":"bae84128_60a71250","line":67,"in_reply_to":"dae33548_cc700143","updated":"2016-02-19 08:52:16.000000000","message":"Thanks， i will fix this problem","commit_id":"db33ac706d64a7586fb98fd58411de6ab3357d9f"},{"author":{"_account_id":7018,"name":"Abhishek Raut","email":"rauta@vmware.com","username":"abhiraut"},"change_message_id":"5d37738a3b755d32d05601dbf62f464203002dc0","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2016 OpenStack Foundation"},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":4,"context_line":"#    not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":3,"id":"9aed3d3a_bd7c8821","line":1,"range":{"start_line":1,"start_character":2,"end_line":1,"end_character":11},"updated":"2016-02-26 01:26:40.000000000","message":"This file needs to go. Addressed by https://review.openstack.org/#/c/279251/","commit_id":"7b224f635794cf660795f80679bf1286ef1bf323"}],"neutron/db/trunk_db.py":[{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"b8547730240e82ecc5b6a89bb14022acaa5b164b","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2011 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":"9aed3d3a_67bff4fb","line":1,"updated":"2016-02-26 12:25:06.000000000","message":"2016","commit_id":"7b224f635794cf660795f80679bf1286ef1bf323"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"b8547730240e82ecc5b6a89bb14022acaa5b164b","unresolved":false,"context_lines":[{"line_number":18,"context_line":"from neutron.db import models_v2"},{"line_number":19,"context_line":"from neutron.extensions import trunk as ext_trunk"},{"line_number":20,"context_line":"from neutron import manager"},{"line_number":21,"context_line":"from oslo_db import exception as db_exc"},{"line_number":22,"context_line":"from oslo_utils import uuidutils"},{"line_number":23,"context_line":"import sqlalchemy as sa"},{"line_number":24,"context_line":"from sqlalchemy.orm import exc"}],"source_content_type":"text/x-python","patch_set":3,"id":"9aed3d3a_4718f01d","line":21,"updated":"2016-02-26 12:25:06.000000000","message":"Re-arrange imports as per the guidelines.\n\nhttp://docs.openstack.org/developer/hacking/#import-order-template","commit_id":"7b224f635794cf660795f80679bf1286ef1bf323"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"b8547730240e82ecc5b6a89bb14022acaa5b164b","unresolved":false,"context_lines":[{"line_number":40,"context_line":""},{"line_number":41,"context_line":"class Subport(model_base.HasStandardAttributes, model_base.BASEV2,"},{"line_number":42,"context_line":"              model_base.HasId):"},{"line_number":43,"context_line":"    \"\"\"Represents a trunk on a Neutron v2 network.\"\"\""},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"    port_id \u003d sa.Column(sa.String(36), sa.ForeignKey(\u0027ports.id\u0027,"},{"line_number":46,"context_line":"                                                     ondelete\u003d\"CASCADE\"),"}],"source_content_type":"text/x-python","patch_set":3,"id":"9aed3d3a_e75824fd","line":43,"updated":"2016-02-26 12:25:06.000000000","message":"DocString doesn\u0027t match class functionality. Plz update.","commit_id":"7b224f635794cf660795f80679bf1286ef1bf323"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"b8547730240e82ecc5b6a89bb14022acaa5b164b","unresolved":false,"context_lines":[{"line_number":65,"context_line":""},{"line_number":66,"context_line":"class TrunkDbMixin(ext_trunk.TrunkPluginBase):"},{"line_number":67,"context_line":""},{"line_number":68,"context_line":"    def __init__(self):"},{"line_number":69,"context_line":"        pass"},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"    @property"}],"source_content_type":"text/x-python","patch_set":3,"id":"9aed3d3a_274ccc41","line":68,"updated":"2016-02-26 12:25:06.000000000","message":"init not needed. can be removed.","commit_id":"7b224f635794cf660795f80679bf1286ef1bf323"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"b8547730240e82ecc5b6a89bb14022acaa5b164b","unresolved":false,"context_lines":[{"line_number":124,"context_line":"        try:"},{"line_number":125,"context_line":"            with context.session.begin(subtransactions\u003dTrue):"},{"line_number":126,"context_line":"                ret \u003d self._make_trunk_dict("},{"line_number":127,"context_line":"                    self._get_trunk(context, id), fields)"},{"line_number":128,"context_line":"        finally:"},{"line_number":129,"context_line":"            if tenant_id:"},{"line_number":130,"context_line":"                context.tenant_id \u003d tmp_context_tenant_id"}],"source_content_type":"text/x-python","patch_set":3,"id":"9aed3d3a_6777f43a","line":127,"updated":"2016-02-26 12:25:06.000000000","message":"fishy indentation","commit_id":"7b224f635794cf660795f80679bf1286ef1bf323"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"b8547730240e82ecc5b6a89bb14022acaa5b164b","unresolved":false,"context_lines":[{"line_number":168,"context_line":"        return self._make_trunk_dict(trunk)"},{"line_number":169,"context_line":""},{"line_number":170,"context_line":"    def update_trunk(self, context, id, trunk):"},{"line_number":171,"context_line":"        tr \u003d trunk[\u0027trunk\u0027]"},{"line_number":172,"context_line":"        with context.session.begin(subtransactions\u003dTrue):"},{"line_number":173,"context_line":"            tr_db \u003d self._get_trunk(context, id)"},{"line_number":174,"context_line":"            tr_db.update(tr)"}],"source_content_type":"text/x-python","patch_set":3,"id":"9aed3d3a_47abd074","line":171,"updated":"2016-02-26 12:25:06.000000000","message":"do we really need this local variable?","commit_id":"7b224f635794cf660795f80679bf1286ef1bf323"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"b8547730240e82ecc5b6a89bb14022acaa5b164b","unresolved":false,"context_lines":[{"line_number":177,"context_line":"    def delete_trunk(self, context, id):"},{"line_number":178,"context_line":""},{"line_number":179,"context_line":"        # confirm the trunk exists"},{"line_number":180,"context_line":"        trunk \u003d self._get_trunk(context, id)"},{"line_number":181,"context_line":"        with context.session.begin(subtransactions\u003dTrue):"},{"line_number":182,"context_line":"            context.session.delete(trunk)"},{"line_number":183,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"9aed3d3a_a7045c7e","line":180,"updated":"2016-02-26 12:25:06.000000000","message":"what if the trunk doesn\u0027t exist? possibly we got to throw error and return.","commit_id":"7b224f635794cf660795f80679bf1286ef1bf323"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"b8547730240e82ecc5b6a89bb14022acaa5b164b","unresolved":false,"context_lines":[{"line_number":236,"context_line":"    def delete_subport(self, context, subport_id):"},{"line_number":237,"context_line":""},{"line_number":238,"context_line":"        # confirm the trunk exists"},{"line_number":239,"context_line":"        subport \u003d self._get_subport(context, subport_id)"},{"line_number":240,"context_line":"        with context.session.begin(subtransactions\u003dTrue):"},{"line_number":241,"context_line":"            context.session.delete(subport)"},{"line_number":242,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"9aed3d3a_a779fcfe","line":239,"updated":"2016-02-26 12:25:06.000000000","message":"what if the subport doesn\u0027t exist? possibly we got to throw error and return.","commit_id":"7b224f635794cf660795f80679bf1286ef1bf323"}],"neutron/extensions/trunk.py":[{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"b8547730240e82ecc5b6a89bb14022acaa5b164b","unresolved":false,"context_lines":[{"line_number":30,"context_line":""},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"class TrunkNotFound(nexception.NotFound):"},{"line_number":33,"context_line":"    message \u003d _(\"Trunk %(id)s does not exist\")"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"class ReferencedPortNotFound(nexception.NotFound):"}],"source_content_type":"text/x-python","patch_set":3,"id":"9aed3d3a_a7ee1c89","line":33,"updated":"2016-02-26 12:25:06.000000000","message":"Let\u0027s terminate the msg with a period \u0027.\u0027","commit_id":"7b224f635794cf660795f80679bf1286ef1bf323"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"b8547730240e82ecc5b6a89bb14022acaa5b164b","unresolved":false,"context_lines":[{"line_number":34,"context_line":""},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"class ReferencedPortNotFound(nexception.NotFound):"},{"line_number":37,"context_line":"    message \u003d _(\"Referenced Port %(id)s does not exist\")"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"class ReferencedPortInUse(nexception.NotFound):"}],"source_content_type":"text/x-python","patch_set":3,"id":"9aed3d3a_87f31873","line":37,"updated":"2016-02-26 12:25:06.000000000","message":"ditto","commit_id":"7b224f635794cf660795f80679bf1286ef1bf323"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"b8547730240e82ecc5b6a89bb14022acaa5b164b","unresolved":false,"context_lines":[{"line_number":38,"context_line":""},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"class ReferencedPortInUse(nexception.NotFound):"},{"line_number":41,"context_line":"    message \u003d _(\"Referenced Port %(id)s in use\")"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"class BadSubportRequest(nexception.BadRequest):"}],"source_content_type":"text/x-python","patch_set":3,"id":"9aed3d3a_27032c44","line":41,"updated":"2016-02-26 12:25:06.000000000","message":"ditto","commit_id":"7b224f635794cf660795f80679bf1286ef1bf323"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"b8547730240e82ecc5b6a89bb14022acaa5b164b","unresolved":false,"context_lines":[{"line_number":45,"context_line":"    message \u003d _(\"Unable to create subport on trunk %(trunk_id)s. Segment \""},{"line_number":46,"context_line":"                \"id %(segment_id)s or type %(segment_type)s already in \""},{"line_number":47,"context_line":"                \"use.\")"},{"line_number":48,"context_line":"# Attribute Map"},{"line_number":49,"context_line":"RESOURCE_ATTRIBUTE_MAP \u003d {"},{"line_number":50,"context_line":"    \u0027trunks\u0027: {"},{"line_number":51,"context_line":"        \u0027id\u0027: {\u0027allow_post\u0027: False, \u0027allow_put\u0027: False,"}],"source_content_type":"text/x-python","patch_set":3,"id":"9aed3d3a_07aee82d","line":48,"updated":"2016-02-26 12:25:06.000000000","message":"I believe you have missed newlines here.","commit_id":"7b224f635794cf660795f80679bf1286ef1bf323"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"b8547730240e82ecc5b6a89bb14022acaa5b164b","unresolved":false,"context_lines":[{"line_number":191,"context_line":"        pass"},{"line_number":192,"context_line":""},{"line_number":193,"context_line":"    @abc.abstractmethod"},{"line_number":194,"context_line":"    def delete_subport(self, context, id):"},{"line_number":195,"context_line":"        pass"}],"source_content_type":"text/x-python","patch_set":3,"id":"9aed3d3a_a2372aaf","line":194,"updated":"2016-02-26 12:25:06.000000000","message":"could not find \u0027update_subport\"?\n\nFrom L71, can find \u0027name\u0027 is an updatable param..","commit_id":"7b224f635794cf660795f80679bf1286ef1bf323"},{"author":{"_account_id":4187,"name":"Ryan Tidwell","email":"rtidwell@suse.com","username":"ryan-tidwell"},"change_message_id":"1ced98c464db5afd1aa9a815ca4ff29b4b7dbdd8","unresolved":false,"context_lines":[{"line_number":35,"context_line":"                        \u0027required_by_policy\u0027: True,"},{"line_number":36,"context_line":"                        \u0027validate\u0027: {\u0027type:uuid\u0027: None},"},{"line_number":37,"context_line":"                        \u0027is_visible\u0027: True},"},{"line_number":38,"context_line":"        \u0027sub_ports\u0027: {\u0027allow_post\u0027: True, \u0027allow_put\u0027: True,"},{"line_number":39,"context_line":"                      \u0027default\u0027: constants.ATTR_NOT_SPECIFIED,"},{"line_number":40,"context_line":"                      \u0027convert_list_to\u0027: converters.convert_kvp_list_to_dict,"},{"line_number":41,"context_line":"                      # FIXME(armax): this is not quite a list of uuids"}],"source_content_type":"text/x-python","patch_set":8,"id":"dab17558_cb4da073","line":38,"updated":"2016-05-16 17:22:45.000000000","message":"Should allow_post and allow_put both be False? It appears supports are added and removed using sub-resources as defined on L75.","commit_id":"0a11a1e5eb3278b1d50b5dced7fa48c08607e5ba"},{"author":{"_account_id":17120,"name":"Manjeet Singh Bhatia","email":"manjeet.s.bhatia@intel.com","username":"manjeets"},"change_message_id":"b9b75e6d84cc7c79d1a9d673fab8d9a16210b4ab","unresolved":false,"context_lines":[{"line_number":89,"context_line":""},{"line_number":90,"context_line":"    @classmethod"},{"line_number":91,"context_line":"    def get_description(cls):"},{"line_number":92,"context_line":"        return \"Trunk Extension - expose trunk resources\""},{"line_number":93,"context_line":""},{"line_number":94,"context_line":"    @classmethod"},{"line_number":95,"context_line":"    def get_updated(cls):"}],"source_content_type":"text/x-python","patch_set":10,"id":"bab6814e_a695fb33","line":92,"range":{"start_line":92,"start_character":16,"end_line":92,"end_character":56},"updated":"2016-05-20 16:04:38.000000000","message":"I would suggest making it little more clear and easy.","commit_id":"7f69df9c1b0b70ea745eef387b7237203ae2d030"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"3246f7aaaa63bd8388e55f7654e6a818cc284c5d","unresolved":false,"context_lines":[{"line_number":89,"context_line":""},{"line_number":90,"context_line":"    @classmethod"},{"line_number":91,"context_line":"    def get_description(cls):"},{"line_number":92,"context_line":"        return \"Trunk Extension - expose trunk resources\""},{"line_number":93,"context_line":""},{"line_number":94,"context_line":"    @classmethod"},{"line_number":95,"context_line":"    def get_updated(cls):"}],"source_content_type":"text/x-python","patch_set":10,"id":"bab6814e_79045417","line":92,"range":{"start_line":92,"start_character":16,"end_line":92,"end_character":56},"in_reply_to":"bab6814e_a695fb33","updated":"2016-05-20 16:28:29.000000000","message":"and what are you suggesting?","commit_id":"7f69df9c1b0b70ea745eef387b7237203ae2d030"},{"author":{"_account_id":16800,"name":"Rawlin Peters","email":"rawlin.peters@hpe.com","username":"rawlin"},"change_message_id":"a409c57271e91b8b3a5755edec35ee8df0880a7d","unresolved":false,"context_lines":[{"line_number":53,"context_line":"        # If segmentation id and segmentation type are specified, validate"},{"line_number":54,"context_line":"        # client is submitting unique segmentation ids and valid segmentation"},{"line_number":55,"context_line":"        # types."},{"line_number":56,"context_line":"        if subport.get(\"segmentation_id\") in segmentation_ids:"},{"line_number":57,"context_line":"            msg \u003d _(\"Segmentation id \u0027%(seg_id)s\u0027 for\u0027%(subport)s\u0027 is not \""},{"line_number":58,"context_line":"                    \"unique\") % {\"seg_id\": subport.get(\"segmentation_id\"),"},{"line_number":59,"context_line":"                    \"subport\": subport[\"port_id\"]}"}],"source_content_type":"text/x-python","patch_set":11,"id":"bab6814e_31849c5c","line":56,"range":{"start_line":56,"start_character":11,"end_line":56,"end_character":62},"updated":"2016-05-20 18:53:03.000000000","message":"This is an O(n) operation executing over all of the subports, which makes this seem somewhat O(n^2). I think segmentation_ids needs to be a set rather than a list, so that this doesn\u0027t become a bottleneck for trunks with potentially up to 4095 subports.","commit_id":"aeb0f15027c17bba2b37a274afe873a47d6bd37b"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"38a67417b35497b3b53f600c34b5f921821a9ef0","unresolved":false,"context_lines":[{"line_number":53,"context_line":"        # If segmentation id and segmentation type are specified, validate"},{"line_number":54,"context_line":"        # client is submitting unique segmentation ids and valid segmentation"},{"line_number":55,"context_line":"        # types."},{"line_number":56,"context_line":"        if subport.get(\"segmentation_id\") in segmentation_ids:"},{"line_number":57,"context_line":"            msg \u003d _(\"Segmentation id \u0027%(seg_id)s\u0027 for\u0027%(subport)s\u0027 is not \""},{"line_number":58,"context_line":"                    \"unique\") % {\"seg_id\": subport.get(\"segmentation_id\"),"},{"line_number":59,"context_line":"                    \"subport\": subport[\"port_id\"]}"}],"source_content_type":"text/x-python","patch_set":11,"id":"bab6814e_8371ba78","line":56,"range":{"start_line":56,"start_character":11,"end_line":56,"end_character":62},"in_reply_to":"bab6814e_31849c5c","updated":"2016-05-20 21:44:05.000000000","message":"I am actually working on the neutron-lib version of this, and I am still going through defining what this validator is meant to do, that\u0027s a good point though. I had initially initialized it as a set().","commit_id":"aeb0f15027c17bba2b37a274afe873a47d6bd37b"},{"author":{"_account_id":16800,"name":"Rawlin Peters","email":"rawlin.peters@hpe.com","username":"rawlin"},"change_message_id":"803320ddae23105e8df714d0ae682a54a2031e2b","unresolved":false,"context_lines":[{"line_number":61,"context_line":"            return msg"},{"line_number":62,"context_line":"        if \"segmentation_id\" in subport:"},{"line_number":63,"context_line":"            segmentation_ids.append(subport[\"segmentation_id\"])"},{"line_number":64,"context_line":"        elif len(subport.keys()) \u003e 1:"},{"line_number":65,"context_line":"            msg \u003d _(\"Invalid subport details \u0027%s\u0027: missing parameters. Must \""},{"line_number":66,"context_line":"                    \"specify at least port_id or segmentation_id with \""},{"line_number":67,"context_line":"                    \"segmentation_type\") % subport"}],"source_content_type":"text/x-python","patch_set":11,"id":"bab6814e_b7151c41","line":64,"range":{"start_line":64,"start_character":13,"end_line":64,"end_character":32},"updated":"2016-05-20 19:36:08.000000000","message":"len(dict) returns the # of keys in that dict","commit_id":"aeb0f15027c17bba2b37a274afe873a47d6bd37b"},{"author":{"_account_id":16800,"name":"Rawlin Peters","email":"rawlin.peters@hpe.com","username":"rawlin"},"change_message_id":"ba36f9f7d3046415eccf5deeb381b94218974762","unresolved":false,"context_lines":[{"line_number":58,"context_line":"        # Validate that both segmentation id and segmentation type are"},{"line_number":59,"context_line":"        # specified, and that the client does not duplicate segmentation"},{"line_number":60,"context_line":"        # ids"},{"line_number":61,"context_line":"        segmentation_id \u003d subport.get(\"segmentation_id\")"},{"line_number":62,"context_line":"        segmentation_type \u003d subport.get(\"segmentation_type\")"},{"line_number":63,"context_line":"        if (not segmentation_id or not segmentation_type) and len(subport) \u003e 1:"},{"line_number":64,"context_line":"            msg \u003d _(\"Invalid subport details \u0027%s\u0027: missing parameters. Must \""},{"line_number":65,"context_line":"                    \"specify at least port_id or segmentation_id with \""}],"source_content_type":"text/x-python","patch_set":16,"id":"bab6814e_7ba03aa6","line":62,"range":{"start_line":61,"start_character":8,"end_line":62,"end_character":60},"updated":"2016-05-24 17:23:53.000000000","message":"So, we expect clients to provide these keys, but the values must be None or \"\" if they want the server to choose the values?","commit_id":"56b15308cdaae1afa2e42f62f544f505bf7b6010"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"ce4394e30beafc954df5cc36762947587b2f67e0","unresolved":false,"context_lines":[{"line_number":58,"context_line":"        # Validate that both segmentation id and segmentation type are"},{"line_number":59,"context_line":"        # specified, and that the client does not duplicate segmentation"},{"line_number":60,"context_line":"        # ids"},{"line_number":61,"context_line":"        segmentation_id \u003d subport.get(\"segmentation_id\")"},{"line_number":62,"context_line":"        segmentation_type \u003d subport.get(\"segmentation_type\")"},{"line_number":63,"context_line":"        if (not segmentation_id or not segmentation_type) and len(subport) \u003e 1:"},{"line_number":64,"context_line":"            msg \u003d _(\"Invalid subport details \u0027%s\u0027: missing parameters. Must \""},{"line_number":65,"context_line":"                    \"specify at least port_id or segmentation_id with \""}],"source_content_type":"text/x-python","patch_set":16,"id":"bab6814e_3eb9802f","line":62,"range":{"start_line":61,"start_character":8,"end_line":62,"end_character":60},"in_reply_to":"bab6814e_7ba03aa6","updated":"2016-05-24 17:27:09.000000000","message":"This check ensures that either None or empty strings slip through the validation net.","commit_id":"56b15308cdaae1afa2e42f62f544f505bf7b6010"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"9b9cd447bbd5ac22e04887b1915f9f2ca90740ea","unresolved":false,"context_lines":[{"line_number":87,"context_line":"                      \u0027validate\u0027:"},{"line_number":88,"context_line":"                          {\u0027type:string\u0027: attr.TENANT_ID_MAX_LEN},"},{"line_number":89,"context_line":"                      \u0027is_visible\u0027: True},"},{"line_number":90,"context_line":"        \u0027port_id\u0027: {\u0027allow_post\u0027: True, \u0027allow_put\u0027: True,"},{"line_number":91,"context_line":"                    \u0027required_by_policy\u0027: True,"},{"line_number":92,"context_line":"                    \u0027validate\u0027: {\u0027type:uuid\u0027: None},"},{"line_number":93,"context_line":"                    \u0027is_visible\u0027: True},"}],"source_content_type":"text/x-python","patch_set":16,"id":"bab6814e_f6b8e6ea","line":90,"updated":"2016-05-24 07:10:37.000000000","message":"Cannot find an interface for updating trunks @https://review.openstack.org/#/c/281723/16/neutron/services/trunk/plugin.py","commit_id":"56b15308cdaae1afa2e42f62f544f505bf7b6010"},{"author":{"_account_id":16800,"name":"Rawlin Peters","email":"rawlin.peters@hpe.com","username":"rawlin"},"change_message_id":"ba36f9f7d3046415eccf5deeb381b94218974762","unresolved":false,"context_lines":[{"line_number":87,"context_line":"                      \u0027validate\u0027:"},{"line_number":88,"context_line":"                          {\u0027type:string\u0027: attr.TENANT_ID_MAX_LEN},"},{"line_number":89,"context_line":"                      \u0027is_visible\u0027: True},"},{"line_number":90,"context_line":"        \u0027port_id\u0027: {\u0027allow_post\u0027: True, \u0027allow_put\u0027: True,"},{"line_number":91,"context_line":"                    \u0027required_by_policy\u0027: True,"},{"line_number":92,"context_line":"                    \u0027validate\u0027: {\u0027type:uuid\u0027: None},"},{"line_number":93,"context_line":"                    \u0027is_visible\u0027: True},"}],"source_content_type":"text/x-python","patch_set":16,"id":"bab6814e_9e0d0c3a","line":90,"in_reply_to":"bab6814e_38eebbec","updated":"2016-05-24 17:23:53.000000000","message":"\u003e Adding/removing subports should suffice, and I am not sure changing the parent of a trunk makes sense.\n\nI think I agree with this. We can still update the parent port of the trunk to change its fixed_ip or qos_policy for instance just like any other regular port. Those kinds of updates don\u0027t pertain to the trunk object; only adding/removing subports do. Changing the parent port of a trunk port would be like updating a regular port to belong to a different network, which doesn\u0027t seem to be supported.","commit_id":"56b15308cdaae1afa2e42f62f544f505bf7b6010"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"4da73eb72dc32c8fc52ceb181f1c43b6c54c4efc","unresolved":false,"context_lines":[{"line_number":87,"context_line":"                      \u0027validate\u0027:"},{"line_number":88,"context_line":"                          {\u0027type:string\u0027: attr.TENANT_ID_MAX_LEN},"},{"line_number":89,"context_line":"                      \u0027is_visible\u0027: True},"},{"line_number":90,"context_line":"        \u0027port_id\u0027: {\u0027allow_post\u0027: True, \u0027allow_put\u0027: True,"},{"line_number":91,"context_line":"                    \u0027required_by_policy\u0027: True,"},{"line_number":92,"context_line":"                    \u0027validate\u0027: {\u0027type:uuid\u0027: None},"},{"line_number":93,"context_line":"                    \u0027is_visible\u0027: True},"}],"source_content_type":"text/x-python","patch_set":16,"id":"bab6814e_25a496b7","line":90,"in_reply_to":"bab6814e_590c4c94","updated":"2016-05-25 15:45:00.000000000","message":"good catch, I think this should match the other attributes.","commit_id":"56b15308cdaae1afa2e42f62f544f505bf7b6010"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"d8592e9dbaf8bba996e7226c075be60f7a409b7e","unresolved":false,"context_lines":[{"line_number":87,"context_line":"                      \u0027validate\u0027:"},{"line_number":88,"context_line":"                          {\u0027type:string\u0027: attr.TENANT_ID_MAX_LEN},"},{"line_number":89,"context_line":"                      \u0027is_visible\u0027: True},"},{"line_number":90,"context_line":"        \u0027port_id\u0027: {\u0027allow_post\u0027: True, \u0027allow_put\u0027: True,"},{"line_number":91,"context_line":"                    \u0027required_by_policy\u0027: True,"},{"line_number":92,"context_line":"                    \u0027validate\u0027: {\u0027type:uuid\u0027: None},"},{"line_number":93,"context_line":"                    \u0027is_visible\u0027: True},"}],"source_content_type":"text/x-python","patch_set":16,"id":"bab6814e_590c4c94","line":90,"in_reply_to":"bab6814e_7e81484d","updated":"2016-05-25 03:36:59.000000000","message":"Found \"\u0027allow_put\u0027: True\" but no corresponding \"update_xxx\" for handling the same .. Hence, the confusion has happened..","commit_id":"56b15308cdaae1afa2e42f62f544f505bf7b6010"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"ce4394e30beafc954df5cc36762947587b2f67e0","unresolved":false,"context_lines":[{"line_number":87,"context_line":"                      \u0027validate\u0027:"},{"line_number":88,"context_line":"                          {\u0027type:string\u0027: attr.TENANT_ID_MAX_LEN},"},{"line_number":89,"context_line":"                      \u0027is_visible\u0027: True},"},{"line_number":90,"context_line":"        \u0027port_id\u0027: {\u0027allow_post\u0027: True, \u0027allow_put\u0027: True,"},{"line_number":91,"context_line":"                    \u0027required_by_policy\u0027: True,"},{"line_number":92,"context_line":"                    \u0027validate\u0027: {\u0027type:uuid\u0027: None},"},{"line_number":93,"context_line":"                    \u0027is_visible\u0027: True},"}],"source_content_type":"text/x-python","patch_set":16,"id":"bab6814e_7e81484d","line":90,"in_reply_to":"bab6814e_9e0d0c3a","updated":"2016-05-24 17:27:09.000000000","message":"well put.","commit_id":"56b15308cdaae1afa2e42f62f544f505bf7b6010"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"031e7592af794eb5659dff9f844c8bc07db77fcd","unresolved":false,"context_lines":[{"line_number":87,"context_line":"                      \u0027validate\u0027:"},{"line_number":88,"context_line":"                          {\u0027type:string\u0027: attr.TENANT_ID_MAX_LEN},"},{"line_number":89,"context_line":"                      \u0027is_visible\u0027: True},"},{"line_number":90,"context_line":"        \u0027port_id\u0027: {\u0027allow_post\u0027: True, \u0027allow_put\u0027: True,"},{"line_number":91,"context_line":"                    \u0027required_by_policy\u0027: True,"},{"line_number":92,"context_line":"                    \u0027validate\u0027: {\u0027type:uuid\u0027: None},"},{"line_number":93,"context_line":"                    \u0027is_visible\u0027: True},"}],"source_content_type":"text/x-python","patch_set":16,"id":"bab6814e_38eebbec","line":90,"in_reply_to":"bab6814e_f6b8e6ea","updated":"2016-05-24 16:05:37.000000000","message":"who said we want to expose one? :)\n\nAdding/removing subports should suffice, and I am not sure changing the parent of a trunk makes sense.","commit_id":"56b15308cdaae1afa2e42f62f544f505bf7b6010"},{"author":{"_account_id":4187,"name":"Ryan Tidwell","email":"rtidwell@suse.com","username":"ryan-tidwell"},"change_message_id":"a76428a8c0083902951f77dd2c0b0372cd560924","unresolved":false,"context_lines":[{"line_number":106,"context_line":""},{"line_number":107,"context_line":"    @classmethod"},{"line_number":108,"context_line":"    def get_name(cls):"},{"line_number":109,"context_line":"        return \"Trunk Extension - expose trunk resources\""},{"line_number":110,"context_line":""},{"line_number":111,"context_line":"    @classmethod"},{"line_number":112,"context_line":"    def get_alias(cls):"}],"source_content_type":"text/x-python","patch_set":20,"id":"9abb7d3a_34737fb3","line":109,"updated":"2016-05-27 16:06:25.000000000","message":"nit: should we shrink this string a little?","commit_id":"2b1d6978e2003f90fc4b993420bd8907602412a3"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"91be0274302b093421a8d810b27f60de62431213","unresolved":false,"context_lines":[{"line_number":106,"context_line":""},{"line_number":107,"context_line":"    @classmethod"},{"line_number":108,"context_line":"    def get_name(cls):"},{"line_number":109,"context_line":"        return \"Trunk Extension - expose trunk resources\""},{"line_number":110,"context_line":""},{"line_number":111,"context_line":"    @classmethod"},{"line_number":112,"context_line":"    def get_alias(cls):"}],"source_content_type":"text/x-python","patch_set":20,"id":"9abb7d3a_ab09cd33","line":109,"in_reply_to":"9abb7d3a_34737fb3","updated":"2016-05-27 17:03:05.000000000","message":"Sure!, I hate it when I do a ext-list and I see nothing but the slim meaningless, but this one is not that much better. Since everyone seems to like the slim version, we might as well be morse.","commit_id":"2b1d6978e2003f90fc4b993420bd8907602412a3"},{"author":{"_account_id":4187,"name":"Ryan Tidwell","email":"rtidwell@suse.com","username":"ryan-tidwell"},"change_message_id":"a76428a8c0083902951f77dd2c0b0372cd560924","unresolved":false,"context_lines":[{"line_number":114,"context_line":""},{"line_number":115,"context_line":"    @classmethod"},{"line_number":116,"context_line":"    def get_description(cls):"},{"line_number":117,"context_line":"        return \"Trunk Extension - expose trunk resources\""},{"line_number":118,"context_line":""},{"line_number":119,"context_line":"    @classmethod"},{"line_number":120,"context_line":"    def get_updated(cls):"}],"source_content_type":"text/x-python","patch_set":20,"id":"9abb7d3a_9496ab92","line":117,"updated":"2016-05-27 16:06:25.000000000","message":"nit: \"expose trunk and subport resources\"?","commit_id":"2b1d6978e2003f90fc4b993420bd8907602412a3"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"91be0274302b093421a8d810b27f60de62431213","unresolved":false,"context_lines":[{"line_number":114,"context_line":""},{"line_number":115,"context_line":"    @classmethod"},{"line_number":116,"context_line":"    def get_description(cls):"},{"line_number":117,"context_line":"        return \"Trunk Extension - expose trunk resources\""},{"line_number":118,"context_line":""},{"line_number":119,"context_line":"    @classmethod"},{"line_number":120,"context_line":"    def get_updated(cls):"}],"source_content_type":"text/x-python","patch_set":20,"id":"9abb7d3a_0b07391d","line":117,"in_reply_to":"9abb7d3a_9496ab92","updated":"2016-05-27 17:03:05.000000000","message":"Done","commit_id":"2b1d6978e2003f90fc4b993420bd8907602412a3"}],"neutron/extensions/trunk_details.py":[{"author":{"_account_id":17120,"name":"Manjeet Singh Bhatia","email":"manjeet.s.bhatia@intel.com","username":"manjeets"},"change_message_id":"b9b75e6d84cc7c79d1a9d673fab8d9a16210b4ab","unresolved":false,"context_lines":[{"line_number":30,"context_line":""},{"line_number":31,"context_line":"    @classmethod"},{"line_number":32,"context_line":"    def get_name(cls):"},{"line_number":33,"context_line":"        return \"Trunk Extension - provide trunk details for ports\""},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"    @classmethod"},{"line_number":36,"context_line":"    def get_alias(cls):"}],"source_content_type":"text/x-python","patch_set":10,"id":"bab6814e_86ef17e8","line":33,"range":{"start_line":33,"start_character":34,"end_line":33,"end_character":64},"updated":"2016-05-20 16:04:38.000000000","message":"I guess it gives name not details which description will give.","commit_id":"7f69df9c1b0b70ea745eef387b7237203ae2d030"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"3246f7aaaa63bd8388e55f7654e6a818cc284c5d","unresolved":false,"context_lines":[{"line_number":30,"context_line":""},{"line_number":31,"context_line":"    @classmethod"},{"line_number":32,"context_line":"    def get_name(cls):"},{"line_number":33,"context_line":"        return \"Trunk Extension - provide trunk details for ports\""},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"    @classmethod"},{"line_number":36,"context_line":"    def get_alias(cls):"}],"source_content_type":"text/x-python","patch_set":10,"id":"bab6814e_1c67f6e9","line":33,"range":{"start_line":33,"start_character":34,"end_line":33,"end_character":64},"in_reply_to":"bab6814e_86ef17e8","updated":"2016-05-20 16:28:29.000000000","message":"the content returned by this method what is exposed through the ext-list command.","commit_id":"7f69df9c1b0b70ea745eef387b7237203ae2d030"}],"neutron/plugins/common/constants.py":[{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"b775bc51c4aec654794dfc4dac12c476c3f36fee","unresolved":false,"context_lines":[{"line_number":37,"context_line":"    \u0027metering\u0027: METERING,"},{"line_number":38,"context_line":"    \u0027router\u0027: L3_ROUTER_NAT,"},{"line_number":39,"context_line":"    \u0027qos\u0027: QOS,"},{"line_number":40,"context_line":"    \u0027TRUNK\u0027: TRUNK,"},{"line_number":41,"context_line":"}"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"# Maps default service plugins entry points to their extension aliases"}],"source_content_type":"text/x-python","patch_set":3,"id":"dab17558_2a86dcda","line":40,"updated":"2016-05-10 23:39:44.000000000","message":"this is not a core plugin extension.","commit_id":"7b224f635794cf660795f80679bf1286ef1bf323"}],"neutron/services/trunk/plugin.py":[{"author":{"_account_id":17120,"name":"Manjeet Singh Bhatia","email":"manjeet.s.bhatia@intel.com","username":"manjeets"},"change_message_id":"b9b75e6d84cc7c79d1a9d673fab8d9a16210b4ab","unresolved":false,"context_lines":[{"line_number":39,"context_line":"        return \"trunk\""},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"    def get_trunk(self, context, id, fields\u003dNone):"},{"line_number":42,"context_line":"        return {\u0027tenant_id\u0027: context.tenant_id}"},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"    def get_trunks(self, context, filters\u003dNone, fields\u003dNone,"},{"line_number":45,"context_line":"                   sorts\u003dNone, limit\u003dNone, marker\u003dNone, page_reverse\u003dFalse):"}],"source_content_type":"text/x-python","patch_set":10,"id":"bab6814e_a67fbbde","line":42,"range":{"start_line":42,"start_character":17,"end_line":42,"end_character":46},"updated":"2016-05-20 16:04:38.000000000","message":"should\u0027nt it meant to give trunk_id or name or is that same as tenant id ?","commit_id":"7f69df9c1b0b70ea745eef387b7237203ae2d030"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"3246f7aaaa63bd8388e55f7654e6a818cc284c5d","unresolved":false,"context_lines":[{"line_number":39,"context_line":"        return \"trunk\""},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"    def get_trunk(self, context, id, fields\u003dNone):"},{"line_number":42,"context_line":"        return {\u0027tenant_id\u0027: context.tenant_id}"},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"    def get_trunks(self, context, filters\u003dNone, fields\u003dNone,"},{"line_number":45,"context_line":"                   sorts\u003dNone, limit\u003dNone, marker\u003dNone, page_reverse\u003dFalse):"}],"source_content_type":"text/x-python","patch_set":10,"id":"bab6814e_dca72e09","line":42,"range":{"start_line":42,"start_character":17,"end_line":42,"end_character":46},"in_reply_to":"bab6814e_a67fbbde","updated":"2016-05-20 16:28:29.000000000","message":"this is just a placeholder","commit_id":"7f69df9c1b0b70ea745eef387b7237203ae2d030"}],"neutron/tests/etc/policy.json":[{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"aa4b129b2fa00bef99643dbe21869247b766c7e0","unresolved":false,"context_lines":[{"line_number":224,"context_line":"    \"get_trunk\": \"rule:admin_or_owner\","},{"line_number":225,"context_line":"    \"delete_trunk\": \"rule:admin_or_owner\","},{"line_number":226,"context_line":"    \"add_subports\": \"rule:admin_or_owner\","},{"line_number":227,"context_line":"    \"remove_subports\": \"rule:admin_or_owner\""},{"line_number":228,"context_line":"}"}],"source_content_type":"application/json","patch_set":20,"id":"bab6814e_8d7f44df","line":227,"updated":"2016-05-26 10:17:20.000000000","message":"Can\u0027t find \u0027get_subports\u0027","commit_id":"2b1d6978e2003f90fc4b993420bd8907602412a3"}],"neutron/tests/unit/db/test_trunk_db.py":[{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"b8547730240e82ecc5b6a89bb14022acaa5b164b","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2011 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":"9aed3d3a_e25812fd","line":1,"updated":"2016-02-26 12:25:06.000000000","message":"2016","commit_id":"7b224f635794cf660795f80679bf1286ef1bf323"}],"setup.cfg":[{"author":{"_account_id":16800,"name":"Rawlin Peters","email":"rawlin.peters@hpe.com","username":"rawlin"},"change_message_id":"dd8ed7dd3379b526c3c251216847bd076ec30c15","unresolved":false,"context_lines":[{"line_number":82,"context_line":"    segments \u003d neutron.services.segments.plugin:Plugin"},{"line_number":83,"context_line":"    network_ip_availability \u003d neutron.services.network_ip_availability.plugin:NetworkIPAvailabilityPlugin"},{"line_number":84,"context_line":"    timestamp_core \u003d neutron.services.timestamp.timestamp_plugin:TimeStampPlugin"},{"line_number":85,"context_line":"    trunk \u003d neutron.services.trunk.plugin.TrunkPlugin"},{"line_number":86,"context_line":"neutron.qos.notification_drivers \u003d"},{"line_number":87,"context_line":"    message_queue \u003d neutron.services.qos.notification_drivers.message_queue:RpcQosServiceNotificationDriver"},{"line_number":88,"context_line":"neutron.ml2.type_drivers \u003d"}],"source_content_type":"text/x-ttcn-cfg","patch_set":22,"id":"9abb7d3a_1fb37499","line":85,"range":{"start_line":85,"start_character":41,"end_line":85,"end_character":42},"updated":"2016-05-31 16:41:08.000000000","message":"does this need to be a colon?","commit_id":"41d1e83cd5ac3196b62ee61ccb8d56ec0b0d3065"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"ca0ebbc2f9fb85f76cb9ff29b37b1747c2ac45d9","unresolved":false,"context_lines":[{"line_number":82,"context_line":"    segments \u003d neutron.services.segments.plugin:Plugin"},{"line_number":83,"context_line":"    network_ip_availability \u003d neutron.services.network_ip_availability.plugin:NetworkIPAvailabilityPlugin"},{"line_number":84,"context_line":"    timestamp_core \u003d neutron.services.timestamp.timestamp_plugin:TimeStampPlugin"},{"line_number":85,"context_line":"    trunk \u003d neutron.services.trunk.plugin.TrunkPlugin"},{"line_number":86,"context_line":"neutron.qos.notification_drivers \u003d"},{"line_number":87,"context_line":"    message_queue \u003d neutron.services.qos.notification_drivers.message_queue:RpcQosServiceNotificationDriver"},{"line_number":88,"context_line":"neutron.ml2.type_drivers \u003d"}],"source_content_type":"text/x-ttcn-cfg","patch_set":22,"id":"9abb7d3a_3e959986","line":85,"range":{"start_line":85,"start_character":41,"end_line":85,"end_character":42},"in_reply_to":"9abb7d3a_1fb37499","updated":"2016-05-31 17:05:18.000000000","message":"doh!","commit_id":"41d1e83cd5ac3196b62ee61ccb8d56ec0b0d3065"}]}
