)]}'
{"nova/api/metadata/base.py":[{"author":{"_account_id":1082,"name":"Scott Moser","email":"smoser@ubuntu.com","username":"smoser"},"change_message_id":"6b0787d07079b23ef8308d9ce210ba0be2570da2","unresolved":false,"context_lines":[{"line_number":270,"context_line":"            if self.userdata_raw is not None:"},{"line_number":271,"context_line":"                ret.append(UD_NAME)"},{"line_number":272,"context_line":"            if self._check_os_version(\u0027experimental\u0027, version):"},{"line_number":273,"context_line":"                ret.append(PASS_NAME)"},{"line_number":274,"context_line":"            return ret"},{"line_number":275,"context_line":""},{"line_number":276,"context_line":"        if path \u003d\u003d UD_NAME:"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAMX%2F%2F%2B9o%3D","line":273,"updated":"2012-12-03 21:36:00.000000000","message":"The way this is implemented here means someone will have to change multiple parts of code to make this no longer \"experimental\". it\u0027d be better if it were one place in the code to flip current experimental to \"today\".","commit_id":"bc735335cd9b245d940b371c9bd0c8dc23dfb987"},{"author":{"_account_id":67,"name":"Vish Ishaya","email":"vishvananda@gmail.com","username":"vishvananda"},"change_message_id":"a0e467c2394c832c4f2514c3e9cf9c108e0b20f7","unresolved":false,"context_lines":[{"line_number":270,"context_line":"            if self.userdata_raw is not None:"},{"line_number":271,"context_line":"                ret.append(UD_NAME)"},{"line_number":272,"context_line":"            if self._check_os_version(\u0027experimental\u0027, version):"},{"line_number":273,"context_line":"                ret.append(PASS_NAME)"},{"line_number":274,"context_line":"            return ret"},{"line_number":275,"context_line":""},{"line_number":276,"context_line":"        if path \u003d\u003d UD_NAME:"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAMX%2F%2F%2B48%3D","line":273,"in_reply_to":"AAAAMX%2F%2F%2B9o%3D","updated":"2012-12-03 21:50:42.000000000","message":"sure. I could make a const called GRIZZLY and set it to \u0027experimental\u0027 until we get to release time","commit_id":"bc735335cd9b245d940b371c9bd0c8dc23dfb987"},{"author":{"_account_id":1082,"name":"Scott Moser","email":"smoser@ubuntu.com","username":"smoser"},"change_message_id":"6b0787d07079b23ef8308d9ce210ba0be2570da2","unresolved":false,"context_lines":[{"line_number":279,"context_line":"            return self.userdata_raw"},{"line_number":280,"context_line":""},{"line_number":281,"context_line":"        if path \u003d\u003d PASS_NAME:"},{"line_number":282,"context_line":"            return password.handle_password"},{"line_number":283,"context_line":""},{"line_number":284,"context_line":"        if path !\u003d MD_JSON_NAME:"},{"line_number":285,"context_line":"            raise KeyError(path)"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAMX%2F%2F%2B9k%3D","line":282,"updated":"2012-12-03 21:36:00.000000000","message":"It seems that someone could post to the older MD version and have it accepted.","commit_id":"bc735335cd9b245d940b371c9bd0c8dc23dfb987"},{"author":{"_account_id":67,"name":"Vish Ishaya","email":"vishvananda@gmail.com","username":"vishvananda"},"change_message_id":"a0e467c2394c832c4f2514c3e9cf9c108e0b20f7","unresolved":false,"context_lines":[{"line_number":279,"context_line":"            return self.userdata_raw"},{"line_number":280,"context_line":""},{"line_number":281,"context_line":"        if path \u003d\u003d PASS_NAME:"},{"line_number":282,"context_line":"            return password.handle_password"},{"line_number":283,"context_line":""},{"line_number":284,"context_line":"        if path !\u003d MD_JSON_NAME:"},{"line_number":285,"context_line":"            raise KeyError(path)"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAMX%2F%2F%2B44%3D","line":282,"in_reply_to":"AAAAMX%2F%2F%2B9k%3D","updated":"2012-12-03 21:50:42.000000000","message":"good point i need a check version here too.","commit_id":"bc735335cd9b245d940b371c9bd0c8dc23dfb987"},{"author":{"_account_id":1082,"name":"Scott Moser","email":"smoser@ubuntu.com","username":"smoser"},"change_message_id":"cc49675915e6e8f64fa9b8a89f1efa6da2334604","unresolved":false,"context_lines":[{"line_number":61,"context_line":""},{"line_number":62,"context_line":"FOLSOM \u003d \u00272012-08-10\u0027"},{"line_number":63,"context_line":"GRIZZLY \u003d \u00272013-04-04\u0027"},{"line_number":64,"context_line":"# NOTE(vish): change the above to a date at release time"},{"line_number":65,"context_line":"OPENSTACK_VERSIONS \u003d ["},{"line_number":66,"context_line":"    FOLSOM,"},{"line_number":67,"context_line":"    GRIZZLY,"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAMX%2F%2F8gA%3D","line":64,"updated":"2012-12-05 17:40:12.000000000","message":"I think this comment is at least confusing, and maybe not necessary.\nBecause you have the date based check below, you dont actually need to change this at all, do you?","commit_id":"00180f94a7dfdb295cb0cb4a691f98aa3cc867e0"}],"nova/api/metadata/password.py":[{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"959f0b185773a2144db1942f62ccac9fd65256a5","unresolved":false,"context_lines":[{"line_number":32,"context_line":"            raise exc.HTTPConflict()"},{"line_number":33,"context_line":"        db.instance_system_metadata_update(ctxt,"},{"line_number":34,"context_line":"                                           meta_data.uuid,"},{"line_number":35,"context_line":"                                           {\u0027password\u0027: req.body},"},{"line_number":36,"context_line":"                                           False)"},{"line_number":37,"context_line":"    else:"},{"line_number":38,"context_line":"        raise exc.HTTPBadRequest()"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAMX%2F%2F8Ac%3D","line":35,"updated":"2012-12-06 00:58:10.000000000","message":"Eck, is this where the body gets read?\n\nWill that sit there and suck up humongous files posted by nice hacker man.","commit_id":"a195783925868b3cfc4816801ba31e6aafdea56a"},{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"9c563b0a00dcabeff278fcf12be0e978cb5eed5f","unresolved":false,"context_lines":[{"line_number":31,"context_line":"        #             a short window."},{"line_number":32,"context_line":"        if meta_data.password:"},{"line_number":33,"context_line":"            raise exc.HTTPConflict()"},{"line_number":34,"context_line":"        if (req.content_length \u003e MAX_SIZE or len(req.body) \u003e MAX_SIZE):"},{"line_number":35,"context_line":"            msg \u003d _(\"Request is too large.\")"},{"line_number":36,"context_line":"            raise exc.HTTPBadRequest(explanation\u003dmsg)"},{"line_number":37,"context_line":"        db.instance_system_metadata_update(ctxt,"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAMX%2F%2F4aA%3D","line":34,"updated":"2012-12-11 01:30:10.000000000","message":"?? len(req.body) would have to read the body to calculate this correct? I\u0027m unsure how the underlying impl handles this, but it seems like req.body would be a property backed by reading a stream, getting the len of said property probably forces u to read the whole thing in (to get said length).\n\nPerhaps just depending on req.content_length which should be tied to the \u0027content-length\u0027 header (sent before the body of the request) would be the correct way to handle this size check?","commit_id":"4332804bbd0d041cfc3402445d52320f6400885c"},{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"10d8c7bc0d66ab4b7871b329ef9ba9ad4fd235b8","unresolved":false,"context_lines":[{"line_number":31,"context_line":"        #             a short window."},{"line_number":32,"context_line":"        if meta_data.password:"},{"line_number":33,"context_line":"            raise exc.HTTPConflict()"},{"line_number":34,"context_line":"        if (req.content_length \u003e MAX_SIZE or len(req.body) \u003e MAX_SIZE):"},{"line_number":35,"context_line":"            msg \u003d _(\"Request is too large.\")"},{"line_number":36,"context_line":"            raise exc.HTTPBadRequest(explanation\u003dmsg)"},{"line_number":37,"context_line":"        db.instance_system_metadata_update(ctxt,"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAMX%2F%2F4Zc%3D","line":34,"in_reply_to":"AAAAMX%2F%2F4Z0%3D","updated":"2012-12-11 01:36:47.000000000","message":"See: https://github.com/Pylons/webob/blob/master/webob/request.py#L257\n\nIt seems like webob trusts the content-length which isn\u0027t the best practice to do :-P","commit_id":"4332804bbd0d041cfc3402445d52320f6400885c"},{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"7262a85b7f1409bcc36597891cdae1c23e51aa2d","unresolved":false,"context_lines":[{"line_number":31,"context_line":"        #             a short window."},{"line_number":32,"context_line":"        if meta_data.password:"},{"line_number":33,"context_line":"            raise exc.HTTPConflict()"},{"line_number":34,"context_line":"        if (req.content_length \u003e MAX_SIZE or len(req.body) \u003e MAX_SIZE):"},{"line_number":35,"context_line":"            msg \u003d _(\"Request is too large.\")"},{"line_number":36,"context_line":"            raise exc.HTTPBadRequest(explanation\u003dmsg)"},{"line_number":37,"context_line":"        db.instance_system_metadata_update(ctxt,"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAMX%2F%2F4Z0%3D","line":34,"in_reply_to":"AAAAMX%2F%2F4aA%3D","updated":"2012-12-11 01:32:27.000000000","message":"The question here becomes what to do when the req.content_length is lied about I guess (ie fake the header). It\u0027d probably be more useful to get whatever stream is under req.body and only read the selected amount of bytes from it directly.","commit_id":"4332804bbd0d041cfc3402445d52320f6400885c"},{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"80962c1d383e82c4cecda7d07274775512d2a38b","unresolved":false,"context_lines":[{"line_number":33,"context_line":"        #             a short window."},{"line_number":34,"context_line":"        if meta_data.password:"},{"line_number":35,"context_line":"            raise exc.HTTPConflict()"},{"line_number":36,"context_line":"        if (req.content_length \u003e MAX_SIZE or len(req.body) \u003e MAX_SIZE):"},{"line_number":37,"context_line":"            msg \u003d _(\"Request is too large.\")"},{"line_number":38,"context_line":"            raise exc.HTTPBadRequest(explanation\u003dmsg)"},{"line_number":39,"context_line":"        db.instance_system_metadata_update(ctxt,"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAMX%2F%2F4V0%3D","line":36,"updated":"2012-12-11 03:22:33.000000000","message":"from webob.request import Request\nclass SafeRequest(Request):\n    def body_limited(self, max_length):\n        return self.body_file_seekable.read(max_length)\n\nOr: http://www.w3.org/Protocols/rfc2616/rfc2616.txt see section 4.4, maybe if content-length not provided or does not match, raise 400.","commit_id":"a2101c4e7017715af0a29675b89e14ee2884bd89"}]}
