)]}'
{"bin/nova-manage":[{"author":{"_account_id":679,"name":"Kevin L. Mitchell","email":"klmitch@mit.edu","username":"klmitch"},"change_message_id":"bf5472702adad81f9b53b8f1bf0b9f737f6b05e7","unresolved":false,"context_lines":[{"line_number":224,"context_line":"class ProjectCommands(object):"},{"line_number":225,"context_line":"    \"\"\"Class for managing projects.\"\"\""},{"line_number":226,"context_line":""},{"line_number":227,"context_line":"    def quota(self, project_id, key\u003dNone, value\u003dNone):"},{"line_number":228,"context_line":"        \"\"\"Set or display quotas for project\"\"\""},{"line_number":229,"context_line":"        ctxt \u003d context.get_admin_context()"},{"line_number":230,"context_line":"        if key:"}],"source_content_type":"application/octet-stream","patch_set":2,"id":"AAAALH%2F%2Ft4w%3D","line":227,"updated":"2012-08-16 16:27:39.000000000","message":"I think the @args() were left out (or taken out) at some point, and should probably be put back in…","commit_id":"322c287c7ea739339aabc39eed5fd843c72ebe07"},{"author":{"_account_id":679,"name":"Kevin L. Mitchell","email":"klmitch@mit.edu","username":"klmitch"},"change_message_id":"76e70e820ebe435f26fa6ce1dab9c809fb2b3cea","unresolved":false,"context_lines":[{"line_number":226,"context_line":""},{"line_number":227,"context_line":"    @args(\u0027--project\u0027, dest\u003d\"project_id\", metavar\u003d\u0027\u003cProject name\u003e\u0027,"},{"line_number":228,"context_line":"            help\u003d\u0027Project name\u0027)"},{"line_number":229,"context_line":"    def quota(self, project_id, key\u003dNone, value\u003dNone):"},{"line_number":230,"context_line":"        \"\"\"Set or display quotas for project\"\"\""},{"line_number":231,"context_line":"        ctxt \u003d context.get_admin_context()"},{"line_number":232,"context_line":"        if key:"}],"source_content_type":"application/octet-stream","patch_set":5,"id":"AAAALH%2F%2Ft2I%3D","line":229,"updated":"2012-08-16 16:57:55.000000000","message":"Wouldn\u0027t we need @args for the key and value parameters as well?  AFAICT, they would only be used when trying to use this CLI command to set a quota…","commit_id":"e2eecc6442c35d5c0af8edd2e3e1103773d67d02"}],"nova/db/sqlalchemy/migrate_repo/versions/116_drop_user_quotas_key_and_value.py":[{"author":{"_account_id":1030,"name":"Chris Behrens","email":"cbehrens@codestud.com","username":"cbehrens"},"change_message_id":"8d389a2b374bcb91aad137421ae4a2e6a1b0bf20","unresolved":false,"context_lines":[{"line_number":27,"context_line":"    meta.bind \u003d migrate_engine"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"    quota_usages \u003d Table(\u0027quota_usages\u0027, meta, autoload\u003dTrue)"},{"line_number":30,"context_line":"    quota_usages.drop_column(\u0027user_id\u0027)"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"    reservations \u003d Table(\u0027reservations\u0027, meta, autoload\u003dTrue)"},{"line_number":33,"context_line":"    reservations.drop_column(\u0027user_id\u0027)"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAALH%2F%2Ft3E%3D","line":30,"updated":"2012-08-16 16:47:22.000000000","message":"Should this migration remove entries from the DB where user_id !\u003d NULL, also?  I\u0027m not sure the answer.  After dropping user_id, we could have duplicate entries in the DB for a particular project_id for the same resource...  If I\u0027d temporarily ran the user quota code, for instance, I\u0027d have the old entries where user_id \u003d NULL and the new entries where user_id is set.","commit_id":"322c287c7ea739339aabc39eed5fd843c72ebe07"},{"author":{"_account_id":679,"name":"Kevin L. Mitchell","email":"klmitch@mit.edu","username":"klmitch"},"change_message_id":"4f4a7d585474add9ce3ecff454bbf4a6985d63f4","unresolved":false,"context_lines":[{"line_number":27,"context_line":"    meta.bind \u003d migrate_engine"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"    quota_usages \u003d Table(\u0027quota_usages\u0027, meta, autoload\u003dTrue)"},{"line_number":30,"context_line":"    quota_usages.drop_column(\u0027user_id\u0027)"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"    reservations \u003d Table(\u0027reservations\u0027, meta, autoload\u003dTrue)"},{"line_number":33,"context_line":"    reservations.drop_column(\u0027user_id\u0027)"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAALH%2F%2Ft2Y%3D","line":30,"in_reply_to":"AAAALH%2F%2Ft3E%3D","updated":"2012-08-16 16:55:46.000000000","message":"After talking with Chris off-line, we\u0027ve come to the conclusion that the best thing to do might be to delete all entries from the usages and reservations tables as well.  If a usage doesn\u0027t exist, it forces a resync next time we do an operation, and if a reservation doesn\u0027t exist when committed or rolled back, the error is just ignored.","commit_id":"322c287c7ea739339aabc39eed5fd843c72ebe07"},{"author":{"_account_id":679,"name":"Kevin L. Mitchell","email":"klmitch@mit.edu","username":"klmitch"},"change_message_id":"76e70e820ebe435f26fa6ce1dab9c809fb2b3cea","unresolved":false,"context_lines":[{"line_number":27,"context_line":"    meta.bind \u003d migrate_engine"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"    quota_usages \u003d Table(\u0027quota_usages\u0027, meta, autoload\u003dTrue)"},{"line_number":30,"context_line":"    quota_usages.drop_column(\u0027user_id\u0027)"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"    reservations \u003d Table(\u0027reservations\u0027, meta, autoload\u003dTrue)"},{"line_number":33,"context_line":"    reservations.drop_column(\u0027user_id\u0027)"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAALH%2F%2Ft2E%3D","line":30,"updated":"2012-08-16 16:57:55.000000000","message":"See Behrens and my comments from patch set 2…","commit_id":"e2eecc6442c35d5c0af8edd2e3e1103773d67d02"},{"author":{"_account_id":1247,"name":"Mark McLoughlin","email":"markmc@redhat.com","username":"markmc"},"change_message_id":"a1f0b714901f11a802b6e2313866f4044a0eaf47","unresolved":false,"context_lines":[{"line_number":27,"context_line":"    meta.bind \u003d migrate_engine"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"    reservations \u003d Table(\u0027reservations\u0027, meta, autoload\u003dTrue)"},{"line_number":30,"context_line":"    d \u003d reservations.delete(reservations.c.deleted \u003d\u003d True)"},{"line_number":31,"context_line":"    d.execute()"},{"line_number":32,"context_line":"    reservations.drop_column(\u0027user_id\u0027)"},{"line_number":33,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAALH%2F%2Fteo%3D","line":30,"updated":"2012-08-16 23:31:11.000000000","message":"This seems a bit odd - i.e. it\u0027s not constrained to per-user quotas? Why not user_id !\u003d None?","commit_id":"bf7862222d25c9bd09671b90fed3287cbe26e488"},{"author":{"_account_id":2284,"name":"Eoghan Glynn","email":"eglynn@redhat.com","username":"eglynn"},"change_message_id":"6c4db9c4314cb6ce090a62dc6b1da29e9aa16bf5","unresolved":false,"context_lines":[{"line_number":27,"context_line":"    meta.bind \u003d migrate_engine"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"    reservations \u003d Table(\u0027reservations\u0027, meta, autoload\u003dTrue)"},{"line_number":30,"context_line":"    d \u003d reservations.delete(reservations.c.deleted \u003d\u003d True)"},{"line_number":31,"context_line":"    d.execute()"},{"line_number":32,"context_line":"    reservations.drop_column(\u0027user_id\u0027)"},{"line_number":33,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAALH%2F%2FtQ0%3D","line":30,"in_reply_to":"AAAALH%2F%2Fteo%3D","updated":"2012-08-17 06:24:06.000000000","message":"See my comment on patch set 8:\n\n\"Latest patch set clears out the reservations table also, to avoid a foreign key constraint failure on reservations.usage_id when the quota_usages rows with non-NULL user_id are deleted.\"\n\nThe reason I didn\u0027t delete user_id !\u003d None instead was to avoid the possibility of blowing away an uncommitted reservation (i.e with deleted \u003d \u00270\u0027).\n\nBut such in-flight reservations shouldn\u0027t really coincide with an upgrade (e.g. it would be nasty to start an upgrade with some unconfirmed resizes hanging around).","commit_id":"bf7862222d25c9bd09671b90fed3287cbe26e488"}]}
