)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":9003,"name":"Tom Barron","email":"tpb@dyncloud.net","username":"tbarron"},"change_message_id":"3f20c59441f5d1a096f60de17e52d47c47fb187f","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Implement backend usage reporting [WIP]"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This patch adds an API interface to allow the user to view"},{"line_number":10,"context_line":"the amount of free and used storage they have for their backends."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Change-Id: I68e7c163c5c3f0ff81827fe6426510938f09f18b"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"9a061dce_54cb62a5","line":9,"updated":"2016-04-05 11:25:39.000000000","message":"I think you should say \"allow the cloud administrator to view ...\".","commit_id":"d645708ba7f9052e9757420e36c6f38304341d67"}],"cinder/api/contrib/usage.py":[{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"a463900223049d078d2e856b59c1b88f1d10ebf5","unresolved":false,"context_lines":[{"line_number":29,"context_line":"    extensions.extension_authorizer(\u0027scheduler\u0027, action_name)(context)"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"def make_usage(elem):"},{"line_number":33,"context_line":"    elem.set(\u0027name\u0027)"},{"line_number":34,"context_line":"    elem.set(\u0027used\u0027)"},{"line_number":35,"context_line":"    elem.set(\u0027free\u0027)"}],"source_content_type":"text/x-python","patch_set":5,"id":"9a061dce_50b7b2f4","line":32,"updated":"2016-04-06 10:21:35.000000000","message":"XML API is deprecated and will be removed in Newton. Please, remove it from your patch","commit_id":"26dfec0df14f6cb0602af8fd80d738749baa1729"},{"author":{"_account_id":17275,"name":"Nate Potter","email":"nathaniel.potter@intel.com","username":"npotter"},"change_message_id":"946607dc925df4f96adfb4fa08daf3e963e5b218","unresolved":false,"context_lines":[{"line_number":29,"context_line":"    extensions.extension_authorizer(\u0027scheduler\u0027, action_name)(context)"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"def make_usage(elem):"},{"line_number":33,"context_line":"    elem.set(\u0027name\u0027)"},{"line_number":34,"context_line":"    elem.set(\u0027used\u0027)"},{"line_number":35,"context_line":"    elem.set(\u0027free\u0027)"}],"source_content_type":"text/x-python","patch_set":5,"id":"9a061dce_3ba64853","line":32,"in_reply_to":"9a061dce_50b7b2f4","updated":"2016-04-06 17:19:40.000000000","message":"Done.","commit_id":"26dfec0df14f6cb0602af8fd80d738749baa1729"}],"cinder/api/views/usage.py":[{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"a463900223049d078d2e856b59c1b88f1d10ebf5","unresolved":false,"context_lines":[{"line_number":23,"context_line":""},{"line_number":24,"context_line":"    def __init__(self):"},{"line_number":25,"context_line":"        \"\"\"Initialize view builder.\"\"\""},{"line_number":26,"context_line":"        super(ViewBuilder, self).__init__()"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"    def summary(self, request, usage):"},{"line_number":29,"context_line":"        \"\"\"View of a single backend\u0027s usage.\"\"\""}],"source_content_type":"text/x-python","patch_set":5,"id":"9a061dce_f047e6b9","line":26,"updated":"2016-04-06 10:21:35.000000000","message":"Please, remove empty __init__ method","commit_id":"26dfec0df14f6cb0602af8fd80d738749baa1729"},{"author":{"_account_id":17275,"name":"Nate Potter","email":"nathaniel.potter@intel.com","username":"npotter"},"change_message_id":"946607dc925df4f96adfb4fa08daf3e963e5b218","unresolved":false,"context_lines":[{"line_number":23,"context_line":""},{"line_number":24,"context_line":"    def __init__(self):"},{"line_number":25,"context_line":"        \"\"\"Initialize view builder.\"\"\""},{"line_number":26,"context_line":"        super(ViewBuilder, self).__init__()"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"    def summary(self, request, usage):"},{"line_number":29,"context_line":"        \"\"\"View of a single backend\u0027s usage.\"\"\""}],"source_content_type":"text/x-python","patch_set":5,"id":"9a061dce_fb24d0c5","line":26,"in_reply_to":"9a061dce_f047e6b9","updated":"2016-04-06 17:19:40.000000000","message":"Done","commit_id":"26dfec0df14f6cb0602af8fd80d738749baa1729"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"a463900223049d078d2e856b59c1b88f1d10ebf5","unresolved":false,"context_lines":[{"line_number":40,"context_line":"        \"\"\"Provide a view for a list of usages.\"\"\""},{"line_number":41,"context_line":"        usage_list \u003d [self.summary(request, usage)[\u0027usage\u0027]"},{"line_number":42,"context_line":"                      for usage in usages]"},{"line_number":43,"context_line":"        usage_dict \u003d dict(usages\u003dusage_list)"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"        return usage_dict"}],"source_content_type":"text/x-python","patch_set":5,"id":"9a061dce_1096da3e","line":43,"updated":"2016-04-06 10:21:35.000000000","message":"Do we really need dict here?","commit_id":"26dfec0df14f6cb0602af8fd80d738749baa1729"},{"author":{"_account_id":17275,"name":"Nate Potter","email":"nathaniel.potter@intel.com","username":"npotter"},"change_message_id":"946607dc925df4f96adfb4fa08daf3e963e5b218","unresolved":false,"context_lines":[{"line_number":40,"context_line":"        \"\"\"Provide a view for a list of usages.\"\"\""},{"line_number":41,"context_line":"        usage_list \u003d [self.summary(request, usage)[\u0027usage\u0027]"},{"line_number":42,"context_line":"                      for usage in usages]"},{"line_number":43,"context_line":"        usage_dict \u003d dict(usages\u003dusage_list)"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"        return usage_dict"}],"source_content_type":"text/x-python","patch_set":5,"id":"9a061dce_ecdc1875","line":43,"in_reply_to":"9a061dce_1096da3e","updated":"2016-04-06 17:19:40.000000000","message":"I think so, something is expecting this to be a dict because without it it throws an error, and other view modules that provide a list view do the same thing.","commit_id":"26dfec0df14f6cb0602af8fd80d738749baa1729"}],"cinder/scheduler/host_manager.py":[{"author":{"_account_id":20105,"name":"Cao ShuFeng","email":"caosf.fnst@cn.fujitsu.com","username":"caosf.fnst"},"change_message_id":"69ff2e51dbb1602b324b4e4b79b9693dd7d7b67d","unresolved":false,"context_lines":[{"line_number":525,"context_line":"        return all_pools"},{"line_number":526,"context_line":""},{"line_number":527,"context_line":"    def get_usage(self, context):"},{"line_number":528,"context_line":"        \"\"\"Returns a dict of information about capacity on all hosts.\"\"\""},{"line_number":529,"context_line":"        self._update_host_state_map(context)"},{"line_number":530,"context_line":""},{"line_number":531,"context_line":"        usages \u003d []"}],"source_content_type":"text/x-python","patch_set":11,"id":"9a061dce_ff8541ad","line":528,"range":{"start_line":528,"start_character":21,"end_line":528,"end_character":25},"updated":"2016-04-10 07:42:51.000000000","message":"I think this is a list, not dict.","commit_id":"478bbd6f8d1d54fa5f077cfd0f52745f1bf2a393"},{"author":{"_account_id":17275,"name":"Nate Potter","email":"nathaniel.potter@intel.com","username":"npotter"},"change_message_id":"2aaf3c100014da549aa59a6f3bcc7c842c8989d1","unresolved":false,"context_lines":[{"line_number":525,"context_line":"        return all_pools"},{"line_number":526,"context_line":""},{"line_number":527,"context_line":"    def get_usage(self, context):"},{"line_number":528,"context_line":"        \"\"\"Returns a dict of information about capacity on all hosts.\"\"\""},{"line_number":529,"context_line":"        self._update_host_state_map(context)"},{"line_number":530,"context_line":""},{"line_number":531,"context_line":"        usages \u003d []"}],"source_content_type":"text/x-python","patch_set":11,"id":"7a1b2928_b1ff8000","line":528,"range":{"start_line":528,"start_character":21,"end_line":528,"end_character":25},"in_reply_to":"9a061dce_ff8541ad","updated":"2016-04-11 18:41:22.000000000","message":"Good catch, yes its a list of dicts.","commit_id":"478bbd6f8d1d54fa5f077cfd0f52745f1bf2a393"},{"author":{"_account_id":20105,"name":"Cao ShuFeng","email":"caosf.fnst@cn.fujitsu.com","username":"caosf.fnst"},"change_message_id":"69ff2e51dbb1602b324b4e4b79b9693dd7d7b67d","unresolved":false,"context_lines":[{"line_number":540,"context_line":"                pool \u003d state.pools[key]"},{"line_number":541,"context_line":"                usage[\u0027free\u0027] +\u003d pool.capabilities[\u0027free_capacity_gb\u0027]"},{"line_number":542,"context_line":"                usage[\u0027total\u0027] +\u003d pool.capabilities[\u0027total_capacity_gb\u0027]"},{"line_number":543,"context_line":"                usage[\u0027volumes\u0027] +\u003d pool.capabilities[\u0027total_volumes\u0027]"},{"line_number":544,"context_line":"            usages.append(usage)"},{"line_number":545,"context_line":""},{"line_number":546,"context_line":"        return usages"}],"source_content_type":"text/x-python","patch_set":11,"id":"9a061dce_9816d653","line":543,"range":{"start_line":543,"start_character":55,"end_line":543,"end_character":68},"updated":"2016-04-10 07:42:51.000000000","message":"For a lvm driver, when one volume and one snapshot is created, this value becomes 2.\nThis may become a misleading to users.\nUser may thought there are 2 volumes, but in fact it has one volume and one snapshot.\nSo I think we may use another name rather \"volumes\" or we don\u0027t return this element?","commit_id":"478bbd6f8d1d54fa5f077cfd0f52745f1bf2a393"},{"author":{"_account_id":17275,"name":"Nate Potter","email":"nathaniel.potter@intel.com","username":"npotter"},"change_message_id":"2aaf3c100014da549aa59a6f3bcc7c842c8989d1","unresolved":false,"context_lines":[{"line_number":540,"context_line":"                pool \u003d state.pools[key]"},{"line_number":541,"context_line":"                usage[\u0027free\u0027] +\u003d pool.capabilities[\u0027free_capacity_gb\u0027]"},{"line_number":542,"context_line":"                usage[\u0027total\u0027] +\u003d pool.capabilities[\u0027total_capacity_gb\u0027]"},{"line_number":543,"context_line":"                usage[\u0027volumes\u0027] +\u003d pool.capabilities[\u0027total_volumes\u0027]"},{"line_number":544,"context_line":"            usages.append(usage)"},{"line_number":545,"context_line":""},{"line_number":546,"context_line":"        return usages"}],"source_content_type":"text/x-python","patch_set":11,"id":"7a1b2928_0e0a9126","line":543,"range":{"start_line":543,"start_character":55,"end_line":543,"end_character":68},"in_reply_to":"9a061dce_9816d653","updated":"2016-04-11 18:41:22.000000000","message":"Hmm, is there a name that you think might be more appropriate? The backend is still hosting both the volume and the snapshot so I think it\u0027s useful information, but I\u0027m not sure what to call it. Is \u0027volumes+snapshots\" or \"volumes and snapshots\" too long?","commit_id":"478bbd6f8d1d54fa5f077cfd0f52745f1bf2a393"},{"author":{"_account_id":20105,"name":"Cao ShuFeng","email":"caosf.fnst@cn.fujitsu.com","username":"caosf.fnst"},"change_message_id":"e0d99d2209e12015123d9c6dd667b8e403a68550","unresolved":false,"context_lines":[{"line_number":540,"context_line":"                pool \u003d state.pools[key]"},{"line_number":541,"context_line":"                usage[\u0027free\u0027] +\u003d pool.capabilities[\u0027free_capacity_gb\u0027]"},{"line_number":542,"context_line":"                usage[\u0027total\u0027] +\u003d pool.capabilities[\u0027total_capacity_gb\u0027]"},{"line_number":543,"context_line":"                usage[\u0027volumes\u0027] +\u003d pool.capabilities[\u0027total_volumes\u0027]"},{"line_number":544,"context_line":"            usages.append(usage)"},{"line_number":545,"context_line":""},{"line_number":546,"context_line":"        return usages"}],"source_content_type":"text/x-python","patch_set":13,"id":"5a18252c_6a699b8b","line":543,"range":{"start_line":543,"start_character":23,"end_line":543,"end_character":30},"updated":"2016-04-12 02:22:34.000000000","message":"Leave an awareness for this \"volumes+snapshots\" here, in hope that someone\nmay figure out a better name for it.","commit_id":"8a48856fbd7b560913c3dadbc3fdcc5813c1528d"}],"cinder/scheduler/rpcapi.py":[{"author":{"_account_id":20105,"name":"Cao ShuFeng","email":"caosf.fnst@cn.fujitsu.com","username":"caosf.fnst"},"change_message_id":"6fce2a7afcfa5106983463a7e3c28b0cc1b64513","unresolved":false,"context_lines":[{"line_number":44,"context_line":"        1.10 - Adds support for sending objects over RPC in retype()"},{"line_number":45,"context_line":"        1.11 - Adds support for sending objects over RPC in"},{"line_number":46,"context_line":"               migrate_volume_to_host()"},{"line_number":47,"context_line":"        1.12 - Add get_usage"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"        ... Mitaka supports messaging 1.11. Any changes to existing methods in"},{"line_number":50,"context_line":"        1.x after this point should be done so that they can handle version cap"}],"source_content_type":"text/x-python","patch_set":18,"id":"1a122d0e_8fc984af","line":47,"range":{"start_line":47,"start_character":7,"end_line":47,"end_character":12},"updated":"2016-04-22 09:18:24.000000000","message":"Sorry, which version do you want to use?\nThis makes me confused, can you explain?\n1.12 in line 47\n2.1 in line 56\n2.0 in line 132.","commit_id":"71c613d16b293efa79d9ba3c7040f48f61f0a823"},{"author":{"_account_id":17275,"name":"Nate Potter","email":"nathaniel.potter@intel.com","username":"npotter"},"change_message_id":"b369728430c9f525ae9bcc5e9672a9932985efb6","unresolved":false,"context_lines":[{"line_number":44,"context_line":"        1.10 - Adds support for sending objects over RPC in retype()"},{"line_number":45,"context_line":"        1.11 - Adds support for sending objects over RPC in"},{"line_number":46,"context_line":"               migrate_volume_to_host()"},{"line_number":47,"context_line":"        1.12 - Add get_usage"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"        ... Mitaka supports messaging 1.11. Any changes to existing methods in"},{"line_number":50,"context_line":"        1.x after this point should be done so that they can handle version cap"}],"source_content_type":"text/x-python","patch_set":18,"id":"1a122d0e_be93bdf9","line":47,"range":{"start_line":47,"start_character":7,"end_line":47,"end_character":12},"in_reply_to":"1a122d0e_8fc984af","updated":"2016-04-22 15:32:18.000000000","message":"So I missed the 2.1 thing and should change that back, but I was getting RPC errors when I bumped it up to 2.1 before like in patch set 16, it said something in oslo was expecting the max rpcapi version to be 2.0, so I bumped up the minor version in the 1.x and decided to keep it at 2.0. This very well might be the wrong way to do it though, I\u0027m not an expert with versioning.","commit_id":"71c613d16b293efa79d9ba3c7040f48f61f0a823"},{"author":{"_account_id":17275,"name":"Nate Potter","email":"nathaniel.potter@intel.com","username":"npotter"},"change_message_id":"3e80d152ce682482ef705a6cfe166191be0bbeb9","unresolved":false,"context_lines":[{"line_number":134,"context_line":"        version \u003d \u00272.1\u0027"},{"line_number":135,"context_line":"        if self.client.can_send_version(version):"},{"line_number":136,"context_line":"            cctxt \u003d self.client.prepare(version\u003dversion)"},{"line_number":137,"context_line":"            return cctxt.call(ctxt, \u0027get_usage\u0027)"},{"line_number":138,"context_line":""},{"line_number":139,"context_line":"    def update_service_capabilities(self, ctxt,"},{"line_number":140,"context_line":"                                    service_name, host,"}],"source_content_type":"text/x-python","patch_set":23,"id":"1a122d0e_01274863","line":137,"range":{"start_line":137,"start_character":12,"end_line":137,"end_character":18},"updated":"2016-04-29 14:16:31.000000000","message":"Should there be an exception here since there\u0027s no legacy version to default to, or is it okay to just not do anything if the client version isn\u0027t updated?","commit_id":"c228a1a39ea7c76ac82448eb9adb9a5b3541e260"}],"etc/cinder/policy.json":[{"author":{"_account_id":20105,"name":"Cao ShuFeng","email":"caosf.fnst@cn.fujitsu.com","username":"caosf.fnst"},"change_message_id":"69ff2e51dbb1602b324b4e4b79b9693dd7d7b67d","unresolved":false,"context_lines":[{"line_number":65,"context_line":"    \"volume_extension:volume_unmanage\": \"rule:admin_api\","},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"    \"volume_extension:capabilities\": \"rule:admin_api\","},{"line_number":68,"context_line":"    \"volume_extension:get_usage\": \"rule:admin_api\","},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"    \"volume:create_transfer\": \"rule:admin_or_owner\","},{"line_number":71,"context_line":"    \"volume:accept_transfer\": \"\","}],"source_content_type":"application/json","patch_set":11,"id":"9a061dce_33c88d74","line":68,"range":{"start_line":68,"start_character":4,"end_line":68,"end_character":51},"updated":"2016-04-10 07:42:51.000000000","message":"I can\u0027t find where this policy is used.","commit_id":"478bbd6f8d1d54fa5f077cfd0f52745f1bf2a393"},{"author":{"_account_id":17275,"name":"Nate Potter","email":"nathaniel.potter@intel.com","username":"npotter"},"change_message_id":"2aaf3c100014da549aa59a6f3bcc7c842c8989d1","unresolved":false,"context_lines":[{"line_number":65,"context_line":"    \"volume_extension:volume_unmanage\": \"rule:admin_api\","},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"    \"volume_extension:capabilities\": \"rule:admin_api\","},{"line_number":68,"context_line":"    \"volume_extension:get_usage\": \"rule:admin_api\","},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"    \"volume:create_transfer\": \"rule:admin_or_owner\","},{"line_number":71,"context_line":"    \"volume:accept_transfer\": \"\","}],"source_content_type":"application/json","patch_set":11,"id":"7a1b2928_511b8c72","line":68,"range":{"start_line":68,"start_character":4,"end_line":68,"end_character":51},"in_reply_to":"9a061dce_33c88d74","updated":"2016-04-11 18:41:22.000000000","message":"Oops, I missed taking this out when I switched it to the scheduler extension instead. I\u0027ll remove this.","commit_id":"478bbd6f8d1d54fa5f077cfd0f52745f1bf2a393"}]}
