)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":11536,"name":"hongbin","email":"hongbin034@gmail.com","username":"hongbin"},"change_message_id":"506df41f8c1a04d5513d8f7e95a8b8c49361a85f","unresolved":false,"context_lines":[{"line_number":10,"context_line":"1.Test case can be found in bug description."},{"line_number":11,"context_line":"2.For the bug https://bugs.launchpad.net/zun/+bug/1707069 has not"},{"line_number":12,"context_line":"been fixed, modify zun/compute/manager.py line 272 as follows"},{"line_number":13,"context_line":"before test:"},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"sandbox_id \u003d container.get_sandbox_id()"},{"line_number":16,"context_line":"self.driver.add_security_group(context, container, security_group,"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"df3967d1_55dab34a","line":13,"range":{"start_line":13,"start_character":7,"end_line":13,"end_character":11},"updated":"2017-08-03 20:46:38.000000000","message":"Instead of asking people to manually hacking the code, it would be better to setup a dependency on the fixing patch. It could be as simple as:\n\n  $ git review -d Iafc13bd75c5b924c3727fa1995f6a285ec794885\n\nSee here for more information: https://docs.openstack.org/infra/manual/developers.html#adding-a-dependency","commit_id":"6a35c4449dfdbd79c6f0e59a497c248c3c4b7420"}],"zun/api/controllers/v1/containers.py":[{"author":{"_account_id":23365,"name":"feng.shengqin","email":"feng.shengqin@zte.com.cn","username":"FengShengqin"},"change_message_id":"7923a8593eaf4df7081302da45228f1b7e9b8ab4","unresolved":false,"context_lines":[{"line_number":320,"context_line":"        if security_group.get(\"uuid\"):"},{"line_number":321,"context_line":"            security_group_id \u003d security_group.get(\"uuid\")"},{"line_number":322,"context_line":"        else:"},{"line_number":323,"context_line":"            security_group_ids \u003d utils.\\"},{"line_number":324,"context_line":"                get_security_group_ids(context, [security_group[\u0027name\u0027]])"},{"line_number":325,"context_line":"            if len(security_group_ids) \u003e len(security_group):"},{"line_number":326,"context_line":"                msg \u003d _(\"Multiple security group matches \""},{"line_number":327,"context_line":"                        \"found for name %(name)s, use an ID \""}],"source_content_type":"text/x-python","patch_set":2,"id":"df3967d1_59168ef3","line":324,"range":{"start_line":323,"start_character":0,"end_line":324,"end_character":73},"updated":"2017-08-03 01:58:25.000000000","message":"security_group_ids \u003d utils.get_security_group_ids(\n    context, [security_group[\u0027name\u0027]])","commit_id":"4662833ceab31beed0f3c3307905ad49e7d15366"},{"author":{"_account_id":23365,"name":"feng.shengqin","email":"feng.shengqin@zte.com.cn","username":"FengShengqin"},"change_message_id":"7923a8593eaf4df7081302da45228f1b7e9b8ab4","unresolved":false,"context_lines":[{"line_number":326,"context_line":"                msg \u003d _(\"Multiple security group matches \""},{"line_number":327,"context_line":"                        \"found for name %(name)s, use an ID \""},{"line_number":328,"context_line":"                        \"to be more specific. \") % security_group"},{"line_number":329,"context_line":"                raise exception.InvalidValue(msg)"},{"line_number":330,"context_line":"            else:"},{"line_number":331,"context_line":"                security_group_id \u003d security_group_ids[0]"},{"line_number":332,"context_line":"        container_ports_detail \u003d utils.list_ports(context, container)"}],"source_content_type":"text/x-python","patch_set":2,"id":"df3967d1_d9439e12","line":329,"range":{"start_line":329,"start_character":32,"end_line":329,"end_character":44},"updated":"2017-08-03 01:58:25.000000000","message":"IMO, it\u0027s better to raise exception.Conflict","commit_id":"4662833ceab31beed0f3c3307905ad49e7d15366"},{"author":{"_account_id":23365,"name":"feng.shengqin","email":"feng.shengqin@zte.com.cn","username":"FengShengqin"},"change_message_id":"74a8235a5cdedad4c3093d19029e7a0053f28c65","unresolved":false,"context_lines":[{"line_number":313,"context_line":"        # check if security group already presnt in container"},{"line_number":314,"context_line":"        context \u003d pecan.request.context"},{"line_number":315,"context_line":"        compute_api \u003d pecan.request.compute_api"},{"line_number":316,"context_line":"        if security_group.get(\"uuid\"):"},{"line_number":317,"context_line":"            security_group_id \u003d security_group.get(\"uuid\")"},{"line_number":318,"context_line":"            if not uuidutils.is_uuid_like(security_group_id):"},{"line_number":319,"context_line":"                raise exception.InvalidUUID(uuid\u003dsecurity_group_id)"}],"source_content_type":"text/x-python","patch_set":4,"id":"df3967d1_64175e47","line":316,"range":{"start_line":316,"start_character":8,"end_line":316,"end_character":38},"updated":"2017-08-03 08:59:12.000000000","message":"When you use ListOfStringsField in object, \nyou may implement as follow:\n\nif uuidutils.is_uuid_like(security_group):\n    ....\nelse:\n    ....","commit_id":"6a35c4449dfdbd79c6f0e59a497c248c3c4b7420"},{"author":{"_account_id":17813,"name":"wangzhh","email":"wzh_1993@126.com","username":"wangzhh"},"change_message_id":"2245f62e9cb5eb910f11eeed53ba638f145022b5","unresolved":false,"context_lines":[{"line_number":313,"context_line":"        # check if security group already presnt in container"},{"line_number":314,"context_line":"        context \u003d pecan.request.context"},{"line_number":315,"context_line":"        compute_api \u003d pecan.request.compute_api"},{"line_number":316,"context_line":"        if security_group.get(\"uuid\"):"},{"line_number":317,"context_line":"            security_group_id \u003d security_group.get(\"uuid\")"},{"line_number":318,"context_line":"            if not uuidutils.is_uuid_like(security_group_id):"},{"line_number":319,"context_line":"                raise exception.InvalidUUID(uuid\u003dsecurity_group_id)"}],"source_content_type":"text/x-python","patch_set":4,"id":"df3967d1_8475a234","line":316,"range":{"start_line":316,"start_character":8,"end_line":316,"end_character":38},"in_reply_to":"df3967d1_64175e47","updated":"2017-08-03 09:12:22.000000000","message":"I imply it in line 318.","commit_id":"6a35c4449dfdbd79c6f0e59a497c248c3c4b7420"},{"author":{"_account_id":11536,"name":"hongbin","email":"hongbin034@gmail.com","username":"hongbin"},"change_message_id":"506df41f8c1a04d5513d8f7e95a8b8c49361a85f","unresolved":false,"context_lines":[{"line_number":330,"context_line":"                        \"to be more specific. \") % security_group"},{"line_number":331,"context_line":"                raise exception.Conflict(msg)"},{"line_number":332,"context_line":"            else:"},{"line_number":333,"context_line":"                security_group_id \u003d security_group_ids[0]"},{"line_number":334,"context_line":"        container_ports_detail \u003d utils.list_ports(context, container)"},{"line_number":335,"context_line":""},{"line_number":336,"context_line":"        for container_port_detail in container_ports_detail:"}],"source_content_type":"text/x-python","patch_set":4,"id":"df3967d1_35a16f47","line":333,"updated":"2017-08-03 20:46:38.000000000","message":"Hi @wangzhh,\n\nIt looks the security group validation logic becomes more complicated now. I think it is better to encapsulate the validation (line #316 - #333) into a method. Hope it will read better after the refactoring.","commit_id":"6a35c4449dfdbd79c6f0e59a497c248c3c4b7420"},{"author":{"_account_id":11536,"name":"hongbin","email":"hongbin034@gmail.com","username":"hongbin"},"change_message_id":"a63d8747050c4a4697628ed379c01ddebd3d2f9f","unresolved":false,"context_lines":[{"line_number":344,"context_line":"        try:"},{"line_number":345,"context_line":"            security_group_id \u003d self._check_security_group("},{"line_number":346,"context_line":"                context, security_group, container)"},{"line_number":347,"context_line":"        except Exception:"},{"line_number":348,"context_line":"            raise"},{"line_number":349,"context_line":"        compute_api.add_security_group(context, container,"},{"line_number":350,"context_line":"                                       security_group_id)"},{"line_number":351,"context_line":"        pecan.response.status \u003d 202"}],"source_content_type":"text/x-python","patch_set":5,"id":"bf3e73b7_6d88f270","line":348,"range":{"start_line":347,"start_character":8,"end_line":348,"end_character":17},"updated":"2017-08-05 15:41:34.000000000","message":"nit: this looks unnecessary. It catches an exception but doesn\u0027t do anything.","commit_id":"07a6c56fdf33e92b9814cb2431e827a0b7db7cbc"}],"zun/objects/container.py":[{"author":{"_account_id":23365,"name":"feng.shengqin","email":"feng.shengqin@zte.com.cn","username":"FengShengqin"},"change_message_id":"a4ffbd070e19077385751dae4be5ecc2e7942148","unresolved":false,"context_lines":[{"line_number":70,"context_line":"        \u0027image_driver\u0027: fields.StringField(nullable\u003dTrue),"},{"line_number":71,"context_line":"        \u0027websocket_url\u0027: fields.StringField(nullable\u003dTrue),"},{"line_number":72,"context_line":"        \u0027websocket_token\u0027: fields.StringField(nullable\u003dTrue),"},{"line_number":73,"context_line":"        \u0027security_groups\u0027: fields.ListOfDictOfNullableStringsField("},{"line_number":74,"context_line":"            nullable\u003dTrue),"},{"line_number":75,"context_line":"    }"},{"line_number":76,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"df3967d1_b4b0e144","line":73,"range":{"start_line":73,"start_character":34,"end_line":73,"end_character":66},"updated":"2017-08-03 02:28:12.000000000","message":"I think we can still use ListOfStringsField,\nthen use uuidutils.is_uuid_like to check the parameter.\nWDYT?","commit_id":"4662833ceab31beed0f3c3307905ad49e7d15366"}]}
