)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"9729ffd0c7180d5ccb905be03a9e4206ed8093ee","unresolved":false,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"When extending a volume, if OverQuota is caught, Cinder"},{"line_number":10,"context_line":"raised VolumeSizeExceedsAvailableQuota with data from"},{"line_number":11,"context_line":"quota gigabytes. This is not incorrect, as it may exceed"},{"line_number":12,"context_line":"gigabytes of volume type."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"This patch is to transfer quota data from gigabytes or"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"1a122d0e_6578562b","line":11,"range":{"start_line":11,"start_character":29,"end_line":11,"end_character":38},"updated":"2016-04-19 21:15:02.000000000","message":"/incorrect/correct/ ?","commit_id":"8ea7a9c64ed4cbf78926cb6f776b337e0bef7d0a"},{"author":{"_account_id":15961,"name":"lisali","email":"xiaoyan.li@intel.com","username":"lisali"},"change_message_id":"cf1ac8485d3f3601fade1ba9f3a8b435a46ae111","unresolved":false,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"When extending a volume, if OverQuota is caught, Cinder"},{"line_number":10,"context_line":"raised VolumeSizeExceedsAvailableQuota with data from"},{"line_number":11,"context_line":"quota gigabytes. This is not incorrect, as it may exceed"},{"line_number":12,"context_line":"gigabytes of volume type."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"This patch is to transfer quota data from gigabytes or"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"1a122d0e_1fd082f5","line":11,"range":{"start_line":11,"start_character":29,"end_line":11,"end_character":38},"in_reply_to":"1a122d0e_6578562b","updated":"2016-04-20 05:35:15.000000000","message":"yes. Updated.","commit_id":"8ea7a9c64ed4cbf78926cb6f776b337e0bef7d0a"}],"cinder/backup/api.py":[{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"69078511689cbf72559ac54b64a95fbb8eec2f68","unresolved":false,"context_lines":[{"line_number":281,"context_line":"        except exception.OverQuota as e:"},{"line_number":282,"context_line":"            volume_utils.process_reserve_over_quota("},{"line_number":283,"context_line":"                context, e,"},{"line_number":284,"context_line":"                [\u0027backups\u0027, \u0027backup_gigabytes\u0027],"},{"line_number":285,"context_line":"                size\u003dvolume.size)"},{"line_number":286,"context_line":"        # Find the latest backup and use it as the parent backup to do an"},{"line_number":287,"context_line":"        # incremental backup."}],"source_content_type":"text/x-python","patch_set":5,"id":"9abb7d3a_d92763c8","line":284,"range":{"start_line":284,"start_character":16,"end_line":284,"end_character":47},"updated":"2016-05-31 11:36:52.000000000","message":"nit: A tuple would be better","commit_id":"1ddb6b80131c98db60b8cf36c747a576f9951769"},{"author":{"_account_id":15961,"name":"lisali","email":"xiaoyan.li@intel.com","username":"lisali"},"change_message_id":"86429a0b8b3d4bd6c722faaf2b10c8156abdc8db","unresolved":false,"context_lines":[{"line_number":281,"context_line":"        except exception.OverQuota as e:"},{"line_number":282,"context_line":"            volume_utils.process_reserve_over_quota("},{"line_number":283,"context_line":"                context, e,"},{"line_number":284,"context_line":"                [\u0027backups\u0027, \u0027backup_gigabytes\u0027],"},{"line_number":285,"context_line":"                size\u003dvolume.size)"},{"line_number":286,"context_line":"        # Find the latest backup and use it as the parent backup to do an"},{"line_number":287,"context_line":"        # incremental backup."}],"source_content_type":"text/x-python","patch_set":5,"id":"9abb7d3a_a5f79f57","line":284,"range":{"start_line":284,"start_character":16,"end_line":284,"end_character":47},"in_reply_to":"9abb7d3a_d92763c8","updated":"2016-06-01 08:25:21.000000000","message":"Yes, agree.\n\nI removed this as for each resource both gigabytes and capacity will be checked.","commit_id":"1ddb6b80131c98db60b8cf36c747a576f9951769"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"69078511689cbf72559ac54b64a95fbb8eec2f68","unresolved":false,"context_lines":[{"line_number":282,"context_line":"            volume_utils.process_reserve_over_quota("},{"line_number":283,"context_line":"                context, e,"},{"line_number":284,"context_line":"                [\u0027backups\u0027, \u0027backup_gigabytes\u0027],"},{"line_number":285,"context_line":"                size\u003dvolume.size)"},{"line_number":286,"context_line":"        # Find the latest backup and use it as the parent backup to do an"},{"line_number":287,"context_line":"        # incremental backup."},{"line_number":288,"context_line":"        latest_backup \u003d None"}],"source_content_type":"text/x-python","patch_set":5,"id":"9abb7d3a_d90e433a","line":285,"range":{"start_line":285,"start_character":16,"end_line":285,"end_character":33},"updated":"2016-05-31 11:36:52.000000000","message":"-1: Missing\n\n resource\u003d\u0027backup\u0027,","commit_id":"1ddb6b80131c98db60b8cf36c747a576f9951769"},{"author":{"_account_id":15961,"name":"lisali","email":"xiaoyan.li@intel.com","username":"lisali"},"change_message_id":"86429a0b8b3d4bd6c722faaf2b10c8156abdc8db","unresolved":false,"context_lines":[{"line_number":282,"context_line":"            volume_utils.process_reserve_over_quota("},{"line_number":283,"context_line":"                context, e,"},{"line_number":284,"context_line":"                [\u0027backups\u0027, \u0027backup_gigabytes\u0027],"},{"line_number":285,"context_line":"                size\u003dvolume.size)"},{"line_number":286,"context_line":"        # Find the latest backup and use it as the parent backup to do an"},{"line_number":287,"context_line":"        # incremental backup."},{"line_number":288,"context_line":"        latest_backup \u003d None"}],"source_content_type":"text/x-python","patch_set":5,"id":"9abb7d3a_85dd3be2","line":285,"range":{"start_line":285,"start_character":16,"end_line":285,"end_character":33},"in_reply_to":"9abb7d3a_d90e433a","updated":"2016-06-01 08:25:21.000000000","message":"Done","commit_id":"1ddb6b80131c98db60b8cf36c747a576f9951769"}],"cinder/exception.py":[{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"69078511689cbf72559ac54b64a95fbb8eec2f68","unresolved":false,"context_lines":[{"line_number":540,"context_line":"    message \u003d _(\"Maximum number of snapshots allowed (%(allowed)d) exceeded\")"},{"line_number":541,"context_line":""},{"line_number":542,"context_line":""},{"line_number":543,"context_line":"class UnexpectedQuotaOver(QuotaError):"},{"line_number":544,"context_line":"    message \u003d _(\"Unexpected quota over %(name)s.\")"},{"line_number":545,"context_line":""},{"line_number":546,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"9abb7d3a_2bac548b","line":543,"range":{"start_line":543,"start_character":6,"end_line":543,"end_character":25},"updated":"2016-05-31 11:36:52.000000000","message":"-1: I believe this should be UnexpectedOverQuota, although I could be wrong.","commit_id":"1ddb6b80131c98db60b8cf36c747a576f9951769"},{"author":{"_account_id":15961,"name":"lisali","email":"xiaoyan.li@intel.com","username":"lisali"},"change_message_id":"86429a0b8b3d4bd6c722faaf2b10c8156abdc8db","unresolved":false,"context_lines":[{"line_number":540,"context_line":"    message \u003d _(\"Maximum number of snapshots allowed (%(allowed)d) exceeded\")"},{"line_number":541,"context_line":""},{"line_number":542,"context_line":""},{"line_number":543,"context_line":"class UnexpectedQuotaOver(QuotaError):"},{"line_number":544,"context_line":"    message \u003d _(\"Unexpected quota over %(name)s.\")"},{"line_number":545,"context_line":""},{"line_number":546,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"9abb7d3a_4c39c0f1","line":543,"range":{"start_line":543,"start_character":6,"end_line":543,"end_character":25},"in_reply_to":"9abb7d3a_2bac548b","updated":"2016-06-01 08:25:21.000000000","message":"Done","commit_id":"1ddb6b80131c98db60b8cf36c747a576f9951769"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"69078511689cbf72559ac54b64a95fbb8eec2f68","unresolved":false,"context_lines":[{"line_number":541,"context_line":""},{"line_number":542,"context_line":""},{"line_number":543,"context_line":"class UnexpectedQuotaOver(QuotaError):"},{"line_number":544,"context_line":"    message \u003d _(\"Unexpected quota over %(name)s.\")"},{"line_number":545,"context_line":""},{"line_number":546,"context_line":""},{"line_number":547,"context_line":"class BackupLimitExceeded(QuotaError):"}],"source_content_type":"text/x-python","patch_set":5,"id":"9abb7d3a_2bf1f495","line":544,"range":{"start_line":544,"start_character":17,"end_line":544,"end_character":47},"updated":"2016-05-31 11:36:52.000000000","message":"-1: Message is not very clear, maybe it would be better something like \"Unexpected over quota on %(name)s.\"","commit_id":"1ddb6b80131c98db60b8cf36c747a576f9951769"},{"author":{"_account_id":15961,"name":"lisali","email":"xiaoyan.li@intel.com","username":"lisali"},"change_message_id":"86429a0b8b3d4bd6c722faaf2b10c8156abdc8db","unresolved":false,"context_lines":[{"line_number":541,"context_line":""},{"line_number":542,"context_line":""},{"line_number":543,"context_line":"class UnexpectedQuotaOver(QuotaError):"},{"line_number":544,"context_line":"    message \u003d _(\"Unexpected quota over %(name)s.\")"},{"line_number":545,"context_line":""},{"line_number":546,"context_line":""},{"line_number":547,"context_line":"class BackupLimitExceeded(QuotaError):"}],"source_content_type":"text/x-python","patch_set":5,"id":"9abb7d3a_0c333815","line":544,"range":{"start_line":544,"start_character":17,"end_line":544,"end_character":47},"in_reply_to":"9abb7d3a_2bf1f495","updated":"2016-06-01 08:25:21.000000000","message":"Done","commit_id":"1ddb6b80131c98db60b8cf36c747a576f9951769"}],"cinder/quota_utils.py":[{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"69078511689cbf72559ac54b64a95fbb8eec2f68","unresolved":false,"context_lines":[{"line_number":72,"context_line":"                                      **reserve_opts)"},{"line_number":73,"context_line":"    except exception.OverQuota as e:"},{"line_number":74,"context_line":"        volume_utils.process_reserve_over_quota(ctxt, e,"},{"line_number":75,"context_line":"                                                [\u0027gigabytes\u0027, \u0027volumes\u0027],"},{"line_number":76,"context_line":"                                                size\u003dvolume.size)"},{"line_number":77,"context_line":"    return reservations"},{"line_number":78,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"9abb7d3a_79d477bc","line":75,"range":{"start_line":75,"start_character":48,"end_line":75,"end_character":71},"updated":"2016-05-31 11:36:52.000000000","message":"nit: A tuple would be better","commit_id":"1ddb6b80131c98db60b8cf36c747a576f9951769"},{"author":{"_account_id":15961,"name":"lisali","email":"xiaoyan.li@intel.com","username":"lisali"},"change_message_id":"86429a0b8b3d4bd6c722faaf2b10c8156abdc8db","unresolved":false,"context_lines":[{"line_number":72,"context_line":"                                      **reserve_opts)"},{"line_number":73,"context_line":"    except exception.OverQuota as e:"},{"line_number":74,"context_line":"        volume_utils.process_reserve_over_quota(ctxt, e,"},{"line_number":75,"context_line":"                                                [\u0027gigabytes\u0027, \u0027volumes\u0027],"},{"line_number":76,"context_line":"                                                size\u003dvolume.size)"},{"line_number":77,"context_line":"    return reservations"},{"line_number":78,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"9abb7d3a_c59103f3","line":75,"range":{"start_line":75,"start_character":48,"end_line":75,"end_character":71},"in_reply_to":"9abb7d3a_79d477bc","updated":"2016-06-01 08:25:21.000000000","message":"Answer above.","commit_id":"1ddb6b80131c98db60b8cf36c747a576f9951769"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"6192080ac2e938f04e1eb7ae745bc94831e34796","unresolved":false,"context_lines":[{"line_number":71,"context_line":"                                      project_id\u003dproject_id,"},{"line_number":72,"context_line":"                                      **reserve_opts)"},{"line_number":73,"context_line":"    except exception.OverQuota as e:"},{"line_number":74,"context_line":"        volume_utils.process_reserve_over_quota(ctxt, e,"},{"line_number":75,"context_line":"                                                resource\u003d\u0027volumes\u0027,"},{"line_number":76,"context_line":"                                                size\u003dvolume.size)"},{"line_number":77,"context_line":"    return reservations"}],"source_content_type":"text/x-python","patch_set":8,"id":"7aa08908_b113b365","line":74,"range":{"start_line":74,"start_character":8,"end_line":74,"end_character":21},"updated":"2016-06-07 09:51:01.000000000","message":"-1: This should be using method defined in here, since the volume_utils method should be deleted.","commit_id":"4b5017d3adc7c8f4940a744fc1937b4887d63cc9"},{"author":{"_account_id":15961,"name":"lisali","email":"xiaoyan.li@intel.com","username":"lisali"},"change_message_id":"13f39806fcf38e00ea5ee167a0d75a9a8d34a0e7","unresolved":false,"context_lines":[{"line_number":71,"context_line":"                                      project_id\u003dproject_id,"},{"line_number":72,"context_line":"                                      **reserve_opts)"},{"line_number":73,"context_line":"    except exception.OverQuota as e:"},{"line_number":74,"context_line":"        volume_utils.process_reserve_over_quota(ctxt, e,"},{"line_number":75,"context_line":"                                                resource\u003d\u0027volumes\u0027,"},{"line_number":76,"context_line":"                                                size\u003dvolume.size)"},{"line_number":77,"context_line":"    return reservations"}],"source_content_type":"text/x-python","patch_set":8,"id":"7aa08908_f8f7a888","line":74,"range":{"start_line":74,"start_character":8,"end_line":74,"end_character":21},"in_reply_to":"7aa08908_b113b365","updated":"2016-06-08 01:50:05.000000000","message":"Updated. I am shamed for the stupid mistake. :(","commit_id":"4b5017d3adc7c8f4940a744fc1937b4887d63cc9"},{"author":{"_account_id":2759,"name":"Huang Zhiteng","email":"winston.d@gmail.com","username":"zhiteng-huang"},"change_message_id":"6c21813912b959028d38f3ebac00bb1c9c0bba40","unresolved":false,"context_lines":[{"line_number":250,"context_line":""},{"line_number":251,"context_line":"    :param context: security context"},{"line_number":252,"context_line":"    :param over_quota_exception: OverQuota exception"},{"line_number":253,"context_line":"    :param resource: can be backups, snapshots, and volumes"},{"line_number":254,"context_line":"    :param size: requested size in reservation"},{"line_number":255,"context_line":"    \"\"\""},{"line_number":256,"context_line":"    def _consumed(name):"}],"source_content_type":"text/x-python","patch_set":9,"id":"7aa08908_62e049fb","line":253,"updated":"2016-06-12 01:51:15.000000000","message":"I still believe \u0027resource\u0027 parameter is redundent here simply because the purpose of this helper function is to consolidate various cases of handling OverQuota exception in different places.  Caller of this function shouldn\u0027t care what is inside the \u0027over_quota_exception\u0027 nor should they selectively deal with some resource they want to deal with.  This funtion shall handle all of them (no matter how impossbile it is a volume_create call raising snapshot over quota exception) and the only invalid over quota exceptions are those truely unknown to Cinder (things other than \u0027volumes\u0027, \u0027backups\u0027, \u0027snapshots\u0027 and \u0027gigabytes\u0027).","commit_id":"db93513adf75d56827ff8a9734d1bc2d83070851"},{"author":{"_account_id":15961,"name":"lisali","email":"xiaoyan.li@intel.com","username":"lisali"},"change_message_id":"2d6977ce9bfe655bce97182dc5cc7501231b8ccd","unresolved":false,"context_lines":[{"line_number":250,"context_line":""},{"line_number":251,"context_line":"    :param context: security context"},{"line_number":252,"context_line":"    :param over_quota_exception: OverQuota exception"},{"line_number":253,"context_line":"    :param resource: can be backups, snapshots, and volumes"},{"line_number":254,"context_line":"    :param size: requested size in reservation"},{"line_number":255,"context_line":"    \"\"\""},{"line_number":256,"context_line":"    def _consumed(name):"}],"source_content_type":"text/x-python","patch_set":9,"id":"7aa08908_fe17a642","line":253,"in_reply_to":"7aa08908_62e049fb","updated":"2016-06-13 06:10:42.000000000","message":"We raise exception if there is something in overs. With the resource we throws resource related exception if the corresponding over is found, or else we throws exception.UnexpectedOverQuota. \n\nFor example, if \u0027volumes\u0027 in overs when creating a backup, with this patch it throws UnexpectedOverQuota exception. This indicates something wrong with the codes instead of quota itself.","commit_id":"db93513adf75d56827ff8a9734d1bc2d83070851"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"44f69bd416675b0d60fd65303de36afdf503dde9","unresolved":false,"context_lines":[{"line_number":263,"context_line":""},{"line_number":264,"context_line":"    for over in overs:"},{"line_number":265,"context_line":"        if \u0027gigabytes\u0027 in over:"},{"line_number":266,"context_line":"            msg \u003d _LW(\"Quota exceeded for %(s_pid)s, tried to create \""},{"line_number":267,"context_line":"                      \"%(s_size)sG %(s_resource)s (%(d_consumed)dG of \""},{"line_number":268,"context_line":"                      \"%(d_quota)dG already consumed).\")"},{"line_number":269,"context_line":"            LOG.warning(msg, {\u0027s_pid\u0027: context.project_id,"},{"line_number":270,"context_line":"                              \u0027s_size\u0027: size,"},{"line_number":271,"context_line":"                              \u0027s_resource\u0027: resource,"}],"source_content_type":"text/x-python","patch_set":9,"id":"7aa08908_8ada71e6","line":268,"range":{"start_line":266,"start_character":12,"end_line":268,"end_character":56},"updated":"2016-06-08 09:25:51.000000000","message":"Are we 100% okay with the fact that this will produce:\n\n Quota exceeded for \u003cproject\u003e, tried to create 10G volumes (5G/10G already consumed).\n\nI\u0027m pointing that change from \"volume\" to \"volumes\" here.","commit_id":"db93513adf75d56827ff8a9734d1bc2d83070851"},{"author":{"_account_id":2759,"name":"Huang Zhiteng","email":"winston.d@gmail.com","username":"zhiteng-huang"},"change_message_id":"6c21813912b959028d38f3ebac00bb1c9c0bba40","unresolved":false,"context_lines":[{"line_number":265,"context_line":"        if \u0027gigabytes\u0027 in over:"},{"line_number":266,"context_line":"            msg \u003d _LW(\"Quota exceeded for %(s_pid)s, tried to create \""},{"line_number":267,"context_line":"                      \"%(s_size)sG %(s_resource)s (%(d_consumed)dG of \""},{"line_number":268,"context_line":"                      \"%(d_quota)dG already consumed).\")"},{"line_number":269,"context_line":"            LOG.warning(msg, {\u0027s_pid\u0027: context.project_id,"},{"line_number":270,"context_line":"                              \u0027s_size\u0027: size,"},{"line_number":271,"context_line":"                              \u0027s_resource\u0027: resource,"}],"source_content_type":"text/x-python","patch_set":9,"id":"7aa08908_c2e77d10","line":268,"updated":"2016-06-12 01:51:15.000000000","message":"Yeah, that\u0027s annoying.","commit_id":"db93513adf75d56827ff8a9734d1bc2d83070851"},{"author":{"_account_id":15961,"name":"lisali","email":"xiaoyan.li@intel.com","username":"lisali"},"change_message_id":"7cfc80c3e47e531e4e09cdb0b4af2633a3c574e5","unresolved":false,"context_lines":[{"line_number":265,"context_line":"        if \u0027gigabytes\u0027 in over:"},{"line_number":266,"context_line":"            msg \u003d _LW(\"Quota exceeded for %(s_pid)s, tried to create \""},{"line_number":267,"context_line":"                      \"%(s_size)sG %(s_resource)s (%(d_consumed)dG of \""},{"line_number":268,"context_line":"                      \"%(d_quota)dG already consumed).\")"},{"line_number":269,"context_line":"            LOG.warning(msg, {\u0027s_pid\u0027: context.project_id,"},{"line_number":270,"context_line":"                              \u0027s_size\u0027: size,"},{"line_number":271,"context_line":"                              \u0027s_resource\u0027: resource,"}],"source_content_type":"text/x-python","patch_set":9,"id":"7aa08908_d46609ec","line":268,"in_reply_to":"7aa08908_9e1dc264","updated":"2016-06-13 07:31:38.000000000","message":"Updated it:  Quota exceeded for \u003cproject\u003e, tried to create 10G volume (5G/10G already consumed).","commit_id":"db93513adf75d56827ff8a9734d1bc2d83070851"},{"author":{"_account_id":15961,"name":"lisali","email":"xiaoyan.li@intel.com","username":"lisali"},"change_message_id":"2d6977ce9bfe655bce97182dc5cc7501231b8ccd","unresolved":false,"context_lines":[{"line_number":265,"context_line":"        if \u0027gigabytes\u0027 in over:"},{"line_number":266,"context_line":"            msg \u003d _LW(\"Quota exceeded for %(s_pid)s, tried to create \""},{"line_number":267,"context_line":"                      \"%(s_size)sG %(s_resource)s (%(d_consumed)dG of \""},{"line_number":268,"context_line":"                      \"%(d_quota)dG already consumed).\")"},{"line_number":269,"context_line":"            LOG.warning(msg, {\u0027s_pid\u0027: context.project_id,"},{"line_number":270,"context_line":"                              \u0027s_size\u0027: size,"},{"line_number":271,"context_line":"                              \u0027s_resource\u0027: resource,"}],"source_content_type":"text/x-python","patch_set":9,"id":"7aa08908_9e1dc264","line":268,"in_reply_to":"7aa08908_c2e77d10","updated":"2016-06-13 06:10:42.000000000","message":"Will fix it.","commit_id":"db93513adf75d56827ff8a9734d1bc2d83070851"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"44f69bd416675b0d60fd65303de36afdf503dde9","unresolved":false,"context_lines":[{"line_number":282,"context_line":"                quota\u003dquotas[over])"},{"line_number":283,"context_line":"        if (resource in OVER_QUOTA_RESOURCE_EXCEPTIONS.keys() and"},{"line_number":284,"context_line":"                resource in over):"},{"line_number":285,"context_line":"            msg \u003d _LW(\"Quota exceeded for %(s_pid)s, tried to create \""},{"line_number":286,"context_line":"                      \"%(s_resource)s (%(d_consumed)d %(s_resource)s \""},{"line_number":287,"context_line":"                      \"already consumed).\")"},{"line_number":288,"context_line":"            LOG.warning(msg, {\u0027s_pid\u0027: context.project_id,"},{"line_number":289,"context_line":"                              \u0027d_consumed\u0027: _consumed(over),"},{"line_number":290,"context_line":"                              \u0027s_resource\u0027: resource})"}],"source_content_type":"text/x-python","patch_set":9,"id":"7aa08908_8aaf1129","line":287,"range":{"start_line":285,"start_character":0,"end_line":287,"end_character":43},"updated":"2016-06-08 09:25:51.000000000","message":"Even more evident here:\n\n Quota exceeded for \u003cproject\u003e, tried to create volumes (5G volumes already consumed).","commit_id":"db93513adf75d56827ff8a9734d1bc2d83070851"},{"author":{"_account_id":15961,"name":"lisali","email":"xiaoyan.li@intel.com","username":"lisali"},"change_message_id":"7cfc80c3e47e531e4e09cdb0b4af2633a3c574e5","unresolved":false,"context_lines":[{"line_number":282,"context_line":"                quota\u003dquotas[over])"},{"line_number":283,"context_line":"        if (resource in OVER_QUOTA_RESOURCE_EXCEPTIONS.keys() and"},{"line_number":284,"context_line":"                resource in over):"},{"line_number":285,"context_line":"            msg \u003d _LW(\"Quota exceeded for %(s_pid)s, tried to create \""},{"line_number":286,"context_line":"                      \"%(s_resource)s (%(d_consumed)d %(s_resource)s \""},{"line_number":287,"context_line":"                      \"already consumed).\")"},{"line_number":288,"context_line":"            LOG.warning(msg, {\u0027s_pid\u0027: context.project_id,"},{"line_number":289,"context_line":"                              \u0027d_consumed\u0027: _consumed(over),"},{"line_number":290,"context_line":"                              \u0027s_resource\u0027: resource})"}],"source_content_type":"text/x-python","patch_set":9,"id":"7aa08908_7483d556","line":287,"range":{"start_line":285,"start_character":0,"end_line":287,"end_character":43},"in_reply_to":"7aa08908_8aaf1129","updated":"2016-06-13 07:31:38.000000000","message":"Updated it: Quota exceeded for \u003cproject\u003e, tried to create volume (5G volumes already consumed).","commit_id":"db93513adf75d56827ff8a9734d1bc2d83070851"},{"author":{"_account_id":20105,"name":"Cao ShuFeng","email":"caosf.fnst@cn.fujitsu.com","username":"caosf.fnst"},"change_message_id":"ebee23edbb5ed500036c553f028c9708ebcce683","unresolved":false,"context_lines":[{"line_number":264,"context_line":"    for over in overs:"},{"line_number":265,"context_line":"        if \u0027gigabytes\u0027 in over:"},{"line_number":266,"context_line":"            msg \u003d _LW(\"Quota exceeded for %(s_pid)s, tried to create \""},{"line_number":267,"context_line":"                      \"%(s_size)sG %(s_resource)s (%(d_consumed)dG of \""},{"line_number":268,"context_line":"                      \"%(d_quota)dG already consumed).\")"},{"line_number":269,"context_line":"            LOG.warning(msg, {\u0027s_pid\u0027: context.project_id,"},{"line_number":270,"context_line":"                              \u0027s_size\u0027: size,"}],"source_content_type":"text/x-python","patch_set":10,"id":"7aa08908_f27a3223","line":267,"range":{"start_line":267,"start_character":32,"end_line":267,"end_character":33},"updated":"2016-06-13 10:05:13.000000000","message":"Hi, LisaLi:\n    s_size in an integer or string?\nThanks.","commit_id":"bc8e8530c5db57ffabba6b27f6b3deb1ad008a59"},{"author":{"_account_id":15961,"name":"lisali","email":"xiaoyan.li@intel.com","username":"lisali"},"change_message_id":"d145b3b6f9d4f12d7c1433e2c57b419ef94a9e3a","unresolved":false,"context_lines":[{"line_number":264,"context_line":"    for over in overs:"},{"line_number":265,"context_line":"        if \u0027gigabytes\u0027 in over:"},{"line_number":266,"context_line":"            msg \u003d _LW(\"Quota exceeded for %(s_pid)s, tried to create \""},{"line_number":267,"context_line":"                      \"%(s_size)sG %(s_resource)s (%(d_consumed)dG of \""},{"line_number":268,"context_line":"                      \"%(d_quota)dG already consumed).\")"},{"line_number":269,"context_line":"            LOG.warning(msg, {\u0027s_pid\u0027: context.project_id,"},{"line_number":270,"context_line":"                              \u0027s_size\u0027: size,"}],"source_content_type":"text/x-python","patch_set":10,"id":"7aa08908_b714f5e8","line":267,"range":{"start_line":267,"start_character":32,"end_line":267,"end_character":33},"in_reply_to":"7aa08908_f27a3223","updated":"2016-06-14 01:53:06.000000000","message":"Thank you! And updated.","commit_id":"bc8e8530c5db57ffabba6b27f6b3deb1ad008a59"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"3e7b73dc200a82c99fdbd1d11b6163e52cb5e836","unresolved":false,"context_lines":[{"line_number":268,"context_line":"                      \"%(d_quota)dG already consumed).\")"},{"line_number":269,"context_line":"            LOG.warning(msg, {\u0027s_pid\u0027: context.project_id,"},{"line_number":270,"context_line":"                              \u0027s_size\u0027: size,"},{"line_number":271,"context_line":"                              \u0027s_resource\u0027: resource[:-1],"},{"line_number":272,"context_line":"                              \u0027d_consumed\u0027: _consumed(over),"},{"line_number":273,"context_line":"                              \u0027d_quota\u0027: quotas[over]})"},{"line_number":274,"context_line":"            if resource \u003d\u003d \u0027backups\u0027:"}],"source_content_type":"text/x-python","patch_set":11,"id":"7aa08908_c5c8dcaa","line":271,"range":{"start_line":271,"start_character":44,"end_line":271,"end_character":57},"updated":"2016-06-14 08:58:13.000000000","message":"If you\u0027ll happen to make another patchset you can add a note explaining that logic here.","commit_id":"87c5749a3fe88e42277c3dcf631b510a45995935"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"3e7b73dc200a82c99fdbd1d11b6163e52cb5e836","unresolved":false,"context_lines":[{"line_number":287,"context_line":"                      \"already consumed).\")"},{"line_number":288,"context_line":"            LOG.warning(msg, {\u0027s_pid\u0027: context.project_id,"},{"line_number":289,"context_line":"                              \u0027d_consumed\u0027: _consumed(over),"},{"line_number":290,"context_line":"                              \u0027s_resource\u0027: resource[:-1]})"},{"line_number":291,"context_line":"            raise OVER_QUOTA_RESOURCE_EXCEPTIONS[resource]("},{"line_number":292,"context_line":"                allowed\u003dquotas[over],"},{"line_number":293,"context_line":"                name\u003dover)"}],"source_content_type":"text/x-python","patch_set":11,"id":"7aa08908_e5c19881","line":290,"range":{"start_line":290,"start_character":44,"end_line":290,"end_character":56},"updated":"2016-06-14 08:58:13.000000000","message":"Same here.","commit_id":"87c5749a3fe88e42277c3dcf631b510a45995935"}],"cinder/tests/unit/test_quota_utils.py":[{"author":{"_account_id":20105,"name":"Cao ShuFeng","email":"caosf.fnst@cn.fujitsu.com","username":"caosf.fnst"},"change_message_id":"98b5a6b891a8dccc9e8f3c8cc6ac092a09693355","unresolved":false,"context_lines":[{"line_number":185,"context_line":""},{"line_number":186,"context_line":"    def test_volume_size_exceed_quota(self):"},{"line_number":187,"context_line":"        overs \u003d [\u0027gigabytes\u0027]"},{"line_number":188,"context_line":"        usages \u003d {\u0027gigabytes\u0027: {\u0027reserved\u0027: 1, \u0027in_use\u0027: 9}}"},{"line_number":189,"context_line":"        quotas \u003d {\u0027gigabytes\u0027: 10, \u0027snapshots\u0027: 10}"},{"line_number":190,"context_line":"        self._process_reserve_over_quota("},{"line_number":191,"context_line":"            overs, usages, quotas,"}],"source_content_type":"text/x-python","patch_set":9,"id":"7aa08908_211e4663","line":188,"range":{"start_line":188,"start_character":31,"end_line":188,"end_character":59},"updated":"2016-06-11 09:26:47.000000000","message":"nit:\nShould this be {\u0027reserved\u0027: 0, \u0027in_use\u0027: 9}?\nIMO, we reserved nothing,so we raise an exception.","commit_id":"db93513adf75d56827ff8a9734d1bc2d83070851"},{"author":{"_account_id":15961,"name":"lisali","email":"xiaoyan.li@intel.com","username":"lisali"},"change_message_id":"2d6977ce9bfe655bce97182dc5cc7501231b8ccd","unresolved":false,"context_lines":[{"line_number":185,"context_line":""},{"line_number":186,"context_line":"    def test_volume_size_exceed_quota(self):"},{"line_number":187,"context_line":"        overs \u003d [\u0027gigabytes\u0027]"},{"line_number":188,"context_line":"        usages \u003d {\u0027gigabytes\u0027: {\u0027reserved\u0027: 1, \u0027in_use\u0027: 9}}"},{"line_number":189,"context_line":"        quotas \u003d {\u0027gigabytes\u0027: 10, \u0027snapshots\u0027: 10}"},{"line_number":190,"context_line":"        self._process_reserve_over_quota("},{"line_number":191,"context_line":"            overs, usages, quotas,"}],"source_content_type":"text/x-python","patch_set":9,"id":"7aa08908_fe5cc61a","line":188,"range":{"start_line":188,"start_character":31,"end_line":188,"end_character":59},"in_reply_to":"7aa08908_211e4663","updated":"2016-06-13 06:10:42.000000000","message":"With nested quota, \u0027reserved\u0027 may belong to other volume types.","commit_id":"db93513adf75d56827ff8a9734d1bc2d83070851"},{"author":{"_account_id":20105,"name":"Cao ShuFeng","email":"caosf.fnst@cn.fujitsu.com","username":"caosf.fnst"},"change_message_id":"5e037310d3b8572eb45763584c84807abf3f80c1","unresolved":false,"context_lines":[{"line_number":185,"context_line":""},{"line_number":186,"context_line":"    def test_volume_size_exceed_quota(self):"},{"line_number":187,"context_line":"        overs \u003d [\u0027gigabytes\u0027]"},{"line_number":188,"context_line":"        usages \u003d {\u0027gigabytes\u0027: {\u0027reserved\u0027: 1, \u0027in_use\u0027: 9}}"},{"line_number":189,"context_line":"        quotas \u003d {\u0027gigabytes\u0027: 10, \u0027snapshots\u0027: 10}"},{"line_number":190,"context_line":"        self._process_reserve_over_quota("},{"line_number":191,"context_line":"            overs, usages, quotas,"}],"source_content_type":"text/x-python","patch_set":9,"id":"7aa08908_3e648eb7","line":188,"range":{"start_line":188,"start_character":31,"end_line":188,"end_character":59},"in_reply_to":"7aa08908_fe5cc61a","updated":"2016-06-13 06:20:54.000000000","message":"OK,thanks.","commit_id":"db93513adf75d56827ff8a9734d1bc2d83070851"}],"cinder/tests/unit/test_volume.py":[{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"1bc98785ad0b7b2d6efd74d9d4f6a93195c5217b","unresolved":false,"context_lines":[{"line_number":3979,"context_line":"        try:"},{"line_number":3980,"context_line":"            volume_api.extend(self.context,"},{"line_number":3981,"context_line":"                              volume, 3)"},{"line_number":3982,"context_line":"        except exception.VolumeSizeExceedsAvailableQuota as ex:"},{"line_number":3983,"context_line":"            actual_exception \u003d ex"},{"line_number":3984,"context_line":""},{"line_number":3985,"context_line":"        self.assertTrue(actual_exception)"}],"source_content_type":"text/x-python","patch_set":1,"id":"9aed3d3a_0fe8a3b3","line":3982,"updated":"2016-02-26 19:05:14.000000000","message":"Please don\u0027t use try/except blocks in unit tests nor assert against exact text. Please change this to use self.assertRaises just to validate that the expected error is raised.","commit_id":"13e7711f79a8dcd06583004d6b969615dd6d1c21"},{"author":{"_account_id":15961,"name":"lisali","email":"xiaoyan.li@intel.com","username":"lisali"},"change_message_id":"d420b04495f64fcf5e46bf3cdbb71c2cc30d3b57","unresolved":false,"context_lines":[{"line_number":3979,"context_line":"        try:"},{"line_number":3980,"context_line":"            volume_api.extend(self.context,"},{"line_number":3981,"context_line":"                              volume, 3)"},{"line_number":3982,"context_line":"        except exception.VolumeSizeExceedsAvailableQuota as ex:"},{"line_number":3983,"context_line":"            actual_exception \u003d ex"},{"line_number":3984,"context_line":""},{"line_number":3985,"context_line":"        self.assertTrue(actual_exception)"}],"source_content_type":"text/x-python","patch_set":1,"id":"7af24918_e61db910","line":3982,"in_reply_to":"9aed3d3a_0fe8a3b3","updated":"2016-03-02 03:51:47.000000000","message":"Hi Sean, I removed \u0027try\u0027, and use self.assertRaises to check. But I still checked the message, as the bug is to fix error in message of the exception.","commit_id":"13e7711f79a8dcd06583004d6b969615dd6d1c21"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"9b855c0284c270d5931f8244f0dc1d2e3eb2c8c3","unresolved":false,"context_lines":[{"line_number":3979,"context_line":"                               volume_api.extend,"},{"line_number":3980,"context_line":"                               self.context,"},{"line_number":3981,"context_line":"                               volume, 3)"},{"line_number":3982,"context_line":"        message \u003d _(\"Requested volume or snapshot exceeds allowed %(name)s \""},{"line_number":3983,"context_line":"                    \"quota. Requested %(requested)sG, quota is %(quota)sG and \""},{"line_number":3984,"context_line":"                    \"%(consumed)sG has been consumed.\") % \\"},{"line_number":3985,"context_line":"            {\u0027name\u0027: \u0027gigabytes_lvmdriver-3\u0027,"}],"source_content_type":"text/x-python","patch_set":2,"id":"7af24918_bc6e24c7","line":3982,"updated":"2016-03-02 04:51:11.000000000","message":"Still think this should be removed. It\u0027s not a piece of functionality that needs to be unit tested.\n\nAlso shouldn\u0027t need to localize strings in unit tests.","commit_id":"69ffb5c1b53ce437a11a2bb0729606855a8b2e5f"},{"author":{"_account_id":15961,"name":"lisali","email":"xiaoyan.li@intel.com","username":"lisali"},"change_message_id":"ded126c806646cec51f306e28be4d51af34723b3","unresolved":false,"context_lines":[{"line_number":3979,"context_line":"                               volume_api.extend,"},{"line_number":3980,"context_line":"                               self.context,"},{"line_number":3981,"context_line":"                               volume, 3)"},{"line_number":3982,"context_line":"        message \u003d _(\"Requested volume or snapshot exceeds allowed %(name)s \""},{"line_number":3983,"context_line":"                    \"quota. Requested %(requested)sG, quota is %(quota)sG and \""},{"line_number":3984,"context_line":"                    \"%(consumed)sG has been consumed.\") % \\"},{"line_number":3985,"context_line":"            {\u0027name\u0027: \u0027gigabytes_lvmdriver-3\u0027,"}],"source_content_type":"text/x-python","patch_set":2,"id":"7af24918_8ab03345","line":3982,"in_reply_to":"7af24918_bc6e24c7","updated":"2016-03-02 07:14:00.000000000","message":"OK, I will remove the message check.","commit_id":"69ffb5c1b53ce437a11a2bb0729606855a8b2e5f"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"9b855c0284c270d5931f8244f0dc1d2e3eb2c8c3","unresolved":false,"context_lines":[{"line_number":3981,"context_line":"                               volume, 3)"},{"line_number":3982,"context_line":"        message \u003d _(\"Requested volume or snapshot exceeds allowed %(name)s \""},{"line_number":3983,"context_line":"                    \"quota. Requested %(requested)sG, quota is %(quota)sG and \""},{"line_number":3984,"context_line":"                    \"%(consumed)sG has been consumed.\") % \\"},{"line_number":3985,"context_line":"            {\u0027name\u0027: \u0027gigabytes_lvmdriver-3\u0027,"},{"line_number":3986,"context_line":"             \u0027requested\u0027: 1,"},{"line_number":3987,"context_line":"             \u0027quota\u0027: 1,"}],"source_content_type":"text/x-python","patch_set":2,"id":"7af24918_7c9bfcc9","line":3984,"range":{"start_line":3984,"start_character":58,"end_line":3984,"end_character":59},"updated":"2016-03-02 04:51:11.000000000","message":"If anything, this \\ should not be here.","commit_id":"69ffb5c1b53ce437a11a2bb0729606855a8b2e5f"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"9b855c0284c270d5931f8244f0dc1d2e3eb2c8c3","unresolved":false,"context_lines":[{"line_number":3990,"context_line":"        self.assertEqual(message, six.text_type(ex))"},{"line_number":3991,"context_line":""},{"line_number":3992,"context_line":"        # clean up"},{"line_number":3993,"context_line":"        self.volume.delete_volume(self.context, volume[\u0027id\u0027])"},{"line_number":3994,"context_line":""},{"line_number":3995,"context_line":"    def test_extend_volume_driver_not_initialized(self):"},{"line_number":3996,"context_line":"        \"\"\"Test volume can be extended at API level.\"\"\""}],"source_content_type":"text/x-python","patch_set":2,"id":"7af24918_3c6df498","line":3993,"updated":"2016-03-02 04:51:11.000000000","message":"Instead of manually cleaning up here, after volume create_volume you should register a cleanup to have it deleted like here:\n\nhttps://github.com/openstack/cinder/blob/master/cinder/tests/unit/api/contrib/test_volume_encryption_metadata.py#L185\n\nThat way if an unexpected exception happens in the test and this line doesn\u0027t get executed, it will still get cleaned up.","commit_id":"69ffb5c1b53ce437a11a2bb0729606855a8b2e5f"},{"author":{"_account_id":15961,"name":"lisali","email":"xiaoyan.li@intel.com","username":"lisali"},"change_message_id":"ded126c806646cec51f306e28be4d51af34723b3","unresolved":false,"context_lines":[{"line_number":3990,"context_line":"        self.assertEqual(message, six.text_type(ex))"},{"line_number":3991,"context_line":""},{"line_number":3992,"context_line":"        # clean up"},{"line_number":3993,"context_line":"        self.volume.delete_volume(self.context, volume[\u0027id\u0027])"},{"line_number":3994,"context_line":""},{"line_number":3995,"context_line":"    def test_extend_volume_driver_not_initialized(self):"},{"line_number":3996,"context_line":"        \"\"\"Test volume can be extended at API level.\"\"\""}],"source_content_type":"text/x-python","patch_set":2,"id":"7af24918_ea9e17b7","line":3993,"in_reply_to":"7af24918_3c6df498","updated":"2016-03-02 07:14:00.000000000","message":"Good suggestions. Thank you.","commit_id":"69ffb5c1b53ce437a11a2bb0729606855a8b2e5f"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"0ba0b65890923c6725fb0d2d70fc86860587aae6","unresolved":false,"context_lines":[{"line_number":3226,"context_line":"                       side_effect \u003d OVER_SNAPSHOT_QUOTA_EXCEPTION)"},{"line_number":3227,"context_line":"    def test_create_snapshot_failed_quota_reserve(self, mock_reserve):"},{"line_number":3228,"context_line":"        \"\"\"Test exception handling when snapshot quota reserve failed.\"\"\""},{"line_number":3229,"context_line":"        test_volume \u003d tests_utils.create_volume("},{"line_number":3230,"context_line":"            self.context,"},{"line_number":3231,"context_line":"            **self.volume_params)"},{"line_number":3232,"context_line":"        self.volume.create_volume(self.context, test_volume.id,"},{"line_number":3233,"context_line":"                                  request_spec\u003d{}, volume\u003dtest_volume)"},{"line_number":3234,"context_line":"        test_volume[\u0027status\u0027] \u003d \u0027available\u0027"},{"line_number":3235,"context_line":"        volume_api \u003d cinder.volume.api.API()"},{"line_number":3236,"context_line":"        self.assertRaises(exception.SnapshotLimitExceeded,"},{"line_number":3237,"context_line":"                          volume_api.create_snapshot,"}],"source_content_type":"text/x-python","patch_set":7,"id":"7aa08908_417e40e5","line":3234,"range":{"start_line":3229,"start_character":0,"end_line":3234,"end_character":43},"updated":"2016-06-06 09:58:59.000000000","message":"-1: Unless I\u0027m missing something, for tests it\u0027s better to just create the volume in 1 shot:\n\n test_volume \u003d test_utils.create_volume(self.context, status\u003d\u0027available\u0027, \u0027host\u0027: CONF.host)","commit_id":"001d3eb1b47ad2c111e708b1083e8b43f6b3bd95"},{"author":{"_account_id":15961,"name":"lisali","email":"xiaoyan.li@intel.com","username":"lisali"},"change_message_id":"cf809dc16bbadf0746fb89fdd449a55540b5bfbc","unresolved":false,"context_lines":[{"line_number":3226,"context_line":"                       side_effect \u003d OVER_SNAPSHOT_QUOTA_EXCEPTION)"},{"line_number":3227,"context_line":"    def test_create_snapshot_failed_quota_reserve(self, mock_reserve):"},{"line_number":3228,"context_line":"        \"\"\"Test exception handling when snapshot quota reserve failed.\"\"\""},{"line_number":3229,"context_line":"        test_volume \u003d tests_utils.create_volume("},{"line_number":3230,"context_line":"            self.context,"},{"line_number":3231,"context_line":"            **self.volume_params)"},{"line_number":3232,"context_line":"        self.volume.create_volume(self.context, test_volume.id,"},{"line_number":3233,"context_line":"                                  request_spec\u003d{}, volume\u003dtest_volume)"},{"line_number":3234,"context_line":"        test_volume[\u0027status\u0027] \u003d \u0027available\u0027"},{"line_number":3235,"context_line":"        volume_api \u003d cinder.volume.api.API()"},{"line_number":3236,"context_line":"        self.assertRaises(exception.SnapshotLimitExceeded,"},{"line_number":3237,"context_line":"                          volume_api.create_snapshot,"}],"source_content_type":"text/x-python","patch_set":7,"id":"7aa08908_20f5b5ca","line":3234,"range":{"start_line":3229,"start_character":0,"end_line":3234,"end_character":43},"in_reply_to":"7aa08908_417e40e5","updated":"2016-06-07 07:25:39.000000000","message":"You reminder me. This codes are copied from above test cases without further thoughts. I read it carefully and didn\u0027t find out the necessary of sel.volume.create_volume. So I removed it.","commit_id":"001d3eb1b47ad2c111e708b1083e8b43f6b3bd95"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"0ba0b65890923c6725fb0d2d70fc86860587aae6","unresolved":false,"context_lines":[{"line_number":3244,"context_line":"                       side_effect \u003d OVER_SNAPSHOT_QUOTA_EXCEPTION)"},{"line_number":3245,"context_line":"    def test_create_snapshots_in_db_failed_quota_reserve(self, mock_reserve):"},{"line_number":3246,"context_line":"        \"\"\"Test exception handling when snapshot quota reserve failed.\"\"\""},{"line_number":3247,"context_line":"        test_volume \u003d tests_utils.create_volume("},{"line_number":3248,"context_line":"            self.context,"},{"line_number":3249,"context_line":"            **self.volume_params)"},{"line_number":3250,"context_line":"        self.volume.create_volume(self.context, test_volume.id,"},{"line_number":3251,"context_line":"                                  request_spec\u003d{}, volume\u003dtest_volume)"},{"line_number":3252,"context_line":"        test_volume[\u0027status\u0027] \u003d \u0027available\u0027"},{"line_number":3253,"context_line":"        volume_api \u003d cinder.volume.api.API()"},{"line_number":3254,"context_line":"        self.assertRaises(exception.SnapshotLimitExceeded,"},{"line_number":3255,"context_line":"                          volume_api.create_snapshots_in_db,"}],"source_content_type":"text/x-python","patch_set":7,"id":"7aa08908_217854f2","line":3252,"range":{"start_line":3247,"start_character":0,"end_line":3252,"end_character":43},"updated":"2016-06-06 09:58:59.000000000","message":"-1: Ditto","commit_id":"001d3eb1b47ad2c111e708b1083e8b43f6b3bd95"},{"author":{"_account_id":15961,"name":"lisali","email":"xiaoyan.li@intel.com","username":"lisali"},"change_message_id":"cf809dc16bbadf0746fb89fdd449a55540b5bfbc","unresolved":false,"context_lines":[{"line_number":3244,"context_line":"                       side_effect \u003d OVER_SNAPSHOT_QUOTA_EXCEPTION)"},{"line_number":3245,"context_line":"    def test_create_snapshots_in_db_failed_quota_reserve(self, mock_reserve):"},{"line_number":3246,"context_line":"        \"\"\"Test exception handling when snapshot quota reserve failed.\"\"\""},{"line_number":3247,"context_line":"        test_volume \u003d tests_utils.create_volume("},{"line_number":3248,"context_line":"            self.context,"},{"line_number":3249,"context_line":"            **self.volume_params)"},{"line_number":3250,"context_line":"        self.volume.create_volume(self.context, test_volume.id,"},{"line_number":3251,"context_line":"                                  request_spec\u003d{}, volume\u003dtest_volume)"},{"line_number":3252,"context_line":"        test_volume[\u0027status\u0027] \u003d \u0027available\u0027"},{"line_number":3253,"context_line":"        volume_api \u003d cinder.volume.api.API()"},{"line_number":3254,"context_line":"        self.assertRaises(exception.SnapshotLimitExceeded,"},{"line_number":3255,"context_line":"                          volume_api.create_snapshots_in_db,"}],"source_content_type":"text/x-python","patch_set":7,"id":"7aa08908_a066c526","line":3252,"range":{"start_line":3247,"start_character":0,"end_line":3252,"end_character":43},"in_reply_to":"7aa08908_217854f2","updated":"2016-06-07 07:25:39.000000000","message":"Updated.","commit_id":"001d3eb1b47ad2c111e708b1083e8b43f6b3bd95"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"6192080ac2e938f04e1eb7ae745bc94831e34796","unresolved":false,"context_lines":[{"line_number":3227,"context_line":"            self.context,"},{"line_number":3228,"context_line":"            status\u003d\u0027available\u0027,"},{"line_number":3229,"context_line":"            host\u003dCONF.host)"},{"line_number":3230,"context_line":"        self.addCleanup(db.volume_destroy, self.context, test_volume.id)"},{"line_number":3231,"context_line":"        volume_api \u003d cinder.volume.api.API()"},{"line_number":3232,"context_line":"        self.assertRaises(exception.SnapshotLimitExceeded,"},{"line_number":3233,"context_line":"                          volume_api.create_snapshot,"}],"source_content_type":"text/x-python","patch_set":8,"id":"7aa08908_547d1de6","line":3230,"range":{"start_line":3230,"start_character":8,"end_line":3230,"end_character":72},"updated":"2016-06-07 09:51:01.000000000","message":"nit: Not really necessary, DB is purged between tests.","commit_id":"4b5017d3adc7c8f4940a744fc1937b4887d63cc9"},{"author":{"_account_id":15961,"name":"lisali","email":"xiaoyan.li@intel.com","username":"lisali"},"change_message_id":"13f39806fcf38e00ea5ee167a0d75a9a8d34a0e7","unresolved":false,"context_lines":[{"line_number":3227,"context_line":"            self.context,"},{"line_number":3228,"context_line":"            status\u003d\u0027available\u0027,"},{"line_number":3229,"context_line":"            host\u003dCONF.host)"},{"line_number":3230,"context_line":"        self.addCleanup(db.volume_destroy, self.context, test_volume.id)"},{"line_number":3231,"context_line":"        volume_api \u003d cinder.volume.api.API()"},{"line_number":3232,"context_line":"        self.assertRaises(exception.SnapshotLimitExceeded,"},{"line_number":3233,"context_line":"                          volume_api.create_snapshot,"}],"source_content_type":"text/x-python","patch_set":8,"id":"7aa08908_982dc400","line":3230,"range":{"start_line":3230,"start_character":8,"end_line":3230,"end_character":72},"in_reply_to":"7aa08908_547d1de6","updated":"2016-06-08 01:50:05.000000000","message":"Got it. Thanks.","commit_id":"4b5017d3adc7c8f4940a744fc1937b4887d63cc9"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"6192080ac2e938f04e1eb7ae745bc94831e34796","unresolved":false,"context_lines":[{"line_number":3244,"context_line":"            self.context,"},{"line_number":3245,"context_line":"            status\u003d\u0027available\u0027,"},{"line_number":3246,"context_line":"            host\u003dCONF.host)"},{"line_number":3247,"context_line":"        self.addCleanup(db.volume_destroy, self.context, test_volume.id)"},{"line_number":3248,"context_line":"        volume_api \u003d cinder.volume.api.API()"},{"line_number":3249,"context_line":"        self.assertRaises(exception.SnapshotLimitExceeded,"},{"line_number":3250,"context_line":"                          volume_api.create_snapshots_in_db,"}],"source_content_type":"text/x-python","patch_set":8,"id":"7aa08908_948785d6","line":3247,"range":{"start_line":3247,"start_character":8,"end_line":3247,"end_character":72},"updated":"2016-06-07 09:51:01.000000000","message":"ditto","commit_id":"4b5017d3adc7c8f4940a744fc1937b4887d63cc9"},{"author":{"_account_id":15961,"name":"lisali","email":"xiaoyan.li@intel.com","username":"lisali"},"change_message_id":"13f39806fcf38e00ea5ee167a0d75a9a8d34a0e7","unresolved":false,"context_lines":[{"line_number":3244,"context_line":"            self.context,"},{"line_number":3245,"context_line":"            status\u003d\u0027available\u0027,"},{"line_number":3246,"context_line":"            host\u003dCONF.host)"},{"line_number":3247,"context_line":"        self.addCleanup(db.volume_destroy, self.context, test_volume.id)"},{"line_number":3248,"context_line":"        volume_api \u003d cinder.volume.api.API()"},{"line_number":3249,"context_line":"        self.assertRaises(exception.SnapshotLimitExceeded,"},{"line_number":3250,"context_line":"                          volume_api.create_snapshots_in_db,"}],"source_content_type":"text/x-python","patch_set":8,"id":"7aa08908_d833cc60","line":3247,"range":{"start_line":3247,"start_character":8,"end_line":3247,"end_character":72},"in_reply_to":"7aa08908_948785d6","updated":"2016-06-08 01:50:05.000000000","message":"Done","commit_id":"4b5017d3adc7c8f4940a744fc1937b4887d63cc9"}],"cinder/tests/unit/test_volume_utils.py":[{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"6192080ac2e938f04e1eb7ae745bc94831e34796","unresolved":false,"context_lines":[{"line_number":834,"context_line":"                          resource\u003dresource,"},{"line_number":835,"context_line":"                          size\u003dsize)"},{"line_number":836,"context_line":""},{"line_number":837,"context_line":"    def test_volume_size_exceed_quota(self):"},{"line_number":838,"context_line":"        overs \u003d [\u0027gigabytes\u0027]"},{"line_number":839,"context_line":"        usages \u003d {\u0027gigabytes\u0027: {\u0027reserved\u0027: 1, \u0027in_use\u0027: 9}}"},{"line_number":840,"context_line":"        quotas \u003d {\u0027gigabytes\u0027: 10, \u0027snapshots\u0027: 10}"},{"line_number":841,"context_line":"        self._process_reserve_over_quota("},{"line_number":842,"context_line":"            overs, usages, quotas,"},{"line_number":843,"context_line":"            exception.VolumeSizeExceedsAvailableQuota)"},{"line_number":844,"context_line":""},{"line_number":845,"context_line":"    def test_snapshot_limit_exceed_quota(self):"},{"line_number":846,"context_line":"        overs \u003d [\u0027snapshots\u0027]"},{"line_number":847,"context_line":"        usages \u003d {\u0027snapshots\u0027: {\u0027reserved\u0027: 1, \u0027in_use\u0027: 9}}"},{"line_number":848,"context_line":"        quotas \u003d {\u0027gigabytes\u0027: 10, \u0027snapshots\u0027: 10}"},{"line_number":849,"context_line":"        self._process_reserve_over_quota("},{"line_number":850,"context_line":"            overs, usages, quotas,"},{"line_number":851,"context_line":"            exception.SnapshotLimitExceeded,"},{"line_number":852,"context_line":"            resource\u003d\u0027snapshots\u0027)"},{"line_number":853,"context_line":""},{"line_number":854,"context_line":"    def test_backup_gigabytes_exceed_quota(self):"},{"line_number":855,"context_line":"        overs \u003d [\u0027backup_gigabytes\u0027]"},{"line_number":856,"context_line":"        usages \u003d {\u0027backup_gigabytes\u0027: {\u0027reserved\u0027: 1, \u0027in_use\u0027: 9}}"},{"line_number":857,"context_line":"        quotas \u003d {\u0027backup_gigabytes\u0027: 10}"},{"line_number":858,"context_line":"        self._process_reserve_over_quota("},{"line_number":859,"context_line":"            overs, usages, quotas,"},{"line_number":860,"context_line":"            exception.VolumeBackupSizeExceedsAvailableQuota,"},{"line_number":861,"context_line":"            resource\u003d\u0027backups\u0027)"},{"line_number":862,"context_line":""},{"line_number":863,"context_line":"    def test_backup_limit_quota(self):"},{"line_number":864,"context_line":"        overs \u003d [\u0027backups\u0027]"},{"line_number":865,"context_line":"        usages \u003d {\u0027backups\u0027: {\u0027reserved\u0027: 1, \u0027in_use\u0027: 9}}"},{"line_number":866,"context_line":"        quotas \u003d {\u0027backups\u0027: 9}"},{"line_number":867,"context_line":"        self._process_reserve_over_quota("},{"line_number":868,"context_line":"            overs, usages, quotas,"},{"line_number":869,"context_line":"            exception.BackupLimitExceeded,"},{"line_number":870,"context_line":"            resource\u003d\u0027backups\u0027)"},{"line_number":871,"context_line":""},{"line_number":872,"context_line":"    def test_volumes_limit_quota(self):"},{"line_number":873,"context_line":"        overs \u003d [\u0027volumes\u0027]"},{"line_number":874,"context_line":"        usages \u003d {\u0027volumes\u0027: {\u0027reserved\u0027: 1, \u0027in_use\u0027: 9}}"},{"line_number":875,"context_line":"        quotas \u003d {\u0027volumes\u0027: 9}"},{"line_number":876,"context_line":"        self._process_reserve_over_quota("},{"line_number":877,"context_line":"            overs, usages, quotas,"},{"line_number":878,"context_line":"            exception.VolumeLimitExceeded)"},{"line_number":879,"context_line":""},{"line_number":880,"context_line":"    def test_unknown_quota(self):"},{"line_number":881,"context_line":"        overs \u003d [\u0027unknown\u0027]"},{"line_number":882,"context_line":"        usages \u003d {\u0027volumes\u0027: {\u0027reserved\u0027: 1, \u0027in_use\u0027: 9}}"},{"line_number":883,"context_line":"        quotas \u003d {\u0027volumes\u0027: 9}"},{"line_number":884,"context_line":"        self._process_reserve_over_quota("},{"line_number":885,"context_line":"            overs, usages, quotas,"},{"line_number":886,"context_line":"            exception.UnexpectedOverQuota)"},{"line_number":887,"context_line":""},{"line_number":888,"context_line":"    def test_unknown_quota2(self):"},{"line_number":889,"context_line":"        overs \u003d [\u0027volumes\u0027]"},{"line_number":890,"context_line":"        usages \u003d {\u0027volumes\u0027: {\u0027reserved\u0027: 1, \u0027in_use\u0027: 9}}"},{"line_number":891,"context_line":"        quotas \u003d {\u0027volumes\u0027: 9}"},{"line_number":892,"context_line":"        self._process_reserve_over_quota("},{"line_number":893,"context_line":"            overs, usages, quotas,"},{"line_number":894,"context_line":"            exception.UnexpectedOverQuota,"},{"line_number":895,"context_line":"            resource\u003d\u0027snapshots\u0027)"}],"source_content_type":"text/x-python","patch_set":8,"id":"7aa08908_b4a0c144","line":895,"range":{"start_line":837,"start_character":0,"end_line":895,"end_character":33},"updated":"2016-06-07 09:51:01.000000000","message":"-1: These should be moved to quota utils test file.","commit_id":"4b5017d3adc7c8f4940a744fc1937b4887d63cc9"},{"author":{"_account_id":15961,"name":"lisali","email":"xiaoyan.li@intel.com","username":"lisali"},"change_message_id":"13f39806fcf38e00ea5ee167a0d75a9a8d34a0e7","unresolved":false,"context_lines":[{"line_number":834,"context_line":"                          resource\u003dresource,"},{"line_number":835,"context_line":"                          size\u003dsize)"},{"line_number":836,"context_line":""},{"line_number":837,"context_line":"    def test_volume_size_exceed_quota(self):"},{"line_number":838,"context_line":"        overs \u003d [\u0027gigabytes\u0027]"},{"line_number":839,"context_line":"        usages \u003d {\u0027gigabytes\u0027: {\u0027reserved\u0027: 1, \u0027in_use\u0027: 9}}"},{"line_number":840,"context_line":"        quotas \u003d {\u0027gigabytes\u0027: 10, \u0027snapshots\u0027: 10}"},{"line_number":841,"context_line":"        self._process_reserve_over_quota("},{"line_number":842,"context_line":"            overs, usages, quotas,"},{"line_number":843,"context_line":"            exception.VolumeSizeExceedsAvailableQuota)"},{"line_number":844,"context_line":""},{"line_number":845,"context_line":"    def test_snapshot_limit_exceed_quota(self):"},{"line_number":846,"context_line":"        overs \u003d [\u0027snapshots\u0027]"},{"line_number":847,"context_line":"        usages \u003d {\u0027snapshots\u0027: {\u0027reserved\u0027: 1, \u0027in_use\u0027: 9}}"},{"line_number":848,"context_line":"        quotas \u003d {\u0027gigabytes\u0027: 10, \u0027snapshots\u0027: 10}"},{"line_number":849,"context_line":"        self._process_reserve_over_quota("},{"line_number":850,"context_line":"            overs, usages, quotas,"},{"line_number":851,"context_line":"            exception.SnapshotLimitExceeded,"},{"line_number":852,"context_line":"            resource\u003d\u0027snapshots\u0027)"},{"line_number":853,"context_line":""},{"line_number":854,"context_line":"    def test_backup_gigabytes_exceed_quota(self):"},{"line_number":855,"context_line":"        overs \u003d [\u0027backup_gigabytes\u0027]"},{"line_number":856,"context_line":"        usages \u003d {\u0027backup_gigabytes\u0027: {\u0027reserved\u0027: 1, \u0027in_use\u0027: 9}}"},{"line_number":857,"context_line":"        quotas \u003d {\u0027backup_gigabytes\u0027: 10}"},{"line_number":858,"context_line":"        self._process_reserve_over_quota("},{"line_number":859,"context_line":"            overs, usages, quotas,"},{"line_number":860,"context_line":"            exception.VolumeBackupSizeExceedsAvailableQuota,"},{"line_number":861,"context_line":"            resource\u003d\u0027backups\u0027)"},{"line_number":862,"context_line":""},{"line_number":863,"context_line":"    def test_backup_limit_quota(self):"},{"line_number":864,"context_line":"        overs \u003d [\u0027backups\u0027]"},{"line_number":865,"context_line":"        usages \u003d {\u0027backups\u0027: {\u0027reserved\u0027: 1, \u0027in_use\u0027: 9}}"},{"line_number":866,"context_line":"        quotas \u003d {\u0027backups\u0027: 9}"},{"line_number":867,"context_line":"        self._process_reserve_over_quota("},{"line_number":868,"context_line":"            overs, usages, quotas,"},{"line_number":869,"context_line":"            exception.BackupLimitExceeded,"},{"line_number":870,"context_line":"            resource\u003d\u0027backups\u0027)"},{"line_number":871,"context_line":""},{"line_number":872,"context_line":"    def test_volumes_limit_quota(self):"},{"line_number":873,"context_line":"        overs \u003d [\u0027volumes\u0027]"},{"line_number":874,"context_line":"        usages \u003d {\u0027volumes\u0027: {\u0027reserved\u0027: 1, \u0027in_use\u0027: 9}}"},{"line_number":875,"context_line":"        quotas \u003d {\u0027volumes\u0027: 9}"},{"line_number":876,"context_line":"        self._process_reserve_over_quota("},{"line_number":877,"context_line":"            overs, usages, quotas,"},{"line_number":878,"context_line":"            exception.VolumeLimitExceeded)"},{"line_number":879,"context_line":""},{"line_number":880,"context_line":"    def test_unknown_quota(self):"},{"line_number":881,"context_line":"        overs \u003d [\u0027unknown\u0027]"},{"line_number":882,"context_line":"        usages \u003d {\u0027volumes\u0027: {\u0027reserved\u0027: 1, \u0027in_use\u0027: 9}}"},{"line_number":883,"context_line":"        quotas \u003d {\u0027volumes\u0027: 9}"},{"line_number":884,"context_line":"        self._process_reserve_over_quota("},{"line_number":885,"context_line":"            overs, usages, quotas,"},{"line_number":886,"context_line":"            exception.UnexpectedOverQuota)"},{"line_number":887,"context_line":""},{"line_number":888,"context_line":"    def test_unknown_quota2(self):"},{"line_number":889,"context_line":"        overs \u003d [\u0027volumes\u0027]"},{"line_number":890,"context_line":"        usages \u003d {\u0027volumes\u0027: {\u0027reserved\u0027: 1, \u0027in_use\u0027: 9}}"},{"line_number":891,"context_line":"        quotas \u003d {\u0027volumes\u0027: 9}"},{"line_number":892,"context_line":"        self._process_reserve_over_quota("},{"line_number":893,"context_line":"            overs, usages, quotas,"},{"line_number":894,"context_line":"            exception.UnexpectedOverQuota,"},{"line_number":895,"context_line":"            resource\u003d\u0027snapshots\u0027)"}],"source_content_type":"text/x-python","patch_set":8,"id":"7aa08908_b838803e","line":895,"range":{"start_line":837,"start_character":0,"end_line":895,"end_character":33},"in_reply_to":"7aa08908_b4a0c144","updated":"2016-06-08 01:50:05.000000000","message":"Done","commit_id":"4b5017d3adc7c8f4940a744fc1937b4887d63cc9"}],"cinder/transfer/api.py":[{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"69078511689cbf72559ac54b64a95fbb8eec2f68","unresolved":false,"context_lines":[{"line_number":179,"context_line":"            reservations \u003d QUOTAS.reserve(context, **reserve_opts)"},{"line_number":180,"context_line":"        except exception.OverQuota as e:"},{"line_number":181,"context_line":"            volume_utils.process_reserve_over_quota(context, e,"},{"line_number":182,"context_line":"                                                    [\u0027gigabytes\u0027, \u0027volumes\u0027],"},{"line_number":183,"context_line":"                                                    vol_ref.size)"},{"line_number":184,"context_line":"        try:"},{"line_number":185,"context_line":"            donor_id \u003d vol_ref[\u0027project_id\u0027]"}],"source_content_type":"text/x-python","patch_set":5,"id":"9abb7d3a_f9722710","line":182,"range":{"start_line":182,"start_character":52,"end_line":182,"end_character":76},"updated":"2016-05-31 11:36:52.000000000","message":"nit: A tuple would be better","commit_id":"1ddb6b80131c98db60b8cf36c747a576f9951769"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"69078511689cbf72559ac54b64a95fbb8eec2f68","unresolved":false,"context_lines":[{"line_number":180,"context_line":"        except exception.OverQuota as e:"},{"line_number":181,"context_line":"            volume_utils.process_reserve_over_quota(context, e,"},{"line_number":182,"context_line":"                                                    [\u0027gigabytes\u0027, \u0027volumes\u0027],"},{"line_number":183,"context_line":"                                                    vol_ref.size)"},{"line_number":184,"context_line":"        try:"},{"line_number":185,"context_line":"            donor_id \u003d vol_ref[\u0027project_id\u0027]"},{"line_number":186,"context_line":"            reserve_opts \u003d {\u0027volumes\u0027: -1, \u0027gigabytes\u0027: -vol_ref.size}"}],"source_content_type":"text/x-python","patch_set":5,"id":"9abb7d3a_f98ea7ce","line":183,"range":{"start_line":183,"start_character":52,"end_line":183,"end_character":64},"updated":"2016-05-31 11:36:52.000000000","message":"-1: size\u003dvol_ref.size","commit_id":"1ddb6b80131c98db60b8cf36c747a576f9951769"},{"author":{"_account_id":15961,"name":"lisali","email":"xiaoyan.li@intel.com","username":"lisali"},"change_message_id":"86429a0b8b3d4bd6c722faaf2b10c8156abdc8db","unresolved":false,"context_lines":[{"line_number":180,"context_line":"        except exception.OverQuota as e:"},{"line_number":181,"context_line":"            volume_utils.process_reserve_over_quota(context, e,"},{"line_number":182,"context_line":"                                                    [\u0027gigabytes\u0027, \u0027volumes\u0027],"},{"line_number":183,"context_line":"                                                    vol_ref.size)"},{"line_number":184,"context_line":"        try:"},{"line_number":185,"context_line":"            donor_id \u003d vol_ref[\u0027project_id\u0027]"},{"line_number":186,"context_line":"            reserve_opts \u003d {\u0027volumes\u0027: -1, \u0027gigabytes\u0027: -vol_ref.size}"}],"source_content_type":"text/x-python","patch_set":5,"id":"9abb7d3a_e5c247e8","line":183,"range":{"start_line":183,"start_character":52,"end_line":183,"end_character":64},"in_reply_to":"9abb7d3a_f98ea7ce","updated":"2016-06-01 08:25:21.000000000","message":"Done","commit_id":"1ddb6b80131c98db60b8cf36c747a576f9951769"}],"cinder/volume/api.py":[{"author":{"_account_id":20105,"name":"Cao ShuFeng","email":"caosf.fnst@cn.fujitsu.com","username":"caosf.fnst"},"change_message_id":"0e5165a3ccdf549d2b7d1cbe20f69eb2e0b531b3","unresolved":false,"context_lines":[{"line_number":1219,"context_line":"            def _consumed(name):"},{"line_number":1220,"context_line":"                return (usages[name][\u0027reserved\u0027] + usages[name][\u0027in_use\u0027])"},{"line_number":1221,"context_line":""},{"line_number":1222,"context_line":"            for over in overs:"},{"line_number":1223,"context_line":"                if \u0027gigabytes\u0027 in over:"},{"line_number":1224,"context_line":"                    msg \u003d _LE(\"Quota exceeded for %(s_pid)s, tried to \""},{"line_number":1225,"context_line":"                              \"extend volume by %(s_size)sG, \""}],"source_content_type":"text/x-python","patch_set":3,"id":"9a061dce_9f11a5b2","line":1222,"range":{"start_line":1222,"start_character":12,"end_line":1222,"end_character":30},"updated":"2016-04-09 08:05:06.000000000","message":"Why we need a loop here?\nFor me, we only reserve \u0027gigabytes\u0027 in line 1208, so there is always only one element\nin overs.","commit_id":"8ea7a9c64ed4cbf78926cb6f776b337e0bef7d0a"},{"author":{"_account_id":15961,"name":"lisali","email":"xiaoyan.li@intel.com","username":"lisali"},"change_message_id":"b38c9d809594a1f2b428b2322f03dae21e123be3","unresolved":false,"context_lines":[{"line_number":1219,"context_line":"            def _consumed(name):"},{"line_number":1220,"context_line":"                return (usages[name][\u0027reserved\u0027] + usages[name][\u0027in_use\u0027])"},{"line_number":1221,"context_line":""},{"line_number":1222,"context_line":"            for over in overs:"},{"line_number":1223,"context_line":"                if \u0027gigabytes\u0027 in over:"},{"line_number":1224,"context_line":"                    msg \u003d _LE(\"Quota exceeded for %(s_pid)s, tried to \""},{"line_number":1225,"context_line":"                              \"extend volume by %(s_size)sG, \""}],"source_content_type":"text/x-python","patch_set":3,"id":"1a122d0e_7e1daf72","line":1222,"range":{"start_line":1222,"start_character":12,"end_line":1222,"end_character":30},"in_reply_to":"9a061dce_9f11a5b2","updated":"2016-04-18 02:28:45.000000000","message":"It would have several overs here. for example, we can have gigabytes over in a volume group, or in total \u0027gigabytes\u0027.","commit_id":"8ea7a9c64ed4cbf78926cb6f776b337e0bef7d0a"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"9b96c1872f2d62d9b691c2c1609b6cb48df475b7","unresolved":false,"context_lines":[{"line_number":1220,"context_line":"                return (usages[name][\u0027reserved\u0027] + usages[name][\u0027in_use\u0027])"},{"line_number":1221,"context_line":""},{"line_number":1222,"context_line":"            for over in overs:"},{"line_number":1223,"context_line":"                if \u0027gigabytes\u0027 in over:"},{"line_number":1224,"context_line":"                    msg \u003d _LE(\"Quota exceeded for %(s_pid)s, tried to \""},{"line_number":1225,"context_line":"                              \"extend volume by %(s_size)sG, \""},{"line_number":1226,"context_line":"                              \"(%(d_consumed)dG of %(d_quota)dG \""}],"source_content_type":"text/x-python","patch_set":4,"id":"1a122d0e_2dd98ef3","line":1223,"updated":"2016-04-21 09:56:24.000000000","message":"-1: I\u0027m a little paranoid about these things, and if we have a bug in quotas and exception doesn\u0027t contain gigabytes we won\u0027t be raising any exception...\n\nI think that the loop should just search for the over entry and then breaks and it\u0027s outside of the loop that we raise the exception.\n\nThat way if gigabytes is not there an exception will be raised anyway because we tried to access a non existing or NoneType variable but we would never proceed with the volume extension.\n\nAn alternative is to raise a CinderException after the for loop.","commit_id":"25afe765734f97345390b90aa8e81369991adb53"},{"author":{"_account_id":15961,"name":"lisali","email":"xiaoyan.li@intel.com","username":"lisali"},"change_message_id":"69cd06f047dda88e3c5ea9f224d5bf93891c4c5a","unresolved":false,"context_lines":[{"line_number":1220,"context_line":"                return (usages[name][\u0027reserved\u0027] + usages[name][\u0027in_use\u0027])"},{"line_number":1221,"context_line":""},{"line_number":1222,"context_line":"            for over in overs:"},{"line_number":1223,"context_line":"                if \u0027gigabytes\u0027 in over:"},{"line_number":1224,"context_line":"                    msg \u003d _LE(\"Quota exceeded for %(s_pid)s, tried to \""},{"line_number":1225,"context_line":"                              \"extend volume by %(s_size)sG, \""},{"line_number":1226,"context_line":"                              \"(%(d_consumed)dG of %(d_quota)dG \""}],"source_content_type":"text/x-python","patch_set":4,"id":"9abb7d3a_52399740","line":1223,"in_reply_to":"1a122d0e_1993305c","updated":"2016-05-31 08:23:09.000000000","message":"Done","commit_id":"25afe765734f97345390b90aa8e81369991adb53"},{"author":{"_account_id":9171,"name":"Vipin Balachandran","email":"vipin.bl@gmail.com","username":"vbala"},"change_message_id":"a870427fde75c37b8da60149e2cc42ab873dc5d5","unresolved":false,"context_lines":[{"line_number":1220,"context_line":"                return (usages[name][\u0027reserved\u0027] + usages[name][\u0027in_use\u0027])"},{"line_number":1221,"context_line":""},{"line_number":1222,"context_line":"            for over in overs:"},{"line_number":1223,"context_line":"                if \u0027gigabytes\u0027 in over:"},{"line_number":1224,"context_line":"                    msg \u003d _LE(\"Quota exceeded for %(s_pid)s, tried to \""},{"line_number":1225,"context_line":"                              \"extend volume by %(s_size)sG, \""},{"line_number":1226,"context_line":"                              \"(%(d_consumed)dG of %(d_quota)dG \""}],"source_content_type":"text/x-python","patch_set":4,"id":"1a122d0e_1993305c","line":1223,"in_reply_to":"1a122d0e_2dd98ef3","updated":"2016-04-21 11:09:22.000000000","message":"I agree with Gorka, we can raise a generic exception after the for loop. Unfortuanetly we have similar code in other places.","commit_id":"25afe765734f97345390b90aa8e81369991adb53"},{"author":{"_account_id":15961,"name":"lisali","email":"xiaoyan.li@intel.com","username":"lisali"},"change_message_id":"69cd06f047dda88e3c5ea9f224d5bf93891c4c5a","unresolved":false,"context_lines":[{"line_number":1220,"context_line":"                return (usages[name][\u0027reserved\u0027] + usages[name][\u0027in_use\u0027])"},{"line_number":1221,"context_line":""},{"line_number":1222,"context_line":"            for over in overs:"},{"line_number":1223,"context_line":"                if \u0027gigabytes\u0027 in over:"},{"line_number":1224,"context_line":"                    msg \u003d _LE(\"Quota exceeded for %(s_pid)s, tried to \""},{"line_number":1225,"context_line":"                              \"extend volume by %(s_size)sG, \""},{"line_number":1226,"context_line":"                              \"(%(d_consumed)dG of %(d_quota)dG \""}],"source_content_type":"text/x-python","patch_set":4,"id":"9abb7d3a_122f0ff7","line":1223,"in_reply_to":"1a122d0e_2dd98ef3","updated":"2016-05-31 08:23:09.000000000","message":"I raise an exception if there are unexpected overs.","commit_id":"25afe765734f97345390b90aa8e81369991adb53"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"69078511689cbf72559ac54b64a95fbb8eec2f68","unresolved":false,"context_lines":[{"line_number":753,"context_line":"            except exception.OverQuota as e:"},{"line_number":754,"context_line":"                volume_utils.process_reserve_over_quota("},{"line_number":755,"context_line":"                    context, e,"},{"line_number":756,"context_line":"                    [\u0027gigabytes\u0027, \u0027snapshots\u0027],"},{"line_number":757,"context_line":"                    resource\u003d\u0027snapshot\u0027,"},{"line_number":758,"context_line":"                    size\u003dvolume.size)"},{"line_number":759,"context_line":"        self._check_metadata_properties(metadata)"}],"source_content_type":"text/x-python","patch_set":5,"id":"9abb7d3a_7901176a","line":756,"range":{"start_line":756,"start_character":20,"end_line":756,"end_character":47},"updated":"2016-05-31 11:36:52.000000000","message":"nit: A tuple would be better","commit_id":"1ddb6b80131c98db60b8cf36c747a576f9951769"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"69078511689cbf72559ac54b64a95fbb8eec2f68","unresolved":false,"context_lines":[{"line_number":870,"context_line":"            reservations \u003d QUOTAS.reserve(context, **total_reserve_opts)"},{"line_number":871,"context_line":"        except exception.OverQuota as e:"},{"line_number":872,"context_line":"            volume_utils.process_reserve_over_quota(context, e,"},{"line_number":873,"context_line":"                                                    [\u0027volumes\u0027, \u0027gigabytes\u0027],"},{"line_number":874,"context_line":"                                                    size\u003dvolume.size)"},{"line_number":875,"context_line":""},{"line_number":876,"context_line":"        return reservations"}],"source_content_type":"text/x-python","patch_set":5,"id":"9abb7d3a_19f1eb95","line":873,"range":{"start_line":873,"start_character":52,"end_line":873,"end_character":76},"updated":"2016-05-31 11:36:52.000000000","message":"nit: A tuple would be better","commit_id":"1ddb6b80131c98db60b8cf36c747a576f9951769"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"0bee125c751577b762f5ef69ab81b24ca6358f6b","unresolved":false,"context_lines":[{"line_number":869,"context_line":"            reservations \u003d QUOTAS.reserve(context, **total_reserve_opts)"},{"line_number":870,"context_line":"        except exception.OverQuota as e:"},{"line_number":871,"context_line":"            volume_utils.process_reserve_over_quota(context, e,"},{"line_number":872,"context_line":"                                                    [\u0027volumes\u0027, \u0027gigabytes\u0027],"},{"line_number":873,"context_line":"                                                    size\u003dvolume.size)"},{"line_number":874,"context_line":""},{"line_number":875,"context_line":"        return reservations"}],"source_content_type":"text/x-python","patch_set":6,"id":"9abb7d3a_11fd04b4","line":872,"range":{"start_line":872,"start_character":52,"end_line":872,"end_character":77},"updated":"2016-06-01 10:52:41.000000000","message":"-1: Forgot this here, it should be removed.","commit_id":"b78764a8fb93a361285d8e24b068f6f90b9525e9"},{"author":{"_account_id":15961,"name":"lisali","email":"xiaoyan.li@intel.com","username":"lisali"},"change_message_id":"93e3acd152c7c16d93980702b94cca06b671c96a","unresolved":false,"context_lines":[{"line_number":869,"context_line":"            reservations \u003d QUOTAS.reserve(context, **total_reserve_opts)"},{"line_number":870,"context_line":"        except exception.OverQuota as e:"},{"line_number":871,"context_line":"            volume_utils.process_reserve_over_quota(context, e,"},{"line_number":872,"context_line":"                                                    [\u0027volumes\u0027, \u0027gigabytes\u0027],"},{"line_number":873,"context_line":"                                                    size\u003dvolume.size)"},{"line_number":874,"context_line":""},{"line_number":875,"context_line":"        return reservations"}],"source_content_type":"text/x-python","patch_set":6,"id":"9abb7d3a_fd7a9c75","line":872,"range":{"start_line":872,"start_character":52,"end_line":872,"end_character":77},"in_reply_to":"9abb7d3a_11fd04b4","updated":"2016-06-02 07:32:40.000000000","message":"Yes. And updated, meanwhile I added unit test to check it.","commit_id":"b78764a8fb93a361285d8e24b068f6f90b9525e9"}],"cinder/volume/flows/api/create_volume.py":[{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"69078511689cbf72559ac54b64a95fbb8eec2f68","unresolved":false,"context_lines":[{"line_number":602,"context_line":"            }"},{"line_number":603,"context_line":"        except exception.OverQuota as e:"},{"line_number":604,"context_line":"            vol_utils.process_reserve_over_quota(context, e,"},{"line_number":605,"context_line":"                                                 [\u0027gigabytes\u0027, \u0027volumes\u0027],"},{"line_number":606,"context_line":"                                                 size\u003dsize)"},{"line_number":607,"context_line":""},{"line_number":608,"context_line":"    def revert(self, context, result, optional_args, **kwargs):"}],"source_content_type":"text/x-python","patch_set":5,"id":"9abb7d3a_34f036fe","line":605,"range":{"start_line":605,"start_character":49,"end_line":605,"end_character":73},"updated":"2016-05-31 11:36:52.000000000","message":"nit: A tuple would be better","commit_id":"1ddb6b80131c98db60b8cf36c747a576f9951769"}],"cinder/volume/flows/manager/manage_existing_snapshot.py":[{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"69078511689cbf72559ac54b64a95fbb8eec2f68","unresolved":false,"context_lines":[{"line_number":156,"context_line":"        except exception.OverQuota as e:"},{"line_number":157,"context_line":"            volume_utils.process_reserve_over_quota("},{"line_number":158,"context_line":"                context, e,"},{"line_number":159,"context_line":"                [\u0027snapshots\u0027, \u0027gigabytes\u0027],"},{"line_number":160,"context_line":"                size\u003dsize)"},{"line_number":161,"context_line":""},{"line_number":162,"context_line":"    def revert(self, context, result, optional_args, **kwargs):"}],"source_content_type":"text/x-python","patch_set":5,"id":"9abb7d3a_34d7964c","line":159,"range":{"start_line":159,"start_character":16,"end_line":159,"end_character":42},"updated":"2016-05-31 11:36:52.000000000","message":"nit: A tuple would be better","commit_id":"1ddb6b80131c98db60b8cf36c747a576f9951769"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"69078511689cbf72559ac54b64a95fbb8eec2f68","unresolved":false,"context_lines":[{"line_number":157,"context_line":"            volume_utils.process_reserve_over_quota("},{"line_number":158,"context_line":"                context, e,"},{"line_number":159,"context_line":"                [\u0027snapshots\u0027, \u0027gigabytes\u0027],"},{"line_number":160,"context_line":"                size\u003dsize)"},{"line_number":161,"context_line":""},{"line_number":162,"context_line":"    def revert(self, context, result, optional_args, **kwargs):"},{"line_number":163,"context_line":"        # We never produced a result and therefore can\u0027t destroy anything."}],"source_content_type":"text/x-python","patch_set":5,"id":"9abb7d3a_d4c60a99","line":160,"range":{"start_line":160,"start_character":16,"end_line":160,"end_character":25},"updated":"2016-05-31 11:36:52.000000000","message":"-1: Missing\n\n resource\u003d\u0027snapshot\u0027,","commit_id":"1ddb6b80131c98db60b8cf36c747a576f9951769"},{"author":{"_account_id":15961,"name":"lisali","email":"xiaoyan.li@intel.com","username":"lisali"},"change_message_id":"86429a0b8b3d4bd6c722faaf2b10c8156abdc8db","unresolved":false,"context_lines":[{"line_number":157,"context_line":"            volume_utils.process_reserve_over_quota("},{"line_number":158,"context_line":"                context, e,"},{"line_number":159,"context_line":"                [\u0027snapshots\u0027, \u0027gigabytes\u0027],"},{"line_number":160,"context_line":"                size\u003dsize)"},{"line_number":161,"context_line":""},{"line_number":162,"context_line":"    def revert(self, context, result, optional_args, **kwargs):"},{"line_number":163,"context_line":"        # We never produced a result and therefore can\u0027t destroy anything."}],"source_content_type":"text/x-python","patch_set":5,"id":"9abb7d3a_65af772a","line":160,"range":{"start_line":160,"start_character":16,"end_line":160,"end_character":25},"in_reply_to":"9abb7d3a_d4c60a99","updated":"2016-06-01 08:25:21.000000000","message":"Done","commit_id":"1ddb6b80131c98db60b8cf36c747a576f9951769"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"0bee125c751577b762f5ef69ab81b24ca6358f6b","unresolved":false,"context_lines":[{"line_number":156,"context_line":"        except exception.OverQuota as e:"},{"line_number":157,"context_line":"            volume_utils.process_reserve_over_quota("},{"line_number":158,"context_line":"                context, e,"},{"line_number":159,"context_line":"                resource\u003d\u0027snapshot\u0027,"},{"line_number":160,"context_line":"                size\u003dsize)"},{"line_number":161,"context_line":""},{"line_number":162,"context_line":"    def revert(self, context, result, optional_args, **kwargs):"}],"source_content_type":"text/x-python","patch_set":6,"id":"9abb7d3a_6631385a","line":159,"range":{"start_line":159,"start_character":16,"end_line":159,"end_character":36},"updated":"2016-06-01 10:52:41.000000000","message":"-1: Missing s at the end:\n\n resource\u003d\u0027snapshots\u0027,","commit_id":"b78764a8fb93a361285d8e24b068f6f90b9525e9"},{"author":{"_account_id":15961,"name":"lisali","email":"xiaoyan.li@intel.com","username":"lisali"},"change_message_id":"93e3acd152c7c16d93980702b94cca06b671c96a","unresolved":false,"context_lines":[{"line_number":156,"context_line":"        except exception.OverQuota as e:"},{"line_number":157,"context_line":"            volume_utils.process_reserve_over_quota("},{"line_number":158,"context_line":"                context, e,"},{"line_number":159,"context_line":"                resource\u003d\u0027snapshot\u0027,"},{"line_number":160,"context_line":"                size\u003dsize)"},{"line_number":161,"context_line":""},{"line_number":162,"context_line":"    def revert(self, context, result, optional_args, **kwargs):"}],"source_content_type":"text/x-python","patch_set":6,"id":"9abb7d3a_7d8fcc74","line":159,"range":{"start_line":159,"start_character":16,"end_line":159,"end_character":36},"in_reply_to":"9abb7d3a_6631385a","updated":"2016-06-02 07:32:40.000000000","message":"Yes, and I added ut to check it.","commit_id":"b78764a8fb93a361285d8e24b068f6f90b9525e9"}],"cinder/volume/utils.py":[{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"69078511689cbf72559ac54b64a95fbb8eec2f68","unresolved":false,"context_lines":[{"line_number":712,"context_line":"    return resultant_dict"},{"line_number":713,"context_line":""},{"line_number":714,"context_line":""},{"line_number":715,"context_line":"def process_reserve_over_quota(context, quota_over_exception,"},{"line_number":716,"context_line":"                               valid_overs, resource\u003d\u0027volume\u0027, size\u003dNone):"},{"line_number":717,"context_line":"    def _consumed(name):"},{"line_number":718,"context_line":"        return (usages[name][\u0027reserved\u0027] + usages[name][\u0027in_use\u0027])"}],"source_content_type":"text/x-python","patch_set":5,"id":"9abb7d3a_d4e9eae7","line":715,"range":{"start_line":715,"start_character":40,"end_line":715,"end_character":60},"updated":"2016-05-31 11:36:52.000000000","message":"nit: Maybe a better name would be \"over_quota_exception\"","commit_id":"1ddb6b80131c98db60b8cf36c747a576f9951769"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"69078511689cbf72559ac54b64a95fbb8eec2f68","unresolved":false,"context_lines":[{"line_number":722,"context_line":"    quotas \u003d quota_over_exception.kwargs[\u0027quotas\u0027]"},{"line_number":723,"context_line":"    invalid_overs \u003d []"},{"line_number":724,"context_line":""},{"line_number":725,"context_line":"    for over in overs:"},{"line_number":726,"context_line":"        if \u0027backup_gigabytes\u0027 in over and \u0027backup_gigabytes\u0027 in valid_overs:"},{"line_number":727,"context_line":"            msg \u003d _LW(\"Quota exceeded for %(s_pid)s, tried to create \""},{"line_number":728,"context_line":"                      \"%(s_size)sG backup (%(d_consumed)dG of \""}],"source_content_type":"text/x-python","patch_set":5,"id":"9abb7d3a_abb20404","line":725,"updated":"2016-05-31 11:36:52.000000000","message":"-1: We have too much duplicated code here and we don\u0027t really need elif clauses, they should be if clauses since we are raising exceptions on every if.\n\nIf we pass backup in resource in the call (as we should be doing) we can simplify this method, as there are only 2 different type of messages, for GB and for resources.","commit_id":"1ddb6b80131c98db60b8cf36c747a576f9951769"},{"author":{"_account_id":15961,"name":"lisali","email":"xiaoyan.li@intel.com","username":"lisali"},"change_message_id":"86429a0b8b3d4bd6c722faaf2b10c8156abdc8db","unresolved":false,"context_lines":[{"line_number":722,"context_line":"    quotas \u003d quota_over_exception.kwargs[\u0027quotas\u0027]"},{"line_number":723,"context_line":"    invalid_overs \u003d []"},{"line_number":724,"context_line":""},{"line_number":725,"context_line":"    for over in overs:"},{"line_number":726,"context_line":"        if \u0027backup_gigabytes\u0027 in over and \u0027backup_gigabytes\u0027 in valid_overs:"},{"line_number":727,"context_line":"            msg \u003d _LW(\"Quota exceeded for %(s_pid)s, tried to create \""},{"line_number":728,"context_line":"                      \"%(s_size)sG backup (%(d_consumed)dG of \""}],"source_content_type":"text/x-python","patch_set":5,"id":"9abb7d3a_456b53f1","line":725,"in_reply_to":"9abb7d3a_abb20404","updated":"2016-06-01 08:25:21.000000000","message":"Yes, and I update it.","commit_id":"1ddb6b80131c98db60b8cf36c747a576f9951769"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"69078511689cbf72559ac54b64a95fbb8eec2f68","unresolved":false,"context_lines":[{"line_number":776,"context_line":"            invalid_overs.append(over)"},{"line_number":777,"context_line":""},{"line_number":778,"context_line":"    if invalid_overs:"},{"line_number":779,"context_line":"        raise exception.UnexpectedQuotaOver(name\u003d\u0027\u0027.join(invalid_overs))"}],"source_content_type":"text/x-python","patch_set":5,"id":"9abb7d3a_cb25c809","line":779,"range":{"start_line":779,"start_character":49,"end_line":779,"end_character":51},"updated":"2016-05-31 11:36:52.000000000","message":"-1: \u0027, \u0027","commit_id":"1ddb6b80131c98db60b8cf36c747a576f9951769"},{"author":{"_account_id":15961,"name":"lisali","email":"xiaoyan.li@intel.com","username":"lisali"},"change_message_id":"86429a0b8b3d4bd6c722faaf2b10c8156abdc8db","unresolved":false,"context_lines":[{"line_number":776,"context_line":"            invalid_overs.append(over)"},{"line_number":777,"context_line":""},{"line_number":778,"context_line":"    if invalid_overs:"},{"line_number":779,"context_line":"        raise exception.UnexpectedQuotaOver(name\u003d\u0027\u0027.join(invalid_overs))"}],"source_content_type":"text/x-python","patch_set":5,"id":"9abb7d3a_a57cbfb5","line":779,"range":{"start_line":779,"start_character":49,"end_line":779,"end_character":51},"in_reply_to":"9abb7d3a_cb25c809","updated":"2016-06-01 08:25:21.000000000","message":"Done","commit_id":"1ddb6b80131c98db60b8cf36c747a576f9951769"},{"author":{"_account_id":2759,"name":"Huang Zhiteng","email":"winston.d@gmail.com","username":"zhiteng-huang"},"change_message_id":"d8f05dd9e5bf91dc752e386b83c7258efd5ab269","unresolved":false,"context_lines":[{"line_number":717,"context_line":"                                  \u0027volumes\u0027: exception.VolumeLimitExceeded, }"},{"line_number":718,"context_line":""},{"line_number":719,"context_line":""},{"line_number":720,"context_line":"def process_reserve_over_quota(context, over_quota_exception,"},{"line_number":721,"context_line":"                               resource, size\u003dNone):"},{"line_number":722,"context_line":"    \"\"\"Handle OverQuota exception."},{"line_number":723,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"7aa08908_12d3f339","line":720,"updated":"2016-06-06 06:22:07.000000000","message":"This function seems to fit better in quota_utils.py instead of volume_utils","commit_id":"001d3eb1b47ad2c111e708b1083e8b43f6b3bd95"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"0ba0b65890923c6725fb0d2d70fc86860587aae6","unresolved":false,"context_lines":[{"line_number":717,"context_line":"                                  \u0027volumes\u0027: exception.VolumeLimitExceeded, }"},{"line_number":718,"context_line":""},{"line_number":719,"context_line":""},{"line_number":720,"context_line":"def process_reserve_over_quota(context, over_quota_exception,"},{"line_number":721,"context_line":"                               resource, size\u003dNone):"},{"line_number":722,"context_line":"    \"\"\"Handle OverQuota exception."},{"line_number":723,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"7aa08908_86403e58","line":720,"in_reply_to":"7aa08908_12d3f339","updated":"2016-06-06 09:58:59.000000000","message":"-1: I agree, this should be moved to quota_utils","commit_id":"001d3eb1b47ad2c111e708b1083e8b43f6b3bd95"},{"author":{"_account_id":15961,"name":"lisali","email":"xiaoyan.li@intel.com","username":"lisali"},"change_message_id":"cf809dc16bbadf0746fb89fdd449a55540b5bfbc","unresolved":false,"context_lines":[{"line_number":717,"context_line":"                                  \u0027volumes\u0027: exception.VolumeLimitExceeded, }"},{"line_number":718,"context_line":""},{"line_number":719,"context_line":""},{"line_number":720,"context_line":"def process_reserve_over_quota(context, over_quota_exception,"},{"line_number":721,"context_line":"                               resource, size\u003dNone):"},{"line_number":722,"context_line":"    \"\"\"Handle OverQuota exception."},{"line_number":723,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"7aa08908_00e99980","line":720,"in_reply_to":"7aa08908_12d3f339","updated":"2016-06-07 07:25:39.000000000","message":"Done","commit_id":"001d3eb1b47ad2c111e708b1083e8b43f6b3bd95"},{"author":{"_account_id":15961,"name":"lisali","email":"xiaoyan.li@intel.com","username":"lisali"},"change_message_id":"3cf02748c0390535f823ea3a5aa20a5e7f2c6ec3","unresolved":false,"context_lines":[{"line_number":718,"context_line":""},{"line_number":719,"context_line":""},{"line_number":720,"context_line":"def process_reserve_over_quota(context, over_quota_exception,"},{"line_number":721,"context_line":"                               resource, size\u003dNone):"},{"line_number":722,"context_line":"    \"\"\"Handle OverQuota exception."},{"line_number":723,"context_line":""},{"line_number":724,"context_line":"    Analyze OverQuota exception, and raise new exception related to"}],"source_content_type":"text/x-python","patch_set":7,"id":"9abb7d3a_8f29958c","line":721,"updated":"2016-06-02 07:40:57.000000000","message":"Compared with patch 6, I removed the default value for resource. As I think it makes developers who call the interface understand the parameter and use it correctly.","commit_id":"001d3eb1b47ad2c111e708b1083e8b43f6b3bd95"},{"author":{"_account_id":2759,"name":"Huang Zhiteng","email":"winston.d@gmail.com","username":"zhiteng-huang"},"change_message_id":"d8f05dd9e5bf91dc752e386b83c7258efd5ab269","unresolved":false,"context_lines":[{"line_number":727,"context_line":""},{"line_number":728,"context_line":"    :param context: security context"},{"line_number":729,"context_line":"    :param over_quota_exception: OverQuota exception"},{"line_number":730,"context_line":"    :param resource: can be backups, snapshots, and volumes"},{"line_number":731,"context_line":"    :param size: size which can\u0027t be allocated"},{"line_number":732,"context_line":"    \"\"\""},{"line_number":733,"context_line":"    def _consumed(name):"}],"source_content_type":"text/x-python","patch_set":7,"id":"7aa08908_f2d74721","line":730,"updated":"2016-06-06 06:22:07.000000000","message":"resource is redundent info because overs already included resource types, so it should be removed from this helper function","commit_id":"001d3eb1b47ad2c111e708b1083e8b43f6b3bd95"},{"author":{"_account_id":15961,"name":"lisali","email":"xiaoyan.li@intel.com","username":"lisali"},"change_message_id":"cf809dc16bbadf0746fb89fdd449a55540b5bfbc","unresolved":false,"context_lines":[{"line_number":727,"context_line":""},{"line_number":728,"context_line":"    :param context: security context"},{"line_number":729,"context_line":"    :param over_quota_exception: OverQuota exception"},{"line_number":730,"context_line":"    :param resource: can be backups, snapshots, and volumes"},{"line_number":731,"context_line":"    :param size: size which can\u0027t be allocated"},{"line_number":732,"context_line":"    \"\"\""},{"line_number":733,"context_line":"    def _consumed(name):"}],"source_content_type":"text/x-python","patch_set":7,"id":"7aa08908_00b7d986","line":730,"in_reply_to":"7aa08908_e67782d2","updated":"2016-06-07 07:25:39.000000000","message":"For volumes, this function checks \u0027volumes\u0027 and \u0027gigabytes\u0027 in overs; For snapshots, it checks \u0027snapshots\u0027 and \u0027gigabytes\u0027; and for backups, it checks \u0027gigabytes\u0027 and \u0027backups\u0027. Other overs will be thought as unexpected error.","commit_id":"001d3eb1b47ad2c111e708b1083e8b43f6b3bd95"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"0ba0b65890923c6725fb0d2d70fc86860587aae6","unresolved":false,"context_lines":[{"line_number":727,"context_line":""},{"line_number":728,"context_line":"    :param context: security context"},{"line_number":729,"context_line":"    :param over_quota_exception: OverQuota exception"},{"line_number":730,"context_line":"    :param resource: can be backups, snapshots, and volumes"},{"line_number":731,"context_line":"    :param size: size which can\u0027t be allocated"},{"line_number":732,"context_line":"    \"\"\""},{"line_number":733,"context_line":"    def _consumed(name):"}],"source_content_type":"text/x-python","patch_set":7,"id":"7aa08908_e67782d2","line":730,"in_reply_to":"7aa08908_f2d74721","updated":"2016-06-06 09:58:59.000000000","message":"It is not redundant, because gigabytes is for \"volumes\" and \"snapshots\", and we want to differentiate between them.","commit_id":"001d3eb1b47ad2c111e708b1083e8b43f6b3bd95"},{"author":{"_account_id":2759,"name":"Huang Zhiteng","email":"winston.d@gmail.com","username":"zhiteng-huang"},"change_message_id":"d8f05dd9e5bf91dc752e386b83c7258efd5ab269","unresolved":false,"context_lines":[{"line_number":728,"context_line":"    :param context: security context"},{"line_number":729,"context_line":"    :param over_quota_exception: OverQuota exception"},{"line_number":730,"context_line":"    :param resource: can be backups, snapshots, and volumes"},{"line_number":731,"context_line":"    :param size: size which can\u0027t be allocated"},{"line_number":732,"context_line":"    \"\"\""},{"line_number":733,"context_line":"    def _consumed(name):"},{"line_number":734,"context_line":"        return (usages[name][\u0027reserved\u0027] + usages[name][\u0027in_use\u0027])"}],"source_content_type":"text/x-python","patch_set":7,"id":"7aa08908_52dd7b41","line":731,"updated":"2016-06-06 06:22:07.000000000","message":"The description is confusing.  It\u0027d be \u0027requested size in reservation\u0027","commit_id":"001d3eb1b47ad2c111e708b1083e8b43f6b3bd95"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"0ba0b65890923c6725fb0d2d70fc86860587aae6","unresolved":false,"context_lines":[{"line_number":728,"context_line":"    :param context: security context"},{"line_number":729,"context_line":"    :param over_quota_exception: OverQuota exception"},{"line_number":730,"context_line":"    :param resource: can be backups, snapshots, and volumes"},{"line_number":731,"context_line":"    :param size: size which can\u0027t be allocated"},{"line_number":732,"context_line":"    \"\"\""},{"line_number":733,"context_line":"    def _consumed(name):"},{"line_number":734,"context_line":"        return (usages[name][\u0027reserved\u0027] + usages[name][\u0027in_use\u0027])"}],"source_content_type":"text/x-python","patch_set":7,"id":"7aa08908_8125c8ac","line":731,"in_reply_to":"7aa08908_52dd7b41","updated":"2016-06-06 09:58:59.000000000","message":"nit: Yes, I think suggested description is better.","commit_id":"001d3eb1b47ad2c111e708b1083e8b43f6b3bd95"},{"author":{"_account_id":15961,"name":"lisali","email":"xiaoyan.li@intel.com","username":"lisali"},"change_message_id":"cf809dc16bbadf0746fb89fdd449a55540b5bfbc","unresolved":false,"context_lines":[{"line_number":728,"context_line":"    :param context: security context"},{"line_number":729,"context_line":"    :param over_quota_exception: OverQuota exception"},{"line_number":730,"context_line":"    :param resource: can be backups, snapshots, and volumes"},{"line_number":731,"context_line":"    :param size: size which can\u0027t be allocated"},{"line_number":732,"context_line":"    \"\"\""},{"line_number":733,"context_line":"    def _consumed(name):"},{"line_number":734,"context_line":"        return (usages[name][\u0027reserved\u0027] + usages[name][\u0027in_use\u0027])"}],"source_content_type":"text/x-python","patch_set":7,"id":"7aa08908_c0ee718a","line":731,"in_reply_to":"7aa08908_8125c8ac","updated":"2016-06-07 07:25:39.000000000","message":"Done","commit_id":"001d3eb1b47ad2c111e708b1083e8b43f6b3bd95"},{"author":{"_account_id":2759,"name":"Huang Zhiteng","email":"winston.d@gmail.com","username":"zhiteng-huang"},"change_message_id":"d8f05dd9e5bf91dc752e386b83c7258efd5ab269","unresolved":false,"context_lines":[{"line_number":745,"context_line":"                      \"%(d_quota)dG already consumed).\")"},{"line_number":746,"context_line":"            LOG.warning(msg, {\u0027s_pid\u0027: context.project_id,"},{"line_number":747,"context_line":"                              \u0027s_size\u0027: size,"},{"line_number":748,"context_line":"                              \u0027s_resource\u0027: resource,"},{"line_number":749,"context_line":"                              \u0027d_consumed\u0027: _consumed(over),"},{"line_number":750,"context_line":"                              \u0027d_quota\u0027: quotas[over]})"},{"line_number":751,"context_line":"            if resource \u003d\u003d \u0027backups\u0027:"}],"source_content_type":"text/x-python","patch_set":7,"id":"7aa08908_32e26f04","line":748,"updated":"2016-06-06 06:22:07.000000000","message":"use over instead of resource","commit_id":"001d3eb1b47ad2c111e708b1083e8b43f6b3bd95"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"0ba0b65890923c6725fb0d2d70fc86860587aae6","unresolved":false,"context_lines":[{"line_number":745,"context_line":"                      \"%(d_quota)dG already consumed).\")"},{"line_number":746,"context_line":"            LOG.warning(msg, {\u0027s_pid\u0027: context.project_id,"},{"line_number":747,"context_line":"                              \u0027s_size\u0027: size,"},{"line_number":748,"context_line":"                              \u0027s_resource\u0027: resource,"},{"line_number":749,"context_line":"                              \u0027d_consumed\u0027: _consumed(over),"},{"line_number":750,"context_line":"                              \u0027d_quota\u0027: quotas[over]})"},{"line_number":751,"context_line":"            if resource \u003d\u003d \u0027backups\u0027:"}],"source_content_type":"text/x-python","patch_set":7,"id":"7aa08908_3b7ec7e4","line":748,"in_reply_to":"7aa08908_32e26f04","updated":"2016-06-06 09:58:59.000000000","message":"As mentioned above if we use over we will use \"gigabytes\" for both \"volumes\" and \"snapshots\".","commit_id":"001d3eb1b47ad2c111e708b1083e8b43f6b3bd95"},{"author":{"_account_id":2759,"name":"Huang Zhiteng","email":"winston.d@gmail.com","username":"zhiteng-huang"},"change_message_id":"d8f05dd9e5bf91dc752e386b83c7258efd5ab269","unresolved":false,"context_lines":[{"line_number":748,"context_line":"                              \u0027s_resource\u0027: resource,"},{"line_number":749,"context_line":"                              \u0027d_consumed\u0027: _consumed(over),"},{"line_number":750,"context_line":"                              \u0027d_quota\u0027: quotas[over]})"},{"line_number":751,"context_line":"            if resource \u003d\u003d \u0027backups\u0027:"},{"line_number":752,"context_line":"                exc \u003d exception.VolumeBackupSizeExceedsAvailableQuota"},{"line_number":753,"context_line":"            else:"},{"line_number":754,"context_line":"                exc \u003d exception.VolumeSizeExceedsAvailableQuota"}],"source_content_type":"text/x-python","patch_set":7,"id":"7aa08908_92e7e311","line":751,"updated":"2016-06-06 06:22:07.000000000","message":"if \u0027backups\u0027 in over:","commit_id":"001d3eb1b47ad2c111e708b1083e8b43f6b3bd95"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"0ba0b65890923c6725fb0d2d70fc86860587aae6","unresolved":false,"context_lines":[{"line_number":748,"context_line":"                              \u0027s_resource\u0027: resource,"},{"line_number":749,"context_line":"                              \u0027d_consumed\u0027: _consumed(over),"},{"line_number":750,"context_line":"                              \u0027d_quota\u0027: quotas[over]})"},{"line_number":751,"context_line":"            if resource \u003d\u003d \u0027backups\u0027:"},{"line_number":752,"context_line":"                exc \u003d exception.VolumeBackupSizeExceedsAvailableQuota"},{"line_number":753,"context_line":"            else:"},{"line_number":754,"context_line":"                exc \u003d exception.VolumeSizeExceedsAvailableQuota"}],"source_content_type":"text/x-python","patch_set":7,"id":"7aa08908_fbf9df4e","line":751,"in_reply_to":"7aa08908_92e7e311","updated":"2016-06-06 09:58:59.000000000","message":"Since we are not removing \"resource\" parameter it\u0027s better to use \u003d\u003d","commit_id":"001d3eb1b47ad2c111e708b1083e8b43f6b3bd95"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"6192080ac2e938f04e1eb7ae745bc94831e34796","unresolved":false,"context_lines":[{"line_number":717,"context_line":"                                  \u0027volumes\u0027: exception.VolumeLimitExceeded, }"},{"line_number":718,"context_line":""},{"line_number":719,"context_line":""},{"line_number":720,"context_line":"def process_reserve_over_quota(context, over_quota_exception,"},{"line_number":721,"context_line":"                               resource, size\u003dNone):"},{"line_number":722,"context_line":"    \"\"\"Handle OverQuota exception."},{"line_number":723,"context_line":""},{"line_number":724,"context_line":"    Analyze OverQuota exception, and raise new exception related to"},{"line_number":725,"context_line":"    resource type. If there are unexpected items in overs,"},{"line_number":726,"context_line":"    UnexpectedOverQuota is raised."},{"line_number":727,"context_line":""},{"line_number":728,"context_line":"    :param context: security context"},{"line_number":729,"context_line":"    :param over_quota_exception: OverQuota exception"},{"line_number":730,"context_line":"    :param resource: can be backups, snapshots, and volumes"},{"line_number":731,"context_line":"    :param size: size which can\u0027t be allocated"},{"line_number":732,"context_line":"    \"\"\""},{"line_number":733,"context_line":"    def _consumed(name):"},{"line_number":734,"context_line":"        return (usages[name][\u0027reserved\u0027] + usages[name][\u0027in_use\u0027])"},{"line_number":735,"context_line":""},{"line_number":736,"context_line":"    overs \u003d over_quota_exception.kwargs[\u0027overs\u0027]"},{"line_number":737,"context_line":"    usages \u003d over_quota_exception.kwargs[\u0027usages\u0027]"},{"line_number":738,"context_line":"    quotas \u003d over_quota_exception.kwargs[\u0027quotas\u0027]"},{"line_number":739,"context_line":"    invalid_overs \u003d []"},{"line_number":740,"context_line":""},{"line_number":741,"context_line":"    for over in overs:"},{"line_number":742,"context_line":"        if \u0027gigabytes\u0027 in over:"},{"line_number":743,"context_line":"            msg \u003d _LW(\"Quota exceeded for %(s_pid)s, tried to create \""},{"line_number":744,"context_line":"                      \"%(s_size)sG %(s_resource)s (%(d_consumed)dG of \""},{"line_number":745,"context_line":"                      \"%(d_quota)dG already consumed).\")"},{"line_number":746,"context_line":"            LOG.warning(msg, {\u0027s_pid\u0027: context.project_id,"},{"line_number":747,"context_line":"                              \u0027s_size\u0027: size,"},{"line_number":748,"context_line":"                              \u0027s_resource\u0027: resource,"},{"line_number":749,"context_line":"                              \u0027d_consumed\u0027: _consumed(over),"},{"line_number":750,"context_line":"                              \u0027d_quota\u0027: quotas[over]})"},{"line_number":751,"context_line":"            if resource \u003d\u003d \u0027backups\u0027:"},{"line_number":752,"context_line":"                exc \u003d exception.VolumeBackupSizeExceedsAvailableQuota"},{"line_number":753,"context_line":"            else:"},{"line_number":754,"context_line":"                exc \u003d exception.VolumeSizeExceedsAvailableQuota"},{"line_number":755,"context_line":"            raise exc("},{"line_number":756,"context_line":"                name\u003dover,"},{"line_number":757,"context_line":"                requested\u003dsize,"},{"line_number":758,"context_line":"                consumed\u003d_consumed(over),"},{"line_number":759,"context_line":"                quota\u003dquotas[over])"},{"line_number":760,"context_line":"        if (resource in OVER_QUOTA_RESOURCE_EXCEPTIONS.keys() and"},{"line_number":761,"context_line":"                resource in over):"},{"line_number":762,"context_line":"            msg \u003d _LW(\"Quota exceeded for %(s_pid)s, tried to create \""},{"line_number":763,"context_line":"                      \"%(s_resource)s (%(d_consumed)d %(s_resource)s \""},{"line_number":764,"context_line":"                      \"already consumed).\")"},{"line_number":765,"context_line":"            LOG.warning(msg, {\u0027s_pid\u0027: context.project_id,"},{"line_number":766,"context_line":"                              \u0027d_consumed\u0027: _consumed(over),"},{"line_number":767,"context_line":"                              \u0027s_resource\u0027: resource})"},{"line_number":768,"context_line":"            raise OVER_QUOTA_RESOURCE_EXCEPTIONS[resource]("},{"line_number":769,"context_line":"                allowed\u003dquotas[over],"},{"line_number":770,"context_line":"                name\u003dover)"},{"line_number":771,"context_line":"        invalid_overs.append(over)"},{"line_number":772,"context_line":""},{"line_number":773,"context_line":"    if invalid_overs:"},{"line_number":774,"context_line":"        raise exception.UnexpectedOverQuota(name\u003d\u0027, \u0027.join(invalid_overs))"}],"source_content_type":"text/x-python","patch_set":8,"id":"7aa08908_7164ab21","line":774,"range":{"start_line":720,"start_character":0,"end_line":774,"end_character":74},"updated":"2016-06-07 09:51:01.000000000","message":"-1: You forgot to remove it from here and update all references to use quota_utils instead.","commit_id":"4b5017d3adc7c8f4940a744fc1937b4887d63cc9"},{"author":{"_account_id":15961,"name":"lisali","email":"xiaoyan.li@intel.com","username":"lisali"},"change_message_id":"13f39806fcf38e00ea5ee167a0d75a9a8d34a0e7","unresolved":false,"context_lines":[{"line_number":717,"context_line":"                                  \u0027volumes\u0027: exception.VolumeLimitExceeded, }"},{"line_number":718,"context_line":""},{"line_number":719,"context_line":""},{"line_number":720,"context_line":"def process_reserve_over_quota(context, over_quota_exception,"},{"line_number":721,"context_line":"                               resource, size\u003dNone):"},{"line_number":722,"context_line":"    \"\"\"Handle OverQuota exception."},{"line_number":723,"context_line":""},{"line_number":724,"context_line":"    Analyze OverQuota exception, and raise new exception related to"},{"line_number":725,"context_line":"    resource type. If there are unexpected items in overs,"},{"line_number":726,"context_line":"    UnexpectedOverQuota is raised."},{"line_number":727,"context_line":""},{"line_number":728,"context_line":"    :param context: security context"},{"line_number":729,"context_line":"    :param over_quota_exception: OverQuota exception"},{"line_number":730,"context_line":"    :param resource: can be backups, snapshots, and volumes"},{"line_number":731,"context_line":"    :param size: size which can\u0027t be allocated"},{"line_number":732,"context_line":"    \"\"\""},{"line_number":733,"context_line":"    def _consumed(name):"},{"line_number":734,"context_line":"        return (usages[name][\u0027reserved\u0027] + usages[name][\u0027in_use\u0027])"},{"line_number":735,"context_line":""},{"line_number":736,"context_line":"    overs \u003d over_quota_exception.kwargs[\u0027overs\u0027]"},{"line_number":737,"context_line":"    usages \u003d over_quota_exception.kwargs[\u0027usages\u0027]"},{"line_number":738,"context_line":"    quotas \u003d over_quota_exception.kwargs[\u0027quotas\u0027]"},{"line_number":739,"context_line":"    invalid_overs \u003d []"},{"line_number":740,"context_line":""},{"line_number":741,"context_line":"    for over in overs:"},{"line_number":742,"context_line":"        if \u0027gigabytes\u0027 in over:"},{"line_number":743,"context_line":"            msg \u003d _LW(\"Quota exceeded for %(s_pid)s, tried to create \""},{"line_number":744,"context_line":"                      \"%(s_size)sG %(s_resource)s (%(d_consumed)dG of \""},{"line_number":745,"context_line":"                      \"%(d_quota)dG already consumed).\")"},{"line_number":746,"context_line":"            LOG.warning(msg, {\u0027s_pid\u0027: context.project_id,"},{"line_number":747,"context_line":"                              \u0027s_size\u0027: size,"},{"line_number":748,"context_line":"                              \u0027s_resource\u0027: resource,"},{"line_number":749,"context_line":"                              \u0027d_consumed\u0027: _consumed(over),"},{"line_number":750,"context_line":"                              \u0027d_quota\u0027: quotas[over]})"},{"line_number":751,"context_line":"            if resource \u003d\u003d \u0027backups\u0027:"},{"line_number":752,"context_line":"                exc \u003d exception.VolumeBackupSizeExceedsAvailableQuota"},{"line_number":753,"context_line":"            else:"},{"line_number":754,"context_line":"                exc \u003d exception.VolumeSizeExceedsAvailableQuota"},{"line_number":755,"context_line":"            raise exc("},{"line_number":756,"context_line":"                name\u003dover,"},{"line_number":757,"context_line":"                requested\u003dsize,"},{"line_number":758,"context_line":"                consumed\u003d_consumed(over),"},{"line_number":759,"context_line":"                quota\u003dquotas[over])"},{"line_number":760,"context_line":"        if (resource in OVER_QUOTA_RESOURCE_EXCEPTIONS.keys() and"},{"line_number":761,"context_line":"                resource in over):"},{"line_number":762,"context_line":"            msg \u003d _LW(\"Quota exceeded for %(s_pid)s, tried to create \""},{"line_number":763,"context_line":"                      \"%(s_resource)s (%(d_consumed)d %(s_resource)s \""},{"line_number":764,"context_line":"                      \"already consumed).\")"},{"line_number":765,"context_line":"            LOG.warning(msg, {\u0027s_pid\u0027: context.project_id,"},{"line_number":766,"context_line":"                              \u0027d_consumed\u0027: _consumed(over),"},{"line_number":767,"context_line":"                              \u0027s_resource\u0027: resource})"},{"line_number":768,"context_line":"            raise OVER_QUOTA_RESOURCE_EXCEPTIONS[resource]("},{"line_number":769,"context_line":"                allowed\u003dquotas[over],"},{"line_number":770,"context_line":"                name\u003dover)"},{"line_number":771,"context_line":"        invalid_overs.append(over)"},{"line_number":772,"context_line":""},{"line_number":773,"context_line":"    if invalid_overs:"},{"line_number":774,"context_line":"        raise exception.UnexpectedOverQuota(name\u003d\u0027, \u0027.join(invalid_overs))"}],"source_content_type":"text/x-python","patch_set":8,"id":"7aa08908_f83e8826","line":774,"range":{"start_line":720,"start_character":0,"end_line":774,"end_character":74},"in_reply_to":"7aa08908_7164ab21","updated":"2016-06-08 01:50:05.000000000","message":"Updated.","commit_id":"4b5017d3adc7c8f4940a744fc1937b4887d63cc9"}]}
