)]}'
{"zun/api/controllers/v1/containers.py":[{"author":{"_account_id":23365,"name":"feng.shengqin","email":"feng.shengqin@zte.com.cn","username":"FengShengqin"},"change_message_id":"5ec2f79596836e45a98b40a47c4d9a0f9d8d3c9b","unresolved":false,"context_lines":[{"line_number":448,"context_line":""},{"line_number":449,"context_line":"        context \u003d pecan.request.context"},{"line_number":450,"context_line":"        compute_api \u003d pecan.request.compute_api"},{"line_number":451,"context_line":"        security_group_id \u003d self._check_security_group(context, security_group)"},{"line_number":452,"context_line":"        compute_api.remove_security_group(context, container,"},{"line_number":453,"context_line":"                                          security_group_id)"},{"line_number":454,"context_line":"        pecan.response.status \u003d 202"}],"source_content_type":"text/x-python","patch_set":4,"id":"7f96bb07_b9aed695","line":451,"range":{"start_line":451,"start_character":33,"end_line":451,"end_character":54},"updated":"2018-01-16 01:47:01.000000000","message":"_check_security_group just check the security group whether be created by neutron.\nIMO, it\u0027s better to check the security group has been added to the container. If not, we needn\u0027t remove.","commit_id":"b0d9893bf73045737fd3aec0c0e3bacb50845d1b"},{"author":{"_account_id":16190,"name":"dharmalingam","email":"cooldharma06@gmail.com","username":"cooldharma06"},"change_message_id":"cbe5c47b3bd408783ee0ef37c636f06fb26aabc4","unresolved":false,"context_lines":[{"line_number":448,"context_line":""},{"line_number":449,"context_line":"        context \u003d pecan.request.context"},{"line_number":450,"context_line":"        compute_api \u003d pecan.request.compute_api"},{"line_number":451,"context_line":"        security_group_id \u003d self._check_security_group(context, security_group)"},{"line_number":452,"context_line":"        compute_api.remove_security_group(context, container,"},{"line_number":453,"context_line":"                                          security_group_id)"},{"line_number":454,"context_line":"        pecan.response.status \u003d 202"}],"source_content_type":"text/x-python","patch_set":4,"id":"7f96bb07_febe28d3","line":451,"range":{"start_line":451,"start_character":33,"end_line":451,"end_character":54},"in_reply_to":"7f96bb07_8657d926","updated":"2018-01-18 07:10:27.000000000","message":"@hongbin thank you. i added the check.","commit_id":"b0d9893bf73045737fd3aec0c0e3bacb50845d1b"},{"author":{"_account_id":11536,"name":"hongbin","email":"hongbin034@gmail.com","username":"hongbin"},"change_message_id":"53387f22775725075690d13f64a6c15a1fe5bc56","unresolved":false,"context_lines":[{"line_number":448,"context_line":""},{"line_number":449,"context_line":"        context \u003d pecan.request.context"},{"line_number":450,"context_line":"        compute_api \u003d pecan.request.compute_api"},{"line_number":451,"context_line":"        security_group_id \u003d self._check_security_group(context, security_group)"},{"line_number":452,"context_line":"        compute_api.remove_security_group(context, container,"},{"line_number":453,"context_line":"                                          security_group_id)"},{"line_number":454,"context_line":"        pecan.response.status \u003d 202"}],"source_content_type":"text/x-python","patch_set":4,"id":"7f96bb07_8657d926","line":451,"range":{"start_line":451,"start_character":33,"end_line":451,"end_character":54},"in_reply_to":"7f96bb07_b9aed695","updated":"2018-01-16 16:16:15.000000000","message":"+1.\n\n@Chaolei, you could reference this as an example: https://review.openstack.org/#/c/533573/2/zun/api/controllers/v1/containers.py","commit_id":"b0d9893bf73045737fd3aec0c0e3bacb50845d1b"}],"zun/api/controllers/v1/schemas/containers.py":[{"author":{"_account_id":11536,"name":"hongbin","email":"hongbin034@gmail.com","username":"hongbin"},"change_message_id":"8588737c6069a1d051b9ac94fd002edeb9b2c05e","unresolved":false,"context_lines":[{"line_number":176,"context_line":"            \u0027minLength\u0027: 1,"},{"line_number":177,"context_line":"            \u0027maxLength\u0027: 255"},{"line_number":178,"context_line":"        },"},{"line_number":179,"context_line":"        \u0027uuid\u0027: {"},{"line_number":180,"context_line":"            \u0027type\u0027: \u0027string\u0027,"},{"line_number":181,"context_line":"            \u0027minLength\u0027: 2,"},{"line_number":182,"context_line":"            \u0027maxLength\u0027: 255,"}],"source_content_type":"text/x-python","patch_set":3,"id":"7f96bb07_82cf3e7e","line":179,"range":{"start_line":179,"start_character":9,"end_line":179,"end_character":13},"updated":"2018-01-11 19:50:38.000000000","message":"I don\u0027t this perperty should be removed. According to your implementation, the \u0027name\u0027 key can be either a name or uuid so this \u0027uuid\u0027 key is not used.","commit_id":"4ccfe7a1cc2c89c48ff5e6644d958242ae6a5b13"},{"author":{"_account_id":16190,"name":"dharmalingam","email":"cooldharma06@gmail.com","username":"cooldharma06"},"change_message_id":"d8dd0c999520c0a1b8d98a14ce19f43fbb891086","unresolved":false,"context_lines":[{"line_number":176,"context_line":"            \u0027minLength\u0027: 1,"},{"line_number":177,"context_line":"            \u0027maxLength\u0027: 255"},{"line_number":178,"context_line":"        },"},{"line_number":179,"context_line":"        \u0027uuid\u0027: {"},{"line_number":180,"context_line":"            \u0027type\u0027: \u0027string\u0027,"},{"line_number":181,"context_line":"            \u0027minLength\u0027: 2,"},{"line_number":182,"context_line":"            \u0027maxLength\u0027: 255,"}],"source_content_type":"text/x-python","patch_set":3,"id":"7f96bb07_16ea8274","line":179,"range":{"start_line":179,"start_character":9,"end_line":179,"end_character":13},"in_reply_to":"7f96bb07_82cf3e7e","updated":"2018-01-12 06:02:10.000000000","message":"Done","commit_id":"4ccfe7a1cc2c89c48ff5e6644d958242ae6a5b13"},{"author":{"_account_id":23365,"name":"feng.shengqin","email":"feng.shengqin@zte.com.cn","username":"FengShengqin"},"change_message_id":"5ec2f79596836e45a98b40a47c4d9a0f9d8d3c9b","unresolved":false,"context_lines":[{"line_number":167,"context_line":"    \u0027additionalProperties\u0027: False"},{"line_number":168,"context_line":"}"},{"line_number":169,"context_line":""},{"line_number":170,"context_line":"remove_security_group \u003d {"},{"line_number":171,"context_line":"    \u0027type\u0027: \u0027object\u0027,"},{"line_number":172,"context_line":"    \u0027properties\u0027: {"},{"line_number":173,"context_line":"        \u0027name\u0027: {"}],"source_content_type":"text/x-python","patch_set":4,"id":"7f96bb07_99099a2d","line":170,"range":{"start_line":170,"start_character":0,"end_line":170,"end_character":21},"updated":"2018-01-16 01:47:01.000000000","message":"hi,cooldharma06.\nI have a small suggestion:\nremove_security_group \u003d copy.deepcopy(add_security_group)","commit_id":"b0d9893bf73045737fd3aec0c0e3bacb50845d1b"},{"author":{"_account_id":16190,"name":"dharmalingam","email":"cooldharma06@gmail.com","username":"cooldharma06"},"change_message_id":"cbe5c47b3bd408783ee0ef37c636f06fb26aabc4","unresolved":false,"context_lines":[{"line_number":167,"context_line":"    \u0027additionalProperties\u0027: False"},{"line_number":168,"context_line":"}"},{"line_number":169,"context_line":""},{"line_number":170,"context_line":"remove_security_group \u003d {"},{"line_number":171,"context_line":"    \u0027type\u0027: \u0027object\u0027,"},{"line_number":172,"context_line":"    \u0027properties\u0027: {"},{"line_number":173,"context_line":"        \u0027name\u0027: {"}],"source_content_type":"text/x-python","patch_set":4,"id":"7f96bb07_7e977849","line":170,"range":{"start_line":170,"start_character":0,"end_line":170,"end_character":21},"in_reply_to":"7f96bb07_99099a2d","updated":"2018-01-18 07:10:27.000000000","message":"@feng, thank you","commit_id":"b0d9893bf73045737fd3aec0c0e3bacb50845d1b"}],"zun/common/exception.py":[{"author":{"_account_id":10206,"name":"Madhuri Kumari","email":"madhuri.kumari@intel.com","username":"Madhuri"},"change_message_id":"c32401af0c61f16d7c6c813563eb11b351dafe9d","unresolved":false,"context_lines":[{"line_number":662,"context_line":""},{"line_number":663,"context_line":""},{"line_number":664,"context_line":"class SecurityGroupCannotBeRemoved(Invalid):"},{"line_number":665,"context_line":"    message \u003d _(\"Security groups cannot removed from the container.\")"},{"line_number":666,"context_line":""},{"line_number":667,"context_line":""},{"line_number":668,"context_line":"class ContainerActionNotFound(ZunException):"}],"source_content_type":"text/x-python","patch_set":4,"id":"7f96bb07_890b537b","line":665,"range":{"start_line":665,"start_character":33,"end_line":665,"end_character":40},"updated":"2018-01-17 09:45:02.000000000","message":"s/cannot/cannot be/","commit_id":"b0d9893bf73045737fd3aec0c0e3bacb50845d1b"},{"author":{"_account_id":16190,"name":"dharmalingam","email":"cooldharma06@gmail.com","username":"cooldharma06"},"change_message_id":"cbe5c47b3bd408783ee0ef37c636f06fb26aabc4","unresolved":false,"context_lines":[{"line_number":662,"context_line":""},{"line_number":663,"context_line":""},{"line_number":664,"context_line":"class SecurityGroupCannotBeRemoved(Invalid):"},{"line_number":665,"context_line":"    message \u003d _(\"Security groups cannot removed from the container.\")"},{"line_number":666,"context_line":""},{"line_number":667,"context_line":""},{"line_number":668,"context_line":"class ContainerActionNotFound(ZunException):"}],"source_content_type":"text/x-python","patch_set":4,"id":"7f96bb07_3e9d7065","line":665,"range":{"start_line":665,"start_character":33,"end_line":665,"end_character":40},"in_reply_to":"7f96bb07_890b537b","updated":"2018-01-18 07:10:27.000000000","message":"Done","commit_id":"b0d9893bf73045737fd3aec0c0e3bacb50845d1b"}],"zun/network/kuryr_network.py":[{"author":{"_account_id":17812,"name":"chengyang","email":"374519141@qq.com","username":"chengyang"},"change_message_id":"78603852f941e16f392b528aefc3a267a475f4ef","unresolved":false,"context_lines":[{"line_number":355,"context_line":"        for port in neutron_ports:"},{"line_number":356,"context_line":"            if \u0027security_groups\u0027 not in port:"},{"line_number":357,"context_line":"                port[\u0027security_groups\u0027] \u003d []"},{"line_number":358,"context_line":"            port[\u0027security_groups\u0027].remove(security_group_ids[0])"},{"line_number":359,"context_line":"            updated_port \u003d {\u0027security_groups\u0027: port[\u0027security_groups\u0027]}"},{"line_number":360,"context_line":"            try:"},{"line_number":361,"context_line":"                LOG.info(\"Removing security group %(security_group_ids)s \""}],"source_content_type":"text/x-python","patch_set":2,"id":"df87a7cf_33f7d78d","line":358,"range":{"start_line":358,"start_character":0,"end_line":358,"end_character":65},"updated":"2017-12-12 07:08:41.000000000","message":"else:\n    port[security_groups].remove(security_group_ids[0])\nis better","commit_id":"16dbcc29ace76ed6b06ce146204fefbf5c5ba4c9"},{"author":{"_account_id":16190,"name":"dharmalingam","email":"cooldharma06@gmail.com","username":"cooldharma06"},"change_message_id":"532a0cc890ff01b4c2b19cf3e3c5191640bb48cd","unresolved":false,"context_lines":[{"line_number":355,"context_line":"        for port in neutron_ports:"},{"line_number":356,"context_line":"            if \u0027security_groups\u0027 not in port:"},{"line_number":357,"context_line":"                port[\u0027security_groups\u0027] \u003d []"},{"line_number":358,"context_line":"            port[\u0027security_groups\u0027].remove(security_group_ids[0])"},{"line_number":359,"context_line":"            updated_port \u003d {\u0027security_groups\u0027: port[\u0027security_groups\u0027]}"},{"line_number":360,"context_line":"            try:"},{"line_number":361,"context_line":"                LOG.info(\"Removing security group %(security_group_ids)s \""}],"source_content_type":"text/x-python","patch_set":2,"id":"df87a7cf_535dba76","line":358,"range":{"start_line":358,"start_character":0,"end_line":358,"end_character":65},"in_reply_to":"df87a7cf_33f7d78d","updated":"2017-12-13 05:06:23.000000000","message":"thanks for your comment. i think if statement itself not needed.","commit_id":"16dbcc29ace76ed6b06ce146204fefbf5c5ba4c9"},{"author":{"_account_id":11536,"name":"hongbin","email":"hongbin034@gmail.com","username":"hongbin"},"change_message_id":"8588737c6069a1d051b9ac94fd002edeb9b2c05e","unresolved":false,"context_lines":[{"line_number":372,"context_line":"            **search_opts).get(\u0027ports\u0027, [])"},{"line_number":373,"context_line":"        neutron_ports \u003d [p for p in neutron_ports if p[\u0027id\u0027] in port_ids]"},{"line_number":374,"context_line":"        for port in neutron_ports:"},{"line_number":375,"context_line":"            port[\u0027security_groups\u0027].remove(security_group_ids[0])"},{"line_number":376,"context_line":"            updated_port \u003d {\u0027security_groups\u0027: port[\u0027security_groups\u0027]}"},{"line_number":377,"context_line":"            try:"},{"line_number":378,"context_line":"                LOG.info(\"Removing security group %(security_group_ids)s \""}],"source_content_type":"text/x-python","patch_set":3,"id":"7f96bb07_b60abc23","line":375,"range":{"start_line":375,"start_character":61,"end_line":375,"end_character":64},"updated":"2018-01-11 19:50:38.000000000","message":"Minor issue: This looks a bit hacky because it assumes there is exactly one security group is given. It is better to avoid making such assumption. We can iterate the list of security_group_ids and remove each of them instead.","commit_id":"4ccfe7a1cc2c89c48ff5e6644d958242ae6a5b13"},{"author":{"_account_id":16190,"name":"dharmalingam","email":"cooldharma06@gmail.com","username":"cooldharma06"},"change_message_id":"d8dd0c999520c0a1b8d98a14ce19f43fbb891086","unresolved":false,"context_lines":[{"line_number":372,"context_line":"            **search_opts).get(\u0027ports\u0027, [])"},{"line_number":373,"context_line":"        neutron_ports \u003d [p for p in neutron_ports if p[\u0027id\u0027] in port_ids]"},{"line_number":374,"context_line":"        for port in neutron_ports:"},{"line_number":375,"context_line":"            port[\u0027security_groups\u0027].remove(security_group_ids[0])"},{"line_number":376,"context_line":"            updated_port \u003d {\u0027security_groups\u0027: port[\u0027security_groups\u0027]}"},{"line_number":377,"context_line":"            try:"},{"line_number":378,"context_line":"                LOG.info(\"Removing security group %(security_group_ids)s \""}],"source_content_type":"text/x-python","patch_set":3,"id":"7f96bb07_b6e14e9d","line":375,"range":{"start_line":375,"start_character":61,"end_line":375,"end_character":64},"in_reply_to":"7f96bb07_b60abc23","updated":"2018-01-12 06:02:10.000000000","message":"thank you for reviewing. In zun add-security-group we are able to add only one security group at a time. If multiple groups support needed means we can change the code.","commit_id":"4ccfe7a1cc2c89c48ff5e6644d958242ae6a5b13"},{"author":{"_account_id":11536,"name":"hongbin","email":"hongbin034@gmail.com","username":"hongbin"},"change_message_id":"bb7ba740d0e226b2e31c3951db23831ad501f136","unresolved":false,"context_lines":[{"line_number":372,"context_line":"            **search_opts).get(\u0027ports\u0027, [])"},{"line_number":373,"context_line":"        neutron_ports \u003d [p for p in neutron_ports if p[\u0027id\u0027] in port_ids]"},{"line_number":374,"context_line":"        for port in neutron_ports:"},{"line_number":375,"context_line":"            port[\u0027security_groups\u0027].remove(security_group_ids[0])"},{"line_number":376,"context_line":"            updated_port \u003d {\u0027security_groups\u0027: port[\u0027security_groups\u0027]}"},{"line_number":377,"context_line":"            try:"},{"line_number":378,"context_line":"                LOG.info(\"Removing security group %(security_group_ids)s \""}],"source_content_type":"text/x-python","patch_set":3,"id":"7f96bb07_bc0841d9","line":375,"range":{"start_line":375,"start_character":61,"end_line":375,"end_character":64},"in_reply_to":"7f96bb07_b6e14e9d","updated":"2018-01-12 15:58:22.000000000","message":"No, we don\u0027t need to add multiple security group at a time. Please disregard my previous comment and leave it as is.","commit_id":"4ccfe7a1cc2c89c48ff5e6644d958242ae6a5b13"},{"author":{"_account_id":10206,"name":"Madhuri Kumari","email":"madhuri.kumari@intel.com","username":"Madhuri"},"change_message_id":"c32401af0c61f16d7c6c813563eb11b351dafe9d","unresolved":false,"context_lines":[{"line_number":392,"context_line":"                    six.reraise(*exc_info)"},{"line_number":393,"context_line":"            except Exception:"},{"line_number":394,"context_line":"                with excutils.save_and_reraise_exception():"},{"line_number":395,"context_line":"                    LOG.exception(\"Neutron Error:\")"},{"line_number":396,"context_line":""},{"line_number":397,"context_line":"    def _refresh_neutron_extensions_cache(self):"},{"line_number":398,"context_line":"        \"\"\"Refresh the neutron extensions cache when necessary.\"\"\""}],"source_content_type":"text/x-python","patch_set":4,"id":"7f96bb07_69b0478b","line":395,"updated":"2018-01-17 09:45:02.000000000","message":"We should log the exception here.","commit_id":"b0d9893bf73045737fd3aec0c0e3bacb50845d1b"},{"author":{"_account_id":11536,"name":"hongbin","email":"hongbin034@gmail.com","username":"hongbin"},"change_message_id":"290a5eb41263446177d2dfd7ac40ac6af52524ab","unresolved":false,"context_lines":[{"line_number":392,"context_line":"                    six.reraise(*exc_info)"},{"line_number":393,"context_line":"            except Exception:"},{"line_number":394,"context_line":"                with excutils.save_and_reraise_exception():"},{"line_number":395,"context_line":"                    LOG.exception(\"Neutron Error:\")"},{"line_number":396,"context_line":""},{"line_number":397,"context_line":"    def _refresh_neutron_extensions_cache(self):"},{"line_number":398,"context_line":"        \"\"\"Refresh the neutron extensions cache when necessary.\"\"\""}],"source_content_type":"text/x-python","patch_set":4,"id":"7f96bb07_00011b06","line":395,"in_reply_to":"7f96bb07_3e4ed0c0","updated":"2018-01-18 17:42:34.000000000","message":"This is not needed because LOG.exception() will automatically print the exception message and the trace.\n\nReference: https://docs.openstack.org/oslo.log/latest/user/examples.html","commit_id":"b0d9893bf73045737fd3aec0c0e3bacb50845d1b"},{"author":{"_account_id":16190,"name":"dharmalingam","email":"cooldharma06@gmail.com","username":"cooldharma06"},"change_message_id":"cbe5c47b3bd408783ee0ef37c636f06fb26aabc4","unresolved":false,"context_lines":[{"line_number":392,"context_line":"                    six.reraise(*exc_info)"},{"line_number":393,"context_line":"            except Exception:"},{"line_number":394,"context_line":"                with excutils.save_and_reraise_exception():"},{"line_number":395,"context_line":"                    LOG.exception(\"Neutron Error:\")"},{"line_number":396,"context_line":""},{"line_number":397,"context_line":"    def _refresh_neutron_extensions_cache(self):"},{"line_number":398,"context_line":"        \"\"\"Refresh the neutron extensions cache when necessary.\"\"\""}],"source_content_type":"text/x-python","patch_set":4,"id":"7f96bb07_7ee9b8e3","line":395,"in_reply_to":"7f96bb07_69b0478b","updated":"2018-01-18 07:10:27.000000000","message":"@madhuri, can u give more info","commit_id":"b0d9893bf73045737fd3aec0c0e3bacb50845d1b"},{"author":{"_account_id":10206,"name":"Madhuri Kumari","email":"madhuri.kumari@intel.com","username":"Madhuri"},"change_message_id":"7faae3b8dc1afcb502301aaff1f38db9fea48cb0","unresolved":false,"context_lines":[{"line_number":392,"context_line":"                    six.reraise(*exc_info)"},{"line_number":393,"context_line":"            except Exception:"},{"line_number":394,"context_line":"                with excutils.save_and_reraise_exception():"},{"line_number":395,"context_line":"                    LOG.exception(\"Neutron Error:\")"},{"line_number":396,"context_line":""},{"line_number":397,"context_line":"    def _refresh_neutron_extensions_cache(self):"},{"line_number":398,"context_line":"        \"\"\"Refresh the neutron extensions cache when necessary.\"\"\""}],"source_content_type":"text/x-python","patch_set":4,"id":"7f96bb07_3e4ed0c0","line":395,"in_reply_to":"7f96bb07_7ee9b8e3","updated":"2018-01-18 07:21:17.000000000","message":"See below::\n  except Exception as e:\n    ...\n    LOG.exception(\"Neutron Error: %s\", e)","commit_id":"b0d9893bf73045737fd3aec0c0e3bacb50845d1b"}]}
