)]}'
{"cinder/api/v3/group_specs.py":[{"author":{"_account_id":20105,"name":"Cao ShuFeng","email":"caosf.fnst@cn.fujitsu.com","username":"caosf.fnst"},"change_message_id":"8778d3e64f3ee2051c96a5b43a03906da5dbc16a","unresolved":false,"context_lines":[{"line_number":55,"context_line":"                self.validate_string_length(key, \u0027Key \"%s\"\u0027 % key,"},{"line_number":56,"context_line":"                                            min_length\u003d1, max_length\u003d255)"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"            if value is not None:"},{"line_number":59,"context_line":"                self.validate_string_length(value, \u0027Value for key \"%s\"\u0027 % key,"},{"line_number":60,"context_line":"                                            min_length\u003d0, max_length\u003d255)"},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"    @wsgi.Controller.api_version(\u00273.6\u0027)"},{"line_number":63,"context_line":"    @wsgi.response(202)"}],"source_content_type":"text/x-python","patch_set":12,"id":"7aa08908_9c7bd8bd","line":60,"range":{"start_line":58,"start_character":0,"end_line":60,"end_character":73},"updated":"2016-06-14 07:24:16.000000000","message":"IMO, we need to be careful about the None value of group specs.\noslo_versionedobjects.fields.DictOfStringsField[1] doesn\u0027t support this:\n{\u0027key\u0027: None}\n\nIMO, there is a bug about volume type\u0027s extra_specs[2] just because DictOfStringsField doesn\u0027t support None.\n\n[1]: https://review.openstack.org/#/c/320165/12/cinder/objects/group_type.py@39\n[2]: https://bugs.launchpad.net/cinder/+bug/1591444","commit_id":"371f9c8841f9f1c582da89162ab14c3b0acbee98"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"615b80541e8b1108d7c9aab698ef01ca2976569a","unresolved":false,"context_lines":[{"line_number":55,"context_line":"                self.validate_string_length(key, \u0027Key \"%s\"\u0027 % key,"},{"line_number":56,"context_line":"                                            min_length\u003d1, max_length\u003d255)"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"            if value is not None:"},{"line_number":59,"context_line":"                self.validate_string_length(value, \u0027Value for key \"%s\"\u0027 % key,"},{"line_number":60,"context_line":"                                            min_length\u003d0, max_length\u003d255)"},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"    @wsgi.Controller.api_version(\u00273.6\u0027)"},{"line_number":63,"context_line":"    @wsgi.response(202)"}],"source_content_type":"text/x-python","patch_set":12,"id":"7aa08908_9d60d302","line":60,"range":{"start_line":58,"start_character":0,"end_line":60,"end_character":73},"in_reply_to":"7aa08908_9c7bd8bd","updated":"2016-06-14 16:28:53.000000000","message":"Changed to the following in group_type.py line#39:\n\n\u0027group_specs\u0027: fields.DictOfNullableStringsField(nullable\u003dTrue),","commit_id":"371f9c8841f9f1c582da89162ab14c3b0acbee98"},{"author":{"_account_id":20105,"name":"Cao ShuFeng","email":"caosf.fnst@cn.fujitsu.com","username":"caosf.fnst"},"change_message_id":"8778d3e64f3ee2051c96a5b43a03906da5dbc16a","unresolved":false,"context_lines":[{"line_number":94,"context_line":"            expl \u003d _(\u0027Request body contains too many items\u0027)"},{"line_number":95,"context_line":"            raise webob.exc.HTTPBadRequest(explanation\u003dexpl)"},{"line_number":96,"context_line":"        self._check_key_names(body.keys())"},{"line_number":97,"context_line":"        self._validate_extra_specs(body)"},{"line_number":98,"context_line":""},{"line_number":99,"context_line":"        db.group_type_specs_update_or_create(context,"},{"line_number":100,"context_line":"                                             group_type_id,"}],"source_content_type":"text/x-python","patch_set":12,"id":"7aa08908_7c40aca5","line":97,"range":{"start_line":97,"start_character":13,"end_line":97,"end_character":34},"updated":"2016-06-14 07:24:16.000000000","message":"_validate_group_specs?","commit_id":"371f9c8841f9f1c582da89162ab14c3b0acbee98"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"615b80541e8b1108d7c9aab698ef01ca2976569a","unresolved":false,"context_lines":[{"line_number":94,"context_line":"            expl \u003d _(\u0027Request body contains too many items\u0027)"},{"line_number":95,"context_line":"            raise webob.exc.HTTPBadRequest(explanation\u003dexpl)"},{"line_number":96,"context_line":"        self._check_key_names(body.keys())"},{"line_number":97,"context_line":"        self._validate_extra_specs(body)"},{"line_number":98,"context_line":""},{"line_number":99,"context_line":"        db.group_type_specs_update_or_create(context,"},{"line_number":100,"context_line":"                                             group_type_id,"}],"source_content_type":"text/x-python","patch_set":12,"id":"7aa08908_1aa349b3","line":97,"range":{"start_line":97,"start_character":13,"end_line":97,"end_character":34},"in_reply_to":"7aa08908_7c40aca5","updated":"2016-06-14 16:28:53.000000000","message":"Done","commit_id":"371f9c8841f9f1c582da89162ab14c3b0acbee98"}],"cinder/api/v3/group_types.py":[{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"de02704650acfbc29e8fd2a7a3702a2938cae559","unresolved":false,"context_lines":[{"line_number":210,"context_line":"        * None: List both public and private group types"},{"line_number":211,"context_line":"        \"\"\""},{"line_number":212,"context_line":""},{"line_number":213,"context_line":"        if is_public is None:"},{"line_number":214,"context_line":"            # preserve default value of showing only public types"},{"line_number":215,"context_line":"            return True"},{"line_number":216,"context_line":"        elif utils.is_none_string(is_public):"}],"source_content_type":"text/x-python","patch_set":33,"id":"bacf61ea_06231657","line":213,"updated":"2016-08-05 20:01:16.000000000","message":"This confused me at first with the docstring comment. Maybe clarify that to differentiate between None and \u0027None\u0027?","commit_id":"8cf9786e00e47421bf96fbc76f0b9b4ec8605540"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"1af37c018ef7816eb86e4c35c609bae889dc25af","unresolved":false,"context_lines":[{"line_number":210,"context_line":"        * None: List both public and private group types"},{"line_number":211,"context_line":"        \"\"\""},{"line_number":212,"context_line":""},{"line_number":213,"context_line":"        if is_public is None:"},{"line_number":214,"context_line":"            # preserve default value of showing only public types"},{"line_number":215,"context_line":"            return True"},{"line_number":216,"context_line":"        elif utils.is_none_string(is_public):"}],"source_content_type":"text/x-python","patch_set":33,"id":"bacf61ea_c6b28c93","line":213,"in_reply_to":"bacf61ea_06231657","updated":"2016-08-05 20:48:43.000000000","message":"So if is_public is not specified, it will be True by default.  \"None\" is an option for admin only as only admin can see both public and private types.  Agree this is confusing.\n\nLet\u0027s see if there are other comments to be addressed.  If there are more comments, I\u0027ll upload another patch.  Otherwise I\u0027ll clarify it in the dependent patch.","commit_id":"8cf9786e00e47421bf96fbc76f0b9b4ec8605540"}],"cinder/db/sqlalchemy/api.py":[{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"de02704650acfbc29e8fd2a7a3702a2938cae559","unresolved":false,"context_lines":[{"line_number":2921,"context_line":"    query \u003d model_query(context,"},{"line_number":2922,"context_line":"                        models.GroupTypes,"},{"line_number":2923,"context_line":"                        session\u003dsession,"},{"line_number":2924,"context_line":"                        read_deleted\u003dread_deleted).\\"},{"line_number":2925,"context_line":"        options(joinedload(\u0027group_specs\u0027))"},{"line_number":2926,"context_line":""},{"line_number":2927,"context_line":"    if \u0027projects\u0027 in expected_fields:"}],"source_content_type":"text/x-python","patch_set":33,"id":"bacf61ea_06a676ad","line":2924,"range":{"start_line":2924,"start_character":51,"end_line":2924,"end_character":52},"updated":"2016-08-05 20:01:16.000000000","message":"I\u0027d prefer if we start enforcing avoiding \\ in the sqlalchemy code like we do for the rest of cinder, but not a huge deal.","commit_id":"8cf9786e00e47421bf96fbc76f0b9b4ec8605540"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"1af37c018ef7816eb86e4c35c609bae889dc25af","unresolved":false,"context_lines":[{"line_number":2921,"context_line":"    query \u003d model_query(context,"},{"line_number":2922,"context_line":"                        models.GroupTypes,"},{"line_number":2923,"context_line":"                        session\u003dsession,"},{"line_number":2924,"context_line":"                        read_deleted\u003dread_deleted).\\"},{"line_number":2925,"context_line":"        options(joinedload(\u0027group_specs\u0027))"},{"line_number":2926,"context_line":""},{"line_number":2927,"context_line":"    if \u0027projects\u0027 in expected_fields:"}],"source_content_type":"text/x-python","patch_set":33,"id":"bacf61ea_86425466","line":2924,"range":{"start_line":2924,"start_character":51,"end_line":2924,"end_character":52},"in_reply_to":"bacf61ea_06a676ad","updated":"2016-08-05 20:48:43.000000000","message":"Sure, will do if there are more comments in this patch; otherwise will change it in the dependent patch.","commit_id":"8cf9786e00e47421bf96fbc76f0b9b4ec8605540"}],"cinder/volume/group_types.py":[{"author":{"_account_id":2243,"name":"John Griffith","email":"john.griffith8@gmail.com","username":"john-griffith"},"change_message_id":"8399acd95e98f47eef34568071af39335eb2d834","unresolved":false,"context_lines":[{"line_number":94,"context_line":"        db.group_type_destroy(elevated, id)"},{"line_number":95,"context_line":""},{"line_number":96,"context_line":""},{"line_number":97,"context_line":"def get_all_types(context, inactive\u003d0, filters\u003dNone, marker\u003dNone,"},{"line_number":98,"context_line":"                  limit\u003dNone, sort_keys\u003dNone, sort_dirs\u003dNone,"},{"line_number":99,"context_line":"                  offset\u003dNone, list_result\u003dFalse):"},{"line_number":100,"context_line":"    \"\"\"Get all non-deleted group_types."}],"source_content_type":"text/x-python","patch_set":9,"id":"7aa08908_6ec4d93f","line":97,"range":{"start_line":97,"start_character":0,"end_line":97,"end_character":65},"updated":"2016-06-10 15:40:19.000000000","message":"get_all_groups or get_all_group_types","commit_id":"75a8e295df30fd39ad4fafeec67738dd3fdfbb0d"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"35aa1315f482cc1df3e0bf77b1a97d93a00445e2","unresolved":false,"context_lines":[{"line_number":94,"context_line":"        db.group_type_destroy(elevated, id)"},{"line_number":95,"context_line":""},{"line_number":96,"context_line":""},{"line_number":97,"context_line":"def get_all_types(context, inactive\u003d0, filters\u003dNone, marker\u003dNone,"},{"line_number":98,"context_line":"                  limit\u003dNone, sort_keys\u003dNone, sort_dirs\u003dNone,"},{"line_number":99,"context_line":"                  offset\u003dNone, list_result\u003dFalse):"},{"line_number":100,"context_line":"    \"\"\"Get all non-deleted group_types."}],"source_content_type":"text/x-python","patch_set":9,"id":"7aa08908_472e0dfb","line":97,"range":{"start_line":97,"start_character":0,"end_line":97,"end_character":65},"in_reply_to":"7aa08908_6ec4d93f","updated":"2016-06-11 03:35:39.000000000","message":"Done","commit_id":"75a8e295df30fd39ad4fafeec67738dd3fdfbb0d"},{"author":{"_account_id":20105,"name":"Cao ShuFeng","email":"caosf.fnst@cn.fujitsu.com","username":"caosf.fnst"},"change_message_id":"8778d3e64f3ee2051c96a5b43a03906da5dbc16a","unresolved":false,"context_lines":[{"line_number":71,"context_line":"                                            dict(name\u003dname,"},{"line_number":72,"context_line":"                                                 description\u003ddescription,"},{"line_number":73,"context_line":"                                                 is_public\u003dis_public))"},{"line_number":74,"context_line":"        # Rename resource in quota if volume type name is changed."},{"line_number":75,"context_line":"        if name:"},{"line_number":76,"context_line":"            old_type_name \u003d old_group_type.get(\u0027name\u0027)"},{"line_number":77,"context_line":"            if old_type_name !\u003d name:"}],"source_content_type":"text/x-python","patch_set":12,"id":"7aa08908_c1aa9770","line":74,"range":{"start_line":74,"start_character":38,"end_line":74,"end_character":49},"updated":"2016-06-14 07:24:16.000000000","message":"(nit)group type.\n\nBy the  way, I can\u0027t find some description about adding this quota in the spec.\nWe will add new quota like this?\ngigabytes_group_type_name\nvolumes_group_type_name","commit_id":"371f9c8841f9f1c582da89162ab14c3b0acbee98"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"615b80541e8b1108d7c9aab698ef01ca2976569a","unresolved":false,"context_lines":[{"line_number":71,"context_line":"                                            dict(name\u003dname,"},{"line_number":72,"context_line":"                                                 description\u003ddescription,"},{"line_number":73,"context_line":"                                                 is_public\u003dis_public))"},{"line_number":74,"context_line":"        # Rename resource in quota if volume type name is changed."},{"line_number":75,"context_line":"        if name:"},{"line_number":76,"context_line":"            old_type_name \u003d old_group_type.get(\u0027name\u0027)"},{"line_number":77,"context_line":"            if old_type_name !\u003d name:"}],"source_content_type":"text/x-python","patch_set":12,"id":"7aa08908_3a5ba587","line":74,"range":{"start_line":74,"start_character":38,"end_line":74,"end_character":49},"in_reply_to":"7aa08908_c1aa9770","updated":"2016-06-14 16:28:53.000000000","message":"I\u0027m not planning to add quota for a group type. Quota will be added for groups. Also there\u0027s existing quota for the volume types.\n\nRemoved this code.","commit_id":"371f9c8841f9f1c582da89162ab14c3b0acbee98"}]}
