)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":5652,"name":"David Ripton","email":"dripton@redhat.com","username":"dripton"},"change_message_id":"271db04d6acf194f05685bd84be1b1407129e853","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Porting os-aggregates extensions to API v3 Part 2"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This includes a set o fixes and improvements to os-aggregates:"},{"line_number":10,"context_line":"    - elinate the action method replacing its functionality with wsgi.action"},{"line_number":11,"context_line":"      decorator."},{"line_number":12,"context_line":"    - Returns explicity and appropriate status codes for each REST action."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"AAAAPn%2F%2F3gY%3D","line":9,"updated":"2013-06-19 13:50:57.000000000","message":"s/o/of/","commit_id":"bbc44499a3981572debca96dd900e41ee5f56a16"},{"author":{"_account_id":5652,"name":"David Ripton","email":"dripton@redhat.com","username":"dripton"},"change_message_id":"271db04d6acf194f05685bd84be1b1407129e853","unresolved":false,"context_lines":[{"line_number":7,"context_line":"Porting os-aggregates extensions to API v3 Part 2"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This includes a set o fixes and improvements to os-aggregates:"},{"line_number":10,"context_line":"    - elinate the action method replacing its functionality with wsgi.action"},{"line_number":11,"context_line":"      decorator."},{"line_number":12,"context_line":"    - Returns explicity and appropriate status codes for each REST action."},{"line_number":13,"context_line":"    - Improves information error passed to the user."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"AAAAPn%2F%2F3gU%3D","line":10,"updated":"2013-06-19 13:50:57.000000000","message":"s/elinate/eliminate/","commit_id":"bbc44499a3981572debca96dd900e41ee5f56a16"}],"nova/api/openstack/compute/plugins/v3/aggregates.py":[{"author":{"_account_id":5652,"name":"David Ripton","email":"dripton@redhat.com","username":"dripton"},"change_message_id":"271db04d6acf194f05685bd84be1b1407129e853","unresolved":false,"context_lines":[{"line_number":37,"context_line":"    \"\"\"Makes sure that the host exists.\"\"\""},{"line_number":38,"context_line":"    def wrapped(self, req, id, body, *args, **kwargs):"},{"line_number":39,"context_line":"        if len(body) \u003d\u003d 1:"},{"line_number":40,"context_line":"            for key in body.keys():"},{"line_number":41,"context_line":"                if len(body[key]) !\u003d 1 or body[key].get(\u0027host\u0027, None) is None:"},{"line_number":42,"context_line":"                    raise exc.HTTPBadRequest()"},{"line_number":43,"context_line":"                host \u003d body[key][\u0027host\u0027]"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAPn%2F%2F3gM%3D","line":40,"updated":"2013-06-19 13:50:57.000000000","message":"if you do for key, value in body.iteritems() here, then you can avoid a bunch of body[key] inside the loop","commit_id":"bbc44499a3981572debca96dd900e41ee5f56a16"},{"author":{"_account_id":5174,"name":"Mauro Sergio Martins Rodrigues","email":"maurosr@linux.vnet.ibm.com","username":"maurosr"},"change_message_id":"7177d17aef9869f199aaf6c4fd52bf8c623f9550","unresolved":false,"context_lines":[{"line_number":37,"context_line":"    \"\"\"Makes sure that the host exists.\"\"\""},{"line_number":38,"context_line":"    def wrapped(self, req, id, body, *args, **kwargs):"},{"line_number":39,"context_line":"        if len(body) \u003d\u003d 1:"},{"line_number":40,"context_line":"            for key in body.keys():"},{"line_number":41,"context_line":"                if len(body[key]) !\u003d 1 or body[key].get(\u0027host\u0027, None) is None:"},{"line_number":42,"context_line":"                    raise exc.HTTPBadRequest()"},{"line_number":43,"context_line":"                host \u003d body[key][\u0027host\u0027]"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAPn%2F%2FuX4%3D","line":40,"in_reply_to":"AAAAPn%2F%2F3gM%3D","updated":"2013-06-24 13:23:13.000000000","message":"good idea. Done","commit_id":"bbc44499a3981572debca96dd900e41ee5f56a16"},{"author":{"_account_id":5292,"name":"Christopher Yeoh","email":"cbkyeoh@gmail.com","username":"cyeoh-0"},"change_message_id":"6d77f9fd172980a2e9fd1627e611a161f60fbd94","unresolved":false,"context_lines":[{"line_number":52,"context_line":"    def __init__(self):"},{"line_number":53,"context_line":"        self.api \u003d compute_api.AggregateAPI()"},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"    @wsgi.response(200)"},{"line_number":56,"context_line":"    def index(self, req):"},{"line_number":57,"context_line":"        \"\"\"Returns a list a host aggregate\u0027s id, name, availability_zone.\"\"\""},{"line_number":58,"context_line":"        context \u003d _get_context(req)"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAPn%2F%2FwGU%3D","line":55,"updated":"2013-06-22 08:28:11.000000000","message":"Do you think we need to explicitly set these all the time where the defaults are correct? What does it gain us?","commit_id":"bbc44499a3981572debca96dd900e41ee5f56a16"},{"author":{"_account_id":5174,"name":"Mauro Sergio Martins Rodrigues","email":"maurosr@linux.vnet.ibm.com","username":"maurosr"},"change_message_id":"7177d17aef9869f199aaf6c4fd52bf8c623f9550","unresolved":false,"context_lines":[{"line_number":52,"context_line":"    def __init__(self):"},{"line_number":53,"context_line":"        self.api \u003d compute_api.AggregateAPI()"},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"    @wsgi.response(200)"},{"line_number":56,"context_line":"    def index(self, req):"},{"line_number":57,"context_line":"        \"\"\"Returns a list a host aggregate\u0027s id, name, availability_zone.\"\"\""},{"line_number":58,"context_line":"        context \u003d _get_context(req)"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAPn%2F%2FuXI%3D","line":55,"in_reply_to":"AAAAPn%2F%2FwGU%3D","updated":"2013-06-24 13:23:13.000000000","message":"Well I think explict is always better than implicit... Also it implies that you were concerned to check what kind of response was appropriate here. If I was reviewing this code and this default response were not explicit I would think: did he forget it or it is the default behavior?\n\nabout thegain: to us developers, not much, to documentation guys I think this is important","commit_id":"bbc44499a3981572debca96dd900e41ee5f56a16"},{"author":{"_account_id":5292,"name":"Christopher Yeoh","email":"cbkyeoh@gmail.com","username":"cyeoh-0"},"change_message_id":"6d77f9fd172980a2e9fd1627e611a161f60fbd94","unresolved":false,"context_lines":[{"line_number":81,"context_line":"            aggregate \u003d self.api.create_aggregate(context, name, avail_zone)"},{"line_number":82,"context_line":"        except exception.AggregateNameExists as e:"},{"line_number":83,"context_line":"            LOG.info(e)"},{"line_number":84,"context_line":"            raise exc.HTTPConflict(explanation\u003de.message)"},{"line_number":85,"context_line":"        except exception.InvalidAggregateAction as e:"},{"line_number":86,"context_line":"            LOG.info(e)"},{"line_number":87,"context_line":"            raise exc.HTTPBadRequest(explanation\u003de.message)"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAPn%2F%2FwGQ%3D","line":84,"updated":"2013-06-22 08:28:11.000000000","message":"Should this be e.format_message()","commit_id":"bbc44499a3981572debca96dd900e41ee5f56a16"},{"author":{"_account_id":5174,"name":"Mauro Sergio Martins Rodrigues","email":"maurosr@linux.vnet.ibm.com","username":"maurosr"},"change_message_id":"7177d17aef9869f199aaf6c4fd52bf8c623f9550","unresolved":false,"context_lines":[{"line_number":81,"context_line":"            aggregate \u003d self.api.create_aggregate(context, name, avail_zone)"},{"line_number":82,"context_line":"        except exception.AggregateNameExists as e:"},{"line_number":83,"context_line":"            LOG.info(e)"},{"line_number":84,"context_line":"            raise exc.HTTPConflict(explanation\u003de.message)"},{"line_number":85,"context_line":"        except exception.InvalidAggregateAction as e:"},{"line_number":86,"context_line":"            LOG.info(e)"},{"line_number":87,"context_line":"            raise exc.HTTPBadRequest(explanation\u003de.message)"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAPn%2F%2FuSA%3D","line":84,"in_reply_to":"AAAAPn%2F%2FwGQ%3D","updated":"2013-06-24 13:23:13.000000000","message":"Done","commit_id":"bbc44499a3981572debca96dd900e41ee5f56a16"},{"author":{"_account_id":5292,"name":"Christopher Yeoh","email":"cbkyeoh@gmail.com","username":"cyeoh-0"},"change_message_id":"11b3a708896ba1f68be5edbe2b2debaf1cb86c6a","unresolved":false,"context_lines":[{"line_number":80,"context_line":"        try:"},{"line_number":81,"context_line":"            aggregate \u003d self.api.create_aggregate(context, name, avail_zone)"},{"line_number":82,"context_line":"        except exception.AggregateNameExists as e:"},{"line_number":83,"context_line":"            LOG.info(e)"},{"line_number":84,"context_line":"            raise exc.HTTPConflict(explanation\u003de.format_message())"},{"line_number":85,"context_line":"        except exception.InvalidAggregateAction as e:"},{"line_number":86,"context_line":"            LOG.info(e)"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAPn%2F%2FbJE%3D","line":83,"updated":"2013-07-02 09:16:34.000000000","message":"I think a lot of these LOG.info\u0027s should either be removed or downgraded to debugs. Its not really information that needs to be logged under normal circumstances. Followup patch would be fine I think.","commit_id":"31c0965b0b2ba937649ee6de650468bca115ea85"},{"author":{"_account_id":5292,"name":"Christopher Yeoh","email":"cbkyeoh@gmail.com","username":"cyeoh-0"},"change_message_id":"1c43cc27b40bb07252aeaf28eee16f5f71f83213","unresolved":false,"context_lines":[{"line_number":52,"context_line":"    def __init__(self):"},{"line_number":53,"context_line":"        self.api \u003d compute_api.AggregateAPI()"},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"    @wsgi.response(200)"},{"line_number":56,"context_line":"    def index(self, req):"},{"line_number":57,"context_line":"        \"\"\"Returns a list a host aggregate\u0027s id, name, availability_zone.\"\"\""},{"line_number":58,"context_line":"        context \u003d _get_context(req)"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAP3%2F%2F0LI%3D","line":55,"updated":"2013-07-11 01:42:42.000000000","message":"I don\u0027t think we should be specifying the response code where the default code is correct unless we find a way to force all extensions to do this. ie I\u0027d like all the extensions to look the same, otherwise it becomes a point of confusion for people reading the code.","commit_id":"a428542a27b85161a7816fd5c34325d3a802c218"},{"author":{"_account_id":5174,"name":"Mauro Sergio Martins Rodrigues","email":"maurosr@linux.vnet.ibm.com","username":"maurosr"},"change_message_id":"2ffc70180243ca02db9d1254644afb6a42b1e6d9","unresolved":false,"context_lines":[{"line_number":52,"context_line":"    def __init__(self):"},{"line_number":53,"context_line":"        self.api \u003d compute_api.AggregateAPI()"},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"    @wsgi.response(200)"},{"line_number":56,"context_line":"    def index(self, req):"},{"line_number":57,"context_line":"        \"\"\"Returns a list a host aggregate\u0027s id, name, availability_zone.\"\"\""},{"line_number":58,"context_line":"        context \u003d _get_context(req)"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAP3%2F%2FuNA%3D","line":55,"in_reply_to":"AAAAP3%2F%2F0LI%3D","updated":"2013-07-12 13:10:17.000000000","message":"I can\u0027t see a way to this make people confuse.. also like explicit things (this would help doc guys a lot)... anyway, I\u0027m doing as requested to get it merged.\nFind a way to force the extensions to have this is not a big deal and I\u0027ll figure out a way soon and then I can add this piece again.\n\nthanks","commit_id":"a428542a27b85161a7816fd5c34325d3a802c218"},{"author":{"_account_id":5292,"name":"Christopher Yeoh","email":"cbkyeoh@gmail.com","username":"cyeoh-0"},"change_message_id":"1c43cc27b40bb07252aeaf28eee16f5f71f83213","unresolved":false,"context_lines":[{"line_number":80,"context_line":"        try:"},{"line_number":81,"context_line":"            aggregate \u003d self.api.create_aggregate(context, name, avail_zone)"},{"line_number":82,"context_line":"        except exception.AggregateNameExists as e:"},{"line_number":83,"context_line":"            LOG.info(e)"},{"line_number":84,"context_line":"            raise exc.HTTPConflict(explanation\u003de.format_message())"},{"line_number":85,"context_line":"        except exception.InvalidAggregateAction as e:"},{"line_number":86,"context_line":"            LOG.info(e)"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAP3%2F%2F0H0%3D","line":83,"updated":"2013-07-11 01:42:42.000000000","message":"Because these are pretty much expected code paths I think most of these LOG.info cases in this extension should be downgraded to either a LOG.debug or removed completely (this is one example I think where it would be reasonable to just remove it).","commit_id":"a428542a27b85161a7816fd5c34325d3a802c218"},{"author":{"_account_id":5174,"name":"Mauro Sergio Martins Rodrigues","email":"maurosr@linux.vnet.ibm.com","username":"maurosr"},"change_message_id":"2ffc70180243ca02db9d1254644afb6a42b1e6d9","unresolved":false,"context_lines":[{"line_number":80,"context_line":"        try:"},{"line_number":81,"context_line":"            aggregate \u003d self.api.create_aggregate(context, name, avail_zone)"},{"line_number":82,"context_line":"        except exception.AggregateNameExists as e:"},{"line_number":83,"context_line":"            LOG.info(e)"},{"line_number":84,"context_line":"            raise exc.HTTPConflict(explanation\u003de.format_message())"},{"line_number":85,"context_line":"        except exception.InvalidAggregateAction as e:"},{"line_number":86,"context_line":"            LOG.info(e)"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAP3%2F%2FuNg%3D","line":83,"in_reply_to":"AAAAP3%2F%2F0H0%3D","updated":"2013-07-12 13:10:17.000000000","message":"Done","commit_id":"a428542a27b85161a7816fd5c34325d3a802c218"}]}
