)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"d055e184df37e140a894a691b2d17dadfefbbbfa","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Adding update_metadata API to metadata service"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Refactored routing logic in metadata/base.py."},{"line_number":10,"context_line":"Added an API to metadata service to update metdata"},{"line_number":11,"context_line":"of an instance."},{"line_number":12,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"AAAAUH%2F9vx0%3D","line":9,"updated":"2014-02-04 12:57:36.000000000","message":"Please split out this bit into a separate change.","commit_id":"725bcaa66ccb9598327ea40c00f9f3f59aad4153"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"68925bcf166c527a6a9e3a44896deafa1f1d85cc","unresolved":false,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Refactored routing logic in metadata/base.py."},{"line_number":10,"context_line":"Added an API to metadata service to update metdata"},{"line_number":11,"context_line":"of an instance."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Change-Id: Ie1885c439f3d119032dd1c7c7af070142987ba7f"},{"line_number":14,"context_line":"Implements: blueprint metadata-service-callbacks"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"AAAAUH%2F9vv4%3D","line":11,"updated":"2014-02-04 12:58:05.000000000","message":"I should have said, we will need more detail than this, in the end.","commit_id":"725bcaa66ccb9598327ea40c00f9f3f59aad4153"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"d055e184df37e140a894a691b2d17dadfefbbbfa","unresolved":false,"context_lines":[{"line_number":10,"context_line":"Added an API to metadata service to update metdata"},{"line_number":11,"context_line":"of an instance."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Change-Id: Ie1885c439f3d119032dd1c7c7af070142987ba7f"},{"line_number":14,"context_line":"Implements: blueprint metadata-service-callbacks"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"AAAAUH%2F9vxw%3D","line":13,"updated":"2014-02-04 12:57:36.000000000","message":"please add DocImpact","commit_id":"725bcaa66ccb9598327ea40c00f9f3f59aad4153"}],"nova/api/metadata/base.py":[{"author":{"_account_id":144,"name":"justinsb","email":"justin@fathomdb.com","username":"justin-fathomdb"},"change_message_id":"34e84e9692f99515ec41311958f31408069c4baf","unresolved":false,"context_lines":[{"line_number":284,"context_line":"        # get_ec2_metadata returns dict without top level version"},{"line_number":285,"context_line":"        data \u003d self.get_ec2_metadata(path_tokens[0])"},{"line_number":286,"context_line":"        return find_path_in_tree(data, path_tokens[1:])"},{"line_number":287,"context_line":""},{"line_number":288,"context_line":"    def _metadata_as_json(self, version, path):"},{"line_number":289,"context_line":"        metadata \u003d {\u0027uuid\u0027: self.uuid}"},{"line_number":290,"context_line":"        if self.launch_metadata:"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAUH%2F9gSs%3D","line":287,"updated":"2014-02-06 13:26:32.000000000","message":"Suggestion: if you reorder the methods to better match the old code, does git give a better diff (i.e. one that is easier to verify as equivalent)?","commit_id":"1f9a5d640cc5801679b233903939f3988926c045"},{"author":{"_account_id":9987,"name":"Aneesh Puliyedath Udumbath","email":"aneesh.udumbath@RACKSPACE.COM","username":"aneeshpu"},"change_message_id":"6822bfde0d9e967010a19de6c1107167e07053cf","unresolved":false,"context_lines":[{"line_number":284,"context_line":"        # get_ec2_metadata returns dict without top level version"},{"line_number":285,"context_line":"        data \u003d self.get_ec2_metadata(path_tokens[0])"},{"line_number":286,"context_line":"        return find_path_in_tree(data, path_tokens[1:])"},{"line_number":287,"context_line":""},{"line_number":288,"context_line":"    def _metadata_as_json(self, version, path):"},{"line_number":289,"context_line":"        metadata \u003d {\u0027uuid\u0027: self.uuid}"},{"line_number":290,"context_line":"        if self.launch_metadata:"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAUH%2F9Xh4%3D","line":287,"in_reply_to":"AAAAUH%2F9gSs%3D","updated":"2014-02-07 12:12:45.000000000","message":"Done","commit_id":"1f9a5d640cc5801679b233903939f3988926c045"},{"author":{"_account_id":144,"name":"justinsb","email":"justin@fathomdb.com","username":"justin-fathomdb"},"change_message_id":"34e84e9692f99515ec41311958f31408069c4baf","unresolved":false,"context_lines":[{"line_number":288,"context_line":"    def _metadata_as_json(self, version, path):"},{"line_number":289,"context_line":"        metadata \u003d {\u0027uuid\u0027: self.uuid}"},{"line_number":290,"context_line":"        if self.launch_metadata:"},{"line_number":291,"context_line":"            metadata[\u0027meta\u0027] \u003d self.launch_metadata"},{"line_number":292,"context_line":"        if self.files:"},{"line_number":293,"context_line":"            metadata[\u0027files\u0027] \u003d self.files"},{"line_number":294,"context_line":"        if self.extra_md:"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAUH%2F9gXg%3D","line":291,"updated":"2014-02-06 13:26:32.000000000","message":"This to me is the \"smoking gun\" that a refactor was needed.  launch_metadata was actually set twice, and that has been the case since it was first written (in 2012).  I didn\u0027t notice \u0026 nor did anybody else.","commit_id":"1f9a5d640cc5801679b233903939f3988926c045"},{"author":{"_account_id":144,"name":"justinsb","email":"justin@fathomdb.com","username":"justin-fathomdb"},"change_message_id":"34e84e9692f99515ec41311958f31408069c4baf","unresolved":false,"context_lines":[{"line_number":358,"context_line":""},{"line_number":359,"context_line":"        version \u003d self._version(path_tokens[0])"},{"line_number":360,"context_line":""},{"line_number":361,"context_line":"        if len(path_tokens) \u003d\u003d 1:"},{"line_number":362,"context_line":"            return self._handle_version(version)"},{"line_number":363,"context_line":""},{"line_number":364,"context_line":"        return self._route_configuration().handle_path(path_tokens, version)"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAUH%2F9gQc%3D","line":361,"updated":"2014-02-06 13:26:32.000000000","message":"Any reason we can\u0027t put this into the route_configuration as well?  If not, a comment as to why not would be welcome!","commit_id":"1f9a5d640cc5801679b233903939f3988926c045"},{"author":{"_account_id":9987,"name":"Aneesh Puliyedath Udumbath","email":"aneesh.udumbath@RACKSPACE.COM","username":"aneeshpu"},"change_message_id":"6822bfde0d9e967010a19de6c1107167e07053cf","unresolved":false,"context_lines":[{"line_number":358,"context_line":""},{"line_number":359,"context_line":"        version \u003d self._version(path_tokens[0])"},{"line_number":360,"context_line":""},{"line_number":361,"context_line":"        if len(path_tokens) \u003d\u003d 1:"},{"line_number":362,"context_line":"            return self._handle_version(version)"},{"line_number":363,"context_line":""},{"line_number":364,"context_line":"        return self._route_configuration().handle_path(path_tokens, version)"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAUH%2F9Xho%3D","line":361,"in_reply_to":"AAAAUH%2F9gQc%3D","updated":"2014-02-07 12:12:45.000000000","message":"Done","commit_id":"1f9a5d640cc5801679b233903939f3988926c045"},{"author":{"_account_id":144,"name":"justinsb","email":"justin@fathomdb.com","username":"justin-fathomdb"},"change_message_id":"34e84e9692f99515ec41311958f31408069c4baf","unresolved":false,"context_lines":[{"line_number":361,"context_line":"        if len(path_tokens) \u003d\u003d 1:"},{"line_number":362,"context_line":"            return self._handle_version(version)"},{"line_number":363,"context_line":""},{"line_number":364,"context_line":"        return self._route_configuration().handle_path(path_tokens, version)"},{"line_number":365,"context_line":""},{"line_number":366,"context_line":"    def _check_version(self, required, requested, versions\u003dVERSIONS):"},{"line_number":367,"context_line":"        return versions.index(requested) \u003e\u003d versions.index(required)"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAUH%2F9gQA%3D","line":364,"updated":"2014-02-06 13:26:32.000000000","message":"Idea: in future, route_configuration could take a version, and we would only add the relevant instance handlers.  Some of the stuff here at first looks like overkill, but in that light, I think we should go with it.","commit_id":"1f9a5d640cc5801679b233903939f3988926c045"},{"author":{"_account_id":9987,"name":"Aneesh Puliyedath Udumbath","email":"aneesh.udumbath@RACKSPACE.COM","username":"aneeshpu"},"change_message_id":"6822bfde0d9e967010a19de6c1107167e07053cf","unresolved":false,"context_lines":[{"line_number":361,"context_line":"        if len(path_tokens) \u003d\u003d 1:"},{"line_number":362,"context_line":"            return self._handle_version(version)"},{"line_number":363,"context_line":""},{"line_number":364,"context_line":"        return self._route_configuration().handle_path(path_tokens, version)"},{"line_number":365,"context_line":""},{"line_number":366,"context_line":"    def _check_version(self, required, requested, versions\u003dVERSIONS):"},{"line_number":367,"context_line":"        return versions.index(requested) \u003e\u003d versions.index(required)"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAUH%2F9XhY%3D","line":364,"in_reply_to":"AAAAUH%2F9gQA%3D","updated":"2014-02-07 12:12:45.000000000","message":"This is a great idea. Could probably implement this sometime in the near future once these changes make it upstream","commit_id":"1f9a5d640cc5801679b233903939f3988926c045"},{"author":{"_account_id":144,"name":"justinsb","email":"justin@fathomdb.com","username":"justin-fathomdb"},"change_message_id":"34e84e9692f99515ec41311958f31408069c4baf","unresolved":false,"context_lines":[{"line_number":455,"context_line":"            yield (\u0027%s/%s/%s\u0027 % (\"openstack\", CONTENT_DIR, cid), content)"},{"line_number":456,"context_line":""},{"line_number":457,"context_line":""},{"line_number":458,"context_line":"class RouteConfiguration(object):"},{"line_number":459,"context_line":"    def __init__(self, path_handler):"},{"line_number":460,"context_line":"        self.path_handlers \u003d path_handler"},{"line_number":461,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAUH%2F9gRg%3D","line":458,"updated":"2014-02-06 13:26:32.000000000","message":"I think this needs a comment to describe what it does.\n\ne.g.\n\n\"\"Map from metadata paths to request handlers\"\"\"","commit_id":"1f9a5d640cc5801679b233903939f3988926c045"},{"author":{"_account_id":9987,"name":"Aneesh Puliyedath Udumbath","email":"aneesh.udumbath@RACKSPACE.COM","username":"aneeshpu"},"change_message_id":"6822bfde0d9e967010a19de6c1107167e07053cf","unresolved":false,"context_lines":[{"line_number":455,"context_line":"            yield (\u0027%s/%s/%s\u0027 % (\"openstack\", CONTENT_DIR, cid), content)"},{"line_number":456,"context_line":""},{"line_number":457,"context_line":""},{"line_number":458,"context_line":"class RouteConfiguration(object):"},{"line_number":459,"context_line":"    def __init__(self, path_handler):"},{"line_number":460,"context_line":"        self.path_handlers \u003d path_handler"},{"line_number":461,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAUH%2F9XhU%3D","line":458,"in_reply_to":"AAAAUH%2F9gRg%3D","updated":"2014-02-07 12:12:45.000000000","message":"Done","commit_id":"1f9a5d640cc5801679b233903939f3988926c045"}],"nova/api/metadata/update.py":[{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"d055e184df37e140a894a691b2d17dadfefbbbfa","unresolved":false,"context_lines":[{"line_number":42,"context_line":"            metadata[METADATA_KEY_PREFIX + k] \u003d v"},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"        instance \u003d instance_meta_data.instance"},{"line_number":45,"context_line":"        ctx \u003d context.get_admin_context()"},{"line_number":46,"context_line":"        compute_api.API().update_instance_metadata(ctx, instance,"},{"line_number":47,"context_line":"                                                   metadata)"},{"line_number":48,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAUH%2F9vxc%3D","line":45,"updated":"2014-02-04 12:57:36.000000000","message":"This feels bad, but it copies the get_password logic. Need to ensure this still respects QUOTAs.","commit_id":"725bcaa66ccb9598327ea40c00f9f3f59aad4153"}]}
