)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":9171,"name":"Vipin Balachandran","email":"vipin.bl@gmail.com","username":"vbala"},"change_message_id":"e7e69b681dad9770a42ee98e080b2b3a9b1908da","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Add volumes/summary API support."},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Add a new API to display volumes summary with total number of  volumes"},{"line_number":10,"context_line":"and total size in GB (volume_size: 500 and volume_count: 20)."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"DocImpact"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":12,"id":"bacf61ea_0bdac178","line":9,"range":{"start_line":9,"start_character":61,"end_line":9,"end_character":62},"updated":"2016-07-27 14:26:23.000000000","message":"nit: extra space","commit_id":"bde607393081fb079650b9b6ce4e9f34937d517f"},{"author":{"_account_id":16708,"name":"Kendall Nelson","display_name":"Kendall (diablo_rojo)","email":"kennelson11@gmail.com","username":"kjnelson"},"change_message_id":"7e5407079f53333127ca30323d9f7f3007350233","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Satish Venkatasubramanian \u003csatish.venkatasubramanian@gmail.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2016-08-06 03:07:41 +0530"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Add volumes/summary API support."},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Add a new API to display volumes summary with total number of volumes"},{"line_number":10,"context_line":"and total size in GB (volume_size: 500 and volume_count: 20)."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":15,"id":"9ad45d7e_aa3518db","line":7,"range":{"start_line":7,"start_character":31,"end_line":7,"end_character":32},"updated":"2016-08-09 16:04:44.000000000","message":"Summary line doesn\u0027t need a \u0027.\u0027","commit_id":"5320713aee5bc90a1e2385e7577fcef6b5f23ec2"},{"author":{"_account_id":16708,"name":"Kendall Nelson","display_name":"Kendall (diablo_rojo)","email":"kennelson11@gmail.com","username":"kjnelson"},"change_message_id":"7e5407079f53333127ca30323d9f7f3007350233","unresolved":false,"context_lines":[{"line_number":10,"context_line":"and total size in GB (volume_size: 500 and volume_count: 20)."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"DocImpact"},{"line_number":13,"context_line":"Partially implements blueprint display-volumes-summary-details"},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"Co-Authored-By: MR Swami Reddy \u003cswamireddy@gmail.com\u003e"},{"line_number":16,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":15,"id":"9ad45d7e_0a7264ad","line":13,"range":{"start_line":13,"start_character":0,"end_line":13,"end_character":62},"updated":"2016-08-09 16:04:44.000000000","message":"Partially-Implements: blueprint display-volumes-summary-details","commit_id":"5320713aee5bc90a1e2385e7577fcef6b5f23ec2"},{"author":{"_account_id":9171,"name":"Vipin Balachandran","email":"vipin.bl@gmail.com","username":"vbala"},"change_message_id":"64c0b177a6822fc29c27fb180f56d2bf175a5b73","unresolved":false,"context_lines":[{"line_number":9,"context_line":"Add a new API to display volumes summary with total number of volumes"},{"line_number":10,"context_line":"and total size in GB (volume_size: 500 and volume_count: 20)."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"DocImpact"},{"line_number":13,"context_line":"Partially-Implements: blueprint display-volumes-summary-details"},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"Co-Authored-By: MR Swami Reddy \u003cswamireddy@gmail.com\u003e"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":17,"id":"3ac371cc_758b7d1f","line":12,"updated":"2016-08-18 08:48:20.000000000","message":"Please add APIImpact","commit_id":"24d37c2b6dc3b4fe5eec09db535cfae1bf073cf7"},{"author":{"_account_id":20945,"name":"Satish Venkatasubramanian","email":"satish.venkatasubramanian@gmail.com","username":"satish-venkatasubramanian-7"},"change_message_id":"ad64b661001ba609da81745884a2b355fdf96ade","unresolved":false,"context_lines":[{"line_number":9,"context_line":"Add a new API to display volumes summary with total number of volumes"},{"line_number":10,"context_line":"and total size in GB (volume_size: 500 and volume_count: 20)."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"DocImpact"},{"line_number":13,"context_line":"Partially-Implements: blueprint display-volumes-summary-details"},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"Co-Authored-By: MR Swami Reddy \u003cswamireddy@gmail.com\u003e"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":17,"id":"3ac371cc_46adf299","line":12,"in_reply_to":"3ac371cc_758b7d1f","updated":"2016-08-18 10:50:30.000000000","message":"We shall incorporate this change in the next patch.","commit_id":"24d37c2b6dc3b4fe5eec09db535cfae1bf073cf7"}],"cinder/api/openstack/rest_api_version_history.rst":[{"author":{"_account_id":9171,"name":"Vipin Balachandran","email":"vipin.bl@gmail.com","username":"vbala"},"change_message_id":"4375c6e9cfef1e08f5be225f0aff06589d863424","unresolved":false,"context_lines":[{"line_number":72,"context_line":""},{"line_number":73,"context_line":"3.7"},{"line_number":74,"context_line":"---"},{"line_number":75,"context_line":"  Added /summary API."}],"source_content_type":"text/x-rst","patch_set":7,"id":"dada55a8_6c89bdca","line":75,"updated":"2016-07-18 11:03:29.000000000","message":"I think the new API is for \"volumes\" summary. Please make that clear.","commit_id":"1886959abeae61f050cce9b7316d52b3e59a67c9"},{"author":{"_account_id":20945,"name":"Satish Venkatasubramanian","email":"satish.venkatasubramanian@gmail.com","username":"satish-venkatasubramanian-7"},"change_message_id":"c61a75da0db757728b98a155cb884680015d3834","unresolved":false,"context_lines":[{"line_number":72,"context_line":""},{"line_number":73,"context_line":"3.7"},{"line_number":74,"context_line":"---"},{"line_number":75,"context_line":"  Added /summary API."}],"source_content_type":"text/x-rst","patch_set":7,"id":"dada55a8_169befca","line":75,"in_reply_to":"dada55a8_6c89bdca","updated":"2016-07-18 12:32:04.000000000","message":"Thanks. I\u0027ll update this in the next patch.","commit_id":"1886959abeae61f050cce9b7316d52b3e59a67c9"}],"cinder/api/v2/volumes.py":[{"author":{"_account_id":9171,"name":"Vipin Balachandran","email":"vipin.bl@gmail.com","username":"vbala"},"change_message_id":"4375c6e9cfef1e08f5be225f0aff06589d863424","unresolved":false,"context_lines":[{"line_number":89,"context_line":"        return self._get_volumes(req, is_detail\u003dTrue)"},{"line_number":90,"context_line":""},{"line_number":91,"context_line":"    @wsgi.Controller.api_version(SUMMARY_BASE_MICRO_VERSION)"},{"line_number":92,"context_line":"    def summary(self, req):"},{"line_number":93,"context_line":"        \"\"\"Return summary of volumes.\"\"\""},{"line_number":94,"context_line":"        context \u003d req.environ[\u0027cinder.context\u0027]"},{"line_number":95,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"dada55a8_ac2f35a0","line":92,"updated":"2016-07-18 11:03:29.000000000","message":"Why we are not adding this is v3/volumes?","commit_id":"1886959abeae61f050cce9b7316d52b3e59a67c9"},{"author":{"_account_id":20945,"name":"Satish Venkatasubramanian","email":"satish.venkatasubramanian@gmail.com","username":"satish-venkatasubramanian-7"},"change_message_id":"c61a75da0db757728b98a155cb884680015d3834","unresolved":false,"context_lines":[{"line_number":89,"context_line":"        return self._get_volumes(req, is_detail\u003dTrue)"},{"line_number":90,"context_line":""},{"line_number":91,"context_line":"    @wsgi.Controller.api_version(SUMMARY_BASE_MICRO_VERSION)"},{"line_number":92,"context_line":"    def summary(self, req):"},{"line_number":93,"context_line":"        \"\"\"Return summary of volumes.\"\"\""},{"line_number":94,"context_line":"        context \u003d req.environ[\u0027cinder.context\u0027]"},{"line_number":95,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"dada55a8_f6629bac","line":92,"in_reply_to":"dada55a8_ac2f35a0","updated":"2016-07-18 12:32:04.000000000","message":"As per the review comments from Sean McGinnis, all new API\u0027s would need to be as a part of a micro version of v3, and hence not included as a part of v3.","commit_id":"1886959abeae61f050cce9b7316d52b3e59a67c9"},{"author":{"_account_id":9171,"name":"Vipin Balachandran","email":"vipin.bl@gmail.com","username":"vbala"},"change_message_id":"3dce0b2f161ed503b95d34089f3f3e429a22a0b0","unresolved":false,"context_lines":[{"line_number":89,"context_line":"        return self._get_volumes(req, is_detail\u003dTrue)"},{"line_number":90,"context_line":""},{"line_number":91,"context_line":"    @wsgi.Controller.api_version(SUMMARY_BASE_MICRO_VERSION)"},{"line_number":92,"context_line":"    def summary(self, req):"},{"line_number":93,"context_line":"        \"\"\"Return summary of volumes.\"\"\""},{"line_number":94,"context_line":"        context \u003d req.environ[\u0027cinder.context\u0027]"},{"line_number":95,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"dada55a8_4767fd4c","line":92,"in_reply_to":"dada55a8_f6629bac","updated":"2016-07-20 10:53:56.000000000","message":"I think Sean was suggesting not to modify v2.","commit_id":"1886959abeae61f050cce9b7316d52b3e59a67c9"},{"author":{"_account_id":9171,"name":"Vipin Balachandran","email":"vipin.bl@gmail.com","username":"vbala"},"change_message_id":"4375c6e9cfef1e08f5be225f0aff06589d863424","unresolved":false,"context_lines":[{"line_number":98,"context_line":"        sort_keys, sort_dirs \u003d common.get_sort_params(params)"},{"line_number":99,"context_line":"        filters \u003d params"},{"line_number":100,"context_line":""},{"line_number":101,"context_line":"        volumes \u003d self.volume_api.get_all(context, marker, limit,"},{"line_number":102,"context_line":"                                          sort_keys\u003dsort_keys,"},{"line_number":103,"context_line":"                                          sort_dirs\u003dsort_dirs,"},{"line_number":104,"context_line":"                                          filters\u003dfilters,"}],"source_content_type":"text/x-python","patch_set":7,"id":"dada55a8_20e9891b","line":101,"range":{"start_line":101,"start_character":59,"end_line":101,"end_character":64},"updated":"2016-07-18 11:03:29.000000000","message":"If the number of volumes is greater than the limit, we will not include all volumes in the summary. Is that the desired behavior? I think the summary should include all volumes.","commit_id":"1886959abeae61f050cce9b7316d52b3e59a67c9"},{"author":{"_account_id":20945,"name":"Satish Venkatasubramanian","email":"satish.venkatasubramanian@gmail.com","username":"satish-venkatasubramanian-7"},"change_message_id":"c61a75da0db757728b98a155cb884680015d3834","unresolved":false,"context_lines":[{"line_number":98,"context_line":"        sort_keys, sort_dirs \u003d common.get_sort_params(params)"},{"line_number":99,"context_line":"        filters \u003d params"},{"line_number":100,"context_line":""},{"line_number":101,"context_line":"        volumes \u003d self.volume_api.get_all(context, marker, limit,"},{"line_number":102,"context_line":"                                          sort_keys\u003dsort_keys,"},{"line_number":103,"context_line":"                                          sort_dirs\u003dsort_dirs,"},{"line_number":104,"context_line":"                                          filters\u003dfilters,"}],"source_content_type":"text/x-python","patch_set":7,"id":"dada55a8_1482c752","line":101,"range":{"start_line":101,"start_character":59,"end_line":101,"end_character":64},"in_reply_to":"dada55a8_20e9891b","updated":"2016-07-18 12:32:04.000000000","message":"Thanks. I\u0027ll fix this in the next patch.","commit_id":"1886959abeae61f050cce9b7316d52b3e59a67c9"},{"author":{"_account_id":9171,"name":"Vipin Balachandran","email":"vipin.bl@gmail.com","username":"vbala"},"change_message_id":"9bff328b86086ed780954fb35861a6574c7a4e60","unresolved":false,"context_lines":[{"line_number":89,"context_line":"        return self._get_volumes(req, is_detail\u003dTrue)"},{"line_number":90,"context_line":""},{"line_number":91,"context_line":"    @wsgi.Controller.api_version(SUMMARY_BASE_MICRO_VERSION)"},{"line_number":92,"context_line":"    def summary(self, req):"},{"line_number":93,"context_line":"        \"\"\"Return summary of volumes.\"\"\""},{"line_number":94,"context_line":"        context \u003d req.environ[\u0027cinder.context\u0027]"},{"line_number":95,"context_line":"        params \u003d req.params.copy()"}],"source_content_type":"text/x-python","patch_set":8,"id":"dada55a8_ec6ff628","line":92,"updated":"2016-07-20 11:06:12.000000000","message":"This should be in v3/volumes.","commit_id":"9562ec594d9ea29a6441e7a7d8173f34f40b7baa"}],"cinder/api/v3/views/volumes.py":[{"author":{"_account_id":15961,"name":"lisali","email":"xiaoyan.li@intel.com","username":"lisali"},"change_message_id":"a049582bdc228b5cab27e827c4e1b071e9bc5fa0","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2012 OpenStack Foundation"},{"line_number":2,"context_line":"# All Rights Reserved."},{"line_number":3,"context_line":"#"},{"line_number":4,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"}],"source_content_type":"text/x-python","patch_set":9,"id":"dada55a8_e2f57eed","line":1,"updated":"2016-07-25 08:54:04.000000000","message":"2012?","commit_id":"08ddf0b0312cfb0463b107c557ec99b027d25903"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"06205a4b9390d30abdbb774382be44b9790421ec","unresolved":false,"context_lines":[{"line_number":15,"context_line":""},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"class ViewBuilder(common.ViewBuilder):"},{"line_number":18,"context_line":"    \"\"\"Model a server API response as a python dictionary.\"\"\""},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"    _collection_name \u003d \"volumes\""},{"line_number":21,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"bacf61ea_d3adc532","line":18,"updated":"2016-07-28 12:58:54.000000000","message":"This docstring doesn\u0027t describe class good enough","commit_id":"3e202fab0778d07b17be3c90fef9866d4a417701"},{"author":{"_account_id":20945,"name":"Satish Venkatasubramanian","email":"satish.venkatasubramanian@gmail.com","username":"satish-venkatasubramanian-7"},"change_message_id":"7b9abecaf481201e556f79ebe36f905e08b7d2e3","unresolved":false,"context_lines":[{"line_number":15,"context_line":""},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"class ViewBuilder(common.ViewBuilder):"},{"line_number":18,"context_line":"    \"\"\"Model a server API response as a python dictionary.\"\"\""},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"    _collection_name \u003d \"volumes\""},{"line_number":21,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"bacf61ea_a2127960","line":18,"in_reply_to":"bacf61ea_d3adc532","updated":"2016-07-28 14:29:21.000000000","message":"The v2/views/volumes.py and the v3/views/messages.py also have the doc string and hence the same was followed.","commit_id":"3e202fab0778d07b17be3c90fef9866d4a417701"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"06205a4b9390d30abdbb774382be44b9790421ec","unresolved":false,"context_lines":[{"line_number":23,"context_line":"        \"\"\"Initialize view builder.\"\"\""},{"line_number":24,"context_line":"        super(ViewBuilder, self).__init__()"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"    def quick_summary(self, volume_count, volume_size):"},{"line_number":27,"context_line":"        \"\"\"Number of volumes and size of volumes.\"\"\""},{"line_number":28,"context_line":"        return {"},{"line_number":29,"context_line":"            \u0027volume-summary\u0027: {"}],"source_content_type":"text/x-python","patch_set":13,"id":"bacf61ea_73bcd96c","line":26,"updated":"2016-07-28 12:58:54.000000000","message":"IMO, it would be better to pass volumes collection to this method and calculate count and size here.\n\nI would like to get more feedback on this, so I won\u0027t -1 now","commit_id":"3e202fab0778d07b17be3c90fef9866d4a417701"},{"author":{"_account_id":20945,"name":"Satish Venkatasubramanian","email":"satish.venkatasubramanian@gmail.com","username":"satish-venkatasubramanian-7"},"change_message_id":"7b9abecaf481201e556f79ebe36f905e08b7d2e3","unresolved":false,"context_lines":[{"line_number":23,"context_line":"        \"\"\"Initialize view builder.\"\"\""},{"line_number":24,"context_line":"        super(ViewBuilder, self).__init__()"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"    def quick_summary(self, volume_count, volume_size):"},{"line_number":27,"context_line":"        \"\"\"Number of volumes and size of volumes.\"\"\""},{"line_number":28,"context_line":"        return {"},{"line_number":29,"context_line":"            \u0027volume-summary\u0027: {"}],"source_content_type":"text/x-python","patch_set":13,"id":"bacf61ea_909b3c72","line":26,"in_reply_to":"bacf61ea_73bcd96c","updated":"2016-07-28 14:29:21.000000000","message":"As per my understanding the calculations are done in various methods in v3/volumes.py and the result format is done in the various methods in v3/views/volumes.py.\n\nThe same pattern is followed for volume/summary as well.","commit_id":"3e202fab0778d07b17be3c90fef9866d4a417701"},{"author":{"_account_id":9171,"name":"Vipin Balachandran","email":"vipin.bl@gmail.com","username":"vbala"},"change_message_id":"64c0b177a6822fc29c27fb180f56d2bf175a5b73","unresolved":false,"context_lines":[{"line_number":14,"context_line":"from cinder.api import common"},{"line_number":15,"context_line":""},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"class ViewBuilder(common.ViewBuilder):"},{"line_number":18,"context_line":"    \"\"\"Model a server API response as a python dictionary.\"\"\""},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"    _collection_name \u003d \"volumes\""}],"source_content_type":"text/x-python","patch_set":17,"id":"3ac371cc_55664151","line":17,"range":{"start_line":17,"start_character":18,"end_line":17,"end_character":36},"updated":"2016-08-18 08:48:20.000000000","message":"Are we using any method from this class?","commit_id":"24d37c2b6dc3b4fe5eec09db535cfae1bf073cf7"},{"author":{"_account_id":20945,"name":"Satish Venkatasubramanian","email":"satish.venkatasubramanian@gmail.com","username":"satish-venkatasubramanian-7"},"change_message_id":"ad64b661001ba609da81745884a2b355fdf96ade","unresolved":false,"context_lines":[{"line_number":14,"context_line":"from cinder.api import common"},{"line_number":15,"context_line":""},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"class ViewBuilder(common.ViewBuilder):"},{"line_number":18,"context_line":"    \"\"\"Model a server API response as a python dictionary.\"\"\""},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"    _collection_name \u003d \"volumes\""}],"source_content_type":"text/x-python","patch_set":17,"id":"3ac371cc_03180cd2","line":17,"range":{"start_line":17,"start_character":18,"end_line":17,"end_character":36},"in_reply_to":"3ac371cc_55664151","updated":"2016-08-18 10:50:30.000000000","message":"No we are not using any methods from the ViewBuilder Class.\n\nI will remove the same from the volume.py and will resubmit my patch.","commit_id":"24d37c2b6dc3b4fe5eec09db535cfae1bf073cf7"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"c82ef579660c8d4f2fc399d2206d29627963e834","unresolved":false,"context_lines":[{"line_number":19,"context_line":"        return {"},{"line_number":20,"context_line":"            \u0027volume-summary\u0027: {"},{"line_number":21,"context_line":"                \u0027total_count\u0027: volume_count,"},{"line_number":22,"context_line":"                \u0027total_size\u0027: volume_size"},{"line_number":23,"context_line":"            },"},{"line_number":24,"context_line":"        }"}],"source_content_type":"text/x-python","patch_set":19,"id":"1ac06dbe_dde55d38","line":22,"updated":"2016-08-23 12:57:30.000000000","message":"http://docs.openstack.org/developer/hacking/#dictionaries-lists","commit_id":"3db21d003fb6a2ea42043c4e262e8334541d7544"}],"cinder/api/v3/volumes.py":[{"author":{"_account_id":15961,"name":"lisali","email":"xiaoyan.li@intel.com","username":"lisali"},"change_message_id":"a049582bdc228b5cab27e827c4e1b071e9bc5fa0","unresolved":false,"context_lines":[{"line_number":79,"context_line":"        filters \u003d params"},{"line_number":80,"context_line":""},{"line_number":81,"context_line":"        volumes \u003d self.volume_api.get_all(context, None, None,"},{"line_number":82,"context_line":"                                          sort_keys\u003dNone,"},{"line_number":83,"context_line":"                                          sort_dirs\u003dNone,"},{"line_number":84,"context_line":"                                          filters\u003dfilters,"},{"line_number":85,"context_line":"                                          viewable_admin_meta\u003dTrue,"},{"line_number":86,"context_line":"                                          offset\u003dNone)"}],"source_content_type":"text/x-python","patch_set":9,"id":"dada55a8_82f2c298","line":83,"range":{"start_line":82,"start_character":0,"end_line":83,"end_character":57},"updated":"2016-07-25 08:54:04.000000000","message":"https://github.com/openstack/cinder/blob/master/cinder/volume/api.py#L477\n\nDefault value for sort_keys and sort_dirs are None, no need to set here.","commit_id":"08ddf0b0312cfb0463b107c557ec99b027d25903"},{"author":{"_account_id":15961,"name":"lisali","email":"xiaoyan.li@intel.com","username":"lisali"},"change_message_id":"a049582bdc228b5cab27e827c4e1b071e9bc5fa0","unresolved":false,"context_lines":[{"line_number":82,"context_line":"                                          sort_keys\u003dNone,"},{"line_number":83,"context_line":"                                          sort_dirs\u003dNone,"},{"line_number":84,"context_line":"                                          filters\u003dfilters,"},{"line_number":85,"context_line":"                                          viewable_admin_meta\u003dTrue,"},{"line_number":86,"context_line":"                                          offset\u003dNone)"},{"line_number":87,"context_line":""},{"line_number":88,"context_line":"        return view_builder_v3.quick_summary(len(volumes),"}],"source_content_type":"text/x-python","patch_set":9,"id":"dada55a8_62a86e78","line":85,"updated":"2016-07-25 08:54:04.000000000","message":"I don\u0027t think we need to set viewable_admin_meta as True here as we don\u0027t need to read volume_admin_metadata from db.","commit_id":"08ddf0b0312cfb0463b107c557ec99b027d25903"},{"author":{"_account_id":15961,"name":"lisali","email":"xiaoyan.li@intel.com","username":"lisali"},"change_message_id":"a049582bdc228b5cab27e827c4e1b071e9bc5fa0","unresolved":false,"context_lines":[{"line_number":83,"context_line":"                                          sort_dirs\u003dNone,"},{"line_number":84,"context_line":"                                          filters\u003dfilters,"},{"line_number":85,"context_line":"                                          viewable_admin_meta\u003dTrue,"},{"line_number":86,"context_line":"                                          offset\u003dNone)"},{"line_number":87,"context_line":""},{"line_number":88,"context_line":"        return view_builder_v3.quick_summary(len(volumes),"},{"line_number":89,"context_line":"                                             sum(volume[\u0027size\u0027]"}],"source_content_type":"text/x-python","patch_set":9,"id":"dada55a8_a22d46ff","line":86,"updated":"2016-07-25 08:54:04.000000000","message":"No need to set offset as None, same as sort_keys.","commit_id":"08ddf0b0312cfb0463b107c557ec99b027d25903"},{"author":{"_account_id":15961,"name":"lisali","email":"xiaoyan.li@intel.com","username":"lisali"},"change_message_id":"a049582bdc228b5cab27e827c4e1b071e9bc5fa0","unresolved":false,"context_lines":[{"line_number":84,"context_line":"                                          filters\u003dfilters,"},{"line_number":85,"context_line":"                                          viewable_admin_meta\u003dTrue,"},{"line_number":86,"context_line":"                                          offset\u003dNone)"},{"line_number":87,"context_line":""},{"line_number":88,"context_line":"        return view_builder_v3.quick_summary(len(volumes),"},{"line_number":89,"context_line":"                                             sum(volume[\u0027size\u0027]"},{"line_number":90,"context_line":"                                                 for volume in volumes))"}],"source_content_type":"text/x-python","patch_set":9,"id":"dada55a8_c2783afb","line":87,"updated":"2016-07-25 08:54:04.000000000","message":"I think you can just get volumes with following call:\n\nvolumes \u003d self.volume_api.get_all(context)","commit_id":"08ddf0b0312cfb0463b107c557ec99b027d25903"},{"author":{"_account_id":15961,"name":"lisali","email":"xiaoyan.li@intel.com","username":"lisali"},"change_message_id":"59e5d8acba149c01841e03e7cc55a6729afb5d65","unresolved":false,"context_lines":[{"line_number":76,"context_line":"        view_builder_v3 \u003d volume_views_v3.ViewBuilder()"},{"line_number":77,"context_line":"        context \u003d req.environ[\u0027cinder.context\u0027]"},{"line_number":78,"context_line":"        params \u003d req.params.copy()"},{"line_number":79,"context_line":"        filters \u003d params"},{"line_number":80,"context_line":""},{"line_number":81,"context_line":"        volumes \u003d self.volume_api.get_all(context, filters\u003dfilters)"},{"line_number":82,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"dada55a8_5592d4f6","line":79,"updated":"2016-07-27 05:53:06.000000000","message":"You need to handle the filters. Or remove the invalid filters like v3/volumes, or raise an exception if there are invalid filters.\n\n\nhttps://github.com/openstack/cinder/blob/master/cinder/api/v3/volumes.py#L39","commit_id":"4f05aa41974c00074b55636b04078fa1b59c6221"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"06205a4b9390d30abdbb774382be44b9790421ec","unresolved":false,"context_lines":[{"line_number":81,"context_line":"        utils.remove_invalid_filter_options(context, filters,"},{"line_number":82,"context_line":"                                            self._get_volume_filter_options())"},{"line_number":83,"context_line":""},{"line_number":84,"context_line":"        volumes \u003d self.volume_api.get_all(context, filters\u003dfilters)"},{"line_number":85,"context_line":""},{"line_number":86,"context_line":"        return view_builder_v3.quick_summary(len(volumes),"},{"line_number":87,"context_line":"                                             sum(volume[\u0027size\u0027]"}],"source_content_type":"text/x-python","patch_set":13,"id":"bacf61ea_13047d15","line":84,"updated":"2016-07-28 12:58:54.000000000","message":"According to the release notes, we don\u0027t need filters here","commit_id":"3e202fab0778d07b17be3c90fef9866d4a417701"},{"author":{"_account_id":20945,"name":"Satish Venkatasubramanian","email":"satish.venkatasubramanian@gmail.com","username":"satish-venkatasubramanian-7"},"change_message_id":"7b9abecaf481201e556f79ebe36f905e08b7d2e3","unresolved":false,"context_lines":[{"line_number":81,"context_line":"        utils.remove_invalid_filter_options(context, filters,"},{"line_number":82,"context_line":"                                            self._get_volume_filter_options())"},{"line_number":83,"context_line":""},{"line_number":84,"context_line":"        volumes \u003d self.volume_api.get_all(context, filters\u003dfilters)"},{"line_number":85,"context_line":""},{"line_number":86,"context_line":"        return view_builder_v3.quick_summary(len(volumes),"},{"line_number":87,"context_line":"                                             sum(volume[\u0027size\u0027]"}],"source_content_type":"text/x-python","patch_set":13,"id":"bacf61ea_10d58cb8","line":84,"in_reply_to":"bacf61ea_13047d15","updated":"2016-07-28 14:29:21.000000000","message":"IMHO filters are needed here because when an admin uses this API to get summary of all tenants then he would pass an argument volumes/summary?all_tenants\u003d1. This argument would be processed only if the filters is passed to the get_all function.","commit_id":"3e202fab0778d07b17be3c90fef9866d4a417701"},{"author":{"_account_id":1207,"name":"Duncan Thomas","email":"duncan.thomas@gmail.com","username":"duncan-thomas"},"change_message_id":"0cf971ca59cded3840e8e481767ab10b230dc442","unresolved":false,"context_lines":[{"line_number":86,"context_line":"        utils.remove_invalid_filter_options(context, filters,"},{"line_number":87,"context_line":"                                            self._get_volume_filter_options())"},{"line_number":88,"context_line":""},{"line_number":89,"context_line":"        volumes \u003d self.volume_api.get_all(context, filters\u003dfilters)"},{"line_number":90,"context_line":""},{"line_number":91,"context_line":"        return view_builder_v3.quick_summary(len(volumes),"},{"line_number":92,"context_line":"                                             sum(volume[\u0027size\u0027]"}],"source_content_type":"text/x-python","patch_set":15,"id":"bacf61ea_726541df","line":89,"range":{"start_line":89,"start_character":0,"end_line":89,"end_character":67},"updated":"2016-08-07 15:16:44.000000000","message":"Can we do better than pulling all the records and doing the sum in python? At large volume counts, this is going to suck, I suspect (try it with 1 million volumes). SQL count and sum would be better, I would expect.","commit_id":"5320713aee5bc90a1e2385e7577fcef6b5f23ec2"},{"author":{"_account_id":9171,"name":"Vipin Balachandran","email":"vipin.bl@gmail.com","username":"vbala"},"change_message_id":"64c0b177a6822fc29c27fb180f56d2bf175a5b73","unresolved":false,"context_lines":[{"line_number":81,"context_line":"        view_builder_v3 \u003d volume_views_v3.ViewBuilder()"},{"line_number":82,"context_line":"        context \u003d req.environ[\u0027cinder.context\u0027]"},{"line_number":83,"context_line":"        params \u003d req.params.copy()"},{"line_number":84,"context_line":"        filters \u003d params"},{"line_number":85,"context_line":""},{"line_number":86,"context_line":"        utils.remove_invalid_filter_options(context, filters,"},{"line_number":87,"context_line":"                                            self._get_volume_filter_options())"}],"source_content_type":"text/x-python","patch_set":17,"id":"3ac371cc_f8c76493","line":84,"updated":"2016-08-18 08:48:20.000000000","message":"filters \u003d req.params.copy()","commit_id":"24d37c2b6dc3b4fe5eec09db535cfae1bf073cf7"},{"author":{"_account_id":20945,"name":"Satish Venkatasubramanian","email":"satish.venkatasubramanian@gmail.com","username":"satish-venkatasubramanian-7"},"change_message_id":"ad64b661001ba609da81745884a2b355fdf96ade","unresolved":false,"context_lines":[{"line_number":81,"context_line":"        view_builder_v3 \u003d volume_views_v3.ViewBuilder()"},{"line_number":82,"context_line":"        context \u003d req.environ[\u0027cinder.context\u0027]"},{"line_number":83,"context_line":"        params \u003d req.params.copy()"},{"line_number":84,"context_line":"        filters \u003d params"},{"line_number":85,"context_line":""},{"line_number":86,"context_line":"        utils.remove_invalid_filter_options(context, filters,"},{"line_number":87,"context_line":"                                            self._get_volume_filter_options())"}],"source_content_type":"text/x-python","patch_set":17,"id":"3ac371cc_43ea0475","line":84,"in_reply_to":"3ac371cc_f8c76493","updated":"2016-08-18 10:50:30.000000000","message":"This change has been incorporated and will be available in my next patch.","commit_id":"24d37c2b6dc3b4fe5eec09db535cfae1bf073cf7"},{"author":{"_account_id":9171,"name":"Vipin Balachandran","email":"vipin.bl@gmail.com","username":"vbala"},"change_message_id":"64c0b177a6822fc29c27fb180f56d2bf175a5b73","unresolved":false,"context_lines":[{"line_number":87,"context_line":"                                            self._get_volume_filter_options())"},{"line_number":88,"context_line":""},{"line_number":89,"context_line":"        volumes \u003d self.volume_api.get_volume_summary(context, filters\u003dfilters)"},{"line_number":90,"context_line":"        return view_builder_v3.quick_summary(volumes[0], float(volumes[1]))"},{"line_number":91,"context_line":""},{"line_number":92,"context_line":""},{"line_number":93,"context_line":"def create_resource(ext_mgr):"}],"source_content_type":"text/x-python","patch_set":17,"id":"3ac371cc_f875a463","line":90,"range":{"start_line":90,"start_character":57,"end_line":90,"end_character":62},"updated":"2016-08-18 08:48:20.000000000","message":"vol size is int, so why we need to convert to float?","commit_id":"24d37c2b6dc3b4fe5eec09db535cfae1bf073cf7"},{"author":{"_account_id":20945,"name":"Satish Venkatasubramanian","email":"satish.venkatasubramanian@gmail.com","username":"satish-venkatasubramanian-7"},"change_message_id":"ad64b661001ba609da81745884a2b355fdf96ade","unresolved":false,"context_lines":[{"line_number":87,"context_line":"                                            self._get_volume_filter_options())"},{"line_number":88,"context_line":""},{"line_number":89,"context_line":"        volumes \u003d self.volume_api.get_volume_summary(context, filters\u003dfilters)"},{"line_number":90,"context_line":"        return view_builder_v3.quick_summary(volumes[0], float(volumes[1]))"},{"line_number":91,"context_line":""},{"line_number":92,"context_line":""},{"line_number":93,"context_line":"def create_resource(ext_mgr):"}],"source_content_type":"text/x-python","patch_set":17,"id":"3ac371cc_63b5807c","line":90,"range":{"start_line":90,"start_character":57,"end_line":90,"end_character":62},"in_reply_to":"3ac371cc_f875a463","updated":"2016-08-18 10:50:30.000000000","message":"This change has been incorporated and will be available in my next patch.","commit_id":"24d37c2b6dc3b4fe5eec09db535cfae1bf073cf7"}],"cinder/db/sqlalchemy/api.py":[{"author":{"_account_id":9171,"name":"Vipin Balachandran","email":"vipin.bl@gmail.com","username":"vbala"},"change_message_id":"64c0b177a6822fc29c27fb180f56d2bf175a5b73","unresolved":false,"context_lines":[{"line_number":1776,"context_line":""},{"line_number":1777,"context_line":""},{"line_number":1778,"context_line":"@require_admin_context"},{"line_number":1779,"context_line":"def get_volume_summary_all(context, filters\u003dNone):"},{"line_number":1780,"context_line":"    \"\"\"Retrieves all volumes summary."},{"line_number":1781,"context_line":""},{"line_number":1782,"context_line":"    :param context: context to query under"}],"source_content_type":"text/x-python","patch_set":17,"id":"3ac371cc_d8e54809","line":1779,"updated":"2016-08-18 08:48:20.000000000","message":"Why this is limited to admin?\n\nA normal user would also like to get a summary of volumes owned by him.","commit_id":"24d37c2b6dc3b4fe5eec09db535cfae1bf073cf7"},{"author":{"_account_id":20945,"name":"Satish Venkatasubramanian","email":"satish.venkatasubramanian@gmail.com","username":"satish-venkatasubramanian-7"},"change_message_id":"ad64b661001ba609da81745884a2b355fdf96ade","unresolved":false,"context_lines":[{"line_number":1776,"context_line":""},{"line_number":1777,"context_line":""},{"line_number":1778,"context_line":"@require_admin_context"},{"line_number":1779,"context_line":"def get_volume_summary_all(context, filters\u003dNone):"},{"line_number":1780,"context_line":"    \"\"\"Retrieves all volumes summary."},{"line_number":1781,"context_line":""},{"line_number":1782,"context_line":"    :param context: context to query under"}],"source_content_type":"text/x-python","patch_set":17,"id":"3ac371cc_6343c06c","line":1779,"in_reply_to":"3ac371cc_d8e54809","updated":"2016-08-18 10:50:30.000000000","message":"This change has been incorporated and will be available in my next patch.","commit_id":"24d37c2b6dc3b4fe5eec09db535cfae1bf073cf7"},{"author":{"_account_id":1207,"name":"Duncan Thomas","email":"duncan.thomas@gmail.com","username":"duncan-thomas"},"change_message_id":"fb1210456568c71ba0f5823633c4eff931757ffe","unresolved":false,"context_lines":[{"line_number":1776,"context_line":""},{"line_number":1777,"context_line":""},{"line_number":1778,"context_line":"@require_admin_context"},{"line_number":1779,"context_line":"def get_volume_summary_all(context, filters\u003dNone):"},{"line_number":1780,"context_line":"    \"\"\"Retrieves all volumes summary."},{"line_number":1781,"context_line":""},{"line_number":1782,"context_line":"    :param context: context to query under"}],"source_content_type":"text/x-python","patch_set":18,"id":"1ac06dbe_721caa77","line":1779,"range":{"start_line":1779,"start_character":36,"end_line":1779,"end_character":43},"updated":"2016-08-22 10:44:00.000000000","message":"Unused parameter","commit_id":"10a6ba221e95fd1796666fb584dccb89afd7ae0b"},{"author":{"_account_id":1207,"name":"Duncan Thomas","email":"duncan.thomas@gmail.com","username":"duncan-thomas"},"change_message_id":"fb1210456568c71ba0f5823633c4eff931757ffe","unresolved":false,"context_lines":[{"line_number":2099,"context_line":""},{"line_number":2100,"context_line":""},{"line_number":2101,"context_line":"@require_context"},{"line_number":2102,"context_line":"def get_volume_summary_by_project(context, project_id, filters\u003dNone):"},{"line_number":2103,"context_line":"    \"\"\"Retrieves all volumes summary in a project."},{"line_number":2104,"context_line":""},{"line_number":2105,"context_line":"    :param context: context to query under"}],"source_content_type":"text/x-python","patch_set":18,"id":"1ac06dbe_95003003","line":2102,"range":{"start_line":2102,"start_character":55,"end_line":2102,"end_character":62},"updated":"2016-08-22 10:44:00.000000000","message":"unused parameter","commit_id":"10a6ba221e95fd1796666fb584dccb89afd7ae0b"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"c82ef579660c8d4f2fc399d2206d29627963e834","unresolved":false,"context_lines":[{"line_number":2102,"context_line":"    :param project_id: project for all volumes being retrieved"},{"line_number":2103,"context_line":"    :returns: volume summary of a project"},{"line_number":2104,"context_line":"    \"\"\""},{"line_number":2105,"context_line":"    query \u003d model_query(context, func.count(models.Volume.id),"},{"line_number":2106,"context_line":"                        func.sum(models.Volume.size), read_deleted\u003d\"no\").\\"},{"line_number":2107,"context_line":"        filter_by(project_id\u003dproject_id)"},{"line_number":2108,"context_line":""},{"line_number":2109,"context_line":"    if query is None:"},{"line_number":2110,"context_line":"        return []"}],"source_content_type":"text/x-python","patch_set":19,"id":"1ac06dbe_3d291138","line":2107,"range":{"start_line":2105,"start_character":0,"end_line":2107,"end_character":40},"updated":"2016-08-23 12:57:30.000000000","message":"Please wrap long lines using parentheses. [1]\n\n[1] http://docs.openstack.org/developer/hacking/#general","commit_id":"3db21d003fb6a2ea42043c4e262e8334541d7544"}],"cinder/tests/unit/api/v2/test_volumes.py":[{"author":{"_account_id":9171,"name":"Vipin Balachandran","email":"vipin.bl@gmail.com","username":"vbala"},"change_message_id":"4375c6e9cfef1e08f5be225f0aff06589d863424","unresolved":false,"context_lines":[{"line_number":128,"context_line":"        self.assertTrue(mock_validate.called)"},{"line_number":129,"context_line":""},{"line_number":130,"context_line":"    @classmethod"},{"line_number":131,"context_line":"    def _vol_in_request_body(self,"},{"line_number":132,"context_line":"                             size\u003dstubs.DEFAULT_VOL_SIZE,"},{"line_number":133,"context_line":"                             name\u003dstubs.DEFAULT_VOL_NAME,"},{"line_number":134,"context_line":"                             description\u003dstubs.DEFAULT_VOL_DESCRIPTION,"}],"source_content_type":"text/x-python","patch_set":7,"id":"dada55a8_000a85d2","line":131,"range":{"start_line":131,"start_character":29,"end_line":131,"end_character":33},"updated":"2016-07-18 11:03:29.000000000","message":"I think \u0027self\u0027 is not appropriate here.","commit_id":"1886959abeae61f050cce9b7316d52b3e59a67c9"},{"author":{"_account_id":20945,"name":"Satish Venkatasubramanian","email":"satish.venkatasubramanian@gmail.com","username":"satish-venkatasubramanian-7"},"change_message_id":"c61a75da0db757728b98a155cb884680015d3834","unresolved":false,"context_lines":[{"line_number":128,"context_line":"        self.assertTrue(mock_validate.called)"},{"line_number":129,"context_line":""},{"line_number":130,"context_line":"    @classmethod"},{"line_number":131,"context_line":"    def _vol_in_request_body(self,"},{"line_number":132,"context_line":"                             size\u003dstubs.DEFAULT_VOL_SIZE,"},{"line_number":133,"context_line":"                             name\u003dstubs.DEFAULT_VOL_NAME,"},{"line_number":134,"context_line":"                             description\u003dstubs.DEFAULT_VOL_DESCRIPTION,"}],"source_content_type":"text/x-python","patch_set":7,"id":"dada55a8_16180f84","line":131,"range":{"start_line":131,"start_character":29,"end_line":131,"end_character":33},"in_reply_to":"dada55a8_000a85d2","updated":"2016-07-18 12:32:04.000000000","message":"This is an existing piece of code that was not modified during this change.","commit_id":"1886959abeae61f050cce9b7316d52b3e59a67c9"},{"author":{"_account_id":9171,"name":"Vipin Balachandran","email":"vipin.bl@gmail.com","username":"vbala"},"change_message_id":"ec47eac58ecfa34ee3df43a65aa0d80e23adefb6","unresolved":false,"context_lines":[{"line_number":128,"context_line":"        self.assertTrue(mock_validate.called)"},{"line_number":129,"context_line":""},{"line_number":130,"context_line":"    @classmethod"},{"line_number":131,"context_line":"    def _vol_in_request_body(self,"},{"line_number":132,"context_line":"                             size\u003dstubs.DEFAULT_VOL_SIZE,"},{"line_number":133,"context_line":"                             name\u003dstubs.DEFAULT_VOL_NAME,"},{"line_number":134,"context_line":"                             description\u003dstubs.DEFAULT_VOL_DESCRIPTION,"}],"source_content_type":"text/x-python","patch_set":7,"id":"dada55a8_e87e2fad","line":131,"range":{"start_line":131,"start_character":29,"end_line":131,"end_character":33},"in_reply_to":"dada55a8_16180f84","updated":"2016-07-18 14:14:24.000000000","message":"Earlier it was an instance method, but you changed to a classmethod and we normally use \u0027cls\u0027 or something similar as the first argument.","commit_id":"1886959abeae61f050cce9b7316d52b3e59a67c9"},{"author":{"_account_id":20945,"name":"Satish Venkatasubramanian","email":"satish.venkatasubramanian@gmail.com","username":"satish-venkatasubramanian-7"},"change_message_id":"16647e22aff39f04ec18a072ebee8f9d4a2472bc","unresolved":false,"context_lines":[{"line_number":128,"context_line":"        self.assertTrue(mock_validate.called)"},{"line_number":129,"context_line":""},{"line_number":130,"context_line":"    @classmethod"},{"line_number":131,"context_line":"    def _vol_in_request_body(self,"},{"line_number":132,"context_line":"                             size\u003dstubs.DEFAULT_VOL_SIZE,"},{"line_number":133,"context_line":"                             name\u003dstubs.DEFAULT_VOL_NAME,"},{"line_number":134,"context_line":"                             description\u003dstubs.DEFAULT_VOL_DESCRIPTION,"}],"source_content_type":"text/x-python","patch_set":7,"id":"dada55a8_dfae5597","line":131,"range":{"start_line":131,"start_character":29,"end_line":131,"end_character":33},"in_reply_to":"dada55a8_e87e2fad","updated":"2016-07-19 09:58:04.000000000","message":"Thanks Vipin. Good catch. I\u0027ll fix this in the patch that I am submitting later today.","commit_id":"1886959abeae61f050cce9b7316d52b3e59a67c9"}],"cinder/tests/unit/api/v3/test_volumes.py":[{"author":{"_account_id":9171,"name":"Vipin Balachandran","email":"vipin.bl@gmail.com","username":"vbala"},"change_message_id":"9964f31466c9a4b3a0d79146ac9a4fe8af9d35c0","unresolved":false,"context_lines":[{"line_number":130,"context_line":"        expected \u003d {\u0027volume-summary\u0027: {\u0027volume_size\u0027: 1, \u0027volume_count\u0027: 1}}"},{"line_number":131,"context_line":"        self.assertEqual(expected, res_dict)"},{"line_number":132,"context_line":""},{"line_number":133,"context_line":"    def _vol_in_request_body(self,"},{"line_number":134,"context_line":"                             size\u003dstubs.DEFAULT_VOL_SIZE,"},{"line_number":135,"context_line":"                             name\u003dstubs.DEFAULT_VOL_NAME,"},{"line_number":136,"context_line":"                             description\u003dstubs.DEFAULT_VOL_DESCRIPTION,"}],"source_content_type":"text/x-python","patch_set":5,"id":"3aaa91ec_96792c85","line":133,"range":{"start_line":133,"start_character":4,"end_line":133,"end_character":28},"updated":"2016-06-29 13:41:48.000000000","message":"Please do not duplicate, I think we should move this method to a common location.","commit_id":"39844832a087c5bab33d2832e7dcb653ceec0186"},{"author":{"_account_id":9171,"name":"Vipin Balachandran","email":"vipin.bl@gmail.com","username":"vbala"},"change_message_id":"4375c6e9cfef1e08f5be225f0aff06589d863424","unresolved":false,"context_lines":[{"line_number":122,"context_line":"        expected \u003d {\u0027volume-summary\u0027: {\u0027volume_size\u0027: 0, \u0027volume_count\u0027: 0}}"},{"line_number":123,"context_line":"        self.assertEqual(expected, res_dict)"},{"line_number":124,"context_line":""},{"line_number":125,"context_line":"        vol \u003d v2_test_volumes.VolumeApiTest._vol_in_request_body("},{"line_number":126,"context_line":"            availability_zone\u003d\"nova\")"},{"line_number":127,"context_line":"        body \u003d {\"volume\": vol}"},{"line_number":128,"context_line":"        req \u003d fakes.HTTPRequest.blank(\u0027/v3/volumes\u0027)"}],"source_content_type":"text/x-python","patch_set":7,"id":"dada55a8_20d3493a","line":125,"range":{"start_line":125,"start_character":44,"end_line":125,"end_character":64},"updated":"2016-07-18 11:03:29.000000000","message":"I think it is better to move _vol_in_request_body to a common location instead of creating a dependency on v2 tests.","commit_id":"1886959abeae61f050cce9b7316d52b3e59a67c9"},{"author":{"_account_id":20945,"name":"Satish Venkatasubramanian","email":"satish.venkatasubramanian@gmail.com","username":"satish-venkatasubramanian-7"},"change_message_id":"c61a75da0db757728b98a155cb884680015d3834","unresolved":false,"context_lines":[{"line_number":122,"context_line":"        expected \u003d {\u0027volume-summary\u0027: {\u0027volume_size\u0027: 0, \u0027volume_count\u0027: 0}}"},{"line_number":123,"context_line":"        self.assertEqual(expected, res_dict)"},{"line_number":124,"context_line":""},{"line_number":125,"context_line":"        vol \u003d v2_test_volumes.VolumeApiTest._vol_in_request_body("},{"line_number":126,"context_line":"            availability_zone\u003d\"nova\")"},{"line_number":127,"context_line":"        body \u003d {\"volume\": vol}"},{"line_number":128,"context_line":"        req \u003d fakes.HTTPRequest.blank(\u0027/v3/volumes\u0027)"}],"source_content_type":"text/x-python","patch_set":7,"id":"dada55a8_16312f0c","line":125,"range":{"start_line":125,"start_character":44,"end_line":125,"end_character":64},"in_reply_to":"dada55a8_20d3493a","updated":"2016-07-18 12:32:04.000000000","message":"Here the _vol_in_request_body is already being used by the v2 api calls and hence didn\u0027t want to disturb the way v2 works. \n\nAlso I saw instances where new v3 API\u0027s use existing functions from v2 that are present in v2/volumes.py and hence decided to go ahead with the approach.","commit_id":"1886959abeae61f050cce9b7316d52b3e59a67c9"},{"author":{"_account_id":15961,"name":"lisali","email":"xiaoyan.li@intel.com","username":"lisali"},"change_message_id":"59e5d8acba149c01841e03e7cc55a6729afb5d65","unresolved":false,"context_lines":[{"line_number":133,"context_line":"        req.api_version_request \u003d api_version.APIVersionRequest(\u00273.8\u0027)"},{"line_number":134,"context_line":"        res_dict \u003d self.controller.summary(req)"},{"line_number":135,"context_line":"        expected \u003d {\u0027volume-summary\u0027: {\u0027volume_size\u0027: 1, \u0027volume_count\u0027: 1}}"},{"line_number":136,"context_line":"        self.assertEqual(expected, res_dict)"}],"source_content_type":"text/x-python","patch_set":11,"id":"dada55a8_b5d230cf","line":136,"updated":"2016-07-27 05:53:06.000000000","message":"Better to add wrong version request test like following:\n\nhttps://github.com/openstack/cinder/blob/master/cinder/tests/unit/api/v3/test_cluster.py#L248","commit_id":"4f05aa41974c00074b55636b04078fa1b59c6221"},{"author":{"_account_id":9171,"name":"Vipin Balachandran","email":"vipin.bl@gmail.com","username":"vbala"},"change_message_id":"e7e69b681dad9770a42ee98e080b2b3a9b1908da","unresolved":false,"context_lines":[{"line_number":31,"context_line":""},{"line_number":32,"context_line":"CONF \u003d cfg.CONF"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"DEFAULT_AZ \u003d \"nova\""},{"line_number":35,"context_line":""},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"class VolumeApiTest(test.TestCase):"}],"source_content_type":"text/x-python","patch_set":12,"id":"bacf61ea_0bada131","line":34,"updated":"2016-07-27 14:26:23.000000000","message":"unused","commit_id":"bde607393081fb079650b9b6ce4e9f34937d517f"},{"author":{"_account_id":9171,"name":"Vipin Balachandran","email":"vipin.bl@gmail.com","username":"vbala"},"change_message_id":"e7e69b681dad9770a42ee98e080b2b3a9b1908da","unresolved":false,"context_lines":[{"line_number":135,"context_line":"        req \u003d fakes.HTTPRequest.blank(\u0027/v3/volumes\u0027)"},{"line_number":136,"context_line":"        res_dict \u003d self.controller.create(req, body)"},{"line_number":137,"context_line":""},{"line_number":138,"context_line":"        req \u003d fakes.HTTPRequest.blank(\u0027/v3/volumes/summary\u0027)"},{"line_number":139,"context_line":"        req.headers \u003d {\u0027OpenStack-API-Version\u0027: \u0027volume 3.8\u0027}"},{"line_number":140,"context_line":"        req.api_version_request \u003d api_version.APIVersionRequest(\u00273.8\u0027)"},{"line_number":141,"context_line":"        res_dict \u003d self.controller.summary(req)"},{"line_number":142,"context_line":"        expected \u003d {\u0027volume-summary\u0027: {\u0027volume_size\u0027: 1, \u0027volume_count\u0027: 1}}"},{"line_number":143,"context_line":"        self.assertEqual(expected, res_dict)"}],"source_content_type":"text/x-python","patch_set":12,"id":"bacf61ea_cb16e954","line":140,"range":{"start_line":138,"start_character":8,"end_line":140,"end_character":70},"updated":"2016-07-27 14:26:23.000000000","message":"nit: This is repeated, we can move this to a helper function with the version parameter.","commit_id":"bde607393081fb079650b9b6ce4e9f34937d517f"},{"author":{"_account_id":9171,"name":"Vipin Balachandran","email":"vipin.bl@gmail.com","username":"vbala"},"change_message_id":"27cc80666c3c525b9bec719c8be0b2dea2becf5e","unresolved":false,"context_lines":[{"line_number":114,"context_line":""},{"line_number":115,"context_line":"    def test_volumes_summary(self):"},{"line_number":116,"context_line":"        \"\"\"Function call to test the summary volumes API for version v3.\"\"\""},{"line_number":117,"context_line":"        req \u003d FakeRequest(api_ext\u003d\u0027/v3/volumes/summary\u0027, version\u003d\u00273.7\u0027)"},{"line_number":118,"context_line":"        self.assertRaises(exception.VersionNotFoundForAPIMethod,"},{"line_number":119,"context_line":"                          self.controller.summary, req)"},{"line_number":120,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"bacf61ea_66c81956","line":117,"updated":"2016-08-05 12:35:57.000000000","message":"Please move this negative case to a separate method.\n\nSee https://github.com/openstack/cinder/blob/master/cinder/tests/unit/api/v3/test_backups.py#L52","commit_id":"10aea3c25680d3074f7d2d5bd16ac13193f2b98f"},{"author":{"_account_id":20945,"name":"Satish Venkatasubramanian","email":"satish.venkatasubramanian@gmail.com","username":"satish-venkatasubramanian-7"},"change_message_id":"f1f5b4c1f10ea20e8ff85173619eff64d1034a9f","unresolved":false,"context_lines":[{"line_number":114,"context_line":""},{"line_number":115,"context_line":"    def test_volumes_summary(self):"},{"line_number":116,"context_line":"        \"\"\"Function call to test the summary volumes API for version v3.\"\"\""},{"line_number":117,"context_line":"        req \u003d FakeRequest(api_ext\u003d\u0027/v3/volumes/summary\u0027, version\u003d\u00273.7\u0027)"},{"line_number":118,"context_line":"        self.assertRaises(exception.VersionNotFoundForAPIMethod,"},{"line_number":119,"context_line":"                          self.controller.summary, req)"},{"line_number":120,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"bacf61ea_430a03d3","line":117,"in_reply_to":"bacf61ea_66c81956","updated":"2016-08-06 04:14:09.000000000","message":"I have made this change and have implemented this in my submitted patch.","commit_id":"10aea3c25680d3074f7d2d5bd16ac13193f2b98f"},{"author":{"_account_id":9171,"name":"Vipin Balachandran","email":"vipin.bl@gmail.com","username":"vbala"},"change_message_id":"27cc80666c3c525b9bec719c8be0b2dea2becf5e","unresolved":false,"context_lines":[{"line_number":135,"context_line":"        self.assertEqual(expected, res_dict)"},{"line_number":136,"context_line":""},{"line_number":137,"context_line":""},{"line_number":138,"context_line":"class FakeRequest(object):"},{"line_number":139,"context_line":"    \"\"\"Fake request handler.\"\"\""},{"line_number":140,"context_line":""},{"line_number":141,"context_line":"    def __init__(self, api_ext, version):"}],"source_content_type":"text/x-python","patch_set":14,"id":"bacf61ea_86270d11","line":138,"updated":"2016-08-05 12:35:57.000000000","message":"nit: i prefer using a method instead.\n\nSee https://github.com/openstack/cinder/blob/master/cinder/tests/unit/api/v3/test_backups.py#L43","commit_id":"10aea3c25680d3074f7d2d5bd16ac13193f2b98f"},{"author":{"_account_id":20945,"name":"Satish Venkatasubramanian","email":"satish.venkatasubramanian@gmail.com","username":"satish-venkatasubramanian-7"},"change_message_id":"f1f5b4c1f10ea20e8ff85173619eff64d1034a9f","unresolved":false,"context_lines":[{"line_number":135,"context_line":"        self.assertEqual(expected, res_dict)"},{"line_number":136,"context_line":""},{"line_number":137,"context_line":""},{"line_number":138,"context_line":"class FakeRequest(object):"},{"line_number":139,"context_line":"    \"\"\"Fake request handler.\"\"\""},{"line_number":140,"context_line":""},{"line_number":141,"context_line":"    def __init__(self, api_ext, version):"}],"source_content_type":"text/x-python","patch_set":14,"id":"bacf61ea_83107b01","line":138,"in_reply_to":"bacf61ea_86270d11","updated":"2016-08-06 04:14:09.000000000","message":"I have made this change and have implemented this in my submitted patch as you have suggested.","commit_id":"10aea3c25680d3074f7d2d5bd16ac13193f2b98f"}]}
